diff --git a/DEPS b/DEPS index 0d76b9c..02874f5 100644 --- a/DEPS +++ b/DEPS
@@ -40,11 +40,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': '5b071782585024bd75a203f3cde0429bfb7ec99d', + 'skia_revision': '5aa3a84d27ddaa787b301428940ec3035d7c0bef', # 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': '2a4a00d524586b4dcbd4984c8de24ab57d40203d', + 'v8_revision': '314b5db3a09db13b98bab13c67690ab45d5f0195', # 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. @@ -52,7 +52,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': 'ef66151703318c4c5c975c01e8d1b1efbaf97b0b', + 'angle_revision': 'a42a4e5ebfff75ef865a9d5623f1ff5dbf1539b2', # 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. @@ -64,7 +64,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. - 'pdfium_revision': '827f6ff220edea40252e52d128662d37a591fdb9', + 'pdfium_revision': '7bec2ff744a71a0a7e0fec86be13095a323375ab', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling openmax_dl # and whatever else without interference from each other. @@ -96,7 +96,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling catapult # and whatever else without interference from each other. - 'catapult_revision': '1f8f863067fedbc11bf9f2ee92d5e3c072dfdac5', + 'catapult_revision': '7149cbfdfd26a5dd8e5d96cbb1da9356e2813a5d', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -211,7 +211,7 @@ Var('chromium_git') + '/webm/libvpx.git' + '@' + '30c261b1ebe8f06d687cac5b3b442d51a7839d00', 'src/third_party/ffmpeg': - Var('chromium_git') + '/chromium/third_party/ffmpeg.git' + '@' + 'dbbdb1680bd8e77ea72f8e5a79a09101bd7a9bdd', + Var('chromium_git') + '/chromium/third_party/ffmpeg.git' + '@' + '1e201feaa3260336aa63545c9471b76e5aef2e0a', 'src/third_party/usrsctp/usrsctplib': Var('chromium_git') + '/external/github.com/sctplab/usrsctp' + '@' + 'f4819e1b177f7bfdd761c147f5a649b9f1a78c06',
diff --git a/PRESUBMIT.py b/PRESUBMIT.py index a29e0a0..08a906c 100644 --- a/PRESUBMIT.py +++ b/PRESUBMIT.py
@@ -230,6 +230,8 @@ r"^net[\\\/]test[\\\/]embedded_test_server[\\\/]" + r"embedded_test_server\.cc$", r"^net[\\\/]test[\\\/]spawned_test_server[\\\/]local_test_server\.cc$", + r"^net[\\\/]test[\\\/]spawned_test_server[\\\/]" + + r"remote_test_server_config\.cc$", r"^net[\\\/]test[\\\/]test_data_directory\.cc$", r"^net[\\\/]url_request[\\\/]test_url_fetcher_factory\.cc$", r"^remoting[\\\/]protocol[\\\/]webrtc_transport\.cc$",
diff --git a/android_webview/browser/aw_permission_manager.cc b/android_webview/browser/aw_permission_manager.cc index f4336f0..deda4e2 100644 --- a/android_webview/browser/aw_permission_manager.cc +++ b/android_webview/browser/aw_permission_manager.cc
@@ -326,7 +326,6 @@ case PermissionType::BACKGROUND_SYNC: case PermissionType::SENSORS: case PermissionType::FLASH: - case PermissionType::ACCESSIBILITY_EVENTS: NOTIMPLEMENTED() << "RequestPermissions is not implemented for " << static_cast<int>(permissions[i]); pending_request_raw->SetPermissionStatus(permissions[i], @@ -466,7 +465,6 @@ case PermissionType::BACKGROUND_SYNC: case PermissionType::SENSORS: case PermissionType::FLASH: - case PermissionType::ACCESSIBILITY_EVENTS: NOTIMPLEMENTED() << "CancelPermission not implemented for " << static_cast<int>(permission); break;
diff --git a/ash/login/ui/lock_screen_sanity_unittest.cc b/ash/login/ui/lock_screen_sanity_unittest.cc index 050b24f..14f1db63 100644 --- a/ash/login/ui/lock_screen_sanity_unittest.cc +++ b/ash/login/ui/lock_screen_sanity_unittest.cc
@@ -8,6 +8,7 @@ #include "ash/login/ui/login_test_utils.h" #include "ash/public/cpp/config.h" #include "ash/shell.h" +#include "base/run_loop.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/events/test/event_generator.h" #include "ui/views/focus/focus_manager.h" @@ -56,4 +57,4 @@ base::RunLoop().RunUntilIdle(); } -} // namespace ash \ No newline at end of file +} // namespace ash
diff --git a/ash/root_window_controller.cc b/ash/root_window_controller.cc index f385f31..091e787 100644 --- a/ash/root_window_controller.cc +++ b/ash/root_window_controller.cc
@@ -276,13 +276,13 @@ RootWindowController::~RootWindowController() { Shutdown(); + DCHECK(!animating_wallpaper_widget_controller_.get()); + DCHECK(!wallpaper_widget_controller_.get()); ash_host_.reset(); mus_window_tree_host_.reset(); // The CaptureClient needs to be around for as long as the RootWindow is // valid. capture_client_.reset(); - if (animating_wallpaper_widget_controller_.get()) - animating_wallpaper_widget_controller_->StopAnimating(); root_window_controllers_->erase(std::find(root_window_controllers_->begin(), root_window_controllers_->end(), this)); @@ -484,6 +484,9 @@ ResetRootForNewWindowsIfNecessary(); + SetAnimatingWallpaperWidgetController(nullptr); + wallpaper_widget_controller_.reset(); + CloseChildWindows(); aura::Window* root_window = GetRootWindow(); GetRootWindowSettings(root_window)->controller = nullptr;
diff --git a/ash/shelf/shelf_context_menu_model.cc b/ash/shelf/shelf_context_menu_model.cc index 139bb25..317be47b 100644 --- a/ash/shelf/shelf_context_menu_model.cc +++ b/ash/shelf/shelf_context_menu_model.cc
@@ -95,7 +95,10 @@ auto_hide->label = GetStringUTF16(IDS_ASH_SHELF_CONTEXT_MENU_AUTO_HIDE); auto_hide->checked = GetShelfAutoHideBehaviorPref(prefs, display_id) == SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS; - auto_hide->enabled = true; + const bool is_tablet_mode = Shell::Get() + ->tablet_mode_controller() + ->IsTabletModeWindowManagerEnabled(); + auto_hide->enabled = !is_tablet_mode; menu->push_back(std::move(auto_hide)); }
diff --git a/ash/shelf/shelf_context_menu_model_unittest.cc b/ash/shelf/shelf_context_menu_model_unittest.cc index d48d6af..4b5b75f0 100644 --- a/ash/shelf/shelf_context_menu_model_unittest.cc +++ b/ash/shelf/shelf_context_menu_model_unittest.cc
@@ -12,6 +12,7 @@ #include "ash/test/ash_test_base.h" #include "ash/test_shell_delegate.h" #include "ash/wallpaper/wallpaper_controller.h" +#include "ash/wm/tablet_mode/tablet_mode_controller.h" #include "base/strings/utf_string_conversions.h" #include "chromeos/login/scoped_test_public_session_login_state.h" #include "ui/display/display.h" @@ -255,5 +256,25 @@ EXPECT_NE(-1, secondary_menu.GetIndexOfCommandId(CommandId::MENU_AUTO_HIDE)); } +TEST_F(ShelfContextMenuModelTest, DisableAutoHideOptionOnTabletMode) { + TabletModeController* tablet_mode_controller = + Shell::Get()->tablet_mode_controller(); + int64_t primary_id = GetPrimaryDisplay().id(); + + // Tests that in tablet mode, shelf auto-hide option is disabled. + tablet_mode_controller->EnableTabletModeWindowManager(true); + ShelfContextMenuModel menu1(MenuItemList(), nullptr, primary_id); + ASSERT_EQ(CommandId::MENU_AUTO_HIDE, menu1.GetCommandIdAt(0)); + EXPECT_FALSE(menu1.IsEnabledAt(0)); + EXPECT_TRUE(menu1.IsVisibleAt(0)); + + // Tests that exiting tablet mode reenables the auto-hide context menu item. + tablet_mode_controller->EnableTabletModeWindowManager(false); + ShelfContextMenuModel menu2(MenuItemList(), nullptr, primary_id); + ASSERT_EQ(CommandId::MENU_AUTO_HIDE, menu2.GetCommandIdAt(0)); + EXPECT_TRUE(menu2.IsEnabledAt(0)); + EXPECT_TRUE(menu2.IsVisibleAt(0)); +} + } // namespace } // namespace ash
diff --git a/ash/shelf/shelf_controller.cc b/ash/shelf/shelf_controller.cc index ea649bb..07f1959 100644 --- a/ash/shelf/shelf_controller.cc +++ b/ash/shelf/shelf_controller.cc
@@ -14,6 +14,7 @@ #include "ash/shelf/shelf.h" #include "ash/shell.h" #include "ash/strings/grit/ash_strings.h" +#include "ash/wm/tablet_mode/tablet_mode_controller.h" #include "base/auto_reset.h" #include "base/strings/utf_string_conversions.h" #include "components/pref_registry/pref_registry_syncable.h" @@ -95,11 +96,14 @@ model_.AddObserver(this); Shell::Get()->session_controller()->AddObserver(this); + Shell::Get()->tablet_mode_controller()->AddObserver(this); Shell::Get()->window_tree_host_manager()->AddObserver(this); } ShelfController::~ShelfController() { Shell::Get()->window_tree_host_manager()->RemoveObserver(this); + if (Shell::Get()->tablet_mode_controller()) + Shell::Get()->tablet_mode_controller()->RemoveObserver(this); Shell::Get()->session_controller()->RemoveObserver(this); model_.RemoveObserver(this); } @@ -291,6 +295,19 @@ base::Bind(&SetShelfBehaviorsFromPrefs)); } +void ShelfController::OnTabletModeStarted() { + // Force the shelf to be visible in tablet mode; the pref is restored on exit. + for (const auto& display : display::Screen::GetScreen()->GetAllDisplays()) { + Shelf* shelf = GetShelfForDisplay(display.id()); + if (shelf) + shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_NEVER); + } +} + +void ShelfController::OnTabletModeEnded() { + SetShelfAutoHideFromPrefs(); +} + void ShelfController::OnDisplayConfigurationChanged() { // Set/init the shelf behaviors from preferences, in case a display was added. SetShelfBehaviorsFromPrefs();
diff --git a/ash/shelf/shelf_controller.h b/ash/shelf/shelf_controller.h index 28da3c27..1a56d15 100644 --- a/ash/shelf/shelf_controller.h +++ b/ash/shelf/shelf_controller.h
@@ -12,6 +12,7 @@ #include "ash/public/cpp/shelf_types.h" #include "ash/public/interfaces/shelf.mojom.h" #include "ash/session/session_observer.h" +#include "ash/wm/tablet_mode/tablet_mode_observer.h" #include "mojo/public/cpp/bindings/binding_set.h" #include "mojo/public/cpp/bindings/interface_ptr_set.h" @@ -25,6 +26,7 @@ class ShelfController : public mojom::ShelfController, public ShelfModelObserver, public SessionObserver, + public TabletModeObserver, public WindowTreeHostManager::Observer { public: ShelfController(); @@ -58,6 +60,10 @@ // SessionObserver: void OnActiveUserPrefServiceChanged(PrefService* pref_service) override; + // TabletModeObserver: + void OnTabletModeStarted() override; + void OnTabletModeEnded() override; + // WindowTreeHostManager::Observer: void OnDisplayConfigurationChanged() override; void OnWindowTreeHostReusedForDisplay(
diff --git a/ash/shelf/shelf_controller_unittest.cc b/ash/shelf/shelf_controller_unittest.cc index cfd9b5f..04d33f9 100644 --- a/ash/shelf/shelf_controller_unittest.cc +++ b/ash/shelf/shelf_controller_unittest.cc
@@ -20,6 +20,7 @@ #include "ash/test/ash_test_base.h" #include "ash/test/ash_test_helper.h" #include "ash/test_shell_delegate.h" +#include "base/run_loop.h" #include "components/prefs/pref_service.h" #include "mojo/public/cpp/bindings/associated_binding.h"
diff --git a/ash/shell.cc b/ash/shell.cc index 6bf5e68..cccf773 100644 --- a/ash/shell.cc +++ b/ash/shell.cc
@@ -886,8 +886,6 @@ void Shell::Init(const ShellInitParams& init_params) { const Config config = shell_port_->GetAshConfig(); - shelf_controller_ = base::MakeUnique<ShelfController>(); - if (NightLightController::IsFeatureEnabled()) night_light_controller_ = base::MakeUnique<NightLightController>(); @@ -1027,6 +1025,7 @@ accelerator_controller_ = shell_port_->CreateAcceleratorController(); tablet_mode_controller_ = base::MakeUnique<TabletModeController>(); + shelf_controller_ = base::MakeUnique<ShelfController>(); magnifier_key_scroll_handler_ = MagnifierKeyScroller::CreateHandler(); AddPreTargetHandler(magnifier_key_scroll_handler_.get());
diff --git a/ash/strings/ash_strings_am.xtb b/ash/strings/ash_strings_am.xtb index 329c2b1..cab17f0 100644 --- a/ash/strings/ash_strings_am.xtb +++ b/ash/strings/ash_strings_am.xtb
@@ -272,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Search+Esc</translation> <translation id="8878886163241303700">ማያ ገጽ በማስቀጠል ላይ</translation> +<translation id="8921624153894383499">የGoogle ረዳቱ ይህን ቋንቋ አይናገርም።</translation> <translation id="8938800817013097409">USB-C መሣሪያ (የቀኝ ወደብ ከኋላ በኩል)</translation> <translation id="8940956008527784070">ባትሪ ዝቅተኛ ነው (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">ብሉቱዝ</translation>
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb index 658e4d3c..3243263 100644 --- a/ash/strings/ash_strings_ar.xtb +++ b/ash/strings/ash_strings_ar.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">تشغيل البلوتوث لاكتشاف الأجهزة القريبة</translation> <translation id="2352467521400612932">إعدادات قلم الشاشة</translation> <translation id="2354174487190027830">تنشيط <ph name="NAME" /></translation> +<translation id="2365393535144473978">سيؤدي تمكين ميزة بيانات الجوّال إلى تمكين البلوتوث.</translation> <translation id="2391579633712104609">180 درجة</translation> <translation id="2429753432712299108">يريد جهاز بلوتوث "<ph name="DEVICE_NAME" />" الحصول على إذن للإقران. قبل القبول، يُرجى التأكد أن مفتاح المرور هذا يظهر في هذا الجهاز: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">حدث خطأ</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">إرسال إلى مستلم غير معروف</translation> <translation id="5947494881799873997">التراجع عن الإجراء</translation> <translation id="595202126637698455">تم تمكين تتبع مستوى الأداء</translation> +<translation id="5957083217255311415">تم إيقاف ميزة بيانات الجوّال.</translation> <translation id="5958529069007801266">مستخدم يخضع للإدارة</translation> <translation id="5977415296283489383">سماعة رأس</translation> <translation id="5978382165065462689">مشاركة التحكم في شاشتك عن طريق المساعدة عن بُعد.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Search+Shift+H</translation> <translation id="6700713906295497288">زر قائمة أداة تحرير أسلوب الإدخال (IME)</translation> <translation id="6713285437468012787">تم إقران جهاز بلوتوث "<ph name="DEVICE_NAME" />" وهو الآن متاح لجميع المستخدمين. يمكنك إزالة هذا الإقران باستخدام الإعدادات.</translation> +<translation id="6715542151869432661">لم يتم العثور على أي أجهزة جوّال.</translation> <translation id="6785414152754474415">اكتمل شحن <ph name="PERCENTAGE" />% من البطارية ويجري شحنها.</translation> <translation id="6803622936009808957">تعذر إجراء النسخ المطابق للعروض نظرًا لعدم العثور على درجات دقة متوافقة. تم الدخول إلى سطح المكتب الممتد بدلاً من ذلك.</translation> <translation id="683971173229319003">Search+L</translation> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90 درجة</translation> <translation id="8850991929411075241">Search+Esc</translation> <translation id="8878886163241303700">توسيع الشاشة</translation> +<translation id="8921624153894383499">لا يتحدث مساعد Google هذه اللغة.</translation> <translation id="8938800817013097409">جهاز USB-C (المنفذ الأيمن في الخلف)</translation> <translation id="8940956008527784070">طاقة البطارية منخفضة (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">بلوتوث</translation>
diff --git a/ash/strings/ash_strings_bg.xtb b/ash/strings/ash_strings_bg.xtb index 5f4da148..30a34fbc 100644 --- a/ash/strings/ash_strings_bg.xtb +++ b/ash/strings/ash_strings_bg.xtb
@@ -272,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">търсене + Esc</translation> <translation id="8878886163241303700">Разгъване на екрана</translation> +<translation id="8921624153894383499">Google Асистент не поддържа този език.</translation> <translation id="8938800817013097409">Устройство с USB-C (десният порт на гърба)</translation> <translation id="8940956008527784070">Батерията е изтощена (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb index f81334255..67d8bb5 100644 --- a/ash/strings/ash_strings_bn.xtb +++ b/ash/strings/ash_strings_bn.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">আশেপাশের ডিভাইস খুঁজে পেতে ব্লুটুথ চালু করুন</translation> <translation id="2352467521400612932">স্টাইলাস সেটিংস</translation> <translation id="2354174487190027830"><ph name="NAME" /> সক্রিয় করা হচ্ছে</translation> +<translation id="2365393535144473978">মোবাইল ডেটা সক্ষম করলে ব্লুটুথও সক্ষম হয়ে যাবে।</translation> <translation id="2391579633712104609">১৮০°</translation> <translation id="2429753432712299108">ব্লুটুথ ডিভাইস "<ph name="DEVICE_NAME" />" যুক্ত করার অনুমতি চাইছে। স্বীকার করার আগে, দয়া করে এই পাস কীটি যে ডিভাইসে প্রদর্শিত হয়েছে তা নিশ্চিত করুন: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">একটি ত্রুটি ঘটেছে</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">একটি অজানা রিসিভারে কাস্টিং করা হচ্ছে</translation> <translation id="5947494881799873997">ফেরান</translation> <translation id="595202126637698455">কার্য-সম্পাদনা ট্রেস করা সক্ষম রয়েছে</translation> +<translation id="5957083217255311415">মোবাইল ডেটা বন্ধ করা আছে।</translation> <translation id="5958529069007801266">তত্ত্বাবধানে থাকা ব্যবহারকারী</translation> <translation id="5977415296283489383">হেডফোন</translation> <translation id="5978382165065462689">রিমোট সহায়কের মাধ্যমে আপনার স্ক্রীন নিয়ন্ত্রণ ভাগ করুন৷</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Search+Shift+H</translation> <translation id="6700713906295497288">IME মেনু বোতাম</translation> <translation id="6713285437468012787">ব্লুটুথ ডিভাইস "<ph name="DEVICE_NAME" />" যুক্ত করা হয়েছে এবং এখন সমস্ত ব্যবহারকারীর কাছে উপলব্ধ। আপনি সেটিংস ব্যবহার করে এই সংযুক্তি সরিয়ে দিতে পারেন।</translation> +<translation id="6715542151869432661">কোনও মোবাইল ডিভাইস খুঁজে পাওয়া যায়নি।</translation> <translation id="6785414152754474415">ব্যাটারি <ph name="PERCENTAGE" />% পূর্ণ এবং চার্জ হচ্ছে৷</translation> <translation id="6803622936009808957">সমর্থিত রেসুলিউশানগুলি খুঁজে না পাওয়ায় প্রদর্শনগুলি মিরর মানে প্রতিবিম্বিত করতে পারেনি। এর পরিবর্তে প্রসারিত ডেস্কটপে প্রবেশ করেছে।</translation> <translation id="683971173229319003">Search+L</translation> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">৯০°</translation> <translation id="8850991929411075241">Search+Esc</translation> <translation id="8878886163241303700">স্ক্রীন সম্প্রসারণ করা হচ্ছে</translation> +<translation id="8921624153894383499">Google সহায়ক এই ভাষায় কথা বলে না।</translation> <translation id="8938800817013097409">USB-C ডিভাইস (পিছনের ডান পোর্ট)</translation> <translation id="8940956008527784070">(<ph name="PERCENTAGE" />%) কম ব্যাটারি</translation> <translation id="9074739597929991885">ব্লুটুথ</translation>
diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb index 8250edd6..6ec9a02 100644 --- a/ash/strings/ash_strings_ca.xtb +++ b/ash/strings/ash_strings_ca.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">Activa el Bluetooth per detectar dispositius propers</translation> <translation id="2352467521400612932">Configuració del llapis òptic</translation> <translation id="2354174487190027830">S'està activant <ph name="NAME" /></translation> +<translation id="2365393535144473978">En activar les dades mòbils s'activarà el Bluetooth.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">El dispositiu Bluetooth "<ph name="DEVICE_NAME" />" sol·licita permís per emparellar-se. Abans d'acceptar, comproveu que aquesta clau d'accés es mostri al dispositiu: <ph name="PASSKEY" />.</translation> <translation id="2475982808118771221">S'ha produït un error</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">S'està emetent a un receptor desconegut</translation> <translation id="5947494881799873997">Reverteix</translation> <translation id="595202126637698455">Seguiment del rendiment activat</translation> +<translation id="5957083217255311415">Les dades mòbils estan desactivades.</translation> <translation id="5958529069007801266">Usuari supervisat</translation> <translation id="5977415296283489383">Auricular</translation> <translation id="5978382165065462689">Es comparteix el control de la pantalla mitjançant l'Assistència remota.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Cerca+Maj+H</translation> <translation id="6700713906295497288">Botó del menú d'IME</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="6715542151869432661">No s'ha trobat cap dispositiu mòbil.</translation> <translation id="6785414152754474415">La bateria està carregada fins al <ph name="PERCENTAGE" />% i s'està carregant.</translation> <translation id="6803622936009808957">No s'ha pogut fer la rèplica de 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> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Cerca + Esc</translation> <translation id="8878886163241303700">Ampliació de la pantalla</translation> +<translation id="8921624153894383499">L'Assistent de Google no parla aquest idioma.</translation> <translation id="8938800817013097409">Dispositiu USB-C (port posterior dret)</translation> <translation id="8940956008527784070">Bateria baixa (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_cs.xtb b/ash/strings/ash_strings_cs.xtb index 7a2aa38..d012e43 100644 --- a/ash/strings/ash_strings_cs.xtb +++ b/ash/strings/ash_strings_cs.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">Chcete-li objevit okolní zařízení, zapněte Bluetooth</translation> <translation id="2352467521400612932">Nastavení dotykového pera</translation> <translation id="2354174487190027830">Aktivace sítě <ph name="NAME" /></translation> +<translation id="2365393535144473978">Zapnutím mobilních dat aktivujete Bluetooth.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">Zařízení Bluetooth „<ph name="DEVICE_NAME" />“ žádá o povolení ke spárování. Než toto povolení schválíte, zkontrolujte si, zda je na zařízení zobrazen následující přístupový klíč: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">Došlo k chybě</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">Odesílání do neznámého přijímače</translation> <translation id="5947494881799873997">Vrátit zpět</translation> <translation id="595202126637698455">Sledování výkonu aktivováno</translation> +<translation id="5957083217255311415">Mobilní data jsou vypnuta.</translation> <translation id="5958529069007801266">Dozorovaný uživatel</translation> <translation id="5977415296283489383">Sluchátka</translation> <translation id="5978382165065462689">Ovládání obrazovky je sdíleno prostřednictvím Vzdálené pomoci.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Hledat+Shift+H</translation> <translation id="6700713906295497288">Tlačítko nabídky IME</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="6715542151869432661">Nebyla nalezena žádná mobilní zařízení.</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> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Hledat+Esc</translation> <translation id="8878886163241303700">Rozšíření obrazovky</translation> +<translation id="8921624153894383499">Tímto jazykem Asistent Google nehovoří.</translation> <translation id="8938800817013097409">Zařízení USB Type-C (pravý zadní port)</translation> <translation id="8940956008527784070">Slabá baterie (<ph name="PERCENTAGE" /> %)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb index 0e969647..77f7fde 100644 --- a/ash/strings/ash_strings_da.xtb +++ b/ash/strings/ash_strings_da.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">Slå Bluetooth til for at opdage enheder i nærheden</translation> <translation id="2352467521400612932">Penneindstillinger</translation> <translation id="2354174487190027830">Aktiverer <ph name="NAME" /></translation> +<translation id="2365393535144473978">Bluetooth aktiveres, når du aktiverer mobildata.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">Bluetooth-enheden "<ph name="DEVICE_NAME" />" vil gerne have parringstilladelse. Inden du accepterer, skal du bekræfte, at denne adgangsnøgle er vist på den pågældende enhed: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">Der opstod en fejl</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">Caster til en ukendt modtager</translation> <translation id="5947494881799873997">Fortryd</translation> <translation id="595202126637698455">Sporing af ydelsen er aktiveret</translation> +<translation id="5957083217255311415">Mobildata er slået fra.</translation> <translation id="5958529069007801266">Overvåget bruger</translation> <translation id="5977415296283489383">Hovedtelefon</translation> <translation id="5978382165065462689">Skærmdeling via Fjernsupport.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Søg+Shift+H</translation> <translation id="6700713906295497288">IME-menuknap</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="6715542151869432661">Der blev ikke fundet nogen mobilenheder.</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> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Søg+Esc</translation> <translation id="8878886163241303700">Udvider skærm</translation> +<translation id="8921624153894383499">Google-assistenten taler ikke dette sprog.</translation> <translation id="8938800817013097409">USB-C-enhed (porten bagpå i højre side)</translation> <translation id="8940956008527784070">Batteriniveauet er lavt (<ph name="PERCENTAGE" /> %)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_de.xtb b/ash/strings/ash_strings_de.xtb index 0f2d134..3e0fb8bf 100644 --- a/ash/strings/ash_strings_de.xtb +++ b/ash/strings/ash_strings_de.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">Aktivieren Sie Bluetooth, damit Geräte in der Nähe gefunden werden</translation> <translation id="2352467521400612932">Eingabestift-Einstellungen</translation> <translation id="2354174487190027830"><ph name="NAME" /> wird aktiviert</translation> +<translation id="2365393535144473978">Bei Aktivierung der mobilen Daten wird auch Bluetooth aktiviert.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">Das Bluetooth-Gerät "<ph name="DEVICE_NAME" />" bittet um Erlaubnis für Kopplung. Bevor Sie akzeptieren, überprüfen Sie, ob folgender Zugangscode auf dem Gerät angezeigt wird: <ph name="PASSKEY" />.</translation> <translation id="2475982808118771221">Ein Fehler ist aufgetreten.</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">Übertragung an unbekannten Empfänger</translation> <translation id="5947494881799873997">Rückgängig machen</translation> <translation id="595202126637698455">Leistungsnachverfolgung aktiviert</translation> +<translation id="5957083217255311415">Mobile Daten sind deaktiviert.</translation> <translation id="5958529069007801266">Betreuter Nutzer</translation> <translation id="5977415296283489383">Kopfhörer</translation> <translation id="5978382165065462689">Sie teilen sich die Bildschirmsteuerung per Remote-Unterstützung.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Suche + Shift + H</translation> <translation id="6700713906295497288">IME-Menüschaltfläche</translation> <translation id="6713285437468012787">Das Bluetooth-Gerät "<ph name="DEVICE_NAME" />" wurde gekoppelt und ist nun für alle Nutzer verfügbar. Sie können es unter "Einstellungen" wieder entkoppeln.</translation> +<translation id="6715542151869432661">Keine Mobilgeräte gefunden.</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> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Suche + Esc</translation> <translation id="8878886163241303700">Bildschirmerweiterung</translation> +<translation id="8921624153894383499">Google Assistant spricht diese Sprache nicht.</translation> <translation id="8938800817013097409">USB-C-Gerät (rechter Port hinten)</translation> <translation id="8940956008527784070">Niedriger Akkustand (<ph name="PERCENTAGE" /> %)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_el.xtb b/ash/strings/ash_strings_el.xtb index 755edd1c..569157b 100644 --- a/ash/strings/ash_strings_el.xtb +++ b/ash/strings/ash_strings_el.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">Ενεργοποιήστε το Bluetooth, για να εντοπίσετε κοντινές συσκευές</translation> <translation id="2352467521400612932">Ρυθμίσεις γραφίδας</translation> <translation id="2354174487190027830">Ενεργοποίηση <ph name="NAME" /></translation> +<translation id="2365393535144473978">Με την ενεργοποίηση των δεδομένων κινητής τηλεφωνίας θα ενεργοποιηθεί και το Bluetooth.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">Η συσκευή Bluetooth "<ph name="DEVICE_NAME" />" ζητά δικαιώματα σύζευξης. Προτού αποδεχτείτε, επιβεβαιώστε ότι αυτό το κλειδί πρόσβασης εμφανίζεται στη συγκεκριμένη συσκευή: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">Παρουσιάστηκε σφάλμα</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">Μετάδοση σε έναν άγνωστο δέκτη</translation> <translation id="5947494881799873997">Επαναφορά</translation> <translation id="595202126637698455">Η παρακολούθηση απόδοσης έχει ενεργοποιηθεί</translation> +<translation id="5957083217255311415">Τα δεδομένα κινητής τηλεφωνίας είναι απενεργοποιημένα.</translation> <translation id="5958529069007801266">Εποπτευόμενος χρήστης</translation> <translation id="5977415296283489383">Ακουστικά</translation> <translation id="5978382165065462689">Κοινόχρηστος έλεγχος της οθόνης σας μέσω της απομακρυσμένης βοήθειας.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Πλήκτρο αναζήτησης+Shift+H</translation> <translation id="6700713906295497288">Κουμπί μενού IME</translation> <translation id="6713285437468012787">Η συσκευή Bluetooth "<ph name="DEVICE_NAME" />" έχει συζευχθεί και είναι πλέον διαθέσιμη σε όλους τους χρήστες. Μπορείτε να καταργήσετε αυτήν τη σύζευξη μέσω των Ρυθμίσεων.</translation> +<translation id="6715542151869432661">Δεν βρέθηκαν κινητές συσκευές.</translation> <translation id="6785414152754474415">Η μπαταρία είναι πλήρης <ph name="PERCENTAGE" />% και φορτίζει.</translation> <translation id="6803622936009808957">Δεν ήταν δυνατός ο αντικατοπτρισμός των οθονών καθώς δεν βρέθηκαν υποστηριζόμενες αναλύσεις. Έχει ενεργοποιηθεί εναλλακτικά η εκτεταμένη επιφάνεια εργασίας.</translation> <translation id="683971173229319003">Πλήκτρο αναζήτησης+L</translation> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Πλήκτρο αναζήτησης+Esc</translation> <translation id="8878886163241303700">Επέκταση οθόνης</translation> +<translation id="8921624153894383499">Ο Βοηθός Google δεν είναι διαθέσιμος σε αυτήν τη γλώσσα.</translation> <translation id="8938800817013097409">Συσκευή USB-C (πίσω δεξιά θύρα)</translation> <translation id="8940956008527784070">Χαμηλή στάθμη μπαταρίας (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_en-GB.xtb b/ash/strings/ash_strings_en-GB.xtb index 7abf58f..f3beaa3 100644 --- a/ash/strings/ash_strings_en-GB.xtb +++ b/ash/strings/ash_strings_en-GB.xtb
@@ -272,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Search+Esc</translation> <translation id="8878886163241303700">Extending screen</translation> +<translation id="8921624153894383499">The Google Assistant doesn’t speak this language.</translation> <translation id="8938800817013097409">USB-C device (right port in the back)</translation> <translation id="8940956008527784070">Battery low (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_es-419.xtb b/ash/strings/ash_strings_es-419.xtb index 7004721..00a9835c 100644 --- a/ash/strings/ash_strings_es-419.xtb +++ b/ash/strings/ash_strings_es-419.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">Activar Bluetooth para buscar los dispositivos cercanos</translation> <translation id="2352467521400612932">Configuración de la pluma stylus</translation> <translation id="2354174487190027830">Activación de <ph name="NAME" /></translation> +<translation id="2365393535144473978">Si habilitas los datos móviles, se habilitará Bluetooth.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">El dispositivo Bluetooth "<ph name="DEVICE_NAME" />" solicita permiso para sincronizarse. Antes de aceptar, debes confirmar que aparece la siguiente clave de contraseña en el dispositivo: <ph name="PASSKEY" />.</translation> <translation id="2475982808118771221">Se ha producido un error</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">Transmitiendo a un receptor desconocido</translation> <translation id="5947494881799873997">Revertir</translation> <translation id="595202126637698455">Seguimiento de rendimiento habilitado</translation> +<translation id="5957083217255311415">Los datos móviles están desactivados.</translation> <translation id="5958529069007801266">Usuario supervisado</translation> <translation id="5977415296283489383">Auriculares</translation> <translation id="5978382165065462689">Se está compartiendo el control de la pantalla mediante la Asistencia remota.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Buscar+mayúscula+H</translation> <translation id="6700713906295497288">Botón de menú IME</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="6715542151869432661">No se encontraron dispositivos móviles.</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> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Tecla de búsqueda + Esc</translation> <translation id="8878886163241303700">Ampliando pantalla</translation> +<translation id="8921624153894383499">El Asistente de Google no habla este idioma</translation> <translation id="8938800817013097409">Dispositivo USB-C (puerto derecho en la parte posterior)</translation> <translation id="8940956008527784070">Batería baja (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_es.xtb b/ash/strings/ash_strings_es.xtb index d3b4b4f..62f4264 100644 --- a/ash/strings/ash_strings_es.xtb +++ b/ash/strings/ash_strings_es.xtb
@@ -272,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Buscar+Esc</translation> <translation id="8878886163241303700">Ampliando pantalla</translation> +<translation id="8921624153894383499">El Asistente de Google no habla este idioma.</translation> <translation id="8938800817013097409">Dispositivo USB tipo C (puerto derecho situado en la parte trasera)</translation> <translation id="8940956008527784070">Poca batería (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_et.xtb b/ash/strings/ash_strings_et.xtb index 9f604979..4a304caf 100644 --- a/ash/strings/ash_strings_et.xtb +++ b/ash/strings/ash_strings_et.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">Lülitage Bluetooth sisse, et läheduses olevaid seadmeid avastada</translation> <translation id="2352467521400612932">Elektronpliiatsi seaded</translation> <translation id="2354174487190027830">Võrgu <ph name="NAME" /> aktiveerimine</translation> +<translation id="2365393535144473978">Mobiilse andmeside lubamisel lubatakse Bluetooth.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">Bluetoothi seade „<ph name="DEVICE_NAME" />” küsib luba sidumiseks. Enne nõustumist veenduge, et selles seadmes oleks kuvatud see parool: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">Tekkis viga</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">Ülekandmine teadmata vastuvõtjasse</translation> <translation id="5947494881799873997">Ennista</translation> <translation id="595202126637698455">Toimivuse jälgimine on lubatud</translation> +<translation id="5957083217255311415">Mobiilne andmeside on välja lülitatud.</translation> <translation id="5958529069007801266">Valvatav kasutaja</translation> <translation id="5977415296283489383">Kõrvaklapid</translation> <translation id="5978382165065462689">Ekraani juhtimise jagamine kaugabi kaudu.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Otsinguklahv + tõstuklahv + H</translation> <translation id="6700713906295497288">IME menüünupp</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="6715542151869432661">Mobiilseadmeid ei leitud.</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> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Otsing + ESC</translation> <translation id="8878886163241303700">Ekraani laiendamine</translation> +<translation id="8921624153894383499">Google'i assistent ei räägi selles keeles.</translation> <translation id="8938800817013097409">C-tüüpi USB-seade (parempoolne port taga)</translation> <translation id="8940956008527784070">Aku tühjeneb (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_fa.xtb b/ash/strings/ash_strings_fa.xtb index 17ab4ca..16b51c6 100644 --- a/ash/strings/ash_strings_fa.xtb +++ b/ash/strings/ash_strings_fa.xtb
@@ -272,6 +272,7 @@ <translation id="8828714802988429505">۹۰°</translation> <translation id="8850991929411075241">Search+Esc</translation> <translation id="8878886163241303700">صفحه گسترش یافته است</translation> +<translation id="8921624153894383499">«دستیار Google» به این زبان صحبت نمیکند.</translation> <translation id="8938800817013097409">دستگاه USB-C (درگاه عقب سمت راست)</translation> <translation id="8940956008527784070">باتری ضعیف است (<ph name="PERCENTAGE" />٪)</translation> <translation id="9074739597929991885">بلوتوث</translation>
diff --git a/ash/strings/ash_strings_fi.xtb b/ash/strings/ash_strings_fi.xtb index e5997fc..cbd5e6a 100644 --- a/ash/strings/ash_strings_fi.xtb +++ b/ash/strings/ash_strings_fi.xtb
@@ -272,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Haku+Esc</translation> <translation id="8878886163241303700">Laajennettu näyttö</translation> +<translation id="8921624153894383499">Google Assistant ei ole käytettävissä tällä kielellä.</translation> <translation id="8938800817013097409">C-tyypin USB-laite (oikeanpuoleinen takaportti)</translation> <translation id="8940956008527784070">Akku vähissä (<ph name="PERCENTAGE" /> %)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_fil.xtb b/ash/strings/ash_strings_fil.xtb index 8bd5ba0d..0d7d0035 100644 --- a/ash/strings/ash_strings_fil.xtb +++ b/ash/strings/ash_strings_fil.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">I-on ang Bluetooth upang tuklasin ang mga kalapit na device</translation> <translation id="2352467521400612932">Mga setting ng stylus</translation> <translation id="2354174487190027830">Ina-activate ang <ph name="NAME" /></translation> +<translation id="2365393535144473978">Kapag na-enable ang mobile data, mae-enable din ang Bluetooth.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">Gusto ng bluetooth device na "<ph name="DEVICE_NAME" />" ng pahintulot na magpares . Bago tanggapin, pakikumpirma na ipinapakita ang passkey na ito sa device na iyon: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">May isang naganap na error</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">Ikina-cast sa isang hindi kilalang tatanggap</translation> <translation id="5947494881799873997">I-revert</translation> <translation id="595202126637698455">Naka-enable ang pagte-trace sa pagganap</translation> +<translation id="5957083217255311415">Naka-off ang mobile data.</translation> <translation id="5958529069007801266">Pinangangasiwaang user</translation> <translation id="5977415296283489383">Headphone</translation> <translation id="5978382165065462689">Pagbabahagi ng kontrol sa iyong screen sa pamamagitan ng Remote Assistance.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Search+Shift+H</translation> <translation id="6700713906295497288">Button ng menu ng IME</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="6715542151869432661">Walang nahanap na mobile device.</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> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Search+Esc</translation> <translation id="8878886163241303700">Pinapalawak ang screen</translation> +<translation id="8921624153894383499">Hindi nagsasalita ng ganitong wika ang Google Assistant.</translation> <translation id="8938800817013097409">USB-C device (kanang port sa likod)</translation> <translation id="8940956008527784070">Mahina na ang baterya (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_fr.xtb b/ash/strings/ash_strings_fr.xtb index b8877a4..bcd013f 100644 --- a/ash/strings/ash_strings_fr.xtb +++ b/ash/strings/ash_strings_fr.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">Activer le Bluetooth pour découvrir les appareils à proximité</translation> <translation id="2352467521400612932">Paramètres du stylet</translation> <translation id="2354174487190027830">Activation du réseau <ph name="NAME" /> en cours…</translation> +<translation id="2365393535144473978">L'activation des données mobiles active également le Bluetooth.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">L'appareil Bluetooth "<ph name="DEVICE_NAME" />" demande l'autorisation de s'associer. Avant d'accepter, veuillez confirmer que le code d'authentification suivant s'affiche sur l'appareil : <ph name="PASSKEY" />.</translation> <translation id="2475982808118771221">Une erreur s'est produite.</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">Destinataire de la diffusion inconnu</translation> <translation id="5947494881799873997">Rétablir</translation> <translation id="595202126637698455">Suivi des performances activé</translation> +<translation id="5957083217255311415">Les données mobiles sont désactivées.</translation> <translation id="5958529069007801266">Utilisateur supervisé</translation> <translation id="5977415296283489383">Casque</translation> <translation id="5978382165065462689">Partager le contrôle de votre écran via l'assistance à distance</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Recherche+Maj+H</translation> <translation id="6700713906295497288">Bouton de menu IME</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="6715542151869432661">Aucun appareil mobile détecté.</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> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Recherche+Échap</translation> <translation id="8878886163241303700">Extension de l'écran</translation> +<translation id="8921624153894383499">L'Assistant Google ne parle pas cette langue.</translation> <translation id="8938800817013097409">Appareil USB de type C (port situé sur l'arrière de l'appareil, à droite)</translation> <translation id="8940956008527784070">Batterie faible (<ph name="PERCENTAGE" /> %)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_gu.xtb b/ash/strings/ash_strings_gu.xtb index 1101527ff..691ec68 100644 --- a/ash/strings/ash_strings_gu.xtb +++ b/ash/strings/ash_strings_gu.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">નજીકનાં ઉપકરણો શોધવા માટે Bluetooth ચાલુ કરો</translation> <translation id="2352467521400612932">કલમની સેટિંગ્સ</translation> <translation id="2354174487190027830"><ph name="NAME" /> ને સક્રિય કરી રહ્યું છે</translation> +<translation id="2365393535144473978">મોબાઇલ ડેટા સક્ષમ કરવાથી બ્લૂટૂથ સક્ષમ થશે.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">Bluetooth ઉપકરણ "<ph name="DEVICE_NAME" />" ને જોડી બનાવવા માટે પરવાનગી જોઈએ છે. સ્વીકારતાં પહેલાં, કૃપા કરીને તે ઉપકરણ પર બતાવેલ આ પાસકીની પુષ્ટિ કરો: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">કોઈ ભૂલ આવી છે</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">અજાણ્યાં પ્રાપ્તકર્તા પર કાસ્ટ કરી રહ્યાં છે</translation> <translation id="5947494881799873997">પાછા ફરો</translation> <translation id="595202126637698455">ભજવણી ટ્રેસિંગ સક્ષમ</translation> +<translation id="5957083217255311415">મોબાઇલ ડેટા બંધ છે.</translation> <translation id="5958529069007801266">નિરીક્ષણ કરેલ વપરાશકર્તા</translation> <translation id="5977415296283489383">હેડફોન</translation> <translation id="5978382165065462689">દૂરસ્થ સહાય વડે તમારી સ્ક્રીનનું નિયંત્રણ શેર કરવું.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Search+Shift+H</translation> <translation id="6700713906295497288">IME મેનૂ બટન</translation> <translation id="6713285437468012787">Bluetooth ઉપકરણ "<ph name="DEVICE_NAME" />" ની જોડી બનાવવામાં આવી અને હવે તે બધા વપરાશકર્તાઓને ઉપલબ્ધ છે. તમે સેટિંગ્સનો ઉપયોગ કરીને આ જોડીને દૂર કરી શકો છો.</translation> +<translation id="6715542151869432661">કોઈ મોબાઇલ ઉપકરણો મળ્યાં નથી.</translation> <translation id="6785414152754474415">બેટરી <ph name="PERCENTAGE" /> % પૂર્ણ અને ચાર્જ થઈ રહી છે.</translation> <translation id="6803622936009808957">કોઈ સમર્થિત રિઝોલ્યૂશન મળ્યું ન હોવાથી, પ્રદર્શનોને પ્રતિબિંબિત કરી શકાયા નથી. તેને બદલે વિસ્તૃત ડેસ્કટૉપ દાખલ કર્યું.</translation> <translation id="683971173229319003">Search+L</translation> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Search+Esc</translation> <translation id="8878886163241303700">સ્ક્રીનને વિસ્તૃત કરી રહ્યું છે</translation> +<translation id="8921624153894383499">Google સહાયક આ ભાષા બોલતું નથી.</translation> <translation id="8938800817013097409">USB-C ઉપકરણ (પાછળની બાજુએ જમણું પોર્ટ)</translation> <translation id="8940956008527784070">બૅટરી ઓછી (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb index 15fe0ca3..48ca1b08 100644 --- a/ash/strings/ash_strings_hi.xtb +++ b/ash/strings/ash_strings_hi.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">आस-पास के डिवाइस खोजने के लिए ब्लूटूथ चालू करें</translation> <translation id="2352467521400612932">स्टाइलस की सेटिंग</translation> <translation id="2354174487190027830"><ph name="NAME" /> सक्रिय हो रहा है</translation> +<translation id="2365393535144473978">मोबाइल डेटा सक्षम करने से ब्लूटूथ सक्षम हो जाएगा.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">ब्लूटूथ डिवाइस "<ph name="DEVICE_NAME" />" युग्मित करने की अनुमति चाहता है. स्वीकार करने से पहले, कृपया दुबारा पूछें कि यह पासकुंजी उस डिवाइस पर दिखाई जा रही है: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">कोई गड़बड़ी आई</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">किसी अज्ञात प्राप्तकर्ता को कास्ट कर रहा है</translation> <translation id="5947494881799873997">वापस लाएं</translation> <translation id="595202126637698455">निष्पादन ट्रेसिंग सक्षम है</translation> +<translation id="5957083217255311415">मोबाइल डेटा बंद कर दिया गया है.</translation> <translation id="5958529069007801266">निगरानी में रखा गया उपयोगकर्ता</translation> <translation id="5977415296283489383">हेडफ़ोन</translation> <translation id="5978382165065462689">आपकी स्क्रीन का नियंत्रण दूरस्थ सहायका के द्वारा साझा किया जा रहा है.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Search+Shift+H</translation> <translation id="6700713906295497288">IME मेनू बटन</translation> <translation id="6713285437468012787">ब्लूटूथ डिवाइस "<ph name="DEVICE_NAME" />" यु्ग्मित हो गया है और अब वह सभी उपयोगकर्ताओं के लिए उपलब्ध है. आप सेटिंग का उपयोग करके इस युग्मन को निकाल सकते हैं.</translation> +<translation id="6715542151869432661">कोई मोबाइल डिवाइस नहीं मिला.</translation> <translation id="6785414152754474415">बैटरी <ph name="PERCENTAGE" />% भरी हुई है और चार्ज हो रही है.</translation> <translation id="6803622936009808957">प्रदर्शनों को मिरर नहीं किया जा सका क्योंकि कोई समर्थित रिज़ॉल्यूशन नहीं मिला. इसके बजाय विस्तारित डेस्कटॉप में चला गया है.</translation> <translation id="683971173229319003">Search+L</translation> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Search+Esc</translation> <translation id="8878886163241303700">स्क्रीन का विस्तार करना</translation> +<translation id="8921624153894383499">Google Assistant सेवा इस भाषा में उपलब्ध नहीं है.</translation> <translation id="8938800817013097409">USB-C डिवाइस (पीछे की ओर दायां पोर्ट)</translation> <translation id="8940956008527784070">बैटरी कम (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">ब्लूटूथ</translation>
diff --git a/ash/strings/ash_strings_hr.xtb b/ash/strings/ash_strings_hr.xtb index e3a3d76..1dd14ded 100644 --- a/ash/strings/ash_strings_hr.xtb +++ b/ash/strings/ash_strings_hr.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">Uključite Bluetooth da biste otkrili uređaje u blizini</translation> <translation id="2352467521400612932">Postavke pisaljke</translation> <translation id="2354174487190027830">Aktiviranje mreže <ph name="NAME" /></translation> +<translation id="2365393535144473978">Omogućivanjem mobilnih podataka omogućit će Bluetooth.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">Bluetooth uređaj "<ph name="DEVICE_NAME" />" traži dopuštenje za uparivanje. Prije prihvaćanja provjerite prikazuje li se na njemu ovaj pristupni ključ: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">Došlo je do pogreške</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">Emitiranje na nepoznati prijamnik</translation> <translation id="5947494881799873997">Vrati</translation> <translation id="595202126637698455">Omogućeno je praćenje izvedbe</translation> +<translation id="5957083217255311415">Mobilni su podaci isključeni.</translation> <translation id="5958529069007801266">Nadzirani korisnik</translation> <translation id="5977415296283489383">Slušalice</translation> <translation id="5978382165065462689">Dijelite kontrolu nad zaslonom putem Daljinske pomoći.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Search + Shift + H</translation> <translation id="6700713906295497288">Gumb izbornika IME-a</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="6715542151869432661">Nije pronađen nijedan mobilni uređaj.</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> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Pretraživanje + Esc</translation> <translation id="8878886163241303700">Produljenje zaslona</translation> +<translation id="8921624153894383499">Google asistent ne govori taj jezik.</translation> <translation id="8938800817013097409">USB-C uređaj (desni priključak sa stražnje strane)</translation> <translation id="8940956008527784070">Baterija je skoro prazna (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_hu.xtb b/ash/strings/ash_strings_hu.xtb index 13a90b7..4666695 100644 --- a/ash/strings/ash_strings_hu.xtb +++ b/ash/strings/ash_strings_hu.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">Kapcsolja be a Bluetooth-t a közeli eszközök felfedezéséhez</translation> <translation id="2352467521400612932">Az érintőceruza beállításai</translation> <translation id="2354174487190027830"><ph name="NAME" /> aktiválása</translation> +<translation id="2365393535144473978">A mobiladat-kapcsolat engedélyezésével a Bluetooth is bekapcsol.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">A(z) „<ph name="DEVICE_NAME" />” Bluetooth-eszköz engedélyt kér a párosításra. Mielőtt elfogadná, ellenőrizze, hogy ez a biztonsági kód látható-e azon az eszközön is: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">Hiba történt</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">Átküldés ismeretlen fogadó eszközre</translation> <translation id="5947494881799873997">Visszavonás</translation> <translation id="595202126637698455">Teljesítménykövetés engedélyezve</translation> +<translation id="5957083217255311415">A mobiladat-kapcsolat ki van kapcsolva.</translation> <translation id="5958529069007801266">Felügyelt felhasználó</translation> <translation id="5977415296283489383">Fülhallgató</translation> <translation id="5978382165065462689">A képernyő irányításának megosztása a Távsegítség szolgáltatás keretein belül.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Keresés+Shift+H</translation> <translation id="6700713906295497288">IME-menü gomb</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="6715542151869432661">Nem található mobileszköz.</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> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Keresés+Esc</translation> <translation id="8878886163241303700">Kibővített képernyő</translation> +<translation id="8921624153894383499">A Google Segéd nem beszél ezen a nyelven.</translation> <translation id="8938800817013097409">C típusú USB-vel kompatibilis eszköz (jobb hátsó port)</translation> <translation id="8940956008527784070">Alacsony akkumulátortöltöttség (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_id.xtb b/ash/strings/ash_strings_id.xtb index 1790df6..0c59ca4 100644 --- a/ash/strings/ash_strings_id.xtb +++ b/ash/strings/ash_strings_id.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">Aktifkan Bluetooth untuk menemukan perangkat di sekitar</translation> <translation id="2352467521400612932">Setelan stilus</translation> <translation id="2354174487190027830">Mengaktifkan <ph name="NAME" /></translation> +<translation id="2365393535144473978">Mengaktifkan data seluler akan mengaktifkan Bluetooth.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">Perangkat Bluetooth "<ph name="DEVICE_NAME" />" meminta izin untuk bersanding. Sebelum menerima, konfirmasikan bahwa kunci sandi ini ditampilkan pada perangkat tersebut: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">Terjadi kesalahan</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">Mentransmisi ke penerima tak dikenal</translation> <translation id="5947494881799873997">Kembalikan</translation> <translation id="595202126637698455">Kinerja pelacakan aktif</translation> +<translation id="5957083217255311415">Data seluler dinonaktifkan.</translation> <translation id="5958529069007801266">Pengguna yang diawasi</translation> <translation id="5977415296283489383">Headphone</translation> <translation id="5978382165065462689">Berbagi kontrol layar via Remote Assistance.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Search+Shift+H</translation> <translation id="6700713906295497288">Tombol menu IME</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="6715542151869432661">Perangkat seluler tidak ditemukan.</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> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Search+Esc</translation> <translation id="8878886163241303700">Memperluas layar</translation> +<translation id="8921624153894383499">Asisten Google tidak berbicara dalam bahasa ini.</translation> <translation id="8938800817013097409">Perangkat USB-C (port belakang sebelah kanan)</translation> <translation id="8940956008527784070">Baterai lemah (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_it.xtb b/ash/strings/ash_strings_it.xtb index 445d5e74..e0936a2 100644 --- a/ash/strings/ash_strings_it.xtb +++ b/ash/strings/ash_strings_it.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">Attiva il Bluetooth per trovare dispositivi nelle vicinanze</translation> <translation id="2352467521400612932">Impostazioni di stilo</translation> <translation id="2354174487190027830">Attivazione di <ph name="NAME" /></translation> +<translation id="2365393535144473978">Se attivi i dati mobili verrà attivato anche il Bluetooth.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">Il dispositivo Bluetooth "<ph name="DEVICE_NAME" />" chiede l'autorizzazione per essere accoppiato. Prima di accettare, conferma che questa passkey viene visualizzata sul dispositivo: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">Si è verificato un errore</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">Trasmissione a un ricevitore sconosciuto</translation> <translation id="5947494881799873997">Ripristina</translation> <translation id="595202126637698455">Rilevamento del rendimento attivo</translation> +<translation id="5957083217255311415">I dati mobili non sono attivi.</translation> <translation id="5958529069007801266">Utente supervisionato</translation> <translation id="5977415296283489383">Cuffia</translation> <translation id="5978382165065462689">Condividi il controllo dello schermo tramite Assistenza remota.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Tasto per la ricerca + MAIUSC + H</translation> <translation id="6700713906295497288">Pulsante di menu IME</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="6715542151869432661">Nessun dispositivo mobile trovato.</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> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Tasto di ricerca+ESC</translation> <translation id="8878886163241303700">Estensione schermo</translation> +<translation id="8921624153894383499">L'Assistente Google non parla questa lingua.</translation> <translation id="8938800817013097409">Dispositivo USB-C (porta posteriore destra)</translation> <translation id="8940956008527784070">Batteria in esaurimento (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_iw.xtb b/ash/strings/ash_strings_iw.xtb index 387f57c8..2a0e138 100644 --- a/ash/strings/ash_strings_iw.xtb +++ b/ash/strings/ash_strings_iw.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">יש להפעיל את Bluetooth כדי לאתר מכשירים קרובים</translation> <translation id="2352467521400612932">הגדרות סטיילוס</translation> <translation id="2354174487190027830">מפעיל את <ph name="NAME" /></translation> +<translation id="2365393535144473978">כשמפעילים את חבילת הגלישה, מופעלת גם תקשורת Bluetooth.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">מכשיר ה-Bluetooth "<ph name="DEVICE_NAME" />" מבקש הרשאה לבצע התאמה. לפני שתאשר, ודא שמפתח הסיסמה הבא מוצג במכשיר הזה: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">אירעה שגיאה</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">מעביר למקבל לא ידוע</translation> <translation id="5947494881799873997">חזרה לגרסה הקודמת</translation> <translation id="595202126637698455">מעקב אחר הביצועים מופעל</translation> +<translation id="5957083217255311415">חבילת הגלישה מושבתת.</translation> <translation id="5958529069007801266">משתמש בפיקוח</translation> <translation id="5977415296283489383">אוזניות</translation> <translation id="5978382165065462689">שיתוף שליטה במסך דרך סיוע מרחוק.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Search+Shift+H</translation> <translation id="6700713906295497288">לחצן תפריט IME</translation> <translation id="6713285437468012787">מכשיר ה-Bluetooth "<ph name="DEVICE_NAME" />" הותאם והוא זמין כעת לכל המשתמשים. אתה יכול להסיר את ההתאמה הזו ב'הגדרות'.</translation> +<translation id="6715542151869432661">לא נמצאו מכשירים ניידים.</translation> <translation id="6785414152754474415">הסוללה טעונה ברמה של <ph name="PERCENTAGE" />% ומתבצעת טעינה.</translation> <translation id="6803622936009808957">לא ניתן היה לשקף מסכים מכיוון שלא נמצאה רזולוציה נתמכת. במקום זאת התצוגה עברה למצב שולחן עבודה מורחב.</translation> <translation id="683971173229319003">Search+L</translation> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Search+Esc</translation> <translation id="8878886163241303700">מסך מתרחב</translation> +<translation id="8921624153894383499">Google Assistant לא מדבר בשפה הזאת.</translation> <translation id="8938800817013097409">מכשיר עם יציאת USB-C (יציאה ימנית מאחור)</translation> <translation id="8940956008527784070">סוללה חלשה (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_ja.xtb b/ash/strings/ash_strings_ja.xtb index de9d79b..e830c50 100644 --- a/ash/strings/ash_strings_ja.xtb +++ b/ash/strings/ash_strings_ja.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">近くのデバイスを検出するには Bluetooth をオンにしてください</translation> <translation id="2352467521400612932">タッチペンの設定</translation> <translation id="2354174487190027830"><ph name="NAME" /> を有効にしています</translation> +<translation id="2365393535144473978">モバイルデータ通信を有効にすると、Bluetooth も有効になります。</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">Bluetooth デバイス「<ph name="DEVICE_NAME" />」がペア設定の権限をリクエストしています。許可するにあたっては、このデバイスで次のパスキーが表示されることを確認してください: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">エラーが発生しました</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">不明な受信デバイスにキャストしています</translation> <translation id="5947494881799873997">元に戻す</translation> <translation id="595202126637698455">パフォーマンス追跡機能が有効です</translation> +<translation id="5957083217255311415">モバイルデータ通信が無効になっています。</translation> <translation id="5958529069007801266">監視対象ユーザー</translation> <translation id="5977415296283489383">ヘッドホン</translation> <translation id="5978382165065462689">リモート サポート経由で画面の制御を共有しています。</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">検索+Shift+H</translation> <translation id="6700713906295497288">IME メニューボタン</translation> <translation id="6713285437468012787">Bluetooth デバイス「<ph name="DEVICE_NAME" />」がペア設定されました。すべてのユーザーはこのデバイスを使用できます。[設定] から、このペア設定を削除することもできます。</translation> +<translation id="6715542151869432661">モバイル端末が見つかりませんでした。</translation> <translation id="6785414152754474415">バッテリー残量: <ph name="PERCENTAGE" />%、充電しています。</translation> <translation id="6803622936009808957">サポートされている解像度が見つからなかったため、ディスプレイをミラーリングできませんでした。代わりに拡張デスクトップ モードに切り替えました。</translation> <translation id="683971173229319003">Search+L</translation> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Search+Esc</translation> <translation id="8878886163241303700">画面を拡張しています</translation> +<translation id="8921624153894383499">Google アシスタントはこの言語に対応していません。</translation> <translation id="8938800817013097409">USB-C デバイス(背面右のポート)</translation> <translation id="8940956008527784070">バッテリー残量: 少(<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb index 1a97525..3cd2741 100644 --- a/ash/strings/ash_strings_kn.xtb +++ b/ash/strings/ash_strings_kn.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">ಸಮೀಪದ ಸಾಧನಗಳನ್ನು ಅನ್ವೇಷಿಸಲು ಬ್ಲೂಟೂತ್ ಆನ್ ಮಾಡಿ</translation> <translation id="2352467521400612932">ಸ್ಟೈಲಸ್ ಸೆಟ್ಟಿಂಗ್ಗಳು</translation> <translation id="2354174487190027830"><ph name="NAME" /> ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗುತ್ತಿದೆ</translation> +<translation id="2365393535144473978">ಮೊಬೈಲ್ ಡೇಟಾವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುವುದರಿಂದ ಬ್ಲೂಟೂತ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">ಬ್ಲೂಟೂತ್ ಸಾಧನವು "<ph name="DEVICE_NAME" />" ಜೋಡಣೆಗಾಗಿ ಅನುಮತಿಯನ್ನು ಬಯಸುತ್ತದೆ. ಸಮ್ಮತಿಸುವುದಕ್ಕೂ ಮೊದಲು, ದಯವಿಟ್ಟು ಆ ಸಾಧನದಲ್ಲಿ ಈ ಪಾಸ್ಕೀಲಿಯನ್ನು ತೋರಿಸಲಾಗಿದೆಯೇ ಎಂಬುದನ್ನು ಖಾತರಿಪಡಿಸಿಕೊಳ್ಳಿ: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">ದೋಷವೊಂದು ಕಾಣಿಸಿಕೊಂಡಿದೆ</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">ಅಪರಿಚಿತ ಸ್ವೀಕರಿಸುವವರಿಗೆ ಬಿತ್ತರಿಸಲಾಗುತ್ತಿದೆ</translation> <translation id="5947494881799873997">ಹಿಂತಿರುಗಿಸು</translation> <translation id="595202126637698455">ಕಾರ್ಯಕ್ಷಮತೆ ಟ್ರೇಸಿಂಗ್ ಸಕ್ರಿಯಗೊಂಡಿದೆ</translation> +<translation id="5957083217255311415">ಮೊಬೈಲ್ ಡೇಟಾ ಆಫ್ ಮಾಡಲಾಗಿದೆ.</translation> <translation id="5958529069007801266">ಮೇಲ್ವಿಚಾರಣೆಗೊಳಪಟ್ಟ ಬಳಕೆದಾರರು</translation> <translation id="5977415296283489383">ಹೆಡ್ಫೋನ್</translation> <translation id="5978382165065462689">ರಿಮೋಟ್ ಸಹಾಯಕದ ಮೂಲಕ ನಿಮ್ಮ ಪರದೆಯ ಹಂಚಿಕೆಯ ನಿಯಂತ್ರಣ</translation> @@ -205,6 +207,7 @@ <translation id="6691659475504239918">ಹುಡುಕಾಟ+Shift+H</translation> <translation id="6700713906295497288">IME ಮೆನು ಬಟನ್</translation> <translation id="6713285437468012787">ಬ್ಲೂಟೂತ್ ಸಾಧನವನ್ನು "<ph name="DEVICE_NAME" />" ಜೋಡಿಸಲಾಗಿದೆ ಮತ್ತು ಇದೀಗ ಎಲ್ಲಾ ಬಳಕೆದಾರರಿಗೂ ಲಭ್ಯವಿದೆ. ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ನೀವು ಈ ಜೋಡಣೆಯನ್ನು ತೆಗೆದುಹಾಕಬಹುದು.</translation> +<translation id="6715542151869432661">ಯಾವುದೇ ಮೊಬೈಲ್ ಸಾಧನಗಳು ಕಂಡುಬಂದಿಲ್ಲ.</translation> <translation id="6785414152754474415">ಬ್ಯಾಟರಿ <ph name="PERCENTAGE" />% ಪೂರ್ಣಗೊಂಡಿದೆ ಮತ್ತು ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ.</translation> <translation id="6803622936009808957">ಯಾವುದೇ ಬೆಂಬಲಿತ ಪರಿಹಾರಗಳು ಕಂಡುಬರದ ಕಾರಣ ಪ್ರದರ್ಶನಗಳನ್ನು ಪ್ರತಿಬಿಂಬಿಸಲಾಗಲಿಲ್ಲ. ಬದಲಿಗೆ ವಿಸ್ತರಿತ ಡೆಸ್ಕ್ಟಾಪ್ ಅನ್ನು ನಮೂದಿಸಲಾಗಿದೆ.</translation> <translation id="683971173229319003">Search+L</translation> @@ -270,6 +273,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Search+Esc</translation> <translation id="8878886163241303700">ಪರದೆಯನ್ನು ವಿಸ್ತರಿಸಲಾಗುತ್ತಿದೆ</translation> +<translation id="8921624153894383499">Google ಸಹಾಯಕವು ಈ ಭಾಷೆಯನ್ನು ಮಾತನಾಡುವುದಿಲ್ಲ.</translation> <translation id="8938800817013097409">USB-C ಸಾಧನ (ಹಿಂಭಾಗದಲ್ಲಿನ ಬಲ ಪೋರ್ಟ್)</translation> <translation id="8940956008527784070">ಬ್ಯಾಟರಿ ಕಡಿಮೆ (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">ಬ್ಲೂಟೂತ್</translation>
diff --git a/ash/strings/ash_strings_ko.xtb b/ash/strings/ash_strings_ko.xtb index 3d9f500..caf8d90 100644 --- a/ash/strings/ash_strings_ko.xtb +++ b/ash/strings/ash_strings_ko.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">블루투스를 사용 설정하여 근처 기기 탐색</translation> <translation id="2352467521400612932">스타일러스 설정</translation> <translation id="2354174487190027830"><ph name="NAME" /> 활성화 중</translation> +<translation id="2365393535144473978">모바일 데이터를 사용 설정하면 블루투스가 사용 설정됩니다.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">블루투스 기기 '<ph name="DEVICE_NAME" />'에서 페어링 허가를 요청합니다. 허가하기 전에 다음 패스키가 기기에 표시되는지 확인하세요. <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">오류가 발생했습니다.</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">알 수 없는 수신자로 전송 중</translation> <translation id="5947494881799873997">되돌리기</translation> <translation id="595202126637698455">성능 추적 사용 중</translation> +<translation id="5957083217255311415">모바일 데이터가 사용 중지되었습니다.</translation> <translation id="5958529069007801266">관리 대상 사용자</translation> <translation id="5977415296283489383">헤드폰</translation> <translation id="5978382165065462689">원격 지원을 통해 화면 제어 공유</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Search+Shift+H</translation> <translation id="6700713906295497288">IME 메뉴 버튼</translation> <translation id="6713285437468012787">블루투스 기기 '<ph name="DEVICE_NAME" />'이(가) 페어링되어 이제 모든 사용자가 사용할 수 있습니다. 설정에서 이 페어링을 삭제할 수 있습니다.</translation> +<translation id="6715542151869432661">휴대기기를 찾을 수 없습니다.</translation> <translation id="6785414152754474415">배터리가 <ph name="PERCENTAGE" />% 충전되었으며 충전 중입니다.</translation> <translation id="6803622936009808957">지원되는 해상도가 없으므로 디스플레이를 그대로 반영할 수 없습니다. 대신 확장 데스크톱을 시작했습니다.</translation> <translation id="683971173229319003">Search+L</translation> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Search+Esc</translation> <translation id="8878886163241303700">화면 확대</translation> +<translation id="8921624153894383499">Google 어시스턴트가 이 언어를 지원하지 않음</translation> <translation id="8938800817013097409">USB-C 기기(우측 후면 포트)</translation> <translation id="8940956008527784070">배터리 부족(<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">블루투스</translation>
diff --git a/ash/strings/ash_strings_lt.xtb b/ash/strings/ash_strings_lt.xtb index ab68384..5023b62 100644 --- a/ash/strings/ash_strings_lt.xtb +++ b/ash/strings/ash_strings_lt.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">Įjunkite „Bluetooth“, kad aptiktumėte įrenginius netoliese</translation> <translation id="2352467521400612932">Rašiklio nustatymai</translation> <translation id="2354174487190027830">Aktyvinamas „<ph name="NAME" />“</translation> +<translation id="2365393535144473978">Įgalinus mobiliojo ryšio duomenis bus įgalintas „Bluetooth“.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">„Bluetooth“ įrenginys „<ph name="DEVICE_NAME" />“ prašo leidimo susieti. Prieš sutikdami, patvirtinkite, kad šiame įrenginyje rodomas šis slaptasis raktas: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">Įvyko klaida</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">Perduodama į nežinomą imtuvą</translation> <translation id="5947494881799873997">Grąžinti</translation> <translation id="595202126637698455">Įgalintas našumo stebėjimas</translation> +<translation id="5957083217255311415">Mobiliojo ryšio duomenys išjungti.</translation> <translation id="5958529069007801266">Prižiūrimas naudotojas</translation> <translation id="5977415296283489383">Ausinės</translation> <translation id="5978382165065462689">Leidžiama valdyti jūsų ekraną naudojant Nuotolinę pagalbą.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Paieškos klavišas + „Shift“ + H</translation> <translation id="6700713906295497288">IME meniu mygtukas</translation> <translation id="6713285437468012787">„Bluetooth“ įrenginys „<ph name="DEVICE_NAME" />“ susietas ir dabar pasiekiamas visiems naudotojams. Nustatymuose galite pašalinti šį susiejimą.</translation> +<translation id="6715542151869432661">Nerasta jokių mobiliųjų įrenginių.</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> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Paieškos klavišas + „Esc“</translation> <translation id="8878886163241303700">Išplečiamas ekranas</translation> +<translation id="8921624153894383499">„Google“ padėjėjas nekalba šia kalba.</translation> <translation id="8938800817013097409">USB-C įrenginys (prievadas dešinėje, užpakalinėje dalyje)</translation> <translation id="8940956008527784070">Akumuliatorius senka (<ph name="PERCENTAGE" /> %)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_lv.xtb b/ash/strings/ash_strings_lv.xtb index 238f07e..bcdf106 100644 --- a/ash/strings/ash_strings_lv.xtb +++ b/ash/strings/ash_strings_lv.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">Ieslēdziet Bluetooth, lai atklātu tuvumā esošas ierīces</translation> <translation id="2352467521400612932">Skārienekrāna pildspalvas iestatījumi</translation> <translation id="2354174487190027830">Notiek <ph name="NAME" /> aktivizēšana.</translation> +<translation id="2365393535144473978">Iespējojot mobilos datus, tiks iespējots Bluetooth.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">Bluetooth ierīce “<ph name="DEVICE_NAME" />” vēlas saņemt atļauju, lai izveidotu savienojumu pārī. Pirms piekrītat, lūdzu, pārliecinieties, vai ierīcē tiek parādīta šī ieejas atslēga: <ph name="PASSKEY" />.</translation> <translation id="2475982808118771221">Radās kļūda</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">Apraide uz nezināmu saņēmēju</translation> <translation id="5947494881799873997">Atjaunot</translation> <translation id="595202126637698455">Veiktspējas izsekošana ir iespējota</translation> +<translation id="5957083217255311415">Mobilie dati ir izslēgti.</translation> <translation id="5958529069007801266">Uzraudzīts lietotājs</translation> <translation id="5977415296283489383">Austiņas</translation> <translation id="5978382165065462689">Ekrāna pārvaldības koplietošana, izmantojot attālo palīdzību.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Search+Shift+H</translation> <translation id="6700713906295497288">IME izvēlnes poga</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="6715542151869432661">Netika atrasta neviena mobilā ierīce.</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> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Search+Esc</translation> <translation id="8878886163241303700">Notiek ekrāna izvēršana</translation> +<translation id="8921624153894383499">Google asistents nav pieejams šajā valodā.</translation> <translation id="8938800817013097409">USB-C ierīce (pieslēgvieta aizmugurē pa labi)</translation> <translation id="8940956008527784070">Akumulators gandrīz tukšs (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_ml.xtb b/ash/strings/ash_strings_ml.xtb index c384356..decbb76 100644 --- a/ash/strings/ash_strings_ml.xtb +++ b/ash/strings/ash_strings_ml.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">സമീപത്തുള്ള ഉപകരണങ്ങൾ കണ്ടെത്താൻ Bluetooth ഓണാക്കുക</translation> <translation id="2352467521400612932">സ്റ്റൈലസ് ക്രമീകരണം</translation> <translation id="2354174487190027830"><ph name="NAME" /> സജീവമാക്കുന്നു</translation> +<translation id="2365393535144473978">മൊബൈൽ ഡാറ്റ പ്രവർത്തനക്ഷമമാക്കുമ്പോൾ Bluetooth-ഉം പ്രവർത്തനക്ഷമമാകും.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">"<ph name="DEVICE_NAME" />" എന്ന Bluetooth ഉപകരണം ജോടിയാക്കുന്നതിനുള്ള അനുമതി ആവശ്യപ്പെടുന്നു. അനുമതി നൽകുന്നതിനുമുമ്പ്, ആ ഉപകരണത്തിൽ ഈ പാസ്കീ കാണിച്ചിരിക്കുന്നുവെന്ന് സ്ഥിരീകരിക്കുക: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">ഒരു പിശക് സംഭവിച്ചു</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">ഒരു അജ്ഞാത റിസീവറിലേക്ക് കാസ്റ്റുചെയ്യുന്നു</translation> <translation id="5947494881799873997">പഴയപടിയാക്കുക</translation> <translation id="595202126637698455">പ്രകടനം പിന്തുടരൽ പ്രവർത്തനക്ഷമമാക്കി</translation> +<translation id="5957083217255311415">മൊബൈൽ ഡാറ്റ ഓഫാക്കി.</translation> <translation id="5958529069007801266">സൂപ്പർവൈസുചെയ്ത ഉപയോക്താവ്</translation> <translation id="5977415296283489383">ഹെഡ്ഫോൺ</translation> <translation id="5978382165065462689">നിങ്ങളുടെ വിദൂര സഹായി മുഖേന സ്ക്രീനിന്റെ നിയന്ത്രണം പങ്കിടുക.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">തിരയൽ+Shift+H</translation> <translation id="6700713906295497288">IME മെനു ബട്ടൺ</translation> <translation id="6713285437468012787">"<ph name="DEVICE_NAME" />" എന്ന Bluetooth ഉപകരണം ജോടിയാക്കി, അത് ഇപ്പോൾ എല്ലാ ഉപയോക്താക്കൾക്കും ലഭ്യമാണ്. ക്രമീകരണങ്ങൾ ഉപയോഗിച്ച് നിങ്ങൾക്ക് ഈ ജോടിയാക്കൽ നീക്കംചെയ്യാം.</translation> +<translation id="6715542151869432661">മൊബൈലുകളൊന്നും കണ്ടെത്തിയില്ല.</translation> <translation id="6785414152754474415">ബാറ്ററി <ph name="PERCENTAGE" />% നിറഞ്ഞിരിക്കുന്നു, ചാർജുചെയ്യൽ തുടരുന്നു.</translation> <translation id="6803622936009808957">പിന്തുണയ്ക്കുന്ന മിഴിവുകൾ കണ്ടെത്താത്തതിനാൽ പ്രദർശനങ്ങൾ പ്രതിഫലിപ്പിക്കാനായില്ല. പകരം വിപുലീകൃത ഡെസ്ക്ടോപ്പ് നൽകി.</translation> <translation id="683971173229319003">തിരയൽ+L</translation> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">തിരയൽ+Esc</translation> <translation id="8878886163241303700">സ്ക്രീൻ വിപുലീകരിക്കുന്നു</translation> +<translation id="8921624153894383499">Google അസിസ്റ്റന്റ് ഈ ഭാഷ സംസാരിക്കില്ല.</translation> <translation id="8938800817013097409">USB-C ഉപകരണം (പുറകിൽ വലതുവശത്തെ പോർട്ട്)</translation> <translation id="8940956008527784070">ബാറ്ററി കുറവാണ് (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_mr.xtb b/ash/strings/ash_strings_mr.xtb index e696b152..532c20b 100644 --- a/ash/strings/ash_strings_mr.xtb +++ b/ash/strings/ash_strings_mr.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">जवळपासचे डीव्हाइस शोधण्यासाठी ब्लुटूथ चालू करा</translation> <translation id="2352467521400612932">लेखणी सेटिंग्ज</translation> <translation id="2354174487190027830"><ph name="NAME" /> सक्रिय करत आहे</translation> +<translation id="2365393535144473978">मोबाइल डेटा चालू केल्याने ब्लूटूथ चालू होईल.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">"<ph name="DEVICE_NAME" />" Bluetooth डीव्हाइस जोडण्यासाठी परवानगी घेऊ इच्छिते. स्वीकार करण्यापूर्वी, कृपया त्या डीव्हाइसवर ही पासकी दर्शविली असल्याची पुष्टी करा: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">एक त्रुटी आली आहे</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">एका अज्ञात प्राप्तकर्त्यावर कास्ट करीत आहे</translation> <translation id="5947494881799873997">परत करा</translation> <translation id="595202126637698455">कार्यप्रदर्शन ट्रेसिंग सक्षम केले</translation> +<translation id="5957083217255311415">मोबाइल डेटा बंद केला आहे.</translation> <translation id="5958529069007801266">पर्यवेक्षी वापरकर्ता</translation> <translation id="5977415296283489383">हेडफोन</translation> <translation id="5978382165065462689">दूरस्थ सहाय्याद्वारे आपल्या स्क्रीनचे नियंत्रण सामायिक करत आहे.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Search+Shift+H</translation> <translation id="6700713906295497288">IME मेनू बटण</translation> <translation id="6713285437468012787">"<ph name="DEVICE_NAME" />" Bluetooth डीव्हाइस जोडले गेले आहे आणि सर्व वापरकर्त्यांसाठी आता उपलब्ध आहे. आपण सेटिंग्ज वापरून ही जोडणी काढू शकता.</translation> +<translation id="6715542151869432661">कोणतेही मोबाइल डीव्हाइस आढळले नाहीत.</translation> <translation id="6785414152754474415">बॅटरी <ph name="PERCENTAGE" />% भरली आहे आणि चार्ज होत आहे.</translation> <translation id="6803622936009808957">समर्थित रिजोल्यूशन न आढळल्यामुळे प्रदर्शने मिरर करू शकली नाहीत. त्याऐवजी विस्तारित डेस्कटॉप प्रविष्ट केला.</translation> <translation id="683971173229319003">Search+L</translation> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Search+Esc</translation> <translation id="8878886163241303700">स्क्रीन विस्तृत करत आहे</translation> +<translation id="8921624153894383499">Google साहाय्यक ही भाषा बोलत नाही.</translation> <translation id="8938800817013097409">USB-C डिव्हाइस (मागील बाजूचे उजवे पोर्ट)</translation> <translation id="8940956008527784070">बॅटरी कमी झाली (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_ms.xtb b/ash/strings/ash_strings_ms.xtb index 5968dafd..83a1702c 100644 --- a/ash/strings/ash_strings_ms.xtb +++ b/ash/strings/ash_strings_ms.xtb
@@ -272,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Carian+Esc</translation> <translation id="8878886163241303700">Meluaskan skrin</translation> +<translation id="8921624153894383499">Google Assistant tidak bertutur dalam bahasa ini.</translation> <translation id="8938800817013097409">Peranti USB-C (port kanan di belakang)</translation> <translation id="8940956008527784070">Bateri lemah (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_nl.xtb b/ash/strings/ash_strings_nl.xtb index 5460a74..b57d88d1f 100644 --- a/ash/strings/ash_strings_nl.xtb +++ b/ash/strings/ash_strings_nl.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">Schakel Bluetooth in om apparaten in de buurt te vinden</translation> <translation id="2352467521400612932">Stylusinstellingen</translation> <translation id="2354174487190027830"><ph name="NAME" /> activeren</translation> +<translation id="2365393535144473978">Als je mobiele data inschakelt, wordt Bluetooth ingeschakeld.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">Bluetooth-apparaat '<ph name="DEVICE_NAME" />' wil toestemming om te koppelen. Bevestig vóór het accepteren dat de volgende toegangscode op dat apparaat wordt weergegeven: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">Er is een fout opgetreden</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">Casten naar een onbekende ontvanger</translation> <translation id="5947494881799873997">Terugzetten</translation> <translation id="595202126637698455">Bijhouden van prestaties ingeschakeld</translation> +<translation id="5957083217255311415">Mobiele data zijn uitgeschakeld.</translation> <translation id="5958529069007801266">Gebruiker met beperkte rechten</translation> <translation id="5977415296283489383">Hoofdtelefoon</translation> <translation id="5978382165065462689">De controle over je scherm delen via externe ondersteuning.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Zoeken+Shift+H</translation> <translation id="6700713906295497288">IME-menuknop</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="6715542151869432661">Geen mobiele apparaten gevonden.</translation> <translation id="6785414152754474415">De batterij 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> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Zoeken+Esc</translation> <translation id="8878886163241303700">Uitgebreid scherm</translation> +<translation id="8921624153894383499">De Google Assistent spreekt deze taal niet.</translation> <translation id="8938800817013097409">USB-C-apparaat (poort rechts aan de achterkant)</translation> <translation id="8940956008527784070">Batterij is bijna leeg (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_no.xtb b/ash/strings/ash_strings_no.xtb index 2603e637..c4f8cf5 100644 --- a/ash/strings/ash_strings_no.xtb +++ b/ash/strings/ash_strings_no.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">Slå på Bluetooth for å finne enheter i nærheten</translation> <translation id="2352467521400612932">Innstillinger for pekepenn</translation> <translation id="2354174487190027830">Aktiverer <ph name="NAME" /></translation> +<translation id="2365393535144473978">Hvis du slår på mobildata, blir Bluetooth også slått på.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">Bluetooth-enheten «<ph name="DEVICE_NAME" />» ber om tillatelse til å koble til. Før du godtar dette, må du bekrefte at denne tilgangskoden vises på den aktuelle enheten: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">Det oppstod en feil</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">Caster til en ukjent mottaker</translation> <translation id="5947494881799873997">Tilbakestill</translation> <translation id="595202126637698455">Ytelsessporing er aktivert</translation> +<translation id="5957083217255311415">Mobildata er slått av.</translation> <translation id="5958529069007801266">Administrert bruker</translation> <translation id="5977415296283489383">Hodetelefon</translation> <translation id="5978382165065462689">Deler kontroll av skjermen via fjernhjelp.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Søk + Shift + H</translation> <translation id="6700713906295497288">IME-menyknappen</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="6715542151869432661">Fant ingen mobilenheter.</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> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Søk+Esc</translation> <translation id="8878886163241303700">Utvidet skjerm</translation> +<translation id="8921624153894383499">Google-assistenten kan ikke dette språket.</translation> <translation id="8938800817013097409">USB-C-enhet (høyre port på baksiden)</translation> <translation id="8940956008527784070">Lavt batterinivå (<ph name="PERCENTAGE" /> %)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_pl.xtb b/ash/strings/ash_strings_pl.xtb index 74cc33a..773cc781 100644 --- a/ash/strings/ash_strings_pl.xtb +++ b/ash/strings/ash_strings_pl.xtb
@@ -272,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Szukaj+Esc</translation> <translation id="8878886163241303700">Rozszerzony ekran</translation> +<translation id="8921624153894383499">Asystent Google nie mówi w tym języku.</translation> <translation id="8938800817013097409">Urządzenie USB-C (prawy port z tyłu)</translation> <translation id="8940956008527784070">Niski stan baterii (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb index dd3cae0..a2f9e537 100644 --- a/ash/strings/ash_strings_pt-BR.xtb +++ b/ash/strings/ash_strings_pt-BR.xtb
@@ -55,7 +55,7 @@ <translation id="2338501278241028356">Ativar o Bluetooth para descobrir dispositivos nas proximidades</translation> <translation id="2352467521400612932">Configurações da stylus</translation> <translation id="2354174487190027830">Ativando <ph name="NAME" /></translation> -<translation id="2365393535144473978">A ativação dos dados móveis ativará o Bluetooth.</translation> +<translation id="2365393535144473978">A ativação dos dados móveis também ativará o Bluetooth.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">O dispositivo Bluetooth "<ph name="DEVICE_NAME" />" deseja permissão para realizar o pareamento. Antes de aceitar, verifique se esta senha aparece no dispositivo: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">Ocorreu um erro</translation> @@ -272,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Pesquisa+Esc</translation> <translation id="8878886163241303700">Tela ampla</translation> +<translation id="8921624153894383499">O Google Assistente não fala esse idioma.</translation> <translation id="8938800817013097409">Dispositivo USB-C (porta traseira da direita)</translation> <translation id="8940956008527784070">Nível de bateria baixo (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_pt-PT.xtb b/ash/strings/ash_strings_pt-PT.xtb index af0e1bf..01885a5 100644 --- a/ash/strings/ash_strings_pt-PT.xtb +++ b/ash/strings/ash_strings_pt-PT.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">Ativar o Bluetooth para detetar dispositivos próximos</translation> <translation id="2352467521400612932">Definições da caneta stylus</translation> <translation id="2354174487190027830">A ativar <ph name="NAME" /></translation> +<translation id="2365393535144473978">A ativação dos dados móveis ativa o Bluetooth.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">O dispositivo Bluetooth "<ph name="DEVICE_NAME" />" necessita de autorização para sincronizar. Antes de aceitar, confirme que esta chave está indicada nesse dispositivo: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">Ocorreu um erro</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">A transmitir para um recetor desconhecido</translation> <translation id="5947494881799873997">Reverter</translation> <translation id="595202126637698455">Rastreio do desempenho ativado</translation> +<translation id="5957083217255311415">Os dados móveis estão desativados.</translation> <translation id="5958529069007801266">Utilizador supervisionado</translation> <translation id="5977415296283489383">Auscultador</translation> <translation id="5978382165065462689">A partilhar o controlo do seu ecrã através da Assistência remota.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Pesquisa + Shift + H</translation> <translation id="6700713906295497288">Botão de menu IME</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="6715542151869432661">Não foram encontrados dispositivos móveis.</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> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Pesquisa+Esc</translation> <translation id="8878886163241303700">Ecrã alargado</translation> +<translation id="8921624153894383499">O Assistente do Google não fala este idioma.</translation> <translation id="8938800817013097409">Dispositivo USB-C (porta traseira direita)</translation> <translation id="8940956008527784070">Bateria fraca (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_ro.xtb b/ash/strings/ash_strings_ro.xtb index eb5f33b..e61c0621 100644 --- a/ash/strings/ash_strings_ro.xtb +++ b/ash/strings/ash_strings_ro.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">Pentru a descoperi dispozitivele din apropiere, activează Bluetooth</translation> <translation id="2352467521400612932">Setările creionului</translation> <translation id="2354174487190027830">Se activează <ph name="NAME" /></translation> +<translation id="2365393535144473978">Activând datele mobile, se va activa Bluetooth.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">Dispozitivul Bluetooth „<ph name="DEVICE_NAME" />” solicită permisiunea de a se conecta. Înainte de a continua, verificați dacă această parolă apare pe dispozitivul respectiv: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">A apărut o eroare</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">Se proiectează pe un receiver necunoscut</translation> <translation id="5947494881799873997">Reveniți</translation> <translation id="595202126637698455">Urmărirea performanței este activată</translation> +<translation id="5957083217255311415">Datele mobile sunt dezactivate.</translation> <translation id="5958529069007801266">Utilizator monitorizat</translation> <translation id="5977415296283489383">Căști</translation> <translation id="5978382165065462689">În prezent, permiți controlul la ecran prin Asistență la distanță.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Tasta de căutare + Shift + H</translation> <translation id="6700713906295497288">Butonul de meniu IME</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="6715542151869432661">Nu s-au găsit dispozitive mobile.</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> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Tasta de căutare + Esc</translation> <translation id="8878886163241303700">Ecran extins</translation> +<translation id="8921624153894383499">Asistentul Google nu vorbește în această limbă.</translation> <translation id="8938800817013097409">Dispozitiv USB-C (portul din dreapta în spate)</translation> <translation id="8940956008527784070">Baterie slabă (<ph name="PERCENTAGE" /> %)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_ru.xtb b/ash/strings/ash_strings_ru.xtb index 93db7f7c..8a455b3 100644 --- a/ash/strings/ash_strings_ru.xtb +++ b/ash/strings/ash_strings_ru.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">Включите Bluetooth, чтобы найти устройства</translation> <translation id="2352467521400612932">Настройки стилуса</translation> <translation id="2354174487190027830">Активация <ph name="NAME" /></translation> +<translation id="2365393535144473978">Вместе с мобильным Интернетом включится Bluetooth.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">Устройству <ph name="DEVICE_NAME" /> требуется разрешение на подключение через Bluetooth. Проверьте, отображается ли на нем код: <ph name="PASSKEY" />.</translation> <translation id="2475982808118771221">Произошел сбой.</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">Трансляция на неизвестное устройство</translation> <translation id="5947494881799873997">Отменить</translation> <translation id="595202126637698455">Включено отслеживание эффективности</translation> +<translation id="5957083217255311415">Мобильный Интернет отключен.</translation> <translation id="5958529069007801266">Контролируемый профиль</translation> <translation id="5977415296283489383">Наушники</translation> <translation id="5978382165065462689">Доступ к экрану с помощью удаленного помощника</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">ПОИСК + SHIFT + H</translation> <translation id="6700713906295497288">Кнопка меню редактора методов ввода</translation> <translation id="6713285437468012787">Устройство <ph name="DEVICE_NAME" /> подключено через Bluetooth и доступно всем пользователям. Вы можете отключить его на странице настроек.</translation> +<translation id="6715542151869432661">Мобильные устройства не найдены.</translation> <translation id="6785414152754474415">Батарея заряжена на <ph name="PERCENTAGE" />% и подключена к источнику питания.</translation> <translation id="6803622936009808957">Не удалось дублировать изображение экрана, т. к. указанное разрешение не поддерживается. Включен режим расширенного рабочего стола.</translation> <translation id="683971173229319003">Клавиша поиска + L</translation> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Клавиша поиска + Esc</translation> <translation id="8878886163241303700">Раскрытый экран</translation> +<translation id="8921624153894383499">Google Ассистент не говорит на этом языке</translation> <translation id="8938800817013097409">Устройство USB-C (порт справа на задней панели)</translation> <translation id="8940956008527784070">Низкий заряд батареи (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb index c8ad60a..4ef97b4 100644 --- a/ash/strings/ash_strings_sk.xtb +++ b/ash/strings/ash_strings_sk.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">Ak chcete nájsť zariadenia v okolí, zapnite Bluetooth</translation> <translation id="2352467521400612932">Nastavenia dotykového pera</translation> <translation id="2354174487190027830">Aktivujte sa sieť <ph name="NAME" /></translation> +<translation id="2365393535144473978">Zapnutím mobilných dát aktivujete Bluetooth.</translation> <translation id="2391579633712104609">180 °</translation> <translation id="2429753432712299108">Zariadenie Bluetooth s názvom <ph name="DEVICE_NAME" /> žiada o povolenie párovania. Skôr ako žiadosti vyhoviete, overte, či sa na danom zariadení zobrazuje nasledujúci prístupový kľúč: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">Vyskytla sa chyba</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">Prebieha prenášanie na neznámy prijímač</translation> <translation id="5947494881799873997">Vrátiť</translation> <translation id="595202126637698455">Sledovanie výkonnosti je povolené</translation> +<translation id="5957083217255311415">Mobilné dáta sú vypnuté.</translation> <translation id="5958529069007801266">Kontrolovaný používateľ</translation> <translation id="5977415296283489383">Slúchadlo</translation> <translation id="5978382165065462689">Ovládanie obrazovky sa zdieľa prostredníctvom Vzdialenej pomoci.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Hľadať+Shift+H</translation> <translation id="6700713906295497288">Tlačidlo ponuky IME</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="6715542151869432661">Neboli nájdené žiadne mobilné zariadenia.</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> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90 °</translation> <translation id="8850991929411075241">Hľadať+Esc</translation> <translation id="8878886163241303700">Rozšírenie obrazovky</translation> +<translation id="8921624153894383499">Asistent Google nehovorí týmto jazykom.</translation> <translation id="8938800817013097409">Zariadenie USB-C (pravý port vzadu)</translation> <translation id="8940956008527784070">Kapacita batérie je nízka (<ph name="PERCENTAGE" /> %)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_sl.xtb b/ash/strings/ash_strings_sl.xtb index 395ea10f..1c68e9f 100644 --- a/ash/strings/ash_strings_sl.xtb +++ b/ash/strings/ash_strings_sl.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">Vklopite Bluetooth, če želite odkriti naprave v bližini</translation> <translation id="2352467521400612932">Nastavitve pisala</translation> <translation id="2354174487190027830">Aktiviranje omrežja <ph name="NAME" /></translation> +<translation id="2365393535144473978">Če omogočite prenos podatkov v mobilnem omrežju, bo omogočen Bluetooth.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">Naprava Bluetooth »<ph name="DEVICE_NAME" />« želi dovoljenje za seznanjanje. Preden sprejmete, se prepričajte, da je na napravi prikazano to geslo: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">Prišlo je do napake</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">Predvajanje na neznanem sprejemniku</translation> <translation id="5947494881799873997">Razveljavi</translation> <translation id="595202126637698455">Sledenje učinkovitosti delovanja je omogočeno</translation> +<translation id="5957083217255311415">Prenos podatkov v mobilnem omrežju je izklopljen.</translation> <translation id="5958529069007801266">Zaščiteni uporabnik</translation> <translation id="5977415296283489383">Slušalke</translation> <translation id="5978382165065462689">Deljenje nadzora nad zaslonom prek pomoči na daljavo.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Tipka za iskanje + Shift + H</translation> <translation id="6700713906295497288">Menijski gumb UNV-ja</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="6715542151869432661">Ni mobilnih naprav.</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> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Iskanje + Esc</translation> <translation id="8878886163241303700">Razširjanje zaslona</translation> +<translation id="8921624153894383499">Pomočnik Google ne podpira tega jezika.</translation> <translation id="8938800817013097409">Naprava USB-C (vrata desno zadaj)</translation> <translation id="8940956008527784070">Akumulator je skoraj prazen (<ph name="PERCENTAGE" /> %)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_sr.xtb b/ash/strings/ash_strings_sr.xtb index b51b6ea..e2c1126 100644 --- a/ash/strings/ash_strings_sr.xtb +++ b/ash/strings/ash_strings_sr.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">Укључите Bluetooth да бисте открили уређаје у близини</translation> <translation id="2352467521400612932">Подешавања писаљке</translation> <translation id="2354174487190027830">Активирање мреже <ph name="NAME" /></translation> +<translation id="2365393535144473978">Ако омогућите мобилне податке, омогућавате Bluetooth.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">Bluetooth уређај „<ph name="DEVICE_NAME" />“ жели дозволу за упаривање. Пре него што му је дате, уверите се да је ова шифра приказана на том уређају: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">Дошло је до грешке</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">Пребацује се на непознати пријемник</translation> <translation id="5947494881799873997">Врати</translation> <translation id="595202126637698455">Праћење учинка је омогућено</translation> +<translation id="5957083217255311415">Мобилни подаци су искључени.</translation> <translation id="5958529069007801266">Корисник под надзором</translation> <translation id="5977415296283489383">Слушалице</translation> <translation id="5978382165065462689">Делите контролу над екраном преко Даљинске помоћи.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Тастер за претрагу + Shift + H</translation> <translation id="6700713906295497288">Дугме IME менија</translation> <translation id="6713285437468012787">Bluetooth уређај „<ph name="DEVICE_NAME" />“ је упарен и сада је доступан свим корисницима. Можете да уклоните то упаривање помоћу Подешавања.</translation> +<translation id="6715542151869432661">Није пронађен ниједан мобилни уређај.</translation> <translation id="6785414152754474415">Батерија је <ph name="PERCENTAGE" />% пуна и још увек се пуни.</translation> <translation id="6803622936009808957">Није могуће пресликати екране зато што није пронађена ниједна подржана резолуција. Уместо тога, приказује се проширена радна површина.</translation> <translation id="683971173229319003">Search+L</translation> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Search+Esc</translation> <translation id="8878886163241303700">Проширени екран</translation> +<translation id="8921624153894383499">Google помоћник не говори овај језик.</translation> <translation id="8938800817013097409">Уређај са USB прикључком типа C (задњи десни порт)</translation> <translation id="8940956008527784070">Батерија је скоро празна (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_sv.xtb b/ash/strings/ash_strings_sv.xtb index b15debafb..fbf59186 100644 --- a/ash/strings/ash_strings_sv.xtb +++ b/ash/strings/ash_strings_sv.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">Aktivera Bluetooth så att det går att upptäcka enheter i närheten</translation> <translation id="2352467521400612932">Inställningar för e-penna</translation> <translation id="2354174487190027830">Aktiverar <ph name="NAME" /></translation> +<translation id="2365393535144473978">Om du aktiverar mobildata aktiveras Bluetooth.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">Bluetooth-enheten <ph name="DEVICE_NAME" /> har begärt tillstånd för koppling. Innan du godkänner bekräftar du att den här lösenordsnyckeln visas på den enheten: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">Det uppstod ett fel</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">Castar till en okänd mottagare</translation> <translation id="5947494881799873997">Återgå</translation> <translation id="595202126637698455">Resultatspårning aktiverat</translation> +<translation id="5957083217255311415">Mobildata har inaktiverats.</translation> <translation id="5958529069007801266">Övervakad användare</translation> <translation id="5977415296283489383">Hörlurar</translation> <translation id="5978382165065462689">Dela kontroll över skärmen via Fjärrhjälp.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Sök+Skift+H</translation> <translation id="6700713906295497288">IME-menyknapp</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="6715542151869432661">Inga mobila enheter hittades.</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> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Sök+Escape</translation> <translation id="8878886163241303700">Utökad skärm</translation> +<translation id="8921624153894383499">Google Assistent talar inte det här språket.</translation> <translation id="8938800817013097409">USB-C-enhet (högra porten på baksidan)</translation> <translation id="8940956008527784070">Låg batterinivå (<ph name="PERCENTAGE" /> %)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_sw.xtb b/ash/strings/ash_strings_sw.xtb index 37f47a8..12ce51f 100644 --- a/ash/strings/ash_strings_sw.xtb +++ b/ash/strings/ash_strings_sw.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">Washa Bluetooth ili ugundue vifaa vilivyo karibu</translation> <translation id="2352467521400612932">Mipangilio ya stylus</translation> <translation id="2354174487190027830">Inaanza kutumia <ph name="NAME" /></translation> +<translation id="2365393535144473978">Kuwasha data ya mtandao wa simu kutawasha Bluetooth.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">Kifaa cha Bluetooth cha "<ph name="DEVICE_NAME" />" kinaomba idhini ya kuoanisha. Kabla hujakubali, tafadhali thibitisha kwamba nenosiri hili linaonyeshwa kwenye kifaa hicho: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">Hitilafu fulani imetokea</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">Inatuma kwa mpokeaji asiyejulikana</translation> <translation id="5947494881799873997">Rejesha</translation> <translation id="595202126637698455">Ufuatiliaji wa utendaji umewashwa</translation> +<translation id="5957083217255311415">Data ya mtandao wa simu imezimwa.</translation> <translation id="5958529069007801266">Mtumiaji anayesimamiwa</translation> <translation id="5977415296283489383">Vipokea sauti</translation> <translation id="5978382165065462689">Kushiriki udhibiti wa skrini yako kupitia Usaidizi wa Mbali.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Search+Shift+H</translation> <translation id="6700713906295497288">Kitufe cha menyu ya IME</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="6715542151869432661">Hakuna vifaa vya mkononi vilivyopatikana.</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> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Search+Esc</translation> <translation id="8878886163241303700">Kuongeza skrini</translation> +<translation id="8921624153894383499">Programu ya Mratibu wa Google haina huduma ya lugha hii.</translation> <translation id="8938800817013097409">Kifaa cha USB-C (mlango wa kulia nyuma)</translation> <translation id="8940956008527784070">Betri inaisha (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_ta.xtb b/ash/strings/ash_strings_ta.xtb index 1aa4705..9b562531 100644 --- a/ash/strings/ash_strings_ta.xtb +++ b/ash/strings/ash_strings_ta.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">அருகிலுள்ள சாதனங்களைக் கண்டறிய, புளூடூத்தை இயக்கவும்</translation> <translation id="2352467521400612932">ஸ்டைலஸ் அமைப்புகள்</translation> <translation id="2354174487190027830"><ph name="NAME" /> ஐச் செயல்படுத்துகிறது</translation> +<translation id="2365393535144473978">மொபைல் டேட்டாவை இயக்கினால், புளூடூத் இயக்கப்படும்.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">புளூடூத் சாதனம் "<ph name="DEVICE_NAME" />", இணைப்பதற்கான அனுமதியை விரும்புகிறது. ஏற்றுக்கொள்வதற்கு முன்னர், இந்தக் கடவுச்சொல் அந்தச் சாதனத்தில் காண்பிக்கப்பட்டது என்பதை உறுதிப்படுத்தவும்: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">ஒரு பிழை ஏற்பட்டது</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">தெரியாத ரிசீவருக்கு அனுப்புகிறது</translation> <translation id="5947494881799873997">மாற்றியமை</translation> <translation id="595202126637698455">செயல்திறனைத் தடமறிதல் இயக்கப்பட்டுள்ளது</translation> +<translation id="5957083217255311415">மொபைல் டேட்டா முடக்கப்பட்டது.</translation> <translation id="5958529069007801266">கண்காணிக்கப்படும் பயனர்</translation> <translation id="5977415296283489383">ஹெட்ஃபோன்</translation> <translation id="5978382165065462689">தொலைநிலை உதவி மூலம் உங்கள் திரையின் கட்டுப்பாட்டைப் பகிர்கிறது.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">தேடல்+ஷிஃப்ட்+H</translation> <translation id="6700713906295497288">IME மெனு பொத்தான்</translation> <translation id="6713285437468012787">புளூடூத் சாதனம் "<ph name="DEVICE_NAME" />" ஆனது இணைக்கப்பட்டது மற்றும் இப்போது எல்லா பயனர்களுக்கும் கிடைக்கக்கூடியதாக உள்ளது. அமைப்புகளைப் பயன்படுத்தி இந்த இணைத்தலை நீங்கள் அகற்றலாம்.</translation> +<translation id="6715542151869432661">மொபைல் சாதனங்கள் எதுவுமில்லை.</translation> <translation id="6785414152754474415">பேட்டரி <ph name="PERCENTAGE" />% நிரம்பியது, மேலும் சார்ஜ் ஆகிறது.</translation> <translation id="6803622936009808957">ஆதரிக்கும் தெளிவுகள் கிடைக்காததால் காட்சிகளைப் பிரதிபலிக்க முடியவில்லை. பதிலாக நீட்டிக்கப்பட்ட டெஸ்க்டாப்பிற்குச் சென்றது.</translation> <translation id="683971173229319003">Search+L</translation> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Search+Esc</translation> <translation id="8878886163241303700">திரையை விரிவாக்குகிறது</translation> +<translation id="8921624153894383499">Google அசிஸ்டண்ட், இந்த மொழியை ஆதரிக்கவில்லை.</translation> <translation id="8938800817013097409">USB-C சாதனம் (பின்பக்கம் உள்ள வலது போர்ட்)</translation> <translation id="8940956008527784070">பேட்டரி குறைவு (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">புளூடூத்</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb index f048c63d..ff0de27b 100644 --- a/ash/strings/ash_strings_te.xtb +++ b/ash/strings/ash_strings_te.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">సమీప పరికరాలను కనుగొనడానికి బ్లూటూత్ను ఆన్ చేయండి</translation> <translation id="2352467521400612932">స్టైలస్ సెట్టింగ్లు</translation> <translation id="2354174487190027830"><ph name="NAME" />ని సక్రియం చేస్తోంది</translation> +<translation id="2365393535144473978">మొబైల్ డేటాను ప్రారంభించడం బ్లూటూత్ని ప్రారంభిస్తుంది.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">బ్లూటూత్ పరికరం "<ph name="DEVICE_NAME" />" జత కావడానికి అనుమతి కోరుతోంది. ఆమోదించడానికి ముందు, దయచేసి ఆ పరికరంలో ఈ పాస్కీ చూపబడుతోందని నిర్ధారించుకోండి: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">ఒక లోపం సంభవించింది</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">తెలియని స్వీకర్తకు ప్రసారం చేస్తోంది</translation> <translation id="5947494881799873997">తిరిగి పూర్వ స్థితికి మార్చు</translation> <translation id="595202126637698455">పనితీరుని గుర్తించడం ప్రారంభించబడింది</translation> +<translation id="5957083217255311415">మొబైల్ డేటా ఆపివేయబడింది.</translation> <translation id="5958529069007801266">పర్యవేక్షించబడే వినియోగదారు</translation> <translation id="5977415296283489383">హెడ్ఫోన్</translation> <translation id="5978382165065462689">రిమోట్ సహాయం విధానంలో మీ స్క్రీన్ నియంత్రణను భాగస్వామ్యం చేస్తోంది.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Search+Shift+H</translation> <translation id="6700713906295497288">IME మెను బటన్</translation> <translation id="6713285437468012787">బ్లూటూత్ పరికరం "<ph name="DEVICE_NAME" />" జత చేయబడింది మరియు ఇప్పుడు అందరు వినియోగదారులకు అందుబాటులో ఉంది. మీరు సెట్టింగ్లను ఉపయోగించి ఈ జతను తీసివేయవచ్చు.</translation> +<translation id="6715542151869432661">మొబైల్ పరికరాలేమీ కనుగొనబడలేదు.</translation> <translation id="6785414152754474415">బ్యాటరీ <ph name="PERCENTAGE" />% నిండింది మరియు ఛార్జ్ అవుతోంది.</translation> <translation id="6803622936009808957">మద్దతు ఉన్న రిజల్యూషన్లు కనుగొనబడనందున ప్రదర్శనలను ప్రతిబింబించడం సాధ్యపడలేదు. దానికి బదులుగా విస్తారిత డెస్క్టాప్కు మారారు.</translation> <translation id="683971173229319003">Search+L</translation> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Search+Esc</translation> <translation id="8878886163241303700">స్క్రీన్ విస్తరించబడుతోంది</translation> +<translation id="8921624153894383499">Google సహాయకం ఈ భాషను మాట్లాడదు.</translation> <translation id="8938800817013097409">USB-C పరికరం (వెనుక భాగంలో కుడి పోర్ట్)</translation> <translation id="8940956008527784070">బ్యాటరీ తక్కువగా ఉంది (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_th.xtb b/ash/strings/ash_strings_th.xtb index 55814b1..5305bc3 100644 --- a/ash/strings/ash_strings_th.xtb +++ b/ash/strings/ash_strings_th.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">เปิดบลูทูธเพื่อค้นหาอุปกรณ์ใกล้เคียง</translation> <translation id="2352467521400612932">การตั้งค่าสไตลัส</translation> <translation id="2354174487190027830">กำลังเปิดใช้งาน <ph name="NAME" /></translation> +<translation id="2365393535144473978">การเปิดใช้เน็ตมือถือจะเปิดใช้บลูทูธ</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">อุปกรณ์บลูทูธ "<ph name="DEVICE_NAME" />" ต้องการสิทธิ์ในการจับคู่ ก่อนที่จะยอมรับ โปรดยืนยันว่ารหัสผ่านนี้ปรากฏบนอุปกรณ์นั้น: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">มีข้อผิดพลาดเกิดขึ้น</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">กำลังแคสต์ไปยังเครื่องรับที่ไม่รู้จัก</translation> <translation id="5947494881799873997">ย้อนกลับ</translation> <translation id="595202126637698455">เปิดใช้งานการติดตามการปฏิบัติงานแล้ว</translation> +<translation id="5957083217255311415">เน็ตมือถือปิดอยู่</translation> <translation id="5958529069007801266">ผู้ใช้ภายใต้การดูแล</translation> <translation id="5977415296283489383">ชุดหูฟัง</translation> <translation id="5978382165065462689">กำลังแชร์การควบคุมหน้าจอผ่านความช่วยเหลือระยะไกล</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Search+Shift+H</translation> <translation id="6700713906295497288">ปุ่มเมนู IME</translation> <translation id="6713285437468012787">อุปกรณ์บลูทูธ "<ph name="DEVICE_NAME" />" ได้รับการจับคู่และขณะนี้พร้อมให้บริการแก่ผู้ใช้ทุกคนแล้ว คุณสามารถลบการจับคู่นี้โดยใช้การตั้งค่า</translation> +<translation id="6715542151869432661">ไม่พบอุปกรณ์เคลื่อนที่</translation> <translation id="6785414152754474415">มีแบตเตอรี่ <ph name="PERCENTAGE" />% และกำลังชาร์จ</translation> <translation id="6803622936009808957">ไม่สามารถแสดงผลคู่ขนานได้เนื่องจากไม่พบความละเอียดที่สนับสนุน เข้าสู่เดสก์ท็อปแบบขยายแทน</translation> <translation id="683971173229319003">Search+L</translation> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Search+Esc</translation> <translation id="8878886163241303700">กำลังขยายหน้าจอ</translation> +<translation id="8921624153894383499">Google Assistant ยังพูดภาษานี้ไม่ได้</translation> <translation id="8938800817013097409">อุปกรณ์ USB-C (พอร์ตด้านหลังขวา)</translation> <translation id="8940956008527784070">แบตเตอรี่ต่ำ (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">บลูทูธ</translation>
diff --git a/ash/strings/ash_strings_tr.xtb b/ash/strings/ash_strings_tr.xtb index 435c153b..bc10c385 100644 --- a/ash/strings/ash_strings_tr.xtb +++ b/ash/strings/ash_strings_tr.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">Yakındaki cihazları keşfetmek için Bluetooth'u aç</translation> <translation id="2352467521400612932">Ekran kalemi ayarları</translation> <translation id="2354174487190027830"><ph name="NAME" /> etkinleştiriliyor</translation> +<translation id="2365393535144473978">Mobil veri etkinleştirildiğinde Bluetooth açılır.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">"<ph name="DEVICE_NAME" />" adlı Bluetooth cihaz eşleme izni istiyor. Kabul etmeden önce şu cihazda gösterilen bu parolanın gösterildiğini onaylayın: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">Bir hata oluştu</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">Bilinmeyen bir alıcıya yayınlanıyor</translation> <translation id="5947494881799873997">Geri döndür</translation> <translation id="595202126637698455">Performans izleme etkin</translation> +<translation id="5957083217255311415">Mobil veri kapatıldı.</translation> <translation id="5958529069007801266">Denetlenen kullanıcı</translation> <translation id="5977415296283489383">Kulaklık</translation> <translation id="5978382165065462689">Ekranınızın kontrolü Uzaktan Yardım kullanılarak paylaşılıyor.</translation> @@ -205,6 +207,7 @@ <translation id="6691659475504239918">Arama+Üst Karakter+H</translation> <translation id="6700713906295497288">IME menü düğmesi</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="6715542151869432661">Mobil cihaz bulunamadı.</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> @@ -270,6 +273,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Ara+Esc</translation> <translation id="8878886163241303700">Genişletilmiş ekran</translation> +<translation id="8921624153894383499">Google Asistan bu dili konuşmuyor.</translation> <translation id="8938800817013097409">USB-C cihaz (arkadaki sağ bağlantı noktası)</translation> <translation id="8940956008527784070">Pil gücü az (%<ph name="PERCENTAGE" />)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_uk.xtb b/ash/strings/ash_strings_uk.xtb index 67b50d2..5b3b523 100644 --- a/ash/strings/ash_strings_uk.xtb +++ b/ash/strings/ash_strings_uk.xtb
@@ -272,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Search (Пошук)+Esc</translation> <translation id="8878886163241303700">Розширення екрана</translation> +<translation id="8921624153894383499">Google Помічник не підтримує цю мову.</translation> <translation id="8938800817013097409">Пристрій, під’єднаний до порту USB-C (праворуч на задній панелі)</translation> <translation id="8940956008527784070">Низький заряд акумулятора (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb index a9855f5..af16378 100644 --- a/ash/strings/ash_strings_vi.xtb +++ b/ash/strings/ash_strings_vi.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">Bật Bluetooth để khám phá các thiết bị lân cận</translation> <translation id="2352467521400612932">Cài đặt bút cảm ứng</translation> <translation id="2354174487190027830">Kích hoạt <ph name="NAME" /></translation> +<translation id="2365393535144473978">Bật dữ liệu di động sẽ bật Bluetooth.</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">Thiết bị Bluetooth "<ph name="DEVICE_NAME" />" muốn được phép ghép nối. Trước khi chấp nhận, vui lòng xác nhận rằng mã xác nhận này đã hiển thị trên thiết bị đó: <ph name="PASSKEY" /></translation> <translation id="2475982808118771221">Đã xảy ra lôi</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">Đang truyền tới bộ thu không xác định</translation> <translation id="5947494881799873997">Hoàn nguyên</translation> <translation id="595202126637698455">Đã bật theo dõi hoạt động</translation> +<translation id="5957083217255311415">Dữ liệu di động đã bị tắt.</translation> <translation id="5958529069007801266">Người dùng được giám sát</translation> <translation id="5977415296283489383">Tai nghe</translation> <translation id="5978382165065462689">Chia sẻ quyền kiểm soát màn hình của bạn qua Trợ giúp từ xa.</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">Search+Shift+H</translation> <translation id="6700713906295497288">Nút menu IME</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="6715542151869432661">Không tìm thấy thiết bị di động nào.</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> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Search+Esc</translation> <translation id="8878886163241303700">Mở rộng màn hình</translation> +<translation id="8921624153894383499">Trợ lý Google không hỗ trợ ngôn ngữ này.</translation> <translation id="8938800817013097409">Thiết bị USB-C (cổng bên phải ở phía sau)</translation> <translation id="8940956008527784070">Pin yếu (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">Bluetooth</translation>
diff --git a/ash/strings/ash_strings_zh-CN.xtb b/ash/strings/ash_strings_zh-CN.xtb index 3a461eae..75f02f3 100644 --- a/ash/strings/ash_strings_zh-CN.xtb +++ b/ash/strings/ash_strings_zh-CN.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">开启蓝牙以发现附近的设备</translation> <translation id="2352467521400612932">触控笔设置</translation> <translation id="2354174487190027830">正在激活“<ph name="NAME" />”</translation> +<translation id="2365393535144473978">如果您启用移动数据网络,蓝牙亦会随之开启。</translation> <translation id="2391579633712104609">180°</translation> <translation id="2429753432712299108">蓝牙设备“<ph name="DEVICE_NAME" />”需要配对许可。在接受之前,请确保该设备上显示以下配对密钥:<ph name="PASSKEY" /></translation> <translation id="2475982808118771221">出现错误</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">正在投射至未知接收器</translation> <translation id="5947494881799873997">还原</translation> <translation id="595202126637698455">已启用性能跟踪</translation> +<translation id="5957083217255311415">移动数据网络现处于关闭状态。</translation> <translation id="5958529069007801266">受监管用户</translation> <translation id="5977415296283489383">耳机</translation> <translation id="5978382165065462689">正在通过远程协助共享您屏幕的控制权限。</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">搜索键+Shift+H</translation> <translation id="6700713906295497288">IME 菜单按钮</translation> <translation id="6713285437468012787">蓝牙设备“<ph name="DEVICE_NAME" />”已配对,现可供所有用户使用。您可以通过“设置”取消此配对。</translation> +<translation id="6715542151869432661">找不到任何移动设备。</translation> <translation id="6785414152754474415">电池电量为<ph name="PERCENTAGE" />%(正在充电)。</translation> <translation id="6803622936009808957">找不到系统支持的分辨率,因此无法镜像显示屏。已改为进入扩展桌面。</translation> <translation id="683971173229319003">Search+L</translation> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90°</translation> <translation id="8850991929411075241">Search+Esc</translation> <translation id="8878886163241303700">正在扩展屏幕</translation> +<translation id="8921624153894383499">Google 智能助理不支持此语言。</translation> <translation id="8938800817013097409">USB-C 设备(背面右侧端口)</translation> <translation id="8940956008527784070">电池电量不足 (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">蓝牙</translation>
diff --git a/ash/strings/ash_strings_zh-TW.xtb b/ash/strings/ash_strings_zh-TW.xtb index 94c86ac..922dc7c 100644 --- a/ash/strings/ash_strings_zh-TW.xtb +++ b/ash/strings/ash_strings_zh-TW.xtb
@@ -55,6 +55,7 @@ <translation id="2338501278241028356">開啟藍牙即可偵測附近的裝置</translation> <translation id="2352467521400612932">觸控筆設定</translation> <translation id="2354174487190027830">正在啟用 <ph name="NAME" /></translation> +<translation id="2365393535144473978">如果啟用行動數據,藍牙功能也會一併開啟。</translation> <translation id="2391579633712104609">180 度</translation> <translation id="2429753432712299108">藍牙裝置「<ph name="DEVICE_NAME" />」要求配對權限。接受要求前,請確認裝置顯示以下密碼金鑰:<ph name="PASSKEY" /></translation> <translation id="2475982808118771221">發生錯誤</translation> @@ -171,6 +172,7 @@ <translation id="5927132638760172455">正在投放至不明接收端</translation> <translation id="5947494881799873997">還原</translation> <translation id="595202126637698455">效能追蹤已啟用</translation> +<translation id="5957083217255311415">行動數據已關閉。</translation> <translation id="5958529069007801266">受監管的使用者</translation> <translation id="5977415296283489383">耳機</translation> <translation id="5978382165065462689">透過遠端協助分享螢幕控制功能。</translation> @@ -204,6 +206,7 @@ <translation id="6691659475504239918">搜尋鍵 + Shift 鍵 + H 鍵</translation> <translation id="6700713906295497288">IME 選單按鈕</translation> <translation id="6713285437468012787">藍牙裝置「<ph name="DEVICE_NAME" />」已配對成功,可供所有使用者使用。如要移除配對,請使用「設定」。</translation> +<translation id="6715542151869432661">找不到行動裝置。</translation> <translation id="6785414152754474415">電池電量為 <ph name="PERCENTAGE" />% (充電中)。</translation> <translation id="6803622936009808957">找不到系統支援的解析度,因此無法顯示鏡像。已改為進入延伸桌面。</translation> <translation id="683971173229319003">搜尋鍵 + L 鍵</translation> @@ -269,6 +272,7 @@ <translation id="8828714802988429505">90 度</translation> <translation id="8850991929411075241">搜尋鍵 + Esc 鍵</translation> <translation id="8878886163241303700">延伸螢幕</translation> +<translation id="8921624153894383499">Google 個人助理不支援這個語言。</translation> <translation id="8938800817013097409">USB-C 裝置 (背面右側連接埠)</translation> <translation id="8940956008527784070">電池電量不足 (<ph name="PERCENTAGE" />%)</translation> <translation id="9074739597929991885">藍牙</translation>
diff --git a/ash/system/power/tablet_power_button_controller_unittest.cc b/ash/system/power/tablet_power_button_controller_unittest.cc index bb31bb71..9d34486 100644 --- a/ash/system/power/tablet_power_button_controller_unittest.cc +++ b/ash/system/power/tablet_power_button_controller_unittest.cc
@@ -742,4 +742,18 @@ EXPECT_FALSE(lock_state_test_api_->is_animating_lock()); } +// Tests that updating power button behavior from tablet behavior to clamshell +// behavior will initially enable the local state of touchscreen. +TEST_F(TabletPowerButtonControllerTest, TouchscreenStatusClamshell) { + shell_delegate_->SetTouchscreenEnabledInPrefs(false, + true /* use_local_state */); + ASSERT_FALSE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); + + base::CommandLine::ForCurrentProcess()->AppendSwitch( + switches::kForceClamshellPowerButton); + ResetTabletPowerButtonController(); + SendAccelerometerUpdate(kSidewaysVector, kSidewaysVector); + EXPECT_TRUE(shell_delegate_->IsTouchscreenEnabledInPrefs(true)); +} + } // namespace ash
diff --git a/ash/wm/overview/window_selector_unittest.cc b/ash/wm/overview/window_selector_unittest.cc index 5d049e1..0603220 100644 --- a/ash/wm/overview/window_selector_unittest.cc +++ b/ash/wm/overview/window_selector_unittest.cc
@@ -30,6 +30,7 @@ #include "ash/wm/wm_event.h" #include "ash/wm/workspace/workspace_window_resizer.h" #include "base/command_line.h" +#include "base/run_loop.h" #include "base/strings/string_number_conversions.h" #include "base/strings/utf_string_conversions.h" #include "base/test/user_action_tester.h"
diff --git a/ash/wm/power_button_controller.cc b/ash/wm/power_button_controller.cc index c271dcb4..d7fe905b 100644 --- a/ash/wm/power_button_controller.cc +++ b/ash/wm/power_button_controller.cc
@@ -9,6 +9,7 @@ #include "ash/public/cpp/shell_window_ids.h" #include "ash/session/session_controller.h" #include "ash/shell.h" +#include "ash/shell_delegate.h" #include "ash/shutdown_reason.h" #include "ash/system/audio/tray_audio.h" #include "ash/system/power/tablet_power_button_controller.h" @@ -205,6 +206,14 @@ has_legacy_power_button_ = cl->HasSwitch(switches::kAuraLegacyPowerButton); force_clamshell_power_button_ = cl->HasSwitch(switches::kForceClamshellPowerButton); + if (force_clamshell_power_button_) { + // We may update power button behavior from tablet behavior to clamshell + // behavior with touchscreen local state disabled. Enabling touchscreen + // local state to ensure touchscreen is initially enabled for clamshell. + ShellDelegate* delegate = Shell::Get()->shell_delegate(); + delegate->SetTouchscreenEnabledInPrefs(true, true /* use_local_state */); + delegate->UpdateTouchscreenStatusFromPrefs(); + } } } // namespace ash
diff --git a/ash/wm/tablet_mode/tablet_mode_window_manager_unittest.cc b/ash/wm/tablet_mode/tablet_mode_window_manager_unittest.cc index e6163cd..281ca6c 100644 --- a/ash/wm/tablet_mode/tablet_mode_window_manager_unittest.cc +++ b/ash/wm/tablet_mode/tablet_mode_window_manager_unittest.cc
@@ -8,8 +8,10 @@ #include "ash/ash_switches.h" #include "ash/public/cpp/config.h" +#include "ash/public/cpp/shelf_prefs.h" #include "ash/root_window_controller.h" #include "ash/screen_util.h" +#include "ash/session/session_controller.h" #include "ash/session/test_session_controller_client.h" #include "ash/shelf/shelf.h" #include "ash/shell.h" @@ -40,6 +42,17 @@ namespace ash { +// A helper function to set the shelf auto-hide preference. This has the same +// effect as the user toggling the shelf context menu option. +void SetShelfAutoHideBehaviorPref(int64_t display_id, + ShelfAutoHideBehavior behavior) { + PrefService* prefs = + Shell::Get()->session_controller()->GetLastActiveUserPrefService(); + if (!prefs) + return; + SetShelfAutoHideBehaviorPref(prefs, display_id, behavior); +} + class TabletModeWindowManagerTest : public AshTestBase { public: TabletModeWindowManagerTest() {} @@ -884,8 +897,9 @@ Shelf* shelf = GetPrimaryShelf(); - // Allow the shelf to hide. - shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); + // Allow the shelf to hide and set the pref. + SetShelfAutoHideBehaviorPref(GetPrimaryDisplay().id(), + SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); EXPECT_EQ(SHELF_AUTO_HIDE, shelf->GetVisibilityState()); wm::WMEvent event(wm::WM_EVENT_TOGGLE_FULLSCREEN); @@ -902,16 +916,14 @@ EXPECT_FALSE(window_state->IsMaximized()); EXPECT_EQ(SHELF_HIDDEN, shelf->GetVisibilityState()); - // With leaving the fullscreen mode, the tablet mode should return and the - // shelf should maintain its state from before tablet mode. + // When exiting fullscreen, tablet mode should still be enabled, and the shelf + // should be forced to visible for tablet mode. window_state->OnWMEvent(&event); EXPECT_FALSE(window_state->IsFullscreen()); EXPECT_TRUE(window_state->IsMaximized()); - EXPECT_EQ(SHELF_AUTO_HIDE, shelf->GetVisibilityState()); + EXPECT_EQ(SHELF_VISIBLE, shelf->GetVisibilityState()); - // We left fullscreen mode while in tablet mode, so the window should - // remain maximized and the shelf should not change state upon exiting - // tablet mode. + // The shelf auto-hide preference should be restored when exiting tablet mode. DestroyTabletModeWindowManager(); EXPECT_FALSE(window_state->IsFullscreen()); EXPECT_TRUE(window_state->IsMaximized()); @@ -1087,6 +1099,19 @@ EXPECT_TRUE(window_state->IsMinimized()); } +// Tests that the auto-hide behavior is set to never auto-hide on tablet mode +// and gets reset based on pref after exiting tablet mode. +TEST_F(TabletModeWindowManagerTest, DisableAutoHideBehaviorOnTabletMode) { + Shelf* shelf = GetPrimaryShelf(); + SetShelfAutoHideBehaviorPref(GetPrimaryDisplay().id(), + SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); + EXPECT_EQ(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS, shelf->auto_hide_behavior()); + CreateTabletModeWindowManager(); + EXPECT_EQ(SHELF_AUTO_HIDE_BEHAVIOR_NEVER, shelf->auto_hide_behavior()); + DestroyTabletModeWindowManager(); + EXPECT_EQ(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS, shelf->auto_hide_behavior()); +} + // Check that full screen mode can be turned on in tablet mode and remains // upon coming back. TEST_F(TabletModeWindowManagerTest, AllowFullScreenMode) { @@ -1097,8 +1122,9 @@ Shelf* shelf = GetPrimaryShelf(); - // Allow the shelf to hide. - shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); + // Allow the shelf to hide and set the pref. + SetShelfAutoHideBehaviorPref(GetPrimaryDisplay().id(), + SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); EXPECT_FALSE(window_state->IsFullscreen()); EXPECT_FALSE(window_state->IsMaximized()); @@ -1106,11 +1132,10 @@ CreateTabletModeWindowManager(); - // Fullscreen mode should still be off and the shelf should maintain its - // state. + // Fullscreen should stay off, but the shelf is made visible in tablet mode. EXPECT_FALSE(window_state->IsFullscreen()); EXPECT_TRUE(window_state->IsMaximized()); - EXPECT_EQ(SHELF_AUTO_HIDE, shelf->GetVisibilityState()); + EXPECT_EQ(SHELF_VISIBLE, shelf->GetVisibilityState()); // After going into fullscreen mode, the shelf should be hidden. wm::WMEvent event(wm::WM_EVENT_TOGGLE_FULLSCREEN);
diff --git a/base/allocator/partition_allocator/page_allocator.cc b/base/allocator/partition_allocator/page_allocator.cc index 1f830485..e4d7b62d 100644 --- a/base/allocator/partition_allocator/page_allocator.cc +++ b/base/allocator/partition_allocator/page_allocator.cc
@@ -69,21 +69,24 @@ // This internal function wraps the OS-specific page allocation call: // |VirtualAlloc| on Windows, and |mmap| on POSIX. -static void* SystemAllocPages( - void* hint, - size_t length, - PageAccessibilityConfiguration page_accessibility) { +static void* SystemAllocPages(void* hint, + size_t length, + PageAccessibilityConfiguration page_accessibility, + bool commit = true) { DCHECK(!(length & kPageAllocationGranularityOffsetMask)); DCHECK(!(reinterpret_cast<uintptr_t>(hint) & kPageAllocationGranularityOffsetMask)); + DCHECK(commit || page_accessibility == PageInaccessible); + void* ret; // Retry failed allocations once after calling ReleaseReservation(). bool have_retried = false; #if defined(OS_WIN) - DWORD access_flag = + const DWORD access_flag = page_accessibility == PageAccessible ? PAGE_READWRITE : PAGE_NOACCESS; + const DWORD type_flags = commit ? (MEM_RESERVE | MEM_COMMIT) : MEM_RESERVE; while (true) { - ret = VirtualAlloc(hint, length, MEM_RESERVE | MEM_COMMIT, access_flag); + ret = VirtualAlloc(hint, length, type_flags, access_flag); if (ret) break; if (have_retried) { @@ -327,10 +330,16 @@ #endif } -bool ReserveAddressSpace(size_t size, size_t alignment) { +bool ReserveAddressSpace(size_t size) { + DCHECK(size >= kPageAllocationGranularity); + DCHECK(!(size & kPageAllocationGranularityOffsetMask)); + // Don't take |s_reserveLock| while allocating, since a failure would invoke // ReleaseReservation and deadlock. - void* mem = AllocPages(nullptr, size, alignment, base::PageInaccessible); + void* mem = SystemAllocPages(nullptr, size, base::PageInaccessible, false); + // We guarantee this alignment when reserving address space. + DCHECK(!(reinterpret_cast<uintptr_t>(mem) & + kPageAllocationGranularityOffsetMask)); if (mem != nullptr) { { base::subtle::SpinLock::Guard guard(s_reserveLock);
diff --git a/base/allocator/partition_allocator/page_allocator.h b/base/allocator/partition_allocator/page_allocator.h index 14748e1..cbdcdb6c 100644 --- a/base/allocator/partition_allocator/page_allocator.h +++ b/base/allocator/partition_allocator/page_allocator.h
@@ -116,11 +116,11 @@ return address & kSystemPageBaseMask; } -// Reserves address space equal to 'size' bytes, at the given alignment. This -// can be used to make it more likely that large allocations will succeed. -// Returns true if the reservation succeeded, false if the reservation failed -// or a reservation was already made. -BASE_EXPORT bool ReserveAddressSpace(size_t size, size_t alignment); +// Reserves address space equal to 'size' bytes, aligned to +// kPageAllocationGranularity. This can be called early on to make it more +// likely that large allocations will succeed. Returns true if the reservation +// succeeded, false if the reservation failed or a reservation was already made. +BASE_EXPORT bool ReserveAddressSpace(size_t size); // Releases any reserved address space. AllocPages calls this automatically on // an allocation failure. External allocators may also call this on failure.
diff --git a/base/allocator/partition_allocator/partition_alloc_unittest.cc b/base/allocator/partition_allocator/partition_alloc_unittest.cc index 90a16982..bb776f00 100644 --- a/base/allocator/partition_allocator/partition_alloc_unittest.cc +++ b/base/allocator/partition_allocator/partition_alloc_unittest.cc
@@ -307,7 +307,7 @@ }; // Any number of bytes that can be allocated with no trouble. -const size_t kEasyAllocSize = 1024 * 1024; +const size_t kEasyAllocSize = (1024 * 1024) & ~(kPageAllocationGranularity - 1); // Generate many random addresses to get a very large fraction of the platform // address space. This gives us an allocation size that is very likely to fail @@ -332,15 +332,13 @@ // can make a new reservation. TEST(PageAllocatorTest, AllocFailure) { // We can make a reservation. - EXPECT_TRUE( - base::ReserveAddressSpace(kEasyAllocSize, kPageAllocationGranularity)); + EXPECT_TRUE(base::ReserveAddressSpace(kEasyAllocSize)); // We can't make another reservation until we trigger an allocation failure. - EXPECT_FALSE( - base::ReserveAddressSpace(kEasyAllocSize, kPageAllocationGranularity)); + EXPECT_FALSE(base::ReserveAddressSpace(kEasyAllocSize)); size_t size = GetHugeMemoryAmount(); - // Skip the test for sanitizers and platforms with ASLR turned + // Skip the test for sanitizers and platforms with ASLR turned off. if (size == 0) return; @@ -349,32 +347,28 @@ if (result == nullptr) { // We triggered allocation failure. Our reservation should have been // released, and we should be able to make a new reservation. - EXPECT_TRUE( - base::ReserveAddressSpace(kEasyAllocSize, kPageAllocationGranularity)); + EXPECT_TRUE(base::ReserveAddressSpace(kEasyAllocSize)); base::ReleaseReservation(); return; } // We couldn't fail. Make sure reservation is still there. - EXPECT_FALSE( - base::ReserveAddressSpace(kEasyAllocSize, kPageAllocationGranularity)); + EXPECT_FALSE(base::ReserveAddressSpace(kEasyAllocSize)); } // Test that reserving address space can fail. TEST(PageAllocatorTest, ReserveAddressSpace) { size_t size = GetHugeMemoryAmount(); - // Skip the test for sanitizers and platforms with ASLR turned + // Skip the test for sanitizers and platforms with ASLR turned off. if (size == 0) return; - bool success = base::ReserveAddressSpace(size, kPageAllocationGranularity); + bool success = base::ReserveAddressSpace(size); if (!success) { - EXPECT_TRUE( - base::ReserveAddressSpace(kEasyAllocSize, kPageAllocationGranularity)); + EXPECT_TRUE(base::ReserveAddressSpace(kEasyAllocSize)); return; } // We couldn't fail. Make sure reservation is still there. - EXPECT_FALSE( - base::ReserveAddressSpace(kEasyAllocSize, kPageAllocationGranularity)); + EXPECT_FALSE(base::ReserveAddressSpace(kEasyAllocSize)); } // Check that the most basic of allocate / free pairs work.
diff --git a/base/numerics/safe_conversions_impl.h b/base/numerics/safe_conversions_impl.h index 060f95f..2516204 100644 --- a/base/numerics/safe_conversions_impl.h +++ b/base/numerics/safe_conversions_impl.h
@@ -115,7 +115,9 @@ struct CheckOnFailure { template <typename T> static T HandleFailure() { -#if defined(__GNUC__) || defined(__clang__) +#if defined(_MSC_VER) + __debugbreak(); +#elif defined(__GNUC__) || defined(__clang__) __builtin_trap(); #else ((void)(*(volatile char*)0 = 0));
diff --git a/build/android/gyp/aar.py b/build/android/gyp/aar.py index e8196e5a..6c0bc89 100755 --- a/build/android/gyp/aar.py +++ b/build/android/gyp/aar.py
@@ -38,97 +38,76 @@ return True -def _CreateInfo(aar_file): - data = {} - data['aidl'] = [] - data['assets'] = [] - data['resources'] = [] - data['subjars'] = [] - data['subjar_tuples'] = [] - data['has_classes_jar'] = False - data['has_proguard_flags'] = False - data['has_native_libraries'] = False - data['has_r_text_file'] = False - with zipfile.ZipFile(aar_file) as z: - data['is_manifest_empty'] = ( - _IsManifestEmpty(z.read('AndroidManifest.xml'))) - - for name in z.namelist(): - if name.endswith('/'): - continue - if name.startswith('aidl/'): - data['aidl'].append(name) - elif name.startswith('res/'): - data['resources'].append(name) - elif name.startswith('libs/') and name.endswith('.jar'): - label = posixpath.basename(name)[:-4] - label = re.sub(r'[^a-zA-Z0-9._]', '_', label) - data['subjars'].append(name) - data['subjar_tuples'].append([label, name]) - elif name.startswith('assets/'): - data['assets'].append(name) - elif name.startswith('jni/'): - data['has_native_libraries'] = True - elif name == 'classes.jar': - data['has_classes_jar'] = True - elif name == 'proguard.txt': - data['has_proguard_flags'] = True - elif name == 'R.txt': - # Some AARs, e.g. gvr_controller_java, have empty R.txt. Such AARs - # have no resources as well. We treat empty R.txt as having no R.txt. - data['has_r_text_file'] = (z.read('R.txt').strip() != '') - - return """\ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -""" + gn_helpers.ToGNString(data) - - -def _AddCommonArgs(parser): - parser.add_argument('aar_file', - help='Path to the AAR file.', - type=os.path.normpath) - - def main(): parser = argparse.ArgumentParser(description=__doc__) - command_parsers = parser.add_subparsers(dest='command') - subp = command_parsers.add_parser( - 'list', help='Output a GN scope describing the contents of the .aar.') - _AddCommonArgs(subp) - subp.add_argument('--output', - help='Output file.', - type=argparse.FileType('w'), - default='-') - - subp = command_parsers.add_parser('extract', help='Extracts the .aar') - _AddCommonArgs(subp) - subp.add_argument('--output-dir', - help='Output directory for the extracted files.', - required=True, - type=os.path.normpath) - subp.add_argument('--assert-info-file', - help='Path to .info file. Asserts that it matches what ' - '"list" would output.', - type=argparse.FileType('r')) + parser.add_argument('--input-file', + help='Path to the AAR file.', + required=True, + metavar='FILE') + parser.add_argument('--extract', + help='Extract the files to output directory.', + action='store_true') + parser.add_argument('--list', + help='List all the resource and jar files.', + action='store_true') + parser.add_argument('--output-dir', + help='Output directory for the extracted files. Must ' + 'be set if --extract is set.', + metavar='DIR') args = parser.parse_args() + if not args.extract and not args.list: + parser.error('Either --extract or --list has to be specified.') - if args.command == 'extract': - if args.assert_info_file: - expected = _CreateInfo(args.aar_file) - actual = args.assert_info_file.read() - if actual != expected: - raise Exception('android_aar_prebuilt() cached .info file is ' - 'out-of-date. Run gn gen with ' - 'update_android_aar_prebuilts=true to update it.') + aar_file = args.input_file + output_dir = args.output_dir + + if args.extract: # Clear previously extracted versions of the AAR. - shutil.rmtree(args.output_dir, True) - build_utils.ExtractAll(args.aar_file, path=args.output_dir) + shutil.rmtree(output_dir, True) + build_utils.ExtractAll(aar_file, path=output_dir) - elif args.command == 'list': - args.output.write(_CreateInfo(args.aar_file)) + if args.list: + data = {} + data['aidl'] = [] + data['assets'] = [] + data['resources'] = [] + data['subjars'] = [] + data['subjar_tuples'] = [] + data['has_classes_jar'] = False + data['has_proguard_flags'] = False + data['has_native_libraries'] = False + data['has_r_text_file'] = False + with zipfile.ZipFile(aar_file) as z: + data['is_manifest_empty'] = ( + _IsManifestEmpty(z.read('AndroidManifest.xml'))) + + for name in z.namelist(): + if name.endswith('/'): + continue + if name.startswith('aidl/'): + data['aidl'].append(name) + elif name.startswith('res/'): + data['resources'].append(name) + elif name.startswith('libs/') and name.endswith('.jar'): + label = posixpath.basename(name)[:-4] + label = re.sub(r'[^a-zA-Z0-9._]', '_', label) + data['subjars'].append(name) + data['subjar_tuples'].append([label, name]) + elif name.startswith('assets/'): + data['assets'].append(name) + elif name.startswith('jni/'): + data['has_native_libraries'] = True + elif name == 'classes.jar': + data['has_classes_jar'] = True + elif name == 'proguard.txt': + data['has_proguard_flags'] = True + elif name == 'R.txt': + # Some AARs, e.g. gvr_controller_java, have empty R.txt. Such AARs + # have no resources as well. We treat empty R.txt as having no R.txt. + data['has_r_text_file'] = (z.read('R.txt').strip() != '') + + print gn_helpers.ToGNString(data) if __name__ == '__main__':
diff --git a/build/android/pylib/gtest/filter/unit_tests_disabled b/build/android/pylib/gtest/filter/unit_tests_disabled index 6cf6acc..74c25fa 100644 --- a/build/android/pylib/gtest/filter/unit_tests_disabled +++ b/build/android/pylib/gtest/filter/unit_tests_disabled
@@ -66,7 +66,6 @@ ExtensionSettingsSyncTest.* ExtensionUpdaterTest.* UserScriptListenerTest.* -WebApplicationTest.GetShortcutInfoForTab ExtensionActionIconFactoryTest.* # crbug.com/139411
diff --git a/build/android/pylib/local/local_test_server_spawner.py b/build/android/pylib/local/local_test_server_spawner.py index 16a7eb12..8e416fac 100644 --- a/build/android/pylib/local/local_test_server_spawner.py +++ b/build/android/pylib/local/local_test_server_spawner.py
@@ -2,6 +2,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import json import time from devil.android import forwarder @@ -12,6 +13,11 @@ with host_paths.SysPath(host_paths.BUILD_COMMON_PATH): import chrome_test_server_spawner + +# The tests should not need more than one test server instance. +MAX_TEST_SERVER_INSTANCES = 1 + + def _WaitUntil(predicate, max_attempts=5): """Blocks until the provided predicate (function) is true. @@ -57,7 +63,7 @@ super(LocalTestServerSpawner, self).__init__() self._device = device self._spawning_server = chrome_test_server_spawner.SpawningServer( - port, PortForwarderAndroid(device, tool)) + port, PortForwarderAndroid(device, tool), MAX_TEST_SERVER_INSTANCES) self._tool = tool @property @@ -70,9 +76,15 @@ #override def SetUp(self): + # See net/test/spawned_test_server/test_server_config.h for description of + # the fields in the config file. + test_server_config = json.dumps({ + 'address': '127.0.0.1', + 'spawner_url_base': 'http://localhost:%d' % self.port + }) self._device.WriteFile( - '%s/net-test-server-ports' % self._device.GetExternalStoragePath(), - '%s:0' % str(self.port)) + '%s/net-test-server-config' % self._device.GetExternalStoragePath(), + test_server_config) forwarder.Forwarder.Map( [(self.port, self.port)], self._device, self._tool) self._spawning_server.Start()
diff --git a/build/config/android/config.gni b/build/config/android/config.gni index 35fab78..6723744 100644 --- a/build/config/android/config.gni +++ b/build/config/android/config.gni
@@ -164,10 +164,6 @@ # Ex. with this arg set to true, the chrome_public_apk target result in # chrome_public_apk_incremental being built. incremental_apk_by_default = false - - # When true, updates all android_aar_prebuilt() .info files during gn gen. - # Refer to android_aar_prebuilt() for more details. - update_android_aar_prebuilts = false } # We need a second declare_args block to make sure we are using the overridden
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni index 27ba696e..429bc32 100644 --- a/build/config/android/rules.gni +++ b/build/config/android/rules.gni
@@ -2934,33 +2934,22 @@ # resources. For libraries without resources, it will not generate # corresponding android_resources targets. # - # To avoid slowing down "gn gen", an associated .info file must be committed - # along with the .aar file. In order to create this file, define the target - # and then run once with the gn arg "update_android_aar_prebuilts = true". - # # Variables # aar_path: Path to the AAR. - # info_path: Path to the .aar.info file (generated via - # update_android_aar_prebuilts GN arg). # proguard_configs: List of proguard configs to use in final apk step for - # any apk that depends on this library. + # any apk that depends on this library. # ignore_aidl: Whether to ignore .aidl files found with the .aar. # ignore_assets: Whether to ignore assets found in the .aar. # ignore_native_libraries: Whether to ignore .so files found in the .aar. # create_srcjar: If false, does not create an R.java file. # TODO(jbudorick@): remove this arguments after crbug.com/522043 is fixed. - # requires_android: Whether this target can only be used for compiling - # Android related targets. + # requires_android: Whether this target can only be used for compiling Android related targets. # # Example # android_aar_prebuilt("foo_java") { # aar_path = "foo.aar" # } template("android_aar_prebuilt") { - _info_path = "$target_name.info" - if (defined(invoker.info_path)) { - _info_path = invoker.info_path - } _output_path = "${target_gen_dir}/${target_name}" _unpack_target_name = "${target_name}__unpack_aar" _ignore_aidl = defined(invoker.ignore_aidl) && invoker.ignore_aidl @@ -2970,17 +2959,14 @@ # Scan the AAR file and determine the resources and jar files. # Some libraries might not have resources; others might have two jars. - if (update_android_aar_prebuilts) { - print("Writing " + rebase_path(_info_path, "//")) - exec_script("//build/android/gyp/aar.py", - [ - "list", - rebase_path(invoker.aar_path, root_build_dir), - "--output", - rebase_path(_info_path, root_build_dir), - ]) - } - _scanned_files = read_file(_info_path, "scope") + _scanned_files = + exec_script("//build/android/gyp/aar.py", + [ + "--input-file", + rebase_path(invoker.aar_path, root_build_dir), + "--list", + ], + "scope") assert(_ignore_aidl || _scanned_files.aidl == [], "android_aar_prebuilt() aidl not yet supported." + @@ -2998,12 +2984,11 @@ action(_unpack_target_name) { script = "//build/android/gyp/aar.py" # Unzips the AAR args = [ - "extract", + "--input-file", rebase_path(invoker.aar_path, root_build_dir), "--output-dir", rebase_path(_output_path, root_build_dir), - "--assert-info-file", - rebase_path(_info_path, root_build_dir), + "--extract", ] inputs = [ invoker.aar_path,
diff --git a/build/experimental/install-build-deps.py b/build/experimental/install-build-deps.py index 04a26ab..a286a4e8 100755 --- a/build/experimental/install-build-deps.py +++ b/build/experimental/install-build-deps.py
@@ -99,8 +99,6 @@ 'subversion', 'ttf-dejavu-core', 'ttf-indic-fonts', - 'ttf-kochi-gothic', - 'ttf-kochi-mincho', 'wdiff', 'zip', )
diff --git a/build/fuchsia/runner_common.py b/build/fuchsia/runner_common.py index af145cc..21c5c67 100755 --- a/build/fuchsia/runner_common.py +++ b/build/fuchsia/runner_common.py
@@ -169,12 +169,6 @@ autorun_file = open(bin_name + '.bootfs_autorun', 'w') autorun_file.write('#!/bin/sh\n') if _IsRunningOnBot(): - # We drop to -smp 1 to avoid counterintuitive observations on the realtime - # clock, but keep the concurrency at the default of 4. Insert at the - # beginning of the list so that if the real command line provides a specific - # value later, it will be used. - child_args.insert(0, '--test-launcher-jobs=4') - # TODO(scottmg): Passed through for https://crbug.com/755282. autorun_file.write('export CHROME_HEADLESS=1\n') @@ -242,30 +236,40 @@ # consistent output in that case, with the cannot-symbolize case. addr2line_output = None if entries[0].has_key('debug_binary'): - addr2line_output = subprocess.check_output( - ['addr2line', '-Cipf', '-p', '--exe=' + entries[0]['debug_binary']] + - map(lambda entry: entry['pc_offset'], entries)).splitlines() + addr2line_args = (['addr2line', '-Cipf', '-p', + '--exe=' + entries[0]['debug_binary']] + + map(lambda entry: entry['pc_offset'], entries)) + addr2line_output = subprocess.check_output(addr2line_args).splitlines() assert addr2line_output # Collate a set of |(frame_id, result)| pairs from the output lines. results = {} - for i in xrange(len(entries)): - entry = entries[i] + for entry in entries: raw, frame_id = entry['raw'], entry['frame_id'] prefix = '#%s: ' % frame_id - if addr2line_output: + if not addr2line_output: + # Either there was no addr2line output, or too little of it. + filtered_line = raw + else: + output_line = addr2line_output.pop(0) + # Relativize path to DIR_SOURCE_ROOT if we see a filename. def RelativizePath(m): relpath = os.path.relpath(os.path.normpath(m.group(1)), DIR_SOURCE_ROOT) return 'at ' + relpath + ':' + m.group(2) - filtered_line = filename_re.sub(RelativizePath, addr2line_output[i]) + filtered_line = filename_re.sub(RelativizePath, output_line) - # If symbolization fails just output the raw backtrace. if '??' in filtered_line: + # If symbolization fails just output the raw backtrace. filtered_line = raw - else: - filtered_line = raw + else: + # Release builds may inline things, resulting in "(inlined by)" lines. + inlined_by_prefix = " (inlined by)" + while (addr2line_output and + addr2line_output[0].startswith(inlined_by_prefix)): + inlined_by_line = '\n' + (' ' * len(prefix)) + addr2line_output.pop(0) + filtered_line += filename_re.sub(RelativizePath, inlined_by_line) results[entry['frame_id']] = prefix + filtered_line
diff --git a/build/fuchsia/test_runner.py b/build/fuchsia/test_runner.py index 0aad594..24f3808 100755 --- a/build/fuchsia/test_runner.py +++ b/build/fuchsia/test_runner.py
@@ -24,6 +24,10 @@ sys.path.append(os.path.join(DIR_SOURCE_ROOT, 'build', 'util', 'lib', 'common')) import chrome_test_server_spawner +# RunFuchsia() may run qemu with 1 or 4 CPUs. In both cases keep test +# concurrency set to 4. +DEFAULT_TEST_CONCURRENCY = 4 + def IsLocalPortAvailable(port): s = socket.socket() @@ -137,9 +141,11 @@ if args.test_launcher_batch_limit: child_args.append('--test-launcher-batch-limit=%d' % args.test_launcher_batch_limit) - if args.test_launcher_jobs: - child_args.append('--test-launcher-jobs=%d' % - args.test_launcher_jobs) + + test_concurrency = args.test_launcher_jobs \ + if args.test_launcher_jobs else DEFAULT_TEST_CONCURRENCY + child_args.append('--test-launcher-jobs=%d' % test_concurrency) + if args.gtest_filter: child_args.append('--gtest_filter=' + args.gtest_filter) if args.gtest_repeat: @@ -154,7 +160,7 @@ # Start test server spawner for tests that need it. if args.enable_test_server: spawning_server = chrome_test_server_spawner.SpawningServer( - 0, PortForwarderNoop()) + 0, PortForwarderNoop(), test_concurrency) spawning_server.Start() # Generate test server config.
diff --git a/build/install-build-deps.sh b/build/install-build-deps.sh index c636f81e..961aebaf 100755 --- a/build/install-build-deps.sh +++ b/build/install-build-deps.sh
@@ -489,14 +489,6 @@ elif package_exists msttcorefonts; then dev_list="${dev_list} msttcorefonts" fi -# Ubuntu 16.04 has this package deleted. -if package_exists ttf-kochi-gothic; then - dev_list="${dev_list} ttf-kochi-gothic" -fi -# Ubuntu 16.04 has this package deleted. -if package_exists ttf-kochi-mincho; then - dev_list="${dev_list} ttf-kochi-mincho" -fi # Some packages are only needed if the distribution actually supports # installing them.
diff --git a/build/secondary/third_party/android_tools/BUILD.gn b/build/secondary/third_party/android_tools/BUILD.gn index 58a851c..e9e7058 100644 --- a/build/secondary/third_party/android_tools/BUILD.gn +++ b/build/secondary/third_party/android_tools/BUILD.gn
@@ -59,7 +59,6 @@ ] _lib_name = "design" aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" } android_aar_prebuilt("android_support_transition_java") { @@ -68,12 +67,10 @@ ] _lib_name = "transition" aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" } android_aar_prebuilt("android_support_multidex_java") { aar_path = "$lib_path/multidex/1.0.1/multidex-1.0.1.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" } android_java_prebuilt("android_support_annotations_java") { @@ -97,7 +94,6 @@ ] _lib_name = "support-compat" aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" ignore_aidl = true # We don't appear to need these currently. } @@ -107,7 +103,6 @@ ] _lib_name = "support-core-ui" aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" } android_aar_prebuilt("android_support_core_utils_java") { @@ -116,7 +111,6 @@ ] _lib_name = "support-core-utils" aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" } android_aar_prebuilt("android_support_fragment_java") { @@ -128,7 +122,6 @@ ] _lib_name = "support-fragment" aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" } android_aar_prebuilt("android_support_media_compat_java") { @@ -137,7 +130,6 @@ ] _lib_name = "support-media-compat" aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" ignore_aidl = true # We don't appear to need these currently. } @@ -147,7 +139,6 @@ ] _lib_name = "support-v13" aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" } android_aar_prebuilt("android_support_vector_drawable_java") { @@ -156,7 +147,6 @@ ] _lib_name = "support-vector-drawable" aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" } android_aar_prebuilt("android_support_v7_appcompat_java_internal") { @@ -165,7 +155,6 @@ ] _lib_name = "appcompat-v7" aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" } java_group("android_support_v7_appcompat_java") { @@ -183,7 +172,6 @@ ] _lib_name = "gridlayout-v7" aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" } android_aar_prebuilt("android_support_v7_mediarouter_java") { @@ -193,7 +181,6 @@ ] _lib_name = "mediarouter-v7" aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" } android_aar_prebuilt("android_support_v7_recyclerview_java") { @@ -204,7 +191,6 @@ ] _lib_name = "recyclerview-v7" aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" } android_aar_prebuilt("android_support_v7_palette_java") { @@ -214,7 +200,6 @@ ] _lib_name = "palette-v7" aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" } android_aar_prebuilt("android_support_v7_preference_java") { @@ -225,7 +210,6 @@ ] _lib_name = "preference-v7" aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" } android_aar_prebuilt("android_support_v14_preference_java") { @@ -237,7 +221,6 @@ ] _lib_name = "preference-v14" aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" } android_aar_prebuilt("android_support_v17_leanback_java") { @@ -247,7 +230,6 @@ ] _lib_name = "leanback-v17" aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" } android_aar_prebuilt("android_support_v17_preference_java") { @@ -261,7 +243,6 @@ ] _lib_name = "preference-leanback-v17" aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" } android_library("android_support_chromium_java") { @@ -301,7 +282,6 @@ ] _lib_name = "play-services-basement" aar_path = "$gms_path/$_lib_name/$gms_version/$_lib_name-$gms_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" input_jars_paths = [ "$android_sdk/optional/org.apache.http.legacy.jar" ] } @@ -311,7 +291,6 @@ ] _lib_name = "play-services-tasks" aar_path = "$gms_path/$_lib_name/$gms_version/$_lib_name-$gms_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" } android_aar_prebuilt("google_play_services_base_java") { @@ -322,7 +301,6 @@ ] _lib_name = "play-services-base" aar_path = "$gms_path/$_lib_name/$gms_version/$_lib_name-$gms_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" } android_aar_prebuilt("google_play_services_auth_base_java") { @@ -332,7 +310,6 @@ ] _lib_name = "play-services-auth-base" aar_path = "$gms_path/$_lib_name/$gms_version/$_lib_name-$gms_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" } android_aar_prebuilt("google_play_services_auth_java") { @@ -343,7 +320,6 @@ ] _lib_name = "play-services-auth" aar_path = "$gms_path/$_lib_name/$gms_version/$_lib_name-$gms_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" } android_aar_prebuilt("google_play_services_cast_java") { @@ -354,7 +330,6 @@ ] _lib_name = "play-services-cast" aar_path = "$gms_path/$_lib_name/$gms_version/$_lib_name-$gms_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" } android_aar_prebuilt("google_play_services_iid_java") { @@ -364,7 +339,6 @@ ] _lib_name = "play-services-iid" aar_path = "$gms_path/$_lib_name/$gms_version/$_lib_name-$gms_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" } android_aar_prebuilt("google_play_services_gcm_java") { @@ -375,7 +349,6 @@ ] _lib_name = "play-services-gcm" aar_path = "$gms_path/$_lib_name/$gms_version/$_lib_name-$gms_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" } android_aar_prebuilt("google_play_services_location_java") { @@ -385,7 +358,6 @@ ] _lib_name = "play-services-location" aar_path = "$gms_path/$_lib_name/$gms_version/$_lib_name-$gms_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" } android_aar_prebuilt("google_play_services_nearby_java") { @@ -395,7 +367,6 @@ ] _lib_name = "play-services-nearby" aar_path = "$gms_path/$_lib_name/$gms_version/$_lib_name-$gms_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" } android_aar_prebuilt("google_play_services_vision_java") { @@ -405,7 +376,6 @@ ] _lib_name = "play-services-vision" aar_path = "$gms_path/$_lib_name/$gms_version/$_lib_name-$gms_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" } # TODO(paulmiller): Replace this with a proper target after rolling to a GMS
diff --git a/build/secondary/third_party/android_tools/android_support_compat_java.info b/build/secondary/third_party/android_tools/android_support_compat_java.info deleted file mode 100644 index b68ec40..0000000 --- a/build/secondary/third_party/android_tools/android_support_compat_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ "aidl/android/support/v4/os/ResultReceiver.aidl" ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = false -is_manifest_empty = true -resources = [ ] -subjar_tuples = [ [ "internal_impl_25.0.1", "libs/internal_impl-25.0.1.jar" ] ] -subjars = [ "libs/internal_impl-25.0.1.jar" ]
diff --git a/build/secondary/third_party/android_tools/android_support_core_ui_java.info b/build/secondary/third_party/android_tools/android_support_core_ui_java.info deleted file mode 100644 index 5f0071dd..0000000 --- a/build/secondary/third_party/android_tools/android_support_core_ui_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = true -has_r_text_file = false -is_manifest_empty = true -resources = [ ] -subjar_tuples = [ [ "internal_impl_25.0.1", "libs/internal_impl-25.0.1.jar" ] ] -subjars = [ "libs/internal_impl-25.0.1.jar" ]
diff --git a/build/secondary/third_party/android_tools/android_support_core_utils_java.info b/build/secondary/third_party/android_tools/android_support_core_utils_java.info deleted file mode 100644 index d82eb75..0000000 --- a/build/secondary/third_party/android_tools/android_support_core_utils_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = false -is_manifest_empty = true -resources = [ ] -subjar_tuples = [ [ "internal_impl_25.0.1", "libs/internal_impl-25.0.1.jar" ] ] -subjars = [ "libs/internal_impl-25.0.1.jar" ]
diff --git a/build/secondary/third_party/android_tools/android_support_design_java.info b/build/secondary/third_party/android_tools/android_support_design_java.info deleted file mode 100644 index 37e2270..0000000 --- a/build/secondary/third_party/android_tools/android_support_design_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = true -has_r_text_file = true -is_manifest_empty = true -resources = [ "res/drawable-v21/design_bottom_navigation_item_background.xml", "res/values-v21/values-v21.xml", "res/anim-v21/design_bottom_sheet_slide_out.xml", "res/anim-v21/design_appbar_state_list_animator.xml", "res/anim-v21/design_bottom_sheet_slide_in.xml", "res/anim/design_fab_out.xml", "res/anim/design_bottom_sheet_slide_out.xml", "res/anim/design_snackbar_in.xml", "res/anim/design_fab_in.xml", "res/anim/design_snackbar_out.xml", "res/anim/design_bottom_sheet_slide_in.xml", "res/layout/design_layout_tab_text.xml", "res/layout/design_navigation_item_separator.xml", "res/layout/design_bottom_sheet_dialog.xml", "res/layout/design_layout_snackbar_include.xml", "res/layout/design_text_input_password_icon.xml", "res/layout/design_navigation_menu_item.xml", "res/layout/design_menu_item_action_area.xml", "res/layout/design_navigation_item.xml", "res/layout/design_navigation_item_header.xml", "res/layout/design_layout_snackbar.xml", "res/layout/design_navigation_item_subheader.xml", "res/layout/design_navigation_menu.xml", "res/layout/design_layout_tab_icon.xml", "res/layout/design_bottom_navigation_item.xml", "res/values-sw600dp-v13/values-sw600dp-v13.xml", "res/values-land/values-land.xml", "res/color-v23/design_tint_password_toggle.xml", "res/values/values.xml", "res/layout-sw600dp-v13/design_layout_snackbar.xml", "res/color/design_error.xml", "res/color/design_tint_password_toggle.xml", "res/drawable/design_snackbar_background.xml", "res/drawable/design_fab_background.xml", "res/drawable/design_bottom_navigation_item_background.xml", "res/drawable/design_ic_visibility.xml", "res/drawable/navigation_empty_icon.xml" ] -subjar_tuples = [ ] -subjars = [ ]
diff --git a/build/secondary/third_party/android_tools/android_support_fragment_java.info b/build/secondary/third_party/android_tools/android_support_fragment_java.info deleted file mode 100644 index d82eb75..0000000 --- a/build/secondary/third_party/android_tools/android_support_fragment_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = false -is_manifest_empty = true -resources = [ ] -subjar_tuples = [ [ "internal_impl_25.0.1", "libs/internal_impl-25.0.1.jar" ] ] -subjars = [ "libs/internal_impl-25.0.1.jar" ]
diff --git a/build/secondary/third_party/android_tools/android_support_media_compat_java.info b/build/secondary/third_party/android_tools/android_support_media_compat_java.info deleted file mode 100644 index 347df34..0000000 --- a/build/secondary/third_party/android_tools/android_support_media_compat_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ "aidl/android/support/v4/media/session/MediaSessionCompat.aidl", "aidl/android/support/v4/media/session/PlaybackStateCompat.aidl", "aidl/android/support/v4/media/session/ParcelableVolumeInfo.aidl", "aidl/android/support/v4/media/RatingCompat.aidl", "aidl/android/support/v4/media/MediaMetadataCompat.aidl" ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = false -is_manifest_empty = true -resources = [ ] -subjar_tuples = [ [ "internal_impl_25.0.1", "libs/internal_impl-25.0.1.jar" ] ] -subjars = [ "libs/internal_impl-25.0.1.jar" ]
diff --git a/build/secondary/third_party/android_tools/android_support_multidex_java.info b/build/secondary/third_party/android_tools/android_support_multidex_java.info deleted file mode 100644 index a2ebd4a..0000000 --- a/build/secondary/third_party/android_tools/android_support_multidex_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = false -is_manifest_empty = true -resources = [ ] -subjar_tuples = [ ] -subjars = [ ]
diff --git a/build/secondary/third_party/android_tools/android_support_transition_java.info b/build/secondary/third_party/android_tools/android_support_transition_java.info deleted file mode 100644 index 28c8330..0000000 --- a/build/secondary/third_party/android_tools/android_support_transition_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = true -is_manifest_empty = true -resources = [ "res/values/values.xml" ] -subjar_tuples = [ ] -subjars = [ ]
diff --git a/build/secondary/third_party/android_tools/android_support_v13_java.info b/build/secondary/third_party/android_tools/android_support_v13_java.info deleted file mode 100644 index d82eb75..0000000 --- a/build/secondary/third_party/android_tools/android_support_v13_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = false -is_manifest_empty = true -resources = [ ] -subjar_tuples = [ [ "internal_impl_25.0.1", "libs/internal_impl-25.0.1.jar" ] ] -subjars = [ "libs/internal_impl-25.0.1.jar" ]
diff --git a/build/secondary/third_party/android_tools/android_support_v14_preference_java.info b/build/secondary/third_party/android_tools/android_support_v14_preference_java.info deleted file mode 100644 index e7f9be67..0000000 --- a/build/secondary/third_party/android_tools/android_support_v14_preference_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = true -is_manifest_empty = true -resources = [ "res/layout-v17/preference_material.xml", "res/layout-v17/preference_information_material.xml", "res/layout-v17/preference_category_material.xml", "res/layout-v17/preference_dropdown_material.xml", "res/values-v17/values-v17.xml", "res/layout/preference_material.xml", "res/layout/preference_information_material.xml", "res/layout/preference_category_material.xml", "res/layout/preference_dropdown_material.xml", "res/layout/preference_widget_switch.xml", "res/values/values.xml", "res/layout-v21/preference_material.xml", "res/layout-v21/preference_information_material.xml", "res/layout-v21/preference_category_material.xml", "res/layout-v21/preference_dropdown_material.xml", "res/drawable/preference_list_divider_material.xml" ] -subjar_tuples = [ ] -subjars = [ ]
diff --git a/build/secondary/third_party/android_tools/android_support_v17_leanback_java.info b/build/secondary/third_party/android_tools/android_support_v17_leanback_java.info deleted file mode 100644 index 93dae49..0000000 --- a/build/secondary/third_party/android_tools/android_support_v17_leanback_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = true -is_manifest_empty = true -resources = [ "res/values-km-rKH/values-km-rKH.xml", "res/values-nl/values-nl.xml", "res/values-az-rAZ/values-az-rAZ.xml", "res/values-gl-rES/values-gl-rES.xml", "res/values-bg/values-bg.xml", "res/values-ldrtl-v17/values-ldrtl-v17.xml", "res/values-pt-rBR/values-pt-rBR.xml", "res/values-eu-rES/values-eu-rES.xml", "res/values-el/values-el.xml", "res/animator/lb_onboarding_page_indicator_enter.xml", "res/animator/lb_guidedactions_item_unpressed.xml", "res/animator/lb_onboarding_logo_enter.xml", "res/animator/lb_guidedactions_item_pressed.xml", "res/animator/lb_onboarding_start_button_fade_out.xml", "res/animator/lb_playback_rows_fade_out.xml", "res/animator/lb_onboarding_start_button_fade_in.xml", "res/animator/lb_decelerator_4.xml", "res/animator/lb_onboarding_logo_exit.xml", "res/animator/lb_guidedstep_slide_up.xml", "res/animator/lb_onboarding_title_enter.xml", "res/animator/lb_onboarding_page_indicator_fade_out.xml", "res/animator/lb_playback_controls_fade_in.xml", "res/animator/lb_playback_rows_fade_in.xml", "res/animator/lb_playback_description_fade_in.xml", "res/animator/lb_playback_controls_fade_out.xml", "res/animator/lb_onboarding_page_indicator_fade_in.xml", "res/animator/lb_playback_description_fade_out.xml", "res/animator/lb_playback_bg_fade_out.xml", "res/animator/lb_decelerator_2.xml", "res/animator/lb_guidedstep_slide_down.xml", "res/animator/lb_playback_bg_fade_in.xml", "res/animator/lb_onboarding_description_enter.xml", "res/values-mk-rMK/values-mk-rMK.xml", "res/values-af/values-af.xml", "res/raw/lb_voice_open.ogg", "res/raw/lb_voice_no_input.ogg", "res/raw/lb_voice_failure.ogg", "res/raw/lb_voice_success.ogg", "res/drawable-v21/lb_card_foreground.xml", "res/drawable-v21/lb_selectable_item_rounded_rect.xml", "res/drawable-v21/lb_action_bg.xml", "res/drawable-v21/lb_control_button_secondary.xml", "res/drawable-v21/lb_control_button_primary.xml", "res/values-uk/values-uk.xml", "res/transition-v21/lb_vertical_grid_entrance_transition.xml", "res/transition-v21/lb_vertical_grid_enter_transition.xml", "res/transition-v21/lb_browse_headers_in.xml", "res/transition-v21/lb_browse_return_transition.xml", "res/transition-v21/lb_title_in.xml", "res/transition-v21/lb_return_transition.xml", "res/transition-v21/lb_browse_enter_transition.xml", "res/transition-v21/lb_guidedstep_activity_enter.xml", "res/transition-v21/lb_browse_headers_out.xml", "res/transition-v21/lb_shared_element_enter_transition.xml", "res/transition-v21/lb_details_return_transition.xml", "res/transition-v21/lb_shared_element_return_transition.xml", "res/transition-v21/lb_title_out.xml", "res/transition-v21/lb_guidedstep_activity_enter_bottom.xml", "res/transition-v21/lb_enter_transition.xml", "res/transition-v21/lb_vertical_grid_return_transition.xml", "res/transition-v21/lb_browse_entrance_transition.xml", "res/transition-v21/lb_details_enter_transition.xml", "res/values-zu/values-zu.xml", "res/values-et-rEE/values-et-rEE.xml", "res/values-v21/values-v21.xml", "res/values-lo-rLA/values-lo-rLA.xml", "res/drawable-hdpi-v4/lb_ic_search_mic_out.png", "res/drawable-hdpi-v4/lb_ic_sad_cloud.png", "res/drawable-hdpi-v4/lb_in_app_search_shadow_normal.9.png", "res/drawable-hdpi-v4/lb_in_app_search_shadow_focused.9.png", "res/drawable-hdpi-v4/lb_ic_actions_right_arrow.png", "res/drawable-hdpi-v4/lb_action_bg_focused.9.png", "res/drawable-hdpi-v4/lb_in_app_search_bg.9.png", "res/drawable-hdpi-v4/lb_ic_search_mic.png", "res/drawable-hdpi-v4/lb_ic_in_app_search.png", "res/values-v22/values-v22.xml", "res/values-bn-rBD/values-bn-rBD.xml", "res/values-is-rIS/values-is-rIS.xml", "res/values-gu-rIN/values-gu-rIN.xml", "res/drawable-mdpi-v4/lb_ic_search_mic_out.png", "res/drawable-mdpi-v4/lb_ic_sad_cloud.png", "res/drawable-mdpi-v4/lb_in_app_search_shadow_normal.9.png", "res/drawable-mdpi-v4/lb_in_app_search_shadow_focused.9.png", "res/drawable-mdpi-v4/lb_ic_actions_right_arrow.png", "res/drawable-mdpi-v4/lb_action_bg_focused.9.png", "res/drawable-mdpi-v4/lb_in_app_search_bg.9.png", "res/drawable-mdpi-v4/lb_ic_search_mic.png", "res/drawable-mdpi-v4/lb_ic_in_app_search.png", "res/values-pa-rIN/values-pa-rIN.xml", "res/values-mr-rIN/values-mr-rIN.xml", "res/values-ru/values-ru.xml", "res/values-pl/values-pl.xml", "res/values-fa/values-fa.xml", "res/values-be-rBY/values-be-rBY.xml", "res/values-si-rLK/values-si-rLK.xml", "res/values-sv/values-sv.xml", "res/values-my-rMM/values-my-rMM.xml", "res/values-b+sr+Latn/values-b+sr+Latn.xml", "res/values-fr/values-fr.xml", "res/values-uz-rUZ/values-uz-rUZ.xml", "res/values-ms-rMY/values-ms-rMY.xml", "res/values-ka-rGE/values-ka-rGE.xml", "res/values-fi/values-fi.xml", "res/values-fr-rCA/values-fr-rCA.xml", "res/values-ca/values-ca.xml", "res/values-in/values-in.xml", "res/values-vi/values-vi.xml", "res/layout/lb_row_media_item_action.xml", "res/layout/lb_error_fragment.xml", "res/layout/lb_picker.xml", "res/layout/lb_speech_orb.xml", "res/layout/lb_details_fragment.xml", "res/layout/lb_divider.xml", "res/layout/lb_guidedstep_fragment.xml", "res/layout/lb_background_window.xml", "res/layout/lb_rows_fragment.xml", "res/layout/lb_guidedstep_background.xml", "res/layout/lb_details_description.xml", "res/layout/lb_media_item_number_view_flipper.xml", "res/layout/lb_action_1_line.xml", "res/layout/lb_guidedbuttonactions.xml", "res/layout/lb_control_bar.xml", "res/layout/lb_vertical_grid_fragment.xml", "res/layout/lb_headers_fragment.xml", "res/layout/lb_guidance.xml", "res/layout/lb_fullwidth_details_overview_logo.xml", "res/layout/lb_header.xml", "res/layout/lb_browse_fragment.xml", "res/layout/lb_row_header.xml", "res/layout/lb_vertical_grid.xml", "res/layout/lb_control_button_secondary.xml", "res/layout/lb_details_overview.xml", "res/layout/lb_image_card_view_themed_badge_left.xml", "res/layout/lb_search_bar.xml", "res/layout/lb_list_row_hovercard.xml", "res/layout/lb_picker_column.xml", "res/layout/lb_image_card_view_themed_content.xml", "res/layout/lb_playback_now_playing_bars.xml", "res/layout/lb_row_media_item.xml", "res/layout/lb_shadow.xml", "res/layout/lb_picker_item.xml", "res/layout/lb_playback_controls_row.xml", "res/layout/lb_fullwidth_details_overview.xml", "res/layout/lb_guidedactions_item.xml", "res/layout/lb_control_button_primary.xml", "res/layout/lb_section_header.xml", "res/layout/lb_playback_controls.xml", "res/layout/lb_image_card_view_themed_badge_right.xml", "res/layout/lb_picker_separator.xml", "res/layout/lb_title_view.xml", "res/layout/lb_image_card_view.xml", "res/layout/lb_guidedactions_datepicker_item.xml", "res/layout/lb_action_2_lines.xml", "res/layout/lb_guidedactions.xml", "res/layout/lb_search_orb.xml", "res/layout/lb_search_fragment.xml", "res/layout/lb_row_container.xml", "res/layout/lb_list_row.xml", "res/layout/lb_browse_title.xml", "res/layout/lb_media_list_header.xml", "res/layout/lb_onboarding_fragment.xml", "res/layout/lb_image_card_view_themed_title.xml", "res/values-en-rGB/values-en-rGB.xml", "res/values-ja/values-ja.xml", "res/values-zh-rCN/values-zh-rCN.xml", "res/values-am/values-am.xml", "res/values-sq-rAL/values-sq-rAL.xml", "res/values-sl/values-sl.xml", "res/values-de/values-de.xml", "res/values-kk-rKZ/values-kk-rKZ.xml", "res/values-en-rAU/values-en-rAU.xml", "res/values-en-rIN/values-en-rIN.xml", "res/values-zh-rTW/values-zh-rTW.xml", "res/values-sw/values-sw.xml", "res/values-nb/values-nb.xml", "res/values-bs-rBA/values-bs-rBA.xml", "res/values-tr/values-tr.xml", "res/values-kn-rIN/values-kn-rIN.xml", "res/transition-v19/lb_browse_headers_in.xml", "res/transition-v19/lb_browse_headers_out.xml", "res/values-hy-rAM/values-hy-rAM.xml", "res/values-es-rUS/values-es-rUS.xml", "res/values-zh-rHK/values-zh-rHK.xml", "res/values-ko/values-ko.xml", "res/values-pt-rPT/values-pt-rPT.xml", "res/values-iw/values-iw.xml", "res/values-lt/values-lt.xml", "res/values-ro/values-ro.xml", "res/animator-v21/lb_playback_description_fade_out.xml", "res/animator-v21/lb_playback_bg_fade_out.xml", "res/animator-v21/lb_playback_bg_fade_in.xml", "res/values-pt/values-pt.xml", "res/values-ar/values-ar.xml", "res/values-ur-rPK/values-ur-rPK.xml", "res/values-ml-rIN/values-ml-rIN.xml", "res/drawable-xhdpi-v4/lb_ic_replay.png", "res/drawable-xhdpi-v4/lb_ic_nav_arrow.png", "res/drawable-xhdpi-v4/lb_text_dot_two_small.png", "res/drawable-xhdpi-v4/lb_text_dot_one_small.png", "res/drawable-xhdpi-v4/lb_ic_skip_previous.png", "res/drawable-xhdpi-v4/lb_ic_thumb_down.png", "res/drawable-xhdpi-v4/lb_ic_thumb_up_outline.png", "res/drawable-xhdpi-v4/lb_ic_search_mic_out.png", "res/drawable-xhdpi-v4/lb_ic_loop.png", "res/drawable-xhdpi-v4/lb_ic_play_fit.png", "res/drawable-xhdpi-v4/lb_ic_thumb_up.png", "res/drawable-xhdpi-v4/lb_ic_guidedactions_item_chevron.png", "res/drawable-xhdpi-v4/lb_ic_fast_rewind.png", "res/drawable-xhdpi-v4/lb_ic_shuffle.png", "res/drawable-xhdpi-v4/lb_ic_sad_cloud.png", "res/drawable-xhdpi-v4/lb_in_app_search_shadow_normal.9.png", "res/drawable-xhdpi-v4/lb_ic_fast_forward.png", "res/drawable-xhdpi-v4/lb_card_shadow_focused.9.png", "res/drawable-xhdpi-v4/lb_in_app_search_shadow_focused.9.png", "res/drawable-xhdpi-v4/lb_ic_actions_right_arrow.png", "res/drawable-xhdpi-v4/lb_action_bg_focused.9.png", "res/drawable-xhdpi-v4/lb_ic_hq.png", "res/drawable-xhdpi-v4/lb_in_app_search_bg.9.png", "res/drawable-xhdpi-v4/lb_ic_stop.png", "res/drawable-xhdpi-v4/lb_ic_search_mic.png", "res/drawable-xhdpi-v4/lb_card_shadow_normal.9.png", "res/drawable-xhdpi-v4/lb_ic_loop_one.png", "res/drawable-xhdpi-v4/lb_ic_in_app_search.png", "res/drawable-xhdpi-v4/lb_text_dot_one.png", "res/drawable-xhdpi-v4/lb_ic_pip.png", "res/drawable-xhdpi-v4/lb_text_dot_two.png", "res/drawable-xhdpi-v4/lb_ic_more.png", "res/drawable-xhdpi-v4/lb_ic_pause.png", "res/drawable-xhdpi-v4/lb_ic_cc.png", "res/drawable-xhdpi-v4/lb_ic_skip_next.png", "res/drawable-xhdpi-v4/lb_ic_thumb_down_outline.png", "res/drawable-xhdpi-v4/lb_ic_playback_loop.png", "res/drawable-xhdpi-v4/lb_ic_play.png", "res/values/values.xml", "res/values-hr/values-hr.xml", "res/values-mn-rMN/values-mn-rMN.xml", "res/values-da/values-da.xml", "res/values-hi/values-hi.xml", "res/values-it/values-it.xml", "res/values-es/values-es.xml", "res/values-sk/values-sk.xml", "res/values-lv/values-lv.xml", "res/values-ky-rKG/values-ky-rKG.xml", "res/values-hu/values-hu.xml", "res/drawable-xxhdpi-v4/lb_ic_search_mic_out.png", "res/drawable-xxhdpi-v4/lb_ic_sad_cloud.png", "res/drawable-xxhdpi-v4/lb_in_app_search_shadow_normal.9.png", "res/drawable-xxhdpi-v4/lb_in_app_search_shadow_focused.9.png", "res/drawable-xxhdpi-v4/lb_ic_actions_right_arrow.png", "res/drawable-xxhdpi-v4/lb_action_bg_focused.9.png", "res/drawable-xxhdpi-v4/lb_in_app_search_bg.9.png", "res/drawable-xxhdpi-v4/lb_ic_search_mic.png", "res/drawable-xxhdpi-v4/lb_ic_in_app_search.png", "res/values-v19/values-v19.xml", "res/values-th/values-th.xml", "res/values-cs/values-cs.xml", "res/values-sr/values-sr.xml", "res/values-tl/values-tl.xml", "res/values-te-rIN/values-te-rIN.xml", "res/values-ne-rNP/values-ne-rNP.xml", "res/values-ta-rIN/values-ta-rIN.xml", "res/drawable/lb_speech_orb.xml", "res/drawable/lb_playback_progress_bar.xml", "res/drawable/lb_card_foreground.xml", "res/drawable/lb_onboarding_start_button_background.xml", "res/drawable/lb_control_button_secondary.xml", "res/drawable/lb_playback_now_playing_bar.xml", "res/drawable/lb_control_button_primary.xml", "res/drawable/lb_background.xml", "res/drawable/lb_headers_right_fading.xml", "res/drawable/lb_search_orb.xml" ] -subjar_tuples = [ ] -subjars = [ ]
diff --git a/build/secondary/third_party/android_tools/android_support_v17_preference_java.info b/build/secondary/third_party/android_tools/android_support_v17_preference_java.info deleted file mode 100644 index e97682c1..0000000 --- a/build/secondary/third_party/android_tools/android_support_v17_preference_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = true -is_manifest_empty = true -resources = [ "res/layout/leanback_preference_category.xml", "res/layout/leanback_list_preference_item_single.xml", "res/layout/leanback_list_preference_fragment.xml", "res/layout/leanback_list_preference_item_multi.xml", "res/layout/leanback_settings_fragment.xml", "res/layout/leanback_preference_fragment.xml", "res/layout/leanback_preferences_list.xml", "res/layout/leanback_preference_information.xml", "res/layout/leanback_preference.xml", "res/values/values.xml", "res/layout-v21/leanback_settings_fragment.xml", "res/color/lb_preference_item_secondary_text_color.xml", "res/color/lb_preference_item_primary_text_color.xml" ] -subjar_tuples = [ ] -subjars = [ ]
diff --git a/build/secondary/third_party/android_tools/android_support_v7_appcompat_java_internal.info b/build/secondary/third_party/android_tools/android_support_v7_appcompat_java_internal.info deleted file mode 100644 index 780717bb..0000000 --- a/build/secondary/third_party/android_tools/android_support_v7_appcompat_java_internal.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = true -is_manifest_empty = true -resources = [ "res/values-v23/values-v23.xml", "res/values-km-rKH/values-km-rKH.xml", "res/values-nl/values-nl.xml", "res/values-az-rAZ/values-az-rAZ.xml", "res/values-port/values-port.xml", "res/values-gl-rES/values-gl-rES.xml", "res/values-bg/values-bg.xml", "res/values-v18/values-v18.xml", "res/values-xlarge-v4/values-xlarge-v4.xml", "res/values-pt-rBR/values-pt-rBR.xml", "res/values-eu-rES/values-eu-rES.xml", "res/values-el/values-el.xml", "res/values-mk-rMK/values-mk-rMK.xml", "res/values-af/values-af.xml", "res/drawable-ldrtl-xhdpi-v17/abc_spinner_mtrl_am_alpha.9.png", "res/drawable-ldrtl-xhdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png", "res/drawable-ldrtl-xhdpi-v17/abc_ic_menu_cut_mtrl_alpha.png", "res/drawable-ldrtl-xxxhdpi-v17/abc_spinner_mtrl_am_alpha.9.png", "res/drawable-ldrtl-xxxhdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png", "res/drawable-ldrtl-xxxhdpi-v17/abc_ic_menu_cut_mtrl_alpha.png", "res/drawable-v21/abc_btn_colored_material.xml", "res/drawable-v21/abc_edit_text_material.xml", "res/drawable-v21/notification_action_background.xml", "res/drawable-v21/abc_action_bar_item_background_material.xml", "res/values-uk/values-uk.xml", "res/values-zu/values-zu.xml", "res/values-et-rEE/values-et-rEE.xml", "res/values-v21/values-v21.xml", "res/values-lo-rLA/values-lo-rLA.xml", "res/drawable-hdpi-v4/abc_ic_menu_share_mtrl_alpha.png", "res/drawable-hdpi-v4/abc_list_pressed_holo_light.9.png", "res/drawable-hdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png", "res/drawable-hdpi-v4/abc_scrubber_control_off_mtrl_alpha.png", "res/drawable-hdpi-v4/abc_list_focused_holo.9.png", "res/drawable-hdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png", "res/drawable-hdpi-v4/abc_textfield_activated_mtrl_alpha.9.png", "res/drawable-hdpi-v4/abc_popup_background_mtrl_mult.9.png", "res/drawable-hdpi-v4/abc_ic_star_black_36dp.png", "res/drawable-hdpi-v4/abc_list_selector_disabled_holo_dark.9.png", "res/drawable-hdpi-v4/abc_spinner_mtrl_am_alpha.9.png", "res/drawable-hdpi-v4/abc_text_select_handle_left_mtrl_light.png", "res/drawable-hdpi-v4/abc_list_longpressed_holo.9.png", "res/drawable-hdpi-v4/abc_btn_check_to_on_mtrl_000.png", "res/drawable-hdpi-v4/abc_list_pressed_holo_dark.9.png", "res/drawable-hdpi-v4/abc_cab_background_top_mtrl_alpha.9.png", "res/drawable-hdpi-v4/abc_btn_check_to_on_mtrl_015.png", "res/drawable-hdpi-v4/abc_text_select_handle_left_mtrl_dark.png", "res/drawable-hdpi-v4/abc_text_select_handle_middle_mtrl_light.png", "res/drawable-hdpi-v4/abc_switch_track_mtrl_alpha.9.png", "res/drawable-hdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png", "res/drawable-hdpi-v4/notification_bg_low_normal.9.png", "res/drawable-hdpi-v4/abc_btn_radio_to_on_mtrl_015.png", "res/drawable-hdpi-v4/abc_text_select_handle_middle_mtrl_dark.png", "res/drawable-hdpi-v4/abc_tab_indicator_mtrl_alpha.9.png", "res/drawable-hdpi-v4/abc_ic_star_black_48dp.png", "res/drawable-hdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png", "res/drawable-hdpi-v4/abc_list_divider_mtrl_alpha.9.png", "res/drawable-hdpi-v4/abc_textfield_search_activated_mtrl_alpha.9.png", "res/drawable-hdpi-v4/abc_text_select_handle_right_mtrl_dark.png", "res/drawable-hdpi-v4/abc_scrubber_track_mtrl_alpha.9.png", "res/drawable-hdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png", "res/drawable-hdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.png", "res/drawable-hdpi-v4/abc_ic_star_half_black_16dp.png", "res/drawable-hdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.png", "res/drawable-hdpi-v4/notification_bg_normal.9.png", "res/drawable-hdpi-v4/abc_ic_star_half_black_36dp.png", "res/drawable-hdpi-v4/notify_panel_notification_icon_bg.png", "res/drawable-hdpi-v4/abc_textfield_search_default_mtrl_alpha.9.png", "res/drawable-hdpi-v4/abc_text_select_handle_right_mtrl_light.png", "res/drawable-hdpi-v4/notification_bg_low_pressed.9.png", "res/drawable-hdpi-v4/abc_textfield_default_mtrl_alpha.9.png", "res/drawable-hdpi-v4/notification_bg_normal_pressed.9.png", "res/drawable-hdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png", "res/drawable-hdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png", "res/drawable-hdpi-v4/abc_ic_star_black_16dp.png", "res/drawable-hdpi-v4/abc_list_selector_disabled_holo_light.9.png", "res/drawable-hdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png", "res/drawable-hdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png", "res/drawable-hdpi-v4/abc_btn_radio_to_on_mtrl_000.png", "res/drawable-hdpi-v4/abc_ic_star_half_black_48dp.png", "res/drawable-hdpi-v4/abc_ic_menu_cut_mtrl_alpha.png", "res/values-v22/values-v22.xml", "res/values-bn-rBD/values-bn-rBD.xml", "res/values-v24/values-v24.xml", "res/values-is-rIS/values-is-rIS.xml", "res/values-gu-rIN/values-gu-rIN.xml", "res/drawable-mdpi-v4/abc_ic_menu_share_mtrl_alpha.png", "res/drawable-mdpi-v4/abc_list_pressed_holo_light.9.png", "res/drawable-mdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png", "res/drawable-mdpi-v4/abc_scrubber_control_off_mtrl_alpha.png", "res/drawable-mdpi-v4/abc_list_focused_holo.9.png", "res/drawable-mdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png", "res/drawable-mdpi-v4/abc_textfield_activated_mtrl_alpha.9.png", "res/drawable-mdpi-v4/abc_popup_background_mtrl_mult.9.png", "res/drawable-mdpi-v4/abc_ic_star_black_36dp.png", "res/drawable-mdpi-v4/abc_list_selector_disabled_holo_dark.9.png", "res/drawable-mdpi-v4/abc_spinner_mtrl_am_alpha.9.png", "res/drawable-mdpi-v4/abc_text_select_handle_left_mtrl_light.png", "res/drawable-mdpi-v4/abc_list_longpressed_holo.9.png", "res/drawable-mdpi-v4/abc_btn_check_to_on_mtrl_000.png", "res/drawable-mdpi-v4/abc_list_pressed_holo_dark.9.png", "res/drawable-mdpi-v4/abc_cab_background_top_mtrl_alpha.9.png", "res/drawable-mdpi-v4/abc_btn_check_to_on_mtrl_015.png", "res/drawable-mdpi-v4/abc_text_select_handle_left_mtrl_dark.png", "res/drawable-mdpi-v4/abc_text_select_handle_middle_mtrl_light.png", "res/drawable-mdpi-v4/abc_switch_track_mtrl_alpha.9.png", "res/drawable-mdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png", "res/drawable-mdpi-v4/notification_bg_low_normal.9.png", "res/drawable-mdpi-v4/abc_btn_radio_to_on_mtrl_015.png", "res/drawable-mdpi-v4/abc_text_select_handle_middle_mtrl_dark.png", "res/drawable-mdpi-v4/abc_tab_indicator_mtrl_alpha.9.png", "res/drawable-mdpi-v4/abc_ic_star_black_48dp.png", "res/drawable-mdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png", "res/drawable-mdpi-v4/abc_list_divider_mtrl_alpha.9.png", "res/drawable-mdpi-v4/abc_textfield_search_activated_mtrl_alpha.9.png", "res/drawable-mdpi-v4/abc_text_select_handle_right_mtrl_dark.png", "res/drawable-mdpi-v4/abc_scrubber_track_mtrl_alpha.9.png", "res/drawable-mdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png", "res/drawable-mdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.png", "res/drawable-mdpi-v4/abc_ic_star_half_black_16dp.png", "res/drawable-mdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.png", "res/drawable-mdpi-v4/notification_bg_normal.9.png", "res/drawable-mdpi-v4/abc_ic_star_half_black_36dp.png", "res/drawable-mdpi-v4/notify_panel_notification_icon_bg.png", "res/drawable-mdpi-v4/abc_textfield_search_default_mtrl_alpha.9.png", "res/drawable-mdpi-v4/abc_text_select_handle_right_mtrl_light.png", "res/drawable-mdpi-v4/notification_bg_low_pressed.9.png", "res/drawable-mdpi-v4/abc_textfield_default_mtrl_alpha.9.png", "res/drawable-mdpi-v4/notification_bg_normal_pressed.9.png", "res/drawable-mdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png", "res/drawable-mdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png", "res/drawable-mdpi-v4/abc_ic_star_black_16dp.png", "res/drawable-mdpi-v4/abc_list_selector_disabled_holo_light.9.png", "res/drawable-mdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png", "res/drawable-mdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png", "res/drawable-mdpi-v4/abc_btn_radio_to_on_mtrl_000.png", "res/drawable-mdpi-v4/abc_ic_star_half_black_48dp.png", "res/drawable-mdpi-v4/abc_ic_menu_cut_mtrl_alpha.png", "res/values-pa-rIN/values-pa-rIN.xml", "res/values-mr-rIN/values-mr-rIN.xml", "res/values-ru/values-ru.xml", "res/values-pl/values-pl.xml", "res/values-fa/values-fa.xml", "res/values-v11/values-v11.xml", "res/values-be-rBY/values-be-rBY.xml", "res/values-si-rLK/values-si-rLK.xml", "res/values-sv/values-sv.xml", "res/anim/abc_popup_exit.xml", "res/anim/abc_slide_out_top.xml", "res/anim/abc_grow_fade_in_from_bottom.xml", "res/anim/abc_popup_enter.xml", "res/anim/abc_slide_in_bottom.xml", "res/anim/abc_shrink_fade_out_from_bottom.xml", "res/anim/abc_slide_in_top.xml", "res/anim/abc_fade_out.xml", "res/anim/abc_slide_out_bottom.xml", "res/anim/abc_fade_in.xml", "res/values-my-rMM/values-my-rMM.xml", "res/values-b+sr+Latn/values-b+sr+Latn.xml", "res/values-fr/values-fr.xml", "res/values-uz-rUZ/values-uz-rUZ.xml", "res/values-ms-rMY/values-ms-rMY.xml", "res/values-ka-rGE/values-ka-rGE.xml", "res/values-fi/values-fi.xml", "res/values-fr-rCA/values-fr-rCA.xml", "res/values-v17/values-v17.xml", "res/values-ca/values-ca.xml", "res/values-in/values-in.xml", "res/values-vi/values-vi.xml", "res/drawable-ldrtl-hdpi-v17/abc_spinner_mtrl_am_alpha.9.png", "res/drawable-ldrtl-hdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png", "res/drawable-ldrtl-hdpi-v17/abc_ic_menu_cut_mtrl_alpha.png", "res/layout/notification_media_cancel_action.xml", "res/layout/select_dialog_item_material.xml", "res/layout/notification_template_custom_big.xml", "res/layout/abc_action_bar_up_container.xml", "res/layout/abc_dialog_title_material.xml", "res/layout/notification_template_big_media_narrow.xml", "res/layout/abc_select_dialog_material.xml", "res/layout/abc_list_menu_item_layout.xml", "res/layout/notification_template_part_chronometer.xml", "res/layout/abc_popup_menu_header_item_layout.xml", "res/layout/notification_template_lines_media.xml", "res/layout/notification_template_part_time.xml", "res/layout/abc_list_menu_item_icon.xml", "res/layout/notification_action_tombstone.xml", "res/layout/abc_action_mode_bar.xml", "res/layout/notification_template_media_custom.xml", "res/layout/abc_popup_menu_item_layout.xml", "res/layout/abc_action_menu_item_layout.xml", "res/layout/abc_activity_chooser_view_list_item.xml", "res/layout/abc_list_menu_item_radio.xml", "res/layout/abc_screen_content_include.xml", "res/layout/abc_activity_chooser_view.xml", "res/layout/abc_alert_dialog_button_bar_material.xml", "res/layout/abc_action_menu_layout.xml", "res/layout/notification_template_big_media_narrow_custom.xml", "res/layout/notification_template_big_media_custom.xml", "res/layout/abc_list_menu_item_checkbox.xml", "res/layout/notification_media_action.xml", "res/layout/notification_template_icon_group.xml", "res/layout/abc_screen_simple.xml", "res/layout/abc_screen_simple_overlay_action_mode.xml", "res/layout/abc_screen_toolbar.xml", "res/layout/abc_alert_dialog_material.xml", "res/layout/abc_expanded_menu_layout.xml", "res/layout/abc_search_view.xml", "res/layout/notification_template_big_media.xml", "res/layout/abc_search_dropdown_item_icons_2line.xml", "res/layout/abc_action_bar_view_list_nav_layout.xml", "res/layout/select_dialog_multichoice_material.xml", "res/layout/abc_action_mode_close_item_material.xml", "res/layout/notification_template_media.xml", "res/layout/support_simple_spinner_dropdown_item.xml", "res/layout/notification_action.xml", "res/layout/abc_action_bar_title_item.xml", "res/layout/select_dialog_singlechoice_material.xml", "res/values-en-rGB/values-en-rGB.xml", "res/values-ja/values-ja.xml", "res/values-zh-rCN/values-zh-rCN.xml", "res/values-am/values-am.xml", "res/values-sq-rAL/values-sq-rAL.xml", "res/values-v16/values-v16.xml", "res/values-sl/values-sl.xml", "res/values-de/values-de.xml", "res/values-kk-rKZ/values-kk-rKZ.xml", "res/drawable-xxxhdpi-v4/abc_ic_menu_share_mtrl_alpha.png", "res/drawable-xxxhdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png", "res/drawable-xxxhdpi-v4/abc_ic_star_black_36dp.png", "res/drawable-xxxhdpi-v4/abc_spinner_mtrl_am_alpha.9.png", "res/drawable-xxxhdpi-v4/abc_text_select_handle_left_mtrl_light.png", "res/drawable-xxxhdpi-v4/abc_btn_check_to_on_mtrl_000.png", "res/drawable-xxxhdpi-v4/abc_btn_check_to_on_mtrl_015.png", "res/drawable-xxxhdpi-v4/abc_text_select_handle_left_mtrl_dark.png", "res/drawable-xxxhdpi-v4/abc_switch_track_mtrl_alpha.9.png", "res/drawable-xxxhdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png", "res/drawable-xxxhdpi-v4/abc_btn_radio_to_on_mtrl_015.png", "res/drawable-xxxhdpi-v4/abc_tab_indicator_mtrl_alpha.9.png", "res/drawable-xxxhdpi-v4/abc_ic_star_black_48dp.png", "res/drawable-xxxhdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png", "res/drawable-xxxhdpi-v4/abc_text_select_handle_right_mtrl_dark.png", "res/drawable-xxxhdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.png", "res/drawable-xxxhdpi-v4/abc_ic_star_half_black_16dp.png", "res/drawable-xxxhdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.png", "res/drawable-xxxhdpi-v4/abc_ic_star_half_black_36dp.png", "res/drawable-xxxhdpi-v4/abc_text_select_handle_right_mtrl_light.png", "res/drawable-xxxhdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png", "res/drawable-xxxhdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png", "res/drawable-xxxhdpi-v4/abc_ic_star_black_16dp.png", "res/drawable-xxxhdpi-v4/abc_btn_radio_to_on_mtrl_000.png", "res/drawable-xxxhdpi-v4/abc_ic_star_half_black_48dp.png", "res/drawable-xxxhdpi-v4/abc_ic_menu_cut_mtrl_alpha.png", "res/values-en-rAU/values-en-rAU.xml", "res/values-en-rIN/values-en-rIN.xml", "res/values-zh-rTW/values-zh-rTW.xml", "res/values-sw/values-sw.xml", "res/values-nb/values-nb.xml", "res/values-h720dp-v13/values-h720dp-v13.xml", "res/values-bs-rBA/values-bs-rBA.xml", "res/values-tr/values-tr.xml", "res/drawable-ldrtl-mdpi-v17/abc_spinner_mtrl_am_alpha.9.png", "res/drawable-ldrtl-mdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png", "res/drawable-ldrtl-mdpi-v17/abc_ic_menu_cut_mtrl_alpha.png", "res/drawable-v23/abc_control_background_material.xml", "res/values-kn-rIN/values-kn-rIN.xml", "res/values-hy-rAM/values-hy-rAM.xml", "res/values-sw600dp-v13/values-sw600dp-v13.xml", "res/values-es-rUS/values-es-rUS.xml", "res/values-land/values-land.xml", "res/values-zh-rHK/values-zh-rHK.xml", "res/drawable-ldrtl-xxhdpi-v17/abc_spinner_mtrl_am_alpha.9.png", "res/drawable-ldrtl-xxhdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png", "res/drawable-ldrtl-xxhdpi-v17/abc_ic_menu_cut_mtrl_alpha.png", "res/values-large-v4/values-large-v4.xml", "res/values-ko/values-ko.xml", "res/values-pt-rPT/values-pt-rPT.xml", "res/values-iw/values-iw.xml", "res/values-lt/values-lt.xml", "res/values-ro/values-ro.xml", "res/values-v14/values-v14.xml", "res/values-pt/values-pt.xml", "res/layout-v16/notification_template_custom_big.xml", "res/values-ar/values-ar.xml", "res/color-v23/abc_tint_seek_thumb.xml", "res/color-v23/abc_tint_btn_checkable.xml", "res/color-v23/abc_tint_edittext.xml", "res/color-v23/abc_tint_switch_thumb.xml", "res/color-v23/abc_btn_colored_borderless_text_material.xml", "res/color-v23/abc_tint_default.xml", "res/color-v23/abc_color_highlight_material.xml", "res/color-v23/abc_tint_spinner.xml", "res/color-v23/abc_tint_switch_track.xml", "res/values-hdpi-v4/values-hdpi-v4.xml", "res/values-ur-rPK/values-ur-rPK.xml", "res/values-ml-rIN/values-ml-rIN.xml", "res/drawable-xhdpi-v4/abc_ic_menu_share_mtrl_alpha.png", "res/drawable-xhdpi-v4/abc_list_pressed_holo_light.9.png", "res/drawable-xhdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png", "res/drawable-xhdpi-v4/abc_scrubber_control_off_mtrl_alpha.png", "res/drawable-xhdpi-v4/abc_list_focused_holo.9.png", "res/drawable-xhdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png", "res/drawable-xhdpi-v4/abc_textfield_activated_mtrl_alpha.9.png", "res/drawable-xhdpi-v4/abc_popup_background_mtrl_mult.9.png", "res/drawable-xhdpi-v4/abc_ic_star_black_36dp.png", "res/drawable-xhdpi-v4/abc_list_selector_disabled_holo_dark.9.png", "res/drawable-xhdpi-v4/abc_spinner_mtrl_am_alpha.9.png", "res/drawable-xhdpi-v4/abc_text_select_handle_left_mtrl_light.png", "res/drawable-xhdpi-v4/abc_list_longpressed_holo.9.png", "res/drawable-xhdpi-v4/abc_btn_check_to_on_mtrl_000.png", "res/drawable-xhdpi-v4/abc_list_pressed_holo_dark.9.png", "res/drawable-xhdpi-v4/abc_cab_background_top_mtrl_alpha.9.png", "res/drawable-xhdpi-v4/abc_btn_check_to_on_mtrl_015.png", "res/drawable-xhdpi-v4/abc_text_select_handle_left_mtrl_dark.png", "res/drawable-xhdpi-v4/abc_text_select_handle_middle_mtrl_light.png", "res/drawable-xhdpi-v4/abc_switch_track_mtrl_alpha.9.png", "res/drawable-xhdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png", "res/drawable-xhdpi-v4/notification_bg_low_normal.9.png", "res/drawable-xhdpi-v4/abc_btn_radio_to_on_mtrl_015.png", "res/drawable-xhdpi-v4/abc_text_select_handle_middle_mtrl_dark.png", "res/drawable-xhdpi-v4/abc_tab_indicator_mtrl_alpha.9.png", "res/drawable-xhdpi-v4/abc_ic_star_black_48dp.png", "res/drawable-xhdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png", "res/drawable-xhdpi-v4/abc_list_divider_mtrl_alpha.9.png", "res/drawable-xhdpi-v4/abc_textfield_search_activated_mtrl_alpha.9.png", "res/drawable-xhdpi-v4/abc_text_select_handle_right_mtrl_dark.png", "res/drawable-xhdpi-v4/abc_scrubber_track_mtrl_alpha.9.png", "res/drawable-xhdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png", "res/drawable-xhdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.png", "res/drawable-xhdpi-v4/abc_ic_star_half_black_16dp.png", "res/drawable-xhdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.png", "res/drawable-xhdpi-v4/notification_bg_normal.9.png", "res/drawable-xhdpi-v4/abc_ic_star_half_black_36dp.png", "res/drawable-xhdpi-v4/notify_panel_notification_icon_bg.png", "res/drawable-xhdpi-v4/abc_textfield_search_default_mtrl_alpha.9.png", "res/drawable-xhdpi-v4/abc_text_select_handle_right_mtrl_light.png", "res/drawable-xhdpi-v4/notification_bg_low_pressed.9.png", "res/drawable-xhdpi-v4/abc_textfield_default_mtrl_alpha.9.png", "res/drawable-xhdpi-v4/notification_bg_normal_pressed.9.png", "res/drawable-xhdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png", "res/drawable-xhdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png", "res/drawable-xhdpi-v4/abc_ic_star_black_16dp.png", "res/drawable-xhdpi-v4/abc_list_selector_disabled_holo_light.9.png", "res/drawable-xhdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png", "res/drawable-xhdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png", "res/drawable-xhdpi-v4/abc_btn_radio_to_on_mtrl_000.png", "res/drawable-xhdpi-v4/abc_ic_star_half_black_48dp.png", "res/drawable-xhdpi-v4/abc_ic_menu_cut_mtrl_alpha.png", "res/values/values.xml", "res/values-hr/values-hr.xml", "res/values-mn-rMN/values-mn-rMN.xml", "res/values-da/values-da.xml", "res/values-hi/values-hi.xml", "res/values-it/values-it.xml", "res/color-v11/abc_background_cache_hint_selector_material_light.xml", "res/color-v11/abc_background_cache_hint_selector_material_dark.xml", "res/values-night-v8/values-night-v8.xml", "res/values-es/values-es.xml", "res/values-sk/values-sk.xml", "res/layout-v21/notification_template_custom_big.xml", "res/layout-v21/notification_action_tombstone.xml", "res/layout-v21/notification_template_icon_group.xml", "res/layout-v21/notification_action.xml", "res/values-lv/values-lv.xml", "res/values-ky-rKG/values-ky-rKG.xml", "res/values-v25/values-v25.xml", "res/values-hu/values-hu.xml", "res/drawable-xxhdpi-v4/abc_ic_menu_share_mtrl_alpha.png", "res/drawable-xxhdpi-v4/abc_list_pressed_holo_light.9.png", "res/drawable-xxhdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png", "res/drawable-xxhdpi-v4/abc_scrubber_control_off_mtrl_alpha.png", "res/drawable-xxhdpi-v4/abc_list_focused_holo.9.png", "res/drawable-xxhdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png", "res/drawable-xxhdpi-v4/abc_textfield_activated_mtrl_alpha.9.png", "res/drawable-xxhdpi-v4/abc_popup_background_mtrl_mult.9.png", "res/drawable-xxhdpi-v4/abc_ic_star_black_36dp.png", "res/drawable-xxhdpi-v4/abc_list_selector_disabled_holo_dark.9.png", "res/drawable-xxhdpi-v4/abc_spinner_mtrl_am_alpha.9.png", "res/drawable-xxhdpi-v4/abc_text_select_handle_left_mtrl_light.png", "res/drawable-xxhdpi-v4/abc_list_longpressed_holo.9.png", "res/drawable-xxhdpi-v4/abc_btn_check_to_on_mtrl_000.png", "res/drawable-xxhdpi-v4/abc_list_pressed_holo_dark.9.png", "res/drawable-xxhdpi-v4/abc_cab_background_top_mtrl_alpha.9.png", "res/drawable-xxhdpi-v4/abc_btn_check_to_on_mtrl_015.png", "res/drawable-xxhdpi-v4/abc_text_select_handle_left_mtrl_dark.png", "res/drawable-xxhdpi-v4/abc_text_select_handle_middle_mtrl_light.png", "res/drawable-xxhdpi-v4/abc_switch_track_mtrl_alpha.9.png", "res/drawable-xxhdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png", "res/drawable-xxhdpi-v4/abc_btn_radio_to_on_mtrl_015.png", "res/drawable-xxhdpi-v4/abc_text_select_handle_middle_mtrl_dark.png", "res/drawable-xxhdpi-v4/abc_tab_indicator_mtrl_alpha.9.png", "res/drawable-xxhdpi-v4/abc_ic_star_black_48dp.png", "res/drawable-xxhdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png", "res/drawable-xxhdpi-v4/abc_list_divider_mtrl_alpha.9.png", "res/drawable-xxhdpi-v4/abc_textfield_search_activated_mtrl_alpha.9.png", "res/drawable-xxhdpi-v4/abc_text_select_handle_right_mtrl_dark.png", "res/drawable-xxhdpi-v4/abc_scrubber_track_mtrl_alpha.9.png", "res/drawable-xxhdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png", "res/drawable-xxhdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.png", "res/drawable-xxhdpi-v4/abc_ic_star_half_black_16dp.png", "res/drawable-xxhdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.png", "res/drawable-xxhdpi-v4/abc_ic_star_half_black_36dp.png", "res/drawable-xxhdpi-v4/abc_textfield_search_default_mtrl_alpha.9.png", "res/drawable-xxhdpi-v4/abc_text_select_handle_right_mtrl_light.png", "res/drawable-xxhdpi-v4/abc_textfield_default_mtrl_alpha.9.png", "res/drawable-xxhdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png", "res/drawable-xxhdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png", "res/drawable-xxhdpi-v4/abc_ic_star_black_16dp.png", "res/drawable-xxhdpi-v4/abc_list_selector_disabled_holo_light.9.png", "res/drawable-xxhdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png", "res/drawable-xxhdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png", "res/drawable-xxhdpi-v4/abc_btn_radio_to_on_mtrl_000.png", "res/drawable-xxhdpi-v4/abc_ic_star_half_black_48dp.png", "res/drawable-xxhdpi-v4/abc_ic_menu_cut_mtrl_alpha.png", "res/color/abc_search_url_text.xml", "res/color/switch_thumb_material_dark.xml", "res/color/abc_hint_foreground_material_light.xml", "res/color/abc_secondary_text_material_dark.xml", "res/color/abc_tint_seek_thumb.xml", "res/color/abc_tint_btn_checkable.xml", "res/color/abc_tint_edittext.xml", "res/color/abc_hint_foreground_material_dark.xml", "res/color/switch_thumb_material_light.xml", "res/color/abc_tint_switch_thumb.xml", "res/color/abc_btn_colored_borderless_text_material.xml", "res/color/abc_primary_text_material_light.xml", "res/color/abc_background_cache_hint_selector_material_light.xml", "res/color/abc_secondary_text_material_light.xml", "res/color/abc_primary_text_disable_only_material_light.xml", "res/color/abc_primary_text_disable_only_material_dark.xml", "res/color/abc_tint_default.xml", "res/color/abc_tint_spinner.xml", "res/color/abc_tint_switch_track.xml", "res/color/abc_background_cache_hint_selector_material_dark.xml", "res/color/abc_primary_text_material_dark.xml", "res/values-v12/values-v12.xml", "res/values-th/values-th.xml", "res/values-cs/values-cs.xml", "res/values-sr/values-sr.xml", "res/values-v13/values-v13.xml", "res/values-tl/values-tl.xml", "res/values-te-rIN/values-te-rIN.xml", "res/values-ne-rNP/values-ne-rNP.xml", "res/values-ta-rIN/values-ta-rIN.xml", "res/values-ldltr-v21/values-ldltr-v21.xml", "res/drawable/abc_switch_thumb_material.xml", "res/drawable/abc_btn_borderless_material.xml", "res/drawable/abc_textfield_search_material.xml", "res/drawable/abc_seekbar_track_material.xml", "res/drawable/abc_btn_colored_material.xml", "res/drawable/abc_ratingbar_indicator_material.xml", "res/drawable/notification_tile_bg.xml", "res/drawable/abc_ic_ab_back_material.xml", "res/drawable/notification_icon_background.xml", "res/drawable/notification_bg_low.xml", "res/drawable/abc_btn_default_mtrl_shape.xml", "res/drawable/abc_seekbar_thumb_material.xml", "res/drawable/abc_cab_background_internal_bg.xml", "res/drawable/abc_dialog_material_background.xml", "res/drawable/abc_text_cursor_material.xml", "res/drawable/notification_bg.xml", "res/drawable/abc_btn_radio_material.xml", "res/drawable/abc_item_background_holo_dark.xml", "res/drawable/abc_list_selector_holo_light.xml", "res/drawable/abc_ic_voice_search_api_material.xml", "res/drawable/abc_ic_search_api_material.xml", "res/drawable/abc_cab_background_top_material.xml", "res/drawable/abc_list_selector_background_transition_holo_dark.xml", "res/drawable/abc_edit_text_material.xml", "res/drawable/abc_tab_indicator_material.xml", "res/drawable/abc_ratingbar_material.xml", "res/drawable/abc_seekbar_tick_mark_material.xml", "res/drawable/abc_ic_go_search_api_material.xml", "res/drawable/abc_list_selector_holo_dark.xml", "res/drawable/abc_ic_arrow_drop_right_black_24dp.xml", "res/drawable/abc_btn_check_material.xml", "res/drawable/abc_spinner_textfield_background_material.xml", "res/drawable/abc_ic_clear_material.xml", "res/drawable/abc_item_background_holo_light.xml", "res/drawable/abc_list_selector_background_transition_holo_light.xml", "res/drawable/abc_ic_menu_overflow_material.xml", "res/drawable/abc_vector_test.xml", "res/drawable/abc_ratingbar_small_material.xml" ] -subjar_tuples = [ ] -subjars = [ ]
diff --git a/build/secondary/third_party/android_tools/android_support_v7_gridlayout_java.info b/build/secondary/third_party/android_tools/android_support_v7_gridlayout_java.info deleted file mode 100644 index 28c8330..0000000 --- a/build/secondary/third_party/android_tools/android_support_v7_gridlayout_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = true -is_manifest_empty = true -resources = [ "res/values/values.xml" ] -subjar_tuples = [ ] -subjars = [ ]
diff --git a/build/secondary/third_party/android_tools/android_support_v7_mediarouter_java.info b/build/secondary/third_party/android_tools/android_support_v7_mediarouter_java.info deleted file mode 100644 index 55b51f5..0000000 --- a/build/secondary/third_party/android_tools/android_support_v7_mediarouter_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = true -is_manifest_empty = true -resources = [ "res/values-km-rKH/values-km-rKH.xml", "res/values-nl/values-nl.xml", "res/values-az-rAZ/values-az-rAZ.xml", "res/values-gl-rES/values-gl-rES.xml", "res/values-bg/values-bg.xml", "res/values-pt-rBR/values-pt-rBR.xml", "res/values-eu-rES/values-eu-rES.xml", "res/values-el/values-el.xml", "res/values-sw720dp-v13/values-sw720dp-v13.xml", "res/values-mk-rMK/values-mk-rMK.xml", "res/values-af/values-af.xml", "res/values-uk/values-uk.xml", "res/values-zu/values-zu.xml", "res/values-et-rEE/values-et-rEE.xml", "res/values-lo-rLA/values-lo-rLA.xml", "res/drawable-hdpi-v4/ic_mr_button_disconnected_light.png", "res/drawable-hdpi-v4/ic_vol_type_speaker_group_light.png", "res/drawable-hdpi-v4/ic_audiotrack_light.png", "res/drawable-hdpi-v4/ic_vol_type_speaker_light.png", "res/drawable-hdpi-v4/ic_vol_type_tv_dark.png", "res/drawable-hdpi-v4/ic_dialog_close_dark.png", "res/drawable-hdpi-v4/ic_vol_type_tv_light.png", "res/drawable-hdpi-v4/ic_mr_button_disabled_dark.png", "res/drawable-hdpi-v4/ic_mr_button_disabled_light.png", "res/drawable-hdpi-v4/ic_dialog_close_light.png", "res/drawable-hdpi-v4/ic_mr_button_disconnected_dark.png", "res/drawable-hdpi-v4/ic_vol_type_speaker_group_dark.png", "res/drawable-hdpi-v4/ic_vol_type_speaker_dark.png", "res/drawable-hdpi-v4/ic_media_pause_light.png", "res/drawable-hdpi-v4/ic_mr_button_grey.png", "res/drawable-hdpi-v4/ic_audiotrack_dark.png", "res/drawable-hdpi-v4/ic_media_play_light.png", "res/drawable-hdpi-v4/ic_media_pause_dark.png", "res/drawable-hdpi-v4/ic_media_play_dark.png", "res/values-bn-rBD/values-bn-rBD.xml", "res/values-is-rIS/values-is-rIS.xml", "res/values-gu-rIN/values-gu-rIN.xml", "res/drawable-mdpi-v4/ic_mr_button_disconnected_light.png", "res/drawable-mdpi-v4/ic_vol_type_speaker_group_light.png", "res/drawable-mdpi-v4/ic_audiotrack_light.png", "res/drawable-mdpi-v4/ic_vol_type_speaker_light.png", "res/drawable-mdpi-v4/ic_vol_type_tv_dark.png", "res/drawable-mdpi-v4/ic_dialog_close_dark.png", "res/drawable-mdpi-v4/ic_vol_type_tv_light.png", "res/drawable-mdpi-v4/ic_mr_button_disabled_dark.png", "res/drawable-mdpi-v4/ic_mr_button_disabled_light.png", "res/drawable-mdpi-v4/ic_dialog_close_light.png", "res/drawable-mdpi-v4/ic_mr_button_disconnected_dark.png", "res/drawable-mdpi-v4/ic_vol_type_speaker_group_dark.png", "res/drawable-mdpi-v4/ic_vol_type_speaker_dark.png", "res/drawable-mdpi-v4/ic_media_pause_light.png", "res/drawable-mdpi-v4/ic_mr_button_grey.png", "res/drawable-mdpi-v4/ic_audiotrack_dark.png", "res/drawable-mdpi-v4/ic_media_play_light.png", "res/drawable-mdpi-v4/ic_media_pause_dark.png", "res/drawable-mdpi-v4/ic_media_play_dark.png", "res/values-pa-rIN/values-pa-rIN.xml", "res/values-mr-rIN/values-mr-rIN.xml", "res/values-ru/values-ru.xml", "res/values-pl/values-pl.xml", "res/values-fa/values-fa.xml", "res/values-be-rBY/values-be-rBY.xml", "res/values-si-rLK/values-si-rLK.xml", "res/values-sv/values-sv.xml", "res/values-my-rMM/values-my-rMM.xml", "res/values-b+sr+Latn/values-b+sr+Latn.xml", "res/interpolator/mr_linear_out_slow_in.xml", "res/interpolator/mr_fast_out_slow_in.xml", "res/values-fr/values-fr.xml", "res/values-uz-rUZ/values-uz-rUZ.xml", "res/values-ms-rMY/values-ms-rMY.xml", "res/values-ka-rGE/values-ka-rGE.xml", "res/values-fi/values-fi.xml", "res/values-fr-rCA/values-fr-rCA.xml", "res/values-ca/values-ca.xml", "res/values-in/values-in.xml", "res/values-vi/values-vi.xml", "res/layout/mr_controller_material_dialog_b.xml", "res/layout/mr_chooser_dialog.xml", "res/layout/mr_chooser_list_item.xml", "res/layout/mr_volume_control.xml", "res/layout/mr_playback_control.xml", "res/layout/mr_controller_volume_item.xml", "res/values-en-rGB/values-en-rGB.xml", "res/values-ja/values-ja.xml", "res/values-zh-rCN/values-zh-rCN.xml", "res/values-am/values-am.xml", "res/values-sq-rAL/values-sq-rAL.xml", "res/values-sl/values-sl.xml", "res/values-de/values-de.xml", "res/values-kk-rKZ/values-kk-rKZ.xml", "res/drawable-xxxhdpi-v4/ic_group_collapse_03.png", "res/drawable-xxxhdpi-v4/ic_group_expand_15.png", "res/drawable-xxxhdpi-v4/ic_group_expand_13.png", "res/drawable-xxxhdpi-v4/ic_group_expand_10.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_14.png", "res/drawable-xxxhdpi-v4/ic_group_expand_06.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_11.png", "res/drawable-xxxhdpi-v4/ic_group_expand_11.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_01.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_10.png", "res/drawable-xxxhdpi-v4/ic_group_expand_07.png", "res/drawable-xxxhdpi-v4/ic_group_expand_09.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_13.png", "res/drawable-xxxhdpi-v4/ic_group_expand_01.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_00.png", "res/drawable-xxxhdpi-v4/ic_group_expand_00.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_04.png", "res/drawable-xxxhdpi-v4/ic_group_expand_12.png", "res/drawable-xxxhdpi-v4/ic_group_expand_08.png", "res/drawable-xxxhdpi-v4/ic_group_expand_04.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_08.png", "res/drawable-xxxhdpi-v4/ic_group_expand_03.png", "res/drawable-xxxhdpi-v4/ic_group_expand_02.png", "res/drawable-xxxhdpi-v4/ic_group_expand_05.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_02.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_07.png", "res/drawable-xxxhdpi-v4/ic_mr_button_grey.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_05.png", "res/drawable-xxxhdpi-v4/ic_group_expand_14.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_12.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_06.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_09.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_15.png", "res/values-en-rAU/values-en-rAU.xml", "res/values-en-rIN/values-en-rIN.xml", "res/values-zh-rTW/values-zh-rTW.xml", "res/values-sw/values-sw.xml", "res/values-nb/values-nb.xml", "res/values-bs-rBA/values-bs-rBA.xml", "res/values-tr/values-tr.xml", "res/values-kn-rIN/values-kn-rIN.xml", "res/values-hy-rAM/values-hy-rAM.xml", "res/values-sw600dp-v13/values-sw600dp-v13.xml", "res/values-es-rUS/values-es-rUS.xml", "res/values-land/values-land.xml", "res/values-zh-rHK/values-zh-rHK.xml", "res/values-ko/values-ko.xml", "res/values-pt-rPT/values-pt-rPT.xml", "res/values-iw/values-iw.xml", "res/values-lt/values-lt.xml", "res/values-ro/values-ro.xml", "res/values-pt/values-pt.xml", "res/values-ar/values-ar.xml", "res/values-ur-rPK/values-ur-rPK.xml", "res/values-ml-rIN/values-ml-rIN.xml", "res/drawable-xhdpi-v4/ic_mr_button_connected_20_light.png", "res/drawable-xhdpi-v4/ic_mr_button_disconnected_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_06_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_14_dark.png", "res/drawable-xhdpi-v4/ic_vol_type_speaker_group_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_18_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_12_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_15_dark.png", "res/drawable-xhdpi-v4/ic_audiotrack_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_01_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_18_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_04_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_04_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_09_dark.png", "res/drawable-xhdpi-v4/ic_vol_type_speaker_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_03_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_19_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_15_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_17_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_20_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_07_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_12_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_19_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_11_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_22_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_10_light.png", "res/drawable-xhdpi-v4/ic_vol_type_tv_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_13_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_16_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_08_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_07_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_05_light.png", "res/drawable-xhdpi-v4/ic_dialog_close_dark.png", "res/drawable-xhdpi-v4/ic_vol_type_tv_light.png", "res/drawable-xhdpi-v4/ic_mr_button_disabled_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_disabled_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_13_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_00_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_09_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_02_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_02_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_21_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_21_light.png", "res/drawable-xhdpi-v4/ic_dialog_close_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_15_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_13_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_07_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_17_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_21_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_01_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_19_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_02_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_02_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_09_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_18_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_05_light.png", "res/drawable-xhdpi-v4/ic_mr_button_disconnected_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_10_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_14_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_00_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_03_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_15_light.png", "res/drawable-xhdpi-v4/ic_vol_type_speaker_group_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_06_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_11_light.png", "res/drawable-xhdpi-v4/ic_vol_type_speaker_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_10_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_16_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_08_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_09_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_11_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_05_dark.png", "res/drawable-xhdpi-v4/ic_media_pause_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_10_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_22_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_17_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_grey.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_08_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_04_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_16_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_20_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_03_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_14_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_17_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_06_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_06_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_20_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_01_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_16_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_21_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_12_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_12_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_22_light.png", "res/drawable-xhdpi-v4/ic_audiotrack_dark.png", "res/drawable-xhdpi-v4/ic_media_play_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_19_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_05_dark.png", "res/drawable-xhdpi-v4/ic_media_pause_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_22_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_14_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_11_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_00_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_08_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_13_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_18_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_04_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_07_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_00_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_01_light.png", "res/drawable-xhdpi-v4/ic_media_play_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_03_light.png", "res/values/values.xml", "res/values-hr/values-hr.xml", "res/values-mn-rMN/values-mn-rMN.xml", "res/values-da/values-da.xml", "res/values-hi/values-hi.xml", "res/values-it/values-it.xml", "res/values-es/values-es.xml", "res/values-sk/values-sk.xml", "res/values-lv/values-lv.xml", "res/values-ky-rKG/values-ky-rKG.xml", "res/values-hu/values-hu.xml", "res/drawable-xxhdpi-v4/ic_mr_button_connected_20_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_disconnected_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_06_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_14_dark.png", "res/drawable-xxhdpi-v4/ic_vol_type_speaker_group_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_18_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_12_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_15_dark.png", "res/drawable-xxhdpi-v4/ic_audiotrack_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_01_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_18_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_04_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_04_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_09_dark.png", "res/drawable-xxhdpi-v4/ic_vol_type_speaker_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_03_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_19_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_15_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_17_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_20_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_07_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_12_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_19_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_11_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_22_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_10_light.png", "res/drawable-xxhdpi-v4/ic_vol_type_tv_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_13_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_16_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_08_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_07_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_05_light.png", "res/drawable-xxhdpi-v4/ic_dialog_close_dark.png", "res/drawable-xxhdpi-v4/ic_vol_type_tv_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_disabled_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_disabled_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_13_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_00_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_09_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_02_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_02_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_21_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_21_light.png", "res/drawable-xxhdpi-v4/ic_dialog_close_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_15_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_13_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_07_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_17_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_21_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_01_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_19_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_02_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_02_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_09_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_18_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_05_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_disconnected_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_10_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_14_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_00_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_03_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_15_light.png", "res/drawable-xxhdpi-v4/ic_vol_type_speaker_group_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_06_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_11_light.png", "res/drawable-xxhdpi-v4/ic_vol_type_speaker_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_10_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_16_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_08_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_09_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_11_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_05_dark.png", "res/drawable-xxhdpi-v4/ic_media_pause_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_10_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_22_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_17_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_grey.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_08_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_04_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_16_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_20_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_03_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_14_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_17_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_06_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_06_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_20_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_01_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_16_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_21_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_12_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_12_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_22_light.png", "res/drawable-xxhdpi-v4/ic_audiotrack_dark.png", "res/drawable-xxhdpi-v4/ic_media_play_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_19_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_05_dark.png", "res/drawable-xxhdpi-v4/ic_media_pause_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_22_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_14_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_11_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_00_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_08_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_13_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_18_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_04_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_07_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_00_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_01_light.png", "res/drawable-xxhdpi-v4/ic_media_play_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_03_light.png", "res/values-th/values-th.xml", "res/values-cs/values-cs.xml", "res/values-sr/values-sr.xml", "res/values-tl/values-tl.xml", "res/values-te-rIN/values-te-rIN.xml", "res/values-ne-rNP/values-ne-rNP.xml", "res/values-ta-rIN/values-ta-rIN.xml", "res/drawable/mr_button_connecting_light.xml", "res/drawable/mr_group_collapse.xml", "res/drawable/mr_button_connecting_dark.xml", "res/drawable/mr_dialog_close_dark.xml", "res/drawable/mr_vol_type_audiotrack_dark.xml", "res/drawable/mr_media_pause_light.xml", "res/drawable/mr_group_expand.xml", "res/drawable/mr_vol_type_audiotrack_light.xml", "res/drawable/mr_dialog_material_background_light.xml", "res/drawable/mr_media_play_dark.xml", "res/drawable/mr_button_dark.xml", "res/drawable/mr_media_pause_dark.xml", "res/drawable/mr_dialog_material_background_dark.xml", "res/drawable/mr_button_connected_light.xml", "res/drawable/mr_dialog_close_light.xml", "res/drawable/mr_media_play_light.xml", "res/drawable/mr_button_connected_dark.xml", "res/drawable/mr_button_light.xml" ] -subjar_tuples = [ [ "internal_impl_25.0.1", "libs/internal_impl-25.0.1.jar" ] ] -subjars = [ "libs/internal_impl-25.0.1.jar" ]
diff --git a/build/secondary/third_party/android_tools/android_support_v7_palette_java.info b/build/secondary/third_party/android_tools/android_support_v7_palette_java.info deleted file mode 100644 index a2ebd4a..0000000 --- a/build/secondary/third_party/android_tools/android_support_v7_palette_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = false -is_manifest_empty = true -resources = [ ] -subjar_tuples = [ ] -subjars = [ ]
diff --git a/build/secondary/third_party/android_tools/android_support_v7_preference_java.info b/build/secondary/third_party/android_tools/android_support_v7_preference_java.info deleted file mode 100644 index fc60261..0000000 --- a/build/secondary/third_party/android_tools/android_support_v7_preference_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = true -has_r_text_file = true -is_manifest_empty = true -resources = [ "res/values-v17/values-v17.xml", "res/layout/preference_dropdown.xml", "res/layout/preference_list_fragment.xml", "res/layout/preference.xml", "res/layout/preference_category.xml", "res/layout/preference_widget_checkbox.xml", "res/layout/preference_widget_switch_compat.xml", "res/layout/preference_information.xml", "res/layout/preference_recyclerview.xml", "res/layout/preference_dialog_edittext.xml", "res/values/values.xml", "res/layout-v11/preference_dropdown.xml", "res/layout-v11/preference.xml" ] -subjar_tuples = [ ] -subjars = [ ]
diff --git a/build/secondary/third_party/android_tools/android_support_v7_recyclerview_java.info b/build/secondary/third_party/android_tools/android_support_v7_recyclerview_java.info deleted file mode 100644 index a25d255..0000000 --- a/build/secondary/third_party/android_tools/android_support_v7_recyclerview_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = true -has_r_text_file = true -is_manifest_empty = true -resources = [ "res/values/values.xml" ] -subjar_tuples = [ ] -subjars = [ ]
diff --git a/build/secondary/third_party/android_tools/android_support_vector_drawable_java.info b/build/secondary/third_party/android_tools/android_support_vector_drawable_java.info deleted file mode 100644 index a2ebd4a..0000000 --- a/build/secondary/third_party/android_tools/android_support_vector_drawable_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = false -is_manifest_empty = true -resources = [ ] -subjar_tuples = [ ] -subjars = [ ]
diff --git a/build/secondary/third_party/android_tools/google_play_services_auth_base_java.info b/build/secondary/third_party/android_tools/google_play_services_auth_base_java.info deleted file mode 100644 index 0dfcb237..0000000 --- a/build/secondary/third_party/android_tools/google_play_services_auth_base_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = true -has_r_text_file = false -is_manifest_empty = true -resources = [ ] -subjar_tuples = [ ] -subjars = [ ]
diff --git a/build/secondary/third_party/android_tools/google_play_services_auth_java.info b/build/secondary/third_party/android_tools/google_play_services_auth_java.info deleted file mode 100644 index acf40e8..0000000 --- a/build/secondary/third_party/android_tools/google_play_services_auth_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = true -has_r_text_file = false -is_manifest_empty = false -resources = [ ] -subjar_tuples = [ ] -subjars = [ ]
diff --git a/build/secondary/third_party/android_tools/google_play_services_base_java.info b/build/secondary/third_party/android_tools/google_play_services_base_java.info deleted file mode 100644 index 0a0aeb4..0000000 --- a/build/secondary/third_party/android_tools/google_play_services_base_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = true -has_r_text_file = false -is_manifest_empty = false -resources = [ "res/color/common_google_signin_btn_text_dark.xml", "res/color/common_google_signin_btn_text_light.xml", "res/color/common_google_signin_btn_tint.xml", "res/drawable-hdpi-v4/common_full_open_on_phone.png", "res/drawable-hdpi-v4/common_google_signin_btn_icon_dark_normal_background.9.png", "res/drawable-hdpi-v4/common_google_signin_btn_icon_light_normal_background.9.png", "res/drawable-hdpi-v4/common_google_signin_btn_text_dark_normal_background.9.png", "res/drawable-hdpi-v4/common_google_signin_btn_text_light_normal_background.9.png", "res/drawable-hdpi-v4/googleg_disabled_color_18.png", "res/drawable-hdpi-v4/googleg_standard_color_18.png", "res/drawable-mdpi-v4/common_google_signin_btn_icon_dark_normal_background.9.png", "res/drawable-mdpi-v4/common_google_signin_btn_icon_light_normal_background.9.png", "res/drawable-mdpi-v4/common_google_signin_btn_text_dark_normal_background.9.png", "res/drawable-mdpi-v4/common_google_signin_btn_text_light_normal_background.9.png", "res/drawable-mdpi-v4/googleg_disabled_color_18.png", "res/drawable-mdpi-v4/googleg_standard_color_18.png", "res/drawable-xhdpi-v4/common_full_open_on_phone.png", "res/drawable-xhdpi-v4/common_google_signin_btn_icon_dark_normal_background.9.png", "res/drawable-xhdpi-v4/common_google_signin_btn_icon_light_normal_background.9.png", "res/drawable-xhdpi-v4/common_google_signin_btn_text_dark_normal_background.9.png", "res/drawable-xhdpi-v4/common_google_signin_btn_text_light_normal_background.9.png", "res/drawable-xhdpi-v4/googleg_disabled_color_18.png", "res/drawable-xhdpi-v4/googleg_standard_color_18.png", "res/drawable-xxhdpi-v4/common_google_signin_btn_icon_dark_normal_background.9.png", "res/drawable-xxhdpi-v4/common_google_signin_btn_icon_light_normal_background.9.png", "res/drawable-xxhdpi-v4/common_google_signin_btn_text_dark_normal_background.9.png", "res/drawable-xxhdpi-v4/common_google_signin_btn_text_light_normal_background.9.png", "res/drawable-xxhdpi-v4/googleg_disabled_color_18.png", "res/drawable-xxhdpi-v4/googleg_standard_color_18.png", "res/drawable/common_google_signin_btn_icon_dark.xml", "res/drawable/common_google_signin_btn_icon_dark_focused.xml", "res/drawable/common_google_signin_btn_icon_dark_normal.xml", "res/drawable/common_google_signin_btn_icon_disabled.xml", "res/drawable/common_google_signin_btn_icon_light.xml", "res/drawable/common_google_signin_btn_icon_light_focused.xml", "res/drawable/common_google_signin_btn_icon_light_normal.xml", "res/drawable/common_google_signin_btn_text_dark.xml", "res/drawable/common_google_signin_btn_text_dark_focused.xml", "res/drawable/common_google_signin_btn_text_dark_normal.xml", "res/drawable/common_google_signin_btn_text_disabled.xml", "res/drawable/common_google_signin_btn_text_light.xml", "res/drawable/common_google_signin_btn_text_light_focused.xml", "res/drawable/common_google_signin_btn_text_light_normal.xml", "res/values-af/values.xml", "res/values-am/values.xml", "res/values-ar/values.xml", "res/values-az/values.xml", "res/values-be/values.xml", "res/values-bg/values.xml", "res/values-bn/values.xml", "res/values-bs/values.xml", "res/values-ca/values.xml", "res/values-cs/values.xml", "res/values-da/values.xml", "res/values-de/values.xml", "res/values-el/values.xml", "res/values-en-rGB/values.xml", "res/values-es-rUS/values.xml", "res/values-es/values.xml", "res/values-et/values.xml", "res/values-eu/values.xml", "res/values-fa/values.xml", "res/values-fi/values.xml", "res/values-fr-rCA/values.xml", "res/values-fr/values.xml", "res/values-gl/values.xml", "res/values-gu/values.xml", "res/values-hi/values.xml", "res/values-hr/values.xml", "res/values-hu/values.xml", "res/values-hy/values.xml", "res/values-in/values.xml", "res/values-is/values.xml", "res/values-it/values.xml", "res/values-iw/values.xml", "res/values-ja/values.xml", "res/values-ka/values.xml", "res/values-kk/values.xml", "res/values-km/values.xml", "res/values-kn/values.xml", "res/values-ko/values.xml", "res/values-ky/values.xml", "res/values-lo/values.xml", "res/values-lt/values.xml", "res/values-lv/values.xml", "res/values-mk/values.xml", "res/values-ml/values.xml", "res/values-mn/values.xml", "res/values-mr/values.xml", "res/values-ms/values.xml", "res/values-my/values.xml", "res/values-nb/values.xml", "res/values-ne/values.xml", "res/values-nl/values.xml", "res/values-pa/values.xml", "res/values-pl/values.xml", "res/values-pt-rBR/values.xml", "res/values-pt-rPT/values.xml", "res/values-ro/values.xml", "res/values-ru/values.xml", "res/values-si/values.xml", "res/values-sk/values.xml", "res/values-sl/values.xml", "res/values-sq/values.xml", "res/values-sr/values.xml", "res/values-sv/values.xml", "res/values-sw/values.xml", "res/values-ta/values.xml", "res/values-te/values.xml", "res/values-th/values.xml", "res/values-tl/values.xml", "res/values-tr/values.xml", "res/values-uk/values.xml", "res/values-ur/values.xml", "res/values-uz/values.xml", "res/values-vi/values.xml", "res/values-zh-rCN/values.xml", "res/values-zh-rHK/values.xml", "res/values-zh-rTW/values.xml", "res/values-zu/values.xml", "res/values/values.xml" ] -subjar_tuples = [ ] -subjars = [ ]
diff --git a/build/secondary/third_party/android_tools/google_play_services_basement_java.info b/build/secondary/third_party/android_tools/google_play_services_basement_java.info deleted file mode 100644 index 19c75ad..0000000 --- a/build/secondary/third_party/android_tools/google_play_services_basement_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = true -has_r_text_file = true -is_manifest_empty = false -resources = [ "res/values-af/values.xml", "res/values-am/values.xml", "res/values-ar/values.xml", "res/values-az/values.xml", "res/values-be/values.xml", "res/values-bg/values.xml", "res/values-bn/values.xml", "res/values-bs/values.xml", "res/values-ca/values.xml", "res/values-cs/values.xml", "res/values-da/values.xml", "res/values-de/values.xml", "res/values-el/values.xml", "res/values-en-rGB/values.xml", "res/values-es-rUS/values.xml", "res/values-es/values.xml", "res/values-et/values.xml", "res/values-eu/values.xml", "res/values-fa/values.xml", "res/values-fi/values.xml", "res/values-fr-rCA/values.xml", "res/values-fr/values.xml", "res/values-gl/values.xml", "res/values-gu/values.xml", "res/values-hi/values.xml", "res/values-hr/values.xml", "res/values-hu/values.xml", "res/values-hy/values.xml", "res/values-in/values.xml", "res/values-is/values.xml", "res/values-it/values.xml", "res/values-iw/values.xml", "res/values-ja/values.xml", "res/values-ka/values.xml", "res/values-kk/values.xml", "res/values-km/values.xml", "res/values-kn/values.xml", "res/values-ko/values.xml", "res/values-ky/values.xml", "res/values-lo/values.xml", "res/values-lt/values.xml", "res/values-lv/values.xml", "res/values-mk/values.xml", "res/values-ml/values.xml", "res/values-mn/values.xml", "res/values-mr/values.xml", "res/values-ms/values.xml", "res/values-my/values.xml", "res/values-nb/values.xml", "res/values-ne/values.xml", "res/values-nl/values.xml", "res/values-pa/values.xml", "res/values-pl/values.xml", "res/values-pt-rBR/values.xml", "res/values-pt-rPT/values.xml", "res/values-ro/values.xml", "res/values-ru/values.xml", "res/values-si/values.xml", "res/values-sk/values.xml", "res/values-sl/values.xml", "res/values-sq/values.xml", "res/values-sr/values.xml", "res/values-sv/values.xml", "res/values-sw/values.xml", "res/values-ta/values.xml", "res/values-te/values.xml", "res/values-th/values.xml", "res/values-tl/values.xml", "res/values-tr/values.xml", "res/values-uk/values.xml", "res/values-ur/values.xml", "res/values-uz/values.xml", "res/values-vi/values.xml", "res/values-zh-rCN/values.xml", "res/values-zh-rHK/values.xml", "res/values-zh-rTW/values.xml", "res/values-zu/values.xml", "res/values/values.xml" ] -subjar_tuples = [ ] -subjars = [ ]
diff --git a/build/secondary/third_party/android_tools/google_play_services_cast_java.info b/build/secondary/third_party/android_tools/google_play_services_cast_java.info deleted file mode 100644 index 913e27b..0000000 --- a/build/secondary/third_party/android_tools/google_play_services_cast_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = true -has_r_text_file = false -is_manifest_empty = true -resources = [ "res/drawable-hdpi-v4/cast_ic_notification_0.png", "res/drawable-hdpi-v4/cast_ic_notification_1.png", "res/drawable-hdpi-v4/cast_ic_notification_2.png", "res/drawable-hdpi-v4/cast_ic_notification_on.png", "res/drawable-mdpi-v4/cast_ic_notification_0.png", "res/drawable-mdpi-v4/cast_ic_notification_1.png", "res/drawable-mdpi-v4/cast_ic_notification_2.png", "res/drawable-mdpi-v4/cast_ic_notification_on.png", "res/drawable-xhdpi-v4/cast_ic_notification_0.png", "res/drawable-xhdpi-v4/cast_ic_notification_1.png", "res/drawable-xhdpi-v4/cast_ic_notification_2.png", "res/drawable-xhdpi-v4/cast_ic_notification_on.png", "res/drawable-xxhdpi-v4/cast_ic_notification_0.png", "res/drawable-xxhdpi-v4/cast_ic_notification_1.png", "res/drawable-xxhdpi-v4/cast_ic_notification_2.png", "res/drawable-xxhdpi-v4/cast_ic_notification_on.png", "res/drawable/cast_ic_notification_connecting.xml", "res/values-af/values.xml", "res/values-am/values.xml", "res/values-ar/values.xml", "res/values-az/values.xml", "res/values-be/values.xml", "res/values-bg/values.xml", "res/values-bn/values.xml", "res/values-bs/values.xml", "res/values-ca/values.xml", "res/values-cs/values.xml", "res/values-da/values.xml", "res/values-de/values.xml", "res/values-el/values.xml", "res/values-en-rGB/values.xml", "res/values-es-rUS/values.xml", "res/values-es/values.xml", "res/values-et/values.xml", "res/values-eu/values.xml", "res/values-fa/values.xml", "res/values-fi/values.xml", "res/values-fr-rCA/values.xml", "res/values-fr/values.xml", "res/values-gl/values.xml", "res/values-gu/values.xml", "res/values-hi/values.xml", "res/values-hr/values.xml", "res/values-hu/values.xml", "res/values-hy/values.xml", "res/values-in/values.xml", "res/values-is/values.xml", "res/values-it/values.xml", "res/values-iw/values.xml", "res/values-ja/values.xml", "res/values-ka/values.xml", "res/values-kk/values.xml", "res/values-km/values.xml", "res/values-kn/values.xml", "res/values-ko/values.xml", "res/values-ky/values.xml", "res/values-lo/values.xml", "res/values-lt/values.xml", "res/values-lv/values.xml", "res/values-mk/values.xml", "res/values-ml/values.xml", "res/values-mn/values.xml", "res/values-mr/values.xml", "res/values-ms/values.xml", "res/values-my/values.xml", "res/values-nb/values.xml", "res/values-ne/values.xml", "res/values-nl/values.xml", "res/values-pa/values.xml", "res/values-pl/values.xml", "res/values-pt-rBR/values.xml", "res/values-pt-rPT/values.xml", "res/values-ro/values.xml", "res/values-ru/values.xml", "res/values-si/values.xml", "res/values-sk/values.xml", "res/values-sl/values.xml", "res/values-sq/values.xml", "res/values-sr/values.xml", "res/values-sv/values.xml", "res/values-sw/values.xml", "res/values-ta/values.xml", "res/values-te/values.xml", "res/values-th/values.xml", "res/values-tl/values.xml", "res/values-tr/values.xml", "res/values-uk/values.xml", "res/values-ur/values.xml", "res/values-uz/values.xml", "res/values-vi/values.xml", "res/values-zh-rCN/values.xml", "res/values-zh-rHK/values.xml", "res/values-zh-rTW/values.xml", "res/values-zu/values.xml", "res/values/values.xml" ] -subjar_tuples = [ ] -subjars = [ ]
diff --git a/build/secondary/third_party/android_tools/google_play_services_gcm_java.info b/build/secondary/third_party/android_tools/google_play_services_gcm_java.info deleted file mode 100644 index acf40e8..0000000 --- a/build/secondary/third_party/android_tools/google_play_services_gcm_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = true -has_r_text_file = false -is_manifest_empty = false -resources = [ ] -subjar_tuples = [ ] -subjars = [ ]
diff --git a/build/secondary/third_party/android_tools/google_play_services_iid_java.info b/build/secondary/third_party/android_tools/google_play_services_iid_java.info deleted file mode 100644 index acf40e8..0000000 --- a/build/secondary/third_party/android_tools/google_play_services_iid_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = true -has_r_text_file = false -is_manifest_empty = false -resources = [ ] -subjar_tuples = [ ] -subjars = [ ]
diff --git a/build/secondary/third_party/android_tools/google_play_services_location_java.info b/build/secondary/third_party/android_tools/google_play_services_location_java.info deleted file mode 100644 index 0dfcb237..0000000 --- a/build/secondary/third_party/android_tools/google_play_services_location_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = true -has_r_text_file = false -is_manifest_empty = true -resources = [ ] -subjar_tuples = [ ] -subjars = [ ]
diff --git a/build/secondary/third_party/android_tools/google_play_services_nearby_java.info b/build/secondary/third_party/android_tools/google_play_services_nearby_java.info deleted file mode 100644 index acf40e8..0000000 --- a/build/secondary/third_party/android_tools/google_play_services_nearby_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = true -has_r_text_file = false -is_manifest_empty = false -resources = [ ] -subjar_tuples = [ ] -subjars = [ ]
diff --git a/build/secondary/third_party/android_tools/google_play_services_tasks_java.info b/build/secondary/third_party/android_tools/google_play_services_tasks_java.info deleted file mode 100644 index 0dfcb237..0000000 --- a/build/secondary/third_party/android_tools/google_play_services_tasks_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = true -has_r_text_file = false -is_manifest_empty = true -resources = [ ] -subjar_tuples = [ ] -subjars = [ ]
diff --git a/build/secondary/third_party/android_tools/google_play_services_vision_java.info b/build/secondary/third_party/android_tools/google_play_services_vision_java.info deleted file mode 100644 index 0dfcb237..0000000 --- a/build/secondary/third_party/android_tools/google_play_services_vision_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = true -has_r_text_file = false -is_manifest_empty = true -resources = [ ] -subjar_tuples = [ ] -subjars = [ ]
diff --git a/build/util/lib/common/chrome_test_server_spawner.py b/build/util/lib/common/chrome_test_server_spawner.py index 8fac32b..d30a4a7 100644 --- a/build/util/lib/common/chrome_test_server_spawner.py +++ b/build/util/lib/common/chrome_test_server_spawner.py
@@ -157,11 +157,13 @@ return False logging.info('Got port json data: %s', port_json) port_json = json.loads(port_json) - if port_json.has_key('port') and isinstance(port_json['port'], int): - self.host_port = port_json['port'] - return self.port_forwarder.WaitPortNotAvailable(self.host_port) - logging.error('Failed to get port information from the server data.') - return False + + if not port_json.has_key('port') or not isinstance(port_json['port'], int): + logging.error('Failed to get port information from the server data.') + return False + + self.host_port = port_json['port'] + return self.port_forwarder.WaitPortNotAvailable(self.host_port) def _GenerateCommandLineArguments(self): """Generates the command line to run the test server. @@ -315,43 +317,54 @@ logging.info(content_length) test_server_argument_json = self.rfile.read(content_length) logging.info(test_server_argument_json) - # There should only be one test server instance at a time. However it may - # be possible that a previous instance was not cleaned up properly - # (crbug.com/665686) - if self.server.test_server_instance: - port = self.server.test_server_instance.host_port - logging.info('Killing lingering test server instance on port: %d', port) - self.server.test_server_instance.Stop() - self.server.test_server_instance = None + + if len(self.server.test_servers) >= self.server.max_instances: + self._SendResponse(400, 'Invalid request', {}, + 'Too many test servers running') + return + ready_event = threading.Event() - self.server.test_server_instance = TestServerThread( - ready_event, - json.loads(test_server_argument_json), - self.server.port_forwarder) - self.server.test_server_instance.setDaemon(True) - self.server.test_server_instance.start() + new_server = TestServerThread(ready_event, + json.loads(test_server_argument_json), + self.server.port_forwarder) + new_server.setDaemon(True) + new_server.start() ready_event.wait() - if self.server.test_server_instance.is_ready: + if new_server.is_ready: self._SendResponse(200, 'OK', {}, json.dumps( - {'port': self.server.test_server_instance.forwarder_device_port, + {'port': new_server.forwarder_device_port, 'message': 'started'})) - logging.info('Test server is running on port: %d.', - self.server.test_server_instance.host_port) + port = new_server.host_port + logging.info('Test server is running on port: %d.' % port) + assert not self.server.test_servers.has_key(port) + self.server.test_servers[port] = new_server else: - self.server.test_server_instance.Stop() - self.server.test_server_instance = None + new_server.Stop() self._SendResponse(500, 'Test Server Error.', {}, '') logging.info('Encounter problem during starting a test server.') - def _KillTestServer(self): + def _KillTestServer(self, params): """Stops the test server instance.""" # There should only ever be one test server at a time. This may do the # wrong thing if we try and start multiple test servers. - if not self.server.test_server_instance: + try: + port = int(params['port'][0]) + except ValueError, KeyError: + port = None + if port == None or port <= 0: + self._SendResponse(400, 'Invalid request.', {}, 'port must be specified') return - port = self.server.test_server_instance.host_port + + if not self.server.test_servers.has_key(port): + self._SendResponse(400, 'Invalid request.', {}, + "testserver isn't running on port %d" % port) + return + + server = self.server.test_servers.pop(port) + logging.info('Handling request to kill a test server on port: %d.', port) - self.server.test_server_instance.Stop() + server.Stop() + # Make sure the status of test server is correct before sending response. if self.server.port_forwarder.WaitHostPortAvailable(port): self._SendResponse(200, 'OK', {}, 'killed') @@ -359,7 +372,6 @@ else: self._SendResponse(500, 'Test Server Error.', {}, '') logging.info('Encounter problem during killing a test server.') - self.server.test_server_instance = None def do_POST(self): parsed_path = urlparse.urlparse(self.path) @@ -379,7 +391,7 @@ for param in params: logging.info('%s=%s', param, params[param][0]) if action == '/kill': - self._KillTestServer() + self._KillTestServer(params) elif action == '/ping': # The ping handler is used to check whether the spawner server is ready # to serve the requests. We don't need to test the status of the test @@ -394,17 +406,18 @@ class SpawningServer(object): """The class used to start/stop a http server.""" - def __init__(self, test_server_spawner_port, port_forwarder): + def __init__(self, test_server_spawner_port, port_forwarder, max_instances): self.server = BaseHTTPServer.HTTPServer(('', test_server_spawner_port), SpawningServerRequestHandler) self.server_port = self.server.server_port logging.info('Started test server spawner on port: %d.', self.server_port) self.server.port_forwarder = port_forwarder - self.server.test_server_instance = None + self.server.test_servers = {} + self.server.max_instances = max_instances def _Listen(self): - logging.info('Starting test server spawner') + logging.info('Starting test server spawner.') self.server.serve_forever() def Start(self): @@ -427,6 +440,9 @@ This should be called if the test server spawner is reused, to avoid sharing the test server instance. """ - if self.server.test_server_instance: - self.server.test_server_instance.Stop() - self.server.test_server_instance = None + if self.server.test_servers: + logging.warning('Not all test servers were stopped.') + for port in self.server.test_servers: + logging.warning('Stopping test server on port %d' % port) + self.server.test_servers[port].Stop() + self.server.test_servers = []
diff --git a/cc/paint/display_item_list.h b/cc/paint/display_item_list.h index 8e0420d..3f96dc4 100644 --- a/cc/paint/display_item_list.h +++ b/cc/paint/display_item_list.h
@@ -26,6 +26,12 @@ class SkCanvas; +namespace gpu { +namespace gles2 { +class GLES2Implementation; +} // namespace gles2 +} // namespace gpu + namespace base { namespace trace_event { class TracedValue; @@ -168,6 +174,7 @@ private: FRIEND_TEST_ALL_PREFIXES(DisplayItemListTest, AsValueWithNoOps); FRIEND_TEST_ALL_PREFIXES(DisplayItemListTest, AsValueWithOps); + friend gpu::gles2::GLES2Implementation; ~DisplayItemList();
diff --git a/cc/paint/paint_op_reader.cc b/cc/paint/paint_op_reader.cc index 1b1c681d..6bd74ba 100644 --- a/cc/paint/paint_op_reader.cc +++ b/cc/paint/paint_op_reader.cc
@@ -280,8 +280,19 @@ // We don't write the cached shader, so don't attempt to read it either. - if (!(*shader)->IsValid()) + // TODO(vmpstr): add serialization of these shader types. For the moment + // pretend that these shaders don't exist and that the serialization is + // successful. Valid ops pre-serialization should not cause deserialization + // failures. + if (shader_type == PaintShader::Type::kPaintRecord || + shader_type == PaintShader::Type::kImage) { + *shader = nullptr; + return; + } + + if (!(*shader)->IsValid()) { valid_ = false; + } } bool PaintOpReader::AlignMemory(size_t alignment) {
diff --git a/cc/raster/gpu_raster_buffer_provider.cc b/cc/raster/gpu_raster_buffer_provider.cc index 0baf3619..b239230 100644 --- a/cc/raster/gpu_raster_buffer_provider.cc +++ b/cc/raster/gpu_raster_buffer_provider.cc
@@ -13,7 +13,9 @@ #include "base/metrics/histogram_macros.h" #include "base/trace_event/trace_event.h" #include "cc/base/histograms.h" +#include "cc/paint/display_item_list.h" #include "cc/paint/paint_canvas.h" +#include "cc/paint/paint_recorder.h" #include "cc/raster/raster_source.h" #include "cc/raster/scoped_gpu_raster.h" #include "cc/resources/resource.h" @@ -23,16 +25,76 @@ #include "third_party/skia/include/core/SkPictureRecorder.h" #include "third_party/skia/include/core/SkSurface.h" #include "third_party/skia/include/gpu/GrContext.h" +#include "ui/gfx/geometry/axis_transform2d.h" namespace cc { namespace { +// Reuse canvas setup code from RasterSource by storing it into a PaintRecord +// that can then be transported. This is somewhat more convoluted then it +// should be. +static sk_sp<PaintRecord> SetupForRaster( + const RasterSource* raster_source, + const gfx::Rect& raster_full_rect, + const gfx::Rect& playback_rect, + const gfx::AxisTransform2d& transform) { + PaintRecorder recorder; + PaintCanvas* canvas = + recorder.beginRecording(gfx::RectToSkRect(raster_full_rect)); + // TODO(enne): The GLES2Decoder is guaranteeing the clear here, but it + // might be nice to figure out how to include the debugging clears for + // this mode. + canvas->translate(-raster_full_rect.x(), -raster_full_rect.y()); + canvas->clipRect(SkRect::MakeFromIRect(gfx::RectToSkIRect(playback_rect))); + canvas->translate(transform.translation().x(), transform.translation().y()); + canvas->scale(transform.scale(), transform.scale()); + return recorder.finishRecordingAsPicture(); +} + +static void RasterizeSourceOOP( + const RasterSource* raster_source, + bool resource_has_previous_content, + const gfx::Size& resource_size, + const gfx::Rect& raster_full_rect, + const gfx::Rect& playback_rect, + const gfx::AxisTransform2d& transform, + const RasterSource::PlaybackSettings& playback_settings, + viz::ContextProvider* context_provider, + ResourceProvider::ScopedWriteLockGL* resource_lock, + bool use_distance_field_text, + int msaa_sample_count) { + gpu::gles2::GLES2Interface* gl = context_provider->ContextGL(); + GLuint texture_id = resource_lock->ConsumeTexture(gl); + + auto setup_list = make_scoped_refptr( + new DisplayItemList(DisplayItemList::kTopLevelDisplayItemList)); + setup_list->StartPaint(); + setup_list->push<DrawRecordOp>(SetupForRaster(raster_source, raster_full_rect, + playback_rect, transform)); + setup_list->EndPaintOfUnpaired(raster_full_rect); + setup_list->Finalize(); + + // TODO(enne): need to pass color space and transform in the decoder. + gl->BeginRasterCHROMIUM(texture_id, raster_source->background_color(), + msaa_sample_count, playback_settings.use_lcd_text, + use_distance_field_text, + resource_lock->PixelConfig()); + gl->RasterCHROMIUM(setup_list.get(), playback_rect.x(), playback_rect.y(), + playback_rect.width(), playback_rect.height()); + gl->RasterCHROMIUM(raster_source->display_list(), playback_rect.x(), + playback_rect.y(), playback_rect.width(), + playback_rect.height()); + gl->EndRasterCHROMIUM(); + + gl->DeleteTextures(1, &texture_id); +} + static void RasterizeSource( const RasterSource* raster_source, bool resource_has_previous_content, const gfx::Size& resource_size, const gfx::Rect& raster_full_rect, - const gfx::Rect& raster_dirty_rect, + const gfx::Rect& playback_rect, const gfx::AxisTransform2d& transform, const RasterSource::PlaybackSettings& playback_settings, viz::ContextProvider* context_provider, @@ -59,28 +121,6 @@ return; } - // Playback - gfx::Rect playback_rect = raster_full_rect; - if (resource_has_previous_content) { - playback_rect.Intersect(raster_dirty_rect); - } - DCHECK(!playback_rect.IsEmpty()) - << "Why are we rastering a tile that's not dirty?"; - - // Log a histogram of the percentage of pixels that were saved due to - // partial raster. - const char* client_name = GetClientNameForMetrics(); - float full_rect_size = raster_full_rect.size().GetArea(); - if (full_rect_size > 0 && client_name) { - float fraction_partial_rastered = - static_cast<float>(playback_rect.size().GetArea()) / full_rect_size; - float fraction_saved = 1.0f - fraction_partial_rastered; - UMA_HISTOGRAM_PERCENTAGE( - base::StringPrintf("Renderer4.%s.PartialRasterPercentageSaved.Gpu", - client_name), - 100.0f * fraction_saved); - } - SkCanvas* canvas = surface->getCanvas(); // As an optimization, inform Skia to discard when not doing partial raster. @@ -134,14 +174,16 @@ bool use_distance_field_text, int gpu_rasterization_msaa_sample_count, viz::ResourceFormat preferred_tile_format, - bool async_worker_context_enabled) + bool async_worker_context_enabled, + bool enable_oop_rasterization) : compositor_context_provider_(compositor_context_provider), worker_context_provider_(worker_context_provider), resource_provider_(resource_provider), use_distance_field_text_(use_distance_field_text), msaa_sample_count_(gpu_rasterization_msaa_sample_count), preferred_tile_format_(preferred_tile_format), - async_worker_context_enabled_(async_worker_context_enabled) { + async_worker_context_enabled_(async_worker_context_enabled), + enable_oop_rasterization_(enable_oop_rasterization) { DCHECK(compositor_context_provider); DCHECK(worker_context_provider); } @@ -271,10 +313,40 @@ // Synchronize with compositor. Nop if sync token is empty. gl->WaitSyncTokenCHROMIUM(sync_token.GetConstData()); - RasterizeSource(raster_source, resource_has_previous_content, - resource_lock->size(), raster_full_rect, raster_dirty_rect, - transform, playback_settings, worker_context_provider_, - resource_lock, use_distance_field_text_, msaa_sample_count_); + gfx::Rect playback_rect = raster_full_rect; + if (resource_has_previous_content) { + playback_rect.Intersect(raster_dirty_rect); + } + DCHECK(!playback_rect.IsEmpty()) + << "Why are we rastering a tile that's not dirty?"; + + // Log a histogram of the percentage of pixels that were saved due to + // partial raster. + const char* client_name = GetClientNameForMetrics(); + float full_rect_size = raster_full_rect.size().GetArea(); + if (full_rect_size > 0 && client_name) { + float fraction_partial_rastered = + static_cast<float>(playback_rect.size().GetArea()) / full_rect_size; + float fraction_saved = 1.0f - fraction_partial_rastered; + UMA_HISTOGRAM_PERCENTAGE( + base::StringPrintf("Renderer4.%s.PartialRasterPercentageSaved.Gpu", + client_name), + 100.0f * fraction_saved); + } + + if (enable_oop_rasterization_) { + RasterizeSourceOOP(raster_source, resource_has_previous_content, + resource_lock->size(), raster_full_rect, playback_rect, + transform, playback_settings, worker_context_provider_, + resource_lock, use_distance_field_text_, + msaa_sample_count_); + } else { + RasterizeSource(raster_source, resource_has_previous_content, + resource_lock->size(), raster_full_rect, playback_rect, + transform, playback_settings, worker_context_provider_, + resource_lock, use_distance_field_text_, + msaa_sample_count_); + } // Generate sync token for cross context synchronization. resource_lock->set_sync_token(ResourceProvider::GenerateSyncTokenHelper(gl));
diff --git a/cc/raster/gpu_raster_buffer_provider.h b/cc/raster/gpu_raster_buffer_provider.h index aa275da..9f08fd6 100644 --- a/cc/raster/gpu_raster_buffer_provider.h +++ b/cc/raster/gpu_raster_buffer_provider.h
@@ -26,7 +26,8 @@ bool use_distance_field_text, int gpu_rasterization_msaa_sample_count, viz::ResourceFormat preferred_tile_format, - bool async_worker_context_enabled); + bool async_worker_context_enabled, + bool enable_oop_rasterization); ~GpuRasterBufferProvider() override; // Overridden from RasterBufferProvider: @@ -97,6 +98,7 @@ const int msaa_sample_count_; const viz::ResourceFormat preferred_tile_format_; const bool async_worker_context_enabled_; + const bool enable_oop_rasterization_; std::set<RasterBufferImpl*> pending_raster_buffers_;
diff --git a/cc/raster/raster_buffer_provider_perftest.cc b/cc/raster/raster_buffer_provider_perftest.cc index 0f036e3..2e1d247 100644 --- a/cc/raster/raster_buffer_provider_perftest.cc +++ b/cc/raster/raster_buffer_provider_perftest.cc
@@ -342,7 +342,7 @@ raster_buffer_provider_ = std::make_unique<GpuRasterBufferProvider>( compositor_context_provider_.get(), worker_context_provider_.get(), resource_provider_.get(), false, 0, - viz::PlatformColor::BestTextureFormat(), false); + viz::PlatformColor::BestTextureFormat(), false, false); break; case RASTER_BUFFER_PROVIDER_TYPE_BITMAP: CreateSoftwareResourceProvider();
diff --git a/cc/raster/raster_buffer_provider_unittest.cc b/cc/raster/raster_buffer_provider_unittest.cc index 2890ec3..194a1a8 100644 --- a/cc/raster/raster_buffer_provider_unittest.cc +++ b/cc/raster/raster_buffer_provider_unittest.cc
@@ -182,14 +182,14 @@ raster_buffer_provider_ = std::make_unique<GpuRasterBufferProvider>( context_provider_.get(), worker_context_provider_.get(), resource_provider_.get(), false, 0, - viz::PlatformColor::BestTextureFormat(), false); + viz::PlatformColor::BestTextureFormat(), false, false); break; case RASTER_BUFFER_PROVIDER_TYPE_ASYNC_GPU: Create3dResourceProvider(); raster_buffer_provider_ = std::make_unique<GpuRasterBufferProvider>( context_provider_.get(), worker_context_provider_.get(), resource_provider_.get(), false, 0, - viz::PlatformColor::BestTextureFormat(), true); + viz::PlatformColor::BestTextureFormat(), true, false); break; case RASTER_BUFFER_PROVIDER_TYPE_BITMAP: CreateSoftwareResourceProvider();
diff --git a/cc/raster/raster_source.h b/cc/raster/raster_source.h index ee6861bd..8ee4920 100644 --- a/cc/raster/raster_source.h +++ b/cc/raster/raster_source.h
@@ -113,6 +113,10 @@ virtual sk_sp<SkPicture> GetFlattenedPicture(); virtual size_t GetMemoryUsage() const; + const DisplayItemList* display_list() const { return display_list_.get(); } + + SkColor background_color() const { return background_color_; } + protected: // RecordingSource is the only class that can create a raster source. friend class RecordingSource;
diff --git a/cc/resources/display_resource_provider.cc b/cc/resources/display_resource_provider.cc index d023571..a6af4d4 100644 --- a/cc/resources/display_resource_provider.cc +++ b/cc/resources/display_resource_provider.cc
@@ -135,7 +135,8 @@ if ((!it->is_software && !gl) || (it->is_software && !shared_bitmap_manager_)) { - TRACE_EVENT0("cc", "ResourceProvider::ReceiveFromChild dropping invalid"); + TRACE_EVENT0( + "cc", "DisplayResourceProvider::ReceiveFromChild dropping invalid"); std::vector<viz::ReturnedResource> to_return; to_return.push_back(it->ToReturnedResource()); child_info.return_callback.Run(to_return, @@ -208,6 +209,25 @@ return it->second.child_to_parent_map; } +DisplayResourceProvider::ScopedSamplerGL::ScopedSamplerGL( + DisplayResourceProvider* resource_provider, + viz::ResourceId resource_id, + GLenum filter) + : resource_lock_(resource_provider, resource_id), + unit_(GL_TEXTURE0), + target_(resource_provider->BindForSampling(resource_id, unit_, filter)) {} + +DisplayResourceProvider::ScopedSamplerGL::ScopedSamplerGL( + DisplayResourceProvider* resource_provider, + viz::ResourceId resource_id, + GLenum unit, + GLenum filter) + : resource_lock_(resource_provider, resource_id), + unit_(unit), + target_(resource_provider->BindForSampling(resource_id, unit_, filter)) {} + +DisplayResourceProvider::ScopedSamplerGL::~ScopedSamplerGL() {} + DisplayResourceProvider::ScopedReadLockSkImage::ScopedReadLockSkImage( DisplayResourceProvider* resource_provider, viz::ResourceId resource_id)
diff --git a/cc/resources/display_resource_provider.h b/cc/resources/display_resource_provider.h index 227d86f3..549d006 100644 --- a/cc/resources/display_resource_provider.h +++ b/cc/resources/display_resource_provider.h
@@ -39,6 +39,31 @@ const OverlayCandidateList::PromotionHintInfoMap& promotion_hints); #endif + class CC_EXPORT ScopedSamplerGL { + public: + ScopedSamplerGL(DisplayResourceProvider* resource_provider, + viz::ResourceId resource_id, + GLenum filter); + ScopedSamplerGL(DisplayResourceProvider* resource_provider, + viz::ResourceId resource_id, + GLenum unit, + GLenum filter); + ~ScopedSamplerGL(); + + GLuint texture_id() const { return resource_lock_.texture_id(); } + GLenum target() const { return target_; } + const gfx::ColorSpace& color_space() const { + return resource_lock_.color_space(); + } + + private: + const ScopedReadLockGL resource_lock_; + const GLenum unit_; + const GLenum target_; + + DISALLOW_COPY_AND_ASSIGN(ScopedSamplerGL); + }; + class CC_EXPORT ScopedReadLockSkImage { public: ScopedReadLockSkImage(DisplayResourceProvider* resource_provider,
diff --git a/cc/resources/layer_tree_resource_provider.cc b/cc/resources/layer_tree_resource_provider.cc index 67383d2f..c37f56a 100644 --- a/cc/resources/layer_tree_resource_provider.cc +++ b/cc/resources/layer_tree_resource_provider.cc
@@ -126,8 +126,6 @@ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); GLES2Interface* gl = ContextGL(); - std::unordered_map<int, ResourceIdArray> resources_for_child; - for (const viz::ReturnedResource& returned : resources) { viz::ResourceId local_id = returned.id; ResourceMap::iterator map_iterator = resources_.find(local_id); @@ -159,21 +157,9 @@ if (!resource->marked_for_deletion) continue; - if (!resource->child_id) { - // The resource belongs to this LayerTreeResourceProvider, so it can be - // destroyed. - DeleteResourceInternal(map_iterator, NORMAL); - continue; - } - - DCHECK(resource->origin == Resource::DELEGATED); - resources_for_child[resource->child_id].push_back(local_id); - } - - for (const auto& children : resources_for_child) { - ChildMap::iterator child_it = children_.find(children.first); - DCHECK(child_it != children_.end()); - DeleteAndReturnUnusedResourcesToChild(child_it, NORMAL, children.second); + // The resource belongs to this LayerTreeResourceProvider, so it can be + // destroyed. + DeleteResourceInternal(map_iterator, NORMAL); } }
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc index 7719a37..c1ca287 100644 --- a/cc/resources/resource_provider.cc +++ b/cc/resources/resource_provider.cc
@@ -1030,25 +1030,6 @@ resource_provider_->UnlockForRead(resource_id_); } -ResourceProvider::ScopedSamplerGL::ScopedSamplerGL( - ResourceProvider* resource_provider, - viz::ResourceId resource_id, - GLenum filter) - : resource_lock_(resource_provider, resource_id), - unit_(GL_TEXTURE0), - target_(resource_provider->BindForSampling(resource_id, unit_, filter)) {} - -ResourceProvider::ScopedSamplerGL::ScopedSamplerGL( - ResourceProvider* resource_provider, - viz::ResourceId resource_id, - GLenum unit, - GLenum filter) - : resource_lock_(resource_provider, resource_id), - unit_(unit), - target_(resource_provider->BindForSampling(resource_id, unit_, filter)) {} - -ResourceProvider::ScopedSamplerGL::~ScopedSamplerGL() {} - ResourceProvider::ScopedWriteLockGL::ScopedWriteLockGL( ResourceProvider* resource_provider, viz::ResourceId resource_id) @@ -1070,6 +1051,10 @@ allocated_ = resource->allocated; } +GrPixelConfig ResourceProvider::ScopedWriteLockGL::PixelConfig() const { + return ToGrPixelConfig(format()); +} + ResourceProvider::ScopedWriteLockGL::~ScopedWriteLockGL() { Resource* resource = resource_provider_->GetResource(resource_id_); DCHECK(resource->locked_for_write);
diff --git a/cc/resources/resource_provider.h b/cc/resources/resource_provider.h index a1ef96b..1f9ce94b 100644 --- a/cc/resources/resource_provider.h +++ b/cc/resources/resource_provider.h
@@ -210,31 +210,6 @@ DISALLOW_COPY_AND_ASSIGN(ScopedReadLockGL); }; - class CC_EXPORT ScopedSamplerGL { - public: - ScopedSamplerGL(ResourceProvider* resource_provider, - viz::ResourceId resource_id, - GLenum filter); - ScopedSamplerGL(ResourceProvider* resource_provider, - viz::ResourceId resource_id, - GLenum unit, - GLenum filter); - ~ScopedSamplerGL(); - - GLuint texture_id() const { return resource_lock_.texture_id(); } - GLenum target() const { return target_; } - const gfx::ColorSpace& color_space() const { - return resource_lock_.color_space(); - } - - private: - const ScopedReadLockGL resource_lock_; - const GLenum unit_; - const GLenum target_; - - DISALLOW_COPY_AND_ASSIGN(ScopedSamplerGL); - }; - class CC_EXPORT ScopedWriteLockGL { public: ScopedWriteLockGL(ResourceProvider* resource_provider, @@ -256,6 +231,8 @@ has_sync_token_ = true; } + GrPixelConfig PixelConfig() const; + void set_synchronized() { synchronized_ = true; } // Returns texture id on compositor context, allocating if necessary. @@ -613,6 +590,13 @@ void CreateAndBindImage(Resource* resource); + // Binds the given GL resource to a texture target for sampling using the + // specified filter for both minification and magnification. Returns the + // texture target used. The resource must be locked for reading. + GLenum BindForSampling(viz::ResourceId resource_id, + GLenum unit, + GLenum filter); + // Will return the invalid color space unless // |enable_color_correct_rasterization| is true. gfx::ColorSpace GetResourceColorSpaceForRaster( @@ -694,13 +678,6 @@ void CreateTexture(Resource* resource); - // Binds the given GL resource to a texture target for sampling using the - // specified filter for both minification and magnification. Returns the - // texture target used. The resource must be locked for reading. - GLenum BindForSampling(viz::ResourceId resource_id, - GLenum unit, - GLenum filter); - bool IsGLContextLost() const; bool lost_context_provider_;
diff --git a/cc/resources/resource_provider_unittest.cc b/cc/resources/resource_provider_unittest.cc index 097cc07..87f86a7 100644 --- a/cc/resources/resource_provider_unittest.cc +++ b/cc/resources/resource_provider_unittest.cc
@@ -492,11 +492,11 @@ return base::Bind(&ResourceProviderTest::CollectResources, array); } - static void SetResourceFilter(ResourceProvider* resource_provider, + static void SetResourceFilter(DisplayResourceProvider* resource_provider, viz::ResourceId id, GLenum filter) { - ResourceProvider::ScopedSamplerGL sampler( - resource_provider, id, GL_TEXTURE_2D, filter); + DisplayResourceProvider::ScopedSamplerGL sampler(resource_provider, id, + GL_TEXTURE_2D, filter); } ResourceProviderContext* context() { return context3d_; } @@ -1956,19 +1956,6 @@ child_resource_provider->CopyToResource(id, data, size); Mock::VerifyAndClearExpectations(child_context); - // The texture is set to |child_filter| in the child. - EXPECT_CALL(*child_context, bindTexture(GL_TEXTURE_2D, child_texture_id)); - if (child_filter != GL_LINEAR) { - EXPECT_CALL( - *child_context, - texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, child_filter)); - EXPECT_CALL( - *child_context, - texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, child_filter)); - } - SetResourceFilter(child_resource_provider.get(), id, child_filter); - Mock::VerifyAndClearExpectations(child_context); - std::vector<viz::ReturnedResource> returned_to_child; int child_id = parent_resource_provider->CreateChild( GetReturnCallback(&returned_to_child)); @@ -2025,12 +2012,10 @@ // The texture should be reset to |child_filter| in the parent when it is // returned, since that is how it was received. EXPECT_CALL(*parent_context, bindTexture(GL_TEXTURE_2D, parent_texture_id)); - EXPECT_CALL( - *parent_context, - texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, child_filter)); - EXPECT_CALL( - *parent_context, - texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, child_filter)); + EXPECT_CALL(*parent_context, + texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)); + EXPECT_CALL(*parent_context, + texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)); { EXPECT_EQ(0u, returned_to_child.size()); @@ -2045,20 +2030,9 @@ ASSERT_EQ(1u, returned_to_child.size()); child_resource_provider->ReceiveReturnsFromParent(returned_to_child); } - - // The child remembers the texture filter is set to |child_filter|. - EXPECT_CALL(*child_context, bindTexture(GL_TEXTURE_2D, child_texture_id)); - SetResourceFilter(child_resource_provider.get(), id, child_filter); - Mock::VerifyAndClearExpectations(child_context); } }; -TEST_P(ResourceProviderTest, TextureFilters_ChildNearestParentLinear) { - if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) - return; - ResourceProviderTestTextureFilters::RunTest(GL_NEAREST, GL_LINEAR); -} - TEST_P(ResourceProviderTest, TextureFilters_ChildLinearParentNearest) { if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE) return; @@ -2405,8 +2379,8 @@ auto context_provider = TestContextProvider::Create(std::move(context_owned)); context_provider->BindToCurrentThread(); - std::unique_ptr<ResourceProvider> resource_provider( - std::make_unique<ResourceProvider>( + std::unique_ptr<DisplayResourceProvider> resource_provider( + std::make_unique<DisplayResourceProvider>( context_provider.get(), shared_bitmap_manager_.get(), gpu_memory_buffer_manager_.get(), nullptr, kDelegatedSyncPointsRequired, kEnableColorCorrectRendering, @@ -2441,7 +2415,7 @@ // parameters. { EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)); - ResourceProvider::ScopedSamplerGL sampler( + DisplayResourceProvider::ScopedSamplerGL sampler( resource_provider.get(), id, GL_TEXTURE_2D, GL_LINEAR); Mock::VerifyAndClearExpectations(context); } @@ -2455,7 +2429,7 @@ EXPECT_CALL( *context, texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)); - ResourceProvider::ScopedSamplerGL sampler( + DisplayResourceProvider::ScopedSamplerGL sampler( resource_provider.get(), id, GL_TEXTURE_2D, GL_NEAREST); Mock::VerifyAndClearExpectations(context); } @@ -2467,7 +2441,7 @@ texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)); EXPECT_CALL(*context, texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)); - ResourceProvider::ScopedSamplerGL sampler( + DisplayResourceProvider::ScopedSamplerGL sampler( resource_provider.get(), id, GL_TEXTURE_2D, GL_LINEAR); Mock::VerifyAndClearExpectations(context); } @@ -2676,8 +2650,8 @@ TestContextProvider::Create(std::move(context_owned)); context_provider->BindToCurrentThread(); - std::unique_ptr<ResourceProvider> resource_provider( - std::make_unique<ResourceProvider>( + std::unique_ptr<DisplayResourceProvider> resource_provider( + std::make_unique<DisplayResourceProvider>( context_provider.get(), shared_bitmap_manager, gpu_memory_buffer_manager, main_thread_task_runner, kDelegatedSyncPointsRequired, kEnableColorCorrectRendering, @@ -2736,8 +2710,8 @@ GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, sampler_filter)); } - ResourceProvider::ScopedSamplerGL lock( - resource_provider.get(), id, sampler_filter); + DisplayResourceProvider::ScopedSamplerGL lock(resource_provider.get(), id, + sampler_filter); Mock::VerifyAndClearExpectations(context); EXPECT_EQ(current_fence_sync, context->GetNextFenceSync()); @@ -3305,14 +3279,6 @@ Mock::VerifyAndClearExpectations(context); { - EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kTextureId)); - ResourceProvider::ScopedSamplerGL lock_gl(resource_provider.get(), id, - GL_TEXTURE_2D, GL_LINEAR); - EXPECT_EQ(kTextureId, lock_gl.texture_id()); - Mock::VerifyAndClearExpectations(context); - } - - { LayerTreeResourceProvider::ScopedWriteLockGpuMemoryBuffer lock( resource_provider.get(), id); EXPECT_TRUE(lock.GetGpuMemoryBuffer()); @@ -3324,14 +3290,6 @@ // The image is updated in the lock's destructor. Mock::VerifyAndClearExpectations(context); - { - EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kTextureId)); - ResourceProvider::ScopedSamplerGL lock_gl(resource_provider.get(), id, - GL_TEXTURE_2D, GL_LINEAR); - EXPECT_EQ(kTextureId, lock_gl.texture_id()); - Mock::VerifyAndClearExpectations(context); - } - EXPECT_CALL(*context, destroyImageCHROMIUM(kImageId)); EXPECT_CALL(*context, RetireTextureId(kTextureId)); }
diff --git a/cc/test/layer_tree_pixel_resource_test.cc b/cc/test/layer_tree_pixel_resource_test.cc index f42b857..930c874 100644 --- a/cc/test/layer_tree_pixel_resource_test.cc +++ b/cc/test/layer_tree_pixel_resource_test.cc
@@ -157,7 +157,7 @@ *raster_buffer_provider = std::make_unique<GpuRasterBufferProvider>( compositor_context_provider, worker_context_provider, resource_provider, false, 0, viz::PlatformColor::BestTextureFormat(), - false); + false, false); break; case RASTER_BUFFER_PROVIDER_TYPE_ZERO_COPY: EXPECT_TRUE(compositor_context_provider);
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc index 931b123..9cb0d9f 100644 --- a/cc/trees/layer_tree_host_impl.cc +++ b/cc/trees/layer_tree_host_impl.cc
@@ -2393,7 +2393,8 @@ compositor_context_provider, worker_context_provider, resource_provider_.get(), settings_.use_distance_field_text, msaa_sample_count, settings_.preferred_tile_format, - settings_.async_worker_context_enabled); + settings_.async_worker_context_enabled, + settings_.enable_oop_rasterization); return; }
diff --git a/cc/trees/layer_tree_host_impl.h b/cc/trees/layer_tree_host_impl.h index 8f1ff24..232844fd 100644 --- a/cc/trees/layer_tree_host_impl.h +++ b/cc/trees/layer_tree_host_impl.h
@@ -772,7 +772,7 @@ std::unique_ptr<LayerTreeImpl> active_tree_; // In impl-side painting mode, tree with possibly incomplete rasterized - // content. May be promoted to active by ActivatePendingTree(). + // content. May be promoted to active by ActivateSyncTree(). std::unique_ptr<LayerTreeImpl> pending_tree_; // In impl-side painting mode, inert tree with layers that can be recycled
diff --git a/cc/trees/layer_tree_settings.h b/cc/trees/layer_tree_settings.h index 3c394d0..0749320 100644 --- a/cc/trees/layer_tree_settings.h +++ b/cc/trees/layer_tree_settings.h
@@ -143,6 +143,10 @@ // which LayerTreeHost synchronizes. If |true| LayerTreeHostImpl // produces the active tree as its 'sync tree'. bool commit_to_active_tree = true; + + // Whether to use out of process raster. If true, whenever gpu raster + // would have been used, out of process gpu raster will be used instead. + bool enable_oop_rasterization = false; }; } // namespace cc
diff --git a/chrome/VERSION b/chrome/VERSION index c7b5b71b..0787be6 100644 --- a/chrome/VERSION +++ b/chrome/VERSION
@@ -1,4 +1,4 @@ MAJOR=62 MINOR=0 -BUILD=3199 +BUILD=3200 PATCH=0
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index 802a7fa..15a1842 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -533,6 +533,7 @@ "//third_party/junit", "//third_party/ub-uiautomator:ub_uiautomator_java", "//ui/android:ui_java", + "//ui/android:ui_java_test_support", "//ui/base/mojo:mojo_bindings_java", "//url/mojo:url_mojom_gurl_java", ]
diff --git a/chrome/android/java/res/drawable-hdpi/infobar_accessibility_events.png b/chrome/android/java/res/drawable-hdpi/infobar_accessibility_events.png deleted file mode 100644 index c2b5960..0000000 --- a/chrome/android/java/res/drawable-hdpi/infobar_accessibility_events.png +++ /dev/null Binary files differ
diff --git a/chrome/android/java/res/drawable-mdpi/infobar_accessibility_events.png b/chrome/android/java/res/drawable-mdpi/infobar_accessibility_events.png deleted file mode 100644 index 57c4167..0000000 --- a/chrome/android/java/res/drawable-mdpi/infobar_accessibility_events.png +++ /dev/null Binary files differ
diff --git a/chrome/android/java/res/drawable-xhdpi/infobar_accessibility_events.png b/chrome/android/java/res/drawable-xhdpi/infobar_accessibility_events.png deleted file mode 100644 index 53a12a1..0000000 --- a/chrome/android/java/res/drawable-xhdpi/infobar_accessibility_events.png +++ /dev/null Binary files differ
diff --git a/chrome/android/java/res/drawable-xxhdpi/infobar_accessibility_events.png b/chrome/android/java/res/drawable-xxhdpi/infobar_accessibility_events.png deleted file mode 100644 index 5a63b68..0000000 --- a/chrome/android/java/res/drawable-xxhdpi/infobar_accessibility_events.png +++ /dev/null Binary files differ
diff --git a/chrome/android/java/res/drawable-xxxhdpi/infobar_accessibility_events.png b/chrome/android/java/res/drawable-xxxhdpi/infobar_accessibility_events.png deleted file mode 100644 index 8cebecf..0000000 --- a/chrome/android/java/res/drawable-xxxhdpi/infobar_accessibility_events.png +++ /dev/null Binary files differ
diff --git a/chrome/android/java/res/drawable/selectable_item_highlight.xml b/chrome/android/java/res/drawable/selectable_item_highlight.xml deleted file mode 100644 index 60b8cde0..0000000 --- a/chrome/android/java/res/drawable/selectable_item_highlight.xml +++ /dev/null
@@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-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. --> - -<selector xmlns:android="http://schemas.android.com/apk/res/android"> - <item android:state_checked="true" - android:drawable="@color/selectable_list_item_highlight_color" /> -</selector>
diff --git a/chrome/android/java/res/layout/add_to_homescreen_dialog.xml b/chrome/android/java/res/layout/add_to_homescreen_dialog.xml index 2fa3da38..fc2b112 100644 --- a/chrome/android/java/res/layout/add_to_homescreen_dialog.xml +++ b/chrome/android/java/res/layout/add_to_homescreen_dialog.xml
@@ -31,21 +31,23 @@ <LinearLayout android:id="@+id/read_only_text" android:orientation="vertical" - android:layout_width="fill_parent" + android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="48dp" android:layout_marginTop="5dp" + android:layout_marginBottom="5dp" android:paddingTop="0dp" android:visibility="gone" > <TextView android:id="@+id/name" - android:layout_width="fill_parent" + android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="@style/BlackTitle1" /> <TextView android:id="@+id/origin" - android:layout_width="fill_parent" + android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingBottom="2dp" android:textAppearance="@style/BlackBody" /> </LinearLayout> </FrameLayout>
diff --git a/chrome/android/java/res/layout/fullscreen_control_container.xml b/chrome/android/java/res/layout/fullscreen_control_container.xml new file mode 100644 index 0000000..c998e27 --- /dev/null +++ b/chrome/android/java/res/layout/fullscreen_control_container.xml
@@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2017 The Chromium Authors. All rights reserved. + Use of this source code is governed by a BSD-style license that can be + found in the LICENSE file. --> + +<org.chromium.chrome.browser.widget.FullscreenControlContainer xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/control_container" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:visibility="invisible" > +</org.chromium.chrome.browser.widget.FullscreenControlContainer>
diff --git a/chrome/android/java/res/layout/selectable_item_highlight_view.xml b/chrome/android/java/res/layout/selectable_item_highlight_view.xml deleted file mode 100644 index 2295c4a3..0000000 --- a/chrome/android/java/res/layout/selectable_item_highlight_view.xml +++ /dev/null
@@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="utf-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. --> - -<org.chromium.chrome.browser.widget.selection.SelectableItemHighlightView - xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/highlight" - android:layout_width="match_parent" - android:layout_height="match_parent" />
diff --git a/chrome/android/java/res/layout/webapp_control_container.xml b/chrome/android/java/res/layout/webapp_control_container.xml deleted file mode 100644 index 2603379..0000000 --- a/chrome/android/java/res/layout/webapp_control_container.xml +++ /dev/null
@@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- 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. --> - -<org.chromium.chrome.browser.webapps.WebappControlContainer xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/control_container" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:visibility="invisible" > - <org.chromium.chrome.browser.webapps.WebappUrlBar - android:id="@+id/webapp_url_bar" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:minHeight="@dimen/webapp_control_container_height" - android:gravity="center" /> -</org.chromium.chrome.browser.webapps.WebappControlContainer>
diff --git a/chrome/android/java/res/values/colors.xml b/chrome/android/java/res/values/colors.xml index afad84d..cb2f5b85 100644 --- a/chrome/android/java/res/values/colors.xml +++ b/chrome/android/java/res/values/colors.xml
@@ -180,8 +180,6 @@ <!-- WebappActivity colors --> <color name="webapp_default_bg">#fafafa</color> <color name="webapp_splash_title_light">#ffffff</color> - <color name="webapp_url_bar_bg">#fafafa</color> - <color name="webapp_url_bar_separator">#e1e1e1</color> <!-- Bookmark UI colors --> <color name="bookmark_detail_section">#7C7B79</color> @@ -212,7 +210,6 @@ <color name="translate_overflow_menu_divider_color">#e0e0e0</color> <!-- Other colors --> - <color name="selectable_list_item_highlight_color">#804281f4</color> <color name="media_viewer_bg">#000000</color> <color name="image_viewer_bg">#0e0e0e</color> <color name="modern_toolbar_bg">#E6FFFFFF</color>
diff --git a/chrome/android/java/res/values/dimens.xml b/chrome/android/java/res/values/dimens.xml index a82fcd16..4567b87 100644 --- a/chrome/android/java/res/values/dimens.xml +++ b/chrome/android/java/res/values/dimens.xml
@@ -198,7 +198,6 @@ <dimen name="control_container_height">56dp</dimen> <dimen name="bottom_control_container_height">56dp</dimen> <dimen name="custom_tabs_control_container_height">56dp</dimen> - <dimen name="webapp_control_container_height">22dp</dimen> <!-- The combined height of the tab strip and toolbar. --> <dimen name="tab_strip_and_toolbar_height">56dp</dimen>
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java index b87d72e7..b6a5875 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
@@ -193,6 +193,7 @@ "SearchEnginePromo.ExistingDevice"; public static final String SEARCH_ENGINE_PROMO_NEW_DEVICE = "SearchEnginePromo.NewDevice"; public static final String MATERIAL_DESIGN_INCOGNITO_NTP = "MaterialDesignIncognitoNTP"; + public static final String MODAL_PERMISSION_PROMPTS = "ModalPermissionPrompts"; public static final String NEW_PHOTO_PICKER = "NewPhotoPicker"; public static final String NO_CREDIT_CARD_ABORT = "NoCreditCardAbort"; public static final String NTP_CONDENSED_LAYOUT = "NTPCondensedLayout";
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/FullscreenActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/FullscreenActivity.java index 81a6f23..dde299f 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/FullscreenActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/FullscreenActivity.java
@@ -84,7 +84,7 @@ @Override protected int getControlContainerLayoutId() { // TODO(peconn): Determine if there's something more suitable to use here. - return R.layout.webapp_control_container; + return R.layout.fullscreen_control_container; } @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java index e0780d6..69285698 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
@@ -285,6 +285,14 @@ } /** + * @return The url for the page displayed using the current {@link CustomTabContentHandler}. + */ + public static String getCurrentUrlForActiveCustomTabSession() { + if (sActiveContentHandler == null) return null; + return sActiveContentHandler.getCurrentUrl(); + } + + /** * Checks whether the active {@link CustomTabContentHandler} belongs to the given session, and * if true, update toolbar's custom button. * @param session The {@link IBinder} that the calling client represents. @@ -547,6 +555,11 @@ return mBottomBarDelegate.updateRemoteViews(remoteViews, clickableIDs, pendingIntent); } + + @Override + public String getCurrentUrl() { + return getActivityTab() == null ? null : getActivityTab().getUrl(); + } }; recordClientPackageName(); mConnection.showSignInToastIfNecessary(mSession, getIntent());
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabContentHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabContentHandler.java index 6b6d78378..8a082179 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabContentHandler.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabContentHandler.java
@@ -51,4 +51,9 @@ */ boolean updateRemoteViews(RemoteViews remoteViews, int[] clickableIDs, PendingIntent pendingIntent); + + /** + * @return The current url being displayed to the user. + */ + String getCurrentUrl(); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java index b8bb7a8..c75774af 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
@@ -958,12 +958,10 @@ boolean notifyNavigationEvent(CustomTabsSessionToken session, int navigationEvent) { CustomTabsCallback callback = mClientManager.getCallbackForSession(session); if (callback == null) return false; - // SystemClock.uptimeMillis() is used here as it (as of June 2017) uses the same system call - // as all the native side of Chrome, and this is the same clock used for page load metrics. - Bundle extras = new Bundle(); - extras.putLong("timestampUptimeMillis", SystemClock.uptimeMillis()); + try { - callback.onNavigationEvent(navigationEvent, extras); + callback.onNavigationEvent( + navigationEvent, getExtrasBundleForNavigationEventForSession(session)); } catch (Exception e) { // Catching all exceptions is really bad, but we need it here, // because Android exposes us to client bugs by throwing a variety @@ -975,6 +973,18 @@ } /** + * @return The {@link Bundle} to use as extra to + * {@link CustomTabsCallback#onNavigationEvent(int, Bundle)} + */ + protected Bundle getExtrasBundleForNavigationEventForSession(CustomTabsSessionToken session) { + // SystemClock.uptimeMillis() is used here as it (as of June 2017) uses the same system call + // as all the native side of Chrome, and this is the same clock used for page load metrics. + Bundle extras = new Bundle(); + extras.putLong("timestampUptimeMillis", SystemClock.uptimeMillis()); + return extras; + } + + /** * Notifies the application of a page load metric. * * TODD(lizeb): Move this to a proper method in {@link CustomTabsCallback} once one is
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/externalauth/ExternalAuthUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/externalauth/ExternalAuthUtils.java index 9cbad92..85005a6 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/externalauth/ExternalAuthUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/externalauth/ExternalAuthUtils.java
@@ -9,14 +9,17 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; +import android.os.AsyncTask; import android.os.Binder; import android.os.StrictMode; import android.os.SystemClock; +import android.support.annotation.WorkerThread; import android.text.TextUtils; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GoogleApiAvailability; +import org.chromium.base.Callback; import org.chromium.base.ContextUtils; import org.chromium.base.Log; import org.chromium.base.ThreadUtils; @@ -190,35 +193,23 @@ */ public boolean canUseGooglePlayServices( final Context context, final UserRecoverableErrorHandler errorHandler) { - return canUseGooglePlayServicesResultCode(context, errorHandler) - == ConnectionResult.SUCCESS; - } - - /** - * Same as {@link #canUseGooglePlayServices(Context, UserRecoverableErrorHandler)}. - * @param context The current context. - * @param errorHandler How to handle user-recoverable errors; must be non-null. - * @return the result code specifying Google Play Services availability. - */ - public int canUseGooglePlayServicesResultCode( - final Context context, final UserRecoverableErrorHandler errorHandler) { final int resultCode = checkGooglePlayServicesAvailable(context); recordConnectionResult(resultCode); - if (resultCode != ConnectionResult.SUCCESS) { - // resultCode is some kind of error. - Log.v(TAG, "Unable to use Google Play Services: %s", describeError(resultCode)); - - if (isUserRecoverableError(resultCode)) { - Runnable errorHandlerTask = new Runnable() { - @Override - public void run() { - errorHandler.handleError(context, resultCode); - } - }; - ThreadUtils.runOnUiThread(errorHandlerTask); - } + if (resultCode == ConnectionResult.SUCCESS) { + return true; } - return resultCode; + // resultCode is some kind of error. + Log.v(TAG, "Unable to use Google Play Services: %s", describeError(resultCode)); + if (isUserRecoverableError(resultCode)) { + Runnable errorHandlerTask = new Runnable() { + @Override + public void run() { + errorHandler.handleError(context, resultCode); + } + }; + ThreadUtils.runOnUiThread(errorHandlerTask); + } + return false; } /** @@ -238,6 +229,7 @@ * Play Services; must be non-null. * @return true if and only if first-party Google Play Services can be used */ + @WorkerThread public boolean canUseFirstPartyGooglePlayServices( Context context, UserRecoverableErrorHandler userRecoverableErrorHandler) { return canUseGooglePlayServices(context, userRecoverableErrorHandler) @@ -245,6 +237,32 @@ } /** + * Same as {@link #canUseFirstPartyGooglePlayServices(Context, UserRecoverableErrorHandler)}, + * but completes the task in the background to avoid any potentially slow calls blocking the + * UI thread. + * @param context The current context. + * @param userRecoverableErrorHandler How to handle user-recoverable errors from Google + * Play Services; must be non-null. + * @param callback Callback to receive whether or not first party Play Services are available. + */ + public void canUseFirstPartyGooglePlayServices(Context context, + UserRecoverableErrorHandler userRecoverableErrorHandler, Callback<Boolean> callback) { + new AsyncTask<Void, Void, Boolean>() { + @Override + protected Boolean doInBackground(Void... voids) { + return canUseGooglePlayServices(context, userRecoverableErrorHandler) + && isChromeGoogleSigned(); + } + + @Override + protected void onPostExecute(Boolean canUseFirstPartyGooglePlayServices) { + callback.onResult(canUseFirstPartyGooglePlayServices); + } + } + .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + } + + /** * Record the result of a connection attempt. The default implementation records via a UMA * histogram. * @param resultCode the result from {@link #checkGooglePlayServicesAvailable(Context)} @@ -275,18 +293,6 @@ } /** - * @param errorCode returned by {@link #checkGooglePlayServicesAvailable(Context)}. - * @return true if the error code indicates that an invalid version of Google Play Services is - * installed. - */ - public boolean isGooglePlayServicesUpdateRequiredError(int errorCode) { - return errorCode == ConnectionResult.SERVICE_UPDATING - || errorCode == ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED - || errorCode == ConnectionResult.SERVICE_DISABLED - || errorCode == ConnectionResult.SERVICE_MISSING; - } - - /** * Invokes whatever external code is necessary to check if the specified error code produced * by {@link #checkGooglePlayServicesAvailable(Context)} represents a user-recoverable error. * Subclasses can override to filter error codes as desired.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/snackbar/SnackbarView.java b/chrome/android/java/src/org/chromium/chrome/browser/snackbar/SnackbarView.java index 50ea9da..38446f5 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/snackbar/SnackbarView.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/snackbar/SnackbarView.java
@@ -49,6 +49,7 @@ private ViewGroup mParent; private Snackbar mSnackbar; private boolean mAnimateOverWebContent; + private View mRootContentView; // Variables used to calculate the virtual keyboard's height. private Rect mCurrentVisibleRect = new Rect(); @@ -84,6 +85,7 @@ mOriginalParent = parentView; } + mRootContentView = activity.findViewById(android.R.id.content); mParent = mOriginalParent; mView = (ViewGroup) LayoutInflater.from(activity).inflate( R.layout.snackbar, mParent, false); @@ -121,7 +123,7 @@ animatorSet.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { - mParent.removeOnLayoutChangeListener(mLayoutListener); + mRootContentView.removeOnLayoutChangeListener(mLayoutListener); mParent.removeView(mView); } }); @@ -175,7 +177,7 @@ * @see SnackbarManager#overrideParent(ViewGroup) */ void overrideParent(ViewGroup overridingParent) { - mParent.removeOnLayoutChangeListener(mLayoutListener); + mRootContentView.removeOnLayoutChangeListener(mLayoutListener); mParent = overridingParent == null ? mOriginalParent : overridingParent; if (isShowing()) { ((ViewGroup) mView.getParent()).removeView(mView); @@ -217,7 +219,7 @@ // change listener of the view itself, the force layout flag will be reset to 0 when // layout() returns. Therefore we have to do request layout on one level above the requested // view. - mParent.addOnLayoutChangeListener(mLayoutListener); + mRootContentView.addOnLayoutChangeListener(mLayoutListener); } private boolean updateInternal(Snackbar snackbar, boolean animate) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActivity.java index 82bad9c0..c02e2cb 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActivity.java
@@ -46,7 +46,6 @@ import org.chromium.chrome.browser.tabmodel.document.TabDelegate; import org.chromium.chrome.browser.toolbar.ToolbarControlContainer; import org.chromium.chrome.browser.util.ColorUtils; -import org.chromium.chrome.browser.util.UrlUtilities; import org.chromium.content.browser.ContentViewCore; import org.chromium.content.browser.ScreenOrientationProvider; import org.chromium.content_public.browser.LoadUrlParams; @@ -67,6 +66,7 @@ public static final String WEBAPP_SCHEME = "webapp"; private static final String TAG = "WebappActivity"; + private static final String HISTOGRAM_NAVIGATION_STATUS = "Webapp.NavigationStatus"; private static final long MS_BEFORE_NAVIGATING_BACK_FROM_INTERSTITIAL = 1000; private static final int ENTER_IMMERSIVE_MODE_DELAY_MILLIS = 300; @@ -482,11 +482,6 @@ protected void onUpdatedLastUsedTime( WebappDataStorage storage, boolean previouslyLaunched, long previousUsageTimestamp) {} - private boolean isWebappDomain() { - return UrlUtilities.sameDomainOrHost( - getActivityTab().getUrl(), getWebappInfo().uri().toString(), true); - } - @Override protected ChromeFullscreenManager createFullscreenManager() { // Disable HTML5 fullscreen in PWA fullscreen mode. @@ -523,25 +518,24 @@ if (hasCommitted && isInMainFrame) { // Updates the URL. mNotificationManager.maybeShowNotification(); + RecordHistogram.recordBooleanHistogram( + HISTOGRAM_NAVIGATION_STATUS, !isErrorPage); } } @Override public void onDidChangeThemeColor(Tab tab, int color) { - if (!isWebappDomain()) return; mBrandColor = color; updateTaskDescription(); } @Override public void onTitleUpdated(Tab tab) { - if (!isWebappDomain()) return; updateTaskDescription(); } @Override public void onFaviconUpdated(Tab tab, Bitmap icon) { - if (!isWebappDomain()) return; // No need to cache the favicon if there is an icon declared in app manifest. if (mWebappInfo.icon() != null) return; if (icon == null) return;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappControlContainer.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappControlContainer.java deleted file mode 100644 index f794a04c..0000000 --- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappControlContainer.java +++ /dev/null
@@ -1,78 +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.webapps; - -import android.content.Context; -import android.graphics.Color; -import android.graphics.Rect; -import android.util.AttributeSet; -import android.view.View; - -import org.chromium.chrome.browser.compositor.layouts.eventfilter.EdgeSwipeHandler; -import org.chromium.chrome.browser.compositor.resources.ResourceFactory; -import org.chromium.chrome.browser.widget.ClipDrawableProgressBar.DrawingInfo; -import org.chromium.chrome.browser.widget.ControlContainer; -import org.chromium.chrome.browser.widget.ViewResourceFrameLayout; -import org.chromium.ui.resources.dynamics.ViewResourceAdapter; - -/** - * The control container used by WebApps. - */ -public class WebappControlContainer extends ViewResourceFrameLayout - implements ControlContainer { - private class WebAppViewResourceAdapter extends ViewResourceAdapter { - private final Rect mToolbarRect = new Rect(); - private final Rect mLocationBarContentRect = new Rect(); - - public WebAppViewResourceAdapter(View view) { - super(view); - } - - @Override - public long createNativeResource() { - mToolbarRect.set(0, 0, getWidth(), getHeight()); - mLocationBarContentRect.set(0, 0, getWidth(), getHeight()); - return ResourceFactory.createToolbarContainerResource( - mToolbarRect, mLocationBarContentRect, 0); - } - } - - /** Constructor for inflating from XML. */ - public WebappControlContainer(Context context, AttributeSet attrs) { - super(context, attrs); - } - - @Override - public void initWithToolbar(int toolbarLayoutId) { - } - - @Override - protected final ViewResourceAdapter createResourceAdapter() { - return new WebAppViewResourceAdapter(this); - } - - @Override - public ViewResourceAdapter getToolbarResourceAdapter() { - return getResourceAdapter(); - } - - @Override - public void getProgressBarDrawingInfo(DrawingInfo drawingInfoOut) { - } - - @Override - public void setSwipeHandler(EdgeSwipeHandler handler) { - } - - @Override - public int getToolbarBackgroundColor() { - return Color.WHITE; - } - - @Override - public View getView() { - return this; - } -}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappUrlBar.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappUrlBar.java deleted file mode 100644 index 5b75061..0000000 --- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappUrlBar.java +++ /dev/null
@@ -1,177 +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.webapps; - -import android.content.Context; -import android.graphics.drawable.Drawable; -import android.text.Layout; -import android.text.TextUtils; -import android.text.method.ScrollingMovementMethod; -import android.util.AttributeSet; -import android.util.Log; -import android.util.SparseIntArray; -import android.view.Gravity; -import android.view.View; -import android.view.ViewGroup; -import android.widget.FrameLayout; -import android.widget.TextView; - -import org.chromium.base.ApiCompatibilityUtils; -import org.chromium.base.VisibleForTesting; -import org.chromium.chrome.R; -import org.chromium.chrome.browser.omnibox.LocationBarLayout; -import org.chromium.components.url_formatter.UrlFormatter; -import org.chromium.ui.base.DeviceFormFactor; - -import java.net.URI; - -/** - * Maintains a URL bar that is displayed above the webapp's content. - * For security reasons, this bar will appear when a user navigates to a website that is not - * considered the same as the one that was used to open a WebappActivity originally. - * The URL bar will disappear again once the user navigates back to the original website. - * - * Example scenario: - * 0) User opens a webapp for http://domain1.com. URL bar is hidden - * 1) User navigates to http://domain1.com/some.html URL bar is hidden - * 2) User navigates to http://domain2.com/ URL bar is shown - * 3) User navigates back to http://domain1.com/some.html URL bar is hidden - */ -public class WebappUrlBar extends FrameLayout implements View.OnLayoutChangeListener { - private static final String TAG = "WebappUrlBar"; - - private final TextView mUrlBar; - private final View mSeparator; - private final SparseIntArray mIconResourceWidths; - - private String mCurrentlyDisplayedUrl; - private int mCurrentIconResource; - - /** - * Creates a WebappUrlBar. - * @param context Context to grab resources from. - */ - public WebappUrlBar(Context context, AttributeSet attrSet) { - super(context, attrSet); - mIconResourceWidths = new SparseIntArray(); - - mUrlBar = new TextView(context); - mUrlBar.setSingleLine(true); - mUrlBar.setGravity(Gravity.CENTER_VERTICAL); - mUrlBar.setMovementMethod(ScrollingMovementMethod.getInstance()); - mUrlBar.setHorizontalFadingEdgeEnabled(true); - mSeparator = new View(context); - - addView(mUrlBar, - new FrameLayout.LayoutParams( - ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, - Gravity.CENTER)); - addView(mSeparator, - new FrameLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, 1, Gravity.BOTTOM)); - - // Set the colors. - mSeparator.setBackgroundColor(ApiCompatibilityUtils.getColor(context.getResources(), - R.color.webapp_url_bar_separator)); - setBackgroundColor(ApiCompatibilityUtils.getColor(context.getResources(), - R.color.webapp_url_bar_bg)); - - // Listen for changes in the URL bar's size. - mUrlBar.addOnLayoutChangeListener(this); - } - - /** - * Updates the URL bar for the current URL. - * @param url URL to display. - * @param securityLevel Security level of the Tab. - */ - public void update(String url, int securityLevel) { - URI uri = createURI(url); - updateSecurityIcon(securityLevel); - updateDisplayedUrl(url, uri); - } - - /** - * @return the security icon being displayed for the current URL. - */ - @VisibleForTesting - protected int getCurrentIconResourceForTests() { - return mCurrentIconResource; - } - - /** - * @return the URL being displayed. - */ - @VisibleForTesting - protected CharSequence getDisplayedUrlForTests() { - return mUrlBar.getText(); - } - - /** - * Show the end of the URL rather than the beginning. - */ - @Override - public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, - int oldTop, int oldRight, int oldBottom) { - Layout layout = mUrlBar.getLayout(); - if (layout == null) return; - - // Android doesn't account for the compound Drawable in its width calculations, leading to - // improper scrolling and even Android improperly placing the horizontal fade in its - // TextView calculation. Get around it by calculating that width manually: crbug.com/303908 - int urlBarWidth = mUrlBar.getWidth(); - int iconWidth = - mCurrentIconResource == 0 ? 0 : mIconResourceWidths.get(mCurrentIconResource); - int availableTextWidth = urlBarWidth - iconWidth; - int desiredWidth = (int) Layout.getDesiredWidth(layout.getText(), layout.getPaint()); - - if (desiredWidth > availableTextWidth) { - mUrlBar.scrollTo(desiredWidth - availableTextWidth, 0); - } else { - mUrlBar.scrollTo(0, 0); - } - } - - private static URI createURI(String url) { - // Get rid of spaces temporarily: crbug.com/298465 - // Get rid of the need for this hack eventually: crbug.com/296870 - url = url.replace(" ", "%20"); - - try { - return URI.create(url); - } catch (IllegalArgumentException exception) { - Log.e(TAG, "Failed to convert URI: ", exception); - return null; - } - } - - private void updateSecurityIcon(int securityLevel) { - boolean isSmallDevice = !DeviceFormFactor.isTablet(); - mCurrentIconResource = - LocationBarLayout.getSecurityIconResource(securityLevel, isSmallDevice, false); - - if (mCurrentIconResource != 0 && mIconResourceWidths.get(mCurrentIconResource, -1) == -1) { - Drawable icon = ApiCompatibilityUtils.getDrawable(getResources(), mCurrentIconResource); - mIconResourceWidths.put(mCurrentIconResource, icon.getIntrinsicWidth()); - } - - ApiCompatibilityUtils.setCompoundDrawablesRelativeWithIntrinsicBounds(mUrlBar, - mCurrentIconResource, 0, 0, 0); - } - - private void updateDisplayedUrl(String originalUrl, URI uri) { - boolean showScheme = mCurrentIconResource == 0; - String displayUrl = originalUrl; - if (uri != null) { - String shortenedUrl = UrlFormatter.formatUrlForSecurityDisplay(uri, showScheme); - if (!TextUtils.isEmpty(shortenedUrl)) displayUrl = shortenedUrl; - } - - mUrlBar.setText(displayUrl); - if (!TextUtils.equals(mCurrentlyDisplayedUrl, displayUrl)) { - mCurrentlyDisplayedUrl = displayUrl; - } - } -}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/FullscreenControlContainer.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/FullscreenControlContainer.java new file mode 100644 index 0000000..bd6755a --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/FullscreenControlContainer.java
@@ -0,0 +1,73 @@ +// 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.widget; + +import android.content.Context; +import android.graphics.Color; +import android.graphics.Rect; +import android.util.AttributeSet; +import android.view.View; + +import org.chromium.chrome.browser.compositor.layouts.eventfilter.EdgeSwipeHandler; +import org.chromium.chrome.browser.compositor.resources.ResourceFactory; +import org.chromium.chrome.browser.widget.ClipDrawableProgressBar.DrawingInfo; +import org.chromium.ui.resources.dynamics.ViewResourceAdapter; + +/** + * The control container used by the FullscreenActivity. + */ +public class FullscreenControlContainer + extends ViewResourceFrameLayout implements ControlContainer { + private class FullscreenViewResourceAdapter extends ViewResourceAdapter { + private final Rect mToolbarRect = new Rect(); + private final Rect mLocationBarContentRect = new Rect(); + + public FullscreenViewResourceAdapter(View view) { + super(view); + } + + @Override + public long createNativeResource() { + mToolbarRect.set(0, 0, getWidth(), getHeight()); + mLocationBarContentRect.set(0, 0, getWidth(), getHeight()); + return ResourceFactory.createToolbarContainerResource( + mToolbarRect, mLocationBarContentRect, 0); + } + } + + /** Constructor for inflating from XML. */ + public FullscreenControlContainer(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + public void initWithToolbar(int toolbarLayoutId) {} + + @Override + protected final ViewResourceAdapter createResourceAdapter() { + return new FullscreenViewResourceAdapter(this); + } + + @Override + public ViewResourceAdapter getToolbarResourceAdapter() { + return getResourceAdapter(); + } + + @Override + public void getProgressBarDrawingInfo(DrawingInfo drawingInfoOut) {} + + @Override + public void setSwipeHandler(EdgeSwipeHandler handler) {} + + @Override + public int getToolbarBackgroundColor() { + return Color.WHITE; + } + + @Override + public View getView() { + return this; + } +}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/selection/SelectableItemHighlightView.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/selection/SelectableItemHighlightView.java deleted file mode 100644 index 3125c71..0000000 --- a/chrome/android/java/src/org/chromium/chrome/browser/widget/selection/SelectableItemHighlightView.java +++ /dev/null
@@ -1,64 +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. - -package org.chromium.chrome.browser.widget.selection; - -import android.content.Context; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.LayerDrawable; -import android.util.AttributeSet; -import android.view.View; -import android.widget.Checkable; - -import org.chromium.base.ApiCompatibilityUtils; -import org.chromium.chrome.R; -import org.chromium.chrome.browser.util.FeatureUtilities; - -/** - * Highlight overlay view for selectable items. - */ -public class SelectableItemHighlightView extends View implements Checkable { - public static final int ANIMATION_DURATION_MS = 150; - private static final int[] CHECKED_STATE_SET = {android.R.attr.state_checked}; - private boolean mIsChecked; - - /** - * Constructor for inflating from XML. - */ - public SelectableItemHighlightView(Context context, AttributeSet attrs) { - super(context, attrs); - Drawable clickDrawable = context.obtainStyledAttributes(new int[] { - android.R.attr.selectableItemBackground }).getDrawable(0); - Drawable longClickDrawable = ApiCompatibilityUtils.getDrawable(context.getResources(), - R.drawable.selectable_item_highlight); - LayerDrawable ld = new LayerDrawable(new Drawable[] {clickDrawable, longClickDrawable}); - setBackground(ld); - } - - @Override - public boolean isChecked() { - return mIsChecked; - } - - @Override - public void toggle() { - setChecked(!mIsChecked); - } - - @Override - public void setChecked(boolean checked) { - if (checked == mIsChecked) return; - mIsChecked = checked; - refreshDrawableState(); - } - - @Override - public int[] onCreateDrawableState(int extraSpace) { - final int[] drawableState = super.onCreateDrawableState(extraSpace + 1); - if (mIsChecked && !FeatureUtilities.isChromeHomeModernEnabled()) { - mergeDrawableStates(drawableState, CHECKED_STATE_SET); - } - return drawableState; - } -}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/selection/SelectableItemView.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/selection/SelectableItemView.java index c51851c..d7cee5e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/widget/selection/SelectableItemView.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/selection/SelectableItemView.java
@@ -42,8 +42,8 @@ protected ColorStateList mIconColorList; private SelectionDelegate<E> mSelectionDelegate; - private SelectableItemHighlightView mHighlightView; private E mItem; + private boolean mIsChecked; /** * Constructor for inflating from XML. @@ -98,17 +98,16 @@ protected void onFinishInflate() { super.onFinishInflate(); - inflate(getContext(), R.layout.selectable_item_highlight_view, this); - mHighlightView = (SelectableItemHighlightView) findViewById(R.id.highlight); mIconView = findViewById(R.id.icon_view); mTitleView = findViewById(R.id.title); mDescriptionView = findViewById(R.id.description); if (mIconView != null) { - if (FeatureUtilities.isChromeHomeModernEnabled()) { - mIconView.setBackgroundResource(R.drawable.selectable_item_icon_modern_bg); - } + mIconView.setBackgroundResource(R.drawable.selectable_item_icon_modern_bg); mIconView.setTint(null); + if (!FeatureUtilities.isChromeHomeModernEnabled()) { + mIconView.getBackground().setAlpha(0); + } } setOnClickListener(this); @@ -169,7 +168,7 @@ // Checkable implementations. @Override public boolean isChecked() { - return mHighlightView.isChecked(); + return mIsChecked; } @Override @@ -179,7 +178,8 @@ @Override public void setChecked(boolean checked) { - mHighlightView.setChecked(checked); + if (checked == mIsChecked) return; + mIsChecked = checked; updateIconView(); } @@ -205,16 +205,18 @@ // TODO(huayinz): Refactor this method so that mIconView is not exposed to subclass. if (mIconView == null) return; - if (FeatureUtilities.isChromeHomeModernEnabled()) { - if (isChecked()) { - mIconView.getBackground().setLevel(mSelectedLevel); - mIconView.setImageResource(R.drawable.ic_check_googblue_24dp); - mIconView.setTint(mIconColorList); - } else { - mIconView.getBackground().setLevel(mDefaultLevel); - mIconView.setImageDrawable(mIconDrawable); - mIconView.setTint(null); - } + if (isChecked()) { + mIconView.getBackground().setLevel(mSelectedLevel); + mIconView.setImageResource(R.drawable.ic_check_googblue_24dp); + mIconView.setTint(mIconColorList); + } else { + mIconView.getBackground().setLevel(mDefaultLevel); + mIconView.setImageDrawable(mIconDrawable); + mIconView.setTint(null); + } + + if (!FeatureUtilities.isChromeHomeModernEnabled()) { + mIconView.getBackground().setAlpha(isChecked() ? 255 : 0); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/selection/SelectableListToolbar.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/selection/SelectableListToolbar.java index 59f5864..965096e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/widget/selection/SelectableListToolbar.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/selection/SelectableListToolbar.java
@@ -114,6 +114,7 @@ private TintedImageButton mClearTextButton; private SearchDelegate mSearchDelegate; private boolean mIsLightTheme = true; + private boolean mSelectableListHasItems; protected NumberRollView mNumberRollView; private DrawerLayout mDrawerLayout; @@ -430,8 +431,10 @@ */ protected void onDataChanged(int numItems) { if (mHasSearchView) { - getMenu().findItem(mSearchMenuItemId).setVisible( - !mIsSelectionEnabled && !mIsSearching && numItems != 0); + mSelectableListHasItems = numItems != 0; + getMenu() + .findItem(mSearchMenuItemId) + .setVisible(!mIsSelectionEnabled && !mIsSearching && mSelectableListHasItems); } } @@ -551,7 +554,10 @@ protected void showNormalView() { getMenu().setGroupVisible(mNormalGroupResId, true); getMenu().setGroupVisible(mSelectedGroupResId, false); - if (mHasSearchView) mSearchView.setVisibility(View.GONE); + if (mHasSearchView) { + mSearchView.setVisibility(View.GONE); + getMenu().findItem(mSearchMenuItemId).setVisible(mSelectableListHasItems); + } setNavigationButton(NAVIGATION_BUTTON_MENU); setBackgroundColor(mNormalBackgroundColor);
diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd index bf5597d..7cc72f5 100644 --- a/chrome/android/java/strings/android_chrome_strings.grd +++ b/chrome/android/java/strings/android_chrome_strings.grd
@@ -1900,7 +1900,7 @@ Still adding previous site </message> <message name="IDS_NOTIFICATION_WEBAPK_INSTALL_IN_PROGRESS" desc="Indicates that the adding of a WebAPK is in progress."> - Adding <ph name="WEBAPK_NAME">%1$s<ex>Progressive Web Apps</ex></ph> ... + Adding <ph name="WEBAPK_NAME">%1$s<ex>Progressive Web Apps</ex></ph>... </message> <message name="IDS_NOTIFICATION_WEBAPK_INSTALLED" desc="Indicates that a WebAPK has been successfully added to home screen."> Added to home screen. @@ -2987,7 +2987,7 @@ <ph name="WEB_APP_NAME">%1$s<ex>Twitter</ex></ph> runs in Chrome </message> <message name="IDS_WEBAPK_OFFLINE_DIALOG" desc="The message on the dialog shown when launching a WebAPK needs network connection."> - To use <ph name="APP_NAME">%1$s<ex>PWA List</ex></ph> for the first time, please connect to the internet + To use <ph name="APP_NAME">%1$s<ex>PWA List</ex></ph> for the first time, please connect to the internet. </message> <message name="IDS_WEBAPK_OFFLINE_DIALOG_QUIT_BUTTON" desc="The text on the quit button on the dialog shown when launching a WebAPK needs network connection."> OK
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 5cbcbad8..5525c874 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
@@ -351,7 +351,7 @@ <translation id="4522570452068850558">التفاصيل</translation> <translation id="4526249700380860531">عرض كلمات المرور المحفوظة وإدارتها في <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation> <translation id="4532845899244822526">اختيار مجلد</translation> -<translation id="4550003330909367850">لعرض كلمة المرور أو نسخها هنا، عيّن قفل الشاشة على هذا الجهاز.</translation> +<translation id="4550003330909367850">عيّن قفل الشاشة على هذا الجهاز لعرض كلمة المرور أو نسخها هنا.</translation> <translation id="4558311620361989323">اختصارات صفحة الويب</translation> <translation id="4572422548854449519">تسجيل الدخول إلى الحساب المدار</translation> <translation id="4581964774250883625">لقد انتقلت إلى التصفح المتخفي.</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 2bcd5b1a..b6f2d29e 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb
@@ -269,7 +269,7 @@ <translation id="3649663272864015643">S'ha seleccionat la pestanya Inici</translation> <translation id="3656115297268584622">Activeu la ubicació a la <ph name="BEGIN_LINK" />configuració d'Android<ph name="END_LINK" />.</translation> <translation id="3661699943263275414">Els llocs web de tercers poden desar i llegir les dades de les galetes</translation> -<translation id="3662546969139119822">L'historial està buit</translation> +<translation id="3662546969139119822">L'historial és buit</translation> <translation id="3672452749423051839">Suggeriments d'errors de navegació</translation> <translation id="3714981814255182093">Obre la Barra de cerca</translation> <translation id="3734660163659757482">Fes lliscar la pàgina cap amunt per veure les adreces d'interès i més</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 e162a8a..15582073 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_da.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
@@ -656,7 +656,7 @@ <translation id="7352939065658542140">VIDEO</translation> <translation id="7353894246028566792">{NUM_SELECTED,plural, =1{Del 1 valgt element}one{Del # valgt element}other{Del # valgte elementer}}</translation> <translation id="7366340029385295517">Caster til <ph name="SCREEN_NAME" /></translation> -<translation id="7374228672268453233">Brugt data:</translation> +<translation id="7374228672268453233">Dataforbrug:</translation> <translation id="7375125077091615385">Type:</translation> <translation id="7378627244592794276">Nej</translation> <translation id="7400418766976504921">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 0c6d046..4f9519a 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_de.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
@@ -185,7 +185,7 @@ <translation id="2870560284913253234">Website</translation> <translation id="2874939134665556319">Vorheriger Titel</translation> <translation id="2876764156902388290">Chrome nutzt weniger Daten zum Anzeigen dieser Seite</translation> -<translation id="2888126860611144412">Info zu Chrome</translation> +<translation id="2888126860611144412">Über Google Chrome</translation> <translation id="2891154217021530873">Laden der Seite anhalten</translation> <translation id="2900528713135656174">Termin erstellen</translation> <translation id="2902702728133930130">Während des Startvorgangs ist in Chrome ein unerwarteter Fehler aufgetreten.</translation> @@ -467,7 +467,7 @@ <translation id="5620928963363755975">Ihre Dateien und Seiten finden Sie durch Auswahl der Schaltfläche "Weitere Optionen" unter "Downloads"</translation> <translation id="5626134646977739690">Name:</translation> <translation id="5639724618331995626">Alle Websites zulassen</translation> -<translation id="5646376287012673985">Speicherort</translation> +<translation id="5646376287012673985">Standort</translation> <translation id="5648166631817621825">Letzte 7 Tage</translation> <translation id="5655963694829536461">Downloads durchsuchen</translation> <translation id="5659593005791499971">E-Mail-Adresse</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 7461d6c6..091090f 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
@@ -133,7 +133,9 @@ <translation id="2227444325776770048">Continue as <ph name="USER_FULL_NAME" /></translation> <translation id="2266890032547182881">Data usage breakdown</translation> <translation id="2268044343513325586">Refine</translation> +<translation id="2283599456633275070">Travel</translation> <translation id="2286841657746966508">Billing address</translation> +<translation id="2301209717432756327">Added to home screen.</translation> <translation id="2315043854645842844">Client side certificate selection is not supported by the operating system.</translation> <translation id="2321958826496381788">Drag the slider until you can read this comfortably. Text should look at least this big after double-tapping on a paragraph.</translation> <translation id="2323763861024343754">Site storage</translation> @@ -271,6 +273,7 @@ <translation id="3661699943263275414">Third-party websites can save and read cookie data</translation> <translation id="3662546969139119822">No history here</translation> <translation id="3672452749423051839">Navigation error suggestions</translation> +<translation id="3706423975342040244">Entertainment</translation> <translation id="3714981814255182093">Open the Find Bar</translation> <translation id="3734660163659757482">Pull up to see bookmarks and more</translation> <translation id="3738139272394829648">Touch to Search</translation> @@ -303,6 +306,7 @@ <translation id="3988213473815854515">Location is allowed</translation> <translation id="3997476611815694295">Unimportant storage</translation> <translation id="4002066346123236978">Title</translation> +<translation id="4013356575049925793">E-commerce</translation> <translation id="4042870126885713738">Show suggestions when a web address does not resolve or a connection cannot be made</translation> <translation id="4046123991198612571">Next track</translation> <translation id="4056223980640387499">Sepia</translation> @@ -317,6 +321,7 @@ <translation id="410351446219883937">Autoplay</translation> <translation id="4113030288477039509">Managed by your administrator</translation> <translation id="4116038641877404294">Download pages to use them offline</translation> +<translation id="4127069705158143605">{BOOKMARKS_COUNT,plural, =1{%1$d bookmark}other{%1$d bookmarks}}</translation> <translation id="4165986682804962316">Site settings</translation> <translation id="4170011742729630528">The service is not available; try again later.</translation> <translation id="4195643157523330669">Open in new tab</translation> @@ -336,10 +341,12 @@ <translation id="4351244548802238354">Close dialogue</translation> <translation id="4378154925671717803">Phone</translation> <translation id="4384468725000734951">Using Sogou for search</translation> +<translation id="4404568932422911380">No bookmarks</translation> <translation id="4412992751769744546">Allow third-party cookies</translation> <translation id="443008484043213881">Tools</translation> <translation id="4432792777822557199">Pages in <ph name="SOURCE_LANGUAGE" /> will be translated to <ph name="TARGET_LANGUAGE" /> from now on</translation> <translation id="4445444302979002552">Use prediction services to suggest search terms and websites</translation> +<translation id="4452411734226507615">Close <ph name="TAB_TITLE" /> tab</translation> <translation id="4452548195519783679">Bookmarked to <ph name="FOLDER_NAME" /></translation> <translation id="4453340223357552416"><ph name="FILE_NAME" /> downloaded in <ph name="PRODUCT_NAME" /></translation> <translation id="4479647676395637221">Ask first before allowing sites to use your camera (recommended)</translation> @@ -382,6 +389,8 @@ <translation id="4842092870884894799">Showing password generation pop-up</translation> <translation id="4850886885716139402">View</translation> <translation id="4860895144060829044">Call</translation> +<translation id="4874967477260347223">Media Licenses</translation> +<translation id="4875775213178255010">Content Suggestions</translation> <translation id="4881695831933465202">Open</translation> <translation id="4885273946141277891">Unsupported number of Chrome instances.</translation> <translation id="4910889077668685004">Payment apps</translation> @@ -598,6 +607,7 @@ <translation id="6762156594045689028">To change this setting, <ph name="BEGIN_LINK" />reset sync<ph name="END_LINK" /></translation> <translation id="6764789522080107716">Can't open file</translation> <translation id="6770414673596662518">Chrome’s Safe Browsing system will also be used to detect malicious pages and protect you from phishing, malware and harmful downloads.</translation> +<translation id="6776813977906306442">Download videos to watch later using the Download button</translation> <translation id="6790428901817661496">Play</translation> <translation id="679325081238418596">Get your bookmarks, history, passwords and other settings on all your devices</translation> <translation id="6820607729870073286">You have no saved website settings.</translation> @@ -646,6 +656,7 @@ <translation id="7189598951263744875">Share...</translation> <translation id="7191430249889272776">Tab opened in background.</translation> <translation id="723171743924126238">Select images</translation> +<translation id="7239442631100552029">Reset Data Saver? Resetting erases Data Saver history, including the list of visited sites.</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="7251326866581677552">Blocked from some sites</translation> @@ -655,6 +666,7 @@ <translation id="7333031090786104871">Still adding previous site</translation> <translation id="7352939065658542140">VIDEO</translation> <translation id="7353894246028566792">{NUM_SELECTED,plural, =1{Share 1 selected item}other{Share # selected items}}</translation> +<translation id="736293719833136063">Adding <ph name="WEBAPK_NAME" /> ...</translation> <translation id="7366340029385295517">Casting to <ph name="SCREEN_NAME" /></translation> <translation id="7374228672268453233">Data used:</translation> <translation id="7375125077091615385">Type:</translation> @@ -758,6 +770,7 @@ <translation id="8283853025636624853">Syncing to <ph name="SYNC_ACCOUNT_USER_NAME" /></translation> <translation id="8310344678080805313">Standard tabs</translation> <translation id="8339163506404995330">Pages in <ph name="LANGUAGE" /> will not be translated</translation> +<translation id="8372721116225477180">Social</translation> <translation id="8372893542064058268">Allow Background Sync for a specific site.</translation> <translation id="8374821112118309944">You need to update TalkBack to a newer version.</translation> <translation id="8393700583063109961">Send message</translation> @@ -814,6 +827,7 @@ <translation id="8959122750345127698">Navigation is unreachable: <ph name="URL" /></translation> <translation id="896250263197055929">Downloads tab selected</translation> <translation id="8979340629087822094">past day</translation> +<translation id="8979405271719829084">Download videos to watch later</translation> <translation id="8981454092730389528">Google Activity Controls</translation> <translation id="8986494364107987395">Automatically send usage statistics and crash reports to Google</translation> <translation id="8993760627012879038">Open a new tab in Incognito mode</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 1b1d53f..8cd72e91 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
@@ -131,7 +131,7 @@ <translation id="219985413780390209">הגן על עצמך ועל המכשיר מפני אתרים מסוכנים</translation> <translation id="2206488550163399966"><ph name="APP_NAME" />, אפליקציית אינטרנט. <ph name="APP_URL" /></translation> <translation id="2227444325776770048">המשך בשם <ph name="USER_FULL_NAME" /></translation> -<translation id="2266890032547182881">התפלגות שימוש בנתונים</translation> +<translation id="2266890032547182881">התפלגות השימוש בנתונים</translation> <translation id="2268044343513325586">צמצם</translation> <translation id="2286841657746966508">כתובת לחיוב</translation> <translation id="2315043854645842844">מערכת ההפעלה אינה תומכת בבחירת אישור בצד הלקוח.</translation> @@ -350,7 +350,7 @@ <translation id="4522570452068850558">פרטים</translation> <translation id="4526249700380860531">הצג ונהל סיסמאות שמורות ב-<ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation> <translation id="4532845899244822526">בחר תיקייה</translation> -<translation id="4550003330909367850">כדי להציג או להעתיק את הסיסמה כאן יש להגדיר נעילת מסך במכשיר זה.</translation> +<translation id="4550003330909367850">כדי להציג או להעתיק את הסיסמה יש להגדיר נעילת מסך במכשיר זה.</translation> <translation id="4558311620361989323">קיצורי דרך בדפי אינטרנט</translation> <translation id="4572422548854449519">כניסה אל חשבון מנוהל</translation> <translation id="4581964774250883625">עברת למצב גלישה בסתר</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 f024a051..c4008d31 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="138361230106469022">こんにちは、<ph name="FULL_NAME" /> さん</translation> <translation id="1383876407941801731">検索</translation> <translation id="1384959399684842514">ダウンロードを一時停止しました</translation> +<translation id="1389236224998445076">データ削減量:</translation> <translation id="1389974829397082527">ブックマークはありません</translation> <translation id="1397811292916898096"><ph name="PRODUCT_NAME" /> で検索</translation> <translation id="1402229579576898974">Chrome での <ph name="NUMBER_OF_SUGGESTIONS" /> 件の候補</translation> @@ -130,6 +131,7 @@ <translation id="219985413780390209">危険なサイトからユーザーとデバイスを保護する</translation> <translation id="2206488550163399966"><ph name="APP_NAME" /> はウェブアプリです(<ph name="APP_URL" />)。</translation> <translation id="2227444325776770048"><ph name="USER_FULL_NAME" /> として続行</translation> +<translation id="2266890032547182881">データ使用量の内訳</translation> <translation id="2268044343513325586">絞り込み</translation> <translation id="2286841657746966508">請求先住所</translation> <translation id="2315043854645842844">オペレーティング システムでサポートされていないため、クライアント側で証明書を選択することはできません。</translation> @@ -348,6 +350,7 @@ <translation id="4522570452068850558">詳細</translation> <translation id="4526249700380860531"><ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /> での保存パスワードの表示と管理</translation> <translation id="4532845899244822526">フォルダの選択</translation> +<translation id="4550003330909367850">ここでパスワードを表示またはコピーするには、この端末に画面ロックを設定してください。</translation> <translation id="4558311620361989323">ウェブページのショートカット</translation> <translation id="4572422548854449519">管理対象アカウントにログイン</translation> <translation id="4581964774250883625">シークレット モードです。</translation> @@ -382,6 +385,7 @@ <translation id="4881695831933465202">開く</translation> <translation id="4885273946141277891">Chrome のインスタンス数の上限を超えています。</translation> <translation id="4910889077668685004">お支払いアプリ</translation> +<translation id="4913161338056004800">統計情報をリセット</translation> <translation id="4913169188695071480">更新を停止</translation> <translation id="4915549754973153784">デバイスのスキャン中… <ph name="BEGIN_LINK" />ヘルプ<ph name="END_LINK" /></translation> <translation id="4943872375798546930">結果はありません</translation> @@ -652,6 +656,7 @@ <translation id="7352939065658542140">動画</translation> <translation id="7353894246028566792">{NUM_SELECTED,plural, =1{1 件の選択されたアイテムを共有します}other{# 件の選択されたアイテムを共有します}}</translation> <translation id="7366340029385295517"><ph name="SCREEN_NAME" />にキャストしています</translation> +<translation id="7374228672268453233">データ使用量:</translation> <translation id="7375125077091615385">タイプ:</translation> <translation id="7378627244592794276">いいえ</translation> <translation id="7400418766976504921">URL</translation> @@ -796,6 +801,7 @@ <translation id="8812260976093120287">一部のウェブサイトでは、端末でサポートされている上記のお支払いアプリを使って支払いができます。</translation> <translation id="8820817407110198400">ブックマーク</translation> <translation id="883635517171802338">サイトでのポップアップ表示をブロックする(推奨)</translation> +<translation id="883806473910249246">コンテンツのダウンロード中にエラーが発生しました。</translation> <translation id="8847988622838149491">USB</translation> <translation id="8853345339104747198">「<ph name="TAB_TITLE" />」タブ</translation> <translation id="885701979325669005">ストレージ</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 6709fd9..0314c90 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="138361230106469022">Hei, <ph name="FULL_NAME" /></translation> <translation id="1383876407941801731">Søk</translation> <translation id="1384959399684842514">Nedlasting stanset midlertidig</translation> +<translation id="1389236224998445076">Data spart:</translation> <translation id="1389974829397082527">Det er ingen bokmerker her</translation> <translation id="1397811292916898096">Søk med <ph name="PRODUCT_NAME" /></translation> <translation id="1402229579576898974"><ph name="NUMBER_OF_SUGGESTIONS" /> Chrome-forslag</translation> @@ -130,6 +131,7 @@ <translation id="219985413780390209">Beskytt deg selv og enheten din mot farlige nettsteder</translation> <translation id="2206488550163399966"><ph name="APP_NAME" />, nettprogram. <ph name="APP_URL" /></translation> <translation id="2227444325776770048">Fortsett som <ph name="USER_FULL_NAME" /></translation> +<translation id="2266890032547182881">Oversikt over databruk</translation> <translation id="2268044343513325586">Finstem</translation> <translation id="2286841657746966508">Faktureringsadresse</translation> <translation id="2315043854645842844">Operativsystemet har ikke støtte for sertifikatvalg på klientsiden.</translation> @@ -348,6 +350,7 @@ <translation id="4522570452068850558">Detaljer</translation> <translation id="4526249700380860531">Se på og administrer lagrede passord på <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation> <translation id="4532845899244822526">Velg en mappe</translation> +<translation id="4550003330909367850">For å se eller kopiere passordet ditt her, angi skjermlås på denne enheten.</translation> <translation id="4558311620361989323">Hurtigtaster for nettsider</translation> <translation id="4572422548854449519">Logg på en administrert konto</translation> <translation id="4581964774250883625">Du er nå i inkognitomodus.</translation> @@ -382,6 +385,7 @@ <translation id="4881695831933465202">Åpne</translation> <translation id="4885273946141277891">For mange Chrome-forekomster.</translation> <translation id="4910889077668685004">Betalingsapper</translation> +<translation id="4913161338056004800">Tilbakestill statistikken</translation> <translation id="4913169188695071480">Slutt å laste inn på nytt</translation> <translation id="4915549754973153784"><ph name="BEGIN_LINK" />Få hjelp<ph name="END_LINK" /> mens du skanner etter enheter …</translation> <translation id="4943872375798546930">Ingen resultater</translation> @@ -652,6 +656,7 @@ <translation id="7352939065658542140">VIDEO</translation> <translation id="7353894246028566792">{NUM_SELECTED,plural, =1{Del 1 valgt element}other{Del # valgte elementer}}</translation> <translation id="7366340029385295517">Caster til <ph name="SCREEN_NAME" /></translation> +<translation id="7374228672268453233">Data brukt</translation> <translation id="7375125077091615385">Type:</translation> <translation id="7378627244592794276">Nei takk</translation> <translation id="7400418766976504921">Nettadresse</translation> @@ -796,6 +801,7 @@ <translation id="8812260976093120287">På noen nettsteder kan du betale med de støttede betalingsappene ovenfor på enheten din.</translation> <translation id="8820817407110198400">Bokmerker</translation> <translation id="883635517171802338">Blokkér nettsteder fra å vise forgrunnsvinduer (anbefales)</translation> +<translation id="883806473910249246">Det oppsto en feil under nedlastingen av innholdet.</translation> <translation id="8847988622838149491">USB</translation> <translation id="8853345339104747198"><ph name="TAB_TITLE" /> – fane</translation> <translation id="885701979325669005">Lagring</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 c7b174d..8cbd2cde 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
@@ -656,7 +656,7 @@ <translation id="7352939065658542140">VÍDEO</translation> <translation id="7353894246028566792">{NUM_SELECTED,plural, =1{Partilhar 1 item selecionado}one{Share # selected items}other{Partilhar # itens selecionados}}</translation> <translation id="7366340029385295517">A transmitir para <ph name="SCREEN_NAME" /></translation> -<translation id="7374228672268453233">Dados utilizados</translation> +<translation id="7374228672268453233">Dados utilizados:</translation> <translation id="7375125077091615385">Tipo:</translation> <translation id="7378627244592794276">Não</translation> <translation id="7400418766976504921">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 daf86c4..922e351 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb
@@ -656,7 +656,7 @@ <translation id="7352939065658542140">ВИДЕО</translation> <translation id="7353894246028566792">{NUM_SELECTED,plural, =1{Дели 1 изабрану ставку}one{Дели # изабрану ставку}few{Дели # изабране ставке}other{Дели # изабраних ставки}}</translation> <translation id="7366340029385295517">Пребацивање на <ph name="SCREEN_NAME" /></translation> -<translation id="7374228672268453233">Потрошени подаци:</translation> +<translation id="7374228672268453233">Искоришћени подаци:</translation> <translation id="7375125077091615385">Тип:</translation> <translation id="7378627244592794276">Не</translation> <translation id="7400418766976504921">URL адреса</translation>
diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni index e2e7e0097..85f09df 100644 --- a/chrome/android/java_sources.gni +++ b/chrome/android/java_sources.gni
@@ -1235,7 +1235,6 @@ "java/src/org/chromium/chrome/browser/webapps/WebappActivity9.java", "java/src/org/chromium/chrome/browser/webapps/WebappAuthenticator.java", "java/src/org/chromium/chrome/browser/webapps/WebappBrowserControlsDelegate.java", - "java/src/org/chromium/chrome/browser/webapps/WebappControlContainer.java", "java/src/org/chromium/chrome/browser/webapps/WebappDataStorage.java", "java/src/org/chromium/chrome/browser/webapps/WebappDelegateFactory.java", "java/src/org/chromium/chrome/browser/webapps/WebappDirectoryManager.java", @@ -1246,7 +1245,6 @@ "java/src/org/chromium/chrome/browser/webapps/WebappRegistry.java", "java/src/org/chromium/chrome/browser/webapps/WebappSplashScreenController.java", "java/src/org/chromium/chrome/browser/webapps/WebappTabDelegate.java", - "java/src/org/chromium/chrome/browser/webapps/WebappUrlBar.java", "java/src/org/chromium/chrome/browser/webshare/ShareServiceImpl.java", "java/src/org/chromium/chrome/browser/webshare/ShareServiceImplementationFactory.java", "java/src/org/chromium/chrome/browser/widget/AlertDialogEditText.java", @@ -1264,6 +1262,7 @@ "java/src/org/chromium/chrome/browser/widget/FadingShadow.java", "java/src/org/chromium/chrome/browser/widget/FadingShadowView.java", "java/src/org/chromium/chrome/browser/widget/FloatLabelLayout.java", + "java/src/org/chromium/chrome/browser/widget/FullscreenControlContainer.java", "java/src/org/chromium/chrome/browser/widget/ImageViewTinter.java", "java/src/org/chromium/chrome/browser/widget/LoadingView.java", "java/src/org/chromium/chrome/browser/widget/MaterialProgressBar.java", @@ -1316,7 +1315,6 @@ "java/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarTablet.java", "java/src/org/chromium/chrome/browser/widget/incognitotoggle/IncognitoToggleButtonTablet.java", "java/src/org/chromium/chrome/browser/widget/newtab/NewTabButton.java", - "java/src/org/chromium/chrome/browser/widget/selection/SelectableItemHighlightView.java", "java/src/org/chromium/chrome/browser/widget/selection/SelectableItemView.java", "java/src/org/chromium/chrome/browser/widget/selection/SelectableItemViewHolder.java", "java/src/org/chromium/chrome/browser/widget/selection/SelectionDelegate.java", @@ -1733,7 +1731,6 @@ "javatests/src/org/chromium/chrome/browser/webapps/WebappSplashScreenIconTest.java", "javatests/src/org/chromium/chrome/browser/webapps/WebappSplashScreenTest.java", "javatests/src/org/chromium/chrome/browser/webapps/WebappSplashScreenThemeColorTest.java", - "javatests/src/org/chromium/chrome/browser/webapps/WebappUrlBarTest.java", "javatests/src/org/chromium/chrome/browser/webapps/WebappVisibilityTest.java", "javatests/src/org/chromium/chrome/browser/webapps/WebApkIntegrationTest.java", "javatests/src/org/chromium/chrome/browser/widget/DualControlLayoutTest.java",
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/ContentViewFocusTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/ContentViewFocusTest.java index 40a2c3c..9c5d1c6 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/ContentViewFocusTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/ContentViewFocusTest.java
@@ -28,7 +28,6 @@ import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeTabbedActivityTestRule; -import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.chrome.test.util.ChromeTabUtils; import org.chromium.chrome.test.util.OverviewModeBehaviorWatcher; import org.chromium.content.browser.ContentViewCore; @@ -37,6 +36,7 @@ import org.chromium.content.browser.test.util.TestTouchUtils; import org.chromium.content.browser.test.util.TouchCommon; import org.chromium.content_public.browser.WebContentsObserver; +import org.chromium.ui.test.util.UiRestriction; import java.util.ArrayDeque; @@ -96,7 +96,7 @@ * @throws Exception * @MediumTest * @Feature({"TabContents"}) - * @Restriction(RESTRICTION_TYPE_PHONE) + * @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) */ @Test @FlakyTest(message = "http://crbug.com/172473") @@ -163,7 +163,7 @@ @Test @MediumTest @Feature({"TabContents"}) - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) public void testHideSelectionOnPhoneTabSwitcher() throws Exception { // Setup OverviewModeBehaviorWatcher showWatcher = new OverviewModeBehaviorWatcher(
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/ExampleUiCaptureTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/ExampleUiCaptureTest.java index d88487d7..b35a064 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/ExampleUiCaptureTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/ExampleUiCaptureTest.java
@@ -4,8 +4,6 @@ package org.chromium.chrome.browser; -import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_PHONE; - import android.support.test.espresso.Espresso; import android.support.test.espresso.action.ViewActions; import android.support.test.espresso.matcher.ViewMatchers; @@ -23,6 +21,7 @@ import org.chromium.chrome.R; import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; +import org.chromium.ui.test.util.UiRestriction; import java.io.IOException; @@ -31,7 +30,7 @@ */ @RunWith(ChromeJUnit4ClassRunner.class) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -@Restriction(RESTRICTION_TYPE_PHONE) // Tab switcher button only exists on phones. +@Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) // Tab switcher button only exists on phones. @ScreenShooter.Directory("Example") public class ExampleUiCaptureTest { @Rule
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/NavigateTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/NavigateTest.java index 4285ea0..9163dbb 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/NavigateTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/NavigateTest.java
@@ -37,7 +37,6 @@ import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeTabbedActivityTestRule; -import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.chrome.test.util.ChromeTabUtils; import org.chromium.chrome.test.util.OmniboxTestUtils; import org.chromium.chrome.test.util.browser.TabLoadObserver; @@ -50,6 +49,7 @@ import org.chromium.content.browser.test.util.UiUtils; import org.chromium.net.test.EmbeddedTestServer; import org.chromium.net.test.util.TestWebServer; +import org.chromium.ui.test.util.UiRestriction; import java.util.Locale; import java.util.concurrent.ExecutionException; @@ -169,7 +169,7 @@ @Test @DisabledTest(message = "crbug.com/516018") - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @MediumTest @Feature({"Navigation"}) public void testNavigateMany() throws Exception { @@ -374,7 +374,7 @@ * Test back and forward buttons. */ @Test - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @MediumTest @Feature({"Navigation"}) public void testNavigateBackAndForwardButtons() throws Exception {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/TabCountLabelTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/TabCountLabelTest.java index 23f5f1c..ec2a13c 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/TabCountLabelTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/TabCountLabelTest.java
@@ -23,8 +23,8 @@ import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeTabbedActivityTestRule; -import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.chrome.test.util.ChromeTabUtils; +import org.chromium.ui.test.util.UiRestriction; /** * Test suite for the tab count widget on the phone toolbar. @@ -59,7 +59,7 @@ @Test @MediumTest @Feature({"Browser", "Main"}) - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @RetryOnFailure public void testTabCountLabel() throws InterruptedException { final int tabCount = mActivityTestRule.getActivity().getCurrentTabModel().getCount();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/TabThemeTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/TabThemeTest.java index 4dc081e..9fbd505 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/TabThemeTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/TabThemeTest.java
@@ -23,8 +23,8 @@ import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.net.test.EmbeddedTestServer; +import org.chromium.ui.test.util.UiRestriction; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeoutException; @@ -91,7 +91,7 @@ @Test @Feature({"Toolbar-Theme-Color"}) @MediumTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @RetryOnFailure public void testThemeColorIsCorrect() throws ExecutionException, InterruptedException, TimeoutException {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/TabsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/TabsTest.java index 77b5e01..7a22b73 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/TabsTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/TabsTest.java
@@ -54,7 +54,6 @@ import org.chromium.chrome.browser.toolbar.ToolbarPhone; import org.chromium.chrome.test.ChromeTabbedActivityTestBase; import org.chromium.chrome.test.util.ApplicationTestUtils; -import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.chrome.test.util.ChromeTabUtils; import org.chromium.chrome.test.util.MenuUtils; import org.chromium.chrome.test.util.NewTabPageTestUtils; @@ -69,6 +68,7 @@ import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.browser.WebContentsObserver; import org.chromium.net.test.EmbeddedTestServer; +import org.chromium.ui.test.util.UiRestriction; import java.io.File; import java.util.Locale; @@ -205,7 +205,7 @@ * https://crbug.com/490473 * @LargeTest * @Feature({"Android-TabSwitcher"}) - * @Restriction(RESTRICTION_TYPE_PHONE) + * @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) */ @DisabledTest public void testOpenAndCloseNewTabButton() throws InterruptedException { @@ -264,7 +264,7 @@ * keyboard. */ @LargeTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @Feature({"Android-TabSwitcher"}) @RetryOnFailure public void testHideKeyboard() throws Exception { @@ -361,7 +361,7 @@ * back. https://crbug.com/697756 */ @MediumTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @Feature({"Android-TabSwitcher"}) @RetryOnFailure public void testTabSwitcherCollapseSelection() throws Exception { @@ -491,7 +491,7 @@ * @throws InterruptedException */ @LargeTest - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) @Feature({"Android-TabSwitcher"}) @RetryOnFailure public void testTabSwitcherPortraitCloseButton() throws InterruptedException { @@ -674,7 +674,7 @@ @Feature({"Android-TabSwitcher"}) */ @DisabledTest(message = "crbug.com/156746") - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) public void testTabsCulling() throws InterruptedException { // Open one more tabs than maxTabsDrawn. final int maxTabsDrawn = 8; @@ -718,7 +718,7 @@ * @Feature({"Android-TabSwitcher"}) */ @FlakyTest(message = "crbug.com/170179") - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) public void testTabsStacking() throws InterruptedException { final int count = openTabs(12, false); @@ -775,7 +775,7 @@ * @Feature({"Android-TabSwitcher"}) */ @FlakyTest(message = "crbug.com/303319") - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) public void testTabSwitcherMemoryLeak() throws InterruptedException { openTabs(4, true); @@ -804,7 +804,7 @@ * Verify that switching back and forth stay stable. This test last for at least 8 seconds. */ @LargeTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @Feature({"Android-TabSwitcher"}) @RetryOnFailure public void testTabSwitcherStability() throws InterruptedException { @@ -825,7 +825,7 @@ @LargeTest @Feature({"Android-TabSwitcher"}) - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) public void testTabSelectionPortrait() throws InterruptedException { getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); checkTabSelection(2, 0, false); @@ -848,7 +848,7 @@ * @Feature({"Android-TabSwitcher"}) */ @FlakyTest(message = "crbug.com/170179") - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) public void testTabSelectionLandscape() throws InterruptedException { getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); checkTabSelection(2, 0, true); @@ -870,7 +870,7 @@ * Verify that we don't crash and show the overview mode after closing the last tab. */ @SmallTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @Feature({"Android-TabSwitcher"}) @RetryOnFailure public void testCloseLastTabFromMain() throws InterruptedException { @@ -1030,7 +1030,7 @@ * Test closing few tabs by swiping them in Overview portrait mode. */ @MediumTest - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) @Feature({"Android-TabSwitcher", "Main"}) @RetryOnFailure public void testCloseTabPortrait() throws InterruptedException { @@ -1056,7 +1056,7 @@ */ @MediumTest @Feature({"Android-TabSwitcher", "Main"}) - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) @RetryOnFailure public void testCloseTabLandscape() throws InterruptedException { mTestServer = EmbeddedTestServer.createAndStartServer(getInstrumentation().getContext()); @@ -1083,7 +1083,7 @@ */ @MediumTest @Feature({"Android-TabSwitcher"}) - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) @RetryOnFailure public void testCloseIncognitoTabPortrait() throws InterruptedException { getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); @@ -1099,7 +1099,7 @@ */ @Feature({"Android-TabSwitcher"}) @MediumTest - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) @RetryOnFailure public void testCloseFiveIncognitoTabPortrait() throws InterruptedException { getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); @@ -1114,7 +1114,7 @@ * Simple swipe gesture should not close tabs when two Tabstacks are open in Overview mode. * Test in Portrait Mode. */ - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) @MediumTest @Feature({"Android-TabSwitcher"}) public void testSwitchTabStackWithoutClosingTabsInPortrait() throws InterruptedException { @@ -1160,7 +1160,7 @@ @MediumTest @Feature({"Android-TabSwitcher"}) */ - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) @DisabledTest(message = "crbug.com/157259") public void testSwitchTabStackWithoutClosingTabsInLandscape() throws InterruptedException { getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); @@ -1202,7 +1202,7 @@ */ @MediumTest @Feature({"Android-TabSwitcher"}) - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) @RetryOnFailure public void testCloseIncognitoTabLandscape() throws InterruptedException { getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); @@ -1218,7 +1218,7 @@ */ @MediumTest @Feature({"Android-TabSwitcher"}) - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) @RetryOnFailure public void testCloseFiveIncognitoTabLandscape() throws InterruptedException { getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); @@ -1248,7 +1248,7 @@ /** * Flaky on instrumentation-yakju-clankium-ics. See https://crbug.com/431296. - * @Restriction(RESTRICTION_TYPE_PHONE) + * @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) * @MediumTest * @Feature({"Android-TabSwitcher"}) */ @@ -1298,7 +1298,7 @@ */ @MediumTest @Feature({"Android-TabSwitcher"}) - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @RetryOnFailure public void testNewTabButton() throws InterruptedException { MenuUtils.invokeCustomMenuActionSync(getInstrumentation(), getActivity(), @@ -1509,7 +1509,7 @@ * Test that swipes and tab transitions are not causing URL bar to be focused. */ @MediumTest - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) @Feature({"Android-TabSwitcher"}) @RetryOnFailure public void testOSKIsNotShownDuringSwipe() throws InterruptedException { @@ -1597,7 +1597,7 @@ */ @MediumTest @Feature({"Android-TabSwitcher"}) - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) public void testOrientationChangeCausesLiveTabReflowInTabSwitcher() throws InterruptedException, TimeoutException { getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/appmenu/ChromeHomeAppMenuTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/appmenu/ChromeHomeAppMenuTest.java index 298000e1..220c79d 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/appmenu/ChromeHomeAppMenuTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/appmenu/ChromeHomeAppMenuTest.java
@@ -8,8 +8,6 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_PHONE; - import android.support.test.filters.SmallTest; import org.junit.Before; @@ -24,12 +22,13 @@ import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.content.browser.test.util.Criteria; import org.chromium.content.browser.test.util.CriteriaHelper; +import org.chromium.ui.test.util.UiRestriction; /** * Tests for the app menu when Chrome Home is enabled. */ @RunWith(ChromeJUnit4ClassRunner.class) -@Restriction(RESTRICTION_TYPE_PHONE) // ChromeHome is only enabled on phones +@Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) // ChromeHome is only enabled on phones public class ChromeHomeAppMenuTest { private static final String TEST_URL = UrlUtils.encodeHtmlDataUri("<html>foo</html>"); private AppMenuHandler mAppMenuHandler;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerTest.java index 328ce20d..3f95bd2 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerTest.java
@@ -41,9 +41,9 @@ import org.chromium.chrome.browser.tabmodel.TabModelUtils; import org.chromium.chrome.browser.util.MathUtils; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.chrome.test.util.browser.tabmodel.MockTabModel.MockTabModelDelegate; import org.chromium.chrome.test.util.browser.tabmodel.MockTabModelSelector; +import org.chromium.ui.test.util.UiRestriction; /** * Unit tests for {@link org.chromium.chrome.browser.compositor.layouts.LayoutManagerChrome} @@ -209,7 +209,7 @@ @SmallTest @Feature({"Android-TabSwitcher"}) @UiThreadTest - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) public void testCreation() { initializeLayoutManagerPhone(0, 0); } @@ -218,7 +218,7 @@ @SmallTest @Feature({"Android-TabSwitcher"}) @UiThreadTest - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) public void testStack() throws Exception { initializeLayoutManagerPhone(3, 0); mManagerPhone.showOverview(true); @@ -235,7 +235,7 @@ @SmallTest @Feature({"Android-TabSwitcher"}) @UiThreadTest - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) public void testStackNoAnimation() throws Exception { initializeLayoutManagerPhone(1, 0); mManagerPhone.showOverview(false); @@ -252,7 +252,7 @@ @SmallTest @Feature({"Android-TabSwitcher"}) @UiThreadTest - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) public void testStackPinch() throws Exception { initializeLayoutManagerPhone(5, 0); // Setting the index to the second to last element ensure the stack can be scrolled in both
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/overlays/strip/TabStripTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/overlays/strip/TabStripTest.java index 1ecb8bb..46ec43e 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/overlays/strip/TabStripTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/overlays/strip/TabStripTest.java
@@ -30,7 +30,6 @@ import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeTabbedActivityTestRule; -import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.chrome.test.util.ChromeTabUtils; import org.chromium.chrome.test.util.TabStripUtils; import org.chromium.content.browser.test.util.Criteria; @@ -38,6 +37,7 @@ import org.chromium.content.browser.test.util.DOMUtils; import org.chromium.ui.UiUtils; import org.chromium.ui.base.LocalizationUtils; +import org.chromium.ui.test.util.UiRestriction; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; @@ -66,7 +66,7 @@ */ @Test @LargeTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @Feature({"TabStrip"}) public void testInitialState() throws Exception { InstrumentationRegistry.getInstrumentation().waitForIdleSync(); @@ -79,7 +79,7 @@ */ @Test @LargeTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @Feature({"TabStrip", "Main"}) public void testNewTabButtonWithOneTab() throws Exception { InstrumentationRegistry.getInstrumentation().waitForIdleSync(); @@ -104,7 +104,7 @@ */ @Test @LargeTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @Feature({"TabStrip"}) @FlakyTest(message = "crbug.com/592961") public void testNewTabButtonWithManyTabs() throws Exception { @@ -139,7 +139,7 @@ */ @Test @LargeTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @Feature({"TabStrip"}) public void testNewTabFromMenu() throws Exception { InstrumentationRegistry.getInstrumentation().waitForIdleSync(); @@ -159,7 +159,7 @@ */ @Test @LargeTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @Feature({"TabStrip"}) public void testNewIncognitoTabFromMenuAtNormalStrip() throws Exception { InstrumentationRegistry.getInstrumentation().waitForIdleSync(); @@ -183,7 +183,7 @@ */ @Test @LargeTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @Feature({"TabStrip"}) public void testSelectWithTwoTabs() throws Exception { ChromeTabUtils.newTabFromMenu( @@ -204,7 +204,7 @@ */ @Test @LargeTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @Feature({"TabStrip"}) public void testSelectWithManyTabs() throws Exception { ChromeTabUtils.newTabsFromMenu( @@ -228,7 +228,7 @@ */ @Test @LargeTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @Feature({"TabStrip"}) public void testCloseTabWithTwoTabs() throws Exception { ChromeTabUtils.newTabFromMenu( @@ -256,7 +256,7 @@ */ @Test @LargeTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @Feature({"TabStrip"}) public void testCloseTabWithManyTabs() throws Exception { ChromeTabUtils.newTabsFromMenu( @@ -286,7 +286,7 @@ */ @Test @LargeTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @Feature({"TabStrip"}) public void testCloseSelectedTab() throws Exception { ChromeTabUtils.newTabFromMenu( @@ -315,7 +315,7 @@ */ @Test @LargeTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @Feature({"TabStrip"}) public void testCloseAllTabsFromTabMenuClosesAllTabs() throws Exception { // 1. Create a second tab @@ -359,7 +359,7 @@ */ @Test @LargeTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @Feature({"TabStrip"}) public void testTabMenuDismissedOnOrientationChange() throws Exception { // 1. Set orientation to portrait @@ -395,7 +395,7 @@ @Test @LargeTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @Feature({"TabStrip"}) public void testToggleIncognitoMode() throws Exception { InstrumentationRegistry.getInstrumentation().waitForIdleSync(); @@ -424,7 +424,7 @@ @Test @LargeTest @Feature({"TabStrip"}) - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) public void testCloseLastIncognitoTab() throws Exception { InstrumentationRegistry.getInstrumentation().waitForIdleSync(); Assert.assertFalse("Expected normal strip to be selected", @@ -453,7 +453,7 @@ @Test @LargeTest @Feature({"TabStrip"}) - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) public void testCloseAllIncognitoTabsFromTabMenu() throws Exception { //1. Create two incognito tabs InstrumentationRegistry.getInstrumentation().waitForIdleSync(); @@ -502,7 +502,7 @@ */ @Test @LargeTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @Feature({"TabStrip"}) public void testTabSelectionViewDoesNotBreakModelSwitch() throws Exception { InstrumentationRegistry.getInstrumentation().waitForIdleSync(); @@ -530,7 +530,7 @@ */ @Test @LargeTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @Feature({"TabStrip"}) public void testSwitchStripStackersWithIncognito() throws Exception { // Open an incognito tab to switch to the incognito model. @@ -581,7 +581,7 @@ */ @Test @LargeTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @Feature({"TabStrip"}) public void testSwitchStripStackersWithLastTabSelected() throws Exception { // Open enough regular tabs to cause the tabs to cascade or the strip to scroll depending @@ -603,7 +603,7 @@ */ @Test @LargeTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @Feature({"TabStrip"}) public void testSwitchStripStackersWithFirstTabSelected() throws Exception { // Open enough regular tabs to cause the tabs to cascade or the strip to scroll depending @@ -641,7 +641,7 @@ */ @Test @LargeTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @Feature({"TabStrip"}) public void testSwitchStripStackersWithMiddleTabSelected() throws Exception { // Open enough regular tabs to cause the tabs to cascade or the strip to scroll depending @@ -667,7 +667,7 @@ */ @Test @LargeTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @Feature({"TabStrip"}) public void testScrollingStripStackerFadeOpacity() throws Exception { // Switch to the ScrollingStripStacker. @@ -711,7 +711,7 @@ */ @Test @LargeTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @Feature({"TabStrip"}) public void testScrollingStripStackerScrollsToSelectedTab() throws Exception { // Switch to the ScrollingStripStacker. @@ -750,7 +750,7 @@ */ @Test @LargeTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @Feature({"TabStrip"}) public void testScrollingStripStackerTabOffsets() throws Exception { // Switch to the ScrollingStripStacker. @@ -825,7 +825,7 @@ */ @Test @LargeTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @Feature({"TabStrip", "IME"}) public void testSwitchingTabsHidesKeyboard() throws Throwable { mActivityTestRule.loadUrl("data:text/html;charset=utf-8,<html><head></head><body><form>"
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManagerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManagerTest.java index 4ddc9d6..bb23d01 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManagerTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManagerTest.java
@@ -68,7 +68,6 @@ import org.chromium.chrome.browser.widget.findinpage.FindToolbar; import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.chrome.test.util.ChromeTabUtils; import org.chromium.chrome.test.util.FullscreenTestUtils; import org.chromium.chrome.test.util.MenuUtils; @@ -82,6 +81,7 @@ import org.chromium.content.browser.test.util.TouchCommon; import org.chromium.net.test.EmbeddedTestServer; import org.chromium.ui.base.PageTransition; +import org.chromium.ui.test.util.UiRestriction; import org.chromium.ui.touch_selection.SelectionEventType; import java.util.Collections; @@ -1282,7 +1282,7 @@ @Test @SmallTest @Feature({"ContextualSearch"}) - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) public void testSwipeExpand() throws InterruptedException, TimeoutException { assertNoSearchesLoaded(); clickWordNode("intelligence"); @@ -1311,7 +1311,7 @@ @Test @SmallTest @Feature({"ContextualSearch"}) - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) public void testLongPressSwipeExpand() throws InterruptedException, TimeoutException { simulateLongPressSearch("search"); assertNoContentViewCore(); @@ -1772,7 +1772,7 @@ @Test @SmallTest @Feature({"ContextualSearch"}) - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @DisableIf.Build(supported_abis_includes = "arm64-v8a", message = "crbug.com/596533") public void testTapLimitForDecided() throws InterruptedException, TimeoutException { mPolicy.setTapLimitForDecidedForTesting(2); @@ -1802,7 +1802,7 @@ @Test @SmallTest @Feature({"ContextualSearch"}) - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @DisableIf.Build(supported_abis_includes = "arm64-v8a", message = "crbug.com/596533") public void testTapLimitForUndecided() throws InterruptedException, TimeoutException { mPolicy.setTapLimitForUndecidedForTesting(2); @@ -1956,7 +1956,7 @@ @Test @SmallTest @Feature({"ContextualSearch"}) - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @DisableIf.Build(supported_abis_includes = "arm64-v8a", message = "crbug.com/596533") public void testAppMenuSuppressedWhenExpanded() throws InterruptedException, TimeoutException { clickWordNode("states"); @@ -2049,7 +2049,7 @@ @Test @SmallTest @Feature({"ContextualSearch"}) - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @DisableIf.Build(supported_abis_includes = "arm64-v8a", message = "crbug.com/596533") public void testPromoOpenCountForUndecided() throws InterruptedException, TimeoutException { mPolicy.overrideDecidedStateForTesting(false); @@ -2078,7 +2078,7 @@ @Test @SmallTest @Feature({"ContextualSearch"}) - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @DisableIf.Build(supported_abis_includes = "arm64-v8a", message = "crbug.com/596533") public void testPromoOpenCountForDecided() throws InterruptedException, TimeoutException { mPolicy.overrideDecidedStateForTesting(true); @@ -2136,7 +2136,7 @@ @Test @SmallTest @Feature({"ContextualSearch"}) - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) public void testNotifyObserverHideAfterLongPress() throws InterruptedException, TimeoutException { TestContextualSearchObserver observer = new TestContextualSearchObserver(); @@ -2155,7 +2155,7 @@ @Test @SmallTest @Feature({"ContextualSearch"}) - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) public void testNotifyObserverHideAfterTap() throws InterruptedException, TimeoutException { TestContextualSearchObserver observer = new TestContextualSearchObserver(); mManager.addObserver(observer); @@ -2369,7 +2369,7 @@ @Test @SmallTest @Feature({"ContextualSearch"}) - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @CommandLineFlags.Add(ContextualSearchFieldTrial.PEEK_PROMO_ENABLED + "=true") @DisableIf.Build(supported_abis_includes = "arm64-v8a", message = "crbug.com/596533") public void testLongPressShowsPeekPromo() @@ -2413,7 +2413,7 @@ @Test @SmallTest @Feature({"ContextualSearch"}) - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) public void testTapContentVisibility() throws InterruptedException, TimeoutException { // Simulate a tap and make sure Content is not visible. simulateTapSearch("search"); @@ -2435,7 +2435,7 @@ @Test @SmallTest @Feature({"ContextualSearch"}) - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) public void testLongPressContentVisibility() throws InterruptedException, TimeoutException { // Simulate a long press and make sure no Content is created. simulateLongPressSearch("search"); @@ -2458,7 +2458,7 @@ @Test @SmallTest @Feature({"ContextualSearch"}) - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) public void testTapMultipleSwipeOnlyLoadsContentOnce() throws InterruptedException, TimeoutException { // Simulate a tap and make sure Content is not visible. @@ -2494,7 +2494,7 @@ @Test @SmallTest @Feature({"ContextualSearch"}) - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) public void testLongPressMultipleSwipeOnlyLoadsContentOnce() throws InterruptedException, TimeoutException { // Simulate a long press and make sure no Content is created. @@ -2569,7 +2569,7 @@ @DisabledTest(message = "crbug.com/551711") @SmallTest @Feature({"ContextualSearch"}) - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) public void testChainedSearchLoadsCorrectSearchTerm() throws InterruptedException, TimeoutException { // Simulate a tap and make sure Content is not visible. @@ -2668,7 +2668,7 @@ @Test @SmallTest @Feature({"ContextualSearch"}) - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) public void testTapExpandNotRemovedFromHistory() throws InterruptedException, TimeoutException { // Simulate a tap and make sure a URL was loaded. simulateTapSearch("search"); @@ -2808,7 +2808,7 @@ @Test @SmallTest @Feature({"ContextualSearch"}) - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) public void testTapContentAndExpandPanelInFullscreen() throws InterruptedException, TimeoutException { // Toggle tab to fulllscreen.
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java index 700a3dd..277588a 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java
@@ -95,7 +95,6 @@ import org.chromium.chrome.browser.util.ColorUtils; import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.chrome.test.util.ChromeTabUtils; import org.chromium.chrome.test.util.browser.LocationSettingsTestUtil; import org.chromium.chrome.test.util.browser.contextmenu.ContextMenuUtils; @@ -108,6 +107,7 @@ import org.chromium.net.test.EmbeddedTestServer; import org.chromium.net.test.util.TestWebServer; import org.chromium.ui.mojom.WindowOpenDisposition; +import org.chromium.ui.test.util.UiRestriction; import java.util.ArrayList; import java.util.List; @@ -710,9 +710,12 @@ /** * Test whether a custom tab can be reparented to a new activity while showing an infobar. + * + * TODO(timloh): Use a different InfoBar type once we only use modals for permission prompts. */ @Test @SmallTest + @CommandLineFlags.Add("disable-features=" + ChromeFeatureList.MODAL_PERMISSION_PROMPTS) @RetryOnFailure public void testTabReparentingInfoBar() throws InterruptedException { LocationSettingsTestUtil.setSystemLocationSettingEnabled(true); @@ -1874,7 +1877,7 @@ */ @Test @DisabledTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @CommandLineFlags.Add(ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE) public void testWarmupAndLaunchRegularChrome() { CustomTabsTestUtils.warmUpAndWait(); @@ -1902,7 +1905,7 @@ */ @Test @SmallTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @CommandLineFlags.Add(ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE) public void testWarmupAndLaunchRightToolbarLayout() { CustomTabsTestUtils.warmUpAndWait(); @@ -2540,7 +2543,9 @@ */ @Test @SmallTest - @CommandLineFlags.Add({"enable-spdy-proxy-auth", "data-reduction-proxy-lo-fi=always-on"}) + @CommandLineFlags.Add({"enable-spdy-proxy-auth", + "disable-features=DataReductionProxyDecidesTransform", + "data-reduction-proxy-lo-fi=always-on"}) @RetryOnFailure public void testLaunchWebLiteURLNoPreviews() throws Exception { final String testUrl = WEBLITE_PREFIX + mTestPage; @@ -2557,7 +2562,8 @@ */ @Test @SmallTest - @CommandLineFlags.Add({"enable-spdy-proxy-auth", "enable-data-reduction-proxy-lite-page"}) + @CommandLineFlags.Add({"enable-spdy-proxy-auth", + "disable-features=DataReductionProxyDecidesTransform"}) @RetryOnFailure public void testLaunchWebLiteURLNoLoFi() throws Exception { final String testUrl = WEBLITE_PREFIX + mTestPage;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/dom_distiller/DistillabilityServiceTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/dom_distiller/DistillabilityServiceTest.java index 86b72a1..7794b9e0 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/dom_distiller/DistillabilityServiceTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/dom_distiller/DistillabilityServiceTest.java
@@ -26,10 +26,10 @@ import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnPageFinishedHelper; import org.chromium.content.browser.test.util.TestWebContentsObserver; import org.chromium.net.test.EmbeddedTestServer; +import org.chromium.ui.test.util.UiRestriction; import java.util.concurrent.TimeoutException; @@ -58,7 +58,7 @@ @Test @Feature({"Distillability-Service"}) @MediumTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) public void testServiceAliveAfterNativePage() throws InterruptedException, TimeoutException { EmbeddedTestServer testServer = EmbeddedTestServer.createAndStartServer( InstrumentationRegistry.getInstrumentation().getContext());
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadActivityTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadActivityTest.java index 85e8ac33..965581b4f 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadActivityTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadActivityTest.java
@@ -35,16 +35,16 @@ import org.chromium.chrome.browser.snackbar.SnackbarManager; import org.chromium.chrome.browser.util.IntentUtils; import org.chromium.chrome.browser.widget.selection.SelectionDelegate.SelectionObserver; -import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.content.browser.test.util.Criteria; import org.chromium.content.browser.test.util.CriteriaHelper; +import org.chromium.ui.test.util.UiRestriction; import java.util.List; /** * Tests the DownloadActivity and the DownloadManagerUi. */ -@Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) +@Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) public class DownloadActivityTest extends BaseActivityInstrumentationTestCase<DownloadActivity> { private static class TestObserver extends RecyclerView.AdapterDataObserver
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/UrlOverridingTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/UrlOverridingTest.java index f9ac32cec..ca3b38b 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/UrlOverridingTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/UrlOverridingTest.java
@@ -37,13 +37,13 @@ import org.chromium.chrome.browser.tabmodel.EmptyTabModelSelectorObserver; import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.content.browser.test.util.Criteria; import org.chromium.content.browser.test.util.CriteriaHelper; import org.chromium.content.browser.test.util.TouchCommon; import org.chromium.content_public.browser.LoadUrlParams; import org.chromium.net.test.EmbeddedTestServer; import org.chromium.ui.base.PageTransition; +import org.chromium.ui.test.util.UiRestriction; import java.io.UnsupportedEncodingException; import java.util.concurrent.Callable; @@ -360,7 +360,7 @@ @Test @SmallTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @RetryOnFailure public void testOpenWindowFromUserGesture() throws InterruptedException { loadUrlAndWaitForIntentUrl(mTestServer.getURL(OPEN_WINDOW_FROM_USER_GESTURE_PAGE),
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/history/HistoryActivityTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/history/HistoryActivityTest.java index 73cc61e..b87a85d8 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/history/HistoryActivityTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/history/HistoryActivityTest.java
@@ -40,13 +40,13 @@ import org.chromium.chrome.browser.widget.selection.SelectableItemView; import org.chromium.chrome.browser.widget.selection.SelectableItemViewHolder; import org.chromium.chrome.browser.widget.selection.SelectionDelegate.SelectionObserver; -import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.chrome.test.util.browser.Features; import org.chromium.chrome.test.util.browser.signin.SigninTestUtil; import org.chromium.chrome.test.util.browser.sync.SyncTestUtil; import org.chromium.components.signin.ChromeSigninController; import org.chromium.content.browser.test.util.Criteria; import org.chromium.content.browser.test.util.CriteriaHelper; +import org.chromium.ui.test.util.UiRestriction; import java.util.Date; import java.util.List; @@ -56,7 +56,7 @@ /** * Tests the {@link HistoryActivity}. */ -@Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) +@Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @RetryOnFailure(message = "crbug.com/752520") public class HistoryActivityTest extends BaseActivityInstrumentationTestCase<HistoryActivity> { private static class TestObserver extends RecyclerView.AdapterDataObserver
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/infobar/InfoBarTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/infobar/InfoBarTest.java index 7c1150bd..90bc0418 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/infobar/InfoBarTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/infobar/InfoBarTest.java
@@ -28,6 +28,7 @@ import org.chromium.base.test.util.UrlUtils; import org.chromium.chrome.R; import org.chromium.chrome.browser.ChromeActivity; +import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.ChromeSwitches; import org.chromium.chrome.browser.WebContentsFactory; import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings; @@ -205,9 +206,12 @@ /** * Verify Geolocation creates an InfoBar. + * + * TODO(timloh): Remove this once we only use modals for permission prompts. */ @Test @MediumTest + @CommandLineFlags.Add("disable-features=" + ChromeFeatureList.MODAL_PERMISSION_PROMPTS) @Feature({"Browser", "Main"}) @RetryOnFailure public void testInfoBarForGeolocation() throws InterruptedException, TimeoutException { @@ -226,12 +230,14 @@ Assert.assertTrue("Wrong infobar count", mActivityTestRule.getInfoBars().isEmpty()); } - /** * Verify Geolocation creates an InfoBar and that it's destroyed when navigating back. + * + * TODO(timloh): Use a different InfoBar type once we only use modals for permission prompts. */ @Test @MediumTest + @CommandLineFlags.Add("disable-features=" + ChromeFeatureList.MODAL_PERMISSION_PROMPTS) @Feature({"Browser"}) @RetryOnFailure public void testInfoBarForGeolocationDisappearsOnBack() @@ -553,9 +559,12 @@ /** * Verify InfoBarContainers swap the WebContents they are monitoring properly. + * + * TODO(timloh): Use a different InfoBar type once we only use modals for permission prompts. */ @Test @MediumTest + @CommandLineFlags.Add("disable-features=" + ChromeFeatureList.MODAL_PERMISSION_PROMPTS) @Feature({"Browser", "Main"}) @RetryOnFailure public void testInfoBarContainerSwapsWebContents()
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/media/router/MediaRouterIntegrationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/media/router/MediaRouterIntegrationTest.java index 963e3c1..364e930 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/media/router/MediaRouterIntegrationTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/media/router/MediaRouterIntegrationTest.java
@@ -30,7 +30,6 @@ import org.chromium.chrome.browser.media.RouterTestUtils; import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.content.browser.test.util.ClickUtils; import org.chromium.content.browser.test.util.Criteria; import org.chromium.content.browser.test.util.CriteriaHelper; @@ -38,6 +37,7 @@ import org.chromium.content.common.ContentSwitches; import org.chromium.content_public.browser.WebContents; import org.chromium.net.test.EmbeddedTestServer; +import org.chromium.ui.test.util.UiRestriction; import java.io.StringWriter; import java.util.concurrent.TimeoutException; @@ -210,7 +210,7 @@ } @Test - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) @Feature({"MediaRouter"}) @LargeTest public void testBasic() throws InterruptedException, TimeoutException { @@ -232,7 +232,7 @@ } @Test - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) @Feature({"MediaRouter"}) @LargeTest public void testSendAndOnMessage() throws InterruptedException, TimeoutException { @@ -252,7 +252,7 @@ } @Test - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) @Feature({"MediaRouter"}) @LargeTest @RetryOnFailure @@ -274,7 +274,7 @@ } @Test - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) @Feature({"MediaRouter"}) @LargeTest @RetryOnFailure @@ -293,7 +293,7 @@ } @Test - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) @Feature({"MediaRouter"}) @LargeTest public void testFailCreateRoute() throws InterruptedException, TimeoutException { @@ -311,7 +311,7 @@ } @Test - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) @Feature({"MediaRouter"}) @LargeTest @RetryOnFailure @@ -339,7 +339,7 @@ } @Test - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) @Feature({"MediaRouter"}) @LargeTest @RetryOnFailure @@ -365,7 +365,7 @@ } @Test - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) @Feature({"MediaRouter"}) @LargeTest @RetryOnFailure
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/cards/NewTabPageRecyclerViewTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/cards/NewTabPageRecyclerViewTest.java index 5121ec7..ee91e510 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/cards/NewTabPageRecyclerViewTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/cards/NewTabPageRecyclerViewTest.java
@@ -40,7 +40,6 @@ import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeTabbedActivityTestRule; -import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.chrome.test.util.ChromeTabUtils; import org.chromium.chrome.test.util.NewTabPageTestUtils; import org.chromium.chrome.test.util.browser.RecyclerViewTestUtils; @@ -50,6 +49,7 @@ import org.chromium.content.browser.test.util.TestTouchUtils; import org.chromium.content.browser.test.util.TouchCommon; import org.chromium.net.test.EmbeddedTestServer; +import org.chromium.ui.test.util.UiRestriction; import java.util.ArrayList; import java.util.Arrays; @@ -241,7 +241,7 @@ @Test @MediumTest @Feature({"NewTabPage"}) - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE}) @CommandLineFlags.Add({"disable-features=" + ChromeFeatureList.NTP_CONDENSED_LAYOUT}) public void testSnapScroll_noCondensedLayout() { setSuggestionsAndWaitForUpdate(0); @@ -278,7 +278,7 @@ @Test @MediumTest @Feature({"NewTabPage"}) - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE}) @CommandLineFlags.Add({"enable-features=" + ChromeFeatureList.NTP_CONDENSED_LAYOUT}) public void testSnapScroll_condensedLayout() { setSuggestionsAndWaitForUpdate(0); @@ -307,7 +307,7 @@ @Test @MediumTest @Feature({"NewTabPage"}) - @Restriction({ChromeRestriction.RESTRICTION_TYPE_TABLET}) + @Restriction({UiRestriction.RESTRICTION_TYPE_TABLET}) public void testSnapScroll_tablet() { setSuggestionsAndWaitForUpdate(0);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/omaha/UpdateMenuItemHelperTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/omaha/UpdateMenuItemHelperTest.java index 27866b4..5013a10 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/omaha/UpdateMenuItemHelperTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/omaha/UpdateMenuItemHelperTest.java
@@ -25,11 +25,11 @@ import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeTabbedActivityTestRule; -import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.chrome.test.util.OverviewModeBehaviorWatcher; import org.chromium.content.browser.test.util.Criteria; import org.chromium.content.browser.test.util.CriteriaHelper; import org.chromium.content.browser.test.util.TouchCommon; +import org.chromium.ui.test.util.UiRestriction; /** * Tests for the UpdateMenuItemHelper. @@ -206,7 +206,7 @@ @Test @MediumTest @Feature({"Omaha"}) - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @RetryOnFailure public void testMenuItemNotShownInOverview() throws Exception { checkUpdateMenuItemIsShowing("0.0.0.0", "1.2.3.4");
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/GeolocationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/GeolocationTest.java index 5b07983..08f64a45 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/GeolocationTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/GeolocationTest.java
@@ -83,27 +83,15 @@ } /** - * Verify Geolocation creates a dialog and receives a mock location when dialogs are explicitly - * enabled and permitted to trigger without a gesture. - * @throws Exception - */ - @MediumTest - @CommandLineFlags.Add({NO_GESTURE_FEATURE, FORCE_FIELDTRIAL, FORCE_FIELDTRIAL_PARAMS}) - @Feature({"Location", "Main"}) - public void testGeolocationPlumbingAllowedDialogNoGesture() throws Exception { - runTest("initiate_getCurrentPosition()", 1, false, true, false, false); - } - - /** - * Verify Geolocation shows an infobar and receives a mock location if the modal flag is on but - * no user gesture is specified. + * Verify Geolocation creates a dialog and receives a mock location when dialogs are + * enabled and there is no user gesture. * @throws Exception */ @MediumTest @CommandLineFlags.Add("enable-features=" + MODAL_FLAG) @Feature({"Location", "Main"}) - public void testGeolocationPlumbingAllowedNoGestureShowsInfoBar() throws Exception { - runTest("initiate_getCurrentPosition()", 1, false, false, false, false); + public void testGeolocationPlumbingAllowedDialogNoGesture() throws Exception { + runTest("initiate_getCurrentPosition()", 1, false, true, false, false); } /**
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/MediaTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/MediaTest.java index 3cf63bb6..ca6458b 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/MediaTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/MediaTest.java
@@ -70,16 +70,16 @@ } /** - * Verify asking for camera with no gesture creates an infobar when the modal flag is turned on, + * Verify asking for camera with no gesture creates a dialog when the modal flag is turned on, * and works when the permission is granted. * @throws Exception */ @MediumTest @Feature({"MediaPermissions", "Main"}) @CommandLineFlags.Add({FAKE_DEVICE, "enable-features=" + MODAL_FLAG}) - public void testCameraPermissionsPlumbingNoGestureCreatesInfoBar() throws Exception { + public void testCameraPermissionsPlumbingDialog() throws Exception { testMediaPermissionsPlumbing( - "Camera count:", "initiate_getCamera()", 1, false, false, false, false); + "Camera count:", "initiate_getCamera()", 1, false, true, false, false); } /** @@ -89,7 +89,7 @@ */ @MediumTest @Feature({"MediaPermissions", "Main"}) - @CommandLineFlags.Add(FAKE_DEVICE) + @CommandLineFlags.Add({FAKE_DEVICE, "disable-features=" + MODAL_FLAG}) public void testCombinedPermissionsPlumbing() throws Exception { testMediaPermissionsPlumbing( "Combined count:", "initiate_getCombined()", 1, false, false, false, false);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/PermissionNavigationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/PermissionNavigationTest.java index 2c6fbdb..a03bffa 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/PermissionNavigationTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/PermissionNavigationTest.java
@@ -29,7 +29,7 @@ */ // @MediumTest // @Feature({"Permissions"}) - @CommandLineFlags.Add({NO_GESTURE_FEATURE, FORCE_FIELDTRIAL, FORCE_FIELDTRIAL_PARAMS}) + @CommandLineFlags.Add("enable-features=" + MODAL_FLAG) // Flaky on official bots, https://crbug.com/699851#c8 @DisabledTest public void testNavigationDismissesModalPermissionPrompt() throws Exception {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/PermissionTestCaseBase.java b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/PermissionTestCaseBase.java index 43ace6a5..18070ad1 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/PermissionTestCaseBase.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/PermissionTestCaseBase.java
@@ -12,6 +12,7 @@ import org.chromium.base.test.util.CallbackHelper; import org.chromium.chrome.R; import org.chromium.chrome.browser.ChromeActivity; +import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.infobar.InfoBar; import org.chromium.chrome.browser.infobar.InfoBarContainer; import org.chromium.chrome.browser.tab.EmptyTabObserver; @@ -44,14 +45,9 @@ * JS call with a gesture, and whether an infobar or a dialog is expected. */ public class PermissionTestCaseBase extends ChromeActivityTestCaseBase<ChromeActivity> { - protected static final String MODAL_FLAG = "ModalPermissionPrompts"; + protected static final String MODAL_FLAG = ChromeFeatureList.MODAL_PERMISSION_PROMPTS; protected static final String TOGGLE_FLAG = "DisplayPersistenceToggleInPermissionPrompts"; protected static final String MODAL_TOGGLE_FLAG = MODAL_FLAG + "," + TOGGLE_FLAG; - protected static final String NO_GESTURE_FEATURE = - "enable-features=ModalPermissionPrompts<ModalPrompts"; - protected static final String FORCE_FIELDTRIAL = "force-fieldtrials=ModalPrompts/Group1"; - protected static final String FORCE_FIELDTRIAL_PARAMS = - "force-fieldtrial-params=ModalPrompts.Group1:require_gesture/false"; protected static final String PERMISSION_REQUEST_MANAGER_FLAG = "UseGroupedPermissionInfobars"; private InfoBarTestAnimationListener mListener;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/QuotaTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/QuotaTest.java index f79130c..faf03392 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/QuotaTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/QuotaTest.java
@@ -36,7 +36,7 @@ */ @MediumTest @Feature({"QuotaPermissions"}) - @CommandLineFlags.Add({"enable-features=" + PERMISSION_REQUEST_MANAGER_FLAG}) + @CommandLineFlags.Add("disable-features=" + MODAL_FLAG) public void testQuotaShowsInfobar() throws Exception { testQuotaPermissionsPlumbing("initiate_requestQuota(1024)", 1, false, false, false, false); }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/website/SiteSettingsPreferencesTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/website/SiteSettingsPreferencesTest.java index 6d9b5484..dc664a8 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/website/SiteSettingsPreferencesTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/website/SiteSettingsPreferencesTest.java
@@ -21,6 +21,7 @@ import org.chromium.base.test.util.Feature; import org.chromium.base.test.util.RetryOnFailure; import org.chromium.chrome.browser.ChromeActivity; +import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.ChromeSwitches; import org.chromium.chrome.browser.infobar.InfoBarContainer; import org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference; @@ -103,9 +104,12 @@ /** * Sets Allow Location Enabled to be true and make sure it is set correctly. + * + * TODO(timloh): Update this test once modals are enabled everywhere. */ @Test @SmallTest + @CommandLineFlags.Add("disable-features=" + ChromeFeatureList.MODAL_PERMISSION_PROMPTS) @Feature({"Preferences"}) public void testSetAllowLocationEnabled() throws Exception { setAllowLocation(true); @@ -121,9 +125,12 @@ /** * Sets Allow Location Enabled to be false and make sure it is set correctly. + * + * TODO(timloh): Update this test once modals are enabled everywhere. */ @Test @SmallTest + @CommandLineFlags.Add("disable-features=" + ChromeFeatureList.MODAL_PERMISSION_PROMPTS) @Feature({"Preferences"}) public void testSetAllowLocationNotEnabled() throws Exception { setAllowLocation(false); @@ -485,12 +492,16 @@ /** * Sets Allow Mic Enabled to be false and make sure it is set correctly. + * + * TODO(timloh): Update this test once modals are enabled everywhere. + * * @throws Exception */ @Test @SmallTest @Feature({"Preferences"}) - @CommandLineFlags.Add(ContentSwitches.USE_FAKE_DEVICE_FOR_MEDIA_STREAM) + @CommandLineFlags.Add({ContentSwitches.USE_FAKE_DEVICE_FOR_MEDIA_STREAM, + "disable-features=" + ChromeFeatureList.MODAL_PERMISSION_PROMPTS}) public void testMicBlocked() throws Exception { setEnableMic(false); @@ -505,12 +516,16 @@ /** * Sets Allow Camera Enabled to be true and make sure it is set correctly. + * + * TODO(timloh): Update this test once modals are enabled everywhere. + * * @throws Exception */ @Test @SmallTest @Feature({"Preferences"}) - @CommandLineFlags.Add(ContentSwitches.USE_FAKE_DEVICE_FOR_MEDIA_STREAM) + @CommandLineFlags.Add({ContentSwitches.USE_FAKE_DEVICE_FOR_MEDIA_STREAM, + "disable-features=" + ChromeFeatureList.MODAL_PERMISSION_PROMPTS}) public void testCameraNotBlocked() throws Exception { setEnableCamera(true); @@ -527,12 +542,16 @@ /** * Sets Allow Mic Enabled to be true and make sure it is set correctly. + * + * TODO(timloh): Update this test once modals are enabled everywhere. + * * @throws Exception */ @Test @SmallTest @Feature({"Preferences"}) - @CommandLineFlags.Add(ContentSwitches.USE_FAKE_DEVICE_FOR_MEDIA_STREAM) + @CommandLineFlags.Add({ContentSwitches.USE_FAKE_DEVICE_FOR_MEDIA_STREAM, + "disable-features=" + ChromeFeatureList.MODAL_PERMISSION_PROMPTS}) public void testMicNotBlocked() throws Exception { setEnableCamera(true);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/search_engines/TemplateUrlServiceTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/search_engines/TemplateUrlServiceTest.java index 8948608..34d9f99 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/search_engines/TemplateUrlServiceTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/search_engines/TemplateUrlServiceTest.java
@@ -22,9 +22,9 @@ import org.chromium.chrome.browser.search_engines.TemplateUrlService.TemplateUrl; import org.chromium.chrome.browser.test.ChromeBrowserTestRule; import org.chromium.chrome.browser.test.ClearAppDataTestRule; -import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.content.browser.test.util.Criteria; import org.chromium.content.browser.test.util.CriteriaHelper; +import org.chromium.ui.test.util.UiRestriction; import java.util.List; import java.util.concurrent.Callable; @@ -100,7 +100,7 @@ @SmallTest @Feature({"SearchEngines"}) @RetryOnFailure - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) // see crbug.com/581268 + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) // see crbug.com/581268 public void testLoadUrlService() { waitForTemplateUrlServiceToLoad();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/HomeSheetTilesUiCaptureTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/HomeSheetTilesUiCaptureTest.java index b8c70cc..e07cb617 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/HomeSheetTilesUiCaptureTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/HomeSheetTilesUiCaptureTest.java
@@ -6,7 +6,6 @@ import static org.chromium.base.test.util.ScalableTimeout.scaleTimeout; import static org.chromium.chrome.test.BottomSheetTestRule.ENABLE_CHROME_HOME; -import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_PHONE; import android.support.test.InstrumentationRegistry; import android.support.test.filters.MediumTest; @@ -30,12 +29,13 @@ import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.util.browser.suggestions.FakeSuggestionsSource; import org.chromium.chrome.test.util.browser.suggestions.SuggestionsDependenciesRule; +import org.chromium.ui.test.util.UiRestriction; /** * Tests for the appearance of the tiles in the home sheet. */ @RunWith(ChromeJUnit4ClassRunner.class) -@Restriction(RESTRICTION_TYPE_PHONE) // ChromeHome is only enabled on phones +@Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) // ChromeHome is only enabled on phones // TODO(https://crbug.com/754778) improve annotation processor. We need to remove the currently // registered Feature flags to be able to change them later. @CommandLineFlags.Remove(ENABLE_CHROME_HOME)
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/HomeSheetUiCaptureTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/HomeSheetUiCaptureTest.java index 74a18a6c9..61453892 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/HomeSheetUiCaptureTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/HomeSheetUiCaptureTest.java
@@ -9,7 +9,6 @@ import static org.chromium.base.test.util.ScalableTimeout.scaleTimeout; import static org.chromium.chrome.test.BottomSheetTestRule.ENABLE_CHROME_HOME; -import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_PHONE; import android.support.test.InstrumentationRegistry; import android.support.test.filters.MediumTest; @@ -39,12 +38,13 @@ import org.chromium.chrome.test.util.browser.suggestions.ContentSuggestionsTestUtils; import org.chromium.chrome.test.util.browser.suggestions.FakeSuggestionsSource; import org.chromium.chrome.test.util.browser.suggestions.SuggestionsDependenciesRule; +import org.chromium.ui.test.util.UiRestriction; /** * Tests for the appearance of the special states of the home sheet. */ @RunWith(ChromeJUnit4ClassRunner.class) -@Restriction(RESTRICTION_TYPE_PHONE) // ChromeHome is only enabled on phones +@Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) // ChromeHome is only enabled on phones // TODO(https://crbug.com/754778) improve annotation processor. We need to remove the currently // registered Feature flags to be able to change them later. @CommandLineFlags.Remove(ENABLE_CHROME_HOME)
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetTest.java index 5ca9f5e..c1499ef 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetTest.java
@@ -7,8 +7,6 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_PHONE; - import android.os.SystemClock; import android.support.test.InstrumentationRegistry; import android.support.test.filters.MediumTest; @@ -31,12 +29,13 @@ import org.chromium.chrome.test.util.browser.RecyclerViewTestUtils; import org.chromium.chrome.test.util.browser.suggestions.SuggestionsDependenciesRule; import org.chromium.content.browser.test.util.TestTouchUtils; +import org.chromium.ui.test.util.UiRestriction; /** * Instrumentation tests for {@link SuggestionsBottomSheetContent}. */ @RunWith(ChromeJUnit4ClassRunner.class) -@Restriction(RESTRICTION_TYPE_PHONE) // ChromeHome is only enabled on phones +@Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) // ChromeHome is only enabled on phones public class SuggestionsBottomSheetTest { @Rule public BottomSheetTestRule mActivityRule = new BottomSheetTestRule();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetUiCaptureTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetUiCaptureTest.java index 6f242bd..85cd5fb 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetUiCaptureTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetUiCaptureTest.java
@@ -4,8 +4,6 @@ package org.chromium.chrome.browser.suggestions; -import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_PHONE; - import android.support.test.InstrumentationRegistry; import android.support.test.espresso.Espresso; import android.support.test.espresso.action.ViewActions; @@ -28,12 +26,13 @@ import org.chromium.chrome.test.BottomSheetTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.util.browser.suggestions.SuggestionsDependenciesRule; +import org.chromium.ui.test.util.UiRestriction; /** * Tests for the appearance of Article Snippets. */ @RunWith(ChromeJUnit4ClassRunner.class) -@Restriction(RESTRICTION_TYPE_PHONE) // ChromeHome is only enabled on phones +@Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) // ChromeHome is only enabled on phones public class SuggestionsBottomSheetUiCaptureTest { @Rule public BottomSheetTestRule mActivityTestRule = new BottomSheetTestRule();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TabModelMergingTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TabModelMergingTest.java index 8f7b151..daa9f43 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TabModelMergingTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TabModelMergingTest.java
@@ -39,12 +39,12 @@ import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeTabbedActivityTestRule; -import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.chrome.test.util.ChromeTabUtils; import org.chromium.chrome.test.util.OverviewModeBehaviorWatcher; import org.chromium.content.browser.test.util.Criteria; import org.chromium.content.browser.test.util.CriteriaHelper; import org.chromium.content_public.browser.LoadUrlParams; +import org.chromium.ui.test.util.UiRestriction; /** * Tests merging tab models for Android N+ multi-instance. @@ -355,7 +355,7 @@ @Test @LargeTest @Feature({"TabPersistentStore", "MultiWindow"}) - @Restriction({ChromeRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE, RESTRICTION_TYPE_NON_LOW_END_DEVICE}) public void testMergeWhileInTabSwitcher() throws Exception { OverviewModeBehaviorWatcher overviewModeWatcher = new OverviewModeBehaviorWatcher( mActivity1.getLayoutManager(), true, false);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/UndoTabModelTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/UndoTabModelTest.java index 44a3988..ff196347 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/UndoTabModelTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/UndoTabModelTest.java
@@ -34,11 +34,11 @@ import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeTabbedActivityTestRule; -import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.chrome.test.util.ChromeTabUtils; import org.chromium.content.browser.test.util.Criteria; import org.chromium.content.browser.test.util.CriteriaHelper; import org.chromium.content_public.browser.LoadUrlParams; +import org.chromium.ui.test.util.UiRestriction; import java.util.concurrent.Callable; import java.util.concurrent.TimeoutException; @@ -492,7 +492,7 @@ @MediumTest // TODO(jbudorick): Replace with DisableIf when it supports filtering by device type. // Flaky on tablets, crbug.com/620014. - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @RetryOnFailure public void testTwoTabs() throws InterruptedException { TabModel model = mActivityTestRule.getActivity().getTabModelSelector().getModel(false); @@ -803,7 +803,7 @@ */ @Test @MediumTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) // See crbug.com/633607 + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) // See crbug.com/633607 public void testReverseOrderRestore() throws InterruptedException { TabModel model = mActivityTestRule.getActivity().getTabModelSelector().getModel(false); ChromeTabCreator tabCreator = mActivityTestRule.getActivity().getTabCreator(false); @@ -1344,7 +1344,7 @@ * @throws InterruptedException */ //@MediumTest - //@Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) // See crbug.com/633607 + //@Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) // See crbug.com/633607 // Disabled due to flakiness on linux_android_rel_ng (crbug.com/661429) @Test @DisabledTest @@ -1468,7 +1468,7 @@ */ @Test @MediumTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) // See crbug.com/633607 + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) // See crbug.com/633607 public void testSaveStateCommitsUndos() throws InterruptedException { TabModelSelector selector = mActivityTestRule.getActivity().getTabModelSelector(); TabModel model = selector.getModel(false);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/BrandColorTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/BrandColorTest.java index 7f3eeaf98..768703bb 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/BrandColorTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/BrandColorTest.java
@@ -33,11 +33,11 @@ import org.chromium.chrome.browser.util.ColorUtils; import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.chrome.test.util.DisableInTabbedMode; import org.chromium.content.browser.InterstitialPageDelegateAndroid; import org.chromium.content.browser.test.util.Criteria; import org.chromium.content.browser.test.util.CriteriaHelper; +import org.chromium.ui.test.util.UiRestriction; import java.util.concurrent.Callable; @@ -121,7 +121,7 @@ */ @Test @SmallTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @Feature({"Omnibox"}) public void testNoBrandColor() throws InterruptedException { startMainActivityWithURL(getUrlWithBrandColor("")); @@ -133,7 +133,7 @@ */ @Test @SmallTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @Feature({"Omnibox"}) public void testBrandColorNoAlpha() throws InterruptedException { startMainActivityWithURL(getUrlWithBrandColor(BRAND_COLOR_1)); @@ -145,7 +145,7 @@ */ @Test @SmallTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @Feature({"Omnibox"}) public void testImmediateColorChange() throws InterruptedException { startMainActivityWithURL(getUrlWithBrandColor(BRAND_COLOR_1)); @@ -169,7 +169,7 @@ */ @Test @SmallTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @Feature({"Omnibox"}) public void testBrandColorWithLoadStarted() throws InterruptedException { startMainActivityWithURL(getUrlWithBrandColor(BRAND_COLOR_1)); @@ -191,7 +191,7 @@ */ @Test @SmallTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @Feature({"Omnibox"}) public void testNavigatingToNewBrandColor() throws InterruptedException { startMainActivityWithURL(getUrlWithBrandColor(BRAND_COLOR_1)); @@ -206,7 +206,7 @@ */ @Test @SmallTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @Feature({"Omnibox"}) public void testNavigatingToBrandColorAndBack() throws InterruptedException { startMainActivityWithURL("about:blank"); @@ -238,7 +238,7 @@ */ @Test @SmallTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @DisableInTabbedMode @Feature({"Omnibox"}) public void testBrandColorInterstitial() throws InterruptedException {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/ToolbarTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/ToolbarTest.java index 73edd89..18af243 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/ToolbarTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/ToolbarTest.java
@@ -26,13 +26,13 @@ import org.chromium.chrome.browser.widget.findinpage.FindToolbar; import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.chrome.test.util.MenuUtils; import org.chromium.chrome.test.util.OmniboxTestUtils; import org.chromium.content.browser.test.util.Criteria; import org.chromium.content.browser.test.util.CriteriaHelper; import org.chromium.net.NetworkChangeNotifier; import org.chromium.net.test.EmbeddedTestServer; +import org.chromium.ui.test.util.UiRestriction; /** * Tests for toolbar manager behavior. @@ -114,7 +114,7 @@ @Test @MediumTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @Feature({"Omnibox"}) public void testFindInPageDismissedOnOmniboxFocus() { findInPageFromMenu();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebappUrlBarTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebappUrlBarTest.java deleted file mode 100644 index 2c53dbd..0000000 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebappUrlBarTest.java +++ /dev/null
@@ -1,69 +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.webapps; - -import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.support.test.filters.MediumTest; - -import org.junit.Assert; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; - -import org.chromium.base.test.BaseJUnit4ClassRunner; -import org.chromium.base.test.util.Feature; -import org.chromium.components.security_state.ConnectionSecurityLevel; -import org.chromium.content.browser.test.NativeLibraryTestRule; - -/** - * Tests whether the URL bar updates itself properly. - */ -@RunWith(BaseJUnit4ClassRunner.class) -public class WebappUrlBarTest { - private Context mContext; - - @Rule - public NativeLibraryTestRule mActivityTestRule = new NativeLibraryTestRule(); - - @Before - public void setUp() throws Exception { - mContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - mActivityTestRule.loadNativeLibraryNoBrowserProcess(); - } - - @Test - @MediumTest - @Feature({"Webapps"}) - public void testUrlDisplay() { - WebappUrlBar urlBar = new WebappUrlBar(mContext, null); - - final String scheme = "https://"; - final String host = "lorem.com"; - final String path = "/stuff/and/things.html"; - final String url = scheme + host + path; - final String urlExpectedWhenIconNotShown = scheme + host; - final String urlExpectedWhenIconShown = host; - final int[] securityLevels = {ConnectionSecurityLevel.NONE, - ConnectionSecurityLevel.EV_SECURE, ConnectionSecurityLevel.SECURE, - ConnectionSecurityLevel.HTTP_SHOW_WARNING, - ConnectionSecurityLevel.SECURE_WITH_POLICY_INSTALLED_CERT, - ConnectionSecurityLevel.DANGEROUS}; - - for (int i : securityLevels) { - urlBar.update(url, i); - - int iconResource = urlBar.getCurrentIconResourceForTests(); - if (iconResource == 0) { - Assert.assertEquals( - urlExpectedWhenIconNotShown, urlBar.getDisplayedUrlForTests().toString()); - } else { - Assert.assertEquals( - urlExpectedWhenIconShown, urlBar.getDisplayedUrlForTests().toString()); - } - } - } -}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/OverviewListLayoutTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/OverviewListLayoutTest.java index 3c8bde8..c7fd90e 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/OverviewListLayoutTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/OverviewListLayoutTest.java
@@ -35,7 +35,6 @@ import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeTabbedActivityTestRule; -import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.chrome.test.util.ChromeTabUtils; import org.chromium.chrome.test.util.MenuUtils; import org.chromium.chrome.test.util.TabStripUtils; @@ -44,6 +43,7 @@ import org.chromium.content.browser.test.util.CriteriaHelper; import org.chromium.content.browser.test.util.TestTouchUtils; import org.chromium.content.browser.test.util.TouchCommon; +import org.chromium.ui.test.util.UiRestriction; import java.util.concurrent.Callable; import java.util.concurrent.TimeoutException; @@ -171,7 +171,7 @@ } @Test - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @MediumTest @Feature({"Accessibility"}) public void testCanEnterSwitcher() { @@ -183,7 +183,7 @@ } @Test - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @MediumTest @Feature({"Accessibility"}) public void testCanLeaveSwitcher() { @@ -199,7 +199,7 @@ } @Test - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @MediumTest @Feature({"Accessibility"}) @RetryOnFailure @@ -231,7 +231,7 @@ } @Test - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @MediumTest @Feature({"Accessibility"}) @RetryOnFailure @@ -269,7 +269,7 @@ } @Test - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @MediumTest @Feature({"Accessibility"}) public void testResetSwipe() throws InterruptedException { @@ -292,7 +292,7 @@ } @Test - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @MediumTest @Feature({"Accessibility"}) public void testCloseAndUndo() throws InterruptedException, TimeoutException { @@ -328,7 +328,7 @@ } @Test - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @MediumTest @Feature({"Accessibility"}) public void testCloseAll() throws InterruptedException { @@ -344,7 +344,7 @@ } @Test - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @MediumTest @Feature({"Accessibility"}) @RetryOnFailure @@ -373,7 +373,7 @@ } @Test - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @MediumTest @Feature({"Accessibility"}) public void testModelSwitcherVisibility() throws InterruptedException { @@ -394,7 +394,7 @@ } @Test - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) @MediumTest @Feature({"Accessibility"}) public void testModelSwitcherFunctionality() throws InterruptedException { @@ -456,7 +456,7 @@ } @Test - @Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) + @Restriction(UiRestriction.RESTRICTION_TYPE_TABLET) @MediumTest @Feature({"Accessibility"}) public void testCloseTabThroughTabStrip() throws InterruptedException, TimeoutException {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/ToolbarProgressBarTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/ToolbarProgressBarTest.java index 4a29c5a..4275321 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/ToolbarProgressBarTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/ToolbarProgressBarTest.java
@@ -25,7 +25,6 @@ import org.chromium.chrome.browser.ChromeSwitches; import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.content.browser.test.util.Criteria; import org.chromium.content.browser.test.util.CriteriaHelper; import org.chromium.content.browser.test.util.JavaScriptUtils; @@ -34,6 +33,7 @@ import org.chromium.content.browser.test.util.TestWebContentsObserver; import org.chromium.content_public.browser.WebContents; import org.chromium.net.test.EmbeddedTestServer; +import org.chromium.ui.test.util.UiRestriction; import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicBoolean; @@ -65,7 +65,7 @@ @Test @Feature({"Android-Toolbar"}) @MediumTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) public void testToolbarTraversesScreenOnce() throws InterruptedException, TimeoutException { EmbeddedTestServer testServer = EmbeddedTestServer.createAndStartServer( InstrumentationRegistry.getInstrumentation().getContext()); @@ -126,7 +126,7 @@ @Test @Feature({"Android-Toolbar"}) @MediumTest - @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) + @Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) public void testProgressBarDisappearsAfterFastShowHide() throws InterruptedException { // onAnimationEnd will be signaled on progress bar showing/hiding animation end. final Object onAnimationEnd = new Object();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetBackBehaviorTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetBackBehaviorTest.java index b6a1e10..1d009766 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetBackBehaviorTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetBackBehaviorTest.java
@@ -8,8 +8,6 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_PHONE; - import android.content.Intent; import android.net.Uri; import android.provider.Browser; @@ -35,6 +33,7 @@ import org.chromium.content.browser.test.util.Criteria; import org.chromium.content.browser.test.util.CriteriaHelper; import org.chromium.net.test.EmbeddedTestServer; +import org.chromium.ui.test.util.UiRestriction; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; @@ -47,7 +46,7 @@ @CommandLineFlags.Add({BottomSheetTestRule.ENABLE_CHROME_HOME, ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, BottomSheetTestRule.DISABLE_NETWORK_PREDICTION_FLAG}) -@Restriction(RESTRICTION_TYPE_PHONE) // ChromeHome is only enabled on phones +@Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) // ChromeHome is only enabled on phones public class BottomSheetBackBehaviorTest { private static final String TEST_PAGE = "/chrome/test/data/android/simple.html";
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetContentControllerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetContentControllerTest.java index 2522e81..a821317d 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetContentControllerTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetContentControllerTest.java
@@ -7,8 +7,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_PHONE; - import android.support.test.filters.SmallTest; import org.junit.Before; @@ -29,12 +27,13 @@ import org.chromium.chrome.browser.suggestions.SuggestionsBottomSheetContent; import org.chromium.chrome.test.BottomSheetTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; +import org.chromium.ui.test.util.UiRestriction; import java.util.concurrent.TimeoutException; /** This class tests the functionality of the {@link BottomSheetContentController}. */ @RunWith(ChromeJUnit4ClassRunner.class) -@Restriction(RESTRICTION_TYPE_PHONE) // ChromeHome is only enabled on phones +@Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) // ChromeHome is only enabled on phones public class BottomSheetContentControllerTest { private BottomSheetTestRule.Observer mObserver; private BottomSheet mBottomSheet;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetNewTabControllerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetNewTabControllerTest.java index a1d2c829..07d4468b 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetNewTabControllerTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetNewTabControllerTest.java
@@ -8,8 +8,6 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_PHONE; - import android.support.test.InstrumentationRegistry; import android.support.test.filters.SmallTest; @@ -39,6 +37,7 @@ import org.chromium.chrome.test.util.ChromeTabUtils; import org.chromium.chrome.test.util.MenuUtils; import org.chromium.content_public.browser.LoadUrlParams; +import org.chromium.ui.test.util.UiRestriction; import java.util.concurrent.TimeoutException; @@ -49,7 +48,7 @@ @CommandLineFlags.Add({BottomSheetTestRule.ENABLE_CHROME_HOME, ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, BottomSheetTestRule.DISABLE_NETWORK_PREDICTION_FLAG}) -@Restriction(RESTRICTION_TYPE_PHONE) // ChromeHome is only enabled on phones +@Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) // ChromeHome is only enabled on phones public class BottomSheetNewTabControllerTest { private FadingBackgroundView mFadingBackgroundView; private BottomSheet mBottomSheet;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetObserverTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetObserverTest.java index 7ce167a..7ae9384 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetObserverTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetObserverTest.java
@@ -7,8 +7,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import static org.chromium.chrome.test.util.ChromeRestriction.RESTRICTION_TYPE_PHONE; - import android.support.test.filters.MediumTest; import org.junit.Before; @@ -26,12 +24,13 @@ import org.chromium.chrome.browser.util.MathUtils; import org.chromium.chrome.test.BottomSheetTestRule; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; +import org.chromium.ui.test.util.UiRestriction; import java.util.concurrent.TimeoutException; /** This class tests the functionality of the {@link BottomSheetObserver}. */ @RunWith(ChromeJUnit4ClassRunner.class) -@Restriction(RESTRICTION_TYPE_PHONE) // ChromeHome is only enabled on phones +@Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) // ChromeHome is only enabled on phones public class BottomSheetObserverTest { @Rule public BottomSheetTestRule mBottomSheetTestRule = new BottomSheetTestRule();
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/externalauth/ExternalAuthUtilsTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/externalauth/ExternalAuthUtilsTest.java index 1d5bfc3..80192c4 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/externalauth/ExternalAuthUtilsTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/externalauth/ExternalAuthUtilsTest.java
@@ -50,8 +50,6 @@ public void testCanUseGooglePlayServicesSuccess() { when(mExternalAuthUtils.canUseGooglePlayServices(any(Context.class), any(UserRecoverableErrorHandler.class))).thenCallRealMethod(); - when(mExternalAuthUtils.canUseGooglePlayServicesResultCode(any(Context.class), - any(UserRecoverableErrorHandler.class))).thenCallRealMethod(); when(mExternalAuthUtils.checkGooglePlayServicesAvailable(mContext)).thenReturn( ConnectionResult.SUCCESS); assertTrue(mExternalAuthUtils.canUseGooglePlayServices( @@ -73,8 +71,6 @@ public void testCanUseGooglePlayServicesNonUserRecoverableFailure() { when(mExternalAuthUtils.canUseGooglePlayServices(any(Context.class), any(UserRecoverableErrorHandler.class))).thenCallRealMethod(); - when(mExternalAuthUtils.canUseGooglePlayServicesResultCode(any(Context.class), - any(UserRecoverableErrorHandler.class))).thenCallRealMethod(); when(mExternalAuthUtils.checkGooglePlayServicesAvailable(mContext)).thenReturn(ERR); when(mExternalAuthUtils.isUserRecoverableError(ERR)).thenReturn(false); // Non-recoverable assertFalse(mExternalAuthUtils.canUseGooglePlayServices( @@ -95,8 +91,6 @@ public void testCanUseGooglePlayServicesUserRecoverableFailure() { when(mExternalAuthUtils.canUseGooglePlayServices(any(Context.class), any(UserRecoverableErrorHandler.class))).thenCallRealMethod(); - when(mExternalAuthUtils.canUseGooglePlayServicesResultCode(any(Context.class), - any(UserRecoverableErrorHandler.class))).thenCallRealMethod(); doNothing().when(mUserRecoverableErrorHandler).handleError(mContext, ERR); when(mExternalAuthUtils.checkGooglePlayServicesAvailable(mContext)).thenReturn(ERR); when(mExternalAuthUtils.isUserRecoverableError(ERR)).thenReturn(true); // Recoverable
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index cfdff8e6..41d3a17 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd
@@ -5424,18 +5424,6 @@ Reset to default zoom level </message> - <!-- Accessibility permission --> - <message name="IDS_ACCESSIBILITY_EVENTS_PERMISSION_FRAGMENT" desc="Permission request shown if the user is visiting a site that wants to respond to accessibility events, for example if the user is using a screen reader and the site has custom accessibility features. Follows a prompt: 'This site would like to:'"> - Respond to Accessibility Events - </message> - <if expr="is_android"> - <message name="IDS_ACCESSIBILITY_EVENTS_INFOBAR_QUESTION" desc="Question asked on the info bar whenever URL wants to listen to accessibility events, for example if the user has a screen reader or braille device enabled"> - <ph name="URL"> - $1<ex>maps.google.com</ex> - </ph> wants to respond to accessibility events. - </message> - </if> - <!-- Feature Engagement Tracker strings --> <message name="IDS_BOOKMARK_PROMO_0" desc="Text shown on promotional UI appearing next to the Bookmarks button, which encourages users to use it."> Bookmark this page to easily find it later
diff --git a/chrome/app/resources/chromium_strings_en-GB.xtb b/chrome/app/resources/chromium_strings_en-GB.xtb index 61bab84..e8aec1f 100644 --- a/chrome/app/resources/chromium_strings_en-GB.xtb +++ b/chrome/app/resources/chromium_strings_en-GB.xtb
@@ -101,6 +101,7 @@ <translation id="4271805377592243930">Get help with Chromium</translation> <translation id="4285930937574705105">Installation failed due to unspecified error. If Google Chrome is currently running, please close it and try again.</translation> <translation id="4330585738697551178">This module is known to conflict with Chromium.</translation> +<translation id="4421155425831608516">Sign in to Chromium is disabled by the administrator of this device.</translation> <translation id="4423735387467980091">Customise and control Chromium</translation> <translation id="4458285410772214805">Please sign out and sign in again for this change to take effect.</translation> <translation id="4469812139324097969">Chromium is out of date because it hasn't been relaunched for a while. An update is available and will be applied as soon as you relaunch.</translation>
diff --git a/chrome/app/resources/chromium_strings_kn.xtb b/chrome/app/resources/chromium_strings_kn.xtb index d58b76a..5b90f780 100644 --- a/chrome/app/resources/chromium_strings_kn.xtb +++ b/chrome/app/resources/chromium_strings_kn.xtb
@@ -150,7 +150,7 @@ <translation id="6055895534982063517">Chromium ನ ಹೊಸ ಆವೃತ್ತಿ ಲಭ್ಯವಿದೆ, ಮತ್ತು ಇದು ಎಂದಿಗಿಂತಲೂ ವೇಗವಾಗಿದೆ.</translation> <translation id="608189560609172163">ಸೈನ್ ಇನ್ ಮಾಡುವಲ್ಲಿ ದೋಷವಿರುವ ಕಾರಣ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಸಿಂಕ್ ಮಾಡಲು Chromium ಗೆ ಸಾಧ್ಯವಾಗಲಿಲ್ಲ.</translation> <translation id="6129621093834146363"><ph name="FILE_NAME" /> ಅಪಾಯಕಾರಿಯಾಗಿದೆ, ಹಾಗಾಗಿ Chromium ಅದನ್ನು ನಿರ್ಬಂಧಿಸಿದೆ.</translation> -<translation id="6212496753309875659">ಈ ಕಂಪ್ಯೂಟರ್ Chromium ನ ಇತ್ತೀಚಿನ ಹೆಚ್ಚಿನ ಆವೃತ್ತಿಯನ್ನು ಹೊಂದಿದೆ. ಸಾಫ್ಟ್ವೇರ್ ಕಾರ್ಯನಿರ್ವಹಿಸದಿದ್ದರೆ, ದಯವಿಟ್ಟು Chromium ಅನ್ನು ಅಸ್ಥಾಪಿಸಿ ಮತ್ತು ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation> +<translation id="6212496753309875659">ಈ ಕಂಪ್ಯೂಟರ್ Chromium ನ ಇತ್ತೀಚಿನ ಹೆಚ್ಚಿನ ಆವೃತ್ತಿಯನ್ನು ಹೊಂದಿದೆ. ಸಾಫ್ಟ್ವೇರ್ ಕಾರ್ಯನಿರ್ವಹಿಸದಿದ್ದರೆ, ದಯವಿಟ್ಟು Chromium ಅನ್ನು ಅನ್ಇನ್ಸ್ಟಾಲ್ ಮಾಡಿ ಮತ್ತು ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="6248213926982192922">Chromium ಅನ್ನು ಡಿಫಾಲ್ಟ್ ಬ್ರೌಸರ್ ಮಾಡಿ</translation> <translation id="6295779123002464101"><ph name="FILE_NAME" /> ಅಪಾಯಕಾರಿಯಾಗಿರಬಹುದು, ಹಾಗಾಗಿ Chromium ಅದನ್ನು ನಿರ್ಬಂಧಿಸಿದೆ.</translation> <translation id="6309712487085796862">Chromium ನಿಮ್ಮ ಕ್ಯಾಮರಾ ಬಳಸುತ್ತಿದೆ.</translation> @@ -162,7 +162,7 @@ <translation id="6475912303565314141">ನೀವು Chromium ಪ್ರಾರಂಭಿಸಿದಾಗ ತೋರಿಸಬೇಕಾದ ಪುಟವನ್ನು ಕೂಡಾ ಇದು ನಿಯಂತ್ರಿಸುತ್ತದೆ.</translation> <translation id="6485906693002546646">ನಿಮ್ಮ Chromium ವಿಷಯವನ್ನು ಸಿಂಕ್ ಮಾಡಲು ನೀವು <ph name="PROFILE_EMAIL" /> ಅನ್ನು ಬಳಸುತ್ತಿರುವಿರಿ. Google ಖಾತೆ ಇಲ್ಲದೆ ನಿಮ್ಮ ಸಿಂಕ್ ಪ್ರಾಶಸ್ತ್ಯಗಳನ್ನು ನವೀಕರಿಸಲು ಅಥವಾ Chromium ಬಳಸಲು, <ph name="SETTINGS_LINK" /> ಭೇಟಿ ನೀಡಿ.</translation> <translation id="6505742536731484931">ಈ ಸೈಟ್ ಮೂಲಕ ನಿಮ್ಮ ಸ್ಥಳವನ್ನು ಹಂಚಿಕೊಳ್ಳಲು Chromium ಗೆ ನಿಮ್ಮ ಸ್ಥಳದ ಪ್ರವೇಶ ಅಗತ್ಯವಿದೆ.</translation> -<translation id="6510925080656968729">Chromium ಅಸ್ಥಾಪಿಸಿ</translation> +<translation id="6510925080656968729">Chromium ಅನ್ಇನ್ಸ್ಟಾಲ್ ಮಾಡಿ</translation> <translation id="6526111688217511984">ಫೈಲ್ಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಲು Chromium ಗೆ ಸಂಗ್ರಹಣೆ ಪ್ರವೇಶ ಅಗತ್ಯವಿದೆ.</translation> <translation id="6584627348340620412">32-ಬಿಟ್ Chromium ನ ಭವಿಷ್ಯದ ಆವೃತ್ತಿಗಳು ಈ Linux ಸಿಸ್ಟಂ ಅನ್ನು ಇನ್ನು ಮುಂದೆ ಬೆಂಬಲಿಸುವುದಿಲ್ಲ, ದಯವಿಟ್ಟು 64-ಬಿಟ್ Chromium ಗೆ ಅಪ್ಗ್ರೇಡ್ ಮಾಡಿ.</translation> <translation id="6593914713218535185">ಈ Linux ಸಿಸ್ಟಂನಲ್ಲಿ ಇನ್ನು ಮುಂದೆ Chromium ಬೆಂಬಲಿಸದಿರುವ ಕಾರಣದಿಂದ ಅದು ಸರಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸದೇ ಇರಬಹುದು.</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb index bd78da7a..f40eb543 100644 --- a/chrome/app/resources/generated_resources_am.xtb +++ b/chrome/app/resources/generated_resources_am.xtb
@@ -1646,7 +1646,6 @@ <translation id="3479552764303398839">አሁን አይደለም</translation> <translation id="3480892288821151001">መስኮት ግራ ላይ ትከል</translation> <translation id="3481915276125965083">በዚህ ገጽ ላይ የሚከተሉት ብቅ-ባዮች ታግደዋል፦</translation> -<translation id="3482214069979148937">ከሙሉ ማያ ገጽ ለመውጣት |<ph name="ACCELERATOR" />|ን ተጭነው ይያዙ</translation> <translation id="3484273680291419129">ጎጂ ሶፍትዌርን በማስወገድ ላይ...</translation> <translation id="3484869148456018791">አዲስ የእውቅና ማረጋገጫ ያግኙ</translation> <translation id="3487007233252413104">ስም-አልባ ተግባር</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb index 9ea6ed8e..e62d33b 100644 --- a/chrome/app/resources/generated_resources_ar.xtb +++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -1643,7 +1643,6 @@ <translation id="3479552764303398839">ليس الآن</translation> <translation id="3480892288821151001">إرساء النافذة لليسار</translation> <translation id="3481915276125965083">تم منع عرض النوافذ المنبثقة التالية في هذه الصفحة:</translation> -<translation id="3482214069979148937">اضغط مع الاستمرار على |<ph name="ACCELERATOR" />| للخروج من وضع ملء الشاشة</translation> <translation id="3484273680291419129">جارٍ إزالة البرامج الضارة...</translation> <translation id="3484869148456018791">الحصول على شهادة جديدة</translation> <translation id="3487007233252413104">وظيفة مجهولة</translation> @@ -2642,7 +2641,7 @@ <translation id="5098647635849512368">لا يمكن العثور على المسار المطلق للدليل للحزمة.</translation> <translation id="5099354524039520280">لأعلى</translation> <translation id="5100114659116077956">لكي تحصل على أحدث العناصر، يلزم تحديث Chromebox.</translation> -<translation id="5101042277149003567">فتح جميع الإشارات</translation> +<translation id="5101042277149003567">فتح جميع الإشارات المرجعية</translation> <translation id="5105855035535475848">تثبيت علامات التبويب</translation> <translation id="5108967062857032718">الإعدادات - إزالة تطبيقات Android</translation> <translation id="5109044022078737958">Mia</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb index ea0317e..a78a5d3a 100644 --- a/chrome/app/resources/generated_resources_bg.xtb +++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -1642,7 +1642,6 @@ <translation id="3479552764303398839">Не сега</translation> <translation id="3480892288821151001">Закрепване на прозореца отляво</translation> <translation id="3481915276125965083">Следните изскачащи прозорци са блокирани на тази страница:</translation> -<translation id="3482214069979148937">Задръжте |<ph name="ACCELERATOR" />| за изход от режима на цял екран</translation> <translation id="3484273680291419129">Опасният софтуер се премахва...</translation> <translation id="3484869148456018791">Получаване на нов сертификат</translation> <translation id="3487007233252413104">анонимна функция</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb index d6f7fcc..eb1ef44 100644 --- a/chrome/app/resources/generated_resources_bn.xtb +++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -1642,7 +1642,6 @@ <translation id="3479552764303398839">এখনই নয়</translation> <translation id="3480892288821151001">উইন্ডো বাঁ দিকে রাখুন</translation> <translation id="3481915276125965083">এই পৃষ্ঠাতে নিম্নোক্ত পপ-আপগুলি ব্লক করা হয়েছে:</translation> -<translation id="3482214069979148937">পূর্ণ স্ক্রীন থেকে বেরিয়ে যেতে |<ph name="ACCELERATOR" />| ধরে থাকুন</translation> <translation id="3484273680291419129">ক্ষতিকর সফ্টওয়্যার সরানো হচ্ছে...</translation> <translation id="3484869148456018791">নতুন শংসাপত্র আনুন</translation> <translation id="3487007233252413104">নামহীন ক্রিয়াকলাপ</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb index 4819693..24cf7fb 100644 --- a/chrome/app/resources/generated_resources_ca.xtb +++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -1299,7 +1299,7 @@ <translation id="2972557485845626008">Microprogramari</translation> <translation id="2972581237482394796">&Refés</translation> <translation id="2972642118232180842">Executa només contingut important (recomanat)</translation> -<translation id="2979639724566107830">Obre en una finestra nova</translation> +<translation id="2979639724566107830">Obre-ho en una finestra nova</translation> <translation id="2981113813906970160">Mostra el cursor del ratolí gran</translation> <translation id="2982970937345031">Informa'n de manera anònima</translation> <translation id="2984337792991268709">Avui a les <ph name="TODAY_DAYTIME" /></translation> @@ -1643,7 +1643,6 @@ <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> -<translation id="3482214069979148937">Manteniu premut |<ph name="ACCELERATOR" />| per sortir de la pantalla completa</translation> <translation id="3484273680291419129">S'està suprimint el programari maliciós...</translation> <translation id="3484869148456018791">Obtén el certificat nou</translation> <translation id="3487007233252413104">funció anònima</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb index e1a51759..aba3373 100644 --- a/chrome/app/resources/generated_resources_cs.xtb +++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -1644,7 +1644,6 @@ <translation id="3479552764303398839">Teď 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> -<translation id="3482214069979148937">Režim celé obrazovky ukončíte podržením klávesy |<ph name="ACCELERATOR" />|</translation> <translation id="3484273680291419129">Odstraňování škodlivého softwaru...</translation> <translation id="3484869148456018791">Získat nový certifikát</translation> <translation id="3487007233252413104">anonymní funkce</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb index 9b6413e..d88337a 100644 --- a/chrome/app/resources/generated_resources_da.xtb +++ b/chrome/app/resources/generated_resources_da.xtb
@@ -1645,7 +1645,6 @@ <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> -<translation id="3482214069979148937">Hold |<ph name="ACCELERATOR" />| nede for at afslutte visning i fuld skærm</translation> <translation id="3484273680291419129">Sletter skadelig software...</translation> <translation id="3484869148456018791">Få et nyt certifikat</translation> <translation id="3487007233252413104">anonym funktion</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb index 578a0a1..7a85535 100644 --- a/chrome/app/resources/generated_resources_de.xtb +++ b/chrome/app/resources/generated_resources_de.xtb
@@ -1641,7 +1641,6 @@ <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> -<translation id="3482214069979148937">Halten Sie |<ph name="ACCELERATOR" />| gedrückt, um den Vollbildmodus zu beenden</translation> <translation id="3484273680291419129">Schädliche Software wird entfernt...</translation> <translation id="3484869148456018791">Neues Zertifikat anfordern</translation> <translation id="3487007233252413104">Anonyme Funktion</translation> @@ -3012,7 +3011,7 @@ <translation id="5639549361331209298">Seite aktualisieren, für weitere Optionen gedrückt halten</translation> <translation id="5641461229021317093">Sie erhalten Benachrichtigungen über neue SMS auf Ihrem Chromebook</translation> <translation id="5642508497713047">CRL-Signaturgeber</translation> -<translation id="5646376287012673985">Speicherort</translation> +<translation id="5646376287012673985">Standort</translation> <translation id="5646558797914161501">Geschäftsmann</translation> <translation id="5649053991847567735">Auto-Downloads</translation> <translation id="5649768706273821470">Anhören</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb index e3baf36..1c84e7fa 100644 --- a/chrome/app/resources/generated_resources_el.xtb +++ b/chrome/app/resources/generated_resources_el.xtb
@@ -1647,7 +1647,6 @@ <translation id="3479552764303398839">Όχι τώρα</translation> <translation id="3480892288821151001">Αγκύρωση παραθύρου αριστερά</translation> <translation id="3481915276125965083">Έγινε αποκλεισμός των ακόλουθων αναδυόμενων παραθύρων σε αυτήν τη σελίδα:</translation> -<translation id="3482214069979148937">Πατήστε το |<ph name="ACCELERATOR" />| παρατεταμένα για να εξέλθετε από την πλήρη οθόνη</translation> <translation id="3484273680291419129">Κατάργηση επιβλαβούς λογισμικού…</translation> <translation id="3484869148456018791">Λήψη νέου πιστοποιητικού</translation> <translation id="3487007233252413104">ανώνυμη λειτουργία</translation> @@ -3388,7 +3387,7 @@ <translation id="6247802389331535091">Σύστημα: <ph name="ARC_PROCESS_NAME" /></translation> <translation id="624789221780392884">Έτοιμη ενημέρωση</translation> <translation id="6248400709929739064">Ενεργοποίηση υπότιτλων</translation> -<translation id="6248988683584659830">Ρυθμίσεις αναζήτησης</translation> +<translation id="6248988683584659830">Αναζήτηση ρυθμίσεων</translation> <translation id="6251870443722440887">Χειρισμοί GDI</translation> <translation id="6251889282623539337">Όροι Παροχής Υπηρεσιών <ph name="DOMAIN" /></translation> <translation id="6254503684448816922">Παραβίαση κλειδιού</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb index 99bbd28..c4e32c1 100644 --- a/chrome/app/resources/generated_resources_en-GB.xtb +++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -565,6 +565,7 @@ <translation id="1856715684130786728">Add location...</translation> <translation id="1858585891038687145">Trust this certificate for identifying software makers</translation> <translation id="1859234291848436338">Writing Direction</translation> +<translation id="1862553255006737600">This name is too long and exceeds $1 character length limit.</translation> <translation id="1864111464094315414">Login</translation> <translation id="1864400682872660285">Cooler</translation> <translation id="1864676585353837027">Change how these files are shared</translation> @@ -891,6 +892,7 @@ <translation id="2381756643783702095">Ask before sending (recommended)</translation> <translation id="2384436799579181135">An error has occurred. Please check your printer and try again.</translation> <translation id="2385700042425247848">Service name:</translation> +<translation id="2387458720915042159">Proxy connection type</translation> <translation id="2391243203977115091"><ph name="FILE_COUNT" /> new photos found <ph name="LINE_BREAK1" /> Not enough space on device. @@ -957,6 +959,7 @@ <translation id="2489428929217601177">the past day</translation> <translation id="2489918096470125693">Add &Folder...</translation> <translation id="249113932447298600">Sorry, the device <ph name="DEVICE_LABEL" /> is not supported at this time.</translation> +<translation id="2492711144692806453">Renaming finished</translation> <translation id="2493021387995458222">Select "word at a time"</translation> <translation id="249303669840926644">Could not complete registration</translation> <translation id="2495777824269688114">Discover more features or get answers. Select '?' for help.</translation> @@ -1280,6 +1283,7 @@ <translation id="2938225289965773019">Open <ph name="PROTOCOL" /> links</translation> <translation id="2939938020978911855">Show available Bluetooth devices</translation> <translation id="2941112035454246133">Low</translation> +<translation id="2942560570858569904">Waiting...</translation> <translation id="2943400156390503548">Slides</translation> <translation id="2946119680249604491">Add connection</translation> <translation id="2948300991547862301">Go to <ph name="PAGE_TITLE" /></translation> @@ -1336,6 +1340,7 @@ <translation id="302014277942214887">Enter application ID or web store URL.</translation> <translation id="3020990233660977256">Serial Number: <ph name="SERIAL_NUMBER" /></translation> <translation id="3021678814754966447">&View Frame Source</translation> +<translation id="3022978424994383087">Didn't get that.</translation> <translation id="3024374909719388945">Use 24-hour clock</translation> <translation id="302781076327338683">Reload bypassing cache</translation> <translation id="3030243755303701754">A supervised user can explore the web with your guidance. As the manager of a supervised user in Chrome, you can: @@ -1417,6 +1422,7 @@ <translation id="3135204511829026971">Rotate screen</translation> <translation id="3139925690611372679">Default yellow avatar</translation> <translation id="3140353188828248647">Focus address bar</translation> +<translation id="3141318088920353606">Listening...</translation> <translation id="3141917231319778873">The given request is not supported to: "<ph name="DEVICE_NAME" />".</translation> <translation id="3144126448740580210">DONE</translation> <translation id="3144135466825225871">Failed to replace crx file. Check to see if the file is in use.</translation> @@ -1646,7 +1652,6 @@ <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> -<translation id="3482214069979148937">Hold |<ph name="ACCELERATOR" />| to exit full screen</translation> <translation id="3484273680291419129">Removing harmful software...</translation> <translation id="3484869148456018791">Get new certificate</translation> <translation id="3487007233252413104">anonymous function</translation> @@ -1758,6 +1763,7 @@ <translation id="3648460724479383440">Selected radio button</translation> <translation id="3649138363871392317">Photo was captured</translation> <translation id="3651488188562686558">Disconnect from Wi-Fi</translation> +<translation id="3652817283076144888">Initialising</translation> <translation id="3653999333232393305">Continue allowing <ph name="HOST" /> to access your microphone</translation> <translation id="3654045516529121250">Read your accessibility settings</translation> <translation id="3655712721956801464">{NUM_FILES,plural, =1{It has permanent access to one file.}other{It has permanent access to # files.}}</translation> @@ -1853,6 +1859,7 @@ <translation id="3790909017043401679">Enter SIM card PIN</translation> <translation id="3792890930871100565">Disconnect printers</translation> <translation id="379422718204375917">Use Smart Lock to sign in to your account</translation> +<translation id="3794595850995182458">Exit page</translation> <translation id="3796648294839530037">Favourite Networks:</translation> <translation id="3797900183766075808">&Search <ph name="SEARCH_ENGINE" /> for “<ph name="SEARCH_TERMS" />”</translation> <translation id="3798325802885154040">Allows you to enable/disable tap-to-click</translation> @@ -2480,6 +2487,7 @@ <translation id="4837952862063191349">To unlock and restore your local data, please enter your old <ph name="DEVICE_TYPE" /> password.</translation> <translation id="4839303808932127586">Sa&ve video as...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> items selected</translation> +<translation id="4840259661446092445">Can't remove harmful software.</translation> <translation id="4842976633412754305">This page is trying to load scripts from unauthenticated sources.</translation> <translation id="4844333629810439236">Other keyboards</translation> <translation id="4846680374085650406">You are following the administrator's recommendation for this setting.</translation> @@ -2572,6 +2580,7 @@ <translation id="4967749818080339523">Select an account</translation> <translation id="496888482094675990">The Files app provides quick access to files that you've saved on Google Drive, external storage or your Chrome OS device.</translation> <translation id="4969785127455456148">Album</translation> +<translation id="4971078675931090428">The renaming process can take a couple of seconds. Please wait.</translation> <translation id="4971412780836297815">Open when done</translation> <translation id="4972129977812092092">Edit printer</translation> <translation id="4973307593867026061">Add printers</translation> @@ -2594,6 +2603,7 @@ <translation id="4994474651455208930">Allow sites to ask to become default handlers for protocols</translation> <translation id="4994754230098574403">Setting up</translation> <translation id="4996978546172906250">Share via</translation> +<translation id="4997086284911172121">No Internet connection.</translation> <translation id="4998873842614926205">Confirm Changes</translation> <translation id="499955951116857523">File manager</translation> <translation id="5000922062037820727">Blocked (recommended)</translation> @@ -2951,6 +2961,7 @@ <translation id="5534520101572674276">Calculating size</translation> <translation id="5535941515421698170">Also remove your existing data from this device</translation> <translation id="5537725057119320332">Cast</translation> +<translation id="5539221284352502426">The password that you entered was rejected by the server. Possible reasons include: The password is too short. The password must include numbers or symbols. The password must be different from previous passwords.</translation> <translation id="5541687815721799001">Use app</translation> <translation id="5542132724887566711">Profile</translation> <translation id="5543983818738093899">Checking for status...</translation> @@ -3092,6 +3103,7 @@ <translation id="5765491088802881382">No networks are available</translation> <translation id="5765780083710877561">Description:</translation> <translation id="5771816112378578655">Setup in progress...</translation> +<translation id="5772265531560382923">{NUM_PAGES,plural, =1{You can wait for it to become responsive or exit the page.}other{You can wait for them to become responsive or exit the pages.}}</translation> <translation id="577322787686508614">Read operation is not permitted on: "<ph name="DEVICE_NAME" />".</translation> <translation id="5774295353725270860">Open Files app</translation> <translation id="5774515636230743468">Manifest:</translation> @@ -3198,6 +3210,7 @@ <translation id="5921745308587794300">Rotate window</translation> <translation id="5924047253200400718">Get help<ph name="SCANNING_STATUS" /></translation> <translation id="5925147183566400388">Certification Practice Statement Pointer</translation> +<translation id="5927692884057333064">Renaming...</translation> <translation id="592880897588170157">Download PDF files instead of automatically opening them in Chrome</translation> <translation id="5931146425219109062">Read and change all your data on the websites that you visit</translation> <translation id="5932881020239635062">Serial</translation> @@ -3242,6 +3255,7 @@ <translation id="6005695835120147974">Media Router</translation> <translation id="6006484371116297560">Classic</translation> <translation id="6007237601604674381">Move failed. <ph name="ERROR_MESSAGE" /></translation> +<translation id="6007240208646052708">Voice search in your language is not available.</translation> <translation id="6010869025736512584">Accessing video input</translation> <translation id="6011193465932186973">Fingerprint</translation> <translation id="6011449291337289699">Clear site data</translation> @@ -3289,6 +3303,7 @@ <translation id="6075907793831890935">Exchange data with the device named <ph name="HOSTNAME" /></translation> <translation id="6076448957780543068">Include this screenshot</translation> <translation id="6077131872140550515">Remove from preferred</translation> +<translation id="6078752646384677957">Please check your microphone and audio levels.</translation> <translation id="6080689532560039067">Check your system time</translation> <translation id="6082651258230788217">Show in toolbar</translation> <translation id="6086814797483779854">Run on Click</translation> @@ -3339,6 +3354,7 @@ <translation id="6164005077879661055">All files and local data associated with the supervised user will be permanently deleted once this supervised user is removed. Visited websites and settings for this supervised user may still be visible by the manager at <ph name="MANAGEMENT_URL" />.</translation> <translation id="6165508094623778733">Learn more</translation> <translation id="6166185671393271715">Import Passwords To Chrome</translation> +<translation id="6169040057125497443">Please check your microphone.</translation> <translation id="6169666352732958425">Unable to cast desktop.</translation> <translation id="6171948306033499786">Pause printing</translation> <translation id="6175314957787328458">Microsoft Domain GUID</translation> @@ -3378,6 +3394,7 @@ <translation id="6237816943013845465">Allows you to adjust your screen resolution</translation> <translation id="6238923052227198598">Keep latest note on lock screen</translation> <translation id="6239558157302047471">Reload &frame</translation> +<translation id="624022915548992686">Exit Page</translation> <translation id="6241530762627360640">Access information about Bluetooth devices paired with your system and discover nearby Bluetooth devices.</translation> <translation id="6243774244933267674">Server unavailable</translation> <translation id="6245220622116401744">Allow sites to run Flash</translation> @@ -3728,6 +3745,7 @@ <translation id="6746124502594467657">Move down</translation> <translation id="674632704103926902">Enable tap dragging</translation> <translation id="6746392203843147041">vol. up</translation> +<translation id="6748217015615267851">Renderer: <ph name="RENDERER_URL" /></translation> <translation id="6748465660675848252">You may proceed, but only your synced data and settings will be restored. All local data will be lost.</translation> <translation id="6748775883310276718">Single App Kiosk</translation> <translation id="6751256176799620176">1 folder selected</translation> @@ -3801,6 +3819,7 @@ <translation id="6869402422344886127">Ticked checkbox</translation> <translation id="6870888490422746447">Choose an app to share to:</translation> <translation id="6871644448911473373">OCSP Responder: <ph name="LOCATION" /></translation> +<translation id="6872781471649843364">The password that you entered was rejected by the server.</translation> <translation id="6874681241562738119">Sign-in Error</translation> <translation id="687588960939994211">Also clear your history, bookmarks, settings and other Chrome data stored on this device.</translation> <translation id="6880587130513028875">Images were blocked on this page.</translation> @@ -4015,6 +4034,7 @@ <translation id="7228479291753472782">Manipulate settings that specify whether websites can use features such as geo-location, microphone, camera, etc.</translation> <translation id="7229570126336867161">Need EVDO</translation> <translation id="7230787553283372882">Customise your text size</translation> +<translation id="7232750842195536390">Renaming failed</translation> <translation id="7238585580608191973">SHA-256 Fingerprint</translation> <translation id="7240120331469437312">Certificate Subject Alternative Name</translation> <translation id="7240339475467890413">Connect to new hotspot?</translation> @@ -4142,6 +4162,7 @@ <translation id="7427348830195639090">Background Page: <ph name="BACKGROUND_PAGE_URL" /></translation> <translation id="7433692219247014412">{COUNT,plural, =0{Open All in &New Window}=1{Open in &New Window}other{Open All (#) in &New Window}}</translation> <translation id="7434509671034404296">Developer</translation> +<translation id="7436921188514130341">Oh no! There was an error during renaming.</translation> <translation id="743823505716061814">Search queries will be tied to your Google Account. You can view and delete them in your <ph name="BEGIN_LINK" />Account History<ph name="END_LINK" />.</translation> <translation id="7438940380767210568">Set up printer...</translation> <translation id="7439964298085099379">You have High Contrast mode enabled. Would you like to install our High Contrast extension and a dark theme?</translation> @@ -4651,6 +4672,7 @@ <translation id="8217399928341212914">Continue blocking automatic downloads of multiple files</translation> <translation id="8222121761382682759">Uninstall...</translation> <translation id="8223479393428528563">To save these files for offline use, get back online, right-click the files and select the <ph name="OFFLINE_CHECKBOX_NAME" /> option.</translation> +<translation id="8225316208047679293">Renaming finished successfully!</translation> <translation id="8226222018808695353">Forbidden</translation> <translation id="8226619461731305576">Queue</translation> <translation id="8226742006292257240">Below is the randomly generated TPM password that has been assigned to your computer:</translation> @@ -4951,6 +4973,7 @@ <translation id="8710187907779883426">short (1s)</translation> <translation id="8711402221661888347">Ketchup</translation> <translation id="8713570323158206935">Send <ph name="BEGIN_LINK1" />system information<ph name="END_LINK1" /></translation> +<translation id="8714154114375107944">End of support</translation> <translation id="871476437400413057">Google saved passwords</translation> <translation id="8714838604780058252">Background graphics</translation> <translation id="8719653885894320876"><ph name="PLUGIN_NAME" /> download failed</translation> @@ -4992,6 +5015,7 @@ <translation id="8775404590947523323">Your edits are saved automatically.<ph name="BREAKS" />To keep a copy of the original image, untick "Overwrite original"</translation> <translation id="8777218413579204310">Detect content</translation> <translation id="8777628254805677039">root password</translation> +<translation id="8780443667474968681">Voice search has been turned off.</translation> <translation id="878069093594050299">This certificate has been verified for the following usages:</translation> <translation id="8781980678064919987">Shut down when lid is closed</translation> <translation id="8782565991310229362">Kiosk application launch cancelled.</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb index 5f89a4da..2f80798 100644 --- a/chrome/app/resources/generated_resources_es-419.xtb +++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -1642,7 +1642,6 @@ <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> -<translation id="3482214069979148937">Mantén presionada la tecla |<ph name="ACCELERATOR" />| para salir de la pantalla completa</translation> <translation id="3484273680291419129">Quitando software dañino…</translation> <translation id="3484869148456018791">Obtener nuevo certificado</translation> <translation id="3487007233252413104">función anónima</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb index 89b9c15..5561d263 100644 --- a/chrome/app/resources/generated_resources_es.xtb +++ b/chrome/app/resources/generated_resources_es.xtb
@@ -1646,7 +1646,6 @@ <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> -<translation id="3482214069979148937">Mantén pulsada la tecla |<ph name="ACCELERATOR" />| para salir del modo de pantalla completa</translation> <translation id="3484273680291419129">Eliminando software dañino...</translation> <translation id="3484869148456018791">Obtener nuevo certificado</translation> <translation id="3487007233252413104">función anónima</translation> @@ -3701,7 +3700,7 @@ <translation id="6716704051134091292">Conversor de PDF</translation> <translation id="6718273304615422081">Comprimiendo...</translation> <translation id="671928215901716392">Bloquear pantalla</translation> -<translation id="67211069045302358">¿Seguro que quiere recuperar la configuración de este sitio web?</translation> +<translation id="67211069045302358">¿Seguro que quieres recuperar la configuración de este sitio web?</translation> <translation id="6721972322305477112">&Archivo</translation> <translation id="672213144943476270">Desbloquea tu perfil antes de navegar como invitado.</translation> <translation id="6723354935081862304">Imprimir en Google Docs y en otros destinos de la nube. <ph name="BEGIN_LINK" />Inicia sesión<ph name="END_LINK" /> para imprimir en Google Cloud Print.</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb index 5ae7e59..2b34ead 100644 --- a/chrome/app/resources/generated_resources_et.xtb +++ b/chrome/app/resources/generated_resources_et.xtb
@@ -1646,7 +1646,6 @@ <translation id="3479552764303398839">Mitte praegu</translation> <translation id="3480892288821151001">Doki aken vasakule</translation> <translation id="3481915276125965083">Sellel lehel blokeeriti järgmised hüpikaknad:</translation> -<translation id="3482214069979148937">Täisekraanilt väljumiseks hoidke all klahvi |<ph name="ACCELERATOR" />|</translation> <translation id="3484273680291419129">Kahjuliku tarkvara eemaldamine …</translation> <translation id="3484869148456018791">Hangi uus sertifikaat</translation> <translation id="3487007233252413104">anonüümne funktsioon</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb index 420d698..605b1eb 100644 --- a/chrome/app/resources/generated_resources_fa.xtb +++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -1641,7 +1641,6 @@ <translation id="3479552764303398839">اکنون نه</translation> <translation id="3480892288821151001">متصل کردن پنجره در چپ</translation> <translation id="3481915276125965083">پنجرههای بازشوی زیر در این صفحه مسدود شدهاند:</translation> -<translation id="3482214069979148937">دکمه |<ph name="ACCELERATOR" />| را برای خروج از تمام صفحه نگهدارید</translation> <translation id="3484273680291419129">درحال پاک کردن نرمافزار مضر…</translation> <translation id="3484869148456018791">دریافت گواهینامه جدید</translation> <translation id="3487007233252413104">تابع ناشناس</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb index 4f7c4f1..a2c8c9b 100644 --- a/chrome/app/resources/generated_resources_fi.xtb +++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -1646,7 +1646,6 @@ <translation id="3479552764303398839">Ei nyt</translation> <translation id="3480892288821151001">Kiinnitä ikkuna vasemmalle</translation> <translation id="3481915276125965083">Seuraavat ponnahdusikkunat estettiin tällä sivulla:</translation> -<translation id="3482214069979148937">Poistu koko näytön tilasta pitämällä |<ph name="ACCELERATOR" />| painettuna.</translation> <translation id="3484273680291419129">Poistetaan haittaohjelmia…</translation> <translation id="3484869148456018791">Hanki uusi varmenne</translation> <translation id="3487007233252413104">tuntematon toiminto</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb index 7e80b7b2..d616c08 100644 --- a/chrome/app/resources/generated_resources_fil.xtb +++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -1647,7 +1647,6 @@ <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> -<translation id="3482214069979148937">I-hold ang |<ph name="ACCELERATOR" />| upang lumabas sa full screen</translation> <translation id="3484273680291419129">Inaalis ang mapaminsalang software...</translation> <translation id="3484869148456018791">Kumuha ng bagong certificate</translation> <translation id="3487007233252413104">hindi kilalang function</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb index 6c40a19..1531b2d 100644 --- a/chrome/app/resources/generated_resources_fr.xtb +++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -1645,7 +1645,6 @@ <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> -<translation id="3482214069979148937">Appuyez sur |<ph name="ACCELERATOR" />| pour quitter le mode plein écran.</translation> <translation id="3484273680291419129">Suppression du logiciel malveillant…</translation> <translation id="3484869148456018791">Obtenir un nouveau certificat</translation> <translation id="3487007233252413104">fonction anonyme</translation> @@ -2534,7 +2533,7 @@ <translation id="4903369323166982260">Exécuter l'outil de nettoyage Chrome</translation> <translation id="4907161631261076876">Ce fichier n'étant pas souvent téléchargé, il peut présenter un danger.</translation> <translation id="4907306957610201395">Catégorie d'autorisation</translation> -<translation id="4908811072292128752">Ouvrez un onglet pour naviguer sur deux sites Web en même temps</translation> +<translation id="4908811072292128752">Ouvrez un nouvel onglet pour naviguer sur deux sites Web en même temps</translation> <translation id="4909038193460299775">Étant donné que ce compte est géré par <ph name="DOMAIN" />, vos favoris, votre historique, vos mots de passe et les autres paramètres sont effacés de cet appareil. Cependant, vos données restent stockées dans votre compte Google et peuvent être gérées dans le <ph name="BEGIN_LINK" />Google Dashboard<ph name="END_LINK" />.</translation> <translation id="4910021444507283344">WebGL</translation> <translation id="4911714727432509308">Aucune extension n'est associée à des raccourcis clavier</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb index a6a860b..5938baa 100644 --- a/chrome/app/resources/generated_resources_gu.xtb +++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -1642,7 +1642,6 @@ <translation id="3479552764303398839">હમણાં નહીં</translation> <translation id="3480892288821151001">વિન્ડો ડાબે ડૉક કરો</translation> <translation id="3481915276125965083">આ પૃષ્ઠ પર નીચેના પૉપ-અપ્સ અવરોધિત હતા:</translation> -<translation id="3482214069979148937">પૂર્ણ સ્ક્રીનથી બહાર નીકળવા માટે |<ph name="ACCELERATOR" />| ને દબાવી રાખો</translation> <translation id="3484273680291419129">નુકસાનકારક સૉફ્ટવેર દૂર કરી રહ્યાં છીએ...</translation> <translation id="3484869148456018791">નવું પ્રમાણપત્ર મેળવો</translation> <translation id="3487007233252413104">અનામી કાર્ય</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb index fcedaf3..0107288 100644 --- a/chrome/app/resources/generated_resources_hi.xtb +++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -1645,7 +1645,6 @@ <translation id="3479552764303398839">अभी नहीं</translation> <translation id="3480892288821151001">विंडो को बाईं ओर डॉक करें</translation> <translation id="3481915276125965083">इस पेज पर निम्न पॉप-अप अवरोधित कर दिए गए थे:</translation> -<translation id="3482214069979148937">पूर्ण स्क्रीन से बाहर निकलने के लिए |<ph name="ACCELERATOR" />| को दबाएं</translation> <translation id="3484273680291419129">नुकसान पहुंचाने वाला सॉफ़्टवेयर निकाला जा रहा है...</translation> <translation id="3484869148456018791">नया प्रमाणपत्र प्राप्त करें</translation> <translation id="3487007233252413104">अनाम फ़ंक्शन</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb index f02ff3b..24e4cb4 100644 --- a/chrome/app/resources/generated_resources_hr.xtb +++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -1645,7 +1645,6 @@ <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> -<translation id="3482214069979148937">Držite |<ph name="ACCELERATOR" />| da biste napustili prikaz na cijelom zaslonu</translation> <translation id="3484273680291419129">Uklanjanje štetnog softvera...</translation> <translation id="3484869148456018791">Preuzmi novi certifikat</translation> <translation id="3487007233252413104">anonimna funkcija</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb index acea6e0b..b5a589b 100644 --- a/chrome/app/resources/generated_resources_hu.xtb +++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -1646,7 +1646,6 @@ <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> -<translation id="3482214069979148937">A teljes képernyős nézetből való kilépéshez tartsa lenyomva a következő billentyűt: |<ph name="ACCELERATOR" />|</translation> <translation id="3484273680291419129">Kártékony szoftver eltávolítása…</translation> <translation id="3484869148456018791">Új tanúsítvány kérése</translation> <translation id="3487007233252413104">névtelen funkció</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb index df5ceff..555d24ca 100644 --- a/chrome/app/resources/generated_resources_id.xtb +++ b/chrome/app/resources/generated_resources_id.xtb
@@ -1645,7 +1645,6 @@ <translation id="3479552764303398839">Jangan sekarang</translation> <translation id="3480892288821151001">Galangkan jendela ke kiri</translation> <translation id="3481915276125965083">Pop-up berikut diblokir di halaman ini:</translation> -<translation id="3482214069979148937">Tahan |<ph name="ACCELERATOR" />| untuk keluar dari layar penuh</translation> <translation id="3484273680291419129">Menghapus software berbahaya...</translation> <translation id="3484869148456018791">Dapatkan sertifikat baru</translation> <translation id="3487007233252413104">fungsi anonim</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb index e882d35..b644d4f 100644 --- a/chrome/app/resources/generated_resources_it.xtb +++ b/chrome/app/resources/generated_resources_it.xtb
@@ -1642,7 +1642,6 @@ <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> -<translation id="3482214069979148937">Tieni premuto |<ph name="ACCELERATOR" />| per uscire dalla modalità a schermo intero</translation> <translation id="3484273680291419129">Rimozione del software dannoso...</translation> <translation id="3484869148456018791">Richiedi nuovo certificato</translation> <translation id="3487007233252413104">funzione anonima</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb index d1b8eea..1188cfb 100644 --- a/chrome/app/resources/generated_resources_iw.xtb +++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -1641,7 +1641,6 @@ <translation id="3479552764303398839">לא עכשיו</translation> <translation id="3480892288821151001">עגן חלון לשמאל</translation> <translation id="3481915276125965083">ההודעות הקופצות הבאות נחסמו בדף זה:</translation> -<translation id="3482214069979148937">הקש על |<ph name="ACCELERATOR" />| הקשה ממושכת כדי לצאת ממסך מלא</translation> <translation id="3484273680291419129">מסיר תוכנה מזיקה...</translation> <translation id="3484869148456018791">קבל אישור חדש</translation> <translation id="3487007233252413104">פונקציה אנונימית</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb index 914461f..9cc04a75c 100644 --- a/chrome/app/resources/generated_resources_ja.xtb +++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -67,6 +67,7 @@ <translation id="1110155001042129815">待機</translation> <translation id="1110753181581583968">{NUM_DOWNLOAD,plural, =1{ダウンロードを続ける}other{ダウンロードを続ける}}</translation> <translation id="1110772031432362678">ネットワークが見つかりません。</translation> +<translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" />(USB)</translation> <translation id="1114202307280046356">ひし形</translation> <translation id="1114335938027186412">ご使用のパソコンには Trusted Platform Module(TPM)セキュリティ デバイスが組み込まれています。これは Chrome OS の多くの重要なセキュリティ機能を実装するために使用されます。詳しくは Chromebook ヘルプセンター(https://support.google.com/chromebook/?p=tpm)をご覧ください。</translation> <translation id="1114525161406758033">ディスプレイを閉じたときにスリープ状態にする</translation> @@ -887,6 +888,7 @@ <translation id="2378982052244864789">拡張機能のディレクトリを選択してください。</translation> <translation id="2379281330731083556">システム ダイアログを使用して印刷... <ph name="SHORTCUT_KEY" /></translation> <translation id="2381756643783702095">送信する前に確認する(推奨)</translation> +<translation id="2384436799579181135">エラーが発生しました。プリンタを確認してもう一度お試しください。</translation> <translation id="2385700042425247848">サービス名:</translation> <translation id="2391243203977115091"><ph name="FILE_COUNT" /> 件の新しい写真が見つかりました <ph name="LINE_BREAK1" /> @@ -1252,6 +1254,7 @@ <translation id="2897878306272793870"><ph name="TAB_COUNT" /> 個のタブが開きます。本当によろしいですか?</translation> <translation id="290105521672621980">サポートされていない機能がファイルで使用されています</translation> <translation id="2902127500170292085"><ph name="EXTENSION_NAME" /> はこのプリンタと通信できませんでした。プリンタが接続されていることを確認して、もう一度お試しください。</translation> +<translation id="2902312830803030883">その他の操作</translation> <translation id="2903457445916429186">選択したアイテムを開く</translation> <translation id="2903493209154104877">住所</translation> <translation id="290444763029043472"><ph name="DOWNLOADED_AMOUNT_MB" /> MB / <ph name="TOTAL_AMOUNT_MB" /> MB をダウンロード完了</translation> @@ -1364,6 +1367,7 @@ <translation id="3065041951436100775">タブの強制終了に関するフィードバック。</translation> <translation id="3065140616557457172">キーワードを入力して検索するか、直接 URL を入力してください。</translation> <translation id="3067198360141518313">このプラグインを実行する</translation> +<translation id="3071624960923923138">ここをクリックすると新しいタブが開きます</translation> <translation id="3074037959626057712">ログインして同期を有効にしました</translation> <translation id="3075874217500066906">Powerwash を開始するには再起動が必要です。再起動後、続行の確認メッセージが表示されます。</translation> <translation id="3076677906922146425">だれでも Chrome にユーザーを追加できるようにする</translation> @@ -1642,7 +1646,6 @@ <translation id="3479552764303398839">後で</translation> <translation id="3480892288821151001">ウィンドウを左に固定</translation> <translation id="3481915276125965083">このページの次のポップアップがブロックされました:</translation> -<translation id="3482214069979148937">全画面表示を終了するには |<ph name="ACCELERATOR" />| を押し続けます</translation> <translation id="3484273680291419129">有害なソフトウェアを削除しています...</translation> <translation id="3484869148456018791">新しい証明書を取得</translation> <translation id="3487007233252413104">無名関数</translation> @@ -2265,6 +2268,7 @@ <translation id="450099669180426158">感嘆符アイコン</translation> <translation id="4501530680793980440">削除の確認</translation> <translation id="4504940961672722399">この拡張機能を使用するには、このアイコンをクリックするか、<ph name="EXTENSION_SHORTCUT" /> を押します。</translation> +<translation id="4508051413094283164">すべてをシークレット ウィンドウで開く</translation> <translation id="4508265954913339219">起動に失敗しました</translation> <translation id="4508765956121923607">ソースを表示(&O)</translation> <translation id="4509017836361568632">写真を破棄</translation> @@ -2365,6 +2369,7 @@ <translation id="4664482161435122549">PKCS #12 エクスポート エラー</translation> <translation id="466481852929361583">セキュア モジュールをセットアップしています。しばらくお待ちください。これには数分かかることがあります。</translation> <translation id="4665014895760275686">メーカー</translation> +<translation id="466506872045057845">サイトの権限はデフォルトに戻ります</translation> <translation id="4667176955651319626">サードパーティの Cookie とサイト データをブロックする</translation> <translation id="4668721319092543482">クリックして <ph name="PLUGIN_NAME" /> を有効にします</translation> <translation id="4668954208278016290">パソコンにイメージを展開中に問題が発生しました。</translation> @@ -2530,6 +2535,7 @@ <translation id="4903369323166982260">Chrome クリーンアップ ツールを実行</translation> <translation id="4907161631261076876">このファイルは一般的にダウンロードされているファイルではなく、危害を及ぼす可能性があります。</translation> <translation id="4907306957610201395">権限のカテゴリ</translation> +<translation id="4908811072292128752">新しいタブを開いて 2 つのサイトを同時に閲覧できます</translation> <translation id="4909038193460299775">このアカウントは <ph name="DOMAIN" /> で管理されているため、ブックマーク、履歴、パスワードなどの設定はこの端末から消去されます。ただし、データは Google アカウントに保存され、<ph name="BEGIN_LINK" />Google ダッシュボード<ph name="END_LINK" />で管理できます。</translation> <translation id="4910021444507283344">WebGL</translation> <translation id="4911714727432509308">どの拡張機能にもキーボード ショートカットは割り当てられていません。</translation> @@ -2718,6 +2724,7 @@ <translation id="521582610500777512">写真を破棄しました</translation> <translation id="5222676887888702881">ログアウト</translation> <translation id="5225324770654022472">アプリのショートカットを表示</translation> +<translation id="5225360179303283478">サイトの設定をリセット</translation> <translation id="5227536357203429560">プライベート ネットワークを追加...</translation> <translation id="5227679487546032910">デフォルトの青緑のアバター</translation> <translation id="5227808808023563348">1 つ前のテキストを表示する</translation> @@ -3594,6 +3601,7 @@ <translation id="655384502888039633">ユーザー数: <ph name="USER_COUNT" /> 人</translation> <translation id="6555432686520421228">すべてのユーザー アカウントを削除し、<ph name="IDS_SHORT_PRODUCT_NAME" /> デバイスを出荷時と同じ状態にリセットします。</translation> <translation id="6556866813142980365">やり直す</translation> +<translation id="6558280019477628686">エラーが発生しました。一部の項目が削除されていない可能性があります。</translation> <translation id="6559580823502247193">(このデバイスの既存ユーザー)</translation> <translation id="6561726789132298588">Enter</translation> <translation id="6562437808764959486">リカバリ イメージを展開しています...</translation> @@ -3665,6 +3673,7 @@ <translation id="6664237456442406323">パソコンに設定されているハードウェア ID の形式が正しくありません。このため、Chrome OS に最新のセキュリティ修正を適用することができません。お使いのパソコンは、<ph name="BEGIN_BOLD" />悪意のある攻撃を受けやすくなる可能性があります<ph name="END_BOLD" />。</translation> <translation id="6664774537677393800">プロフィールを開こうとして問題が発生しました。ログアウトしてから再度ログインしてください。</translation> <translation id="6666647326143344290">Google アカウントを使用</translation> +<translation id="6673391612973410118"><ph name="PRINTER_MAKE_OR_MODEL" />(USB)</translation> <translation id="667517062706956822">Google でこのページを <ph name="SOURCE_LANGUAGE" /> から <ph name="TARGET_LANGUAGE" /> に翻訳しますか?</translation> <translation id="6675665718701918026">ポインティング デバイスが接続されました</translation> <translation id="6677037229676347494">期待される ID は「<ph name="EXPECTED_ID" />」ですが、「<ph name="NEW_ID" />」になっています。</translation> @@ -3696,6 +3705,7 @@ <translation id="6716704051134091292">PDF 変換</translation> <translation id="6718273304615422081">圧縮しています...</translation> <translation id="671928215901716392">画面をロック</translation> +<translation id="67211069045302358">このサイトの設定をリセットしますか?</translation> <translation id="6721972322305477112">ファイル(&F)</translation> <translation id="672213144943476270">ゲストとしてブラウジングするにはまずプロフィールのロックを解除してください。</translation> <translation id="6723354935081862304">Google ドキュメントなどのクラウド上で印刷します。Google クラウド プリントで印刷するには、<ph name="BEGIN_LINK" />ログイン<ph name="END_LINK" />が必要です。</translation> @@ -3873,6 +3883,7 @@ <translation id="7005848115657603926">ページ範囲が無効です。<ph name="EXAMPLE_PAGE_RANGE" /> の範囲で指定してください。</translation> <translation id="7006634003215061422">下余白</translation> <translation id="7006844981395428048">$1 音声</translation> +<translation id="7007648447224463482">すべてを新しいウィンドウで開く</translation> <translation id="7008270479623533562">この拡張機能を実行するにはページを更新する必要があります。拡張機能アイコンを右クリックして、この拡張機能をこのサイトで自動的に実行するよう指定できます。</translation> <translation id="701080569351381435">ソースを表示</translation> <translation id="7012372675181957985">Google アカウントでの他の形式の閲覧履歴が <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> に残ることがあります</translation> @@ -3977,6 +3988,7 @@ <translation id="7180611975245234373">更新</translation> <translation id="7180865173735832675">カスタマイズ</translation> <translation id="7186088072322679094">ツールバーに残す</translation> +<translation id="7191159667348037">不明なプリンタ(USB)</translation> <translation id="7191454237977785534">名前を付けて保存</translation> <translation id="7196835305346730603">近くの Chromebox を検索しています...</translation> <translation id="7199158086730159431">ヘルプ(&E)</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb index d6f59a0..cb18a5e 100644 --- a/chrome/app/resources/generated_resources_kn.xtb +++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -1645,7 +1645,6 @@ <translation id="3479552764303398839">ಈಗ ಬೇಡ</translation> <translation id="3480892288821151001">ವಿಂಡೋದ ಎಡಕ್ಕೆ ಡಾಕ್ ಮಾಡಿ</translation> <translation id="3481915276125965083">ಕೆಳಗಿನ ಪಾಪ್-ಅಪ್ಗಳನ್ನು ಈ ಪುಟದಲ್ಲಿ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ:</translation> -<translation id="3482214069979148937">ಪೂರ್ಣಪರದೆಯಿಂದ ನಿರ್ಗಮಿಸಲು |<ph name="ACCELERATOR" />| ಹೋಲ್ಡ್ ಮಾಡಿ</translation> <translation id="3484273680291419129">ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು ತೆಗೆದುಹಾಕಲಾಗುತ್ತಿದೆ...</translation> <translation id="3484869148456018791">ಹೊಸ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಪಡೆಯಿರಿ</translation> <translation id="3487007233252413104">ಅನಾಮಧೇಯ ಕಾರ್ಯ</translation> @@ -3989,10 +3988,10 @@ <translation id="7170041865419449892">ವ್ಯಾಪ್ತಿಯ ಹೊರಗೆ</translation> <translation id="7173917244679555">ಆ ಹೆಸರಿನ ಮೂಲಕ ನೀವು ಈಗಾಗಲೇ ಬಳಕೆದಾರರನ್ನು ನಿರ್ವಹಿಸುತ್ತಿರುವಂತೆ ತೋರುತ್ತಿದೆ. ಈ ಸಾಧನಕ್ಕೆ <ph name="BEGIN_LINK" />ಆಮದು ಮಾಡಲು <ph name="PROFILE_NAME" /><ph name="END_LINK" /> ನೀವು ಬಯಸಿರುವಿರಾ?</translation> <translation id="7175353351958621980">ಇದರಿಂದ ಲೋಡ್ ಮಾಡಲಾಗಿದೆ:</translation> -<translation id="7180611975245234373">ರೀಫ್ರೆಶ್ ಮಾಡಿ</translation> +<translation id="7180611975245234373">ರಿಫ್ರೆಶ್ ಮಾಡಿ</translation> <translation id="7180865173735832675">ಕಸ್ಟಮೈಸ್</translation> <translation id="7186088072322679094">ಪರಿಕರಪಟ್ಟಿಯಲ್ಲಿ ಇರಿಸು</translation> -<translation id="7191159667348037">ಅಜ್ಞಾತ ಪ್ರಿಂಟರ್ (USB)</translation> +<translation id="7191159667348037">ಅಪರಿಚಿತ ಪ್ರಿಂಟರ್ (USB)</translation> <translation id="7191454237977785534">ಇದರಂತೆ ಫೈಲ್ ಉಳಿಸಿ</translation> <translation id="7196835305346730603">ಹತ್ತಿರದ Chromeboxes ಹುಡುಕಲಾಗುತ್ತಿದೆ...</translation> <translation id="7199158086730159431">ಸಹಾಯ ಪಡೆಯಿರಿ</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb index e835b8d..ca77a021 100644 --- a/chrome/app/resources/generated_resources_ko.xtb +++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -1647,7 +1647,6 @@ <translation id="3479552764303398839">나중에</translation> <translation id="3480892288821151001">창을 왼쪽에 고정</translation> <translation id="3481915276125965083">이 페이지에서 다음 팝업이 차단되었습니다.</translation> -<translation id="3482214069979148937">전체화면을 종료하려면 |<ph name="ACCELERATOR" />|을(를) 누르세요.</translation> <translation id="3484273680291419129">유해한 소프트웨어 삭제 중...</translation> <translation id="3484869148456018791">새로운 인증서 받기</translation> <translation id="3487007233252413104">익명의 함수</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb index ac07817b..796dcd0 100644 --- a/chrome/app/resources/generated_resources_lt.xtb +++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -1646,7 +1646,6 @@ <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> -<translation id="3482214069979148937">Laikykite nuspaudę |<ph name="ACCELERATOR" />|, kad išeitumėte iš viso ekrano režimo</translation> <translation id="3484273680291419129">Šalinama žalinga programinė įranga...</translation> <translation id="3484869148456018791">Gauti naują sertifikatą</translation> <translation id="3487007233252413104">anoniminė funkcija</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb index a3694792..54e236ed 100644 --- a/chrome/app/resources/generated_resources_lv.xtb +++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -1647,7 +1647,6 @@ <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> -<translation id="3482214069979148937">Lai izietu no pilnekrāna režīma, turiet nospiestu |<ph name="ACCELERATOR" />|.</translation> <translation id="3484273680291419129">Notiek kaitīgās programmatūras noņemšana…</translation> <translation id="3484869148456018791">Iegūt jaunu sertifikātu</translation> <translation id="3487007233252413104">anonīma funkcija</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb index 6a546e5..a28524a 100644 --- a/chrome/app/resources/generated_resources_ml.xtb +++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -1644,7 +1644,6 @@ <translation id="3479552764303398839">ഇപ്പോഴല്ല</translation> <translation id="3480892288821151001">വിൻഡോ ഇടതുവശത്തേയ്ക്ക് ഡോക്കുചെയ്യുക</translation> <translation id="3481915276125965083">ഈ പേജില് ഇനിപ്പറയുന്ന പോപ്പ്-അപ്പുകളെ തടഞ്ഞു:</translation> -<translation id="3482214069979148937">പൂർണ്ണ സ്ക്രീനിൽ നിന്ന് പുറത്തുകടക്കാൻ, |<ph name="ACCELERATOR" />| അമർത്തുക</translation> <translation id="3484273680291419129">ദോഷകരമായ സോഫ്റ്റ്വയർ നീക്കംചെയ്യുന്നു...</translation> <translation id="3484869148456018791">പുതിയ സർട്ടിഫിക്കറ്റ് ലഭ്യമാക്കുക</translation> <translation id="3487007233252413104">അജ്ഞാത പ്രവർത്തനം</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb index ab5606b..47145b1 100644 --- a/chrome/app/resources/generated_resources_mr.xtb +++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -1640,7 +1640,6 @@ <translation id="3479552764303398839">सध्या नाही</translation> <translation id="3480892288821151001">विंडो डावीकडे आणा</translation> <translation id="3481915276125965083">खालील पॉप-अप या पृष्ठावर अवरोधित केलेली आहेत:</translation> -<translation id="3482214069979148937">पूर्ण स्क्रीनमधून बाहेर पडण्यासाठी |<ph name="ACCELERATOR" />| धरून ठेवा</translation> <translation id="3484273680291419129">धोकादायक सॉफ्टवेअर काढत आहे...</translation> <translation id="3484869148456018791">नवीन प्रमाणपत्र मिळवा</translation> <translation id="3487007233252413104">अनामित कार्य</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb index 329b03de..46c0a77 100644 --- a/chrome/app/resources/generated_resources_ms.xtb +++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -1646,7 +1646,6 @@ <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> -<translation id="3482214069979148937">Tekan |<ph name="ACCELERATOR" />| untuk keluar daripada skrin penuh</translation> <translation id="3484273680291419129">Mengalih keluar perisian berbahaya...</translation> <translation id="3484869148456018791">Dapatkan sijil baharu</translation> <translation id="3487007233252413104">fungsi awanama</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb index e07ae7131..a5cb160 100644 --- a/chrome/app/resources/generated_resources_nl.xtb +++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -1646,7 +1646,6 @@ <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> -<translation id="3482214069979148937">Houd |<ph name="ACCELERATOR" />| ingedrukt om volledig scherm af te sluiten</translation> <translation id="3484273680291419129">Schadelijke software verwijderen...</translation> <translation id="3484869148456018791">Nieuw certificaat ophalen</translation> <translation id="3487007233252413104">anonieme functie</translation> @@ -2370,7 +2369,7 @@ <translation id="4664482161435122549">Fout bij exporteren van PKCS #12</translation> <translation id="466481852929361583">De beveiligde module wordt ingesteld. Even geduld, dit kan enkele minuten duren.</translation> <translation id="4665014895760275686">Fabrikant</translation> -<translation id="466506872045057845">Chrome stelt de machtigingen terug naar de standaardwaarden</translation> +<translation id="466506872045057845">Chrome reset de machtigingen naar de standaardwaarden</translation> <translation id="4667176955651319626">Indirecte cookies en sitegegevens blokkeren</translation> <translation id="4668721319092543482">Klik om <ph name="PLUGIN_NAME" /> in te schakelen</translation> <translation id="4668954208278016290">Er is een probleem opgetreden tijdens het uitpakken van de kopie naar de computer.</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb index 81243e14..529c45c 100644 --- a/chrome/app/resources/generated_resources_no.xtb +++ b/chrome/app/resources/generated_resources_no.xtb
@@ -67,6 +67,7 @@ <translation id="1110155001042129815">Vent</translation> <translation id="1110753181581583968">{NUM_DOWNLOAD,plural, =1{Fortsett nedlastingen}other{Fortsett nedlastingene}}</translation> <translation id="1110772031432362678">Finner ingen nettverk.</translation> +<translation id="1114102982691049955"><ph name="PRINTER_MANUFACTURER" /> <ph name="PRINTER_MODEL" /> (USB)</translation> <translation id="1114202307280046356">Diamant</translation> <translation id="1114335938027186412">Datamaskinen din inneholder en TPM-sikkerhetsenhet (Trusted Platform Module) som brukes til å implementere mange viktige sikkerhetsfunksjoner i Chrome OS. Gå til Chromebook-brukerstøtten for å finne ut mer: https://support.google.com/chromebook/?p=tpm</translation> <translation id="1114525161406758033">Gå i hvilemodus når maskinen lukkes</translation> @@ -883,6 +884,7 @@ <translation id="2378982052244864789">Velg katalog for utvidelsen.</translation> <translation id="2379281330731083556">Skriv ut med systemdialogen <ph name="SHORTCUT_KEY" /></translation> <translation id="2381756643783702095">Spør før noe sendes (anbefales).</translation> +<translation id="2384436799579181135">Det har oppstått en feil. Sjekk skriveren og prøv på nytt.</translation> <translation id="2385700042425247848">Tjenestenavn:</translation> <translation id="2391243203977115091"><ph name="FILE_COUNT" /> nye bilder ble funnet <ph name="LINE_BREAK1" /> @@ -1247,6 +1249,7 @@ <translation id="2897878306272793870">Er du sikker på at du vil åpne <ph name="TAB_COUNT" /> faner?</translation> <translation id="290105521672621980">Filen bruker funksjoner som ikke støttes</translation> <translation id="2902127500170292085"><ph name="EXTENSION_NAME" /> kunne ikke kommunisere med denne skriveren. Sørg for at skriveren er koblet til, og prøv igjen.</translation> +<translation id="2902312830803030883">Flere handlinger</translation> <translation id="2903457445916429186">Åpne de valgte elementene</translation> <translation id="2903493209154104877">Adresser</translation> <translation id="290444763029043472"><ph name="DOWNLOADED_AMOUNT_MB" /> MB / <ph name="TOTAL_AMOUNT_MB" /> MB nedlastet</translation> @@ -1359,6 +1362,7 @@ <translation id="3065041951436100775">Tilbakemelding for lukket fane.</translation> <translation id="3065140616557457172">Skriv inn det du vil søke etter – eller en nettadresse du vil gå til. Begge deler fungerer!</translation> <translation id="3067198360141518313">Kjør dette programtillegget</translation> +<translation id="3071624960923923138">Du kan klikke her for å åpne en ny fane</translation> <translation id="3074037959626057712">Du har logget på og slått på synkronisering</translation> <translation id="3075874217500066906">Du må starte enheten på nytt for å starte powerwash-prosessen. Når enheten er startet på nytt, blir du bedt om å bekrefte at du vil fortsette.</translation> <translation id="3076677906922146425">La hvem som helst legge til folk i Chrome</translation> @@ -1636,7 +1640,6 @@ <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> -<translation id="3482214069979148937">Hold |<ph name="ACCELERATOR" />| for å avslutte fullskjerm</translation> <translation id="3484273680291419129">Fjerner den skadelige programvaren …</translation> <translation id="3484869148456018791">Hent nytt sertifikat</translation> <translation id="3487007233252413104">anonym funksjon</translation> @@ -2257,6 +2260,7 @@ <translation id="450099669180426158">Utropstegnikon</translation> <translation id="4501530680793980440">Bekreftelse av fjerning</translation> <translation id="4504940961672722399">Bruk denne utvidelsen ved å klikke på ikonet eller trykke på <ph name="EXTENSION_SHORTCUT" />.</translation> +<translation id="4508051413094283164">Åpne alt i et inkognitovindu</translation> <translation id="4508265954913339219">Aktiveringen mislyktes</translation> <translation id="4508765956121923607">Vis &kilde</translation> <translation id="4509017836361568632">Slett bilde</translation> @@ -2357,6 +2361,7 @@ <translation id="4664482161435122549">Eksportfeil for PKCS #12</translation> <translation id="466481852929361583">Den sikre modulen konfigureres. Dette kan ta noen få minutter.</translation> <translation id="4665014895760275686">Produsent</translation> +<translation id="466506872045057845">Chrome tilbakestiller tillatelsene til standardinnstillingene</translation> <translation id="4667176955651319626">Blokkér informasjonskapsler og nettstedsdata fra tredjeparter</translation> <translation id="4668721319092543482">Klikk for å slå på <ph name="PLUGIN_NAME" /></translation> <translation id="4668954208278016290">Det oppstod et problem når bildet skulle pakkes ut på maskinen.</translation> @@ -2522,6 +2527,7 @@ <translation id="4903369323166982260">Kjør opprydningsverktøyet for Chrome</translation> <translation id="4907161631261076876">Denne filen lastes sjelden ned, og den kan være farlig.</translation> <translation id="4907306957610201395">Tillatelseskategori</translation> +<translation id="4908811072292128752">Åpne en ny fane for å surfe på to nettsteder samtidig</translation> <translation id="4909038193460299775">Siden denne kontoen administreres av <ph name="DOMAIN" />, slettes bokmerkene, loggen, passordene og andre innstillinger du har, fra denne enheten. Data du har lagret i Google-kontoen din, blir imidlertid værende og kan administreres ved hjelp av <ph name="BEGIN_LINK" />Google Oversikt<ph name="END_LINK" />.</translation> <translation id="4910021444507283344">WebGL</translation> <translation id="4911714727432509308">Ingen utvidelser har tildelte hurtigtaster.</translation> @@ -2707,6 +2713,7 @@ <translation id="521582610500777512">Bildet er forkastet</translation> <translation id="5222676887888702881">Logg av</translation> <translation id="5225324770654022472">Vis appsnarveien</translation> +<translation id="5225360179303283478">Tilbakestill innstillingene for nettstedet</translation> <translation id="5227536357203429560">Legg til privat nettverk</translation> <translation id="5227679487546032910">Blågrønt standardbrukerbilde</translation> <translation id="5227808808023563348">Finn forrige tekst</translation> @@ -3582,6 +3589,7 @@ <translation id="655384502888039633"><ph name="USER_COUNT" /> brukere</translation> <translation id="6555432686520421228">Fjern alle brukerkontoer og tilbakestill <ph name="IDS_SHORT_PRODUCT_NAME" />-enheten din til fabrikkstandard.</translation> <translation id="6556866813142980365">Gjør om</translation> +<translation id="6558280019477628686">Det oppsto en feil. Enkelte elementer ble muligens ikke slettet.</translation> <translation id="6559580823502247193">(er allerede på denne enheten)</translation> <translation id="6561726789132298588">enter</translation> <translation id="6562437808764959486">Pakker ut gjenopprettingsbilde …</translation> @@ -3653,6 +3661,7 @@ <translation id="6664237456442406323">Dessverre er datamaskinen konfigurert med en feilformatert maskinvare-ID. Dette hindrer Chrome OS fra å oppdatere til de siste sikkerhetsoppdateringene, og datamaskinen din <ph name="BEGIN_BOLD" />kan utsettes for skadelige angrep<ph name="END_BOLD" />.</translation> <translation id="6664774537677393800">Det oppsto en feil ved åpning av profilen din. Logg av og på igjen.</translation> <translation id="6666647326143344290">med Google-kontoen din</translation> +<translation id="6673391612973410118"><ph name="PRINTER_MAKE_OR_MODEL" /> (USB)</translation> <translation id="667517062706956822">Vil du at Google skal oversette denne siden fra <ph name="SOURCE_LANGUAGE" /> til <ph name="TARGET_LANGUAGE" />?</translation> <translation id="6675665718701918026">En pekeenhet er koblet til</translation> <translation id="6677037229676347494">Den forventede ID-en var «<ph name="EXPECTED_ID" />», men den faktiske ID-en var «<ph name="NEW_ID" />».</translation> @@ -3684,6 +3693,7 @@ <translation id="6716704051134091292">PDF Convertor</translation> <translation id="6718273304615422081">Zipper ...</translation> <translation id="671928215901716392">Lås skjerm</translation> +<translation id="67211069045302358">Vil du tilbakestille innstillingene for dette nettstedet?</translation> <translation id="6721972322305477112">&Fil</translation> <translation id="672213144943476270">Du må låse opp profilen din før du kan surfe som gjest.</translation> <translation id="6723354935081862304">Skriv ut til Google Dokumenter og andre destinasjoner i nettskyen. <ph name="BEGIN_LINK" />Logg på<ph name="END_LINK" /> for å skrive ut med Google Cloud Print.</translation> @@ -3860,6 +3870,7 @@ <translation id="7005848115657603926">Ugyldig sideområde. Bruk <ph name="EXAMPLE_PAGE_RANGE" /></translation> <translation id="7006634003215061422">Bunnmarg</translation> <translation id="7006844981395428048">$1-lyd</translation> +<translation id="7007648447224463482">Åpne alt i et nytt vindu</translation> <translation id="7008270479623533562">For å kjøre denne utvidelsen må du laste inn siden på nytt. Du kan kjøre denne utvidelsen automatisk på dette nettstedet ved å høyreklikke på ikonet for utvidelsen.</translation> <translation id="701080569351381435">Se kilde</translation> <translation id="7012372675181957985">Google-kontoen din kan ha andre typer nettlesingslogger på <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /></translation> @@ -3964,6 +3975,7 @@ <translation id="7180611975245234373">Last inn på nytt</translation> <translation id="7180865173735832675">Tilpass</translation> <translation id="7186088072322679094">Behold i verktøyraden</translation> +<translation id="7191159667348037">Ukjent skriver (USB)</translation> <translation id="7191454237977785534">Lagre filen som</translation> <translation id="7196835305346730603">Søker etter Chromebox-enheter i nærheten …</translation> <translation id="7199158086730159431">Få hjelp</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb index 33f867c..34830ac 100644 --- a/chrome/app/resources/generated_resources_pl.xtb +++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -1645,7 +1645,6 @@ <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> -<translation id="3482214069979148937">Aby zamknąć pełny ekran, przytrzymaj |<ph name="ACCELERATOR" />|</translation> <translation id="3484273680291419129">Usuwam szkodliwe oprogramowanie…</translation> <translation id="3484869148456018791">Pobierz nowy certyfikat</translation> <translation id="3487007233252413104">funkcja anonimowa</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb index 2d656c9..63779d1 100644 --- a/chrome/app/resources/generated_resources_pt-BR.xtb +++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -1645,7 +1645,6 @@ <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> -<translation id="3482214069979148937">Mantenha |<ph name="ACCELERATOR" />| pressionado para sair do modo tela cheia</translation> <translation id="3484273680291419129">Removendo software perigoso...</translation> <translation id="3484869148456018791">Obter novo certificado</translation> <translation id="3487007233252413104">função anônima</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb index 58973d6e..5a0c843 100644 --- a/chrome/app/resources/generated_resources_pt-PT.xtb +++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -87,7 +87,7 @@ <translation id="1128591060186966949">Editar motor de pesquisa</translation> <translation id="1128987120443782698">O dispositivo de armazenamento tem uma capacidade de <ph name="DEVICE_CAPACITY" />. Insira um cartão SD ou memory stick USB com uma capacidade mínima de 4 GB.</translation> <translation id="1131167343343087859">Cartões de crédito e endereços com o Google Payments.</translation> -<translation id="1134009406053225289">Abrir na janela sem registo</translation> +<translation id="1134009406053225289">Abrir na janela de navegação anónima</translation> <translation id="1140351953533677694">Aceder aos dispositivos Bluetooth e de série</translation> <translation id="114140604515785785">Diretório raiz da extensão:</translation> <translation id="1143142264369994168">Signatário do certificado</translation> @@ -1647,7 +1647,6 @@ <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> -<translation id="3482214069979148937">Premir sem soltar |<ph name="ACCELERATOR" />| para sair do ecrã inteiro</translation> <translation id="3484273680291419129">A remover software prejudicial…</translation> <translation id="3484869148456018791">Obter novo certificado</translation> <translation id="3487007233252413104">função anónima</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb index b5ec3f9..2d3b4d9d4 100644 --- a/chrome/app/resources/generated_resources_ro.xtb +++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -1645,7 +1645,6 @@ <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> -<translation id="3482214069979148937">Pentru a ieși din ecranul complet, apasă lung pe |<ph name="ACCELERATOR" />|</translation> <translation id="3484273680291419129">Se elimină software-ul dăunător...</translation> <translation id="3484869148456018791">Obțineți un certificat nou</translation> <translation id="3487007233252413104">funcție anonimă</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb index b05337c9f..756bb09 100644 --- a/chrome/app/resources/generated_resources_ru.xtb +++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -1646,7 +1646,6 @@ <translation id="3479552764303398839">Не сейчас</translation> <translation id="3480892288821151001">Закрепить окно слева</translation> <translation id="3481915276125965083">Заблокированы следующие всплывающие окна:</translation> -<translation id="3482214069979148937">Нажмите и удерживайте клавишу |<ph name="ACCELERATOR" />|, чтобы выйти из полноэкранного режима</translation> <translation id="3484273680291419129">Удаление вредоносного ПО...</translation> <translation id="3484869148456018791">Получить новый сертификат</translation> <translation id="3487007233252413104">анонимные функции</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb index f93b338..7d244b9c 100644 --- a/chrome/app/resources/generated_resources_sk.xtb +++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -1647,7 +1647,6 @@ <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> -<translation id="3482214069979148937">Režim celej obrazovky ukončíte stlačením klávesa |<ph name="ACCELERATOR" />|</translation> <translation id="3484273680291419129">Odstraňujte sa škodlivý softvér…</translation> <translation id="3484869148456018791">Získať nový certifikát</translation> <translation id="3487007233252413104">anonymná funkcia</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb index 8693ccc..846f8d2 100644 --- a/chrome/app/resources/generated_resources_sl.xtb +++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -1647,7 +1647,6 @@ <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> -<translation id="3482214069979148937">Pridržite |<ph name="ACCELERATOR" />| za zapiranje celozaslonskega načina</translation> <translation id="3484273680291419129">Odstranjevanje škodljive programske opreme ...</translation> <translation id="3484869148456018791">Prenesite novo potrdilo</translation> <translation id="3487007233252413104">anonimna funkcija</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb index 29f1206f..643c5d4 100644 --- a/chrome/app/resources/generated_resources_sr.xtb +++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -1643,7 +1643,6 @@ <translation id="3479552764303398839">Не сада</translation> <translation id="3480892288821151001">Спајање прозора са леве стране</translation> <translation id="3481915276125965083">Следећи искачући прозори су блокирани на овој страници:</translation> -<translation id="3482214069979148937">Притисните и задржите |<ph name="ACCELERATOR" />| да бисте изашли из режима целог екрана</translation> <translation id="3484273680291419129">Штетан софтвер се уклања...</translation> <translation id="3484869148456018791">Набави нови сертификат</translation> <translation id="3487007233252413104">анонимна функција</translation> @@ -2266,7 +2265,7 @@ <translation id="450099669180426158">Икона узвичника</translation> <translation id="4501530680793980440">Потврда уклањања</translation> <translation id="4504940961672722399">Користите овај додатак кликом на ову икону или притиском на <ph name="EXTENSION_SHORTCUT" />.</translation> -<translation id="4508051413094283164">Отвори све у прозору Без архивирања</translation> +<translation id="4508051413094283164">Отвори све у прозору без архивирања</translation> <translation id="4508265954913339219">Активација није успела</translation> <translation id="4508765956121923607">Прикажи и&звор</translation> <translation id="4509017836361568632">Одбаци слику</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb index be26b4b..da6fbbc 100644 --- a/chrome/app/resources/generated_resources_sv.xtb +++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -1645,7 +1645,6 @@ <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> -<translation id="3482214069979148937">Tryck länge på |<ph name="ACCELERATOR" />| för att avsluta helskärmsläget</translation> <translation id="3484273680291419129">Den skadliga programvaran tas bort …</translation> <translation id="3484869148456018791">Hämta nytt certifikat</translation> <translation id="3487007233252413104">anonym funktion</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb index 3722955..1206f4bd 100644 --- a/chrome/app/resources/generated_resources_sw.xtb +++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -1640,7 +1640,6 @@ <translation id="3479552764303398839">Sio sasa</translation> <translation id="3480892288821151001">Shikilia dirisha kushoto</translation> <translation id="3481915276125965083">Madirisha ibukizi yafuatayo yalizuiwa kwenye ukurasa huu:</translation> -<translation id="3482214069979148937">Shikilia |<ph name="ACCELERATOR" />| ili uondoke kwenye skrini nzima</translation> <translation id="3484273680291419129">Inaondoa programu hatari...</translation> <translation id="3484869148456018791">Pata cheti kipya</translation> <translation id="3487007233252413104">chaguo za kukokotoa zisizo na jina</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb index 39ec20e..9e2fa6e6 100644 --- a/chrome/app/resources/generated_resources_ta.xtb +++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -1645,7 +1645,6 @@ <translation id="3479552764303398839">இப்பொழுது இல்லை</translation> <translation id="3480892288821151001">சாளரத்தை இடப்பக்கம் பொருத்து</translation> <translation id="3481915276125965083">இந்தப் பக்கத்தில் பின்வரும் பாப்-அப்கள் தடுக்கப்பட்டன:</translation> -<translation id="3482214069979148937">முழுத் திரையிலிருந்து வெளியேற, |<ph name="ACCELERATOR" />|ஐப் பிடிக்கவும்</translation> <translation id="3484273680291419129">தீங்கிழைக்கும் மென்பொருளை அகற்றுகிறது...</translation> <translation id="3484869148456018791">புதிய சான்றிதழைப் பெறு</translation> <translation id="3487007233252413104">அநாமதேய செயல்பாடு</translation> @@ -2645,7 +2644,7 @@ <translation id="5098647635849512368">கோப்பகத்திலிருந்து தொகுப்பிற்கான அசல் பாதையைக் கண்டறிய முடியவில்லை.</translation> <translation id="5099354524039520280">மேல்</translation> <translation id="5100114659116077956">புதிய அம்சங்களை வழங்குவதற்காக, Chromebox புதுப்பிக்கப்பட வேண்டும்.</translation> -<translation id="5101042277149003567">புக்மார்க்ஸ் அனைத்தையும் திற</translation> +<translation id="5101042277149003567">புத்தகக்குறிகள் அனைத்தையும் திற</translation> <translation id="5105855035535475848">தாவல்களைப் பொருத்து</translation> <translation id="5108967062857032718">அமைப்புகள் - Android பயன்பாடுகளை அகற்றவும்</translation> <translation id="5109044022078737958">மியா</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb index 2c6cb46..c56f97b 100644 --- a/chrome/app/resources/generated_resources_te.xtb +++ b/chrome/app/resources/generated_resources_te.xtb
@@ -1300,7 +1300,7 @@ <translation id="2972557485845626008">ఫిర్మ్వేర్</translation> <translation id="2972581237482394796">&పునరావృతం</translation> <translation id="2972642118232180842">కేవలం ముఖ్యమైన కంటెంట్ను మాత్రమే అమలు చేయి (సిఫార్సు చేస్తున్నాము)</translation> -<translation id="2979639724566107830">క్రొత్త విండోలో తెరువు</translation> +<translation id="2979639724566107830">కొత్త విండోలో తెరువు</translation> <translation id="2981113813906970160">పెద్ద మౌస్ కర్సర్ను చూపు</translation> <translation id="2982970937345031">అనామకంగా నివేదించు</translation> <translation id="2984337792991268709">ఈ రోజు <ph name="TODAY_DAYTIME" /></translation> @@ -1645,7 +1645,6 @@ <translation id="3479552764303398839">ఇప్పుడు కాదు</translation> <translation id="3480892288821151001">విండోను ఎడమవైపుకు డాక్ చేయి</translation> <translation id="3481915276125965083">ఈ పేజీపై క్రింది పాప్-అప్లు నిరోధించబడ్డాయి:</translation> -<translation id="3482214069979148937">పూర్తి స్క్రీన్ నుండి నిష్క్రమించడానికి |<ph name="ACCELERATOR" />|ని నొక్కి, ఉంచండి</translation> <translation id="3484273680291419129">హానికరమైన సాఫ్ట్వేర్ని తీసివేస్తోంది...</translation> <translation id="3484869148456018791">క్రొత్త ప్రమాణపత్రాన్ని పొందండి</translation> <translation id="3487007233252413104">అజ్ఞాత కార్యాచరణ</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb index 4079ff3..01b76e9 100644 --- a/chrome/app/resources/generated_resources_th.xtb +++ b/chrome/app/resources/generated_resources_th.xtb
@@ -1645,7 +1645,6 @@ <translation id="3479552764303398839">ไม่ใช่ตอนนี้</translation> <translation id="3480892288821151001">จัดวางหน้าต่างไว้ทางซ้าย</translation> <translation id="3481915276125965083">หน้าเว็บนี้บล็อกป๊อปอัปต่อไปนี้:</translation> -<translation id="3482214069979148937">กด |<ph name="ACCELERATOR" />| ค้างไว้เพื่อออกจากโหมดเต็มหน้าจอ</translation> <translation id="3484273680291419129">กำลังนำซอฟต์แวร์อันตรายออก...</translation> <translation id="3484869148456018791">รับใบรับรองใหม่</translation> <translation id="3487007233252413104">ฟังก์ชันที่ไม่ระบุชื่อ</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb index 2a8340b..efcfaaf7 100644 --- a/chrome/app/resources/generated_resources_tr.xtb +++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -1646,7 +1646,6 @@ <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> -<translation id="3482214069979148937">Tam ekrandan çıkmak için |<ph name="ACCELERATOR" />| tuşunu basılı tutun</translation> <translation id="3484273680291419129">Zararlı yazılım kaldırılıyor...</translation> <translation id="3484869148456018791">Yeni sertifika al</translation> <translation id="3487007233252413104">anonim işlev</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb index 0e185faf..3846259 100644 --- a/chrome/app/resources/generated_resources_uk.xtb +++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -1645,7 +1645,6 @@ <translation id="3479552764303398839">Не зараз</translation> <translation id="3480892288821151001">Закріпити вікно ліворуч</translation> <translation id="3481915276125965083">На цій сторінці заблоковано такі спливаючі вікна:</translation> -<translation id="3482214069979148937">Натисніть і утримуйте |<ph name="ACCELERATOR" />|, щоб вийти з повноекранного режиму</translation> <translation id="3484273680291419129">Вилучення зловмисного програмного забезпечення…</translation> <translation id="3484869148456018791">Отримати новий сертифікат</translation> <translation id="3487007233252413104">анонімна функція</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb index 451dbef..2c80133 100644 --- a/chrome/app/resources/generated_resources_vi.xtb +++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -1302,7 +1302,7 @@ <translation id="2972557485845626008">Chương trình cơ sở</translation> <translation id="2972581237482394796">&Làm lại</translation> <translation id="2972642118232180842">Chỉ chạy nội dung quan trọng (được đề xuất)</translation> -<translation id="2979639724566107830">Mở bằng cửa sổ mới</translation> +<translation id="2979639724566107830">Mở trong cửa sổ mới</translation> <translation id="2981113813906970160">Hiển thị con trỏ chuột lớn</translation> <translation id="2982970937345031">Báo cáo ẩn danh</translation> <translation id="2984337792991268709">Hôm nay <ph name="TODAY_DAYTIME" /></translation> @@ -1647,7 +1647,6 @@ <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> -<translation id="3482214069979148937">Giữ |<ph name="ACCELERATOR" />| để thoát chế độ toàn màn hình</translation> <translation id="3484273680291419129">Đang xóa phần mềm độc hại...</translation> <translation id="3484869148456018791">Nhận chứng chỉ mới</translation> <translation id="3487007233252413104">chức năng ẩn danh</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb index 826e7472..2ce851fa7 100644 --- a/chrome/app/resources/generated_resources_zh-CN.xtb +++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -87,7 +87,7 @@ <translation id="1128591060186966949">修改搜索引擎</translation> <translation id="1128987120443782698">该存储设备的容量为 <ph name="DEVICE_CAPACITY" />。请插入容量至少为 4 GB 的 SD 卡或 USB 记忆棒。</translation> <translation id="1131167343343087859">Google Payments 中存储的信用卡和地址信息。</translation> -<translation id="1134009406053225289">在隐身窗口中打开</translation> +<translation id="1134009406053225289">在无痕式窗口中打开</translation> <translation id="1140351953533677694">访问您的蓝牙和串行设备</translation> <translation id="114140604515785785">扩展程序根目录:</translation> <translation id="1143142264369994168">证书签名人</translation> @@ -1639,7 +1639,6 @@ <translation id="3479552764303398839">以后再说</translation> <translation id="3480892288821151001">将窗口固定到左侧</translation> <translation id="3481915276125965083">已拦截此网页上的下列弹出式窗口:</translation> -<translation id="3482214069979148937">按住 |<ph name="ACCELERATOR" />| 即可退出全屏模式</translation> <translation id="3484273680291419129">正在移除有害软件…</translation> <translation id="3484869148456018791">获取新的证书</translation> <translation id="3487007233252413104">匿名函数</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb index 9e38715d..71ecccfe 100644 --- a/chrome/app/resources/generated_resources_zh-TW.xtb +++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -1645,7 +1645,6 @@ <translation id="3479552764303398839">現在不要</translation> <translation id="3480892288821151001">靠左固定視窗</translation> <translation id="3481915276125965083">系統已封鎖此網頁的下列彈出式視窗:</translation> -<translation id="3482214069979148937">按住 |<ph name="ACCELERATOR" />| 即可結束全螢幕模式</translation> <translation id="3484273680291419129">正在移除有害軟體...</translation> <translation id="3484869148456018791">取得新憑證</translation> <translation id="3487007233252413104">匿名函式</translation>
diff --git a/chrome/app/resources/google_chrome_strings_de.xtb b/chrome/app/resources/google_chrome_strings_de.xtb index e4340db..2bc28f5 100644 --- a/chrome/app/resources/google_chrome_strings_de.xtb +++ b/chrome/app/resources/google_chrome_strings_de.xtb
@@ -69,7 +69,7 @@ <translation id="2799223571221894425">Neu starten</translation> <translation id="2847461019998147611">Google Chrome in dieser Sprache anzeigen</translation> <translation id="2871893339301912279">Sie sind in Chrome angemeldet.</translation> -<translation id="2888126860611144412">Info zu Chrome</translation> +<translation id="2888126860611144412">Über Google Chrome</translation> <translation id="3037838751736561277">Google Chrome wird im Hintergrundmodus ausgeführt.</translation> <translation id="3047079729301751317">Wenn Sie die Verbindung zu <ph name="USERNAME" /> trennen, werden Ihr Verlauf sowie Ihre Lesezeichen, Einstellungen und sonstigen auf diesem Gerät gespeicherten Chrome-Daten gelöscht. In Ihrem Google-Konto gespeicherte Daten bleiben erhalten und können über das <ph name="GOOGLE_DASHBOARD_LINK" />Google Dashboard<ph name="END_GOOGLE_DASHBOARD_LINK" /> verwaltet werden.</translation> <translation id="3065168410429928842">Chrome-Tab</translation>
diff --git a/chrome/app/resources/google_chrome_strings_en-GB.xtb b/chrome/app/resources/google_chrome_strings_en-GB.xtb index 1a9ce46..b877a459 100644 --- a/chrome/app/resources/google_chrome_strings_en-GB.xtb +++ b/chrome/app/resources/google_chrome_strings_en-GB.xtb
@@ -135,6 +135,7 @@ <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation> <translation id="4771048833395599659">This file may be dangerous, so Chrome has blocked it.</translation> <translation id="4794050651896644714">Save details in Chrome</translation> +<translation id="4804732725083176494">Sign in to Chrome is disabled by the administrator of this device.</translation> <translation id="4891791193823137474">Let Google Chrome run in the background</translation> <translation id="4921569541910214635">Share a computer? Now you can set up Chrome just the way you like it.</translation> <translation id="4953650215774548573">Set Google Chrome as your default browser</translation>
diff --git a/chrome/app/resources/google_chrome_strings_kn.xtb b/chrome/app/resources/google_chrome_strings_kn.xtb index 7b41ef25..6a25f84 100644 --- a/chrome/app/resources/google_chrome_strings_kn.xtb +++ b/chrome/app/resources/google_chrome_strings_kn.xtb
@@ -13,7 +13,7 @@ <translation id="1350930993895295930">Chrome ಅಸಹಜ ವರ್ತನೆಯನ್ನು ಪತ್ತೆಹಚ್ಚಿದೆ</translation> <translation id="137466361146087520">Google Chrome ಬೀಟಾ</translation> <translation id="1393853151966637042">Chrome ಅನ್ನು ಬಳಸಿಕೊಳ್ಳುವುದರೊಂದಿಗೆ ಸಹಾಯವನ್ನು ಪಡೆಯಿರಿ</translation> -<translation id="1399397803214730675">ಈ ಕಂಪ್ಯೂಟರ್ ಈಗಾಗಲೇ ತೀರಾ ಇತ್ತೀಚೆಗಿನ Google Chrome ಆವೃತ್ತಿಯನ್ನು ಹೊಂದಿದೆ. ಸಾಫ್ಟ್ವೇರ್ ಕಾರ್ಯ ನಿರ್ವಹಿಸದೆ ಇದ್ದರೆ, ದಯವಿಟ್ಟು Google Chrome ಅನ್ನು ಅಸ್ಥಾಪಿಸಿ ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.</translation> +<translation id="1399397803214730675">ಈ ಕಂಪ್ಯೂಟರ್ ಈಗಾಗಲೇ ತೀರಾ ಇತ್ತೀಚೆಗಿನ Google Chrome ಆವೃತ್ತಿಯನ್ನು ಹೊಂದಿದೆ. ಸಾಫ್ಟ್ವೇರ್ ಕಾರ್ಯ ನಿರ್ವಹಿಸದೆ ಇದ್ದರೆ, ದಯವಿಟ್ಟು Google Chrome ಅನ್ನು ಅನ್ಇನ್ಸ್ಟಾಲ್ ಮಾಡಿ ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="1434626383986940139">Chrome ಕ್ಯಾನರಿ ಅಪ್ಲಿಕೇಶನ್ಗಳು</translation> <translation id="1457721931618994305">Google Chrome ನವೀಕರಿಸಲಾಗುತ್ತಿದೆ...</translation> <translation id="1469002951682717133">Chrome ಅಪ್ಲಿಕೇಶನ್ ಲಾಂಚರ್</translation>
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp index 8bb443e..1c870f2 100644 --- a/chrome/app/settings_strings.grdp +++ b/chrome/app/settings_strings.grdp
@@ -3106,6 +3106,9 @@ <message name="IDS_SETTINGS_MOUSE_SWAP_BUTTONS_LABEL" desc="In Device Settings, the text next to the checkbox to set the primary mouse button to the right button instead of the left button."> Swap primary mouse button </message> + <message name="IDS_SETTINGS_MOUSE_REVERSE_SCROLL_LABEL" desc="In Device Settings, the text next to the checkbox to set reverse scrolling."> + Reverse scrolling + </message> <!-- Keyboard --> <message name="IDS_SETTINGS_KEYBOARD_KEY_SEARCH" desc="In Device Settings, the label and dropdown list item for the Search key."> Search
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 1ad51ad..4c670044 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -70,8 +70,6 @@ sources = [ "about_flags.cc", "about_flags.h", - "accessibility/accessibility_permission_context.cc", - "accessibility/accessibility_permission_context.h", "after_startup_task_utils.cc", "after_startup_task_utils.h", "app_controller_mac.h",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 4cc4f78a4..ca1d50a9 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -101,6 +101,7 @@ #include "ppapi/features/features.h" #include "printing/features/features.h" #include "services/device/public/cpp/device_features.h" +#include "ui/app_list/app_list_features.h" #include "ui/base/ui_base_switches.h" #include "ui/compositor/compositor_switches.h" #include "ui/display/display_switches.h" @@ -1532,12 +1533,12 @@ "enable-fullscreen-app-list", flag_descriptions::kEnableFullscreenAppListName, flag_descriptions::kEnableFullscreenAppListDescription, kOsCrOS, - SINGLE_VALUE_TYPE(app_list::switches::kEnableFullscreenAppList), + FEATURE_VALUE_TYPE(app_list::features::kEnableFullscreenAppList), }, { "enable-background-blur", flag_descriptions::kEnableBackgroundBlurName, flag_descriptions::kEnableBackgroundBlurDescription, kOsCrOS, - SINGLE_VALUE_TYPE(app_list::switches::kEnableBackgroundBlur), + FEATURE_VALUE_TYPE(app_list::features::kEnableBackgroundBlur), }, {"instant-tethering", flag_descriptions::kTetherName, flag_descriptions::kTetherDescription, kOsCrOS, @@ -3401,6 +3402,12 @@ FEATURE_VALUE_TYPE(features::kDoodlesOnLocalNtp)}, #endif // !defined(OS_ANDROID) +#if !defined(OS_ANDROID) + {"sound-content-setting", flag_descriptions::kSoundContentSettingName, + flag_descriptions::kSoundContentSettingDescription, kOsDesktop, + FEATURE_VALUE_TYPE(features::kSoundContentSetting)}, +#endif // !defined(OS_ANDROID) + // NOTE: Adding new command-line switches requires adding corresponding // entries to enum "LoginCustomFlags" in histograms/enums.xml. See note in // enums.xml and don't forget to run AboutFlagsHistogramTest unit test.
diff --git a/chrome/browser/accessibility/accessibility_permission_context.cc b/chrome/browser/accessibility/accessibility_permission_context.cc deleted file mode 100644 index b62f2622..0000000 --- a/chrome/browser/accessibility/accessibility_permission_context.cc +++ /dev/null
@@ -1,17 +0,0 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/accessibility/accessibility_permission_context.h" - -AccessibilityPermissionContext::AccessibilityPermissionContext(Profile* profile) - : PermissionContextBase( - profile, - CONTENT_SETTINGS_TYPE_ACCESSIBILITY_EVENTS, - blink::WebFeaturePolicyFeature::kAccessibilityEvents) {} - -AccessibilityPermissionContext::~AccessibilityPermissionContext() = default; - -bool AccessibilityPermissionContext::IsRestrictedToSecureOrigins() const { - return false; -}
diff --git a/chrome/browser/accessibility/accessibility_permission_context.h b/chrome/browser/accessibility/accessibility_permission_context.h deleted file mode 100644 index c22e5bd..0000000 --- a/chrome/browser/accessibility/accessibility_permission_context.h +++ /dev/null
@@ -1,23 +0,0 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_ACCESSIBILITY_ACCESSIBILITY_PERMISSION_CONTEXT_H_ -#define CHROME_BROWSER_ACCESSIBILITY_ACCESSIBILITY_PERMISSION_CONTEXT_H_ - -#include "base/macros.h" -#include "chrome/browser/permissions/permission_context_base.h" - -class AccessibilityPermissionContext : public PermissionContextBase { - public: - explicit AccessibilityPermissionContext(Profile* profile); - ~AccessibilityPermissionContext() override; - - private: - // PermissionContextBase: - bool IsRestrictedToSecureOrigins() const override; - - DISALLOW_COPY_AND_ASSIGN(AccessibilityPermissionContext); -}; - -#endif // CHROME_BROWSER_ACCESSIBILITY_ACCESSIBILITY_PERMISSION_CONTEXT_H_
diff --git a/chrome/browser/android/resource_id.h b/chrome/browser/android/resource_id.h index aeab7e7..10614ad 100644 --- a/chrome/browser/android/resource_id.h +++ b/chrome/browser/android/resource_id.h
@@ -24,8 +24,6 @@ LINK_RESOURCE_ID(IDR_BLOCKED_POPUPS, R.drawable.infobar_blocked_popups) // Android only infobars. -DECLARE_RESOURCE_ID(IDR_ANDROID_INFOBAR_ACCESSIBILITY_EVENTS, - R.drawable.infobar_accessibility_events) DECLARE_RESOURCE_ID(IDR_ANDROID_INFOBAR_FROZEN_TAB, R.drawable.infobar_restore) DECLARE_RESOURCE_ID(IDR_ANDROID_INFOBAR_GEOLOCATION, R.drawable.infobar_geolocation)
diff --git a/chrome/browser/apps/app_browsertest.cc b/chrome/browser/apps/app_browsertest.cc index 78cf7ba7..cdc539d 100644 --- a/chrome/browser/apps/app_browsertest.cc +++ b/chrome/browser/apps/app_browsertest.cc
@@ -13,6 +13,7 @@ #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h" #include "base/macros.h" +#include "base/run_loop.h" #include "base/stl_util.h" #include "base/strings/utf_string_conversions.h" #include "base/threading/thread_restrictions.h"
diff --git a/chrome/browser/apps/app_shim/app_shim_interactive_uitest_mac.mm b/chrome/browser/apps/app_shim/app_shim_interactive_uitest_mac.mm index 17403691..b92dfdb6 100644 --- a/chrome/browser/apps/app_shim/app_shim_interactive_uitest_mac.mm +++ b/chrome/browser/apps/app_shim/app_shim_interactive_uitest_mac.mm
@@ -15,6 +15,7 @@ #include "base/macros.h" #include "base/path_service.h" #include "base/process/launch.h" +#include "base/run_loop.h" #include "base/strings/sys_string_conversions.h" #include "base/test/scoped_feature_list.h" #include "base/test/test_timeouts.h"
diff --git a/chrome/browser/apps/guest_view/web_view_interactive_browsertest.cc b/chrome/browser/apps/guest_view/web_view_interactive_browsertest.cc index 81d599c..4b45324f6 100644 --- a/chrome/browser/apps/guest_view/web_view_interactive_browsertest.cc +++ b/chrome/browser/apps/guest_view/web_view_interactive_browsertest.cc
@@ -8,6 +8,7 @@ #include "base/location.h" #include "base/macros.h" +#include "base/run_loop.h" #include "base/single_thread_task_runner.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h"
diff --git a/chrome/browser/autocomplete/keyword_extensions_delegate_impl_unittest.cc b/chrome/browser/autocomplete/keyword_extensions_delegate_impl_unittest.cc index e76fa79..77c0b3a 100644 --- a/chrome/browser/autocomplete/keyword_extensions_delegate_impl_unittest.cc +++ b/chrome/browser/autocomplete/keyword_extensions_delegate_impl_unittest.cc
@@ -9,6 +9,7 @@ #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/path_service.h" +#include "base/run_loop.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_service_test_base.h" #include "chrome/browser/extensions/extension_util.h"
diff --git a/chrome/browser/background/background_application_list_model_unittest.cc b/chrome/browser/background/background_application_list_model_unittest.cc index 0dc0cc335..927aa3ea 100644 --- a/chrome/browser/background/background_application_list_model_unittest.cc +++ b/chrome/browser/background/background_application_list_model_unittest.cc
@@ -17,6 +17,7 @@ #include "base/files/file_path.h" #include "base/memory/ptr_util.h" #include "base/message_loop/message_loop.h" +#include "base/run_loop.h" #include "base/stl_util.h" #include "build/build_config.h" #include "chrome/browser/extensions/extension_service.h"
diff --git a/chrome/browser/bitmap_fetcher/bitmap_fetcher_browsertest.cc b/chrome/browser/bitmap_fetcher/bitmap_fetcher_browsertest.cc index f188149..bb90df207 100644 --- a/chrome/browser/bitmap_fetcher/bitmap_fetcher_browsertest.cc +++ b/chrome/browser/bitmap_fetcher/bitmap_fetcher_browsertest.cc
@@ -6,6 +6,7 @@ #include "base/compiler_specific.h" #include "base/macros.h" +#include "base/run_loop.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" #include "chrome/test/base/in_process_browser_test.h"
diff --git a/chrome/browser/chrome_browser_main_win.cc b/chrome/browser/chrome_browser_main_win.cc index 7ff8d5c..8dc50de 100644 --- a/chrome/browser/chrome_browser_main_win.cc +++ b/chrome/browser/chrome_browser_main_win.cc
@@ -69,6 +69,7 @@ #include "chrome/installer/util/installer_util_strings.h" #include "chrome/installer/util/l10n_string_util.h" #include "chrome/installer/util/shell_util.h" +#include "components/crash/content/app/crash_export_thunks.h" #include "content/public/browser/browser_thread.h" #include "content/public/common/content_switches.h" #include "content/public/common/main_function_params.h" @@ -87,27 +88,9 @@ const wchar_t* command_line, DWORD flags); -// TODO(siggi): Replace this with link-time binding to the right code. -// See https://crbug.com/753363. -int UnhandledExceptionFilterWrapper(EXCEPTION_POINTERS* info) { - return UnhandledExceptionFilter(info); -} - void InitializeWindowProcExceptions() { - // Get the exception filter from chrome_elf.dll, if present. In tests, - // chrome_elf won't be present, in which case use the UnhandledExceptionFilter - // to ensure the process crashes. - HMODULE chrome_elf = ::GetModuleHandle(chrome::kChromeElfDllName); - base::win::WinProcExceptionFilter exception_filter = nullptr; - if (chrome_elf) { - exception_filter = reinterpret_cast<base::win::WinProcExceptionFilter>( - ::GetProcAddress(chrome_elf, "CrashForException")); - } else { - exception_filter = &UnhandledExceptionFilterWrapper; - } - - CHECK(exception_filter); - exception_filter = base::win::SetWinProcExceptionFilter(exception_filter); + base::win::WinProcExceptionFilter exception_filter = + base::win::SetWinProcExceptionFilter(&CrashForException); DCHECK(!exception_filter); }
diff --git a/chrome/browser/chrome_navigation_browsertest.cc b/chrome/browser/chrome_navigation_browsertest.cc index 4b4100c..4fb631f 100644 --- a/chrome/browser/chrome_navigation_browsertest.cc +++ b/chrome/browser/chrome_navigation_browsertest.cc
@@ -3,6 +3,7 @@ // found in the LICENSE file. #include "base/command_line.h" +#include "base/run_loop.h" #include "base/test/scoped_feature_list.h" #include "base/test/test_timeouts.h" #include "chrome/app/chrome_command_ids.h"
diff --git a/chrome/browser/chrome_site_per_process_browsertest.cc b/chrome/browser/chrome_site_per_process_browsertest.cc index 606d812..c263724 100644 --- a/chrome/browser/chrome_site_per_process_browsertest.cc +++ b/chrome/browser/chrome_site_per_process_browsertest.cc
@@ -8,6 +8,7 @@ #include "base/files/file_path.h" #include "base/macros.h" #include "base/path_service.h" +#include "base/run_loop.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/chrome_content_browser_client.h"
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index be834deb..0964d238 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -323,6 +323,8 @@ "arc/auth/arc_manual_auth_code_fetcher.h", "arc/auth/arc_robot_auth_code_fetcher.cc", "arc/auth/arc_robot_auth_code_fetcher.h", + "arc/bluetooth/arc_bluetooth_bridge.cc", + "arc/bluetooth/arc_bluetooth_bridge.h", "arc/boot_phase_monitor/arc_boot_phase_monitor_bridge.cc", "arc/boot_phase_monitor/arc_boot_phase_monitor_bridge.h", "arc/boot_phase_monitor/arc_instance_throttle.cc", @@ -1686,6 +1688,7 @@ "arc/arc_session_manager_unittest.cc", "arc/arc_support_host_unittest.cc", "arc/arc_util_unittest.cc", + "arc/bluetooth/arc_bluetooth_bridge_unittest.cc", "arc/boot_phase_monitor/arc_boot_phase_monitor_bridge_unittest.cc", "arc/downloads_watcher/arc_downloads_watcher_service_unittest.cc", "arc/extensions/arc_support_message_host_unittest.cc", @@ -1986,6 +1989,7 @@ "//content/test:test_support", "//crypto:platform", "//dbus", + "//device/bluetooth", "//google_apis:test_support", "//mojo/public/cpp/system:system", "//skia",
diff --git a/chrome/browser/chromeos/accessibility/accessibility_manager.cc b/chrome/browser/chromeos/accessibility/accessibility_manager.cc index 7d747367..fb65bd0 100644 --- a/chrome/browser/chromeos/accessibility/accessibility_manager.cc +++ b/chrome/browser/chromeos/accessibility/accessibility_manager.cc
@@ -105,10 +105,6 @@ // When this flag is set, system sounds will not be played. const char kAshDisableSystemSounds[] = "ash-disable-system-sounds"; -// When this flag is set, system sounds will be played whether the -// ChromeVox is enabled or not. -const char kAshEnableSystemSounds[] = "ash-enable-system-sounds"; - static chromeos::AccessibilityManager* g_accessibility_manager = NULL; static BrailleController* g_braille_controller_for_test = NULL; @@ -275,7 +271,6 @@ select_to_speak_enabled_(false), switch_access_enabled_(false), spoken_feedback_notification_(ash::A11Y_NOTIFICATION_NONE), - system_sounds_enabled_(false), braille_display_connected_(false), scoped_braille_observer_(this), braille_ime_current_(false), @@ -631,7 +626,7 @@ if (cl->HasSwitch(kAshDisableSystemSounds)) return false; if (option == PlaySoundOption::SPOKEN_FEEDBACK_ENABLED && - !IsSpokenFeedbackEnabled() && !cl->HasSwitch(kAshEnableSystemSounds)) { + !IsSpokenFeedbackEnabled()) { return false; } return media::SoundsManager::Get()->Play(sound_key); @@ -1353,14 +1348,7 @@ g_braille_controller_for_test = controller; } -void AccessibilityManager::EnableSystemSounds(bool system_sounds_enabled) { - system_sounds_enabled_ = system_sounds_enabled; -} - base::TimeDelta AccessibilityManager::PlayShutdownSound() { - if (!system_sounds_enabled_) - return base::TimeDelta(); - system_sounds_enabled_ = false; if (!PlayEarcon(SOUND_SHUTDOWN, PlaySoundOption::SPOKEN_FEEDBACK_ENABLED)) return base::TimeDelta(); return media::SoundsManager::Get()->GetDuration(SOUND_SHUTDOWN);
diff --git a/chrome/browser/chromeos/accessibility/accessibility_manager.h b/chrome/browser/chromeos/accessibility/accessibility_manager.h index 24d538ee..5ce3d4d8 100644 --- a/chrome/browser/chromeos/accessibility/accessibility_manager.h +++ b/chrome/browser/chromeos/accessibility/accessibility_manager.h
@@ -242,9 +242,6 @@ static void SetBrailleControllerForTest( extensions::api::braille_display_private::BrailleController* controller); - // Enables/disables system sounds. - void EnableSystemSounds(bool system_sounds_enabled); - // Initiates play of shutdown sound and returns it's duration. base::TimeDelta PlayShutdownSound(); @@ -420,8 +417,6 @@ ash::AccessibilityNotificationVisibility spoken_feedback_notification_; - bool system_sounds_enabled_; - AccessibilityStatusCallbackList callback_list_; bool braille_display_connected_;
diff --git a/chrome/browser/chromeos/accessibility/magnification_controller_browsertest.cc b/chrome/browser/chromeos/accessibility/magnification_controller_browsertest.cc index f52da83..29ec01a 100644 --- a/chrome/browser/chromeos/accessibility/magnification_controller_browsertest.cc +++ b/chrome/browser/chromeos/accessibility/magnification_controller_browsertest.cc
@@ -8,6 +8,7 @@ #include "ash/shell.h" #include "base/command_line.h" #include "base/macros.h" +#include "base/run_loop.h" #include "base/timer/timer.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/chromeos/accessibility/magnification_manager.h"
diff --git a/chrome/browser/chromeos/arc/arc_service_launcher.cc b/chrome/browser/chromeos/arc/arc_service_launcher.cc index 927945de..d419eb0 100644 --- a/chrome/browser/chromeos/arc/arc_service_launcher.cc +++ b/chrome/browser/chromeos/arc/arc_service_launcher.cc
@@ -14,6 +14,7 @@ #include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" #include "chrome/browser/chromeos/arc/auth/arc_auth_service.h" +#include "chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.h" #include "chrome/browser/chromeos/arc/boot_phase_monitor/arc_boot_phase_monitor_bridge.h" #include "chrome/browser/chromeos/arc/cast_receiver/arc_cast_receiver_service.h" #include "chrome/browser/chromeos/arc/downloads_watcher/arc_downloads_watcher_service.h" @@ -42,7 +43,6 @@ #include "components/arc/arc_session.h" #include "components/arc/arc_session_runner.h" #include "components/arc/audio/arc_audio_bridge.h" -#include "components/arc/bluetooth/arc_bluetooth_bridge.h" #include "components/arc/clipboard/arc_clipboard_bridge.h" #include "components/arc/crash_collector/arc_crash_collector_bridge.h" #include "components/arc/ime/arc_ime_service.h"
diff --git a/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.cc b/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.cc new file mode 100644 index 0000000..8056c5e --- /dev/null +++ b/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.cc
@@ -0,0 +1,2473 @@ +// 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/chromeos/arc/bluetooth/arc_bluetooth_bridge.h" + +#include <bluetooth/bluetooth.h> +#include <fcntl.h> +#include <stddef.h> +#include <sys/socket.h> + +#include <iomanip> +#include <string> +#include <utility> + +#include "ash/public/cpp/ash_pref_names.h" +#include "base/bind.h" +#include "base/json/json_writer.h" +#include "base/logging.h" +#include "base/memory/ptr_util.h" +#include "base/memory/singleton.h" +#include "base/posix/eintr_wrapper.h" +#include "base/strings/string_number_conversions.h" +#include "base/strings/utf_string_conversions.h" +#include "base/threading/thread_task_runner_handle.h" +#include "base/time/time.h" +#include "chrome/browser/chromeos/profiles/profile_helper.h" +#include "chrome/browser/profiles/profile.h" +#include "components/arc/arc_bridge_service.h" +#include "components/arc/arc_browser_context_keyed_service_factory_base.h" +#include "components/arc/bluetooth/bluetooth_type_converters.h" +#include "components/prefs/pref_service.h" +#include "components/user_manager/user_manager.h" +#include "device/bluetooth/bluetooth_common.h" +#include "device/bluetooth/bluetooth_device.h" +#include "device/bluetooth/bluetooth_gatt_connection.h" +#include "device/bluetooth/bluetooth_gatt_notify_session.h" +#include "device/bluetooth/bluetooth_local_gatt_characteristic.h" +#include "device/bluetooth/bluetooth_local_gatt_descriptor.h" +#include "device/bluetooth/bluez/bluetooth_device_bluez.h" +#include "mojo/edk/embedder/embedder.h" +#include "mojo/edk/embedder/scoped_platform_handle.h" + +using device::BluetoothAdapter; +using device::BluetoothAdapterFactory; +using device::BluetoothAdvertisement; +using device::BluetoothDevice; +using device::BluetoothDiscoveryFilter; +using device::BluetoothDiscoverySession; +using device::BluetoothGattConnection; +using device::BluetoothGattNotifySession; +using device::BluetoothGattCharacteristic; +using device::BluetoothGattDescriptor; +using device::BluetoothGattService; +using device::BluetoothLocalGattCharacteristic; +using device::BluetoothLocalGattDescriptor; +using device::BluetoothLocalGattService; +using device::BluetoothRemoteGattCharacteristic; +using device::BluetoothRemoteGattDescriptor; +using device::BluetoothRemoteGattService; +using device::BluetoothTransport; +using device::BluetoothUUID; + +namespace { +constexpr uint32_t kGattReadPermission = + BluetoothGattCharacteristic::Permission::PERMISSION_READ | + BluetoothGattCharacteristic::Permission::PERMISSION_READ_ENCRYPTED | + BluetoothGattCharacteristic::Permission:: + PERMISSION_READ_ENCRYPTED_AUTHENTICATED; +constexpr uint32_t kGattWritePermission = + BluetoothGattCharacteristic::Permission::PERMISSION_WRITE | + BluetoothGattCharacteristic::Permission::PERMISSION_WRITE_ENCRYPTED | + BluetoothGattCharacteristic::Permission:: + PERMISSION_WRITE_ENCRYPTED_AUTHENTICATED; +constexpr int32_t kInvalidGattAttributeHandle = -1; +constexpr int32_t kInvalidAdvertisementHandle = -1; +// Bluetooth Specification Version 4.2 Vol 3 Part F Section 3.2.2 +// An attribute handle of value 0xFFFF is known as the maximum attribute handle. +constexpr int32_t kMaxGattAttributeHandle = 0xFFFF; +// Bluetooth Specification Version 4.2 Vol 3 Part F Section 3.2.9 +// The maximum length of an attribute value shall be 512 octets. +constexpr int kMaxGattAttributeLength = 512; +// Copied from Android at system/bt/stack/btm/btm_ble_int.h +// https://goo.gl/k7PM6u +constexpr uint16_t kAndroidMBluetoothVersionNumber = 95; +// Bluetooth SDP Service Class ID List Attribute identifier +constexpr uint16_t kServiceClassIDListAttributeID = 0x0001; +// Timeout for Bluetooth Discovery (scan) +// 120 seconds is used here as the upper bound of the time need to do device +// discovery once, 20 seconds for inquiry scan and 100 seconds for page scan +// for 100 new devices. +constexpr base::TimeDelta kDiscoveryTimeout = base::TimeDelta::FromSeconds(120); +// From https://www.bluetooth.com/specifications/assigned-numbers/baseband +// The Class of Device for generic computer. +constexpr uint32_t kBluetoothComputerClass = 0x100; +// Timeout for Android to complete a disabling op to adapter. +// In the case where an enabling op happens immediately after a disabling op, +// Android takes the following enabling op as a no-op and waits 3~4 seconds for +// the previous disabling op to finish, so the enabling op will never be +// fulfilled by Android, and the disabling op will later routed back to Chrome +// while Chrome's adapter is enabled. This results in the wrong power state +// which should be enabled. Since the signaling from Android to Chrome for +// Bluetooth is via Bluetooth HAL layer which run on the same process as +// Bluetooth Service in Java space, so the signaling to Chrome about the +// to-be-happen sleep cannot be done. This timeout tries to ensure the validity +// and the order of toggles on power state sent to Android. +// If Android takes more than 5 seconds to complete the intent initiated by +// Chrome, Chrome will take EnableAdapter/DisableAdapter calls as a request from +// Android to toggle the power state. The power state will be synced on both +// Chrome and Android, but as a result, Bluetooth will be off. +constexpr base::TimeDelta kPowerIntentTimeout = base::TimeDelta::FromSeconds(5); + +using GattStatusCallback = + base::Callback<void(arc::mojom::BluetoothGattStatus)>; +using GattReadCallback = + base::Callback<void(arc::mojom::BluetoothGattValuePtr)>; +using CreateSdpRecordCallback = + base::Callback<void(arc::mojom::BluetoothCreateSdpRecordResultPtr)>; +using RemoveSdpRecordCallback = + base::Callback<void(arc::mojom::BluetoothStatus)>; + +// Example of identifier: /org/bluez/hci0/dev_E0_CF_65_8C_86_1A/service001a +// Convert the last 4 characters of |identifier| to an +// int, by interpreting them as hexadecimal digits. +int ConvertGattIdentifierToId(const std::string identifier) { + return std::stoi(identifier.substr(identifier.size() - 4), nullptr, 16); +} + +// Create GattDBElement and fill in common data for +// Gatt Service/Characteristic/Descriptor. +template <class RemoteGattAttribute> +arc::mojom::BluetoothGattDBElementPtr CreateGattDBElement( + const arc::mojom::BluetoothGattDBAttributeType type, + const RemoteGattAttribute* attribute) { + arc::mojom::BluetoothGattDBElementPtr element = + arc::mojom::BluetoothGattDBElement::New(); + element->type = type; + element->uuid = attribute->GetUUID(); + element->id = element->attribute_handle = element->start_handle = + element->end_handle = + ConvertGattIdentifierToId(attribute->GetIdentifier()); + element->properties = 0; + return element; +} + +template <class RemoteGattAttribute> +RemoteGattAttribute* FindGattAttributeByUuid( + const std::vector<RemoteGattAttribute*>& attributes, + const BluetoothUUID& uuid) { + auto it = std::find_if( + attributes.begin(), attributes.end(), + [uuid](RemoteGattAttribute* attr) { return attr->GetUUID() == uuid; }); + return it != attributes.end() ? *it : nullptr; +} + +// Common success callback for GATT operations that only need to report +// GattStatus back to Android. +void OnGattOperationDone(const GattStatusCallback& callback) { + callback.Run(arc::mojom::BluetoothGattStatus::GATT_SUCCESS); +} + +// Common error callback for GATT operations that only need to report +// GattStatus back to Android. +void OnGattOperationError(const GattStatusCallback& callback, + BluetoothGattService::GattErrorCode error_code) { + callback.Run(mojo::ConvertTo<arc::mojom::BluetoothGattStatus>(error_code)); +} + +// Common success callback for ReadGattCharacteristic and ReadGattDescriptor +void OnGattReadDone(const GattReadCallback& callback, + const std::vector<uint8_t>& result) { + arc::mojom::BluetoothGattValuePtr gattValue = + arc::mojom::BluetoothGattValue::New(); + gattValue->status = arc::mojom::BluetoothGattStatus::GATT_SUCCESS; + gattValue->value = result; + callback.Run(std::move(gattValue)); +} + +// Common error callback for ReadGattCharacteristic and ReadGattDescriptor +void OnGattReadError(const GattReadCallback& callback, + BluetoothGattService::GattErrorCode error_code) { + arc::mojom::BluetoothGattValuePtr gattValue = + arc::mojom::BluetoothGattValue::New(); + gattValue->status = + mojo::ConvertTo<arc::mojom::BluetoothGattStatus>(error_code); + callback.Run(std::move(gattValue)); +} + +// Callback function for mojom::BluetoothInstance::RequestGattRead +void OnGattServerRead( + const BluetoothLocalGattService::Delegate::ValueCallback& success_callback, + const BluetoothLocalGattService::Delegate::ErrorCallback& error_callback, + arc::mojom::BluetoothGattStatus status, + const std::vector<uint8_t>& value) { + if (status == arc::mojom::BluetoothGattStatus::GATT_SUCCESS) + success_callback.Run(value); + else + error_callback.Run(); +} + +// Callback function for mojom::BluetoothInstance::RequestGattWrite +void OnGattServerWrite( + const base::Closure& success_callback, + const BluetoothLocalGattService::Delegate::ErrorCallback& error_callback, + arc::mojom::BluetoothGattStatus status) { + if (status == arc::mojom::BluetoothGattStatus::GATT_SUCCESS) + success_callback.Run(); + else + error_callback.Run(); +} + +bool IsGattOffsetValid(int offset) { + return 0 <= offset && offset < kMaxGattAttributeLength; +} + +// This is needed because Android only support UUID 16 bits in service data +// section in advertising data +uint16_t GetUUID16(const BluetoothUUID& uuid) { + // Convert xxxxyyyy-xxxx-xxxx-xxxx-xxxxxxxxxxxx to int16 yyyy + return std::stoi(uuid.canonical_value().substr(4, 4), nullptr, 16); +} + +arc::mojom::BluetoothPropertyPtr GetDiscoveryTimeoutProperty(uint32_t timeout) { + arc::mojom::BluetoothPropertyPtr property = + arc::mojom::BluetoothProperty::New(); + property->set_discovery_timeout(timeout); + return property; +} + +void OnCreateServiceRecordDone(const CreateSdpRecordCallback& callback, + uint32_t service_handle) { + arc::mojom::BluetoothCreateSdpRecordResultPtr result = + arc::mojom::BluetoothCreateSdpRecordResult::New(); + result->status = arc::mojom::BluetoothStatus::SUCCESS; + result->service_handle = service_handle; + + callback.Run(std::move(result)); +} + +void OnCreateServiceRecordError( + const CreateSdpRecordCallback& callback, + bluez::BluetoothServiceRecordBlueZ::ErrorCode error_code) { + arc::mojom::BluetoothCreateSdpRecordResultPtr result = + arc::mojom::BluetoothCreateSdpRecordResult::New(); + if (error_code == + bluez::BluetoothServiceRecordBlueZ::ErrorCode::ERROR_ADAPTER_NOT_READY) { + result->status = arc::mojom::BluetoothStatus::NOT_READY; + } else { + result->status = arc::mojom::BluetoothStatus::FAIL; + } + + callback.Run(std::move(result)); +} + +void OnRemoveServiceRecordDone(const RemoveSdpRecordCallback& callback) { + callback.Run(arc::mojom::BluetoothStatus::SUCCESS); +} + +void OnRemoveServiceRecordError( + const RemoveSdpRecordCallback& callback, + bluez::BluetoothServiceRecordBlueZ::ErrorCode error_code) { + arc::mojom::BluetoothStatus status; + if (error_code == + bluez::BluetoothServiceRecordBlueZ::ErrorCode::ERROR_ADAPTER_NOT_READY) + status = arc::mojom::BluetoothStatus::NOT_READY; + else + status = arc::mojom::BluetoothStatus::FAIL; + + callback.Run(status); +} + +} // namespace + +namespace arc { +namespace { + +// Singleton factory for ArcAccessibilityHelperBridge. +class ArcBluetoothBridgeFactory + : public internal::ArcBrowserContextKeyedServiceFactoryBase< + ArcBluetoothBridge, + ArcBluetoothBridgeFactory> { + public: + // Factory name used by ArcBrowserContextKeyedServiceFactoryBase. + static constexpr const char* kName = "ArcBluetoothBridgeFactory"; + + static ArcBluetoothBridgeFactory* GetInstance() { + return base::Singleton<ArcBluetoothBridgeFactory>::get(); + } + + private: + friend base::DefaultSingletonTraits<ArcBluetoothBridgeFactory>; + ArcBluetoothBridgeFactory() = default; + ~ArcBluetoothBridgeFactory() override = default; +}; + +} // namespace + +// static +ArcBluetoothBridge* ArcBluetoothBridge::GetForBrowserContext( + content::BrowserContext* context) { + return ArcBluetoothBridgeFactory::GetForBrowserContext(context); +} + +template <typename T> +class ArcBluetoothBridge::InstanceObserver + : public InstanceHolder<T>::Observer { + public: + InstanceObserver(ArcBluetoothBridge* owner, + ArcBridgeService* arc_bridge_service) + : owner_(owner), arc_bridge_service_(arc_bridge_service) { + GetHolder()->AddObserver(this); + } + + ~InstanceObserver() override { GetHolder()->RemoveObserver(this); } + + protected: + InstanceHolder<T>* GetHolder(); + + ArcBridgeService* arc_bridge_service() { return arc_bridge_service_; } + + private: + // InstanceHolder<T>::Observer: + void OnInstanceReady() override { owner_->MaybeSendInitialPowerChange(); } + + // Unowned pointer + ArcBluetoothBridge* const owner_; + ArcBridgeService* const arc_bridge_service_; + + DISALLOW_COPY_AND_ASSIGN(InstanceObserver); +}; + +template <> +InstanceHolder<mojom::AppInstance>* +ArcBluetoothBridge::InstanceObserver<mojom::AppInstance>::GetHolder() { + return arc_bridge_service()->app(); +} + +template <> +InstanceHolder<mojom::IntentHelperInstance>* +ArcBluetoothBridge::InstanceObserver<mojom::IntentHelperInstance>::GetHolder() { + return arc_bridge_service()->intent_helper(); +} + +class ArcBluetoothBridge::AppInstanceObserver + : public InstanceObserver<mojom::AppInstance> { + public: + AppInstanceObserver(ArcBluetoothBridge* owner, + ArcBridgeService* arc_bridge_service) + : InstanceObserver<mojom::AppInstance>(owner, arc_bridge_service) {} + + ~AppInstanceObserver() override = default; + + private: + DISALLOW_COPY_AND_ASSIGN(AppInstanceObserver); +}; + +class ArcBluetoothBridge::IntentHelperInstanceObserver + : public InstanceObserver<mojom::IntentHelperInstance> { + public: + IntentHelperInstanceObserver(ArcBluetoothBridge* owner, + ArcBridgeService* arc_bridge_service) + : InstanceObserver<mojom::IntentHelperInstance>(owner, + arc_bridge_service) {} + + ~IntentHelperInstanceObserver() override = default; + + private: + DISALLOW_COPY_AND_ASSIGN(IntentHelperInstanceObserver); +}; + +ArcBluetoothBridge::ArcBluetoothBridge(content::BrowserContext* context, + ArcBridgeService* bridge_service) + : arc_bridge_service_(bridge_service), binding_(this), weak_factory_(this) { + arc_bridge_service_->bluetooth()->AddObserver(this); + + app_observer_ = + base::MakeUnique<AppInstanceObserver>(this, arc_bridge_service_); + intent_helper_observer_ = + base::MakeUnique<IntentHelperInstanceObserver>(this, arc_bridge_service_); + + if (BluetoothAdapterFactory::IsBluetoothSupported()) { + VLOG(1) << "Registering bluetooth adapter."; + BluetoothAdapterFactory::GetAdapter(base::Bind( + &ArcBluetoothBridge::OnAdapterInitialized, weak_factory_.GetWeakPtr())); + } else { + VLOG(1) << "Bluetooth not supported."; + } +} + +ArcBluetoothBridge::~ArcBluetoothBridge() { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + + if (bluetooth_adapter_) + bluetooth_adapter_->RemoveObserver(this); + + arc_bridge_service_->bluetooth()->RemoveObserver(this); +} + +void ArcBluetoothBridge::OnAdapterInitialized( + scoped_refptr<BluetoothAdapter> adapter) { + DCHECK(adapter); + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + + // We can downcast here because we are always running on Chrome OS, and + // so our adapter uses BlueZ. + bluetooth_adapter_ = + static_cast<bluez::BluetoothAdapterBlueZ*>(adapter.get()); + + if (!bluetooth_adapter_->HasObserver(this)) + bluetooth_adapter_->AddObserver(this); +} + +void ArcBluetoothBridge::OnInstanceReady() { + mojom::BluetoothInstance* bluetooth_instance = + ARC_GET_INSTANCE_FOR_METHOD(arc_bridge_service_->bluetooth(), Init); + DCHECK(bluetooth_instance); + + mojom::BluetoothHostPtr host_proxy; + binding_.Bind(mojo::MakeRequest(&host_proxy)); + bluetooth_instance->Init(std::move(host_proxy)); + + is_bluetooth_instance_up_ = true; +} + +void ArcBluetoothBridge::OnInstanceClosed() { + is_bluetooth_instance_up_ = false; +} + +void ArcBluetoothBridge::SendDevice(const BluetoothDevice* device) const { + auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->bluetooth(), OnDeviceFound); + if (!bluetooth_instance) + return; + + std::vector<mojom::BluetoothPropertyPtr> properties = + GetDeviceProperties(mojom::BluetoothPropertyType::ALL, device); + + bluetooth_instance->OnDeviceFound(std::move(properties)); + + if (!(device->GetType() & device::BLUETOOTH_TRANSPORT_LE)) + return; + + base::Optional<int8_t> rssi = device->GetInquiryRSSI(); + mojom::BluetoothAddressPtr addr; + + // We only want to send updated advertise data to Android only when we are + // scanning which is checked by the validity of rssi. Here are the 2 cases + // that we don't want to send updated advertise data to Android. + // 1) Cached found device and 2) rssi became invalid when we stop scanning. + if (rssi.has_value()) { + auto* btle_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->bluetooth(), OnLEDeviceFound); + if (!btle_instance) + return; + std::vector<mojom::BluetoothAdvertisingDataPtr> adv_data = + GetAdvertisingData(device); + addr = mojom::BluetoothAddress::From(device->GetAddress()); + btle_instance->OnLEDeviceFound(std::move(addr), rssi.value(), + std::move(adv_data)); + } + + if (!device->IsConnected()) + return; + + addr = mojom::BluetoothAddress::From(device->GetAddress()); + OnGattConnectStateChanged(std::move(addr), true); +} + +void ArcBluetoothBridge::AdapterPoweredChanged(BluetoothAdapter* adapter, + bool powered) { + AdapterPowerState power_change = + powered ? AdapterPowerState::TURN_ON : AdapterPowerState::TURN_OFF; + if (IsPowerChangeInitiatedByRemote(power_change)) + DequeueRemotePowerChange(power_change); + else + EnqueueLocalPowerChange(power_change); +} + +void ArcBluetoothBridge::DeviceAdded(BluetoothAdapter* adapter, + BluetoothDevice* device) { + if (!IsInstanceUp()) + return; + + SendDevice(device); +} + +void ArcBluetoothBridge::DeviceChanged(BluetoothAdapter* adapter, + BluetoothDevice* device) { + if (!IsInstanceUp()) + return; + + SendDevice(device); + + if (!(device->GetType() & device::BLUETOOTH_TRANSPORT_LE)) + return; + + auto it = gatt_connection_cache_.find(device->GetAddress()); + bool was_connected = it != gatt_connection_cache_.end(); + bool is_connected = device->IsConnected(); + + if (is_connected == was_connected) + return; + + if (is_connected) + gatt_connection_cache_.insert(device->GetAddress()); + else // was_connected + gatt_connection_cache_.erase(it); + + mojom::BluetoothAddressPtr addr = + mojom::BluetoothAddress::From(device->GetAddress()); + OnGattConnectStateChanged(std::move(addr), is_connected); +} + +void ArcBluetoothBridge::DeviceAddressChanged(BluetoothAdapter* adapter, + BluetoothDevice* device, + const std::string& old_address) { + if (!IsInstanceUp()) + return; + + if (old_address == device->GetAddress()) + return; + + if (!(device->GetType() & device::BLUETOOTH_TRANSPORT_LE)) + return; + + auto it = gatt_connection_cache_.find(old_address); + if (it == gatt_connection_cache_.end()) + return; + + gatt_connection_cache_.erase(it); + gatt_connection_cache_.insert(device->GetAddress()); + + auto* btle_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->bluetooth(), OnLEDeviceAddressChange); + if (!btle_instance) + return; + + mojom::BluetoothAddressPtr old_addr = + mojom::BluetoothAddress::From(old_address); + mojom::BluetoothAddressPtr new_addr = + mojom::BluetoothAddress::From(device->GetAddress()); + btle_instance->OnLEDeviceAddressChange(std::move(old_addr), + std::move(new_addr)); +} + +void ArcBluetoothBridge::DevicePairedChanged(BluetoothAdapter* adapter, + BluetoothDevice* device, + bool new_paired_status) { + if (!IsInstanceUp()) + return; + + DCHECK(adapter); + DCHECK(device); + + mojom::BluetoothAddressPtr addr = + mojom::BluetoothAddress::From(device->GetAddress()); + + if (new_paired_status) { + // OnBondStateChanged must be called with BluetoothBondState::BONDING to + // make sure the bond state machine on Android is ready to take the + // pair-done event. Otherwise the pair-done event will be dropped as an + // invalid change of paired status. + OnPairing(addr->Clone()); + OnPairedDone(std::move(addr)); + } else { + OnForgetDone(std::move(addr)); + } +} + +void ArcBluetoothBridge::DeviceRemoved(BluetoothAdapter* adapter, + BluetoothDevice* device) { + if (!IsInstanceUp()) + return; + + DCHECK(adapter); + DCHECK(device); + + mojom::BluetoothAddressPtr addr = + mojom::BluetoothAddress::From(device->GetAddress()); + OnForgetDone(std::move(addr)); + + auto it = gatt_connection_cache_.find(device->GetAddress()); + if (it == gatt_connection_cache_.end()) + return; + + addr = mojom::BluetoothAddress::From(device->GetAddress()); + gatt_connection_cache_.erase(it); + OnGattConnectStateChanged(std::move(addr), false); +} + +void ArcBluetoothBridge::GattServiceAdded(BluetoothAdapter* adapter, + BluetoothDevice* device, + BluetoothRemoteGattService* service) { + if (!IsInstanceUp()) + return; + // Placeholder for GATT client functionality +} + +void ArcBluetoothBridge::GattServiceRemoved( + BluetoothAdapter* adapter, + BluetoothDevice* device, + BluetoothRemoteGattService* service) { + if (!IsInstanceUp()) + return; + // Placeholder for GATT client functionality +} + +void ArcBluetoothBridge::GattServicesDiscovered(BluetoothAdapter* adapter, + BluetoothDevice* device) { + if (!IsInstanceUp()) + return; + + auto* btle_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->bluetooth(), OnSearchComplete); + if (!btle_instance) + return; + + mojom::BluetoothAddressPtr addr = + mojom::BluetoothAddress::From(device->GetAddress()); + + btle_instance->OnSearchComplete(std::move(addr), + mojom::BluetoothGattStatus::GATT_SUCCESS); +} + +void ArcBluetoothBridge::GattDiscoveryCompleteForService( + BluetoothAdapter* adapter, + BluetoothRemoteGattService* service) { + if (!IsInstanceUp()) + return; + // Placeholder for GATT client functionality +} + +void ArcBluetoothBridge::GattServiceChanged( + BluetoothAdapter* adapter, + BluetoothRemoteGattService* service) { + if (!IsInstanceUp()) + return; + // Placeholder for GATT client functionality +} + +void ArcBluetoothBridge::GattCharacteristicAdded( + BluetoothAdapter* adapter, + BluetoothRemoteGattCharacteristic* characteristic) { + if (!IsInstanceUp()) + return; + // Placeholder for GATT client functionality +} + +void ArcBluetoothBridge::GattCharacteristicRemoved( + BluetoothAdapter* adapter, + BluetoothRemoteGattCharacteristic* characteristic) { + if (!IsInstanceUp()) + return; + // Placeholder for GATT client functionality +} + +void ArcBluetoothBridge::GattDescriptorAdded( + BluetoothAdapter* adapter, + BluetoothRemoteGattDescriptor* descriptor) { + if (!IsInstanceUp()) + return; + // Placeholder for GATT client functionality +} + +void ArcBluetoothBridge::GattDescriptorRemoved( + BluetoothAdapter* adapter, + BluetoothRemoteGattDescriptor* descriptor) { + if (!IsInstanceUp()) + return; + // Placeholder for GATT client functionality +} + +void ArcBluetoothBridge::GattCharacteristicValueChanged( + BluetoothAdapter* adapter, + BluetoothRemoteGattCharacteristic* characteristic, + const std::vector<uint8_t>& value) { + if (!IsInstanceUp()) + return; + + auto* btle_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->bluetooth(), OnGattNotify); + if (!btle_instance) + return; + + BluetoothRemoteGattService* service = characteristic->GetService(); + BluetoothDevice* device = service->GetDevice(); + mojom::BluetoothAddressPtr address = + mojom::BluetoothAddress::From(device->GetAddress()); + mojom::BluetoothGattServiceIDPtr service_id = + mojom::BluetoothGattServiceID::New(); + service_id->is_primary = service->IsPrimary(); + service_id->id = mojom::BluetoothGattID::New(); + service_id->id->inst_id = ConvertGattIdentifierToId(service->GetIdentifier()); + service_id->id->uuid = service->GetUUID(); + + mojom::BluetoothGattIDPtr char_id = mojom::BluetoothGattID::New(); + char_id->inst_id = ConvertGattIdentifierToId(characteristic->GetIdentifier()); + char_id->uuid = characteristic->GetUUID(); + + btle_instance->OnGattNotify(std::move(address), std::move(service_id), + std::move(char_id), true /* is_notify */, value); +} + +void ArcBluetoothBridge::GattDescriptorValueChanged( + BluetoothAdapter* adapter, + BluetoothRemoteGattDescriptor* descriptor, + const std::vector<uint8_t>& value) { + if (!IsInstanceUp()) + return; + // Placeholder for GATT client functionality +} + +template <class LocalGattAttribute> +void ArcBluetoothBridge::OnGattAttributeReadRequest( + const BluetoothDevice* device, + const LocalGattAttribute* attribute, + int offset, + const ValueCallback& success_callback, + const ErrorCallback& error_callback) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->bluetooth(), RequestGattRead); + if (!bluetooth_instance || !IsGattOffsetValid(offset)) { + error_callback.Run(); + return; + } + + DCHECK(gatt_handle_.find(attribute->GetIdentifier()) != gatt_handle_.end()); + + bluetooth_instance->RequestGattRead( + mojom::BluetoothAddress::From(device->GetAddress()), + gatt_handle_[attribute->GetIdentifier()], offset, false /* is_long */, + base::Bind(&OnGattServerRead, success_callback, error_callback)); +} + +template <class LocalGattAttribute> +void ArcBluetoothBridge::OnGattAttributeWriteRequest( + const BluetoothDevice* device, + const LocalGattAttribute* attribute, + const std::vector<uint8_t>& value, + int offset, + const base::Closure& success_callback, + const ErrorCallback& error_callback) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->bluetooth(), RequestGattWrite); + if (!bluetooth_instance || !IsGattOffsetValid(offset)) { + error_callback.Run(); + return; + } + + DCHECK(gatt_handle_.find(attribute->GetIdentifier()) != gatt_handle_.end()); + + bluetooth_instance->RequestGattWrite( + mojom::BluetoothAddress::From(device->GetAddress()), + gatt_handle_[attribute->GetIdentifier()], offset, value, + base::Bind(&OnGattServerWrite, success_callback, error_callback)); +} + +void ArcBluetoothBridge::OnCharacteristicReadRequest( + const BluetoothDevice* device, + const BluetoothLocalGattCharacteristic* characteristic, + int offset, + const ValueCallback& callback, + const ErrorCallback& error_callback) { + OnGattAttributeReadRequest(device, characteristic, offset, callback, + error_callback); +} + +void ArcBluetoothBridge::OnCharacteristicWriteRequest( + const BluetoothDevice* device, + const BluetoothLocalGattCharacteristic* characteristic, + const std::vector<uint8_t>& value, + int offset, + const base::Closure& callback, + const ErrorCallback& error_callback) { + OnGattAttributeWriteRequest(device, characteristic, value, offset, callback, + error_callback); +} + +void ArcBluetoothBridge::OnDescriptorReadRequest( + const BluetoothDevice* device, + const BluetoothLocalGattDescriptor* descriptor, + int offset, + const ValueCallback& callback, + const ErrorCallback& error_callback) { + OnGattAttributeReadRequest(device, descriptor, offset, callback, + error_callback); +} + +void ArcBluetoothBridge::OnDescriptorWriteRequest( + const BluetoothDevice* device, + const BluetoothLocalGattDescriptor* descriptor, + const std::vector<uint8_t>& value, + int offset, + const base::Closure& callback, + const ErrorCallback& error_callback) { + OnGattAttributeWriteRequest(device, descriptor, value, offset, callback, + error_callback); +} + +void ArcBluetoothBridge::OnNotificationsStart( + const BluetoothDevice* device, + const BluetoothLocalGattCharacteristic* characteristic) {} + +void ArcBluetoothBridge::OnNotificationsStop( + const BluetoothDevice* device, + const BluetoothLocalGattCharacteristic* characteristic) {} + +void ArcBluetoothBridge::EnableAdapter(const EnableAdapterCallback& callback) { + DCHECK(bluetooth_adapter_); + if (IsPowerChangeInitiatedByLocal(AdapterPowerState::TURN_ON)) { + DequeueLocalPowerChange(AdapterPowerState::TURN_ON); + } else { + if (!bluetooth_adapter_->IsPowered()) { + EnqueueRemotePowerChange(AdapterPowerState::TURN_ON, callback); + return; + } + } + + OnPoweredOn(callback); +} + +void ArcBluetoothBridge::DisableAdapter( + const DisableAdapterCallback& callback) { + DCHECK(bluetooth_adapter_); + if (IsPowerChangeInitiatedByLocal(AdapterPowerState::TURN_OFF)) { + DequeueLocalPowerChange(AdapterPowerState::TURN_OFF); + } else { + if (bluetooth_adapter_->IsPowered()) { + EnqueueRemotePowerChange(AdapterPowerState::TURN_OFF, callback); + return; + } + } + + OnPoweredOff(callback); +} + +void ArcBluetoothBridge::GetAdapterProperty(mojom::BluetoothPropertyType type) { + DCHECK(bluetooth_adapter_); + auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->bluetooth(), OnAdapterProperties); + if (!bluetooth_instance) + return; + + std::vector<mojom::BluetoothPropertyPtr> properties = + GetAdapterProperties(type); + + bluetooth_instance->OnAdapterProperties(mojom::BluetoothStatus::SUCCESS, + std::move(properties)); +} + +void ArcBluetoothBridge::OnSetDiscoverable(bool discoverable, + bool success, + uint32_t timeout) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + + if (success && discoverable && timeout > 0) { + discoverable_off_timer_.Start( + FROM_HERE, base::TimeDelta::FromSeconds(timeout), + base::Bind(&ArcBluetoothBridge::SetDiscoverable, + weak_factory_.GetWeakPtr(), false, 0)); + } + + auto status = + success ? mojom::BluetoothStatus::SUCCESS : mojom::BluetoothStatus::FAIL; + OnSetAdapterProperty(status, GetDiscoveryTimeoutProperty(timeout)); +} + +// Set discoverable state to on / off. +// In case of turning on, start timer to turn it back off in |timeout| seconds. +void ArcBluetoothBridge::SetDiscoverable(bool discoverable, uint32_t timeout) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + DCHECK(bluetooth_adapter_); + DCHECK(!discoverable || timeout == 0); + + bool currently_discoverable = bluetooth_adapter_->IsDiscoverable(); + + if (!discoverable && !currently_discoverable) + return; + + if (discoverable && currently_discoverable) { + if (base::TimeDelta::FromSeconds(timeout) > + discoverable_off_timer_.GetCurrentDelay()) { + // Restart discoverable_off_timer_ if new timeout is greater + OnSetDiscoverable(true, true, timeout); + } else { + // Just send message to Android if new timeout is lower. + OnSetAdapterProperty(mojom::BluetoothStatus::SUCCESS, + GetDiscoveryTimeoutProperty(timeout)); + } + return; + } + + bluetooth_adapter_->SetDiscoverable( + discoverable, + base::Bind(&ArcBluetoothBridge::OnSetDiscoverable, + weak_factory_.GetWeakPtr(), discoverable, true, timeout), + base::Bind(&ArcBluetoothBridge::OnSetDiscoverable, + weak_factory_.GetWeakPtr(), discoverable, false, timeout)); +} + +void ArcBluetoothBridge::OnSetAdapterProperty( + mojom::BluetoothStatus status, + mojom::BluetoothPropertyPtr property) { + auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->bluetooth(), OnAdapterProperties); + DCHECK(bluetooth_instance); + + std::vector<arc::mojom::BluetoothPropertyPtr> properties; + properties.push_back(std::move(property)); + + bluetooth_instance->OnAdapterProperties(status, std::move(properties)); +} + +void ArcBluetoothBridge::SetAdapterProperty( + mojom::BluetoothPropertyPtr property) { + DCHECK(bluetooth_adapter_); + + if (property->is_discovery_timeout()) { + uint32_t discovery_timeout = property->get_discovery_timeout(); + if (discovery_timeout > 0) { + SetDiscoverable(true, discovery_timeout); + } else { + OnSetAdapterProperty(mojom::BluetoothStatus::PARM_INVALID, + std::move(property)); + } + } else if (property->is_bdname()) { + auto property_clone = property.Clone(); + bluetooth_adapter_->SetName( + property->get_bdname(), + base::Bind(&ArcBluetoothBridge::OnSetAdapterProperty, + weak_factory_.GetWeakPtr(), mojom::BluetoothStatus::SUCCESS, + base::Passed(&property)), + base::Bind(&ArcBluetoothBridge::OnSetAdapterProperty, + weak_factory_.GetWeakPtr(), mojom::BluetoothStatus::FAIL, + base::Passed(&property_clone))); + } else if (property->is_adapter_scan_mode()) { + // Android will set adapter scan mode in these 3 situations. + // 1) Set to BT_SCAN_MODE_NONE just before turning BT off. + // 2) Set to BT_SCAN_MODE_CONNECTABLE just after turning on. + // 3) Set to BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE just before set the + // discoverable timeout. + // Since turning BT off/on implied scan mode none/connectable and setting + // discovery timeout implied scan mode discoverable, we don't need to + // do anything here. We will just call success callback in this case. + OnSetAdapterProperty(mojom::BluetoothStatus::SUCCESS, std::move(property)); + } else { + // Android does not set any other property type. + OnSetAdapterProperty(mojom::BluetoothStatus::UNSUPPORTED, + std::move(property)); + } +} + +void ArcBluetoothBridge::GetRemoteDeviceProperty( + mojom::BluetoothAddressPtr remote_addr, + mojom::BluetoothPropertyType type) { + DCHECK(bluetooth_adapter_); + auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->bluetooth(), OnRemoteDeviceProperties); + if (!bluetooth_instance) + return; + + std::string addr_str = remote_addr->To<std::string>(); + BluetoothDevice* device = bluetooth_adapter_->GetDevice(addr_str); + + std::vector<mojom::BluetoothPropertyPtr> properties = + GetDeviceProperties(type, device); + mojom::BluetoothStatus status = mojom::BluetoothStatus::SUCCESS; + + if (!device) { + VLOG(1) << __func__ << ": device " << addr_str << " not available"; + status = mojom::BluetoothStatus::FAIL; + } + + bluetooth_instance->OnRemoteDeviceProperties(status, std::move(remote_addr), + std::move(properties)); +} + +void ArcBluetoothBridge::SetRemoteDeviceProperty( + mojom::BluetoothAddressPtr remote_addr, + mojom::BluetoothPropertyPtr property) { + DCHECK(bluetooth_adapter_); + auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->bluetooth(), OnRemoteDeviceProperties); + if (!bluetooth_instance) + return; + + // Unsupported. Only used by Android hidden API, BluetoothDevice.SetAlias(). + // And only Android Settings App / Android TV / NFC used that. + bluetooth_instance->OnRemoteDeviceProperties( + mojom::BluetoothStatus::UNSUPPORTED, std::move(remote_addr), + std::vector<mojom::BluetoothPropertyPtr>()); +} + +void ArcBluetoothBridge::GetRemoteServiceRecord( + mojom::BluetoothAddressPtr remote_addr, + const BluetoothUUID& uuid) { + // TODO(smbarber): Implement GetRemoteServiceRecord +} + +void ArcBluetoothBridge::GetRemoteServices( + mojom::BluetoothAddressPtr remote_addr) { + // TODO(smbarber): Implement GetRemoteServices +} + +void ArcBluetoothBridge::StartDiscovery() { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + DCHECK(bluetooth_adapter_); + + if (discovery_session_) { + LOG(ERROR) << "Discovery session already running; Reset timeout."; + discovery_off_timer_.Start(FROM_HERE, kDiscoveryTimeout, + base::Bind(&ArcBluetoothBridge::CancelDiscovery, + weak_factory_.GetWeakPtr())); + SendCachedDevicesFound(); + return; + } + + bluetooth_adapter_->StartDiscoverySession( + base::Bind(&ArcBluetoothBridge::OnDiscoveryStarted, + weak_factory_.GetWeakPtr()), + base::Bind(&ArcBluetoothBridge::OnDiscoveryError, + weak_factory_.GetWeakPtr())); +} + +void ArcBluetoothBridge::CancelDiscovery() { + if (!discovery_session_) { + return; + } + + discovery_session_->Stop(base::Bind(&ArcBluetoothBridge::OnDiscoveryStopped, + weak_factory_.GetWeakPtr()), + base::Bind(&ArcBluetoothBridge::OnDiscoveryError, + weak_factory_.GetWeakPtr())); +} + +void ArcBluetoothBridge::OnPoweredOn( + const base::Callback<void(mojom::BluetoothAdapterState)>& callback) const { + // Saves the power state to user preference. + SetPrimaryUserBluetoothPowerSetting(true); + + callback.Run(mojom::BluetoothAdapterState::ON); + SendCachedPairedDevices(); +} + +void ArcBluetoothBridge::OnPoweredOff( + const base::Callback<void(mojom::BluetoothAdapterState)>& callback) const { + // Saves the power state to user preference. + SetPrimaryUserBluetoothPowerSetting(false); + + callback.Run(mojom::BluetoothAdapterState::OFF); +} + +void ArcBluetoothBridge::OnPoweredError( + const base::Callback<void(mojom::BluetoothAdapterState)>& callback) const { + LOG(WARNING) << "failed to change power state"; + + callback.Run(bluetooth_adapter_->IsPowered() + ? mojom::BluetoothAdapterState::ON + : mojom::BluetoothAdapterState::OFF); +} + +void ArcBluetoothBridge::OnDiscoveryStarted( + std::unique_ptr<BluetoothDiscoverySession> session) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + + auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->bluetooth(), OnDiscoveryStateChanged); + if (!bluetooth_instance) + return; + + discovery_session_ = std::move(session); + + // We need to set timer to turn device discovery off because of the difference + // between Android API (do device discovery once) and Chrome API (do device + // discovery until user turns it off). + discovery_off_timer_.Start(FROM_HERE, kDiscoveryTimeout, + base::Bind(&ArcBluetoothBridge::CancelDiscovery, + weak_factory_.GetWeakPtr())); + + bluetooth_instance->OnDiscoveryStateChanged( + mojom::BluetoothDiscoveryState::STARTED); + + SendCachedDevicesFound(); +} + +void ArcBluetoothBridge::OnDiscoveryStopped() { + auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->bluetooth(), OnDiscoveryStateChanged); + if (!bluetooth_instance) + return; + + discovery_session_.reset(); + discovery_off_timer_.Stop(); + + bluetooth_instance->OnDiscoveryStateChanged( + mojom::BluetoothDiscoveryState::STOPPED); +} + +void ArcBluetoothBridge::CreateBond(mojom::BluetoothAddressPtr addr, + int32_t transport) { + std::string addr_str = addr->To<std::string>(); + BluetoothDevice* device = bluetooth_adapter_->GetDevice(addr_str); + if (!device || !device->IsPairable()) { + VLOG(1) << __func__ << ": device " << addr_str + << " is no longer valid or pairable"; + OnPairedError(std::move(addr), BluetoothDevice::ERROR_FAILED); + return; + } + + if (device->IsPaired()) { + OnPairedDone(std::move(addr)); + return; + } + + // Use the default pairing delegate which is the delegate registered and owned + // by ash. + BluetoothDevice::PairingDelegate* delegate = + bluetooth_adapter_->DefaultPairingDelegate(); + + if (!delegate) { + OnPairedError(std::move(addr), BluetoothDevice::ERROR_FAILED); + return; + } + + // If pairing finished successfully, DevicePairedChanged will notify Android + // on paired state change event, so DoNothing is passed as a success callback. + device->Pair(delegate, base::Bind(&base::DoNothing), + base::Bind(&ArcBluetoothBridge::OnPairedError, + weak_factory_.GetWeakPtr(), base::Passed(&addr))); +} + +void ArcBluetoothBridge::RemoveBond(mojom::BluetoothAddressPtr addr) { + // Forget the device if it is no longer valid or not even paired. + BluetoothDevice* device = + bluetooth_adapter_->GetDevice(addr->To<std::string>()); + if (!device || !device->IsPaired()) { + OnForgetDone(std::move(addr)); + return; + } + + // If unpairing finished successfully, DevicePairedChanged will notify Android + // on paired state change event, so DoNothing is passed as a success callback. + device->Forget(base::Bind(&base::DoNothing), + base::Bind(&ArcBluetoothBridge::OnForgetError, + weak_factory_.GetWeakPtr(), base::Passed(&addr))); +} + +void ArcBluetoothBridge::CancelBond(mojom::BluetoothAddressPtr addr) { + BluetoothDevice* device = + bluetooth_adapter_->GetDevice(addr->To<std::string>()); + if (!device) { + OnForgetDone(std::move(addr)); + return; + } + + device->CancelPairing(); + OnForgetDone(std::move(addr)); +} + +void ArcBluetoothBridge::GetConnectionState( + mojom::BluetoothAddressPtr addr, + const GetConnectionStateCallback& callback) { + if (!bluetooth_adapter_) { + callback.Run(false); + return; + } + + BluetoothDevice* device = + bluetooth_adapter_->GetDevice(addr->To<std::string>()); + if (!device) { + callback.Run(false); + return; + } + + callback.Run(device->IsConnected()); +} + +void ArcBluetoothBridge::StartLEScan() { + DCHECK(bluetooth_adapter_); + if (discovery_session_) { + LOG(WARNING) << "Discovery session already running; leaving alone"; + SendCachedDevicesFound(); + return; + } + bluetooth_adapter_->StartDiscoverySessionWithFilter( + base::MakeUnique<BluetoothDiscoveryFilter>( + device::BLUETOOTH_TRANSPORT_LE), + base::Bind(&ArcBluetoothBridge::OnDiscoveryStarted, + weak_factory_.GetWeakPtr()), + base::Bind(&ArcBluetoothBridge::OnDiscoveryError, + weak_factory_.GetWeakPtr())); +} + +void ArcBluetoothBridge::StopLEScan() { + CancelDiscovery(); +} + +void ArcBluetoothBridge::OnGattConnectStateChanged( + mojom::BluetoothAddressPtr addr, + bool connected) const { + auto* btle_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->bluetooth(), OnLEConnectionStateChange); + if (!btle_instance) + return; + + DCHECK(addr); + + btle_instance->OnLEConnectionStateChange(std::move(addr), connected); +} + +void ArcBluetoothBridge::OnGattConnected( + mojom::BluetoothAddressPtr addr, + std::unique_ptr<BluetoothGattConnection> connection) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + gatt_connections_[addr->To<std::string>()] = std::move(connection); + OnGattConnectStateChanged(std::move(addr), true); +} + +void ArcBluetoothBridge::OnGattConnectError( + mojom::BluetoothAddressPtr addr, + BluetoothDevice::ConnectErrorCode error_code) const { + OnGattConnectStateChanged(std::move(addr), false); +} + +void ArcBluetoothBridge::OnGattDisconnected(mojom::BluetoothAddressPtr addr) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + auto it = gatt_connections_.find(addr->To<std::string>()); + if (it == gatt_connections_.end()) { + LOG(WARNING) << "OnGattDisconnected called, " + << "but no gatt connection was found"; + } else { + gatt_connections_.erase(it); + } + + OnGattConnectStateChanged(std::move(addr), false); +} + +void ArcBluetoothBridge::ConnectLEDevice( + mojom::BluetoothAddressPtr remote_addr) { + auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->bluetooth(), OnLEConnectionStateChange); + if (!bluetooth_instance) + return; + + BluetoothDevice* device = + bluetooth_adapter_->GetDevice(remote_addr->To<std::string>()); + + if (!device) { + LOG(ERROR) << "Unknown device " << remote_addr->To<std::string>(); + OnGattConnectError(std::move(remote_addr), + BluetoothDevice::ConnectErrorCode::ERROR_FAILED); + return; + } + + if (device->IsConnected()) { + bluetooth_instance->OnLEConnectionStateChange(std::move(remote_addr), true); + return; + } + + // Also pass disconnect callback in error case since it would be disconnected + // anyway. + mojom::BluetoothAddressPtr remote_addr_clone = remote_addr.Clone(); + device->CreateGattConnection( + base::Bind(&ArcBluetoothBridge::OnGattConnected, + weak_factory_.GetWeakPtr(), base::Passed(&remote_addr)), + base::Bind(&ArcBluetoothBridge::OnGattConnectError, + weak_factory_.GetWeakPtr(), base::Passed(&remote_addr_clone))); +} + +void ArcBluetoothBridge::DisconnectLEDevice( + mojom::BluetoothAddressPtr remote_addr) { + auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->bluetooth(), OnLEConnectionStateChange); + if (!bluetooth_instance) + return; + + BluetoothDevice* device = + bluetooth_adapter_->GetDevice(remote_addr->To<std::string>()); + + if (!device || !device->IsConnected()) { + bluetooth_instance->OnLEConnectionStateChange(std::move(remote_addr), + false); + return; + } + + mojom::BluetoothAddressPtr remote_addr_clone = remote_addr.Clone(); + device->Disconnect( + base::Bind(&ArcBluetoothBridge::OnGattDisconnected, + weak_factory_.GetWeakPtr(), base::Passed(&remote_addr)), + base::Bind(&ArcBluetoothBridge::OnGattDisconnected, + weak_factory_.GetWeakPtr(), base::Passed(&remote_addr_clone))); +} + +void ArcBluetoothBridge::SearchService(mojom::BluetoothAddressPtr remote_addr) { + auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->bluetooth(), OnSearchComplete); + if (!bluetooth_instance) + return; + + BluetoothDevice* device = + bluetooth_adapter_->GetDevice(remote_addr->To<std::string>()); + if (!device) { + LOG(ERROR) << "Unknown device " << remote_addr->To<std::string>(); + bluetooth_instance->OnSearchComplete( + std::move(remote_addr), mojom::BluetoothGattStatus::GATT_FAILURE); + return; + } + + // Call the callback if discovery is completed + if (device->IsGattServicesDiscoveryComplete()) { + bluetooth_instance->OnSearchComplete( + std::move(remote_addr), mojom::BluetoothGattStatus::GATT_SUCCESS); + return; + } + + // Discard result. Will call the callback when discovery is completed. + device->GetGattServices(); +} + +void ArcBluetoothBridge::OnStartLEListenDone( + const StartLEListenCallback& callback, + scoped_refptr<BluetoothAdvertisement> advertisement) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + advertisment_ = advertisement; + callback.Run(mojom::BluetoothGattStatus::GATT_SUCCESS); +} + +void ArcBluetoothBridge::OnStartLEListenError( + const StartLEListenCallback& callback, + BluetoothAdvertisement::ErrorCode error_code) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + advertisment_ = nullptr; + callback.Run(mojom::BluetoothGattStatus::GATT_FAILURE); +} + +void ArcBluetoothBridge::StartLEListen(const StartLEListenCallback& callback) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + std::unique_ptr<BluetoothAdvertisement::Data> adv_data = + base::MakeUnique<BluetoothAdvertisement::Data>( + BluetoothAdvertisement::ADVERTISEMENT_TYPE_BROADCAST); + bluetooth_adapter_->RegisterAdvertisement( + std::move(adv_data), + base::Bind(&ArcBluetoothBridge::OnStartLEListenDone, + weak_factory_.GetWeakPtr(), callback), + base::Bind(&ArcBluetoothBridge::OnStartLEListenError, + weak_factory_.GetWeakPtr(), callback)); +} + +void ArcBluetoothBridge::OnStopLEListenDone( + const StopLEListenCallback& callback) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + advertisment_ = nullptr; + callback.Run(mojom::BluetoothGattStatus::GATT_SUCCESS); +} + +void ArcBluetoothBridge::OnStopLEListenError( + const StopLEListenCallback& callback, + BluetoothAdvertisement::ErrorCode error_code) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + advertisment_ = nullptr; + callback.Run(mojom::BluetoothGattStatus::GATT_FAILURE); +} + +void ArcBluetoothBridge::StopLEListen(const StopLEListenCallback& callback) { + if (!advertisment_) { + OnStopLEListenError( + callback, + BluetoothAdvertisement::ErrorCode::ERROR_ADVERTISEMENT_DOES_NOT_EXIST); + return; + } + advertisment_->Unregister(base::Bind(&ArcBluetoothBridge::OnStopLEListenDone, + weak_factory_.GetWeakPtr(), callback), + base::Bind(&ArcBluetoothBridge::OnStopLEListenError, + weak_factory_.GetWeakPtr(), callback)); +} + +void ArcBluetoothBridge::GetGattDB(mojom::BluetoothAddressPtr remote_addr) { + auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->bluetooth(), OnGetGattDB); + if (!bluetooth_instance) + return; + + BluetoothDevice* device = + bluetooth_adapter_->GetDevice(remote_addr->To<std::string>()); + std::vector<mojom::BluetoothGattDBElementPtr> db; + + if (!device) { + LOG(ERROR) << "Unknown device " << remote_addr->To<std::string>(); + bluetooth_instance->OnGetGattDB(std::move(remote_addr), std::move(db)); + return; + } + + for (auto* service : device->GetGattServices()) { + mojom::BluetoothGattDBElementPtr service_element = CreateGattDBElement( + service->IsPrimary() + ? mojom::BluetoothGattDBAttributeType::BTGATT_DB_PRIMARY_SERVICE + : mojom::BluetoothGattDBAttributeType::BTGATT_DB_SECONDARY_SERVICE, + service); + + const auto& characteristics = service->GetCharacteristics(); + if (characteristics.size() > 0) { + const auto& descriptors = characteristics.back()->GetDescriptors(); + service_element->start_handle = + ConvertGattIdentifierToId(characteristics.front()->GetIdentifier()); + service_element->end_handle = ConvertGattIdentifierToId( + descriptors.size() > 0 ? descriptors.back()->GetIdentifier() + : characteristics.back()->GetIdentifier()); + } + db.push_back(std::move(service_element)); + + for (auto* characteristic : characteristics) { + mojom::BluetoothGattDBElementPtr characteristic_element = + CreateGattDBElement( + mojom::BluetoothGattDBAttributeType::BTGATT_DB_CHARACTERISTIC, + characteristic); + characteristic_element->properties = characteristic->GetProperties(); + db.push_back(std::move(characteristic_element)); + + for (auto* descriptor : characteristic->GetDescriptors()) { + db.push_back(CreateGattDBElement( + mojom::BluetoothGattDBAttributeType::BTGATT_DB_DESCRIPTOR, + descriptor)); + } + } + } + + bluetooth_instance->OnGetGattDB(std::move(remote_addr), std::move(db)); +} + +BluetoothRemoteGattCharacteristic* ArcBluetoothBridge::FindGattCharacteristic( + mojom::BluetoothAddressPtr remote_addr, + mojom::BluetoothGattServiceIDPtr service_id, + mojom::BluetoothGattIDPtr char_id) const { + DCHECK(remote_addr); + DCHECK(service_id); + DCHECK(char_id); + + BluetoothDevice* device = + bluetooth_adapter_->GetDevice(remote_addr->To<std::string>()); + if (!device) + return nullptr; + + BluetoothRemoteGattService* service = + FindGattAttributeByUuid(device->GetGattServices(), service_id->id->uuid); + if (!service) + return nullptr; + + return FindGattAttributeByUuid(service->GetCharacteristics(), char_id->uuid); +} + +BluetoothRemoteGattDescriptor* ArcBluetoothBridge::FindGattDescriptor( + mojom::BluetoothAddressPtr remote_addr, + mojom::BluetoothGattServiceIDPtr service_id, + mojom::BluetoothGattIDPtr char_id, + mojom::BluetoothGattIDPtr desc_id) const { + BluetoothRemoteGattCharacteristic* characteristic = FindGattCharacteristic( + std::move(remote_addr), std::move(service_id), std::move(char_id)); + if (!characteristic) + return nullptr; + + return FindGattAttributeByUuid(characteristic->GetDescriptors(), + desc_id->uuid); +} + +void ArcBluetoothBridge::SendBluetoothPoweredStateBroadcast( + AdapterPowerState powered) const { + auto* intent_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->intent_helper(), SendBroadcast); + if (!intent_instance) + return; + + base::DictionaryValue extras; + extras.SetBoolean("enable", powered == AdapterPowerState::TURN_ON); + std::string extras_json; + bool write_success = base::JSONWriter::Write(extras, &extras_json); + DCHECK(write_success); + + intent_instance->SendBroadcast( + "org.chromium.arc.intent_helper.SET_BLUETOOTH_STATE", + "org.chromium.arc.intent_helper", + "org.chromium.arc.intent_helper.SettingsReceiver", extras_json); +} + +void ArcBluetoothBridge::ReadGattCharacteristic( + mojom::BluetoothAddressPtr remote_addr, + mojom::BluetoothGattServiceIDPtr service_id, + mojom::BluetoothGattIDPtr char_id, + const ReadGattCharacteristicCallback& callback) { + BluetoothRemoteGattCharacteristic* characteristic = FindGattCharacteristic( + std::move(remote_addr), std::move(service_id), std::move(char_id)); + DCHECK(characteristic); + DCHECK(characteristic->GetPermissions() & kGattReadPermission); + + characteristic->ReadRemoteCharacteristic( + base::Bind(&OnGattReadDone, callback), + base::Bind(&OnGattReadError, callback)); +} + +void ArcBluetoothBridge::WriteGattCharacteristic( + mojom::BluetoothAddressPtr remote_addr, + mojom::BluetoothGattServiceIDPtr service_id, + mojom::BluetoothGattIDPtr char_id, + mojom::BluetoothGattValuePtr value, + const WriteGattCharacteristicCallback& callback) { + BluetoothRemoteGattCharacteristic* characteristic = FindGattCharacteristic( + std::move(remote_addr), std::move(service_id), std::move(char_id)); + DCHECK(characteristic); + DCHECK(characteristic->GetPermissions() & kGattWritePermission); + + characteristic->WriteRemoteCharacteristic( + value->value, base::Bind(&OnGattOperationDone, callback), + base::Bind(&OnGattOperationError, callback)); +} + +void ArcBluetoothBridge::ReadGattDescriptor( + mojom::BluetoothAddressPtr remote_addr, + mojom::BluetoothGattServiceIDPtr service_id, + mojom::BluetoothGattIDPtr char_id, + mojom::BluetoothGattIDPtr desc_id, + const ReadGattDescriptorCallback& callback) { + BluetoothRemoteGattDescriptor* descriptor = + FindGattDescriptor(std::move(remote_addr), std::move(service_id), + std::move(char_id), std::move(desc_id)); + DCHECK(descriptor); + DCHECK(descriptor->GetPermissions() & kGattReadPermission); + + descriptor->ReadRemoteDescriptor(base::Bind(&OnGattReadDone, callback), + base::Bind(&OnGattReadError, callback)); +} + +void ArcBluetoothBridge::WriteGattDescriptor( + mojom::BluetoothAddressPtr remote_addr, + mojom::BluetoothGattServiceIDPtr service_id, + mojom::BluetoothGattIDPtr char_id, + mojom::BluetoothGattIDPtr desc_id, + mojom::BluetoothGattValuePtr value, + const WriteGattDescriptorCallback& callback) { + BluetoothRemoteGattDescriptor* descriptor = + FindGattDescriptor(std::move(remote_addr), std::move(service_id), + std::move(char_id), std::move(desc_id)); + DCHECK(descriptor); + DCHECK(descriptor->GetPermissions() & kGattWritePermission); + + // To register / deregister GATT notification, we need to + // 1) Write to CCC Descriptor to enable/disable the notification + // 2) Ask BT hw to register / deregister the notification + // The Chrome API groups both steps into one API, and does not support writing + // directly to the CCC Descriptor. Therefore, until we fix + // https://crbug.com/622832, we return successfully when we encounter this. + // TODO(http://crbug.com/622832) + if (descriptor->GetUUID() == + BluetoothGattDescriptor::ClientCharacteristicConfigurationUuid()) { + OnGattOperationDone(callback); + return; + } + + descriptor->WriteRemoteDescriptor( + value->value, base::Bind(&OnGattOperationDone, callback), + base::Bind(&OnGattOperationError, callback)); +} + +void ArcBluetoothBridge::OnGattNotifyStartDone( + const RegisterForGattNotificationCallback& callback, + const std::string char_string_id, + std::unique_ptr<BluetoothGattNotifySession> notify_session) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + notification_session_[char_string_id] = std::move(notify_session); + callback.Run(mojom::BluetoothGattStatus::GATT_SUCCESS); +} + +void ArcBluetoothBridge::RegisterForGattNotification( + mojom::BluetoothAddressPtr remote_addr, + mojom::BluetoothGattServiceIDPtr service_id, + mojom::BluetoothGattIDPtr char_id, + const RegisterForGattNotificationCallback& callback) { + BluetoothRemoteGattCharacteristic* characteristic = FindGattCharacteristic( + std::move(remote_addr), std::move(service_id), std::move(char_id)); + + if (!characteristic) { + LOG(WARNING) << __func__ << " Characteristic is not existed."; + return; + } + + characteristic->StartNotifySession( + base::Bind(&ArcBluetoothBridge::OnGattNotifyStartDone, + weak_factory_.GetWeakPtr(), callback, + characteristic->GetIdentifier()), + base::Bind(&OnGattOperationError, callback)); +} + +void ArcBluetoothBridge::DeregisterForGattNotification( + mojom::BluetoothAddressPtr remote_addr, + mojom::BluetoothGattServiceIDPtr service_id, + mojom::BluetoothGattIDPtr char_id, + const DeregisterForGattNotificationCallback& callback) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + + BluetoothRemoteGattCharacteristic* characteristic = FindGattCharacteristic( + std::move(remote_addr), std::move(service_id), std::move(char_id)); + + if (!characteristic) { + LOG(WARNING) << __func__ << " Characteristic is not existed."; + return; + } + + std::string char_id_str = characteristic->GetIdentifier(); + std::unique_ptr<BluetoothGattNotifySession> notify = + std::move(notification_session_[char_id_str]); + notification_session_.erase(char_id_str); + notify->Stop(base::Bind(&OnGattOperationDone, callback)); +} + +void ArcBluetoothBridge::ReadRemoteRssi( + mojom::BluetoothAddressPtr remote_addr, + const ReadRemoteRssiCallback& callback) { + BluetoothDevice* device = + bluetooth_adapter_->GetDevice(remote_addr->To<std::string>()); + if (!device) { + callback.Run(mojom::kUnknownPower); + return; + } + callback.Run(device->GetInquiryRSSI().value_or(mojom::kUnknownPower)); +} + +void ArcBluetoothBridge::OpenBluetoothSocket( + const OpenBluetoothSocketCallback& callback) { + base::ScopedFD sock(socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM)); + if (!sock.is_valid()) { + LOG(ERROR) << "Failed to open socket."; + callback.Run(mojo::ScopedHandle()); + return; + } + mojo::edk::ScopedPlatformHandle platform_handle{ + mojo::edk::PlatformHandle(sock.release())}; + MojoHandle wrapped_handle; + MojoResult wrap_result = mojo::edk::CreatePlatformHandleWrapper( + std::move(platform_handle), &wrapped_handle); + if (wrap_result != MOJO_RESULT_OK) { + LOG(ERROR) << "Failed to wrap handles. Closing: " << wrap_result; + callback.Run(mojo::ScopedHandle()); + return; + } + mojo::ScopedHandle scoped_handle{mojo::Handle(wrapped_handle)}; + + callback.Run(std::move(scoped_handle)); +} + +bool ArcBluetoothBridge::IsGattServerAttributeHandleAvailable(int need) { + return gatt_server_attribute_next_handle_ + need <= kMaxGattAttributeHandle; +} + +int32_t ArcBluetoothBridge::GetNextGattServerAttributeHandle() { + return IsGattServerAttributeHandleAvailable(1) + ? ++gatt_server_attribute_next_handle_ + : kInvalidGattAttributeHandle; +} + +template <class LocalGattAttribute> +int32_t ArcBluetoothBridge::CreateGattAttributeHandle( + LocalGattAttribute* attribute) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + if (!attribute) + return kInvalidGattAttributeHandle; + int32_t handle = GetNextGattServerAttributeHandle(); + if (handle == kInvalidGattAttributeHandle) + return kInvalidGattAttributeHandle; + const std::string& identifier = attribute->GetIdentifier(); + gatt_identifier_[handle] = identifier; + gatt_handle_[identifier] = handle; + return handle; +} + +void ArcBluetoothBridge::AddService(mojom::BluetoothGattServiceIDPtr service_id, + int32_t num_handles, + const AddServiceCallback& callback) { + if (!IsGattServerAttributeHandleAvailable(num_handles)) { + callback.Run(kInvalidGattAttributeHandle); + return; + } + base::WeakPtr<BluetoothLocalGattService> service = + BluetoothLocalGattService::Create( + bluetooth_adapter_.get(), service_id->id->uuid, + service_id->is_primary, nullptr /* included_service */, + this /* delegate */); + callback.Run(CreateGattAttributeHandle(service.get())); +} + +void ArcBluetoothBridge::AddCharacteristic( + int32_t service_handle, + const BluetoothUUID& uuid, + int32_t properties, + int32_t permissions, + const AddCharacteristicCallback& callback) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + DCHECK(gatt_identifier_.find(service_handle) != gatt_identifier_.end()); + if (!IsGattServerAttributeHandleAvailable(1)) { + callback.Run(kInvalidGattAttributeHandle); + return; + } + base::WeakPtr<BluetoothLocalGattCharacteristic> characteristic = + BluetoothLocalGattCharacteristic::Create( + uuid, properties, permissions, + bluetooth_adapter_->GetGattService(gatt_identifier_[service_handle])); + int32_t characteristic_handle = + CreateGattAttributeHandle(characteristic.get()); + last_characteristic_[service_handle] = characteristic_handle; + callback.Run(characteristic_handle); +} + +void ArcBluetoothBridge::AddDescriptor(int32_t service_handle, + const BluetoothUUID& uuid, + int32_t permissions, + const AddDescriptorCallback& callback) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + if (!IsGattServerAttributeHandleAvailable(1)) { + callback.Run(kInvalidGattAttributeHandle); + return; + } + // Chrome automatically adds a CCC Descriptor to a characteristic when needed. + // We will generate a bogus handle for Android. + if (uuid == + BluetoothGattDescriptor::ClientCharacteristicConfigurationUuid()) { + int32_t handle = GetNextGattServerAttributeHandle(); + callback.Run(handle); + return; + } + + DCHECK(gatt_identifier_.find(service_handle) != gatt_identifier_.end()); + BluetoothLocalGattService* service = + bluetooth_adapter_->GetGattService(gatt_identifier_[service_handle]); + DCHECK(service); + // Since the Android API does not give information about which characteristic + // is the parent of the new descriptor, we assume that it would be the last + // characteristic that was added to the given service. This matches the + // Android framework code at android/bluetooth/BluetoothGattServer.java#594. + // Link: https://goo.gl/cJZl1u + DCHECK(last_characteristic_.find(service_handle) != + last_characteristic_.end()); + int32_t last_characteristic_handle = last_characteristic_[service_handle]; + + DCHECK(gatt_identifier_.find(last_characteristic_handle) != + gatt_identifier_.end()); + BluetoothLocalGattCharacteristic* characteristic = + service->GetCharacteristic(gatt_identifier_[last_characteristic_handle]); + DCHECK(characteristic); + + base::WeakPtr<BluetoothLocalGattDescriptor> descriptor = + BluetoothLocalGattDescriptor::Create(uuid, permissions, characteristic); + callback.Run(CreateGattAttributeHandle(descriptor.get())); +} + +void ArcBluetoothBridge::StartService(int32_t service_handle, + const StartServiceCallback& callback) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + DCHECK(gatt_identifier_.find(service_handle) != gatt_identifier_.end()); + BluetoothLocalGattService* service = + bluetooth_adapter_->GetGattService(gatt_identifier_[service_handle]); + DCHECK(service); + service->Register(base::Bind(&OnGattOperationDone, callback), + base::Bind(&OnGattOperationError, callback)); +} + +void ArcBluetoothBridge::StopService(int32_t service_handle, + const StopServiceCallback& callback) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + DCHECK(gatt_identifier_.find(service_handle) != gatt_identifier_.end()); + BluetoothLocalGattService* service = + bluetooth_adapter_->GetGattService(gatt_identifier_[service_handle]); + DCHECK(service); + service->Unregister(base::Bind(&OnGattOperationDone, callback), + base::Bind(&OnGattOperationError, callback)); +} + +void ArcBluetoothBridge::DeleteService(int32_t service_handle, + const DeleteServiceCallback& callback) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + DCHECK(gatt_identifier_.find(service_handle) != gatt_identifier_.end()); + BluetoothLocalGattService* service = + bluetooth_adapter_->GetGattService(gatt_identifier_[service_handle]); + DCHECK(service); + gatt_identifier_.erase(service_handle); + gatt_handle_.erase(service->GetIdentifier()); + service->Delete(); + OnGattOperationDone(callback); +} + +void ArcBluetoothBridge::SendIndication( + int32_t attribute_handle, + mojom::BluetoothAddressPtr address, + bool confirm, + const std::vector<uint8_t>& value, + const SendIndicationCallback& callback) {} + +void ArcBluetoothBridge::GetSdpRecords(mojom::BluetoothAddressPtr remote_addr, + const BluetoothUUID& target_uuid) { + BluetoothDevice* device = + bluetooth_adapter_->GetDevice(remote_addr->To<std::string>()); + if (!device) { + OnGetServiceRecordsError(std::move(remote_addr), target_uuid, + bluez::BluetoothServiceRecordBlueZ::ErrorCode:: + ERROR_DEVICE_DISCONNECTED); + return; + } + + bluez::BluetoothDeviceBlueZ* device_bluez = + static_cast<bluez::BluetoothDeviceBlueZ*>(device); + + mojom::BluetoothAddressPtr remote_addr_clone = remote_addr.Clone(); + + device_bluez->GetServiceRecords( + base::Bind(&ArcBluetoothBridge::OnGetServiceRecordsDone, + weak_factory_.GetWeakPtr(), base::Passed(&remote_addr), + target_uuid), + base::Bind(&ArcBluetoothBridge::OnGetServiceRecordsError, + weak_factory_.GetWeakPtr(), base::Passed(&remote_addr_clone), + target_uuid)); +} + +void ArcBluetoothBridge::CreateSdpRecord( + mojom::BluetoothSdpRecordPtr record_mojo, + const CreateSdpRecordCallback& callback) { + auto record = record_mojo.To<bluez::BluetoothServiceRecordBlueZ>(); + + // Check if ServiceClassIDList attribute (attribute ID 0x0001) is included + // after type conversion, since it is mandatory for creating a service record. + if (!record.IsAttributePresented(kServiceClassIDListAttributeID)) { + mojom::BluetoothCreateSdpRecordResultPtr result = + mojom::BluetoothCreateSdpRecordResult::New(); + result->status = mojom::BluetoothStatus::FAIL; + callback.Run(std::move(result)); + return; + } + + bluetooth_adapter_->CreateServiceRecord( + record, base::Bind(&OnCreateServiceRecordDone, callback), + base::Bind(&OnCreateServiceRecordError, callback)); +} + +void ArcBluetoothBridge::RemoveSdpRecord( + uint32_t service_handle, + const RemoveSdpRecordCallback& callback) { + bluetooth_adapter_->RemoveServiceRecord( + service_handle, base::Bind(&OnRemoveServiceRecordDone, callback), + base::Bind(&OnRemoveServiceRecordError, callback)); +} + +bool ArcBluetoothBridge::GetAdvertisementHandle(int32_t* adv_handle) { + for (int i = 0; i < kMaxAdvertisements; i++) { + if (advertisements_.find(i) == advertisements_.end()) { + *adv_handle = i; + return true; + } + } + return false; +} + +void ArcBluetoothBridge::ReserveAdvertisementHandle( + const ReserveAdvertisementHandleCallback& callback) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + + // Find an empty advertisement slot. + int32_t adv_handle; + if (!GetAdvertisementHandle(&adv_handle)) { + LOG(WARNING) << "Out of space for advertisement data"; + callback.Run(mojom::BluetoothGattStatus::GATT_FAILURE, + kInvalidAdvertisementHandle); + return; + } + + // We have a handle. Put an entry in the map to reserve it. + advertisements_[adv_handle] = nullptr; + + // The advertisement will be registered when we get the call + // to SetAdvertisingData. For now, just return the adv_handle. + callback.Run(mojom::BluetoothGattStatus::GATT_SUCCESS, adv_handle); +} + +void ArcBluetoothBridge::BroadcastAdvertisement( + int32_t adv_handle, + std::unique_ptr<device::BluetoothAdvertisement::Data> advertisement, + const BroadcastAdvertisementCallback& callback) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + if (advertisements_.find(adv_handle) == advertisements_.end()) { + callback.Run(mojom::BluetoothGattStatus::GATT_FAILURE); + return; + } + + if (!advertisements_[adv_handle]) { + OnReadyToRegisterAdvertisement(callback, adv_handle, + std::move(advertisement)); + return; + } + + advertisements_[adv_handle]->Unregister( + base::Bind(&ArcBluetoothBridge::OnReadyToRegisterAdvertisement, + weak_factory_.GetWeakPtr(), callback, adv_handle, + base::Passed(std::move(advertisement))), + base::Bind(&ArcBluetoothBridge::OnRegisterAdvertisementError, + weak_factory_.GetWeakPtr(), callback, adv_handle)); +} + +void ArcBluetoothBridge::ReleaseAdvertisementHandle( + int32_t adv_handle, + const ReleaseAdvertisementHandleCallback& callback) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + if (advertisements_.find(adv_handle) == advertisements_.end()) { + callback.Run(mojom::BluetoothGattStatus::GATT_FAILURE); + return; + } + + if (!advertisements_[adv_handle]) { + advertisements_.erase(adv_handle); + callback.Run(mojom::BluetoothGattStatus::GATT_SUCCESS); + return; + } + + advertisements_[adv_handle]->Unregister( + base::Bind(&ArcBluetoothBridge::OnUnregisterAdvertisementDone, + weak_factory_.GetWeakPtr(), callback, adv_handle), + base::Bind(&ArcBluetoothBridge::OnUnregisterAdvertisementError, + weak_factory_.GetWeakPtr(), callback, adv_handle)); +} + +void ArcBluetoothBridge::OnReadyToRegisterAdvertisement( + const BroadcastAdvertisementCallback& callback, + int32_t adv_handle, + std::unique_ptr<device::BluetoothAdvertisement::Data> data) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + bluetooth_adapter_->RegisterAdvertisement( + std::move(data), + base::Bind(&ArcBluetoothBridge::OnRegisterAdvertisementDone, + weak_factory_.GetWeakPtr(), callback, adv_handle), + base::Bind(&ArcBluetoothBridge::OnRegisterAdvertisementError, + weak_factory_.GetWeakPtr(), callback, adv_handle)); +} + +void ArcBluetoothBridge::OnRegisterAdvertisementDone( + const BroadcastAdvertisementCallback& callback, + int32_t adv_handle, + scoped_refptr<BluetoothAdvertisement> advertisement) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + advertisements_[adv_handle] = std::move(advertisement); + callback.Run(mojom::BluetoothGattStatus::GATT_SUCCESS); +} + +void ArcBluetoothBridge::OnRegisterAdvertisementError( + const BroadcastAdvertisementCallback& callback, + int32_t adv_handle, + BluetoothAdvertisement::ErrorCode error_code) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + LOG(WARNING) << "Failed to register advertisement for handle " << adv_handle + << ", error code = " << error_code; + advertisements_[adv_handle] = nullptr; + callback.Run(mojom::BluetoothGattStatus::GATT_FAILURE); +} + +void ArcBluetoothBridge::OnUnregisterAdvertisementDone( + const ReleaseAdvertisementHandleCallback& callback, + int32_t adv_handle) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + advertisements_.erase(adv_handle); + callback.Run(mojom::BluetoothGattStatus::GATT_SUCCESS); +} + +void ArcBluetoothBridge::OnUnregisterAdvertisementError( + const ReleaseAdvertisementHandleCallback& callback, + int32_t adv_handle, + BluetoothAdvertisement::ErrorCode error_code) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + LOG(WARNING) << "Failed to unregister advertisement for handle " << adv_handle + << ", error code = " << error_code; + advertisements_.erase(adv_handle); + callback.Run(mojom::BluetoothGattStatus::GATT_FAILURE); +} + +void ArcBluetoothBridge::OnDiscoveryError() { + LOG(WARNING) << "failed to change discovery state"; +} + +void ArcBluetoothBridge::OnPairing(mojom::BluetoothAddressPtr addr) const { + auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->bluetooth(), OnBondStateChanged); + if (!bluetooth_instance) + return; + + bluetooth_instance->OnBondStateChanged(mojom::BluetoothStatus::SUCCESS, + std::move(addr), + mojom::BluetoothBondState::BONDING); +} + +void ArcBluetoothBridge::OnPairedDone(mojom::BluetoothAddressPtr addr) const { + auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->bluetooth(), OnBondStateChanged); + if (!bluetooth_instance) + return; + + bluetooth_instance->OnBondStateChanged(mojom::BluetoothStatus::SUCCESS, + std::move(addr), + mojom::BluetoothBondState::BONDED); +} + +void ArcBluetoothBridge::OnPairedError( + mojom::BluetoothAddressPtr addr, + BluetoothDevice::ConnectErrorCode error_code) const { + auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->bluetooth(), OnBondStateChanged); + if (!bluetooth_instance) + return; + + bluetooth_instance->OnBondStateChanged(mojom::BluetoothStatus::FAIL, + std::move(addr), + mojom::BluetoothBondState::NONE); +} + +void ArcBluetoothBridge::OnForgetDone(mojom::BluetoothAddressPtr addr) const { + auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->bluetooth(), OnBondStateChanged); + if (!bluetooth_instance) + return; + + bluetooth_instance->OnBondStateChanged(mojom::BluetoothStatus::SUCCESS, + std::move(addr), + mojom::BluetoothBondState::NONE); +} + +void ArcBluetoothBridge::OnForgetError(mojom::BluetoothAddressPtr addr) const { + auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->bluetooth(), OnBondStateChanged); + if (!bluetooth_instance) + return; + + BluetoothDevice* device = + bluetooth_adapter_->GetDevice(addr->To<std::string>()); + mojom::BluetoothBondState bond_state = mojom::BluetoothBondState::NONE; + if (device && device->IsPaired()) { + bond_state = mojom::BluetoothBondState::BONDED; + } + bluetooth_instance->OnBondStateChanged(mojom::BluetoothStatus::FAIL, + std::move(addr), bond_state); +} + +bool ArcBluetoothBridge::IsPowerChangeInitiatedByRemote( + ArcBluetoothBridge::AdapterPowerState powered) const { + return !remote_power_changes_.empty() && + remote_power_changes_.front() == powered; +} + +bool ArcBluetoothBridge::IsPowerChangeInitiatedByLocal( + ArcBluetoothBridge::AdapterPowerState powered) const { + return !local_power_changes_.empty() && + local_power_changes_.front() == powered; +} + +void ArcBluetoothBridge::MaybeSendInitialPowerChange() { + if (!bluetooth_adapter_ || !bluetooth_adapter_->IsPowered()) { + // The default power state of Bluetooth on Android is off, so there is no + // need to send an intent to turn off Bluetooth if the initial power state + // is off. + return; + } + + // Send initial power state in case both, Intent Helper and App instances are + // present. Intent Helper is required to dispatch this event and App is sign + // that ARC is fully started. In case of initial boot, App instance is started + // after the Intent Helper instance. In case of next boot Intent Helper and + // App instances are started at almost the same time and order of start is not + // determined. + if (!arc_bridge_service_->app()->has_instance() || + !arc_bridge_service_->intent_helper()->has_instance()) { + return; + } + + EnqueueLocalPowerChange(AdapterPowerState::TURN_ON); +} + +void ArcBluetoothBridge::EnqueueLocalPowerChange( + ArcBluetoothBridge::AdapterPowerState powered) { + local_power_changes_.push(powered); + + if (power_intent_timer_.IsRunning()) + return; + + SendBluetoothPoweredStateBroadcast(local_power_changes_.front()); + power_intent_timer_.Start( + FROM_HERE, kPowerIntentTimeout, + base::Bind(&ArcBluetoothBridge::DequeueLocalPowerChange, + weak_factory_.GetWeakPtr(), powered)); +} + +void ArcBluetoothBridge::DequeueLocalPowerChange( + ArcBluetoothBridge::AdapterPowerState powered) { + power_intent_timer_.Stop(); + + if (!IsPowerChangeInitiatedByLocal(powered)) + return; + + AdapterPowerState current_change = local_power_changes_.front(); + AdapterPowerState last_change = local_power_changes_.back(); + + // Compress the queue for power intent to reduce the amount of intents being + // sent to Android so that the powered state will be synced between Android + // and Chrome even if the state is toggled repeatedly on Chrome. + std::queue<AdapterPowerState> empty_queue; + std::swap(local_power_changes_, empty_queue); + + if (last_change == current_change) + return; + + local_power_changes_.push(last_change); + + SendBluetoothPoweredStateBroadcast(last_change); + power_intent_timer_.Start( + FROM_HERE, kPowerIntentTimeout, + base::Bind(&ArcBluetoothBridge::DequeueLocalPowerChange, + weak_factory_.GetWeakPtr(), last_change)); +} + +void ArcBluetoothBridge::EnqueueRemotePowerChange( + ArcBluetoothBridge::AdapterPowerState powered, + const EnableAdapterCallback& callback) { + remote_power_changes_.push(powered); + + bool turn_on = (powered == AdapterPowerState::TURN_ON); + bluetooth_adapter_->SetPowered( + turn_on, + base::Bind(turn_on ? &ArcBluetoothBridge::OnPoweredOn + : &ArcBluetoothBridge::OnPoweredOff, + weak_factory_.GetWeakPtr(), callback), + base::Bind(&ArcBluetoothBridge::OnPoweredError, + weak_factory_.GetWeakPtr(), callback)); +} + +void ArcBluetoothBridge::DequeueRemotePowerChange( + ArcBluetoothBridge::AdapterPowerState powered) { + remote_power_changes_.pop(); +} + +std::vector<mojom::BluetoothPropertyPtr> +ArcBluetoothBridge::GetDeviceProperties(mojom::BluetoothPropertyType type, + const BluetoothDevice* device) const { + std::vector<mojom::BluetoothPropertyPtr> properties; + + if (!device) { + return properties; + } + + if (type == mojom::BluetoothPropertyType::ALL || + type == mojom::BluetoothPropertyType::BDNAME) { + mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); + btp->set_bdname(device->GetName() ? device->GetName().value() : ""); + properties.push_back(std::move(btp)); + } + if (type == mojom::BluetoothPropertyType::ALL || + type == mojom::BluetoothPropertyType::BDADDR) { + mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); + btp->set_bdaddr(mojom::BluetoothAddress::From(device->GetAddress())); + properties.push_back(std::move(btp)); + } + if (type == mojom::BluetoothPropertyType::ALL || + type == mojom::BluetoothPropertyType::UUIDS) { + BluetoothDevice::UUIDSet uuids = device->GetUUIDs(); + if (uuids.size() > 0) { + mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); + btp->set_uuids(std::vector<BluetoothUUID>(uuids.begin(), uuids.end())); + properties.push_back(std::move(btp)); + } + } + if (type == mojom::BluetoothPropertyType::ALL || + type == mojom::BluetoothPropertyType::CLASS_OF_DEVICE) { + mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); + btp->set_device_class(device->GetBluetoothClass()); + properties.push_back(std::move(btp)); + } + if (type == mojom::BluetoothPropertyType::ALL || + type == mojom::BluetoothPropertyType::TYPE_OF_DEVICE) { + mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); + btp->set_device_type(device->GetType()); + properties.push_back(std::move(btp)); + } + if (type == mojom::BluetoothPropertyType::ALL || + type == mojom::BluetoothPropertyType::REMOTE_FRIENDLY_NAME) { + mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); + btp->set_remote_friendly_name( + base::UTF16ToUTF8(device->GetNameForDisplay())); + properties.push_back(std::move(btp)); + } + if (type == mojom::BluetoothPropertyType::ALL || + type == mojom::BluetoothPropertyType::REMOTE_RSSI) { + base::Optional<int8_t> rssi = device->GetInquiryRSSI(); + if (rssi.has_value()) { + mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); + btp->set_remote_rssi(rssi.value()); + properties.push_back(std::move(btp)); + } + } + // TODO(smbarber): Add remote version info + + return properties; +} + +std::vector<mojom::BluetoothPropertyPtr> +ArcBluetoothBridge::GetAdapterProperties( + mojom::BluetoothPropertyType type) const { + std::vector<mojom::BluetoothPropertyPtr> properties; + + if (type == mojom::BluetoothPropertyType::ALL || + type == mojom::BluetoothPropertyType::BDNAME) { + mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); + std::string name = bluetooth_adapter_->GetName(); + btp->set_bdname(name); + properties.push_back(std::move(btp)); + } + if (type == mojom::BluetoothPropertyType::ALL || + type == mojom::BluetoothPropertyType::BDADDR) { + mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); + btp->set_bdaddr( + mojom::BluetoothAddress::From(bluetooth_adapter_->GetAddress())); + properties.push_back(std::move(btp)); + } + if (type == mojom::BluetoothPropertyType::ALL || + type == mojom::BluetoothPropertyType::UUIDS) { + mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); + btp->set_uuids(bluetooth_adapter_->GetUUIDs()); + properties.push_back(std::move(btp)); + } + if (type == mojom::BluetoothPropertyType::ALL || + type == mojom::BluetoothPropertyType::CLASS_OF_DEVICE) { + mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); + btp->set_device_class(kBluetoothComputerClass); + properties.push_back(std::move(btp)); + } + if (type == mojom::BluetoothPropertyType::ALL || + type == mojom::BluetoothPropertyType::TYPE_OF_DEVICE) { + // Assume that all ChromeOS devices are dual mode Bluetooth device. + mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); + btp->set_device_type(device::BLUETOOTH_TRANSPORT_DUAL); + properties.push_back(std::move(btp)); + } + if (type == mojom::BluetoothPropertyType::ALL || + type == mojom::BluetoothPropertyType::ADAPTER_SCAN_MODE) { + mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); + mojom::BluetoothScanMode scan_mode = mojom::BluetoothScanMode::CONNECTABLE; + + if (bluetooth_adapter_->IsDiscoverable()) + scan_mode = mojom::BluetoothScanMode::CONNECTABLE_DISCOVERABLE; + + btp->set_adapter_scan_mode(scan_mode); + properties.push_back(std::move(btp)); + } + if (type == mojom::BluetoothPropertyType::ALL || + type == mojom::BluetoothPropertyType::ADAPTER_BONDED_DEVICES) { + mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); + BluetoothAdapter::DeviceList devices = bluetooth_adapter_->GetDevices(); + + std::vector<mojom::BluetoothAddressPtr> bonded_devices; + + for (auto* device : devices) { + if (device->IsPaired()) + continue; + + mojom::BluetoothAddressPtr addr = + mojom::BluetoothAddress::From(device->GetAddress()); + bonded_devices.push_back(std::move(addr)); + } + + btp->set_bonded_devices(std::move(bonded_devices)); + properties.push_back(std::move(btp)); + } + if (type == mojom::BluetoothPropertyType::ALL || + type == mojom::BluetoothPropertyType::ADAPTER_DISCOVERY_TIMEOUT) { + mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); + btp->set_discovery_timeout(bluetooth_adapter_->GetDiscoverableTimeout()); + properties.push_back(std::move(btp)); + } + if (type == mojom::BluetoothPropertyType::ALL || + type == mojom::BluetoothPropertyType::LOCAL_LE_FEATURES) { + // TODO(crbug.com/637171) Investigate all the le_features. + mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); + mojom::BluetoothLocalLEFeaturesPtr le_features = + mojom::BluetoothLocalLEFeatures::New(); + le_features->version_supported = kAndroidMBluetoothVersionNumber; + le_features->local_privacy_enabled = 0; + le_features->max_adv_instance = kMaxAdvertisements; + le_features->rpa_offload_supported = 0; + le_features->max_irk_list_size = 0; + le_features->max_adv_filter_supported = 0; + le_features->activity_energy_info_supported = 0; + le_features->scan_result_storage_size = 0; + le_features->total_trackable_advertisers = 0; + le_features->extended_scan_support = false; + le_features->debug_logging_supported = false; + btp->set_local_le_features(std::move(le_features)); + properties.push_back(std::move(btp)); + } + + return properties; +} + +// Android support 6 types of Advertising Data which are Advertising Data Flags, +// Local Name, Service UUIDs, Tx Power Level, Service Data, and Manufacturer +// Data. Note that we need to use 16-bit UUID in Service Data section because +// Android does not support 128-bit UUID there. +std::vector<mojom::BluetoothAdvertisingDataPtr> +ArcBluetoothBridge::GetAdvertisingData(const BluetoothDevice* device) const { + std::vector<mojom::BluetoothAdvertisingDataPtr> advertising_data; + + // Advertising Data Flags + if (device->GetAdvertisingDataFlags().has_value()) { + mojom::BluetoothAdvertisingDataPtr flags = + mojom::BluetoothAdvertisingData::New(); + flags->set_flags(device->GetAdvertisingDataFlags().value()); + advertising_data.push_back(std::move(flags)); + } + + // Local Name + mojom::BluetoothAdvertisingDataPtr local_name = + mojom::BluetoothAdvertisingData::New(); + local_name->set_local_name(device->GetName() ? device->GetName().value() + : ""); + advertising_data.push_back(std::move(local_name)); + + // Service UUIDs + const BluetoothDevice::UUIDSet& uuid_set = device->GetUUIDs(); + if (uuid_set.size() > 0) { + mojom::BluetoothAdvertisingDataPtr service_uuids = + mojom::BluetoothAdvertisingData::New(); + service_uuids->set_service_uuids( + std::vector<BluetoothUUID>(uuid_set.begin(), uuid_set.end())); + advertising_data.push_back(std::move(service_uuids)); + } + + // Tx Power Level + if (device->GetInquiryTxPower().has_value()) { + mojom::BluetoothAdvertisingDataPtr tx_power_level_element = + mojom::BluetoothAdvertisingData::New(); + tx_power_level_element->set_tx_power_level( + device->GetInquiryTxPower().value()); + advertising_data.push_back(std::move(tx_power_level_element)); + } + + // Service Data + for (const BluetoothUUID& uuid : device->GetServiceDataUUIDs()) { + mojom::BluetoothAdvertisingDataPtr service_data_element = + mojom::BluetoothAdvertisingData::New(); + mojom::BluetoothServiceDataPtr service_data = + mojom::BluetoothServiceData::New(); + + // Android only supports UUID 16 bit here. + service_data->uuid_16bit = GetUUID16(uuid); + + const std::vector<uint8_t>* data = device->GetServiceDataForUUID(uuid); + DCHECK(data != nullptr); + + service_data->data = *data; + + service_data_element->set_service_data(std::move(service_data)); + advertising_data.push_back(std::move(service_data_element)); + } + + // Manufacturer Data + if (!device->GetManufacturerData().empty()) { + std::vector<uint8_t> manufacturer_data; + for (const auto& pair : device->GetManufacturerData()) { + uint16_t id = pair.first; + // Use little endian here. + manufacturer_data.push_back(id & 0xff); + manufacturer_data.push_back(id >> 8); + manufacturer_data.insert(manufacturer_data.end(), pair.second.begin(), + pair.second.end()); + } + mojom::BluetoothAdvertisingDataPtr manufacturer_data_element = + mojom::BluetoothAdvertisingData::New(); + manufacturer_data_element->set_manufacturer_data(manufacturer_data); + advertising_data.push_back(std::move(manufacturer_data_element)); + } + + return advertising_data; +} + +void ArcBluetoothBridge::SendCachedDevicesFound() const { + DCHECK(bluetooth_adapter_); + + // Send devices that have already been discovered, but aren't connected. + BluetoothAdapter::DeviceList devices = bluetooth_adapter_->GetDevices(); + for (auto* device : devices) { + if (device->IsPaired()) + continue; + + SendDevice(device); + } +} + +void ArcBluetoothBridge::SendCachedPairedDevices() const { + DCHECK(bluetooth_adapter_); + + BluetoothAdapter::DeviceList devices = bluetooth_adapter_->GetDevices(); + for (auto* device : devices) { + if (!device->IsPaired()) + continue; + + SendDevice(device); + + // OnBondStateChanged must be called with mojom::BluetoothBondState::BONDING + // to make sure the bond state machine on Android is ready to take the + // pair-done event. Otherwise the pair-done event will be dropped as an + // invalid change of paired status. + mojom::BluetoothAddressPtr addr = + mojom::BluetoothAddress::From(device->GetAddress()); + OnPairing(addr->Clone()); + OnPairedDone(std::move(addr)); + } +} + +void ArcBluetoothBridge::OnGetServiceRecordsDone( + mojom::BluetoothAddressPtr remote_addr, + const BluetoothUUID& target_uuid, + const std::vector<bluez::BluetoothServiceRecordBlueZ>& records_bluez) { + auto* sdp_bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->bluetooth(), OnGetSdpRecords); + if (!sdp_bluetooth_instance) + return; + + std::vector<mojom::BluetoothSdpRecordPtr> records; + for (const auto& r : records_bluez) + records.push_back(mojom::BluetoothSdpRecord::From(r)); + + sdp_bluetooth_instance->OnGetSdpRecords(mojom::BluetoothStatus::SUCCESS, + std::move(remote_addr), target_uuid, + std::move(records)); +} + +void ArcBluetoothBridge::OnGetServiceRecordsError( + mojom::BluetoothAddressPtr remote_addr, + const BluetoothUUID& target_uuid, + bluez::BluetoothServiceRecordBlueZ::ErrorCode error_code) { + auto* sdp_bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->bluetooth(), OnGetSdpRecords); + if (!sdp_bluetooth_instance) + return; + + mojom::BluetoothStatus status; + + switch (error_code) { + case bluez::BluetoothServiceRecordBlueZ::ErrorCode::ERROR_ADAPTER_NOT_READY: + status = mojom::BluetoothStatus::NOT_READY; + break; + case bluez::BluetoothServiceRecordBlueZ::ErrorCode:: + ERROR_DEVICE_DISCONNECTED: + status = mojom::BluetoothStatus::RMT_DEV_DOWN; + break; + default: + status = mojom::BluetoothStatus::FAIL; + break; + } + + sdp_bluetooth_instance->OnGetSdpRecords( + status, std::move(remote_addr), target_uuid, + std::vector<mojom::BluetoothSdpRecordPtr>()); +} + +void ArcBluetoothBridge::SetPrimaryUserBluetoothPowerSetting( + bool enabled) const { + const user_manager::User* const user = + user_manager::UserManager::Get()->GetPrimaryUser(); + Profile* profile = chromeos::ProfileHelper::Get()->GetProfileByUser(user); + DCHECK(profile); + profile->GetPrefs()->SetBoolean(ash::prefs::kUserBluetoothAdapterEnabled, + enabled); +} + +} // namespace arc
diff --git a/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.h b/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.h new file mode 100644 index 0000000..686e7b3 --- /dev/null +++ b/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.h
@@ -0,0 +1,554 @@ +// 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_CHROMEOS_ARC_BLUETOOTH_ARC_BLUETOOTH_BRIDGE_H_ +#define CHROME_BROWSER_CHROMEOS_ARC_BLUETOOTH_ARC_BLUETOOTH_BRIDGE_H_ + +#include <stdint.h> + +#include <map> +#include <memory> +#include <queue> +#include <string> +#include <unordered_map> +#include <unordered_set> +#include <vector> + +#include "base/callback.h" +#include "base/timer/timer.h" +#include "components/arc/common/bluetooth.mojom.h" +#include "components/arc/common/intent_helper.mojom.h" +#include "components/arc/instance_holder.h" +#include "components/keyed_service/core/keyed_service.h" +#include "device/bluetooth/bluetooth_adapter.h" +#include "device/bluetooth/bluetooth_adapter_factory.h" +#include "device/bluetooth/bluetooth_advertisement.h" +#include "device/bluetooth/bluetooth_device.h" +#include "device/bluetooth/bluetooth_discovery_session.h" +#include "device/bluetooth/bluetooth_local_gatt_service.h" +#include "device/bluetooth/bluetooth_remote_gatt_characteristic.h" +#include "device/bluetooth/bluetooth_remote_gatt_descriptor.h" +#include "device/bluetooth/bluetooth_remote_gatt_service.h" +#include "device/bluetooth/bluez/bluetooth_adapter_bluez.h" +#include "mojo/public/cpp/bindings/binding.h" + +namespace content { +class BrowserContext; +} // namespace content + +namespace arc { + +class ArcBridgeService; + +class ArcBluetoothBridge + : public KeyedService, + public InstanceHolder<mojom::BluetoothInstance>::Observer, + public device::BluetoothAdapter::Observer, + public device::BluetoothAdapterFactory::AdapterCallback, + public device::BluetoothLocalGattService::Delegate, + public mojom::BluetoothHost { + public: + // Returns singleton instance for the given BrowserContext, + // or nullptr if the browser |context| is not allowed to use ARC. + static ArcBluetoothBridge* GetForBrowserContext( + content::BrowserContext* context); + + ArcBluetoothBridge(content::BrowserContext* context, + ArcBridgeService* bridge_service); + ~ArcBluetoothBridge() override; + + // Overridden from InstanceHolder<mojom::BluetoothInstance>::Observer: + void OnInstanceReady() override; + void OnInstanceClosed() override; + + void OnAdapterInitialized(scoped_refptr<device::BluetoothAdapter> adapter); + + // Overridden from device::BluetoothAdapter::Observer + void AdapterPoweredChanged(device::BluetoothAdapter* adapter, + bool powered) override; + + void DeviceAdded(device::BluetoothAdapter* adapter, + device::BluetoothDevice* device) override; + + void DeviceChanged(device::BluetoothAdapter* adapter, + device::BluetoothDevice* device) override; + + void DeviceAddressChanged(device::BluetoothAdapter* adapter, + device::BluetoothDevice* device, + const std::string& old_address) override; + + void DevicePairedChanged(device::BluetoothAdapter* adapter, + device::BluetoothDevice* device, + bool new_paired_status) override; + + void DeviceRemoved(device::BluetoothAdapter* adapter, + device::BluetoothDevice* device) override; + + void GattServiceAdded(device::BluetoothAdapter* adapter, + device::BluetoothDevice* device, + device::BluetoothRemoteGattService* service) override; + + void GattServiceRemoved(device::BluetoothAdapter* adapter, + device::BluetoothDevice* device, + device::BluetoothRemoteGattService* service) override; + + void GattServicesDiscovered(device::BluetoothAdapter* adapter, + device::BluetoothDevice* device) override; + + void GattDiscoveryCompleteForService( + device::BluetoothAdapter* adapter, + device::BluetoothRemoteGattService* service) override; + + void GattServiceChanged(device::BluetoothAdapter* adapter, + device::BluetoothRemoteGattService* service) override; + + void GattCharacteristicAdded( + device::BluetoothAdapter* adapter, + device::BluetoothRemoteGattCharacteristic* characteristic) override; + + void GattCharacteristicRemoved( + device::BluetoothAdapter* adapter, + device::BluetoothRemoteGattCharacteristic* characteristic) override; + + void GattDescriptorAdded( + device::BluetoothAdapter* adapter, + device::BluetoothRemoteGattDescriptor* descriptor) override; + + void GattDescriptorRemoved( + device::BluetoothAdapter* adapter, + device::BluetoothRemoteGattDescriptor* descriptor) override; + + void GattCharacteristicValueChanged( + device::BluetoothAdapter* adapter, + device::BluetoothRemoteGattCharacteristic* characteristic, + const std::vector<uint8_t>& value) override; + + void GattDescriptorValueChanged( + device::BluetoothAdapter* adapter, + device::BluetoothRemoteGattDescriptor* descriptor, + const std::vector<uint8_t>& value) override; + + // Overridden from device::BluetoothLocalGattService::Delegate + void OnCharacteristicReadRequest( + const device::BluetoothDevice* device, + const device::BluetoothLocalGattCharacteristic* characteristic, + int offset, + const ValueCallback& callback, + const ErrorCallback& error_callback) override; + + void OnCharacteristicWriteRequest( + const device::BluetoothDevice* device, + const device::BluetoothLocalGattCharacteristic* characteristic, + const std::vector<uint8_t>& value, + int offset, + const base::Closure& callback, + const ErrorCallback& error_callback) override; + + void OnDescriptorReadRequest( + const device::BluetoothDevice* device, + const device::BluetoothLocalGattDescriptor* descriptor, + int offset, + const ValueCallback& callback, + const ErrorCallback& error_callback) override; + + void OnDescriptorWriteRequest( + const device::BluetoothDevice* device, + const device::BluetoothLocalGattDescriptor* descriptor, + const std::vector<uint8_t>& value, + int offset, + const base::Closure& callback, + const ErrorCallback& error_callback) override; + + void OnNotificationsStart( + const device::BluetoothDevice* device, + const device::BluetoothLocalGattCharacteristic* characteristic) override; + + void OnNotificationsStop( + const device::BluetoothDevice* device, + const device::BluetoothLocalGattCharacteristic* characteristic) override; + + // Bluetooth Mojo host interface + void EnableAdapter(const EnableAdapterCallback& callback) override; + void DisableAdapter(const DisableAdapterCallback& callback) override; + + void GetAdapterProperty(mojom::BluetoothPropertyType type) override; + void SetAdapterProperty(mojom::BluetoothPropertyPtr property) override; + + void GetRemoteDeviceProperty(mojom::BluetoothAddressPtr remote_addr, + mojom::BluetoothPropertyType type) override; + void SetRemoteDeviceProperty(mojom::BluetoothAddressPtr remote_addr, + mojom::BluetoothPropertyPtr property) override; + void GetRemoteServiceRecord(mojom::BluetoothAddressPtr remote_addr, + const device::BluetoothUUID& uuid) override; + + void GetRemoteServices(mojom::BluetoothAddressPtr remote_addr) override; + + void StartDiscovery() override; + void CancelDiscovery() override; + + void CreateBond(mojom::BluetoothAddressPtr addr, int32_t transport) override; + void RemoveBond(mojom::BluetoothAddressPtr addr) override; + void CancelBond(mojom::BluetoothAddressPtr addr) override; + + void GetConnectionState(mojom::BluetoothAddressPtr addr, + const GetConnectionStateCallback& callback) override; + + // Bluetooth Mojo host interface - Bluetooth Gatt Client functions + void StartLEScan() override; + void StopLEScan() override; + void ConnectLEDevice(mojom::BluetoothAddressPtr remote_addr) override; + void DisconnectLEDevice(mojom::BluetoothAddressPtr remote_addr) override; + void StartLEListen(const StartLEListenCallback& callback) override; + void StopLEListen(const StopLEListenCallback& callback) override; + void SearchService(mojom::BluetoothAddressPtr remote_addr) override; + + void GetGattDB(mojom::BluetoothAddressPtr remote_addr) override; + void ReadGattCharacteristic( + mojom::BluetoothAddressPtr remote_addr, + mojom::BluetoothGattServiceIDPtr service_id, + mojom::BluetoothGattIDPtr char_id, + const ReadGattCharacteristicCallback& callback) override; + void WriteGattCharacteristic( + mojom::BluetoothAddressPtr remote_addr, + mojom::BluetoothGattServiceIDPtr service_id, + mojom::BluetoothGattIDPtr char_id, + mojom::BluetoothGattValuePtr value, + const WriteGattCharacteristicCallback& callback) override; + void ReadGattDescriptor(mojom::BluetoothAddressPtr remote_addr, + mojom::BluetoothGattServiceIDPtr service_id, + mojom::BluetoothGattIDPtr char_id, + mojom::BluetoothGattIDPtr desc_id, + const ReadGattDescriptorCallback& callback) override; + void WriteGattDescriptor( + mojom::BluetoothAddressPtr remote_addr, + mojom::BluetoothGattServiceIDPtr service_id, + mojom::BluetoothGattIDPtr char_id, + mojom::BluetoothGattIDPtr desc_id, + mojom::BluetoothGattValuePtr value, + const WriteGattDescriptorCallback& callback) override; + void RegisterForGattNotification( + mojom::BluetoothAddressPtr remote_addr, + mojom::BluetoothGattServiceIDPtr service_id, + mojom::BluetoothGattIDPtr char_id, + const RegisterForGattNotificationCallback& callback) override; + void DeregisterForGattNotification( + mojom::BluetoothAddressPtr remote_addr, + mojom::BluetoothGattServiceIDPtr service_id, + mojom::BluetoothGattIDPtr char_id, + const DeregisterForGattNotificationCallback& callback) override; + void ReadRemoteRssi(mojom::BluetoothAddressPtr remote_addr, + const ReadRemoteRssiCallback& callback) override; + + void OpenBluetoothSocket( + const OpenBluetoothSocketCallback& callback) override; + + // Bluetooth Mojo host interface - Bluetooth Gatt Server functions + // Android counterpart link: + // https://source.android.com/devices/halref/bt__gatt__server_8h.html + // Create a new service. Chrome will create an integer service handle based on + // that BlueZ identifier that will pass back to Android in the callback. + // num_handles: number of handle for characteristic / descriptor that will be + // created in this service + void AddService(mojom::BluetoothGattServiceIDPtr service_id, + int32_t num_handles, + const AddServiceCallback& callback) override; + // Add a characteristic to a service and pass the characteristic handle back. + void AddCharacteristic(int32_t service_handle, + const device::BluetoothUUID& uuid, + int32_t properties, + int32_t permissions, + const AddCharacteristicCallback& callback) override; + // Add a descriptor to the last characteristic added to the given service + // and pass the descriptor handle back. + void AddDescriptor(int32_t service_handle, + const device::BluetoothUUID& uuid, + int32_t permissions, + const AddDescriptorCallback& callback) override; + // Start a local service. + void StartService(int32_t service_handle, + const StartServiceCallback& callback) override; + // Stop a local service. + void StopService(int32_t service_handle, + const StopServiceCallback& callback) override; + // Delete a local service. + void DeleteService(int32_t service_handle, + const DeleteServiceCallback& callback) override; + // Send value indication to a remote device. + void SendIndication(int32_t attribute_handle, + mojom::BluetoothAddressPtr address, + bool confirm, + const std::vector<uint8_t>& value, + const SendIndicationCallback& callback) override; + + // Bluetooth Mojo host interface - Bluetooth SDP functions + void GetSdpRecords(mojom::BluetoothAddressPtr remote_addr, + const device::BluetoothUUID& target_uuid) override; + void CreateSdpRecord(mojom::BluetoothSdpRecordPtr record_mojo, + const CreateSdpRecordCallback& callback) override; + void RemoveSdpRecord(uint32_t service_handle, + const RemoveSdpRecordCallback& callback) override; + + // Set up or disable multiple advertising. + void ReserveAdvertisementHandle( + const ReserveAdvertisementHandleCallback& callback) override; + void BroadcastAdvertisement( + int32_t adv_handle, + std::unique_ptr<device::BluetoothAdvertisement::Data> advertisement, + const BroadcastAdvertisementCallback& callback) override; + void ReleaseAdvertisementHandle( + int32_t adv_handle, + const ReleaseAdvertisementHandleCallback& callback) override; + + // Chrome observer callbacks + void OnPoweredOn( + const base::Callback<void(mojom::BluetoothAdapterState)>& callback) const; + void OnPoweredOff( + const base::Callback<void(mojom::BluetoothAdapterState)>& callback) const; + void OnPoweredError( + const base::Callback<void(mojom::BluetoothAdapterState)>& callback) const; + void OnDiscoveryStarted( + std::unique_ptr<device::BluetoothDiscoverySession> session); + void OnDiscoveryStopped(); + void OnDiscoveryError(); + void OnPairing(mojom::BluetoothAddressPtr addr) const; + void OnPairedDone(mojom::BluetoothAddressPtr addr) const; + void OnPairedError( + mojom::BluetoothAddressPtr addr, + device::BluetoothDevice::ConnectErrorCode error_code) const; + void OnForgetDone(mojom::BluetoothAddressPtr addr) const; + void OnForgetError(mojom::BluetoothAddressPtr addr) const; + + void OnGattConnectStateChanged(mojom::BluetoothAddressPtr addr, + bool connected) const; + void OnGattConnected( + mojom::BluetoothAddressPtr addr, + std::unique_ptr<device::BluetoothGattConnection> connection); + void OnGattConnectError( + mojom::BluetoothAddressPtr addr, + device::BluetoothDevice::ConnectErrorCode error_code) const; + void OnGattDisconnected(mojom::BluetoothAddressPtr addr); + + void OnStartLEListenDone(const StartLEListenCallback& callback, + scoped_refptr<device::BluetoothAdvertisement> adv); + void OnStartLEListenError( + const StartLEListenCallback& callback, + device::BluetoothAdvertisement::ErrorCode error_code); + + void OnStopLEListenDone(const StopLEListenCallback& callback); + void OnStopLEListenError( + const StopLEListenCallback& callback, + device::BluetoothAdvertisement::ErrorCode error_code); + + void OnGattNotifyStartDone( + const RegisterForGattNotificationCallback& callback, + const std::string char_string_id, + std::unique_ptr<device::BluetoothGattNotifySession> notify_session); + + private: + template <typename T> + class InstanceObserver; + class AppInstanceObserver; + class IntentHelperInstanceObserver; + + // Power state change on Bluetooth adapter. + enum class AdapterPowerState { TURN_OFF, TURN_ON }; + + bool IsInstanceUp() const { return is_bluetooth_instance_up_; } + + // Indicates if a power change is initiated by Chrome / Android. + bool IsPowerChangeInitiatedByRemote( + ArcBluetoothBridge::AdapterPowerState powered) const; + bool IsPowerChangeInitiatedByLocal( + ArcBluetoothBridge::AdapterPowerState powered) const; + + // Sends initial power state when all preconditions are met. + void MaybeSendInitialPowerChange(); + + // Manages the powered change intents sent to Android. + void EnqueueLocalPowerChange(AdapterPowerState powered); + void DequeueLocalPowerChange(AdapterPowerState powered); + + // Manages the powered change requests received from Android. + void EnqueueRemotePowerChange(AdapterPowerState powered, + const EnableAdapterCallback& callback); + void DequeueRemotePowerChange(AdapterPowerState powered); + + std::vector<mojom::BluetoothPropertyPtr> GetDeviceProperties( + mojom::BluetoothPropertyType type, + const device::BluetoothDevice* device) const; + std::vector<mojom::BluetoothPropertyPtr> GetAdapterProperties( + mojom::BluetoothPropertyType type) const; + std::vector<mojom::BluetoothAdvertisingDataPtr> GetAdvertisingData( + const device::BluetoothDevice* device) const; + + void SendCachedDevicesFound() const; + + device::BluetoothRemoteGattCharacteristic* FindGattCharacteristic( + mojom::BluetoothAddressPtr remote_addr, + mojom::BluetoothGattServiceIDPtr service_id, + mojom::BluetoothGattIDPtr char_id) const; + + device::BluetoothRemoteGattDescriptor* FindGattDescriptor( + mojom::BluetoothAddressPtr remote_addr, + mojom::BluetoothGattServiceIDPtr service_id, + mojom::BluetoothGattIDPtr char_id, + mojom::BluetoothGattIDPtr desc_id) const; + + // Send the power status change to Android via an intent. + void SendBluetoothPoweredStateBroadcast(AdapterPowerState powered) const; + + // Propagates the list of paired device to Android. + void SendCachedPairedDevices() const; + + bool IsGattServerAttributeHandleAvailable(int need); + int32_t GetNextGattServerAttributeHandle(); + template <class LocalGattAttribute> + int32_t CreateGattAttributeHandle(LocalGattAttribute* attribute); + + // Common code for OnCharacteristicReadRequest and OnDescriptorReadRequest + template <class LocalGattAttribute> + void OnGattAttributeReadRequest(const device::BluetoothDevice* device, + const LocalGattAttribute* attribute, + int offset, + const ValueCallback& success_callback, + const ErrorCallback& error_callback); + + // Common code for OnCharacteristicWriteRequest and OnDescriptorWriteRequest + template <class LocalGattAttribute> + void OnGattAttributeWriteRequest(const device::BluetoothDevice* device, + const LocalGattAttribute* attribute, + const std::vector<uint8_t>& value, + int offset, + const base::Closure& success_callback, + const ErrorCallback& error_callback); + + void OnSetDiscoverable(bool discoverable, bool success, uint32_t timeout); + void SetDiscoverable(bool discoverable, uint32_t timeout); + + void OnGetServiceRecordsDone( + mojom::BluetoothAddressPtr remote_addr, + const device::BluetoothUUID& target_uuid, + const std::vector<bluez::BluetoothServiceRecordBlueZ>& records_bluez); + void OnGetServiceRecordsError( + mojom::BluetoothAddressPtr remote_addr, + const device::BluetoothUUID& target_uuid, + bluez::BluetoothServiceRecordBlueZ::ErrorCode error_code); + + void OnSetAdapterProperty(mojom::BluetoothStatus success, + mojom::BluetoothPropertyPtr property); + + // Convenience function to set primary user's bluetooth pref. + void SetPrimaryUserBluetoothPowerSetting(bool enabled) const; + + // Callbacks for managing advertisements registered from the instance. + + // Called when we have an open slot in the advertisement map and want to + // register the advertisement given by |data| for handle |adv_handle|. + void OnReadyToRegisterAdvertisement( + const BroadcastAdvertisementCallback& callback, + int32_t adv_handle, + std::unique_ptr<device::BluetoothAdvertisement::Data> data); + // Called when we've successfully registered a new advertisement for + // handle |adv_handle|. + void OnRegisterAdvertisementDone( + const BroadcastAdvertisementCallback& callback, + int32_t adv_handle, + scoped_refptr<device::BluetoothAdvertisement> advertisement); + // Called when the attempt to register an advertisement for handle + // |adv_handle| has failed. |adv_handle| remains reserved, but no + // advertisement is associated with it. + void OnRegisterAdvertisementError( + const BroadcastAdvertisementCallback& callback, + int32_t adv_handle, + device::BluetoothAdvertisement::ErrorCode error_code); + // Both of the following are called after we've tried to unregister + // the advertisement for |adv_handle|. Either way, we will no + // longer be broadcasting this advertisement, so in either case, the + // handle can be released. + void OnUnregisterAdvertisementDone( + const ReleaseAdvertisementHandleCallback& callback, + int32_t adv_handle); + void OnUnregisterAdvertisementError( + const ReleaseAdvertisementHandleCallback& callback, + int32_t adv_handle, + device::BluetoothAdvertisement::ErrorCode error_code); + // Find the next free advertisement handle and put it in *adv_handle, + // or return false if the advertisement map is full. + bool GetAdvertisementHandle(int32_t* adv_handle); + + void SendDevice(const device::BluetoothDevice* device) const; + + ArcBridgeService* const arc_bridge_service_; // Owned by ArcServiceManager. + + mojo::Binding<mojom::BluetoothHost> binding_; + + scoped_refptr<bluez::BluetoothAdapterBlueZ> bluetooth_adapter_; + scoped_refptr<device::BluetoothAdvertisement> advertisment_; + std::unique_ptr<device::BluetoothDiscoverySession> discovery_session_; + std::unordered_map<std::string, + std::unique_ptr<device::BluetoothGattNotifySession>> + notification_session_; + // Map from Android int handle to Chrome (BlueZ) string identifier. + std::unordered_map<int32_t, std::string> gatt_identifier_; + // Map from Chrome (BlueZ) string identifier to android int handle. + std::unordered_map<std::string, int32_t> gatt_handle_; + // Store last GattCharacteristic added to each GattService for GattServer. + std::unordered_map<int32_t, int32_t> last_characteristic_; + // Monotonically increasing value to use as handle to give to Android side. + int32_t gatt_server_attribute_next_handle_ = 0; + // Keeps track of all devices which initiated a GATT connection to us. + std::unordered_set<std::string> gatt_connection_cache_; + // Map of device address to GATT connection objects for connections we + // have made. We need to hang on to these as long as the connection is + // active since their destructors will drop the connections otherwise. + std::unordered_map<std::string, + std::unique_ptr<device::BluetoothGattConnection>> + gatt_connections_; + // Timer to turn discovery off. + base::OneShotTimer discovery_off_timer_; + // Timer to turn adapter discoverable off. + base::OneShotTimer discoverable_off_timer_; + + // This indicates whether the remote Bluetooth ARC instance is ready to + // receive events. + bool is_bluetooth_instance_up_; + + // Observers to listen the start-up of App and Intent Helper. + std::unique_ptr<AppInstanceObserver> app_observer_; + std::unique_ptr<IntentHelperInstanceObserver> intent_helper_observer_; + // Queue to track the powered state changes initiated by Android. + std::queue<AdapterPowerState> remote_power_changes_; + // Queue to track the powered state changes initiated by Chrome. + std::queue<AdapterPowerState> local_power_changes_; + // Timer to track the completion of power-changed intent sent to Android. + base::OneShotTimer power_intent_timer_; + + // Holds advertising data registered by the instance. + // + // When a handle is reserved, an entry is placed into the advertisements_ + // map. This entry is not yet associated with a device::BluetoothAdvertisement + // because the instance hasn't sent us any advertising data yet, so its + // mapped value is nullptr until that happens. Thus we have three states for a + // handle: + // * unmapped -> free + // * mapped to nullptr -> reserved, awaiting data + // * mapped to a device::BluetoothAdvertisement -> in use, and the mapped + // BluetoothAdvertisement is currently registered with the adapter. + // TODO(crbug.com/658385) Change back to 5 when we support setting signal + // strength per each advertisement slot. + enum { kMaxAdvertisements = 1 }; + std::map<int32_t, scoped_refptr<device::BluetoothAdvertisement>> + advertisements_; + + THREAD_CHECKER(thread_checker_); + + // WeakPtrFactory to use for callbacks. + base::WeakPtrFactory<ArcBluetoothBridge> weak_factory_; + + DISALLOW_COPY_AND_ASSIGN(ArcBluetoothBridge); +}; + +} // namespace arc + +#endif // CHROME_BROWSER_CHROMEOS_ARC_BLUETOOTH_ARC_BLUETOOTH_BRIDGE_H_
diff --git a/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge_unittest.cc b/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge_unittest.cc new file mode 100644 index 0000000..0c569e2a --- /dev/null +++ b/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge_unittest.cc
@@ -0,0 +1,332 @@ +// 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/chromeos/arc/bluetooth/arc_bluetooth_bridge.h" + +#include <string> +#include <utility> +#include <vector> + +#include "base/memory/ptr_util.h" +#include "base/message_loop/message_loop.h" +#include "base/run_loop.h" +#include "base/strings/stringprintf.h" +#include "components/arc/arc_bridge_service.h" +#include "components/arc/bluetooth/bluetooth_type_converters.h" +#include "components/arc/common/bluetooth.mojom.h" +#include "components/arc/test/fake_bluetooth_instance.h" +#include "device/bluetooth/dbus/bluez_dbus_manager.h" +#include "device/bluetooth/dbus/fake_bluetooth_adapter_client.h" +#include "device/bluetooth/dbus/fake_bluetooth_device_client.h" +#include "device/bluetooth/dbus/fake_bluetooth_gatt_characteristic_client.h" +#include "device/bluetooth/dbus/fake_bluetooth_gatt_descriptor_client.h" +#include "device/bluetooth/dbus/fake_bluetooth_gatt_service_client.h" +#include "device/bluetooth/dbus/fake_bluetooth_le_advertising_manager_client.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace { +constexpr int16_t kTestRssi = -50; +constexpr int16_t kTestRssi2 = -70; +} // namespace + +namespace arc { + +constexpr int kFailureAdvHandle = -1; + +class ArcBluetoothBridgeTest : public testing::Test { + protected: + void AddTestDevice() { + bluez::BluezDBusManager* dbus_manager = bluez::BluezDBusManager::Get(); + auto* fake_bluetooth_device_client = + static_cast<bluez::FakeBluetoothDeviceClient*>( + dbus_manager->GetBluetoothDeviceClient()); + auto* fake_bluetooth_gatt_service_client = + static_cast<bluez::FakeBluetoothGattServiceClient*>( + dbus_manager->GetBluetoothGattServiceClient()); + auto* fake_bluetooth_gatt_characteristic_client = + static_cast<bluez::FakeBluetoothGattCharacteristicClient*>( + dbus_manager->GetBluetoothGattCharacteristicClient()); + + fake_bluetooth_device_client->CreateDevice( + dbus::ObjectPath(bluez::FakeBluetoothAdapterClient::kAdapterPath), + dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath)); + fake_bluetooth_gatt_service_client->ExposeHeartRateService( + dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath)); + fake_bluetooth_gatt_characteristic_client->ExposeHeartRateCharacteristics( + fake_bluetooth_gatt_service_client->GetHeartRateServicePath()); + + ChangeTestDeviceRssi(kTestRssi); + } + + void ChangeTestDeviceRssi(uint16_t rssi) { + bluez::BluezDBusManager* dbus_manager = bluez::BluezDBusManager::Get(); + auto* fake_bluetooth_device_client = + static_cast<bluez::FakeBluetoothDeviceClient*>( + dbus_manager->GetBluetoothDeviceClient()); + fake_bluetooth_device_client->UpdateDeviceRSSI( + dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath), + rssi); + } + + void OnAdapterInitialized(scoped_refptr<device::BluetoothAdapter> adapter) { + adapter_ = adapter; + get_adapter_run_loop_.Quit(); + } + + void SetUp() override { + std::unique_ptr<bluez::BluezDBusManagerSetter> dbus_setter = + bluez::BluezDBusManager::GetSetterForTesting(); + auto fake_bluetooth_device_client = + base::MakeUnique<bluez::FakeBluetoothDeviceClient>(); + fake_bluetooth_device_client->RemoveAllDevices(); + dbus_setter->SetBluetoothDeviceClient( + std::move(fake_bluetooth_device_client)); + dbus_setter->SetBluetoothGattServiceClient( + base::MakeUnique<bluez::FakeBluetoothGattServiceClient>()); + dbus_setter->SetBluetoothGattCharacteristicClient( + base::MakeUnique<bluez::FakeBluetoothGattCharacteristicClient>()); + dbus_setter->SetBluetoothGattDescriptorClient( + base::MakeUnique<bluez::FakeBluetoothGattDescriptorClient>()); + + arc_bridge_service_ = base::MakeUnique<ArcBridgeService>(); + fake_bluetooth_instance_ = base::MakeUnique<FakeBluetoothInstance>(); + arc_bridge_service_->bluetooth()->SetInstance( + fake_bluetooth_instance_.get(), 2); + // TODO(hidehiko): Use Singleton instance tied to BrowserContext. + arc_bluetooth_bridge_ = base::MakeUnique<ArcBluetoothBridge>( + nullptr, arc_bridge_service_.get()); + + device::BluetoothAdapterFactory::GetAdapter(base::Bind( + &ArcBluetoothBridgeTest::OnAdapterInitialized, base::Unretained(this))); + // We will quit the loop once we get the adapter. + get_adapter_run_loop_.Run(); + } + + // Helper methods for multi advertisement tests. + int32_t ReserveAdvertisementHandle() { + constexpr int kSentinelHandle = -2; + last_adv_handle_ = kSentinelHandle; + arc_bluetooth_bridge_->ReserveAdvertisementHandle( + base::Bind(&ArcBluetoothBridgeTest::ReserveAdvertisementHandleCallback, + base::Unretained(this))); + + base::RunLoop().RunUntilIdle(); + // Make sure the callback was called. + EXPECT_NE(kSentinelHandle, last_adv_handle_); + return last_adv_handle_; + } + + mojom::BluetoothGattStatus BroadcastAdvertisement( + int adv_handle, + std::unique_ptr<device::BluetoothAdvertisement::Data> data) { + last_status_ = mojom::BluetoothGattStatus::GATT_REQUEST_NOT_SUPPORTED; + arc_bluetooth_bridge_->BroadcastAdvertisement( + adv_handle, std::move(data), + base::Bind(&ArcBluetoothBridgeTest::StatusSetterCallback, + base::Unretained(this))); + + base::RunLoop().RunUntilIdle(); + EXPECT_NE(mojom::BluetoothGattStatus::GATT_REQUEST_NOT_SUPPORTED, + last_status_); + return last_status_; + } + + mojom::BluetoothGattStatus ReleaseAdvertisementHandle(int adv_handle) { + last_status_ = mojom::BluetoothGattStatus::GATT_REQUEST_NOT_SUPPORTED; + arc_bluetooth_bridge_->ReleaseAdvertisementHandle( + adv_handle, base::Bind(&ArcBluetoothBridgeTest::StatusSetterCallback, + base::Unretained(this))); + + base::RunLoop().RunUntilIdle(); + EXPECT_NE(mojom::BluetoothGattStatus::GATT_REQUEST_NOT_SUPPORTED, + last_status_); + return last_status_; + } + + void ReserveAdvertisementHandleCallback(mojom::BluetoothGattStatus status, + int32_t adv_handle) { + if (status == mojom::BluetoothGattStatus::GATT_FAILURE) + last_adv_handle_ = kFailureAdvHandle; + else + last_adv_handle_ = adv_handle; + } + + void StatusSetterCallback(mojom::BluetoothGattStatus status) { + last_status_ = status; + } + + int NumActiveAdvertisements() { + bluez::FakeBluetoothLEAdvertisingManagerClient* adv_client = + static_cast<bluez::FakeBluetoothLEAdvertisingManagerClient*>( + bluez::BluezDBusManager::Get() + ->GetBluetoothLEAdvertisingManagerClient()); + return adv_client->currently_registered(); + } + + int last_adv_handle_; + mojom::BluetoothGattStatus last_status_; + + std::unique_ptr<ArcBridgeService> arc_bridge_service_; + std::unique_ptr<FakeBluetoothInstance> fake_bluetooth_instance_; + std::unique_ptr<ArcBluetoothBridge> arc_bluetooth_bridge_; + scoped_refptr<device::BluetoothAdapter> adapter_; + base::MessageLoop message_loop_; + base::RunLoop get_adapter_run_loop_; +}; + +// When we add device to bluez::FakeBluetoothDeviceClient, ArcBluetoothBridge +// should send new device data to Android. This test will then check +// the correctness of the device properties sent via arc bridge. +TEST_F(ArcBluetoothBridgeTest, DeviceFound) { + EXPECT_EQ(0u, fake_bluetooth_instance_->device_found_data().size()); + AddTestDevice(); + EXPECT_EQ(2u, fake_bluetooth_instance_->device_found_data().size()); + const std::vector<mojom::BluetoothPropertyPtr>& prop = + fake_bluetooth_instance_->device_found_data().back(); + + EXPECT_EQ(7u, prop.size()); + EXPECT_TRUE(prop[0]->is_bdname()); + EXPECT_EQ(std::string(bluez::FakeBluetoothDeviceClient::kLowEnergyName), + prop[0]->get_bdname()); + EXPECT_TRUE(prop[1]->is_bdaddr()); + EXPECT_EQ(std::string(bluez::FakeBluetoothDeviceClient::kLowEnergyAddress), + prop[1]->get_bdaddr()->To<std::string>()); + EXPECT_TRUE(prop[2]->is_uuids()); + EXPECT_EQ(1u, prop[2]->get_uuids().size()); + EXPECT_EQ(bluez::FakeBluetoothGattServiceClient::kHeartRateServiceUUID, + prop[2]->get_uuids()[0].value()); + EXPECT_TRUE(prop[3]->is_device_class()); + EXPECT_EQ(bluez::FakeBluetoothDeviceClient::kLowEnergyClass, + prop[3]->get_device_class()); + EXPECT_TRUE(prop[4]->is_device_type()); + // bluez::FakeBluetoothDeviceClient does not return proper device type. + EXPECT_TRUE(prop[5]->is_remote_friendly_name()); + EXPECT_EQ(std::string(bluez::FakeBluetoothDeviceClient::kLowEnergyName), + prop[5]->get_remote_friendly_name()); + EXPECT_TRUE(prop[6]->is_remote_rssi()); + EXPECT_EQ(kTestRssi, prop[6]->get_remote_rssi()); + + ChangeTestDeviceRssi(kTestRssi2); + EXPECT_EQ(3u, fake_bluetooth_instance_->device_found_data().size()); + const std::vector<mojom::BluetoothPropertyPtr>& prop2 = + fake_bluetooth_instance_->device_found_data().back(); + EXPECT_EQ(7u, prop2.size()); + EXPECT_TRUE(prop2[6]->is_remote_rssi()); + EXPECT_EQ(kTestRssi2, prop2[6]->get_remote_rssi()); +} + +// Invoke OnDiscoveryStarted to send cached device to BT instance, +// and check correctness of the Advertising data sent via arc bridge. +TEST_F(ArcBluetoothBridgeTest, LEDeviceFound) { + EXPECT_EQ(0u, fake_bluetooth_instance_->le_device_found_data().size()); + AddTestDevice(); + EXPECT_EQ(1u, fake_bluetooth_instance_->le_device_found_data().size()); + + const auto& le_device_found_data = + fake_bluetooth_instance_->le_device_found_data().back(); + const mojom::BluetoothAddressPtr& addr = le_device_found_data->addr(); + const std::vector<mojom::BluetoothAdvertisingDataPtr>& adv_data = + le_device_found_data->adv_data(); + + EXPECT_EQ(std::string(bluez::FakeBluetoothDeviceClient::kLowEnergyAddress), + addr->To<std::string>()); + EXPECT_EQ(2u, adv_data.size()); + + EXPECT_TRUE(adv_data[0]->is_local_name()); + EXPECT_EQ(std::string(bluez::FakeBluetoothDeviceClient::kLowEnergyName), + adv_data[0]->get_local_name()); + + EXPECT_TRUE(adv_data[1]->is_service_uuids()); + EXPECT_EQ(1u, adv_data[1]->get_service_uuids().size()); + EXPECT_EQ(bluez::FakeBluetoothGattServiceClient::kHeartRateServiceUUID, + adv_data[1]->get_service_uuids()[0].canonical_value()); + + EXPECT_EQ(kTestRssi, le_device_found_data->rssi()); + + ChangeTestDeviceRssi(kTestRssi2); + EXPECT_EQ(2u, fake_bluetooth_instance_->le_device_found_data().size()); + EXPECT_EQ(kTestRssi2, + fake_bluetooth_instance_->le_device_found_data().back()->rssi()); +} + +// Invoke GetGattDB and check correctness of the GattDB sent via arc bridge. +TEST_F(ArcBluetoothBridgeTest, GetGattDB) { + AddTestDevice(); + + arc_bluetooth_bridge_->GetGattDB(mojom::BluetoothAddress::From( + std::string(bluez::FakeBluetoothDeviceClient::kLowEnergyAddress))); + EXPECT_EQ(1u, fake_bluetooth_instance_->gatt_db_result().size()); + + const mojom::BluetoothAddressPtr& addr = + fake_bluetooth_instance_->gatt_db_result().back()->remote_addr(); + EXPECT_EQ(std::string(bluez::FakeBluetoothDeviceClient::kLowEnergyAddress), + addr->To<std::string>()); + + // HeartRateService in bluez::FakeBluetoothDeviceClient consists of + // Service: HeartRateService + // Characteristic: HeartRateMeasurement + // Descriptor: ClientCharacteristicConfiguration + // Characteristic: BodySensorLocation + // Characteristic: HeartRateControlPoint + const std::vector<mojom::BluetoothGattDBElementPtr>& db = + fake_bluetooth_instance_->gatt_db_result().back()->db(); + EXPECT_EQ(5u, db.size()); + + EXPECT_EQ(device::BluetoothUUID( + bluez::FakeBluetoothGattServiceClient::kHeartRateServiceUUID), + db[0]->uuid); + EXPECT_EQ(mojom::BluetoothGattDBAttributeType::BTGATT_DB_PRIMARY_SERVICE, + db[0]->type); + + EXPECT_EQ(device::BluetoothUUID(bluez::FakeBluetoothGattCharacteristicClient:: + kHeartRateMeasurementUUID), + db[1]->uuid); + EXPECT_EQ(mojom::BluetoothGattDBAttributeType::BTGATT_DB_CHARACTERISTIC, + db[1]->type); + EXPECT_EQ(device::BluetoothGattCharacteristic::PROPERTY_NOTIFY, + db[1]->properties); + + EXPECT_EQ(device::BluetoothUUID(bluez::FakeBluetoothGattDescriptorClient:: + kClientCharacteristicConfigurationUUID), + db[2]->uuid); + EXPECT_EQ(mojom::BluetoothGattDBAttributeType::BTGATT_DB_DESCRIPTOR, + db[2]->type); + + EXPECT_EQ(device::BluetoothUUID(bluez::FakeBluetoothGattCharacteristicClient:: + kBodySensorLocationUUID), + db[3]->uuid); + EXPECT_EQ(mojom::BluetoothGattDBAttributeType::BTGATT_DB_CHARACTERISTIC, + db[3]->type); + EXPECT_EQ(device::BluetoothGattCharacteristic::PROPERTY_READ, + db[3]->properties); + + EXPECT_EQ(device::BluetoothUUID(bluez::FakeBluetoothGattCharacteristicClient:: + kHeartRateControlPointUUID), + db[4]->uuid); + EXPECT_EQ(mojom::BluetoothGattDBAttributeType::BTGATT_DB_CHARACTERISTIC, + db[4]->type); + EXPECT_EQ(device::BluetoothGattCharacteristic::PROPERTY_WRITE, + db[4]->properties); +} + +// Invoke multi advertisement methods and make sure they are going down to the +// D-Bus clients. +TEST_F(ArcBluetoothBridgeTest, SingleAdvertisement) { + int32_t handle = ReserveAdvertisementHandle(); + EXPECT_NE(kFailureAdvHandle, handle); + EXPECT_EQ(0, NumActiveAdvertisements()); + + auto adv_data = base::MakeUnique<device::BluetoothAdvertisement::Data>( + device::BluetoothAdvertisement::ADVERTISEMENT_TYPE_BROADCAST); + mojom::BluetoothGattStatus status = + BroadcastAdvertisement(handle, std::move(adv_data)); + EXPECT_EQ(mojom::BluetoothGattStatus::GATT_SUCCESS, status); + EXPECT_EQ(1, NumActiveAdvertisements()); + + status = ReleaseAdvertisementHandle(handle); + EXPECT_EQ(mojom::BluetoothGattStatus::GATT_SUCCESS, status); + EXPECT_EQ(0, NumActiveAdvertisements()); +} + +} // namespace arc
diff --git a/chrome/browser/chromeos/arc/user_session/arc_user_session_service_browsertest.cc b/chrome/browser/chromeos/arc/user_session/arc_user_session_service_browsertest.cc index 2a955fa..0215672 100644 --- a/chrome/browser/chromeos/arc/user_session/arc_user_session_service_browsertest.cc +++ b/chrome/browser/chromeos/arc/user_session/arc_user_session_service_browsertest.cc
@@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "base/message_loop/message_loop.h" #include "base/run_loop.h" #include "chrome/browser/chromeos/arc/user_session/arc_user_session_service.h" #include "chrome/test/base/in_process_browser_test.h"
diff --git a/chrome/browser/chromeos/arc/voice_interaction/arc_voice_interaction_framework_service.cc b/chrome/browser/chromeos/arc/voice_interaction/arc_voice_interaction_framework_service.cc index 4d24665..8519f65c 100644 --- a/chrome/browser/chromeos/arc/voice_interaction/arc_voice_interaction_framework_service.cc +++ b/chrome/browser/chromeos/arc/voice_interaction/arc_voice_interaction_framework_service.cc
@@ -375,6 +375,17 @@ framework_instance->StartVoiceInteractionSetupWizard(); } +void ArcVoiceInteractionFrameworkService::ShowVoiceInteractionSettings() { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + arc::mojom::VoiceInteractionFrameworkInstance* framework_instance = + ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->voice_interaction_framework(), + ShowVoiceInteractionSettings); + if (!framework_instance) + return; + framework_instance->ShowVoiceInteractionSettings(); +} + void ArcVoiceInteractionFrameworkService::NotifyMetalayerStatusChanged( bool visible) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
diff --git a/chrome/browser/chromeos/arc/voice_interaction/arc_voice_interaction_framework_service.h b/chrome/browser/chromeos/arc/voice_interaction/arc_voice_interaction_framework_service.h index c429e26..efd2847 100644 --- a/chrome/browser/chromeos/arc/voice_interaction/arc_voice_interaction_framework_service.h +++ b/chrome/browser/chromeos/arc/voice_interaction/arc_voice_interaction_framework_service.h
@@ -105,6 +105,9 @@ // Start the voice interaction setup wizard in container. void StartVoiceInteractionSetupWizard(); + // Show the voice interaction settings in container. + void ShowVoiceInteractionSettings(); + // Updates voice interaction flags. These flags are set only once when ARC // container is enabled. void UpdateVoiceInteractionPrefs();
diff --git a/chrome/browser/chromeos/extensions/file_manager/file_browser_handler_api_test.cc b/chrome/browser/chromeos/extensions/file_manager/file_browser_handler_api_test.cc index 3f89926..92edef1 100644 --- a/chrome/browser/chromeos/extensions/file_manager/file_browser_handler_api_test.cc +++ b/chrome/browser/chromeos/extensions/file_manager/file_browser_handler_api_test.cc
@@ -13,6 +13,7 @@ #include "base/bind.h" #include "base/files/scoped_temp_dir.h" #include "base/macros.h" +#include "base/run_loop.h" #include "base/task_scheduler/post_task.h" #include "base/threading/thread_task_runner_handle.h" #include "base/values.h"
diff --git a/chrome/browser/chromeos/fileapi/recent_model_unittest.cc b/chrome/browser/chromeos/fileapi/recent_model_unittest.cc index 1f8b35d..91eaf64 100644 --- a/chrome/browser/chromeos/fileapi/recent_model_unittest.cc +++ b/chrome/browser/chromeos/fileapi/recent_model_unittest.cc
@@ -8,6 +8,7 @@ #include "base/files/file_path.h" #include "base/memory/ptr_util.h" +#include "base/run_loop.h" #include "base/test/histogram_tester.h" #include "chrome/browser/chromeos/fileapi/recent_file.h" #include "chrome/browser/chromeos/fileapi/recent_model.h"
diff --git a/chrome/browser/chromeos/lock_screen_apps/app_manager_impl_unittest.cc b/chrome/browser/chromeos/lock_screen_apps/app_manager_impl_unittest.cc index d459dd5c..2ed311c 100644 --- a/chrome/browser/chromeos/lock_screen_apps/app_manager_impl_unittest.cc +++ b/chrome/browser/chromeos/lock_screen_apps/app_manager_impl_unittest.cc
@@ -13,6 +13,7 @@ #include "base/files/file_util.h" #include "base/json/json_file_value_serializer.h" #include "base/memory/ptr_util.h" +#include "base/run_loop.h" #include "base/test/scoped_command_line.h" #include "base/test/simple_test_tick_clock.h" #include "base/values.h"
diff --git a/chrome/browser/chromeos/lock_screen_apps/state_controller_unittest.cc b/chrome/browser/chromeos/lock_screen_apps/state_controller_unittest.cc index 9b35e8d..3ece893 100644 --- a/chrome/browser/chromeos/lock_screen_apps/state_controller_unittest.cc +++ b/chrome/browser/chromeos/lock_screen_apps/state_controller_unittest.cc
@@ -13,6 +13,7 @@ #include "base/base64.h" #include "base/files/file_path.h" #include "base/memory/ptr_util.h" +#include "base/run_loop.h" #include "base/test/scoped_command_line.h" #include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/lock_screen_apps/app_manager.h"
diff --git a/chrome/browser/chromeos/login/chrome_restart_request.cc b/chrome/browser/chromeos/login/chrome_restart_request.cc index 99cad43..761a240 100644 --- a/chrome/browser/chromeos/login/chrome_restart_request.cc +++ b/chrome/browser/chromeos/login/chrome_restart_request.cc
@@ -114,6 +114,7 @@ ::switches::kEnableLogging, ::switches::kEnableLowResTiling, ::switches::kEnableNativeGpuMemoryBuffers, + ::switches::kEnableOOPRasterization, ::switches::kDisablePartialRaster, ::switches::kEnablePartialRaster, ::switches::kEnablePinch,
diff --git a/chrome/browser/chromeos/login/login_browsertest.cc b/chrome/browser/chromeos/login/login_browsertest.cc index 3932fdd..2e33cf9 100644 --- a/chrome/browser/chromeos/login/login_browsertest.cc +++ b/chrome/browser/chromeos/login/login_browsertest.cc
@@ -9,6 +9,7 @@ #include "ash/system/tray/system_tray.h" #include "base/command_line.h" #include "base/location.h" +#include "base/run_loop.h" #include "base/single_thread_task_runner.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h"
diff --git a/chrome/browser/chromeos/login/login_screen_policy_browsertest.cc b/chrome/browser/chromeos/login/login_screen_policy_browsertest.cc index e22cf17..55707990 100644 --- a/chrome/browser/chromeos/login/login_screen_policy_browsertest.cc +++ b/chrome/browser/chromeos/login/login_screen_policy_browsertest.cc
@@ -4,6 +4,7 @@ #include "base/command_line.h" #include "base/memory/ref_counted.h" +#include "base/run_loop.h" #include "base/threading/thread_task_runner_handle.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/chrome_notification_types.h"
diff --git a/chrome/browser/chromeos/login/ui/login_display_host_impl.cc b/chrome/browser/chromeos/login/ui/login_display_host_impl.cc index 1a8abe4..8bcb74d 100644 --- a/chrome/browser/chromeos/login/ui/login_display_host_impl.cc +++ b/chrome/browser/chromeos/login/ui/login_display_host_impl.cc
@@ -284,10 +284,6 @@ return login_screen_locale; } -void EnableSystemSoundsForAccessibility() { - chromeos::AccessibilityManager::Get()->EnableSystemSounds(true); -} - // Disables virtual keyboard overscroll. Login UI will scroll user pods // into view on JS side when virtual keyboard is shown. void DisableKeyboardOverscroll() { @@ -608,7 +604,6 @@ void LoginDisplayHostImpl::StartWizard(OobeScreen first_screen) { DisableKeyboardOverscroll(); - startup_sound_honors_spoken_feedback_ = false; TryToPlayStartupSound(); // Keep parameters to restore if renderer crashes. @@ -711,9 +706,6 @@ const LoginScreenContext& context) { DisableKeyboardOverscroll(); - startup_sound_honors_spoken_feedback_ = true; - TryToPlayStartupSound(); - restore_path_ = RESTORE_SIGN_IN; is_showing_login_ = true; // Animation is not supported in Mash @@ -1264,27 +1256,11 @@ // for a long time or can't be played. if (base::TimeTicks::Now() - login_prompt_visible_time_ > base::TimeDelta::FromMilliseconds(kStartupSoundMaxDelayMs)) { - EnableSystemSoundsForAccessibility(); return; } - if (!startup_sound_honors_spoken_feedback_ && - !AccessibilityManager::Get()->PlayEarcon(SOUND_STARTUP, - PlaySoundOption::ALWAYS)) { - EnableSystemSoundsForAccessibility(); - return; - } - - if (startup_sound_honors_spoken_feedback_ && - !AccessibilityManager::Get()->PlayEarcon( - SOUND_STARTUP, PlaySoundOption::SPOKEN_FEEDBACK_ENABLED)) { - EnableSystemSoundsForAccessibility(); - return; - } - - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, base::BindOnce(&EnableSystemSoundsForAccessibility), - media::SoundsManager::Get()->GetDuration(SOUND_STARTUP)); + AccessibilityManager::Get()->PlayEarcon(SOUND_STARTUP, + PlaySoundOption::ALWAYS); } void LoginDisplayHostImpl::OnLoginPromptVisible() {
diff --git a/chrome/browser/chromeos/login/ui/login_display_host_impl.h b/chrome/browser/chromeos/login/ui/login_display_host_impl.h index 546b149..8f262bf 100644 --- a/chrome/browser/chromeos/login/ui/login_display_host_impl.h +++ b/chrome/browser/chromeos/login/ui/login_display_host_impl.h
@@ -300,11 +300,6 @@ // SoundsManager. bool startup_sound_played_ = false; - // When true, startup sound should be played only when spoken - // feedback is enabled. Otherwise, startup sound should be played - // in any case. - bool startup_sound_honors_spoken_feedback_ = false; - // Keeps a copy of the old Drag'n'Drop client, so that it would be disabled // during a login session and restored afterwards. std::unique_ptr<wm::ScopedDragDropDisabler> scoped_drag_drop_disabler_;
diff --git a/chrome/browser/chromeos/login/ui/user_adding_screen_browsertest.cc b/chrome/browser/chromeos/login/ui/user_adding_screen_browsertest.cc index dc091e87..773cfb65 100644 --- a/chrome/browser/chromeos/login/ui/user_adding_screen_browsertest.cc +++ b/chrome/browser/chromeos/login/ui/user_adding_screen_browsertest.cc
@@ -3,6 +3,7 @@ // found in the LICENSE file. #include "base/macros.h" +#include "base/run_loop.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/chromeos/login/lock/screen_locker.h" #include "chrome/browser/chromeos/login/lock/screen_locker_tester.h"
diff --git a/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager_browsertest.cc b/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager_browsertest.cc index fed8052..68f80ca 100644 --- a/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager_browsertest.cc +++ b/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager_browsertest.cc
@@ -15,6 +15,7 @@ #include "base/macros.h" #include "base/message_loop/message_loop.h" #include "base/path_service.h" +#include "base/run_loop.h" #include "base/strings/string_number_conversions.h" #include "base/threading/thread_restrictions.h" #include "base/time/time.h"
diff --git a/chrome/browser/chromeos/policy/status_uploader_unittest.cc b/chrome/browser/chromeos/policy/status_uploader_unittest.cc index 54181ac..a7792ff4 100644 --- a/chrome/browser/chromeos/policy/status_uploader_unittest.cc +++ b/chrome/browser/chromeos/policy/status_uploader_unittest.cc
@@ -10,6 +10,7 @@ #include "base/bind_helpers.h" #include "base/callback.h" #include "base/memory/ptr_util.h" +#include "base/run_loop.h" #include "base/test/test_simple_task_runner.h" #include "base/time/time.h" #include "chrome/browser/chromeos/policy/device_local_account.h"
diff --git a/chrome/browser/chromeos/policy/user_network_configuration_updater_factory_browsertest.cc b/chrome/browser/chromeos/policy/user_network_configuration_updater_factory_browsertest.cc index ab992a5..c1ee048 100644 --- a/chrome/browser/chromeos/policy/user_network_configuration_updater_factory_browsertest.cc +++ b/chrome/browser/chromeos/policy/user_network_configuration_updater_factory_browsertest.cc
@@ -6,6 +6,7 @@ #include "base/command_line.h" #include "base/memory/ptr_util.h" +#include "base/message_loop/message_loop.h" #include "base/run_loop.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/chrome_notification_types.h"
diff --git a/chrome/browser/chromeos/preferences.cc b/chrome/browser/chromeos/preferences.cc index 6ab7fd0..c309776 100644 --- a/chrome/browser/chromeos/preferences.cc +++ b/chrome/browser/chromeos/preferences.cc
@@ -174,6 +174,9 @@ prefs::kPrimaryMouseButtonRight, false, user_prefs::PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF); + registry->RegisterBooleanPref( + prefs::kMouseReverseScroll, false, + user_prefs::PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF); registry->RegisterBooleanPref(prefs::kLabsMediaplayerEnabled, false); registry->RegisterBooleanPref(prefs::kLabsAdvancedFilesystemEnabled, false); @@ -413,6 +416,7 @@ touchpad_sensitivity_.Init(prefs::kTouchpadSensitivity, prefs, callback); primary_mouse_button_right_.Init(prefs::kPrimaryMouseButtonRight, prefs, callback); + mouse_reverse_scroll_.Init(prefs::kMouseReverseScroll, prefs, callback); download_default_directory_.Init(prefs::kDownloadDefaultDirectory, prefs, callback); touch_hud_projection_enabled_.Init(prefs::kTouchHudProjectionEnabled, @@ -644,6 +648,16 @@ } } if (reason != REASON_PREF_CHANGED || + pref_name == prefs::kMouseReverseScroll) { + const bool enabled = mouse_reverse_scroll_.GetValue(); + if (user_is_active) + mouse_settings.SetReverseScroll(enabled); + if (reason == REASON_PREF_CHANGED) + UMA_HISTOGRAM_BOOLEAN("Mouse.ReverseScroll.Changed", enabled); + else if (reason == REASON_INITIALIZATION) + UMA_HISTOGRAM_BOOLEAN("Mouse.ReverseScroll.Started", enabled); + } + if (reason != REASON_PREF_CHANGED || pref_name == prefs::kDownloadDefaultDirectory) { const bool default_download_to_drive = drive::util::IsUnderDriveMountPoint( download_default_directory_.GetValue());
diff --git a/chrome/browser/chromeos/preferences.h b/chrome/browser/chromeos/preferences.h index 2066282..a50c18e 100644 --- a/chrome/browser/chromeos/preferences.h +++ b/chrome/browser/chromeos/preferences.h
@@ -130,6 +130,7 @@ IntegerPrefMember mouse_sensitivity_; IntegerPrefMember touchpad_sensitivity_; BooleanPrefMember primary_mouse_button_right_; + BooleanPrefMember mouse_reverse_scroll_; FilePathPrefMember download_default_directory_; BooleanPrefMember touch_hud_projection_enabled_;
diff --git a/chrome/browser/chromeos/preferences_chromeos_browsertest.cc b/chrome/browser/chromeos/preferences_chromeos_browsertest.cc index 0ddfaf85..3030a92b 100644 --- a/chrome/browser/chromeos/preferences_chromeos_browsertest.cc +++ b/chrome/browser/chromeos/preferences_chromeos_browsertest.cc
@@ -82,6 +82,7 @@ void SetPrefs(PrefService* prefs, bool variant) { prefs->SetBoolean(prefs::kTapToClickEnabled, variant); prefs->SetBoolean(prefs::kPrimaryMouseButtonRight, !variant); + prefs->SetBoolean(prefs::kMouseReverseScroll, variant); prefs->SetBoolean(prefs::kTapDraggingEnabled, variant); prefs->SetBoolean(prefs::kEnableTouchpadThreeFingerClick, !variant); prefs->SetBoolean(prefs::kNaturalScroll, variant); @@ -102,6 +103,8 @@ EXPECT_EQ(prefs->GetBoolean(prefs::kPrimaryMouseButtonRight), input_settings_->current_mouse_settings() .GetPrimaryButtonRight()); + EXPECT_EQ(prefs->GetBoolean(prefs::kMouseReverseScroll), + input_settings_->current_mouse_settings().GetReverseScroll()); EXPECT_EQ(prefs->GetBoolean(prefs::kTapDraggingEnabled), input_settings_->current_touchpad_settings().GetTapDragging()); EXPECT_EQ(prefs->GetBoolean(prefs::kEnableTouchpadThreeFingerClick),
diff --git a/chrome/browser/chromeos/system/fake_input_device_settings.cc b/chrome/browser/chromeos/system/fake_input_device_settings.cc index e8cd17b6..4bbc76c 100644 --- a/chrome/browser/chromeos/system/fake_input_device_settings.cc +++ b/chrome/browser/chromeos/system/fake_input_device_settings.cc
@@ -76,6 +76,12 @@ UpdateMouseSettings(settings); } +void FakeInputDeviceSettings::SetMouseReverseScroll(bool enabled) { + MouseSettings settings; + settings.SetReverseScroll(enabled); + UpdateMouseSettings(settings); +} + void FakeInputDeviceSettings::ReapplyTouchpadSettings() { }
diff --git a/chrome/browser/chromeos/system/fake_input_device_settings.h b/chrome/browser/chromeos/system/fake_input_device_settings.h index 1f0568d..9f715b07 100644 --- a/chrome/browser/chromeos/system/fake_input_device_settings.h +++ b/chrome/browser/chromeos/system/fake_input_device_settings.h
@@ -30,6 +30,7 @@ void UpdateMouseSettings(const MouseSettings& settings) override; void SetMouseSensitivity(int value) override; void SetPrimaryButtonRight(bool right) override; + void SetMouseReverseScroll(bool enabled) override; void SetNaturalScroll(bool enabled) override; void ReapplyTouchpadSettings() override; void ReapplyMouseSettings() override;
diff --git a/chrome/browser/chromeos/system/input_device_settings.cc b/chrome/browser/chromeos/system/input_device_settings.cc index 7f16698..79ca7a77 100644 --- a/chrome/browser/chromeos/system/input_device_settings.cc +++ b/chrome/browser/chromeos/system/input_device_settings.cc
@@ -167,6 +167,7 @@ if (&other != this) { sensitivity_ = other.sensitivity_; primary_button_right_ = other.primary_button_right_; + reverse_scroll_ = other.reverse_scroll_; } return *this; } @@ -195,6 +196,18 @@ return primary_button_right_.has_value(); } +void MouseSettings::SetReverseScroll(bool enabled) { + reverse_scroll_ = enabled; +} + +bool MouseSettings::GetReverseScroll() const { + return *reverse_scroll_; +} + +bool MouseSettings::IsReverseScrollSet() const { + return reverse_scroll_.has_value(); +} + bool MouseSettings::Update(const MouseSettings& settings) { bool updated = false; if (UpdateIfHasValue(settings.sensitivity_, &sensitivity_)) @@ -203,6 +216,9 @@ &primary_button_right_)) { updated = true; } + if (UpdateIfHasValue(settings.reverse_scroll_, &reverse_scroll_)) { + updated = true; + } return updated; } @@ -219,6 +235,10 @@ input_device_settings->SetPrimaryButtonRight( mouse_settings.primary_button_right_.value()); } + if (mouse_settings.reverse_scroll_.has_value()) { + input_device_settings->SetMouseReverseScroll( + mouse_settings.reverse_scroll_.value()); + } } // static
diff --git a/chrome/browser/chromeos/system/input_device_settings.h b/chrome/browser/chromeos/system/input_device_settings.h index 9f0b63b..8d2ba81 100644 --- a/chrome/browser/chromeos/system/input_device_settings.h +++ b/chrome/browser/chromeos/system/input_device_settings.h
@@ -88,6 +88,10 @@ bool GetPrimaryButtonRight() const; bool IsPrimaryButtonRightSet() const; + void SetReverseScroll(bool enabled); + bool GetReverseScroll() const; + bool IsReverseScrollSet() const; + // Updates |this| with |settings|. If at least one setting was updated returns // true. bool Update(const MouseSettings& settings); @@ -99,6 +103,7 @@ private: base::Optional<int> sensitivity_; base::Optional<bool> primary_button_right_; + base::Optional<bool> reverse_scroll_; }; // Interface for configuring input device settings. @@ -191,6 +196,9 @@ // Sets the primary mouse button to the right button if |right| is true. virtual void SetPrimaryButtonRight(bool right) = 0; + // Turns mouse reverse scrolling on/off. + virtual void SetMouseReverseScroll(bool enabled) = 0; + // Reapplies previously set touchpad settings. virtual void ReapplyTouchpadSettings() = 0;
diff --git a/chrome/browser/chromeos/system/input_device_settings_impl_ozone.cc b/chrome/browser/chromeos/system/input_device_settings_impl_ozone.cc index c7f0bfc1..23f261e 100644 --- a/chrome/browser/chromeos/system/input_device_settings_impl_ozone.cc +++ b/chrome/browser/chromeos/system/input_device_settings_impl_ozone.cc
@@ -42,6 +42,7 @@ void UpdateMouseSettings(const MouseSettings& settings) override; void SetMouseSensitivity(int value) override; void SetPrimaryButtonRight(bool right) override; + void SetMouseReverseScroll(bool enabled) override; void ReapplyTouchpadSettings() override; void ReapplyMouseSettings() override; InputDeviceSettings::FakeInterface* GetFakeInterface() override; @@ -126,6 +127,11 @@ input_device_controller_client_->SetPrimaryButtonRight(right); } +void InputDeviceSettingsImplOzone::SetMouseReverseScroll(bool enabled) { + current_mouse_settings_.SetReverseScroll(enabled); + input_device_controller_client_->SetMouseReverseScroll(enabled); +} + void InputDeviceSettingsImplOzone::ReapplyTouchpadSettings() { TouchpadSettings::Apply(current_touchpad_settings_, this); }
diff --git a/chrome/browser/chromeos/system/tray_accessibility_browsertest.cc b/chrome/browser/chromeos/system/tray_accessibility_browsertest.cc index 2e535c0..d7e68ab 100644 --- a/chrome/browser/chromeos/system/tray_accessibility_browsertest.cc +++ b/chrome/browser/chromeos/system/tray_accessibility_browsertest.cc
@@ -14,6 +14,7 @@ #include "base/callback.h" #include "base/command_line.h" #include "base/memory/ptr_util.h" +#include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/chrome_notification_types.h"
diff --git a/chrome/browser/devtools/device/port_forwarding_browsertest.cc b/chrome/browser/devtools/device/port_forwarding_browsertest.cc index be48dc9..02b5e6c 100644 --- a/chrome/browser/devtools/device/port_forwarding_browsertest.cc +++ b/chrome/browser/devtools/device/port_forwarding_browsertest.cc
@@ -7,6 +7,7 @@ #include "base/command_line.h" #include "base/compiler_specific.h" #include "base/message_loop/message_loop.h" +#include "base/run_loop.h" #include "base/strings/string_number_conversions.h" #include "base/threading/thread_task_runner_handle.h" #include "chrome/browser/devtools/device/devtools_android_bridge.h"
diff --git a/chrome/browser/dom_distiller/dom_distiller_viewer_source_browsertest.cc b/chrome/browser/dom_distiller/dom_distiller_viewer_source_browsertest.cc index a06ce1709..bd465ef 100644 --- a/chrome/browser/dom_distiller/dom_distiller_viewer_source_browsertest.cc +++ b/chrome/browser/dom_distiller/dom_distiller_viewer_source_browsertest.cc
@@ -9,6 +9,7 @@ #include "base/command_line.h" #include "base/guid.h" +#include "base/run_loop.h" #include "base/strings/string_number_conversions.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/dom_distiller/dom_distiller_service_factory.h"
diff --git a/chrome/browser/dom_distiller/tab_utils_browsertest.cc b/chrome/browser/dom_distiller/tab_utils_browsertest.cc index 62456c2..a55dc81 100644 --- a/chrome/browser/dom_distiller/tab_utils_browsertest.cc +++ b/chrome/browser/dom_distiller/tab_utils_browsertest.cc
@@ -5,6 +5,7 @@ #include <string.h> #include "base/command_line.h" +#include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" #include "build/build_config.h" #include "chrome/browser/dom_distiller/dom_distiller_service_factory.h"
diff --git a/chrome/browser/embedded_ui_service_info_factory.cc b/chrome/browser/embedded_ui_service_info_factory.cc index a5d658c..7f2dfd1 100644 --- a/chrome/browser/embedded_ui_service_info_factory.cc +++ b/chrome/browser/embedded_ui_service_info_factory.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/embedded_ui_service_info_factory.h" +#include "base/message_loop/message_loop.h" #include "content/public/browser/discardable_shared_memory_manager.h" #include "services/ui/public/interfaces/constants.mojom.h" #include "services/ui/service.h"
diff --git a/chrome/browser/engagement/important_sites_usage_counter_unittest.cc b/chrome/browser/engagement/important_sites_usage_counter_unittest.cc index a587469..2443c89 100644 --- a/chrome/browser/engagement/important_sites_usage_counter_unittest.cc +++ b/chrome/browser/engagement/important_sites_usage_counter_unittest.cc
@@ -7,6 +7,7 @@ #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h" +#include "base/run_loop.h" #include "base/test/histogram_tester.h" #include "chrome/browser/bookmarks/bookmark_model_factory.h" #include "chrome/test/base/testing_profile.h"
diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUILD.gn index 33cc67a..a5e99251 100644 --- a/chrome/browser/extensions/BUILD.gn +++ b/chrome/browser/extensions/BUILD.gn
@@ -22,8 +22,6 @@ "../ui/toolbar/toolbar_actions_model.h", "../ui/toolbar/toolbar_actions_model_factory.cc", "../ui/toolbar/toolbar_actions_model_factory.h", - "../web_applications/update_shortcut_worker_win.cc", - "../web_applications/update_shortcut_worker_win.h", "../web_applications/web_app.cc", "../web_applications/web_app.h", "../web_applications/web_app_chromeos.cc",
diff --git a/chrome/browser/extensions/api/autotest_private/autotest_private_api.cc b/chrome/browser/extensions/api/autotest_private/autotest_private_api.cc index 24052f2f..1206ee3 100644 --- a/chrome/browser/extensions/api/autotest_private/autotest_private_api.cc +++ b/chrome/browser/extensions/api/autotest_private/autotest_private_api.cc
@@ -338,6 +338,22 @@ return RespondNow(NoArguments()); } +ExtensionFunction::ResponseAction +AutotestPrivateSetMouseReverseScrollFunction::Run() { + std::unique_ptr<api::autotest_private::SetMouseReverseScroll::Params> params( + api::autotest_private::SetMouseReverseScroll::Params::Create(*args_)); + EXTENSION_FUNCTION_VALIDATE(params.get()); + + DVLOG(1) << "AutotestPrivateSetMouseReverseScrollFunction " + << params->enabled; + +#if defined(OS_CHROMEOS) + chromeos::system::InputDeviceSettings::Get()->SetMouseReverseScroll( + params->enabled); +#endif + return RespondNow(NoArguments()); +} + // static std::string AutotestPrivateGetVisibleNotificationsFunction::ConvertToString( message_center::NotificationType type) {
diff --git a/chrome/browser/extensions/api/autotest_private/autotest_private_api.h b/chrome/browser/extensions/api/autotest_private/autotest_private_api.h index a70c709..e781e18 100644 --- a/chrome/browser/extensions/api/autotest_private/autotest_private_api.h +++ b/chrome/browser/extensions/api/autotest_private/autotest_private_api.h
@@ -159,6 +159,17 @@ ResponseAction Run() override; }; +class AutotestPrivateSetMouseReverseScrollFunction + : public UIThreadExtensionFunction { + public: + DECLARE_EXTENSION_FUNCTION("autotestPrivate.setMouseReverseScroll", + AUTOTESTPRIVATE_SETMOUSEREVERSESCROLL) + + private: + ~AutotestPrivateSetMouseReverseScrollFunction() override {} + ResponseAction Run() override; +}; + class AutotestPrivateGetVisibleNotificationsFunction : public UIThreadExtensionFunction { public:
diff --git a/chrome/browser/extensions/api/developer_private/extension_info_generator_unittest.cc b/chrome/browser/extensions/api/developer_private/extension_info_generator_unittest.cc index e8989ac..4807c309 100644 --- a/chrome/browser/extensions/api/developer_private/extension_info_generator_unittest.cc +++ b/chrome/browser/extensions/api/developer_private/extension_info_generator_unittest.cc
@@ -12,6 +12,7 @@ #include "base/json/json_writer.h" #include "base/macros.h" #include "base/memory/ptr_util.h" +#include "base/run_loop.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "build/build_config.h"
diff --git a/chrome/browser/extensions/api/extension_action/browser_action_apitest.cc b/chrome/browser/extensions/api/extension_action/browser_action_apitest.cc index da79d2e..30400437 100644 --- a/chrome/browser/extensions/api/extension_action/browser_action_apitest.cc +++ b/chrome/browser/extensions/api/extension_action/browser_action_apitest.cc
@@ -8,6 +8,7 @@ #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h" #include "base/macros.h" +#include "base/run_loop.h" #include "base/threading/thread_restrictions.h" #include "build/build_config.h" #include "chrome/browser/extensions/api/extension_action/extension_action_api.h"
diff --git a/chrome/browser/extensions/api/extension_action/browser_action_interactive_test.cc b/chrome/browser/extensions/api/extension_action/browser_action_interactive_test.cc index 15b8f360..6faba7c3 100644 --- a/chrome/browser/extensions/api/extension_action/browser_action_interactive_test.cc +++ b/chrome/browser/extensions/api/extension_action/browser_action_interactive_test.cc
@@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "base/run_loop.h" #include "base/test/test_timeouts.h" #include "build/build_config.h" #include "chrome/browser/extensions/browser_action_test_util.h"
diff --git a/chrome/browser/extensions/api/image_writer_private/write_from_url_operation_unittest.cc b/chrome/browser/extensions/api/image_writer_private/write_from_url_operation_unittest.cc index 98680a7..30d91fc 100644 --- a/chrome/browser/extensions/api/image_writer_private/write_from_url_operation_unittest.cc +++ b/chrome/browser/extensions/api/image_writer_private/write_from_url_operation_unittest.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/extensions/api/image_writer_private/write_from_url_operation.h" +#include "base/run_loop.h" #include "base/task_scheduler/post_task.h" #include "chrome/browser/extensions/api/image_writer_private/error_messages.h" #include "chrome/browser/extensions/api/image_writer_private/test_utils.h"
diff --git a/chrome/browser/extensions/api/media_galleries/media_galleries_apitest.cc b/chrome/browser/extensions/api/media_galleries/media_galleries_apitest.cc index c47f6d8..a37f3e3 100644 --- a/chrome/browser/extensions/api/media_galleries/media_galleries_apitest.cc +++ b/chrome/browser/extensions/api/media_galleries/media_galleries_apitest.cc
@@ -11,6 +11,7 @@ #include "base/json/json_writer.h" #include "base/numerics/safe_conversions.h" #include "base/path_service.h" +#include "base/run_loop.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "base/test/test_timeouts.h"
diff --git a/chrome/browser/extensions/api/networking_config_chromeos_apitest_chromeos.cc b/chrome/browser/extensions/api/networking_config_chromeos_apitest_chromeos.cc index 7c967538..56cd505 100644 --- a/chrome/browser/extensions/api/networking_config_chromeos_apitest_chromeos.cc +++ b/chrome/browser/extensions/api/networking_config_chromeos_apitest_chromeos.cc
@@ -6,6 +6,7 @@ #include "base/location.h" #include "base/macros.h" +#include "base/run_loop.h" #include "base/single_thread_task_runner.h" #include "base/threading/thread_task_runner_handle.h" #include "base/values.h"
diff --git a/chrome/browser/extensions/api/networking_private/networking_private_chromeos_apitest.cc b/chrome/browser/extensions/api/networking_private/networking_private_chromeos_apitest.cc index f7bfb003..10c2cab 100644 --- a/chrome/browser/extensions/api/networking_private/networking_private_chromeos_apitest.cc +++ b/chrome/browser/extensions/api/networking_private/networking_private_chromeos_apitest.cc
@@ -10,6 +10,7 @@ #include "base/command_line.h" #include "base/macros.h" #include "base/memory/ptr_util.h" +#include "base/run_loop.h" #include "base/strings/stringprintf.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/chromeos/login/helper.h"
diff --git a/chrome/browser/extensions/api/platform_keys/platform_keys_apitest_nss.cc b/chrome/browser/extensions/api/platform_keys/platform_keys_apitest_nss.cc index fca1d227..73d502c 100644 --- a/chrome/browser/extensions/api/platform_keys/platform_keys_apitest_nss.cc +++ b/chrome/browser/extensions/api/platform_keys/platform_keys_apitest_nss.cc
@@ -10,6 +10,7 @@ #include "base/json/json_writer.h" #include "base/macros.h" #include "base/memory/ptr_util.h" +#include "base/run_loop.h" #include "base/strings/stringprintf.h" #include "chrome/browser/chromeos/platform_keys/platform_keys_service.h" #include "chrome/browser/chromeos/platform_keys/platform_keys_service_factory.h"
diff --git a/chrome/browser/extensions/api/runtime/chrome_runtime_api_delegate_unittest.cc b/chrome/browser/extensions/api/runtime/chrome_runtime_api_delegate_unittest.cc index 8a6fcc95..30334b55 100644 --- a/chrome/browser/extensions/api/runtime/chrome_runtime_api_delegate_unittest.cc +++ b/chrome/browser/extensions/api/runtime/chrome_runtime_api_delegate_unittest.cc
@@ -12,6 +12,7 @@ #include "base/location.h" #include "base/memory/ptr_util.h" #include "base/memory/ref_counted.h" +#include "base/run_loop.h" #include "base/single_thread_task_runner.h" #include "base/stl_util.h" #include "base/test/simple_test_tick_clock.h"
diff --git a/chrome/browser/extensions/api/settings_private/prefs_util.cc b/chrome/browser/extensions/api/settings_private/prefs_util.cc index 109ef6a..53130323 100644 --- a/chrome/browser/extensions/api/settings_private/prefs_util.cc +++ b/chrome/browser/extensions/api/settings_private/prefs_util.cc
@@ -354,6 +354,8 @@ settings_private::PrefType::PREF_TYPE_NUMBER; (*s_whitelist)[::prefs::kPrimaryMouseButtonRight] = settings_private::PrefType::PREF_TYPE_BOOLEAN; + (*s_whitelist)[::prefs::kMouseReverseScroll] = + settings_private::PrefType::PREF_TYPE_BOOLEAN; (*s_whitelist)[::prefs::kMouseSensitivity] = settings_private::PrefType::PREF_TYPE_NUMBER; (*s_whitelist)[::prefs::kLanguageRemapSearchKeyTo] =
diff --git a/chrome/browser/extensions/api/settings_private/settings_private_apitest.cc b/chrome/browser/extensions/api/settings_private/settings_private_apitest.cc index 64a62c0..8ebc9f6 100644 --- a/chrome/browser/extensions/api/settings_private/settings_private_apitest.cc +++ b/chrome/browser/extensions/api/settings_private/settings_private_apitest.cc
@@ -6,6 +6,8 @@ #include "base/command_line.h" #include "base/macros.h" +#include "base/message_loop/message_loop.h" +#include "base/run_loop.h" #include "base/values.h" #include "build/build_config.h" #include "chrome/browser/extensions/api/settings_private/settings_private_delegate.h"
diff --git a/chrome/browser/extensions/api/tabs/tabs_api_unittest.cc b/chrome/browser/extensions/api/tabs/tabs_api_unittest.cc index a2f6b7b..d06d551 100644 --- a/chrome/browser/extensions/api/tabs/tabs_api_unittest.cc +++ b/chrome/browser/extensions/api/tabs/tabs_api_unittest.cc
@@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "chrome/browser/extensions/api/tabs/tabs_api.h" +#include "base/run_loop.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" -#include "chrome/browser/extensions/api/tabs/tabs_api.h" #include "chrome/browser/extensions/api/tabs/tabs_constants.h" #include "chrome/browser/extensions/extension_function_test_utils.h" #include "chrome/browser/extensions/extension_service_test_base.h"
diff --git a/chrome/browser/extensions/bookmark_app_helper_unittest.cc b/chrome/browser/extensions/bookmark_app_helper_unittest.cc index 387880a0..b8538e0 100644 --- a/chrome/browser/extensions/bookmark_app_helper_unittest.cc +++ b/chrome/browser/extensions/bookmark_app_helper_unittest.cc
@@ -5,6 +5,7 @@ #include "chrome/browser/extensions/bookmark_app_helper.h" #include "base/macros.h" +#include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/banners/app_banner_settings_helper.h" #include "chrome/browser/extensions/convert_web_app.h"
diff --git a/chrome/browser/extensions/chrome_app_icon_unittest.cc b/chrome/browser/extensions/chrome_app_icon_unittest.cc index 6e92f3e2..dbbcca9 100644 --- a/chrome/browser/extensions/chrome_app_icon_unittest.cc +++ b/chrome/browser/extensions/chrome_app_icon_unittest.cc
@@ -5,6 +5,7 @@ #include <memory> #include "base/macros.h" +#include "base/run_loop.h" #include "chrome/browser/extensions/chrome_app_icon.h" #include "chrome/browser/extensions/chrome_app_icon_delegate.h" #include "chrome/browser/extensions/chrome_app_icon_loader.h"
diff --git a/chrome/browser/extensions/extension_action_runner_browsertest.cc b/chrome/browser/extensions/extension_action_runner_browsertest.cc index e97ef48..3b1812e 100644 --- a/chrome/browser/extensions/extension_action_runner_browsertest.cc +++ b/chrome/browser/extensions/extension_action_runner_browsertest.cc
@@ -13,6 +13,7 @@ #include "base/files/file_path.h" #include "base/macros.h" #include "base/memory/ptr_util.h" +#include "base/run_loop.h" #include "base/strings/stringprintf.h" #include "chrome/browser/extensions/extension_action.h" #include "chrome/browser/extensions/extension_browsertest.h"
diff --git a/chrome/browser/extensions/extension_bindings_apitest.cc b/chrome/browser/extensions/extension_bindings_apitest.cc index 3b5e28c..be3c484 100644 --- a/chrome/browser/extensions/extension_bindings_apitest.cc +++ b/chrome/browser/extensions/extension_bindings_apitest.cc
@@ -4,6 +4,7 @@ // Contains holistic tests of the bindings infrastructure +#include "base/run_loop.h" #include "chrome/browser/extensions/api/permissions/permissions_api.h" #include "chrome/browser/extensions/extension_apitest.h" #include "chrome/browser/net/url_request_mock_util.h"
diff --git a/chrome/browser/extensions/extension_browsertest.cc b/chrome/browser/extensions/extension_browsertest.cc index 194cdc6..499fb58f 100644 --- a/chrome/browser/extensions/extension_browsertest.cc +++ b/chrome/browser/extensions/extension_browsertest.cc
@@ -14,6 +14,7 @@ #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h" #include "base/path_service.h" +#include "base/run_loop.h" #include "base/strings/string_number_conversions.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h"
diff --git a/chrome/browser/extensions/extension_message_bubble_controller.cc b/chrome/browser/extensions/extension_message_bubble_controller.cc index b22713ec..e7efdd1 100644 --- a/chrome/browser/extensions/extension_message_bubble_controller.cc +++ b/chrome/browser/extensions/extension_message_bubble_controller.cc
@@ -301,6 +301,7 @@ } void ExtensionMessageBubbleController::OnBrowserRemoved(Browser* browser) { + extension_registry_observer_.RemoveAll(); if (browser == browser_) { if (is_highlighting_) { model_->StopHighlighting();
diff --git a/chrome/browser/extensions/extension_message_bubble_controller_unittest.cc b/chrome/browser/extensions/extension_message_bubble_controller_unittest.cc index b39faf5..e858478 100644 --- a/chrome/browser/extensions/extension_message_bubble_controller_unittest.cc +++ b/chrome/browser/extensions/extension_message_bubble_controller_unittest.cc
@@ -1170,19 +1170,50 @@ ASSERT_TRUE(LoadExtensionWithAction("1", kId1, Manifest::UNPACKED)); - std::unique_ptr<TestExtensionMessageBubbleController> controller( - new TestExtensionMessageBubbleController( - new DevModeBubbleDelegate(browser()->profile()), browser())); + auto controller = std::make_unique<TestExtensionMessageBubbleController>( + new DevModeBubbleDelegate(browser()->profile()), browser()); controller->SetIsActiveBubble(); EXPECT_TRUE(controller->ShouldShow()); EXPECT_EQ(1u, model->toolbar_items().size()); controller->HighlightExtensionsIfNecessary(); - EXPECT_TRUE(ToolbarActionsModel::Get(profile())->is_highlighting()); + EXPECT_TRUE(model->is_highlighting()); set_browser(nullptr); - EXPECT_FALSE(ToolbarActionsModel::Get(profile())->is_highlighting()); + EXPECT_FALSE(model->is_highlighting()); controller.reset(); } +// Tests that when an extension -- associated with a bubble controller -- is +// uninstalling after the browser is destroyed, the controller does not access +// the associated browser object and therefore, no use-after-free occurs. +// crbug.com/756316 +TEST_F(ExtensionMessageBubbleTest, + TestUninstallExtensionAfterBrowserDestroyed) { + FeatureSwitch::ScopedOverride force_dev_mode_highlighting( + FeatureSwitch::force_dev_mode_highlighting(), true); + Init(); + ToolbarActionsModel* model = ToolbarActionsModel::Get(profile()); + base::RunLoop().RunUntilIdle(); + + ASSERT_TRUE(LoadExtensionWithAction("1", kId1, Manifest::UNPACKED)); + + auto controller = std::make_unique<TestExtensionMessageBubbleController>( + new DevModeBubbleDelegate(browser()->profile()), browser()); + controller->SetIsActiveBubble(); + EXPECT_TRUE(controller->ShouldShow()); + EXPECT_EQ(1u, model->toolbar_items().size()); + controller->HighlightExtensionsIfNecessary(); + EXPECT_TRUE(model->is_highlighting()); + set_browser(nullptr); + service_->UninstallExtension(kId1, extensions::UNINSTALL_REASON_FOR_TESTING, + base::Bind(&base::DoNothing), nullptr); + EXPECT_FALSE(model->is_highlighting()); + controller.reset(); +} + +// TODO(catmullings): Test disabling an extenion rather than uninstalling. Also, +// test a suspicious bubble controller + uninstalling, which has disabled +// extensions. + // Tests if that ShouldShow() returns false if the bubble's associated extension // has been removed. TEST_F(ExtensionMessageBubbleTest, TestShouldShowMethod) {
diff --git a/chrome/browser/extensions/extension_messages_apitest.cc b/chrome/browser/extensions/extension_messages_apitest.cc index d4ab54c..c1c7d15 100644 --- a/chrome/browser/extensions/extension_messages_apitest.cc +++ b/chrome/browser/extensions/extension_messages_apitest.cc
@@ -14,6 +14,7 @@ #include "base/json/json_writer.h" #include "base/macros.h" #include "base/path_service.h" +#include "base/run_loop.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_piece.h" #include "base/strings/stringprintf.h"
diff --git a/chrome/browser/extensions/external_provider_impl_chromeos_unittest.cc b/chrome/browser/extensions/external_provider_impl_chromeos_unittest.cc index 0a0b53fc..adc29fc 100644 --- a/chrome/browser/extensions/external_provider_impl_chromeos_unittest.cc +++ b/chrome/browser/extensions/external_provider_impl_chromeos_unittest.cc
@@ -8,6 +8,7 @@ #include "base/command_line.h" #include "base/macros.h" +#include "base/run_loop.h" #include "base/test/scoped_path_override.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h"
diff --git a/chrome/browser/extensions/service_worker_apitest.cc b/chrome/browser/extensions/service_worker_apitest.cc index 89bed42..ed2ed74 100644 --- a/chrome/browser/extensions/service_worker_apitest.cc +++ b/chrome/browser/extensions/service_worker_apitest.cc
@@ -6,6 +6,7 @@ #include "base/bind_helpers.h" #include "base/macros.h" +#include "base/run_loop.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "base/threading/thread_restrictions.h"
diff --git a/chrome/browser/extensions/tab_helper.cc b/chrome/browser/extensions/tab_helper.cc index 84e2bfe..21cbe22 100644 --- a/chrome/browser/extensions/tab_helper.cc +++ b/chrome/browser/extensions/tab_helper.cc
@@ -154,7 +154,6 @@ extension_app_(NULL), pending_web_app_action_(NONE), last_committed_nav_entry_unique_id_(0), - update_shortcut_on_load_complete_(false), script_executor_( new ScriptExecutor(web_contents, &script_execution_observers_)), extension_action_runner_(new ExtensionActionRunner(web_contents)), @@ -187,11 +186,6 @@ set_delegate(this); BookmarkManagerPrivateDragEventRouter::CreateForWebContents(web_contents); - - registrar_.Add(this, - content::NOTIFICATION_LOAD_STOP, - content::Source<NavigationController>( - &web_contents->GetController())); } void TabHelper::CreateHostedAppFromWebContents() { @@ -382,10 +376,6 @@ &TabHelper::FinishCreateBookmarkApp, weak_ptr_factory_.GetWeakPtr())); break; } - case UPDATE_SHORTCUT: { - web_app::UpdateShortcutForTabContents(web_contents()); - break; - } default: NOTREACHED(); break; @@ -620,25 +610,6 @@ new ChromeFrameMsg_GetWebApplicationInfo(main_frame->GetRoutingID())); } -void TabHelper::Observe(int type, - const content::NotificationSource& source, - const content::NotificationDetails& details) { - DCHECK_EQ(content::NOTIFICATION_LOAD_STOP, type); - const NavigationController& controller = - *content::Source<NavigationController>(source).ptr(); - DCHECK_EQ(controller.GetWebContents(), web_contents()); - - if (update_shortcut_on_load_complete_) { - update_shortcut_on_load_complete_ = false; - // Schedule a shortcut update when web application info is available if - // last committed entry is not NULL. Last committed entry could be NULL - // when an interstitial page is injected (e.g. bad https certificate, - // malware site etc). When this happens, we abort the shortcut update. - if (controller.GetLastCommittedEntry()) - GetApplicationInfo(UPDATE_SHORTCUT); - } -} - void TabHelper::SetTabId(content::RenderFrameHost* render_frame_host) { render_frame_host->Send( new ExtensionMsg_SetTabId(render_frame_host->GetRoutingID(),
diff --git a/chrome/browser/extensions/tab_helper.h b/chrome/browser/extensions/tab_helper.h index be71783..f38ad8b 100644 --- a/chrome/browser/extensions/tab_helper.h +++ b/chrome/browser/extensions/tab_helper.h
@@ -19,8 +19,6 @@ #include "chrome/common/extensions/mojom/inline_install.mojom.h" #include "chrome/common/extensions/webstore_install_result.h" #include "chrome/common/web_application_info.h" -#include "content/public/browser/notification_observer.h" -#include "content/public/browser/notification_registrar.h" #include "content/public/browser/web_contents_binding_set.h" #include "content/public/browser/web_contents_observer.h" #include "content/public/browser/web_contents_user_data.h" @@ -50,7 +48,6 @@ class TabHelper : public content::WebContentsObserver, public ExtensionFunctionDispatcher::Delegate, public ExtensionRegistryObserver, - public content::NotificationObserver, public content::WebContentsUserData<TabHelper>, public mojom::InlineInstaller { public: @@ -59,10 +56,6 @@ void CreateHostedAppFromWebContents(); bool CanCreateBookmarkApp() const; - void UpdateShortcutOnLoadComplete() { - update_shortcut_on_load_complete_ = true; - } - // ScriptExecutionObserver::Delegate virtual void AddScriptExecutionObserver(ScriptExecutionObserver* observer); virtual void RemoveScriptExecutionObserver(ScriptExecutionObserver* observer); @@ -131,7 +124,6 @@ enum WebAppAction { NONE, // No action at all. CREATE_HOSTED_APP, // Create and install a hosted app. - UPDATE_SHORTCUT // Update icon for app shortcut. }; explicit TabHelper(content::WebContents* web_contents); @@ -200,11 +192,6 @@ void OnReenableComplete(const ExtensionId& extension_id, ExtensionReenabler::ReenableResult result); - // content::NotificationObserver. - void Observe(int type, - const content::NotificationSource& source, - const content::NotificationDetails& details) override; - // Requests application info for the specified page. This is an asynchronous // request. The delegate is notified by way of OnDidGetApplicationInfo when // the data is available. @@ -238,11 +225,6 @@ // sent, for verification when the reply returns. int last_committed_nav_entry_unique_id_; - // Whether to trigger an update when the page load completes. - bool update_shortcut_on_load_complete_; - - content::NotificationRegistrar registrar_; - std::unique_ptr<ScriptExecutor> script_executor_; std::unique_ptr<ExtensionActionRunner> extension_action_runner_;
diff --git a/chrome/browser/extensions/tab_helper_unittest.cc b/chrome/browser/extensions/tab_helper_unittest.cc index 6b48dc8..6ebc62e 100644 --- a/chrome/browser/extensions/tab_helper_unittest.cc +++ b/chrome/browser/extensions/tab_helper_unittest.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/extensions/tab_helper.h" +#include "base/run_loop.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_service_test_with_install.h" #include "chrome/browser/profiles/profile.h"
diff --git a/chrome/browser/extensions/webstore_inline_installer_browsertest.cc b/chrome/browser/extensions/webstore_inline_installer_browsertest.cc index 974f106..c7d566b7 100644 --- a/chrome/browser/extensions/webstore_inline_installer_browsertest.cc +++ b/chrome/browser/extensions/webstore_inline_installer_browsertest.cc
@@ -7,6 +7,7 @@ #include "base/json/json_reader.h" #include "base/macros.h" #include "base/memory/ptr_util.h" +#include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" #include "base/values.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
diff --git a/chrome/browser/first_run/first_run_browsertest.cc b/chrome/browser/first_run/first_run_browsertest.cc index ab22236..84263cc2 100644 --- a/chrome/browser/first_run/first_run_browsertest.cc +++ b/chrome/browser/first_run/first_run_browsertest.cc
@@ -9,6 +9,7 @@ #include "base/files/file_path.h" #include "base/macros.h" #include "base/memory/ref_counted.h" +#include "base/run_loop.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "build/build_config.h"
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index 909eea0..8eb28792 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -1190,6 +1190,10 @@ const char kSoftwareRasterizerDescription[] = "Fall back to a 3D software rasterizer when the GPU cannot be used."; +const char kSoundContentSettingName[] = "Sound content setting"; +const char kSoundContentSettingDescription[] = + "Enable site-wide muting in content settings and tab strip context menu."; + const char kSpeculativePrefetchName[] = "Speculative Prefetch"; const char kSpeculativePrefetchDescription[] = R"*("Speculative Prefetch" fetches likely resources early to improve )*"
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 75473acb..c7b9b27b 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -729,6 +729,9 @@ extern const char kSoftwareRasterizerName[]; extern const char kSoftwareRasterizerDescription[]; +extern const char kSoundContentSettingName[]; +extern const char kSoundContentSettingDescription[]; + extern const char kSpeculativePrefetchName[]; extern const char kSpeculativePrefetchDescription[];
diff --git a/chrome/browser/lifetime/browser_close_manager_browsertest.cc b/chrome/browser/lifetime/browser_close_manager_browsertest.cc index e13ed7a..f303754 100644 --- a/chrome/browser/lifetime/browser_close_manager_browsertest.cc +++ b/chrome/browser/lifetime/browser_close_manager_browsertest.cc
@@ -10,6 +10,7 @@ #include "base/command_line.h" #include "base/files/scoped_temp_dir.h" #include "base/macros.h" +#include "base/run_loop.h" #include "base/threading/thread_restrictions.h" #include "build/build_config.h" #include "chrome/browser/background/background_mode_manager.h"
diff --git a/chrome/browser/media/router/discovery/mdns/cast_media_sink_service_unittest.cc b/chrome/browser/media/router/discovery/mdns/cast_media_sink_service_unittest.cc index 3726143a..0bd9258 100644 --- a/chrome/browser/media/router/discovery/mdns/cast_media_sink_service_unittest.cc +++ b/chrome/browser/media/router/discovery/mdns/cast_media_sink_service_unittest.cc
@@ -3,6 +3,7 @@ // found in the LICENSE file. #include "chrome/browser/media/router/discovery/mdns/cast_media_sink_service.h" +#include "base/run_loop.h" #include "base/strings/stringprintf.h" #include "base/test/mock_callback.h" #include "base/timer/mock_timer.h"
diff --git a/chrome/browser/media/router/mojo/media_router_desktop_unittest.cc b/chrome/browser/media/router/mojo/media_router_desktop_unittest.cc index 4c5bdd1..5e9048a5 100644 --- a/chrome/browser/media/router/mojo/media_router_desktop_unittest.cc +++ b/chrome/browser/media/router/mojo/media_router_desktop_unittest.cc
@@ -11,6 +11,7 @@ #include "chrome/browser/media/router/mojo/media_router_desktop.h" +#include "base/run_loop.h" #include "build/build_config.h" #include "chrome/browser/media/router/event_page_request_manager.h" #include "chrome/browser/media/router/event_page_request_manager_factory.h"
diff --git a/chrome/browser/media/webrtc/media_stream_devices_controller.cc b/chrome/browser/media/webrtc/media_stream_devices_controller.cc index 5534f9c2..d39da60 100644 --- a/chrome/browser/media/webrtc/media_stream_devices_controller.cc +++ b/chrome/browser/media/webrtc/media_stream_devices_controller.cc
@@ -255,7 +255,7 @@ PermissionUmaUtil::RecordPermissionPromptShown( request->GetPermissionRequestType(), PermissionUtil::GetGestureType(user_gesture)); - if (PermissionDialogDelegate::ShouldShowDialog(user_gesture)) { + if (PermissionDialogDelegate::ShouldShowDialog()) { PermissionDialogDelegate::CreateMediaStreamDialog( web_contents, user_gesture, std::move(request)); } else {
diff --git a/chrome/browser/metrics/chrome_metrics_services_manager_client.cc b/chrome/browser/metrics/chrome_metrics_services_manager_client.cc index dfa197f..b39e352 100644 --- a/chrome/browser/metrics/chrome_metrics_services_manager_client.cc +++ b/chrome/browser/metrics/chrome_metrics_services_manager_client.cc
@@ -38,6 +38,7 @@ #include "base/win/registry.h" #include "chrome/common/chrome_constants.h" #include "chrome/install_static/install_util.h" +#include "components/crash/content/app/crash_export_thunks.h" #include "components/crash/content/app/crashpad.h" #endif // OS_WIN @@ -47,17 +48,6 @@ namespace { -#if defined(OS_WIN) -// Type for the function pointer to enable and disable crash reporting on -// windows. Needed because the function is loaded from chrome_elf. -typedef void (*SetUploadConsentPointer)(bool); - -// The name of the function used to set the uploads enabled state in -// components/crash/content/app/crashpad.cc. This is used to call the function -// exported by the chrome_elf dll. -const char kCrashpadUpdateConsentFunctionName[] = "SetUploadConsentImpl"; -#endif // OS_WIN - // Name of the variations param that defines the sampling rate. const char kRateParamName[] = "sampling_rate_per_mille"; @@ -272,19 +262,10 @@ install_static::SetCollectStatsInSample(IsClientInSample()); // Next, get Crashpad to pick up the sampling state for this session. - - // The crash reporting is handled by chrome_elf.dll. - HMODULE elf_module = GetModuleHandle(chrome::kChromeElfDllName); - static SetUploadConsentPointer set_upload_consent = - reinterpret_cast<SetUploadConsentPointer>( - GetProcAddress(elf_module, kCrashpadUpdateConsentFunctionName)); - - if (set_upload_consent) { - // Crashpad will use the kRegUsageStatsInSample registry value to apply - // sampling correctly, but may_record already reflects the sampling state. - // This isn't a problem though, since they will be consistent. - set_upload_consent(may_record && may_upload); - } + // Crashpad will use the kRegUsageStatsInSample registry value to apply + // sampling correctly, but may_record already reflects the sampling state. + // This isn't a problem though, since they will be consistent. + SetUploadConsentImpl(may_record && may_upload); } #endif // defined(OS_WIN)
diff --git a/chrome/browser/metrics/desktop_session_duration/audible_contents_tracker_browsertest.cc b/chrome/browser/metrics/desktop_session_duration/audible_contents_tracker_browsertest.cc index ad59508..1f0854e 100644 --- a/chrome/browser/metrics/desktop_session_duration/audible_contents_tracker_browsertest.cc +++ b/chrome/browser/metrics/desktop_session_duration/audible_contents_tracker_browsertest.cc
@@ -5,6 +5,7 @@ #include "chrome/browser/metrics/desktop_session_duration/audible_contents_tracker.h" #include "base/path_service.h" +#include "base/run_loop.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" #include "content/public/test/browser_test_base.h"
diff --git a/chrome/browser/metrics/process_memory_metrics_emitter_browsertest.cc b/chrome/browser/metrics/process_memory_metrics_emitter_browsertest.cc index 20bc3ac..5fcd59e 100644 --- a/chrome/browser/metrics/process_memory_metrics_emitter_browsertest.cc +++ b/chrome/browser/metrics/process_memory_metrics_emitter_browsertest.cc
@@ -6,6 +6,7 @@ #include "base/memory/ref_counted.h" #include "base/message_loop/message_loop.h" +#include "base/run_loop.h" #include "base/test/histogram_tester.h" #include "base/test/trace_event_analyzer.h" #include "base/trace_event/memory_dump_manager.h"
diff --git a/chrome/browser/metrics/ukm_browsertest.cc b/chrome/browser/metrics/ukm_browsertest.cc index fb12f5f..d224665 100644 --- a/chrome/browser/metrics/ukm_browsertest.cc +++ b/chrome/browser/metrics/ukm_browsertest.cc
@@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "base/run_loop.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/metrics/chrome_metrics_service_accessor.h" #include "chrome/browser/profiles/profile_manager.h"
diff --git a/chrome/browser/net/errorpage_browsertest.cc b/chrome/browser/net/errorpage_browsertest.cc index 2d87ee07..89b8643d 100644 --- a/chrome/browser/net/errorpage_browsertest.cc +++ b/chrome/browser/net/errorpage_browsertest.cc
@@ -14,6 +14,7 @@ #include "base/memory/ptr_util.h" #include "base/memory/weak_ptr.h" #include "base/path_service.h" +#include "base/run_loop.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "base/synchronization/lock.h"
diff --git a/chrome/browser/net/spdyproxy/data_reduction_proxy_settings_android.cc b/chrome/browser/net/spdyproxy/data_reduction_proxy_settings_android.cc index 1c5761b..0459dbcb 100644 --- a/chrome/browser/net/spdyproxy/data_reduction_proxy_settings_android.cc +++ b/chrome/browser/net/spdyproxy/data_reduction_proxy_settings_android.cc
@@ -23,6 +23,7 @@ #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h" #include "components/data_reduction_proxy/core/browser/data_usage_store.h" #include "components/data_reduction_proxy/core/common/data_reduction_proxy_event_store.h" +#include "components/data_reduction_proxy/core/common/data_reduction_proxy_features.h" #include "components/data_reduction_proxy/core/common/data_reduction_proxy_headers.h" #include "components/data_reduction_proxy/core/common/data_reduction_proxy_params.h" #include "components/data_reduction_proxy/core/common/data_reduction_proxy_pref_names.h" @@ -163,8 +164,10 @@ jboolean DataReductionProxySettingsAndroid::AreLoFiPreviewsEnabled( JNIEnv* env, const JavaParamRef<jobject>& obj) { - return data_reduction_proxy::params::IsIncludedInLitePageFieldTrial() || - (data_reduction_proxy::params::IsLoFiOnViaFlags() && + return base::FeatureList::IsEnabled( + data_reduction_proxy::features:: + kDataReductionProxyDecidesTransform) || + (data_reduction_proxy::params::IsLoFiOnViaFlags() && data_reduction_proxy::params::AreLitePagesEnabledViaFlags()); }
diff --git a/chrome/browser/notifications/login_state_notification_blocker_chromeos_browsertest.cc b/chrome/browser/notifications/login_state_notification_blocker_chromeos_browsertest.cc index 73a66e6..5bf5931 100644 --- a/chrome/browser/notifications/login_state_notification_blocker_chromeos_browsertest.cc +++ b/chrome/browser/notifications/login_state_notification_blocker_chromeos_browsertest.cc
@@ -5,6 +5,7 @@ #include "ash/system/system_notifier.h" #include "base/command_line.h" #include "base/macros.h" +#include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/chromeos/login/login_manager_test.h" #include "chrome/browser/chromeos/login/startup_utils.h"
diff --git a/chrome/browser/ntp_tiles/ntp_tiles_browsertest.cc b/chrome/browser/ntp_tiles/ntp_tiles_browsertest.cc index 8e741a4..5441c64d 100644 --- a/chrome/browser/ntp_tiles/ntp_tiles_browsertest.cc +++ b/chrome/browser/ntp_tiles/ntp_tiles_browsertest.cc
@@ -5,6 +5,7 @@ #include <map> #include <string> +#include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" #include "build/build_config.h" #include "chrome/browser/ntp_tiles/chrome_most_visited_sites_factory.h"
diff --git a/chrome/browser/pdf/pdf_extension_test.cc b/chrome/browser/pdf/pdf_extension_test.cc index 4f436d504..3927401 100644 --- a/chrome/browser/pdf/pdf_extension_test.cc +++ b/chrome/browser/pdf/pdf_extension_test.cc
@@ -15,6 +15,7 @@ #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/path_service.h" +#include "base/run_loop.h" #include "base/strings/pattern.h" #include "base/strings/utf_string_conversions.h" #include "base/test/test_timeouts.h"
diff --git a/chrome/browser/permissions/permission_dialog_delegate.cc b/chrome/browser/permissions/permission_dialog_delegate.cc index 603756e..85655c4 100644 --- a/chrome/browser/permissions/permission_dialog_delegate.cc +++ b/chrome/browser/permissions/permission_dialog_delegate.cc
@@ -20,7 +20,6 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/common/chrome_features.h" #include "chrome/grit/generated_resources.h" -#include "components/variations/variations_associated_data.h" #include "content/public/browser/navigation_handle.h" #include "content/public/browser/web_contents.h" #include "jni/PermissionDialogController_jni.h" @@ -31,13 +30,6 @@ using base::android::ConvertUTF16ToJavaString; -namespace { - -// Key for querying variations for whether a modal should require a gesture. -const char kModalParamsUserGestureKey[] = "require_gesture"; - -} - // static void PermissionDialogDelegate::Create( content::WebContents* web_contents, @@ -106,17 +98,8 @@ } // static -bool PermissionDialogDelegate::ShouldShowDialog(bool has_user_gesture) { - if (!base::FeatureList::IsEnabled(features::kModalPermissionPrompts)) - return false; - - // Only use modals when the prompt is triggered by a user gesture, unless the - // kModalParamsUserGestureKey is set to false. - std::string require_gesture = variations::GetVariationParamValueByFeature( - features::kModalPermissionPrompts, kModalParamsUserGestureKey); - if (require_gesture == "false") - return true; - return has_user_gesture; +bool PermissionDialogDelegate::ShouldShowDialog() { + return base::FeatureList::IsEnabled(features::kModalPermissionPrompts); } void PermissionDialogDelegate::CreateJavaDelegate(JNIEnv* env) {
diff --git a/chrome/browser/permissions/permission_dialog_delegate.h b/chrome/browser/permissions/permission_dialog_delegate.h index e68a238..efe4aef6 100644 --- a/chrome/browser/permissions/permission_dialog_delegate.h +++ b/chrome/browser/permissions/permission_dialog_delegate.h
@@ -62,7 +62,7 @@ // Returns true if we should show the user a modal permission prompt rather // than an infobar. - static bool ShouldShowDialog(bool has_user_gesture); + static bool ShouldShowDialog(); // JNI methods. void Accept(JNIEnv* env, const JavaParamRef<jobject>& obj, jboolean persist);
diff --git a/chrome/browser/permissions/permission_manager.cc b/chrome/browser/permissions/permission_manager.cc index 19c6834..aca56ad 100644 --- a/chrome/browser/permissions/permission_manager.cc +++ b/chrome/browser/permissions/permission_manager.cc
@@ -10,7 +10,6 @@ #include "base/callback.h" #include "base/memory/ptr_util.h" #include "build/build_config.h" -#include "chrome/browser/accessibility/accessibility_permission_context.h" #include "chrome/browser/background_sync/background_sync_permission_context.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h" #include "chrome/browser/generic_sensor/sensor_permission_context.h" @@ -108,8 +107,6 @@ return CONTENT_SETTINGS_TYPE_PLUGINS; case PermissionType::SENSORS: return CONTENT_SETTINGS_TYPE_SENSORS; - case PermissionType::ACCESSIBILITY_EVENTS: - return CONTENT_SETTINGS_TYPE_ACCESSIBILITY_EVENTS; case PermissionType::NUM: // This will hit the NOTREACHED below. break; @@ -292,8 +289,6 @@ #endif permission_contexts_[CONTENT_SETTINGS_TYPE_SENSORS] = base::MakeUnique<SensorPermissionContext>(profile); - permission_contexts_[CONTENT_SETTINGS_TYPE_ACCESSIBILITY_EVENTS] = - base::MakeUnique<AccessibilityPermissionContext>(profile); } PermissionManager::~PermissionManager() {
diff --git a/chrome/browser/permissions/permission_prompt_android.cc b/chrome/browser/permissions/permission_prompt_android.cc index ff26d15..232c84d 100644 --- a/chrome/browser/permissions/permission_prompt_android.cc +++ b/chrome/browser/permissions/permission_prompt_android.cc
@@ -26,12 +26,7 @@ weak_factory_(this) { DCHECK(web_contents); - bool has_gesture = true; - for (const PermissionRequest* request : delegate_->Requests()) { - has_gesture &= - request->GetGestureType() == PermissionRequestGestureType::GESTURE; - } - if (PermissionDialogDelegate::ShouldShowDialog(has_gesture)) { + if (PermissionDialogDelegate::ShouldShowDialog()) { PermissionDialogDelegate::Create(web_contents_, this); return; }
diff --git a/chrome/browser/permissions/permission_queue_controller.cc b/chrome/browser/permissions/permission_queue_controller.cc index 8df4af4f..8e8b770 100644 --- a/chrome/browser/permissions/permission_queue_controller.cc +++ b/chrome/browser/permissions/permission_queue_controller.cc
@@ -76,7 +76,6 @@ const PermissionRequestID& id() const { return id_; } const GURL& requesting_frame() const { return requesting_frame_; } - bool has_gesture() const { return user_gesture_; } bool has_infobar() const { return !!infobar_; } bool has_dialog() const { return has_dialog_; } infobars::InfoBar* infobar() { return infobar_; } @@ -378,8 +377,7 @@ if (ArePermissionRequestsForSameTab(i->id(), id) && !i->has_infobar()) { // When using modal permission prompts, Java controls the display queue, // so infobar notifications are not relevant. - bool show_dialog = - PermissionDialogDelegate::ShouldShowDialog(i->has_gesture()); + bool show_dialog = PermissionDialogDelegate::ShouldShowDialog(); if (!show_dialog) RegisterForInfoBarNotifications(infobar_service);
diff --git a/chrome/browser/permissions/permission_request.h b/chrome/browser/permissions/permission_request.h index e02392f..ffaeb50 100644 --- a/chrome/browser/permissions/permission_request.h +++ b/chrome/browser/permissions/permission_request.h
@@ -37,7 +37,6 @@ PERMISSION_FLASH, PERMISSION_MEDIASTREAM_MIC, PERMISSION_MEDIASTREAM_CAMERA, - PERMISSION_ACCESSIBILITY_EVENTS, // NUM must be the last value in the enum. NUM };
diff --git a/chrome/browser/permissions/permission_request_impl.cc b/chrome/browser/permissions/permission_request_impl.cc index fe4efccd..a2588b3 100644 --- a/chrome/browser/permissions/permission_request_impl.cc +++ b/chrome/browser/permissions/permission_request_impl.cc
@@ -68,8 +68,6 @@ return IDR_ANDROID_INFOBAR_MEDIA_STREAM_MIC; case CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA: return IDR_ANDROID_INFOBAR_MEDIA_STREAM_CAMERA; - case CONTENT_SETTINGS_TYPE_ACCESSIBILITY_EVENTS: - return IDR_ANDROID_INFOBAR_ACCESSIBILITY_EVENTS; default: NOTREACHED(); return IDR_ANDROID_INFOBAR_WARNING; @@ -94,8 +92,6 @@ return vector_icons::kMicrophoneIcon; case CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA: return vector_icons::kVideocamIcon; - case CONTENT_SETTINGS_TYPE_ACCESSIBILITY_EVENTS: - return vector_icons::kAccessibilityIcon; default: NOTREACHED(); return kExtensionIcon; @@ -126,9 +122,6 @@ case CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA: message_id = IDS_MEDIA_CAPTURE_VIDEO_ONLY; break; - case CONTENT_SETTINGS_TYPE_ACCESSIBILITY_EVENTS: - message_id = IDS_ACCESSIBILITY_EVENTS_INFOBAR_QUESTION; - break; default: NOTREACHED(); return base::string16(); @@ -167,9 +160,6 @@ case CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA: message_id = IDS_MEDIA_CAPTURE_VIDEO_ONLY_PERMISSION_FRAGMENT; break; - case CONTENT_SETTINGS_TYPE_ACCESSIBILITY_EVENTS: - message_id = IDS_ACCESSIBILITY_EVENTS_PERMISSION_FRAGMENT; - break; default: NOTREACHED(); return base::string16();
diff --git a/chrome/browser/permissions/permission_util.cc b/chrome/browser/permissions/permission_util.cc index a128c5c..86ffa28 100644 --- a/chrome/browser/permissions/permission_util.cc +++ b/chrome/browser/permissions/permission_util.cc
@@ -45,8 +45,6 @@ return "Flash"; case CONTENT_SETTINGS_TYPE_SENSORS: return "Sensors"; - case CONTENT_SETTINGS_TYPE_ACCESSIBILITY_EVENTS: - return "AccessibilityEvents"; default: break; } @@ -79,8 +77,6 @@ return "FLASH"; case CONTENT_SETTINGS_TYPE_SENSORS: return "SENSORS"; - case CONTENT_SETTINGS_TYPE_ACCESSIBILITY_EVENTS: - return "ACCESSIBILITY_EVENTS"; default: break; } @@ -106,8 +102,6 @@ return PermissionRequestType::PERMISSION_MEDIASTREAM_MIC; case CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA: return PermissionRequestType::PERMISSION_MEDIASTREAM_CAMERA; - case CONTENT_SETTINGS_TYPE_ACCESSIBILITY_EVENTS: - return PermissionRequestType::PERMISSION_ACCESSIBILITY_EVENTS; default: NOTREACHED(); return PermissionRequestType::UNKNOWN; @@ -147,8 +141,6 @@ #endif } else if (type == CONTENT_SETTINGS_TYPE_SENSORS) { *out = PermissionType::SENSORS; - } else if (type == CONTENT_SETTINGS_TYPE_ACCESSIBILITY_EVENTS) { - *out = PermissionType::ACCESSIBILITY_EVENTS; } else { return false; } @@ -177,7 +169,6 @@ case CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER: #endif case CONTENT_SETTINGS_TYPE_SENSORS: - case CONTENT_SETTINGS_TYPE_ACCESSIBILITY_EVENTS: return true; default: return false;
diff --git a/chrome/browser/plugins/pdf_iframe_navigation_throttle_unittest.cc b/chrome/browser/plugins/pdf_iframe_navigation_throttle_unittest.cc index d97f866..2494604 100644 --- a/chrome/browser/plugins/pdf_iframe_navigation_throttle_unittest.cc +++ b/chrome/browser/plugins/pdf_iframe_navigation_throttle_unittest.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/plugins/pdf_iframe_navigation_throttle.h" +#include "base/run_loop.h" #include "chrome/test/base/chrome_render_view_host_test_harness.h" #include "chrome/test/base/testing_profile.h" #include "content/public/browser/navigation_handle.h"
diff --git a/chrome/browser/predictors/resource_prefetch_predictor_browsertest.cc b/chrome/browser/predictors/resource_prefetch_predictor_browsertest.cc index 4ee5055c..f4c83d1 100644 --- a/chrome/browser/predictors/resource_prefetch_predictor_browsertest.cc +++ b/chrome/browser/predictors/resource_prefetch_predictor_browsertest.cc
@@ -8,6 +8,7 @@ #include "base/command_line.h" #include "base/memory/ptr_util.h" +#include "base/run_loop.h" #include "base/strings/string_util.h" #include "base/test/histogram_tester.h" #include "chrome/browser/browsing_data/browsing_data_helper.h"
diff --git a/chrome/browser/predictors/resource_prefetcher_unittest.cc b/chrome/browser/predictors/resource_prefetcher_unittest.cc index 9694aca..74a5c393 100644 --- a/chrome/browser/predictors/resource_prefetcher_unittest.cc +++ b/chrome/browser/predictors/resource_prefetcher_unittest.cc
@@ -13,6 +13,7 @@ #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/message_loop/message_loop.h" +#include "base/run_loop.h" #include "base/test/histogram_tester.h" #include "chrome/browser/predictors/loading_test_util.h" #include "chrome/test/base/testing_profile.h"
diff --git a/chrome/browser/prefs/synced_pref_change_registrar_browsertest.cc b/chrome/browser/prefs/synced_pref_change_registrar_browsertest.cc index 2cb8618..6980c56d 100644 --- a/chrome/browser/prefs/synced_pref_change_registrar_browsertest.cc +++ b/chrome/browser/prefs/synced_pref_change_registrar_browsertest.cc
@@ -8,6 +8,7 @@ #include "base/json/json_string_value_serializer.h" #include "base/memory/ptr_util.h" #include "base/message_loop/message_loop.h" +#include "base/run_loop.h" #include "base/time/time.h" #include "base/values.h" #include "chrome/browser/prefs/pref_service_syncable_util.h"
diff --git a/chrome/browser/prerender/prerender_nostate_prefetch_browsertest.cc b/chrome/browser/prerender/prerender_nostate_prefetch_browsertest.cc index 5cb5d6c..f287e72d 100644 --- a/chrome/browser/prerender/prerender_nostate_prefetch_browsertest.cc +++ b/chrome/browser/prerender/prerender_nostate_prefetch_browsertest.cc
@@ -5,6 +5,7 @@ #include "base/command_line.h" #include "base/memory/ptr_util.h" #include "base/memory/ref_counted.h" +#include "base/run_loop.h" #include "base/stl_util.h" #include "base/strings/string16.h" #include "base/strings/string_split.h"
diff --git a/chrome/browser/previews/previews_service.cc b/chrome/browser/previews/previews_service.cc index d1037404..4f322b1 100644 --- a/chrome/browser/previews/previews_service.cc +++ b/chrome/browser/previews/previews_service.cc
@@ -31,13 +31,11 @@ case previews::PreviewsType::LOFI: return server_previews_enabled || previews::params::IsClientLoFiEnabled() || - data_reduction_proxy::params::IsLoFiOnViaFlags() || - data_reduction_proxy::params::IsIncludedInLoFiEnabledFieldTrial(); + data_reduction_proxy::params::IsLoFiOnViaFlags(); case previews::PreviewsType::LITE_PAGE: return server_previews_enabled || (data_reduction_proxy::params::IsLoFiOnViaFlags() && - data_reduction_proxy::params::AreLitePagesEnabledViaFlags()) || - data_reduction_proxy::params::IsIncludedInLitePageFieldTrial(); + data_reduction_proxy::params::AreLitePagesEnabledViaFlags()); case previews::PreviewsType::NONE: case previews::PreviewsType::LAST: break;
diff --git a/chrome/browser/previews/previews_service_unittest.cc b/chrome/browser/previews/previews_service_unittest.cc index ff70394..38861ea6 100644 --- a/chrome/browser/previews/previews_service_unittest.cc +++ b/chrome/browser/previews/previews_service_unittest.cc
@@ -121,42 +121,17 @@ EXPECT_FALSE(io_data()->IsPreviewEnabled(previews::PreviewsType::LOFI)); } -TEST_F(PreviewsServiceTest, TestServerLoFiFieldTrialEnabled) { - base::FieldTrialList::CreateFieldTrial("DataCompressionProxyLoFi", "Enabled"); - EXPECT_TRUE(io_data()->IsPreviewEnabled(previews::PreviewsType::LOFI)); -} - -TEST_F(PreviewsServiceTest, TestServerLoFiFieldTrialDisabled) { - base::FieldTrialList::CreateFieldTrial("DataCompressionProxyLoFi", - "Disabled"); - EXPECT_FALSE(io_data()->IsPreviewEnabled(previews::PreviewsType::LOFI)); -} - -TEST_F(PreviewsServiceTest, TestServerLoFiFieldTrialNotSet) { - EXPECT_FALSE(io_data()->IsPreviewEnabled(previews::PreviewsType::LOFI)); -} - -TEST_F(PreviewsServiceTest, TestLitePageFieldTrialEnabledPreview) { +TEST_F(PreviewsServiceTest, TestServerLoFiNotEnabled) { base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitAndDisableFeature( data_reduction_proxy::features::kDataReductionProxyDecidesTransform); - base::FieldTrialList::CreateFieldTrial("DataCompressionProxyLoFi", - "Enabled_Preview"); - EXPECT_TRUE(io_data()->IsPreviewEnabled(previews::PreviewsType::LITE_PAGE)); + EXPECT_FALSE(io_data()->IsPreviewEnabled(previews::PreviewsType::LOFI)); } -TEST_F(PreviewsServiceTest, TestLitePageFieldTrialEnabled) { - base::FieldTrialList::CreateFieldTrial("DataCompressionProxyLoFi", "Enabled"); - EXPECT_FALSE(io_data()->IsPreviewEnabled(previews::PreviewsType::LITE_PAGE)); -} - -TEST_F(PreviewsServiceTest, TestLitePageFieldTrialDisabled) { - base::FieldTrialList::CreateFieldTrial("DataCompressionProxyLoFi", - "Disabled"); - EXPECT_FALSE(io_data()->IsPreviewEnabled(previews::PreviewsType::LITE_PAGE)); -} - -TEST_F(PreviewsServiceTest, TestLitePageFieldTrialNotSet) { +TEST_F(PreviewsServiceTest, TestLitePageNotEnabled) { + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitAndDisableFeature( + data_reduction_proxy::features::kDataReductionProxyDecidesTransform); EXPECT_FALSE(io_data()->IsPreviewEnabled(previews::PreviewsType::LITE_PAGE)); } @@ -164,7 +139,7 @@ base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitAndEnableFeature( data_reduction_proxy::features::kDataReductionProxyDecidesTransform); - EXPECT_TRUE(io_data()->IsPreviewEnabled(previews::PreviewsType::LITE_PAGE)); + EXPECT_TRUE(io_data()->IsPreviewEnabled(previews::PreviewsType::LOFI)); } TEST_F(PreviewsServiceTest, TestLitePageProxyDecidesTransform) {
diff --git a/chrome/browser/printing/print_browsertest.cc b/chrome/browser/printing/print_browsertest.cc index 33f98daf..036681e 100644 --- a/chrome/browser/printing/print_browsertest.cc +++ b/chrome/browser/printing/print_browsertest.cc
@@ -3,6 +3,7 @@ // found in the LICENSE file. #include "base/auto_reset.h" +#include "base/run_loop.h" #include "chrome/browser/printing/print_view_manager_common.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h"
diff --git a/chrome/browser/profiles/host_zoom_map_browsertest.cc b/chrome/browser/profiles/host_zoom_map_browsertest.cc index 80c51cf..d0077fc 100644 --- a/chrome/browser/profiles/host_zoom_map_browsertest.cc +++ b/chrome/browser/profiles/host_zoom_map_browsertest.cc
@@ -16,6 +16,7 @@ #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/path_service.h" +#include "base/run_loop.h" #include "base/strings/stringprintf.h" #include "base/values.h" #include "chrome/browser/profiles/profile.h"
diff --git a/chrome/browser/profiles/profile_browsertest.cc b/chrome/browser/profiles/profile_browsertest.cc index 1c43353c..f0a2cd31 100644 --- a/chrome/browser/profiles/profile_browsertest.cc +++ b/chrome/browser/profiles/profile_browsertest.cc
@@ -16,6 +16,7 @@ #include "base/macros.h" #include "base/memory/ptr_util.h" #include "base/memory/ref_counted.h" +#include "base/run_loop.h" #include "base/sequenced_task_runner.h" #include "base/synchronization/waitable_event.h" #include "base/task_scheduler/task_scheduler.h"
diff --git a/chrome/browser/resource_coordinator/tab_manager_browsertest.cc b/chrome/browser/resource_coordinator/tab_manager_browsertest.cc index 94acb28..ecad2336 100644 --- a/chrome/browser/resource_coordinator/tab_manager_browsertest.cc +++ b/chrome/browser/resource_coordinator/tab_manager_browsertest.cc
@@ -5,6 +5,7 @@ #include "base/base_switches.h" #include "base/command_line.h" #include "base/memory/memory_pressure_listener.h" +#include "base/run_loop.h" #include "base/test/histogram_tester.h" #include "base/test/simple_test_tick_clock.h" #include "build/build_config.h"
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 d455e78..9ae4432 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_mr.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_mr.xtb
@@ -845,7 +845,7 @@ <translation id="8883850400338911892">8 बिंदूचा url बनवला</translation> <translation id="8896347895970027998">ChromeVox सक्रिय किंवा निष्क्रिय टॉगल करा.</translation> <translation id="8898516272131543774">विरामचिन्ह प्रतिध्वनी आवर्तन</translation> -<translation id="8900148057318340779">प्रत्यय की</translation> +<translation id="8900148057318340779">उपसर्ग की</translation> <translation id="8908714597367957477">colhdr</translation> <translation id="8931936695772494138">रिक्त शीर्षलेख</translation> <translation id="8937112856099038376">intlnk</translation>
diff --git a/chrome/browser/resources/chromeos/login/oobe_dialog_parameters.css b/chrome/browser/resources/chromeos/login/oobe_dialog_parameters.css index fb3eacd..4fed2af 100644 --- a/chrome/browser/resources/chromeos/login/oobe_dialog_parameters.css +++ b/chrome/browser/resources/chromeos/login/oobe_dialog_parameters.css
@@ -29,6 +29,7 @@ oobe-dialog .subtitle { color: rgba(0, 0, 0, 0.87); font-size: 13px; + line-height: 18px; margin: 23px 0 0 0; /* = 40 - 4 (adjustment) - line-height */ }
diff --git a/chrome/browser/resources/chromeos/login/oobe_reset.css b/chrome/browser/resources/chromeos/login/oobe_reset.css index 964db942..35fc30c 100644 --- a/chrome/browser/resources/chromeos/login/oobe_reset.css +++ b/chrome/browser/resources/chromeos/login/oobe_reset.css
@@ -27,10 +27,6 @@ display: inline; } -.subtitle { - line-height: 20px; -} - #tpmFirmwareUpdate { -webkit-margin-start: 20px; color: rgba(0, 0, 0, 0.54);
diff --git a/chrome/browser/resources/chromeos/login/oobe_update.css b/chrome/browser/resources/chromeos/login/oobe_update.css index 138b96a94..3bd705c 100644 --- a/chrome/browser/resources/chromeos/login/oobe_update.css +++ b/chrome/browser/resources/chromeos/login/oobe_update.css
@@ -8,10 +8,6 @@ line-height: 18px; } -:host .subtitle { - line-height: 18px; -} - #estimated-time-left, #progress-message { padding-top: 31px; /* = 44 - font size */
diff --git a/chrome/browser/resources/md_bookmarks/toolbar.js b/chrome/browser/resources/md_bookmarks/toolbar.js index 0155ca9..5923a896 100644 --- a/chrome/browser/resources/md_bookmarks/toolbar.js +++ b/chrome/browser/resources/md_bookmarks/toolbar.js
@@ -178,7 +178,7 @@ * @private */ computeCanSortFolder_: function() { - return this.canChangeList_ && this.selectedFolderChildren_ > 0; + return this.canChangeList_ && this.selectedFolderChildren_ > 1; }, /**
diff --git a/chrome/browser/resources/md_extensions/item.html b/chrome/browser/resources/md_extensions/item.html index 9ceebe14..cbe35e8 100644 --- a/chrome/browser/resources/md_extensions/item.html +++ b/chrome/browser/resources/md_extensions/item.html
@@ -65,13 +65,12 @@ } #name-and-version { - line-height: 15px; + @apply(--cr-primary-text); margin-bottom: 4px; } #name { -webkit-margin-end: 8px; - color: #333; } #description, @@ -85,15 +84,17 @@ #extension-id, #inspect-views, #button-strip { + /* TODO(dschuyler): use --cr-secondary-text. */ color: var(--paper-grey-600); + font-weight: 400; } #button-strip { -webkit-padding-end: 4px; - -webkit-padding-start: 20px; - border-top: 1px solid var(--paper-grey-400); + -webkit-padding-start: var(--cr-section-padding); + border-top: var(--cr-separator-line); box-sizing: border-box; - height: 48px; + height: var(--cr-section-min-height); padding-bottom: 8px; padding-top: 8px; }
diff --git a/chrome/browser/resources/settings/device_page/pointers.html b/chrome/browser/resources/settings/device_page/pointers.html index 03059dd..d93db637 100644 --- a/chrome/browser/resources/settings/device_page/pointers.html +++ b/chrome/browser/resources/settings/device_page/pointers.html
@@ -38,6 +38,10 @@ on-down="onMouseSwapButtonsDown_" on-up="onMouseSwapButtonsUp_" no-set-pref> </settings-toggle-button> + <settings-toggle-button id="mouseReverseScroll" + pref="{{prefs.settings.mouse.reverse_scroll}}" + label="$i18n{mouseReverseScroll}"> + </settings-toggle-button> <div class="settings-box"> <div class="start" id="mouseSpeedLabel">$i18n{mouseSpeed}</div> <settings-slider pref="{{prefs.settings.mouse.sensitivity2}}"
diff --git a/chrome/browser/resources/settings/settings_page/settings_subpage.html b/chrome/browser/resources/settings/settings_page/settings_subpage.html index 5d5a3ff..ae61548 100644 --- a/chrome/browser/resources/settings/settings_page/settings_subpage.html +++ b/chrome/browser/resources/settings/settings_page/settings_subpage.html
@@ -21,7 +21,7 @@ #headerLine { min-height: 40px; - padding-bottom: 12px; + padding-bottom: 24px; padding-top: 8px; }
diff --git a/chrome/browser/resources/settings/settings_shared_css.html b/chrome/browser/resources/settings/settings_shared_css.html index 0d0c1f1..07145189 100644 --- a/chrome/browser/resources/settings/settings_shared_css.html +++ b/chrome/browser/resources/settings/settings_shared_css.html
@@ -27,7 +27,7 @@ font-weight: 500; margin: 0; padding-bottom: 12px; - padding-top: 24px; + padding-top: 32px; } iron-icon {
diff --git a/chrome/browser/resources/settings/site_settings/site_details.html b/chrome/browser/resources/settings/site_settings/site_details.html index 1b3cb3a..204d19ea 100644 --- a/chrome/browser/resources/settings/site_settings/site_details.html +++ b/chrome/browser/resources/settings/site_settings/site_details.html
@@ -111,6 +111,12 @@ icon="settings:sync" id="backgroundSync" label="$i18n{siteSettingsBackgroundSync}"> </site-details-permission> + <template is="dom-if" if="[[enableSoundContentSetting_]]" no-search> + <site-details-permission category="{{ContentSettingsTypes.SOUND}}" + icon="settings:volume-up" id="sound" + label="$i18n{siteSettingsSound}"> + </site-details-permission> + </template> <site-details-permission category="{{ContentSettingsTypes.AUTOMATIC_DOWNLOADS}}" icon="cr:file-download" id="automaticDownloads"
diff --git a/chrome/browser/resources/settings/site_settings/site_details.js b/chrome/browser/resources/settings/site_settings/site_details.js index 91f8433..b45b86d5 100644 --- a/chrome/browser/resources/settings/site_settings/site_details.js +++ b/chrome/browser/resources/settings/site_settings/site_details.js
@@ -50,6 +50,14 @@ }, }, + /** @private */ + enableSoundContentSetting_: { + type: Boolean, + value: function() { + return loadTimeData.getBoolean('enableSoundContentSetting'); + }, + }, + /** * The type of storage for the origin. * @private
diff --git a/chrome/browser/safe_browsing/chrome_cleaner/reporter_runner_win.cc b/chrome/browser/safe_browsing/chrome_cleaner/reporter_runner_win.cc index 28f1385..04b9e56d 100644 --- a/chrome/browser/safe_browsing/chrome_cleaner/reporter_runner_win.cc +++ b/chrome/browser/safe_browsing/chrome_cleaner/reporter_runner_win.cc
@@ -584,12 +584,9 @@ namespace { -void ScanAndPrompt(const SwReporterInvocation& reporter_invocation) { - if (g_testing_delegate_) { - g_testing_delegate_->TriggerPrompt(); - return; - } - +// Scans and shows the Chrome Cleaner UI if the user has not already been +// prompted in the current prompt wave. +void MaybeScanAndPrompt(const SwReporterInvocation& reporter_invocation) { ChromeCleanerController* cleaner_controller = ChromeCleanerController::GetInstance(); @@ -598,6 +595,35 @@ return; } + Browser* browser = chrome::FindLastActive(); + if (!browser) { + RecordReporterStepHistogram(SW_REPORTER_NO_BROWSER); + return; + } + + Profile* profile = browser->profile(); + DCHECK(profile); + PrefService* prefs = profile->GetPrefs(); + DCHECK(prefs); + + // Don't show the prompt again if it's been shown before for this profile and + // for the current variations seed. + const std::string incoming_seed = GetIncomingSRTSeed(); + const std::string old_seed = prefs->GetString(prefs::kSwReporterPromptSeed); + if (!incoming_seed.empty() && incoming_seed == old_seed) { + RecordReporterStepHistogram(SW_REPORTER_ALREADY_PROMPTED); + RecordPromptNotShownWithReasonHistogram(NO_PROMPT_REASON_ALREADY_PROMPTED); + return; + } + + if (!incoming_seed.empty() && incoming_seed != old_seed) + prefs->SetString(prefs::kSwReporterPromptSeed, incoming_seed); + + if (g_testing_delegate_) { + g_testing_delegate_->TriggerPrompt(); + return; + } + cleaner_controller->Scan(reporter_invocation); DCHECK_EQ(ChromeCleanerController::State::kScanning, cleaner_controller->state()); @@ -805,7 +831,7 @@ // SRTPromptFieldTrial. If it is enabled, no attempt will be made to show // the old SRT prompt. if (base::FeatureList::IsEnabled(kInBrowserCleanerUIFeature)) { - ScanAndPrompt(finished_invocation); + MaybeScanAndPrompt(finished_invocation); return; }
diff --git a/chrome/browser/safe_browsing/chrome_password_protection_service_unittest.cc b/chrome/browser/safe_browsing/chrome_password_protection_service_unittest.cc index d8d4404..01eaccb 100644 --- a/chrome/browser/safe_browsing/chrome_password_protection_service_unittest.cc +++ b/chrome/browser/safe_browsing/chrome_password_protection_service_unittest.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/safe_browsing/chrome_password_protection_service.h" #include "base/memory/ref_counted.h" +#include "base/run_loop.h" #include "base/test/scoped_feature_list.h" #include "chrome/browser/safe_browsing/ui_manager.h" #include "chrome/browser/signin/account_fetcher_service_factory.h"
diff --git a/chrome/browser/safe_browsing/safe_browsing_navigation_observer_browsertest.cc b/chrome/browser/safe_browsing/safe_browsing_navigation_observer_browsertest.cc index 3fb2cd72..5342323 100644 --- a/chrome/browser/safe_browsing/safe_browsing_navigation_observer_browsertest.cc +++ b/chrome/browser/safe_browsing/safe_browsing_navigation_observer_browsertest.cc
@@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "base/run_loop.h" #include "base/strings/stringprintf.h" #include "build/build_config.h" #include "chrome/browser/chrome_notification_types.h"
diff --git a/chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_dependency_browsertest_win.cc b/chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_dependency_browsertest_win.cc index 3fd58dd..1421db79 100644 --- a/chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_dependency_browsertest_win.cc +++ b/chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_dependency_browsertest_win.cc
@@ -5,6 +5,7 @@ #include <memory> #include <tuple> +#include "base/run_loop.h" #include "base/strings/string_util.h" #include "base/test/scoped_feature_list.h" #include "chrome/browser/safe_browsing/chrome_cleaner/settings_resetter_win.h"
diff --git a/chrome/browser/site_per_process_interactive_browsertest.cc b/chrome/browser/site_per_process_interactive_browsertest.cc index 79b1964..19142e3 100644 --- a/chrome/browser/site_per_process_interactive_browsertest.cc +++ b/chrome/browser/site_per_process_interactive_browsertest.cc
@@ -3,6 +3,7 @@ // found in the LICENSE file. #include "base/command_line.h" +#include "base/run_loop.h" #include "base/strings/string_number_conversions.h" #include "base/test/scoped_feature_list.h" #include "base/test/test_timeouts.h"
diff --git a/chrome/browser/ssl/chrome_expect_ct_reporter_browser_tests.cc b/chrome/browser/ssl/chrome_expect_ct_reporter_browser_tests.cc index 9680db7f..f6e84d8c 100644 --- a/chrome/browser/ssl/chrome_expect_ct_reporter_browser_tests.cc +++ b/chrome/browser/ssl/chrome_expect_ct_reporter_browser_tests.cc
@@ -4,6 +4,7 @@ #include "base/bind.h" #include "base/callback.h" +#include "base/run_loop.h" #include "base/test/scoped_feature_list.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ssl/cert_verifier_browser_test.h"
diff --git a/chrome/browser/ssl/security_state_tab_helper_browser_tests.cc b/chrome/browser/ssl/security_state_tab_helper_browser_tests.cc index bc4ce29..488d0835 100644 --- a/chrome/browser/ssl/security_state_tab_helper_browser_tests.cc +++ b/chrome/browser/ssl/security_state_tab_helper_browser_tests.cc
@@ -7,6 +7,7 @@ #include "base/command_line.h" #include "base/files/file_path.h" #include "base/macros.h" +#include "base/run_loop.h" #include "base/strings/string_split.h" #include "base/strings/utf_string_conversions.h" #include "base/test/scoped_command_line.h"
diff --git a/chrome/browser/ssl/ssl_browser_tests.cc b/chrome/browser/ssl/ssl_browser_tests.cc index a764aa8..07ce57af 100644 --- a/chrome/browser/ssl/ssl_browser_tests.cc +++ b/chrome/browser/ssl/ssl_browser_tests.cc
@@ -14,6 +14,7 @@ #include "base/macros.h" #include "base/message_loop/message_loop.h" #include "base/metrics/field_trial.h" +#include "base/run_loop.h" #include "base/single_thread_task_runner.h" #include "base/strings/string_split.h" #include "base/strings/string_util.h"
diff --git a/chrome/browser/supervised_user/supervised_user_browsertest.cc b/chrome/browser/supervised_user/supervised_user_browsertest.cc index 4bbd701..64357d6 100644 --- a/chrome/browser/supervised_user/supervised_user_browsertest.cc +++ b/chrome/browser/supervised_user/supervised_user_browsertest.cc
@@ -6,6 +6,7 @@ #include "base/command_line.h" #include "base/memory/ptr_util.h" +#include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" #include "base/values.h" #include "chrome/browser/chrome_notification_types.h"
diff --git a/chrome/browser/supervised_user/supervised_user_service_unittest.cc b/chrome/browser/supervised_user/supervised_user_service_unittest.cc index 27b8640..419fa52b 100644 --- a/chrome/browser/supervised_user/supervised_user_service_unittest.cc +++ b/chrome/browser/supervised_user/supervised_user_service_unittest.cc
@@ -12,6 +12,7 @@ #include "base/macros.h" #include "base/memory/ptr_util.h" #include "base/path_service.h" +#include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" #include "base/test/scoped_feature_list.h" #include "base/threading/thread_task_runner_handle.h"
diff --git a/chrome/browser/task_manager/providers/web_contents/extension_tag_browsertest.cc b/chrome/browser/task_manager/providers/web_contents/extension_tag_browsertest.cc index e4eb70b..0a73517 100644 --- a/chrome/browser/task_manager/providers/web_contents/extension_tag_browsertest.cc +++ b/chrome/browser/task_manager/providers/web_contents/extension_tag_browsertest.cc
@@ -5,6 +5,7 @@ #include <algorithm> #include "base/macros.h" +#include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" #include "build/build_config.h" #include "chrome/browser/extensions/extension_browsertest.h"
diff --git a/chrome/browser/task_manager/providers/web_contents/tab_contents_tag_browsertest.cc b/chrome/browser/task_manager/providers/web_contents/tab_contents_tag_browsertest.cc index 060453c..6b359f22 100644 --- a/chrome/browser/task_manager/providers/web_contents/tab_contents_tag_browsertest.cc +++ b/chrome/browser/task_manager/providers/web_contents/tab_contents_tag_browsertest.cc
@@ -6,6 +6,7 @@ #include "base/macros.h" #include "base/path_service.h" +#include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" #include "base/threading/thread_restrictions.h" #include "chrome/browser/task_manager/mock_web_contents_task_manager.h"
diff --git a/chrome/browser/task_manager/task_manager_browsertest.cc b/chrome/browser/task_manager/task_manager_browsertest.cc index b01d7c1..ac22077 100644 --- a/chrome/browser/task_manager/task_manager_browsertest.cc +++ b/chrome/browser/task_manager/task_manager_browsertest.cc
@@ -8,6 +8,7 @@ #include "base/files/file_path.h" #include "base/macros.h" #include "base/path_service.h" +#include "base/run_loop.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "build/build_config.h"
diff --git a/chrome/browser/tracing/chrome_tracing_delegate_browsertest.cc b/chrome/browser/tracing/chrome_tracing_delegate_browsertest.cc index 17a1177..539cdd8 100644 --- a/chrome/browser/tracing/chrome_tracing_delegate_browsertest.cc +++ b/chrome/browser/tracing/chrome_tracing_delegate_browsertest.cc
@@ -6,6 +6,7 @@ #include "base/bind.h" #include "base/command_line.h" +#include "base/run_loop.h" #include "build/build_config.h" #include "chrome/app/chrome_command_ids.h" #include "chrome/browser/browser_process.h"
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 8344b6b..97c769cd 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -2418,6 +2418,8 @@ "cocoa/l10n_util.mm", "cocoa/last_active_browser_cocoa.cc", "cocoa/last_active_browser_cocoa.h", + "cocoa/md_hover_button.h", + "cocoa/md_hover_button.mm", "cocoa/media_picker/desktop_media_picker_bridge.h", "cocoa/media_picker/desktop_media_picker_bridge.mm", "cocoa/media_picker/desktop_media_picker_cocoa.h", @@ -2776,6 +2778,8 @@ "cocoa/global_error_bubble_controller_views.mm", "cocoa/gradient_button_cell.h", "cocoa/gradient_button_cell.mm", + "cocoa/harmony_button.h", + "cocoa/harmony_button.mm", "cocoa/has_weak_browser_pointer.h", "cocoa/hover_close_button.h", "cocoa/hover_close_button.mm",
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc index 7cc9143..3324976 100644 --- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc +++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc
@@ -29,6 +29,7 @@ #include "chrome/browser/ui/app_list/app_list_syncable_service_factory.h" #include "chrome/browser/ui/app_list/arc/arc_app_icon_loader.h" #include "chrome/browser/ui/app_list/arc/arc_app_utils.h" +#include "chrome/browser/ui/ash/app_list/app_list_service_ash.h" #include "chrome/browser/ui/ash/app_sync_ui_state.h" #include "chrome/browser/ui/ash/ash_util.h" #include "chrome/browser/ui/ash/chrome_launcher_prefs.h" @@ -66,6 +67,7 @@ #include "content/public/common/service_manager_connection.h" #include "extensions/common/extension.h" #include "services/service_manager/public/cpp/connector.h" +#include "ui/app_list/presenter/app_list_presenter_impl.h" #include "ui/aura/window.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/resource/resource_bundle.h" @@ -520,8 +522,10 @@ } } + const app_list::AppListPresenterImpl* app_list_presenter = + AppListServiceAsh::GetInstance()->GetAppListPresenter(); if (window->IsActive() && allow_minimize && - !ash::Shell::Get()->IsAppListVisible()) { + (!app_list_presenter || !app_list_presenter->IsVisible())) { window->Minimize(); return ash::SHELF_ACTION_WINDOW_MINIMIZED; }
diff --git a/chrome/browser/ui/cocoa/extensions/browser_action_button_interactive_uitest.mm b/chrome/browser/ui/cocoa/extensions/browser_action_button_interactive_uitest.mm index 5e58cc5..8c72af3 100644 --- a/chrome/browser/ui/cocoa/extensions/browser_action_button_interactive_uitest.mm +++ b/chrome/browser/ui/cocoa/extensions/browser_action_button_interactive_uitest.mm
@@ -13,6 +13,7 @@ #include "base/callback_helpers.h" #include "base/macros.h" #include "base/memory/ptr_util.h" +#include "base/run_loop.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "base/threading/thread_task_runner_handle.h"
diff --git a/chrome/browser/ui/cocoa/find_bar/find_bar_browsertest.mm b/chrome/browser/ui/cocoa/find_bar/find_bar_browsertest.mm index 61713c9..0236ee6 100644 --- a/chrome/browser/ui/cocoa/find_bar/find_bar_browsertest.mm +++ b/chrome/browser/ui/cocoa/find_bar/find_bar_browsertest.mm
@@ -3,6 +3,7 @@ // found in the LICENSE file. #include "base/mac/foundation_util.h" +#include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_window.h"
diff --git a/chrome/browser/ui/cocoa/harmony_button.h b/chrome/browser/ui/cocoa/harmony_button.h new file mode 100644 index 0000000..cd94ba9 --- /dev/null +++ b/chrome/browser/ui/cocoa/harmony_button.h
@@ -0,0 +1,22 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_UI_COCOA_HARMONY_BUTTON_H_ +#define CHROME_BROWSER_UI_COCOA_HARMONY_BUTTON_H_ + +#import <AppKit/AppKit.h> + +#import "ui/base/cocoa/hover_button.h" + +// HarmonyButton follows the Harmony design spec. It has slightly rounded +// corners, a border, and a shadow that appears on hover. Its color scheme +// tracks the active theme. Not every part of the spec for Harmony buttons has +// been implemented: it doesn't look different if it's the default button, or +// if it's disabled, for instance. Anyone who needs these things is encouraged +// to find joy in adding support for them. + +@interface HarmonyButton : HoverButton +@end + +#endif // CHROME_BROWSER_UI_COCOA_HARMONY_BUTTON_H_
diff --git a/chrome/browser/ui/cocoa/harmony_button.mm b/chrome/browser/ui/cocoa/harmony_button.mm new file mode 100644 index 0000000..e1ed486 --- /dev/null +++ b/chrome/browser/ui/cocoa/harmony_button.mm
@@ -0,0 +1,220 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "chrome/browser/ui/cocoa/harmony_button.h" + +#import "chrome/browser/themes/theme_properties.h" +#import "chrome/browser/ui/cocoa/themed_window.h" +#include "skia/ext/skia_utils_mac.h" +#import "ui/base/cocoa/nsview_additions.h" +#import "ui/base/theme_provider.h" + +namespace { + +NSColor* GetBackgroundColor(HoverState state, BOOL dark_theme) { + if (dark_theme) { + switch (state) { + case kHoverStateNone: + return [NSColor colorWithCalibratedWhite:1 alpha:0.12]; + case kHoverStateMouseOver: + return [NSColor colorWithCalibratedWhite:1 alpha:0.18]; + case kHoverStateMouseDown: + return [NSColor colorWithCalibratedWhite:1 alpha:0.22]; + } + } else { + switch (state) { + case kHoverStateNone: + return [NSColor colorWithCalibratedWhite:1 alpha:1]; + case kHoverStateMouseOver: + return [NSColor colorWithCalibratedWhite:0.98 alpha:1]; + case kHoverStateMouseDown: + return [NSColor colorWithCalibratedWhite:0.95 alpha:1]; + } + } +} + +NSColor* GetBorderColor(BOOL dark_theme) { + return [NSColor colorWithCalibratedWhite:dark_theme ? 1 : 0 alpha:0.2]; +} + +NSColor* GetShadowColor() { + return NSColor.blackColor; +} + +constexpr CGSize kNormalShadowOffset{0, 0}; +constexpr CGSize kMouseOverShadowOffset{0, 1}; + +constexpr CGFloat kNormalShadowOpacity = 0; +constexpr CGFloat kMouseOverShadowOpacity = 0.1; + +constexpr CGFloat kNormalShadowRadius = 0; +constexpr CGFloat kMouseOverShadowRadius = 2; + +constexpr CGFloat kCornerRadius = 2; +constexpr CGFloat kXPadding = 16; +constexpr CGFloat kMinWidth = 64; +constexpr CGFloat kHeight = 28; + +// The text is a bit too low by default; offset the title rect to center it. +constexpr CGFloat kTextYOffset = 1; + +constexpr NSTimeInterval kTransitionDuration = 0.25; + +} // namespace + +@interface HarmonyButtonCell : NSButtonCell +@end + +@implementation HarmonyButtonCell +- (NSRect)titleRectForBounds:(NSRect)rect { + rect.origin.y -= kTextYOffset; + return rect; +} +@end + +@implementation HarmonyButton + ++ (Class)cellClass { + return [HarmonyButtonCell class]; +} + +- (instancetype)initWithFrame:(NSRect)frameRect { + if ((self = [super initWithFrame:frameRect])) { + self.bezelStyle = NSRoundedBezelStyle; + self.bordered = NO; + self.wantsLayer = YES; + CALayer* layer = self.layer; + layer.shadowColor = GetShadowColor().CGColor; + layer.cornerRadius = kCornerRadius; + [self updateBorderWidth]; + [self updateHoverButtonAppearanceAnimated:NO]; + } + return self; +} + +- (void)updateBorderWidth { + self.layer.borderWidth = [self cr_lineWidth]; +} + +- (void)updateHoverButtonAppearanceAnimated:(BOOL)animated { + if (!self.window) + return; + + const ui::ThemeProvider* themeProvider = [self.window themeProvider]; + const BOOL darkTheme = [self.window hasDarkTheme]; + CALayer* layer = self.layer; + + if (animated) { + [NSAnimationContext beginGrouping]; + NSAnimationContext* context = [NSAnimationContext currentContext]; + context.allowsImplicitAnimation = YES; + context.duration = kTransitionDuration; + } else { + [layer removeAllAnimations]; + } + + switch (self.hoverState) { + case kHoverStateNone: + layer.shadowOffset = kNormalShadowOffset; + layer.shadowOpacity = kNormalShadowOpacity; + layer.shadowRadius = kNormalShadowRadius; + break; + case kHoverStateMouseOver: + case kHoverStateMouseDown: + layer.shadowOffset = kMouseOverShadowOffset; + layer.shadowOpacity = kMouseOverShadowOpacity; + layer.shadowRadius = kMouseOverShadowRadius; + break; + } + + layer.borderColor = + (themeProvider && themeProvider->ShouldIncreaseContrast()) + ? CGColorGetConstantColor(darkTheme ? kCGColorWhite : kCGColorBlack) + : GetBorderColor(darkTheme).CGColor; + layer.backgroundColor = + GetBackgroundColor(self.hoverState, darkTheme).CGColor; + + if (animated) { + [NSAnimationContext endGrouping]; + } +} + +// HoverButton overrides. + +- (void)setHoverState:(HoverState)state { + if (state == hoverState_) { + return; + } + const BOOL animated = + state != kHoverStateMouseDown && hoverState_ != kHoverStateMouseDown; + hoverState_ = state; + [self updateHoverButtonAppearanceAnimated:animated]; +} + +// NSButton overrides. + +- (void)setTitle:(NSString*)title { + NSColor* textColor; + if (const ui::ThemeProvider* themeProvider = [self.window themeProvider]) { + textColor = themeProvider->GetNSColor(ThemeProperties::COLOR_TAB_TEXT); + } else { + textColor = [NSColor controlTextColor]; + } + + base::scoped_nsobject<NSMutableParagraphStyle> paragraphStyle( + [[NSParagraphStyle defaultParagraphStyle] mutableCopy]); + paragraphStyle.get().alignment = NSCenterTextAlignment; + base::scoped_nsobject<NSAttributedString> attributedTitle( + [[NSAttributedString alloc] + initWithString:title + attributes:@{ + NSForegroundColorAttributeName : textColor, + NSParagraphStyleAttributeName : paragraphStyle, + }]); + if (![self.attributedTitle isEqual:attributedTitle]) + self.attributedTitle = attributedTitle; +} + +// NSControl overrides. + +- (void)sizeToFit { + NSSize size = self.attributedTitle.size; + size.width += kXPadding * 2; + size = [self backingAlignedRect:NSMakeRect(0, 0, size.width, size.height) + options:NSAlignAllEdgesOutward] + .size; + [self setFrameSize:NSMakeSize(size.width > kMinWidth ? size.width : kMinWidth, + kHeight)]; +} + +// NSView overrides. + +- (void)viewWillDraw { + CALayer* layer = self.layer; + layer.shadowPath = CGPathCreateWithRoundedRect( + layer.bounds, layer.cornerRadius, layer.cornerRadius, nullptr); + [self updateHoverButtonAppearanceAnimated:NO]; + self.title = self.title; // Match the theme. + [super viewWillDraw]; +} + +- (void)drawFocusRingMask { + CGFloat radius = self.layer.cornerRadius; + [[NSBezierPath bezierPathWithRoundedRect:self.bounds + xRadius:radius + yRadius:radius] fill]; +} + +- (void)viewDidChangeBackingProperties { + [super viewDidChangeBackingProperties]; + [self updateBorderWidth]; +} + +// This is undocumented. Without it, NSView sets `self.layer.masksToBounds = +// YES` whenever the view is resized, clipping the shadow. +- (BOOL)clipsToBounds { + return NO; +} + +@end
diff --git a/chrome/browser/ui/cocoa/harmony_button_unittest.mm b/chrome/browser/ui/cocoa/harmony_button_unittest.mm new file mode 100644 index 0000000..82539e8 --- /dev/null +++ b/chrome/browser/ui/cocoa/harmony_button_unittest.mm
@@ -0,0 +1,33 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "chrome/browser/ui/cocoa/harmony_button.h" + +#import "base/mac/scoped_nsobject.h" +#import "chrome/browser/ui/cocoa/test/cocoa_test_helper.h" + +namespace { + +class HarmonyButtonTest : public ui::CocoaTest { + public: + HarmonyButtonTest() { + base::scoped_nsobject<HarmonyButton> button( + [[HarmonyButton alloc] initWithFrame:NSMakeRect(0, 0, 20, 20)]); + button_ = button; + [[test_window() contentView] addSubview:button_]; + } + + protected: + HarmonyButton* button_; // Weak, owned by test_window(). +}; + +TEST_VIEW(HarmonyButtonTest, button_) + +TEST(HarmonyButtonTestMore, NSViewRespondsToClipsToBounds) { + // HarmonyButton implements an undocumented method to avoid having its shadow + // clipped, so verify that it hasn't disappeared. + EXPECT_TRUE([NSView instancesRespondToSelector:@selector(clipsToBounds)]); +} + +} // namespace
diff --git a/chrome/browser/ui/cocoa/md_hover_button.h b/chrome/browser/ui/cocoa/md_hover_button.h new file mode 100644 index 0000000..1182f17 --- /dev/null +++ b/chrome/browser/ui/cocoa/md_hover_button.h
@@ -0,0 +1,29 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_UI_COCOA_MD_HOVER_BUTTON_H_ +#define CHROME_BROWSER_UI_COCOA_MD_HOVER_BUTTON_H_ + +#import <AppKit/AppKit.h> + +#import "ui/base/cocoa/hover_button.h" +#include "ui/gfx/vector_icon_types.h" + +// MDHoverButton has a gray background with rounded corners. The background is +// only visible on hover and gets darker on click. It's friendly to subviews. + +@interface MDHoverButton : HoverButton + +// An icon that's displayed in the middle of the button. +@property(nonatomic) const gfx::VectorIcon* icon; +@property(nonatomic) int iconSize; + +// If YES, the button doesn't have a hover state. This can be useful if a +// button contains another button, or has an area which shouldn't be sensitive +// to clicks: set hoverSuppressed to YES when the mouse enters that area, and +// NO when the mouse exits. +@property(nonatomic) BOOL hoverSuppressed; +@end + +#endif // CHROME_BROWSER_UI_COCOA_MD_HOVER_BUTTON_H_
diff --git a/chrome/browser/ui/cocoa/md_hover_button.mm b/chrome/browser/ui/cocoa/md_hover_button.mm new file mode 100644 index 0000000..0e6d0b5b --- /dev/null +++ b/chrome/browser/ui/cocoa/md_hover_button.mm
@@ -0,0 +1,137 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "chrome/browser/ui/cocoa/md_hover_button.h" + +#import <QuartzCore/QuartzCore.h> + +#import "chrome/browser/ui/cocoa/themed_window.h" +#import "ui/base/cocoa/nsview_additions.h" +#include "ui/base/theme_provider.h" +#include "ui/gfx/color_palette.h" +#include "ui/gfx/color_utils.h" +#import "ui/gfx/image/image_skia_util_mac.h" +#include "ui/gfx/paint_vector_icon.h" + +namespace { +constexpr int kDefaultIconSize = 16; +constexpr CGFloat kHoverAnimationDuration = 0.25; + +NSColor* GetHoveringColor(BOOL dark_theme) { + return [NSColor colorWithWhite:dark_theme ? 1 : 0 alpha:0.08]; +} + +NSColor* GetActiveColor(BOOL dark_theme) { + return [NSColor colorWithWhite:dark_theme ? 1 : 0 alpha:0.12]; +} + +} // namespace + +@implementation MDHoverButton { + const gfx::VectorIcon* icon_; +} +@synthesize icon = icon_; +@synthesize iconSize = iconSize_; +@synthesize hoverSuppressed = hoverSuppressed_; + +- (instancetype)initWithFrame:(NSRect)frameRect { + if ((self = [super initWithFrame:frameRect])) { + iconSize_ = kDefaultIconSize; + self.bezelStyle = NSRoundedBezelStyle; + self.bordered = NO; + self.wantsLayer = YES; + self.layer.cornerRadius = 2; + } + return self; +} + +- (void)setIcon:(const gfx::VectorIcon*)icon { + icon_ = icon; + self.needsDisplay = YES; +} + +- (void)setIconSize:(int)iconSize { + iconSize_ = iconSize; + self.needsDisplay = YES; +} + +- (void)setHoverSuppressed:(BOOL)hoverSuppressed { + hoverSuppressed_ = hoverSuppressed; + [self updateHoverButtonAppearanceAnimated:YES]; +} + +- (SkColor)iconColor { + const ui::ThemeProvider* provider = [[self window] themeProvider]; + return [[self window] hasDarkTheme] + ? SK_ColorWHITE + : provider ? provider->ShouldIncreaseContrast() + ? SK_ColorBLACK + : gfx::kChromeIconGrey + : gfx::kPlaceholderColor; +} + +- (void)updateHoverButtonAppearanceAnimated:(BOOL)animated { + const BOOL darkTheme = [[self window] hasDarkTheme]; + CGColorRef targetBackgroundColor = nil; + if (!hoverSuppressed_) { + switch (self.hoverState) { + case kHoverStateMouseDown: + targetBackgroundColor = GetActiveColor(darkTheme).CGColor; + case kHoverStateMouseOver: + targetBackgroundColor = GetHoveringColor(darkTheme).CGColor; + case kHoverStateNone: + break; + } + } + if (CGColorEqualToColor(targetBackgroundColor, self.layer.backgroundColor)) { + return; + } + if (!animated) { + [self.layer removeAnimationForKey:@"hoverButtonAppearance"]; + self.layer.backgroundColor = targetBackgroundColor; + return; + } + [NSAnimationContext runAnimationGroup:^(NSAnimationContext* context) { + context.duration = kHoverAnimationDuration; + CABasicAnimation* animation = + [CABasicAnimation animationWithKeyPath:@"backgroundColor"]; + self.layer.backgroundColor = targetBackgroundColor; + [self.layer addAnimation:animation forKey:@"hoverButtonAppearance"]; + } + completionHandler:nil]; +} + +// HoverButton overrides. + +- (void)setHoverState:(HoverState)state { + if (state == hoverState_) + return; + const BOOL animated = + state != kHoverStateMouseDown && hoverState_ != kHoverStateMouseDown; + [super setHoverState:state]; + [self updateHoverButtonAppearanceAnimated:animated]; +} + +// NSView overrides. + +- (void)viewWillDraw { + if (!icon_ || icon_->is_empty() || iconSize_ == 0) { + self.image = nil; + return; + } + const SkColor iconColor = + color_utils::DeriveDefaultIconColor([self iconColor]); + self.image = + NSImageFromImageSkia(gfx::CreateVectorIcon(*icon_, iconSize_, iconColor)); + [super viewWillDraw]; +} + +- (void)drawFocusRingMask { + CGFloat radius = self.layer.cornerRadius; + [[NSBezierPath bezierPathWithRoundedRect:self.bounds + xRadius:radius + yRadius:radius] fill]; +} + +@end
diff --git a/chrome/browser/ui/cocoa/md_hover_button_unittest.mm b/chrome/browser/ui/cocoa/md_hover_button_unittest.mm new file mode 100644 index 0000000..39e97e1 --- /dev/null +++ b/chrome/browser/ui/cocoa/md_hover_button_unittest.mm
@@ -0,0 +1,35 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "chrome/browser/ui/cocoa/md_hover_button.h" + +#import "base/mac/scoped_nsobject.h" +#include "chrome/app/vector_icons/vector_icons.h" +#import "chrome/browser/ui/cocoa/test/cocoa_test_helper.h" + +namespace { + +class MDHoverButtonTest : public ui::CocoaTest { + public: + MDHoverButtonTest() { + base::scoped_nsobject<MDHoverButton> button( + [[MDHoverButton alloc] initWithFrame:NSMakeRect(0, 0, 20, 20)]); + button_ = button; + [[test_window() contentView] addSubview:button_]; + } + + protected: + MDHoverButton* button_; // Weak, owned by test_window(). +}; + +TEST_VIEW(MDHoverButtonTest, button_) + +// Exercise icon and iconSize to make sure they don't crash. +TEST_F(MDHoverButtonTest, TestIcon) { + button_.icon = &kCaretDownIcon; + button_.iconSize = 16; + [button_ displayIfNeeded]; +} + +} // namespace
diff --git a/chrome/browser/ui/cocoa/permission_bubble/permission_bubble_cocoa_interactive_uitest.mm b/chrome/browser/ui/cocoa/permission_bubble/permission_bubble_cocoa_interactive_uitest.mm index 489fdd63..8907e4c8 100644 --- a/chrome/browser/ui/cocoa/permission_bubble/permission_bubble_cocoa_interactive_uitest.mm +++ b/chrome/browser/ui/cocoa/permission_bubble/permission_bubble_cocoa_interactive_uitest.mm
@@ -6,6 +6,7 @@ #include "base/command_line.h" #import "base/mac/scoped_nsobject.h" +#include "base/run_loop.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/permissions/permission_request_manager_test_api.h" #include "chrome/browser/ui/browser.h"
diff --git a/chrome/browser/ui/extensions/application_launch.cc b/chrome/browser/ui/extensions/application_launch.cc index f7cacafa..e1866291 100644 --- a/chrome/browser/ui/extensions/application_launch.cc +++ b/chrome/browser/ui/extensions/application_launch.cc
@@ -430,8 +430,6 @@ if (!tab) return NULL; - extensions::TabHelper::FromWebContents(tab)->UpdateShortcutOnLoadComplete(); - return tab; }
diff --git a/chrome/browser/ui/libgtkui/gtk_ui.cc b/chrome/browser/ui/libgtkui/gtk_ui.cc index 992574b..f45f2b10 100644 --- a/chrome/browser/ui/libgtkui/gtk_ui.cc +++ b/chrome/browser/ui/libgtkui/gtk_ui.cc
@@ -99,7 +99,7 @@ // same time (so users don't have to deal with things changing twice). // Since this was never really intended to be toggled by users, this // is fine for now. -const bool kUseGtkNavButtonLayoutManager = false; +const bool kUseGtkNavButtonLayoutManager = true; const double kDefaultDPI = 96; @@ -282,7 +282,7 @@ std::unique_ptr<NavButtonLayoutManager> CreateNavButtonLayoutManager( GtkUi* gtk_ui) { #if GTK_MAJOR_VERSION == 3 - if (GtkVersionCheck(3, 10) && kUseGtkNavButtonLayoutManager) + if (GtkVersionCheck(3, 14) && kUseGtkNavButtonLayoutManager) return std::make_unique<NavButtonLayoutManagerGtk3>(gtk_ui); #endif #if defined(USE_GCONF) @@ -803,10 +803,10 @@ std::unique_ptr<views::NavButtonProvider> GtkUi::CreateNavButtonProvider() { #if GTK_MAJOR_VERSION >= 3 - return base::MakeUnique<libgtkui::NavButtonProviderGtk3>(); -#else - return nullptr; + if (GtkVersionCheck(3, 14)) + return base::MakeUnique<libgtkui::NavButtonProviderGtk3>(); #endif + return nullptr; } bool GtkUi::MatchEvent(const ui::Event& event,
diff --git a/chrome/browser/ui/search_engines/search_engine_tab_helper_browsertest.cc b/chrome/browser/ui/search_engines/search_engine_tab_helper_browsertest.cc index 4ade03f..1679945c 100644 --- a/chrome/browser/ui/search_engines/search_engine_tab_helper_browsertest.cc +++ b/chrome/browser/ui/search_engines/search_engine_tab_helper_browsertest.cc
@@ -7,6 +7,7 @@ #include <utility> #include "base/macros.h" +#include "base/run_loop.h" #include "base/strings/stringprintf.h" #include "chrome/browser/search_engines/template_url_service_factory.h" #include "chrome/browser/ui/browser.h"
diff --git a/chrome/browser/ui/settings_window_manager_browsertest_chromeos.cc b/chrome/browser/ui/settings_window_manager_browsertest_chromeos.cc index a7a5661..10dc90c 100644 --- a/chrome/browser/ui/settings_window_manager_browsertest_chromeos.cc +++ b/chrome/browser/ui/settings_window_manager_browsertest_chromeos.cc
@@ -10,6 +10,7 @@ #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h" #include "base/macros.h" +#include "base/run_loop.h" #include "build/build_config.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/profiles/profile_manager.h"
diff --git a/chrome/browser/ui/toolbar/toolbar_actions_model_unittest.cc b/chrome/browser/ui/toolbar/toolbar_actions_model_unittest.cc index efc359c..6c350bc 100644 --- a/chrome/browser/ui/toolbar/toolbar_actions_model_unittest.cc +++ b/chrome/browser/ui/toolbar/toolbar_actions_model_unittest.cc
@@ -13,6 +13,7 @@ #include "base/files/file_util.h" #include "base/macros.h" #include "base/memory/ref_counted.h" +#include "base/run_loop.h" #include "base/strings/string16.h" #include "base/strings/stringprintf.h" #include "chrome/browser/extensions/api/extension_action/extension_action_api.h"
diff --git a/chrome/browser/ui/views/arc_app_dialog_view_browsertest.cc b/chrome/browser/ui/views/arc_app_dialog_view_browsertest.cc index 4b1ddd4..ac83def 100644 --- a/chrome/browser/ui/views/arc_app_dialog_view_browsertest.cc +++ b/chrome/browser/ui/views/arc_app_dialog_view_browsertest.cc
@@ -6,6 +6,7 @@ #include "base/command_line.h" #include "base/macros.h" +#include "base/run_loop.h" #include "chrome/browser/chromeos/arc/arc_auth_notification.h" #include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h"
diff --git a/chrome/browser/ui/views/certificate_selector_browsertest.cc b/chrome/browser/ui/views/certificate_selector_browsertest.cc index c025563cb..e18d821 100644 --- a/chrome/browser/ui/views/certificate_selector_browsertest.cc +++ b/chrome/browser/ui/views/certificate_selector_browsertest.cc
@@ -8,6 +8,7 @@ #include "base/files/file_path.h" #include "base/macros.h" #include "base/memory/ptr_util.h" +#include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/tabs/tab_strip_model.h"
diff --git a/chrome/browser/ui/views/feature_promos/feature_promo_bubble_view.cc b/chrome/browser/ui/views/feature_promos/feature_promo_bubble_view.cc index 7a54b03..5de32b6d 100644 --- a/chrome/browser/ui/views/feature_promos/feature_promo_bubble_view.cc +++ b/chrome/browser/ui/views/feature_promos/feature_promo_bubble_view.cc
@@ -25,7 +25,7 @@ // The amount of time the promo should stay onscreen after the // user stops hovering over it. -constexpr base::TimeDelta kDelayShort = base::TimeDelta::FromSecondsD(2.5); +constexpr base::TimeDelta kDelayShort = base::TimeDelta::FromSeconds(1); } // namespace
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc index 74a4316..18bcb37 100644 --- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc +++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc
@@ -11,6 +11,7 @@ #include "ash/shell.h" #include "ash/wm/tablet_mode/tablet_mode_controller.h" #include "base/command_line.h" +#include "base/run_loop.h" #include "base/scoped_observer.h" #include "build/build_config.h" #include "chrome/app/chrome_command_ids.h"
diff --git a/chrome/browser/ui/views/frame/opaque_browser_frame_view_linux.cc b/chrome/browser/ui/views/frame/opaque_browser_frame_view_linux.cc index c93f02b..3d7b8d4 100644 --- a/chrome/browser/ui/views/frame/opaque_browser_frame_view_linux.cc +++ b/chrome/browser/ui/views/frame/opaque_browser_frame_view_linux.cc
@@ -49,8 +49,12 @@ // to a Widget. We need a Widget because layout crashes due to dependencies // on a ui::ThemeProvider(). if (view_->GetWidget()) { - view_->Layout(); - view_->SchedulePaint(); + // A relayout on |view_| is insufficient because it would neglect + // a relayout of the tabstrip. Do a full relayout to handle the + // frame buttons as well as open tabs. + views::View* root_view = view_->GetWidget()->GetRootView(); + root_view->Layout(); + root_view->SchedulePaint(); } }
diff --git a/chrome/browser/ui/views/harmony/layout_provider_unittest.cc b/chrome/browser/ui/views/harmony/layout_provider_unittest.cc index f912605..7883511e 100644 --- a/chrome/browser/ui/views/harmony/layout_provider_unittest.cc +++ b/chrome/browser/ui/views/harmony/layout_provider_unittest.cc
@@ -22,6 +22,7 @@ #endif #if defined(OS_WIN) +#include "base/win/windows_version.h" #include "ui/gfx/win/direct_write.h" #endif @@ -327,6 +328,11 @@ // Harmony spec. This test will only run if it detects that the current machine // has the default OS configuration. TEST_F(LayoutProviderTest, ExplicitTypographyLineHeight) { +#if defined(OS_WIN) + // Flaky on Windows 7. See http://crbug.com/759870. + if (base::win::GetVersion() == base::win::VERSION_WIN7) + return; +#endif ui::test::MaterialDesignControllerTestAPI md_test_api( ui::MaterialDesignController::MATERIAL_NORMAL); md_test_api.SetSecondaryUiMaterial(true);
diff --git a/chrome/browser/ui/views/media_router/media_router_ui_browsertest.cc b/chrome/browser/ui/views/media_router/media_router_ui_browsertest.cc index 0a5081c..463a5ace 100644 --- a/chrome/browser/ui/views/media_router/media_router_ui_browsertest.cc +++ b/chrome/browser/ui/views/media_router/media_router_ui_browsertest.cc
@@ -3,6 +3,7 @@ // found in the LICENSE file. #include "base/bind.h" +#include "base/run_loop.h" #include "base/threading/thread_task_runner_handle.h" #include "chrome/app/chrome_command_ids.h" #include "chrome/browser/extensions/browser_action_test_util.h"
diff --git a/chrome/browser/ui/views/payments/contact_info_editor_view_controller_browsertest.cc b/chrome/browser/ui/views/payments/contact_info_editor_view_controller_browsertest.cc index 5aed74d4..c0e661e 100644 --- a/chrome/browser/ui/views/payments/contact_info_editor_view_controller_browsertest.cc +++ b/chrome/browser/ui/views/payments/contact_info_editor_view_controller_browsertest.cc
@@ -4,6 +4,7 @@ #include <string> +#include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/ui/views/payments/payment_request_browsertest_base.h"
diff --git a/chrome/browser/ui/views/payments/credit_card_editor_view_controller_browsertest.cc b/chrome/browser/ui/views/payments/credit_card_editor_view_controller_browsertest.cc index 1c00205..1e9d344b7 100644 --- a/chrome/browser/ui/views/payments/credit_card_editor_view_controller_browsertest.cc +++ b/chrome/browser/ui/views/payments/credit_card_editor_view_controller_browsertest.cc
@@ -6,6 +6,7 @@ #include <vector> #include "base/macros.h" +#include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" #include "base/time/time.h" #include "chrome/browser/ui/views/payments/editor_view_controller.h"
diff --git a/chrome/browser/ui/views/payments/shipping_address_editor_view_controller_browsertest.cc b/chrome/browser/ui/views/payments/shipping_address_editor_view_controller_browsertest.cc index ab88f07..fc8aa00c 100644 --- a/chrome/browser/ui/views/payments/shipping_address_editor_view_controller_browsertest.cc +++ b/chrome/browser/ui/views/payments/shipping_address_editor_view_controller_browsertest.cc
@@ -5,6 +5,7 @@ #include <algorithm> #include "base/memory/ptr_util.h" +#include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" #include "base/time/time.h" #include "chrome/browser/ui/views/payments/editor_view_controller.h"
diff --git a/chrome/browser/ui/views/safe_browsing/password_reuse_modal_warning_dialog_browsertest.cc b/chrome/browser/ui/views/safe_browsing/password_reuse_modal_warning_dialog_browsertest.cc index e6a6132..ea7cc47 100644 --- a/chrome/browser/ui/views/safe_browsing/password_reuse_modal_warning_dialog_browsertest.cc +++ b/chrome/browser/ui/views/safe_browsing/password_reuse_modal_warning_dialog_browsertest.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/ui/views/safe_browsing/password_reuse_modal_warning_dialog.h" +#include "base/run_loop.h" #include "base/test/scoped_feature_list.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_commands.h"
diff --git a/chrome/browser/ui/views/touch_events_interactive_uitest_win.cc b/chrome/browser/ui/views/touch_events_interactive_uitest_win.cc index 7b1a171f..0d7f41f 100644 --- a/chrome/browser/ui/views/touch_events_interactive_uitest_win.cc +++ b/chrome/browser/ui/views/touch_events_interactive_uitest_win.cc
@@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "base/message_loop/message_loop.h" +#include "base/run_loop.h" #include "base/win/windows_version.h" #include "chrome/test/base/testing_profile.h" #include "chrome/test/base/view_event_test_base.h"
diff --git a/chrome/browser/ui/webui/settings/chromeos/google_assistant_handler.cc b/chrome/browser/ui/webui/settings/chromeos/google_assistant_handler.cc index 7d4e338..d046f21 100644 --- a/chrome/browser/ui/webui/settings/chromeos/google_assistant_handler.cc +++ b/chrome/browser/ui/webui/settings/chromeos/google_assistant_handler.cc
@@ -65,7 +65,10 @@ void GoogleAssistantHandler::HandleShowGoogleAssistantSettings( const base::ListValue* args) { - // TODO(rcui): Implement. + auto* service = + arc::ArcVoiceInteractionFrameworkService::GetForBrowserContext(profile_); + if (service) + service->ShowVoiceInteractionSettings(); } } // namespace settings
diff --git a/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc index be1d3c6..c47e8ba 100644 --- a/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc
@@ -502,6 +502,7 @@ {"pointerFast", IDS_SETTINGS_POINTER_SPEED_FAST_LABEL}, {"mouseSpeed", IDS_SETTINGS_MOUSE_SPEED_LABEL}, {"mouseSwapButtons", IDS_SETTINGS_MOUSE_SWAP_BUTTONS_LABEL}, + {"mouseReverseScroll", IDS_SETTINGS_MOUSE_REVERSE_SCROLL_LABEL}, }; AddLocalizedStringsBulk(html_source, pointers_strings, arraysize(pointers_strings));
diff --git a/chrome/browser/ui/webui/signin/user_manager_ui_browsertest.cc b/chrome/browser/ui/webui/signin/user_manager_ui_browsertest.cc index 55ec6aa..2cfedd5 100644 --- a/chrome/browser/ui/webui/signin/user_manager_ui_browsertest.cc +++ b/chrome/browser/ui/webui/signin/user_manager_ui_browsertest.cc
@@ -3,6 +3,7 @@ // found in the LICENSE file. #include "base/command_line.h" +#include "base/run_loop.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h"
diff --git a/chrome/browser/unload_browsertest.cc b/chrome/browser/unload_browsertest.cc index 4b5ac4d..42ee1cd 100644 --- a/chrome/browser/unload_browsertest.cc +++ b/chrome/browser/unload_browsertest.cc
@@ -9,6 +9,7 @@ #include "base/bind.h" #include "base/command_line.h" #include "base/logging.h" +#include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" #include "build/build_config.h" #include "chrome/browser/chrome_notification_types.h"
diff --git a/chrome/browser/web_applications/update_shortcut_worker_win.cc b/chrome/browser/web_applications/update_shortcut_worker_win.cc deleted file mode 100644 index 9d3ae82..0000000 --- a/chrome/browser/web_applications/update_shortcut_worker_win.cc +++ /dev/null
@@ -1,255 +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 "chrome/browser/web_applications/update_shortcut_worker_win.h" - -#include <stddef.h> - -#include <algorithm> - -#include "base/bind.h" -#include "base/bind_helpers.h" -#include "base/files/file_util.h" -#include "base/macros.h" -#include "base/path_service.h" -#include "base/strings/utf_string_conversions.h" -#include "base/win/shortcut.h" -#include "chrome/browser/chrome_notification_types.h" -#include "chrome/browser/extensions/tab_helper.h" -#include "chrome/browser/profiles/profile.h" -#include "chrome/browser/shell_integration_win.h" -#include "chrome/browser/web_applications/web_app.h" -#include "chrome/browser/web_applications/web_app_win.h" -#include "components/favicon_base/select_favicon_frames.h" -#include "content/public/browser/browser_thread.h" -#include "content/public/browser/notification_details.h" -#include "content/public/browser/notification_source.h" -#include "content/public/browser/web_contents.h" -#include "ui/gfx/icon_util.h" -#include "url/gurl.h" - -using content::BrowserThread; -using content::NavigationController; -using content::WebContents; - -namespace web_app { - -UpdateShortcutWorker::UpdateShortcutWorker(WebContents* web_contents) - : web_contents_(web_contents), - profile_path_(Profile::FromBrowserContext( - web_contents->GetBrowserContext())->GetPath()) { - extensions::TabHelper* extensions_tab_helper = - extensions::TabHelper::FromWebContents(web_contents); - shortcut_info_ = web_app::GetShortcutInfoForTab(web_contents_); - web_app::GetIconsInfo(extensions_tab_helper->web_app_info(), - &unprocessed_icons_); - file_name_ = web_app::internals::GetSanitizedFileName(shortcut_info_->title); - - registrar_.Add( - this, - chrome::NOTIFICATION_TAB_CLOSING, - content::Source<NavigationController>(&web_contents->GetController())); -} - -UpdateShortcutWorker::~UpdateShortcutWorker() { -} - -void UpdateShortcutWorker::Run() { - // Starting by downloading app icon. - DownloadIcon(); -} - -void UpdateShortcutWorker::Observe( - int type, - const content::NotificationSource& source, - const content::NotificationDetails& details) { - DCHECK_EQ(chrome::NOTIFICATION_TAB_CLOSING, type); - - if (web_contents_ && - content::Source<NavigationController>(source).ptr() == - &web_contents_->GetController()) { - // Underlying tab is closing. - web_contents_ = nullptr; - } -} - -void UpdateShortcutWorker::DownloadIcon() { - // FetchIcon must run on UI thread because it relies on WebContents - // to download the icon. - DCHECK_CURRENTLY_ON(BrowserThread::UI); - - if (!web_contents_) { - DeleteMe(); // We are done if underlying WebContents is gone. - return; - } - - if (unprocessed_icons_.empty()) { - // No app icon. Just use the favicon from WebContents. - UpdateShortcuts(); - return; - } - - int preferred_size = std::max(unprocessed_icons_.back().width, - unprocessed_icons_.back().height); - web_contents_->DownloadImage( - unprocessed_icons_.back().url, - true, // favicon - 0, // no maximum size - false, // normal cache policy - base::Bind(&UpdateShortcutWorker::DidDownloadFavicon, - base::Unretained(this), - preferred_size)); - unprocessed_icons_.pop_back(); -} - -void UpdateShortcutWorker::DidDownloadFavicon( - int requested_size, - int id, - int http_status_code, - const GURL& image_url, - const std::vector<SkBitmap>& bitmaps, - const std::vector<gfx::Size>& original_sizes) { - if (!web_contents_) { - DeleteMe(); // We are done if underlying WebContents is gone. - return; - } - - std::vector<int> requested_sizes_in_pixel; - requested_sizes_in_pixel.push_back(requested_size); - - std::vector<size_t> closest_indices; - SelectFaviconFrameIndices( - original_sizes, requested_sizes_in_pixel, &closest_indices, NULL); - - SkBitmap bitmap; - if (!bitmaps.empty()) { - size_t closest_index = closest_indices[0]; - bitmap = bitmaps[closest_index]; - } - - if (!bitmap.isNull()) { - // Update icon with download image and update shortcut. - shortcut_info_->favicon.Add(gfx::Image::CreateFrom1xBitmap(bitmap)); - extensions::TabHelper* extensions_tab_helper = - extensions::TabHelper::FromWebContents(web_contents_); - extensions_tab_helper->SetAppIcon(bitmap); - UpdateShortcuts(); - } else { - // Try the next icon otherwise. - DownloadIcon(); - } -} - -void UpdateShortcutWorker::CheckExistingShortcuts() { - DCHECK_CURRENTLY_ON(BrowserThread::FILE); - - // Locations to check to shortcut_paths. - struct { - int location_id; - const wchar_t* sub_dir; - } locations[] = { - { - base::DIR_USER_DESKTOP, - NULL - }, { - base::DIR_START_MENU, - NULL - }, { - // For Win7, create_in_quick_launch_bar means pinning to taskbar. - base::DIR_APP_DATA, - L"Microsoft\\Internet Explorer\\Quick Launch\\User Pinned\\TaskBar" - } - }; - - for (size_t i = 0; i < arraysize(locations); ++i) { - base::FilePath path; - if (!PathService::Get(locations[i].location_id, &path)) { - NOTREACHED(); - continue; - } - - if (locations[i].sub_dir != NULL) - path = path.Append(locations[i].sub_dir); - - base::FilePath shortcut_file = path.Append(file_name_). - ReplaceExtension(FILE_PATH_LITERAL(".lnk")); - if (base::PathExists(shortcut_file)) { - shortcut_files_.push_back(shortcut_file); - } - } -} - -void UpdateShortcutWorker::UpdateShortcuts() { - BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, - base::Bind(&UpdateShortcutWorker::UpdateShortcutsOnFileThread, - base::Unretained(this))); -} - -void UpdateShortcutWorker::UpdateShortcutsOnFileThread() { - DCHECK_CURRENTLY_ON(BrowserThread::FILE); - - base::FilePath web_app_path = web_app::GetWebAppDataDirectory( - profile_path_, shortcut_info_->extension_id, shortcut_info_->url); - - // Ensure web_app_path exists. web_app_path could be missing for a legacy - // shortcut created by Gears. - if (!base::PathExists(web_app_path) && - !base::CreateDirectory(web_app_path)) { - NOTREACHED(); - return; - } - - base::FilePath icon_file = - web_app::internals::GetIconFilePath(web_app_path, shortcut_info_->title); - web_app::internals::CheckAndSaveIcon(icon_file, shortcut_info_->favicon, - true); - - // Update existing shortcuts' description, icon and app id. - CheckExistingShortcuts(); - if (!shortcut_files_.empty()) { - // Generates app id from web app url and profile path. - base::string16 app_id = shell_integration::win::GetAppModelIdForProfile( - base::UTF8ToWide( - web_app::GenerateApplicationNameFromURL(shortcut_info_->url)), - profile_path_); - - // Sanitize description - if (shortcut_info_->description.length() >= MAX_PATH) - shortcut_info_->description.resize(MAX_PATH - 1); - - for (size_t i = 0; i < shortcut_files_.size(); ++i) { - base::win::ShortcutProperties shortcut_properties; - shortcut_properties.set_target(shortcut_files_[i]); - shortcut_properties.set_description(shortcut_info_->description); - shortcut_properties.set_icon(icon_file, 0); - shortcut_properties.set_app_id(app_id); - base::win::CreateOrUpdateShortcutLink( - shortcut_files_[i], shortcut_properties, - base::win::SHORTCUT_UPDATE_EXISTING); - } - } - - OnShortcutsUpdated(true); -} - -void UpdateShortcutWorker::OnShortcutsUpdated(bool) { - DeleteMe(); // We are done. -} - -void UpdateShortcutWorker::DeleteMe() { - if (BrowserThread::CurrentlyOn(BrowserThread::UI)) { - DeleteMeOnUIThread(); - } else { - BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, - base::Bind(&UpdateShortcutWorker::DeleteMeOnUIThread, - base::Unretained(this))); - } -} - -void UpdateShortcutWorker::DeleteMeOnUIThread() { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - delete this; -} - -} // namespace web_app
diff --git a/chrome/browser/web_applications/update_shortcut_worker_win.h b/chrome/browser/web_applications/update_shortcut_worker_win.h deleted file mode 100644 index 52857b1..0000000 --- a/chrome/browser/web_applications/update_shortcut_worker_win.h +++ /dev/null
@@ -1,91 +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 CHROME_BROWSER_WEB_APPLICATIONS_UPDATE_SHORTCUT_WORKER_WIN_H_ -#define CHROME_BROWSER_WEB_APPLICATIONS_UPDATE_SHORTCUT_WORKER_WIN_H_ - -#include "base/macros.h" -#include "chrome/browser/shell_integration.h" -#include "chrome/browser/web_applications/web_app.h" -#include "content/public/browser/notification_observer.h" -#include "content/public/browser/notification_registrar.h" - -namespace content { -class NotificationDetails; -class NotificationSource; -class WebContents; -} - -namespace web_app { - -// UpdateShortcutWorker holds all context data needed for update shortcut. -// It schedules a pre-update check to find all shortcuts that needs to be -// updated. If there are such shortcuts, it schedules icon download and -// update them when icons are downloaded. It observes TAB_CLOSING notification -// and cancels all the work when the underlying tab is closing. -class UpdateShortcutWorker : public content::NotificationObserver { - public: - explicit UpdateShortcutWorker(content::WebContents* web_contents); - ~UpdateShortcutWorker() override; - - void Run(); - - private: - // Overridden from content::NotificationObserver: - void Observe(int type, - const content::NotificationSource& source, - const content::NotificationDetails& details) override; - - // Downloads icon via the FaviconDriver. - void DownloadIcon(); - - // Favicon download callback. - void DidDownloadFavicon( - int requested_size, - int id, - int http_status_code, - const GURL& image_url, - const std::vector<SkBitmap>& bitmaps, - const std::vector<gfx::Size>& original_bitmap_sizes); - - // Checks if shortcuts exists on desktop, start menu and quick launch. - void CheckExistingShortcuts(); - - // Update shortcut files and icons. - void UpdateShortcuts(); - void UpdateShortcutsOnFileThread(); - - // Callback after shortcuts are updated. - void OnShortcutsUpdated(bool); - - // Deletes the worker on UI thread where it gets created. - void DeleteMe(); - void DeleteMeOnUIThread(); - - content::NotificationRegistrar registrar_; - - // Underlying WebContents whose shortcuts will be updated. - content::WebContents* web_contents_; - - // Icons info from web_contents_'s web app data. - web_app::IconInfoList unprocessed_icons_; - - // Cached shortcut data from the web_contents_. - std::unique_ptr<web_app::ShortcutInfo> shortcut_info_; - - // Our copy of profile path. - base::FilePath profile_path_; - - // File name of shortcut/ico file based on app title. - base::FilePath file_name_; - - // Existing shortcuts. - std::vector<base::FilePath> shortcut_files_; - - DISALLOW_COPY_AND_ASSIGN(UpdateShortcutWorker); -}; - -} // namespace web_app - -#endif // CHROME_BROWSER_WEB_APPLICATIONS_UPDATE_SHORTCUT_WORKER_WIN_H_
diff --git a/chrome/browser/web_applications/web_app.cc b/chrome/browser/web_applications/web_app.cc index 6f2a856..2188351 100644 --- a/chrome/browser/web_applications/web_app.cc +++ b/chrome/browser/web_applications/web_app.cc
@@ -48,11 +48,6 @@ #include "ui/gfx/icon_util.h" #endif -#if defined(TOOLKIT_VIEWS) -#include "chrome/browser/extensions/tab_helper.h" -#include "components/favicon/content/content_favicon_driver.h" -#endif - using content::BrowserThread; namespace { @@ -73,14 +68,6 @@ const size_t kNumDesiredSizes = arraysize(kDesiredSizes); #endif -#if defined(TOOLKIT_VIEWS) -// Predicator for sorting images from largest to smallest. -bool IconPrecedes(const WebApplicationInfo::IconInfo& left, - const WebApplicationInfo::IconInfo& right) { - return left.width < right.width; -} -#endif - base::FilePath GetShortcutDataDir(const web_app::ShortcutInfo& shortcut_info) { return web_app::GetWebAppDataDirectory(shortcut_info.profile_path, shortcut_info.extension_id, @@ -219,41 +206,6 @@ in_quick_launch_bar(false) { } -#if defined(TOOLKIT_VIEWS) -std::unique_ptr<ShortcutInfo> GetShortcutInfoForTab( - content::WebContents* web_contents) { - const favicon::FaviconDriver* favicon_driver = - favicon::ContentFaviconDriver::FromWebContents(web_contents); - const extensions::TabHelper* extensions_tab_helper = - extensions::TabHelper::FromWebContents(web_contents); - const WebApplicationInfo& app_info = extensions_tab_helper->web_app_info(); - - std::unique_ptr<ShortcutInfo> info(new ShortcutInfo); - info->url = app_info.app_url.is_empty() ? web_contents->GetURL() : - app_info.app_url; - info->title = app_info.title.empty() ? - (web_contents->GetTitle().empty() ? base::UTF8ToUTF16(info->url.spec()) : - web_contents->GetTitle()) : - app_info.title; - info->description = app_info.description; - // Even though GetFavicon returns a gfx::Image, we *deliberately* call - // AsImageSkia to get the internal ImageSkia, then construct a new gfx::Image. - // This ensures the ShortcutInfo's favicon does not share a backing store with - // |web_contents|, which would not be thread safe. https://crbug.com/596348. - info->favicon.Add(favicon_driver->GetFavicon().AsImageSkia()); - - Profile* profile = - Profile::FromBrowserContext(web_contents->GetBrowserContext()); - info->profile_path = profile->GetPath(); - - return info; -} -#endif - -#if !defined(OS_WIN) -void UpdateShortcutForTabContents(content::WebContents* web_contents) {} -#endif - std::unique_ptr<ShortcutInfo> ShortcutInfoForExtensionAndProfile( const extensions::Extension* app, Profile* profile) { @@ -515,23 +467,6 @@ return false; } -#if defined(TOOLKIT_VIEWS) -void GetIconsInfo(const WebApplicationInfo& app_info, - IconInfoList* icons) { - DCHECK(icons); - - icons->clear(); - for (size_t i = 0; i < app_info.icons.size(); ++i) { - // We only take square shaped icons (i.e. width == height). - if (app_info.icons[i].width == app_info.icons[i].height) { - icons->push_back(app_info.icons[i]); - } - } - - std::sort(icons->begin(), icons->end(), &IconPrecedes); -} -#endif - #if defined(OS_LINUX) std::string GetWMClassFromAppName(std::string app_name) { base::i18n::ReplaceIllegalCharactersInPath(&app_name, '_');
diff --git a/chrome/browser/web_applications/web_app.h b/chrome/browser/web_applications/web_app.h index 7a341c88..7ca1f3b4 100644 --- a/chrome/browser/web_applications/web_app.h +++ b/chrome/browser/web_applications/web_app.h
@@ -23,10 +23,6 @@ class TaskRunner; } -namespace content { -class WebContents; -} - namespace extensions { class Extension; } @@ -130,21 +126,6 @@ typedef base::Callback<void(std::unique_ptr<ShortcutInfo>)> ShortcutInfoCallback; -#if defined(TOOLKIT_VIEWS) -// Extracts shortcut info of the given WebContents. The result's |favicon| -// member does *not* share a backing store with |web_contents| (so it is -// safe to use it on another thread). -std::unique_ptr<ShortcutInfo> GetShortcutInfoForTab( - content::WebContents* web_contents); -#endif - -// Updates web app shortcut of the WebContents. This function checks and -// updates web app icon and shortcuts if needed. For icon, the check is based -// on MD5 hash of icon image. For shortcuts, it checks the desktop, start menu -// and quick launch (as well as pinned shortcut) for shortcut and only -// updates (recreates) them if they exits. -void UpdateShortcutForTabContents(content::WebContents* web_contents); - std::unique_ptr<ShortcutInfo> ShortcutInfoForExtensionAndProfile( const extensions::Extension* app, Profile* profile); @@ -223,13 +204,6 @@ // Returns true if given url is a valid web app url. bool IsValidUrl(const GURL& url); -#if defined(TOOLKIT_VIEWS) -// Extracts icons info from web app data. Take only square shaped icons and -// sort them from smallest to largest. -typedef std::vector<WebApplicationInfo::IconInfo> IconInfoList; -void GetIconsInfo(const WebApplicationInfo& app_info, IconInfoList* icons); -#endif - #if defined(OS_LINUX) // Windows that correspond to web apps need to have a deterministic (and // different) WMClass than normal chrome windows so the window manager groups
diff --git a/chrome/browser/web_applications/web_app_unittest.cc b/chrome/browser/web_applications/web_app_unittest.cc index e42e5f4..9fce522 100644 --- a/chrome/browser/web_applications/web_app_unittest.cc +++ b/chrome/browser/web_applications/web_app_unittest.cc
@@ -32,29 +32,6 @@ } }; -#if defined(TOOLKIT_VIEWS) -TEST_F(WebApplicationTest, GetShortcutInfoForTab) { - const base::string16 title = base::ASCIIToUTF16("TEST_TITLE"); - const base::string16 description = base::ASCIIToUTF16("TEST_DESCRIPTION"); - const GURL url("http://www.foo.com/bar"); - WebApplicationInfo web_app_info; - web_app_info.title = title; - web_app_info.description = description; - web_app_info.app_url = url; - - content::RenderFrameHostTester::For(main_rfh()) - ->InitializeRenderFrameIfNeeded(); - content::RenderFrameHostTester::TestOnMessageReceived( - main_rfh(), ChromeFrameHostMsg_DidGetWebApplicationInfo(0, web_app_info)); - std::unique_ptr<web_app::ShortcutInfo> info = - web_app::GetShortcutInfoForTab(web_contents()); - - EXPECT_EQ(title, info->title); - EXPECT_EQ(description, info->description); - EXPECT_EQ(url, info->url); -} -#endif - #if BUILDFLAG(ENABLE_EXTENSIONS) TEST_F(WebApplicationTest, AppDirWithId) { base::FilePath profile_path(FILE_PATH_LITERAL("profile"));
diff --git a/chrome/browser/web_applications/web_app_win.cc b/chrome/browser/web_applications/web_app_win.cc index 0b6ee7b..a958b67 100644 --- a/chrome/browser/web_applications/web_app_win.cc +++ b/chrome/browser/web_applications/web_app_win.cc
@@ -24,7 +24,6 @@ #include "base/win/shortcut.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/shell_integration_win.h" -#include "chrome/browser/web_applications/update_shortcut_worker_win.h" #include "chrome/common/chrome_switches.h" #include "chrome/installer/util/browser_distribution.h" #include "chrome/installer/util/shell_util.h" @@ -606,10 +605,4 @@ } // namespace internals -void UpdateShortcutForTabContents(content::WebContents* web_contents) { - // UpdateShortcutWorker will delete itself when it's done. - UpdateShortcutWorker* worker = new UpdateShortcutWorker(web_contents); - worker->Run(); -} - } // namespace web_app
diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn index c6992ca..e3dc174 100644 --- a/chrome/common/BUILD.gn +++ b/chrome/common/BUILD.gn
@@ -443,6 +443,7 @@ if (is_win) { deps = [ "//chrome/common/win:eventlog_messages", + "//components/crash/content/app:crash_export_thunk_include", ] public_deps += [
diff --git a/chrome/common/DEPS b/chrome/common/DEPS index 72f1721..6c7a6d5 100644 --- a/chrome/common/DEPS +++ b/chrome/common/DEPS
@@ -9,6 +9,7 @@ "+components/cdm/common", "+components/cloud_devices/common", "+components/content_settings/core/common", + "+components/crash/content/app", "+components/crash/core/common", "+components/crx_file", "+components/data_reduction_proxy/core/common",
diff --git a/chrome/common/child_process_logging_win.cc b/chrome/common/child_process_logging_win.cc index 1b9ae2f..e434d073 100644 --- a/chrome/common/child_process_logging_win.cc +++ b/chrome/common/child_process_logging_win.cc
@@ -13,42 +13,20 @@ #include "chrome/common/chrome_constants.h" #include "chrome/common/crash_keys.h" #include "chrome/installer/util/google_update_settings.h" +#include "components/crash/content/app/crash_export_thunks.h" #include "components/metrics/client_info.h" namespace child_process_logging { namespace { -// exported in components/crash/content/app/crashpad.cc: -// void __declspec(dllexport) __cdecl SetCrashKeyValueImplEx. -typedef void(__cdecl* SetCrashKeyValue)(const char*, const char*); - -// exported in components/crash/content/app/crashpad.cc: -// void __declspec(dllexport) __cdecl ClearCrashKeyValueImplEx. -typedef void(__cdecl* ClearCrashKeyValue)(const char*); - void SetCrashKeyValueTrampoline(const base::StringPiece& key, const base::StringPiece& value) { - static SetCrashKeyValue set_crash_key = []() { - HMODULE elf_module = GetModuleHandle(chrome::kChromeElfDllName); - return reinterpret_cast<SetCrashKeyValue>( - elf_module ? GetProcAddress(elf_module, "SetCrashKeyValueImplEx") - : nullptr); - }(); - if (set_crash_key) { - (set_crash_key)(key.data(), value.data()); - } + SetCrashKeyValueImplEx(key.data(), value.data()); } void ClearCrashKeyValueTrampoline(const base::StringPiece& key) { - static ClearCrashKeyValue clear_crash_key = []() { - HMODULE elf_module = GetModuleHandle(chrome::kChromeElfDllName); - return reinterpret_cast<ClearCrashKeyValue>( - elf_module ? GetProcAddress(elf_module, "ClearCrashKeyValueImplEx") - : nullptr); - }(); - if (clear_crash_key) - (clear_crash_key)(key.data()); + ClearCrashKeyValueImplEx(key.data()); } } // namespace
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc index 20fc171..c7f949e2 100644 --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc
@@ -309,7 +309,7 @@ #if BUILDFLAG(ENABLE_NATIVE_WINDOW_NAV_BUTTONS) const base::Feature kNativeWindowNavButtons{"NativeWindowNavButtons", - base::FEATURE_DISABLED_BY_DEFAULT}; + base::FEATURE_ENABLED_BY_DEFAULT}; #endif // BUILDFLAG(ENABLE_NATIVE_WINDOW_NAV_BUTTONS) const base::Feature kNetworkPrediction{"NetworkPrediction",
diff --git a/chrome/common/conflicts/module_watcher_win.cc b/chrome/common/conflicts/module_watcher_win.cc index f9bbe2e..eee0a72 100644 --- a/chrome/common/conflicts/module_watcher_win.cc +++ b/chrome/common/conflicts/module_watcher_win.cc
@@ -119,13 +119,14 @@ // static std::unique_ptr<ModuleWatcher> ModuleWatcher::Create( OnModuleEventCallback callback) { - // If a ModuleWatcher already exists then bail out. - base::AutoLock lock(g_module_watcher_lock.Get()); - if (g_module_watcher_instance) - return nullptr; - - // This thread acquired the right to create a ModuleWatcher, so do so. - g_module_watcher_instance = new ModuleWatcher(std::move(callback)); + { + base::AutoLock lock(g_module_watcher_lock.Get()); + // If a ModuleWatcher already exists then bail out. + if (g_module_watcher_instance) + return nullptr; + g_module_watcher_instance = new ModuleWatcher(); + } + g_module_watcher_instance->Initialize(std::move(callback)); return base::WrapUnique(g_module_watcher_instance); } @@ -138,7 +139,16 @@ UnregisterDllNotificationCallback(); } +// Initializes the ModuleWatcher instance. +void ModuleWatcher::Initialize(OnModuleEventCallback callback) { + callback_ = std::move(callback); + RegisterDllNotificationCallback(); + EnumerateAlreadyLoadedModules(); +} + void ModuleWatcher::RegisterDllNotificationCallback() { + // It's safe to pass the return value of ::GetModuleHandle() directly to + // ::GetProcAddress() because ntdll is guaranteed to be loaded. LdrRegisterDllNotificationFunc reg_fn = reinterpret_cast<LdrRegisterDllNotificationFunc>(::GetProcAddress( ::GetModuleHandle(kNtDll), kLdrRegisterDllNotification)); @@ -147,6 +157,8 @@ } void ModuleWatcher::UnregisterDllNotificationCallback() { + // It's safe to pass the return value of ::GetModuleHandle() directly to + // ::GetProcAddress() because ntdll is guaranteed to be loaded. LdrUnregisterDllNotificationFunc unreg_fn = reinterpret_cast<LdrUnregisterDllNotificationFunc>(::GetProcAddress( ::GetModuleHandle(kNtDll), kLdrUnregisterDllNotification)); @@ -160,7 +172,7 @@ // ERROR_BAD_LENGTH. To avoid locking up here a retry limit is enforced. base::win::ScopedHandle snap; DWORD process_id = ::GetCurrentProcessId(); - for (size_t i = 0; i < 5; ++i) { + for (int i = 0; i < 5; ++i) { snap.Set(::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, process_id)); if (snap.IsValid()) @@ -180,8 +192,6 @@ module.modBaseSize); callback_.Run(event); } - - return; } // static @@ -219,8 +229,4 @@ } } -ModuleWatcher::ModuleWatcher(OnModuleEventCallback callback) - : callback_(std::move(callback)) { - RegisterDllNotificationCallback(); - EnumerateAlreadyLoadedModules(); -} +ModuleWatcher::ModuleWatcher() = default;
diff --git a/chrome/common/conflicts/module_watcher_win.h b/chrome/common/conflicts/module_watcher_win.h index 4140474..a4191d8 100644 --- a/chrome/common/conflicts/module_watcher_win.h +++ b/chrome/common/conflicts/module_watcher_win.h
@@ -40,18 +40,30 @@ mojom::ModuleEventType event_type; // The full path to the module on disk. base::FilePath module_path; - // The load address of the module. + // The load address of the module. Careful consideration must be made before + // accessing memory at this address. See the comment for + // OnModuleEventCallback. void* module_load_address; // The size of the module in memory. size_t module_size; }; - // The type of callback that will be invoked for each module event. This is - // invoked by the loader and potentially on any thread. The loader lock is not - // held but the execution of this callback blocks the module from being bound. - // Keep the amount of work performed here to an absolute minimum. Note that - // it is possible for this callback to be invoked after the destruction of the - // watcher, but very unlikely. + // The type of callback that will be invoked for each module event. This + // callback may be run from any thread in the process, and may be invoked + // during initialization (while iterating over already loaded modules) or in + // response to LdrDllNotifications received from the loader. As such, keep the + // amount of work performed here to an absolute minimum. + // + // MODULE_LOADED events are always dispatched directly from the loader while + // under the loader's lock, so the module is guaranteed to be loaded in memory + // (it is safe to access module_load_address). + // + // If the event is of type MODULE_ALREADY_LOADED, then the module data comes + // from a snapshot and it is possible that its |module_load_address| is + // invalid by the time the event is sent. + // + // Note that it is possible for this callback to be invoked after the + // destruction of the watcher. using OnModuleEventCallback = base::Callback<void(const ModuleEvent& event)>; // Creates and starts a watcher. This enumerates all loaded modules @@ -73,10 +85,13 @@ // provided to the constructor will no longer be invoked with module events. ~ModuleWatcher(); - protected: + private: // For unittesting. friend class ModuleWatcherTest; + // Initializes the ModuleWatcher instance. + void Initialize(OnModuleEventCallback callback); + // Registers a DllNotification callback with the OS. Modifies // |dll_notification_cookie_|. Can be called on any thread. void RegisterDllNotificationCallback(); @@ -103,9 +118,8 @@ const LDR_DLL_NOTIFICATION_DATA* notification_data, void* context); - private: // Private to enforce Singleton semantics. See Create above. - explicit ModuleWatcher(OnModuleEventCallback callback); + ModuleWatcher(); // The current callback. Can end up being invoked on any thread. OnModuleEventCallback callback_;
diff --git a/chrome/common/extensions/api/autotest_private.idl b/chrome/common/extensions/api/autotest_private.idl index 9f2191b..1a45117 100644 --- a/chrome/common/extensions/api/autotest_private.idl +++ b/chrome/common/extensions/api/autotest_private.idl
@@ -126,6 +126,10 @@ // |right|: if set, swap the primary mouse button. static void setPrimaryButtonRight(boolean right); + // Turn on/off reverse scrolling for mice. + // |enabled|: if set, enable reverse scrolling. + static void setMouseReverseScroll(boolean enabled); + // Get visible notifications on the system. static void getVisibleNotifications(NotificationArrayCallback callback);
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc index df1af01..5dace04 100644 --- a/chrome/common/pref_names.cc +++ b/chrome/common/pref_names.cc
@@ -539,6 +539,10 @@ // A boolean pref set to true if primary mouse button is the left button. const char kPrimaryMouseButtonRight[] = "settings.mouse.primary_right"; +// A boolean pref set to true if turning the mouse wheel toward the user should +// result in scrolling up instead of the more common scrolling down. +const char kMouseReverseScroll[] = "settings.mouse.reverse_scroll"; + // A integer pref for the touchpad sensitivity. const char kMouseSensitivity[] = "settings.mouse.sensitivity2";
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h index 3dcccee..a891eca 100644 --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h
@@ -206,6 +206,7 @@ extern const char kEnableTouchpadThreeFingerClick[]; extern const char kNaturalScroll[]; extern const char kPrimaryMouseButtonRight[]; +extern const char kMouseReverseScroll[]; extern const char kMouseSensitivity[]; extern const char kTouchpadSensitivity[]; extern const char kUse24HourClock[];
diff --git a/chrome/profiling/memlog_connection_manager.cc b/chrome/profiling/memlog_connection_manager.cc index adf80a6..4e1b043 100644 --- a/chrome/profiling/memlog_connection_manager.cc +++ b/chrome/profiling/memlog_connection_manager.cc
@@ -6,6 +6,7 @@ #include "base/bind.h" #include "base/memory/ptr_util.h" +#include "base/message_loop/message_loop.h" #include "base/strings/stringprintf.h" #include "base/threading/sequenced_task_runner_handle.h" #include "base/threading/thread.h"
diff --git a/chrome/renderer/safe_browsing/phishing_classifier_browsertest.cc b/chrome/renderer/safe_browsing/phishing_classifier_browsertest.cc index 3bac8333..6d3b9f1 100644 --- a/chrome/renderer/safe_browsing/phishing_classifier_browsertest.cc +++ b/chrome/renderer/safe_browsing/phishing_classifier_browsertest.cc
@@ -9,6 +9,7 @@ #include <utility> #include "base/bind.h" +#include "base/run_loop.h" #include "base/strings/string16.h" #include "base/strings/utf_string_conversions.h" #include "chrome/common/safe_browsing/client_model.pb.h"
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index d73588ba..fe3f212a 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -4686,6 +4686,7 @@ "../browser/ui/cocoa/fullscreen_low_power_coordinator_unittest.mm", "../browser/ui/cocoa/fullscreen_window_unittest.mm", "../browser/ui/cocoa/gradient_button_cell_unittest.mm", + "../browser/ui/cocoa/harmony_button_unittest.mm", "../browser/ui/cocoa/history_menu_bridge_unittest.mm", "../browser/ui/cocoa/history_menu_cocoa_controller_unittest.mm", "../browser/ui/cocoa/history_overlay_controller_unittest.mm", @@ -4712,6 +4713,7 @@ "../browser/ui/cocoa/location_bar/security_state_bubble_decoration_unittest.mm", "../browser/ui/cocoa/location_bar/selected_keyword_decoration_unittest.mm", "../browser/ui/cocoa/location_bar/zoom_decoration_unittest.mm", + "../browser/ui/cocoa/md_hover_button_unittest.mm", "../browser/ui/cocoa/media_picker/desktop_media_picker_controller_unittest.mm", "../browser/ui/cocoa/menu_button_unittest.mm", "../browser/ui/cocoa/notifications/notification_builder_mac_unittest.mm",
diff --git a/chrome/test/android/BUILD.gn b/chrome/test/android/BUILD.gn index 297c7e44..a4bb870d 100644 --- a/chrome/test/android/BUILD.gn +++ b/chrome/test/android/BUILD.gn
@@ -53,7 +53,6 @@ "javatests/src/org/chromium/chrome/test/util/browser/tabmodel/MockTabModelSelector.java", "javatests/src/org/chromium/chrome/test/util/browser/TabTitleObserver.java", "javatests/src/org/chromium/chrome/test/util/browser/WebappTestPage.java", - "javatests/src/org/chromium/chrome/test/util/ChromeDisableIf.java", "javatests/src/org/chromium/chrome/test/util/ChromeRestriction.java", "javatests/src/org/chromium/chrome/test/util/ChromeSigninUtils.java", "javatests/src/org/chromium/chrome/test/util/ChromeTabUtils.java", @@ -100,5 +99,6 @@ "//third_party/jsr-305:jsr_305_javalib", "//third_party/junit", "//ui/android:ui_java", + "//ui/android:ui_java_test_support", ] }
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeInstrumentationTestRunner.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeInstrumentationTestRunner.java index f8873f4..5765f25a 100644 --- a/chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeInstrumentationTestRunner.java +++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeInstrumentationTestRunner.java
@@ -15,16 +15,13 @@ import org.chromium.base.ThreadUtils; import org.chromium.base.test.BaseChromiumInstrumentationTestRunner; import org.chromium.base.test.BaseTestResult; -import org.chromium.base.test.util.DisableIfSkipCheck; import org.chromium.base.test.util.RestrictionSkipCheck; import org.chromium.chrome.browser.ChromeVersionInfo; import org.chromium.chrome.browser.vr_shell.VrClassesWrapper; import org.chromium.chrome.browser.vr_shell.VrDaydreamApi; -import org.chromium.chrome.test.util.ChromeDisableIf; import org.chromium.chrome.test.util.ChromeRestriction; import org.chromium.content.browser.test.ChildProcessAllocatorSettingsHook; import org.chromium.policy.test.annotations.Policies; -import org.chromium.ui.base.DeviceFormFactor; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; @@ -47,7 +44,6 @@ protected void addTestHooks(BaseTestResult result) { super.addTestHooks(result); result.addSkipCheck(new ChromeRestrictionSkipCheck(getTargetContext())); - result.addSkipCheck(new ChromeDisableIfSkipCheck(getTargetContext())); result.addPreTestHook(Policies.getRegistrationHook()); result.addPreTestHook(new ChildProcessAllocatorSettingsHook()); @@ -118,14 +114,6 @@ @Override protected boolean restrictionApplies(String restriction) { - if (TextUtils.equals(restriction, ChromeRestriction.RESTRICTION_TYPE_PHONE) - && DeviceFormFactor.isTablet()) { - return true; - } - if (TextUtils.equals(restriction, ChromeRestriction.RESTRICTION_TYPE_TABLET) - && !DeviceFormFactor.isTablet()) { - return true; - } if (TextUtils.equals( restriction, ChromeRestriction.RESTRICTION_TYPE_GOOGLE_PLAY_SERVICES) && (ConnectionResult.SUCCESS @@ -172,27 +160,4 @@ return false; } } - - static class ChromeDisableIfSkipCheck extends DisableIfSkipCheck { - private final Context mTargetContext; - - public ChromeDisableIfSkipCheck(Context targetContext) { - mTargetContext = targetContext; - } - - @Override - protected boolean deviceTypeApplies(String type) { - if (TextUtils.equals(type, ChromeDisableIf.PHONE) && !DeviceFormFactor.isTablet()) { - return true; - } - if (TextUtils.equals(type, ChromeDisableIf.TABLET) && DeviceFormFactor.isTablet()) { - return true; - } - if (TextUtils.equals(type, ChromeDisableIf.LARGETABLET) - && DeviceFormFactor.isLargeTablet(mTargetContext)) { - return true; - } - return false; - } - } }
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeJUnit4ClassRunner.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeJUnit4ClassRunner.java index 6457715..f0ab4e0 100644 --- a/chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeJUnit4ClassRunner.java +++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeJUnit4ClassRunner.java
@@ -13,10 +13,11 @@ import org.chromium.base.test.BaseTestResult.PreTestHook; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.SkipCheck; -import org.chromium.chrome.test.ChromeInstrumentationTestRunner.ChromeDisableIfSkipCheck; import org.chromium.chrome.test.ChromeInstrumentationTestRunner.ChromeRestrictionSkipCheck; import org.chromium.content.browser.test.ChildProcessAllocatorSettingsHook; import org.chromium.policy.test.annotations.Policies; +import org.chromium.ui.test.util.UiDisableIfSkipCheck; +import org.chromium.ui.test.util.UiRestrictionSkipCheck; import java.util.List; @@ -36,7 +37,8 @@ private static List<SkipCheck> defaultSkipChecks() { return CollectionUtil.newArrayList( new ChromeRestrictionSkipCheck(InstrumentationRegistry.getTargetContext()), - new ChromeDisableIfSkipCheck(InstrumentationRegistry.getTargetContext())); + new UiRestrictionSkipCheck(InstrumentationRegistry.getTargetContext()), + new UiDisableIfSkipCheck(InstrumentationRegistry.getTargetContext())); } private static List<PreTestHook> defaultPreTestHooks() {
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/ChromeDisableIf.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/ChromeDisableIf.java deleted file mode 100644 index 24bb7c99..0000000 --- a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/ChromeDisableIf.java +++ /dev/null
@@ -1,19 +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. - -package org.chromium.chrome.test.util; - -/** - * Disable if enums that are usable with the @DisableIf but in the chrome/ layer. - * - * e.g. @DisableIf.Device({ChromeDisableIf.PHONE}) - */ -public final class ChromeDisableIf { - /** Specifies the test is disabled if on phone form factors. */ - public static final String PHONE = "Phone"; - /** Specifies the test is disabled if on tablet form factors. */ - public static final String TABLET = "Tablet"; - /** Specifies the test is disabled if on large tablet form factors. */ - public static final String LARGETABLET = "LargeTablet"; -}
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/ChromeRestriction.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/ChromeRestriction.java index 48e3454..05237f5f 100644 --- a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/ChromeRestriction.java +++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/ChromeRestriction.java
@@ -11,10 +11,6 @@ public final class ChromeRestriction { /** Specifies the test is only valid on a device that has up to date play services. */ public static final String RESTRICTION_TYPE_GOOGLE_PLAY_SERVICES = "Google_Play_Services"; - /** Specifies the test is only valid on phone form factors. */ - public static final String RESTRICTION_TYPE_PHONE = "Phone"; - /** Specifies the test is only valid on tablet form factors. */ - public static final String RESTRICTION_TYPE_TABLET = "Tablet"; /** Specifies the test is only valid on official build. */ public static final String RESTRICTION_TYPE_OFFICIAL_BUILD = "Official_Build"; /** Specifies the test is only valid on a Daydream-ready device */
diff --git a/chrome/test/base/interactive_test_utils_mac.mm b/chrome/test/base/interactive_test_utils_mac.mm index 42ee5f27..69711fe 100644 --- a/chrome/test/base/interactive_test_utils_mac.mm +++ b/chrome/test/base/interactive_test_utils_mac.mm
@@ -8,6 +8,7 @@ #import <Cocoa/Cocoa.h> #include "base/message_loop/message_loop.h" +#include "base/run_loop.h" #include "chrome/app/chrome_command_ids.h" #import "ui/base/test/windowed_nsnotification_observer.h"
diff --git a/chrome/test/data/extensions/api_test/autotest_private/test.js b/chrome/test/data/extensions/api_test/autotest_private/test.js index 04998278..158197e 100644 --- a/chrome/test/data/extensions/api_test/autotest_private/test.js +++ b/chrome/test/data/extensions/api_test/autotest_private/test.js
@@ -105,6 +105,10 @@ chrome.autotestPrivate.setPrimaryButtonRight(false); chrome.test.succeed(); }, + function setMouseReverseScroll() { + chrome.autotestPrivate.setMouseReverseScroll(true); + chrome.test.succeed(); + }, function getVisibleNotifications() { chrome.autotestPrivate.getVisibleNotifications(function(){}); chrome.test.succeed();
diff --git a/chrome/test/data/webui/md_bookmarks/toolbar_test.js b/chrome/test/data/webui/md_bookmarks/toolbar_test.js index 320c2429..f7c4788 100644 --- a/chrome/test/data/webui/md_bookmarks/toolbar_test.js +++ b/chrome/test/data/webui/md_bookmarks/toolbar_test.js
@@ -21,6 +21,7 @@ '6', [ createItem('61'), + createItem('62'), ]), ])); store = new bookmarks.TestStore({ @@ -53,7 +54,7 @@ }); test('overlay does not show when editing is disabled', function() { - store.data.prefs.canEdit = false + store.data.prefs.canEdit = false; store.data.selection.items = new Set(['2', '3']); store.notifyObservers(); assertFalse(toolbar.showSelectionOverlay); @@ -128,16 +129,27 @@ assertFalse(toolbar.canSortFolder_); assertTrue(toolbar.$$('#sortButton').disabled); - // Adding a bookmark should enable sorting. + // Adding 2 bookmarks should enable sorting. store.setReducersEnabled(true); - var item = { + var item1 = { id: '51', parentId: '5', index: 0, url: 'https://www.example.com', }; store.dispatch(bookmarks.actions.createBookmark( - item.id, item)); + item1.id, item1)); + assertFalse(toolbar.canSortFolder_); + assertTrue(toolbar.$$('#sortButton').disabled); + + var item2 = { + id: '52', + parentId: '5', + index: 1, + url: 'https://www.example.com', + }; + store.dispatch(bookmarks.actions.createBookmark( + item2.id, item2)); assertTrue(toolbar.canSortFolder_); assertFalse(toolbar.$$('#sortButton').disabled); });
diff --git a/chrome/test/data/webui/settings/device_page_tests.js b/chrome/test/data/webui/settings/device_page_tests.js index ca86845..e4a178e1 100644 --- a/chrome/test/data/webui/settings/device_page_tests.js +++ b/chrome/test/data/webui/settings/device_page_tests.js
@@ -280,6 +280,11 @@ type: chrome.settingsPrivate.PrefType.BOOLEAN, value: false, }, + reverse_scroll: { + key: 'settings.mouse.reverse_scroll', + type: chrome.settingsPrivate.PrefType.BOOLEAN, + value: false, + }, sensitivity2: { key: 'settings.mouse.sensitivity2', type: chrome.settingsPrivate.PrefType.NUMBER,
diff --git a/chrome/test/media_router/media_router_base_browsertest.cc b/chrome/test/media_router/media_router_base_browsertest.cc index 9550333..557985c8 100644 --- a/chrome/test/media_router/media_router_base_browsertest.cc +++ b/chrome/test/media_router/media_router_base_browsertest.cc
@@ -8,6 +8,7 @@ #include "base/command_line.h" #include "base/location.h" #include "base/path_service.h" +#include "base/run_loop.h" #include "base/single_thread_task_runner.h" #include "base/threading/thread_task_runner_handle.h" #include "base/timer/elapsed_timer.h" @@ -19,7 +20,6 @@ #include "extensions/browser/process_manager.h" #include "extensions/common/switches.h" - namespace { // Command line argument to specify unpacked extension location. const char kExtensionUnpacked[] = "extension-unpacked";
diff --git a/chromecast/media/cma/backend/alsa/filter_group_unittest.cc b/chromecast/media/cma/backend/alsa/filter_group_unittest.cc index b3a920e3..2daf3a4 100644 --- a/chromecast/media/cma/backend/alsa/filter_group_unittest.cc +++ b/chromecast/media/cma/backend/alsa/filter_group_unittest.cc
@@ -5,6 +5,7 @@ #include "chromecast/media/cma/backend/alsa/filter_group.h" #include "base/memory/ptr_util.h" +#include "base/message_loop/message_loop.h" #include "chromecast/media/cma/backend/alsa/stream_mixer_alsa.h" #include "media/base/audio_bus.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chromecast/media/cma/backend/android/volume_control_android.cc b/chromecast/media/cma/backend/android/volume_control_android.cc index 15ba370..118f28f 100644 --- a/chromecast/media/cma/backend/android/volume_control_android.cc +++ b/chromecast/media/cma/backend/android/volume_control_android.cc
@@ -47,6 +47,66 @@ VolumeMap::VolumeMap() { // TODO(ckuiper): Load active volume table from Android. volume_map_.insert(volume_map_.end(), kDefaultVolumeMap, + kDefaultVolumeMap + arraysize(kDefaultVolumeMap)); +} + +VolumeMap::~VolumeMap() {} + +float VolumeMap::VolumeToDbFS(float volume) { + if (volume <= volume_map_[0].level) { + return volume_map_[0].db; + } + for (size_t i = 1; i < volume_map_.size(); ++i) { + if (volume < volume_map_[i].level) { + const float x_range = volume_map_[i].level - volume_map_[i - 1].level; + const float y_range = volume_map_[i].db - volume_map_[i - 1].db; + const float x_pos = volume - volume_map_[i - 1].level; + + return volume_map_[i - 1].db + x_pos * y_range / x_range; + } + } + return volume_map_[volume_map_.size() - 1].db; +} + +float VolumeMap::DbFSToVolume(float db) { + if (db <= volume_map_[0].db) { + return volume_map_[0].level; + } + for (size_t i = 1; i < volume_map_.size(); ++i) { + if (db < volume_map_[i].db) { + const float x_range = volume_map_[i].db - volume_map_[i - 1].db; + const float y_range = volume_map_[i].level - volume_map_[i - 1].level; + const float x_pos = db - volume_map_[i - 1].db; + + return volume_map_[i - 1].level + x_pos * y_range / x_range; + } + } + return volume_map_[volume_map_.size() - 1].level; +} + +VolumeControlAndroid::VolumeControlAndroid() + : thread_("VolumeControl"), + initialize_complete_event_( + base::WaitableEvent::ResetPolicy::MANUAL, + base::WaitableEvent::InitialState::NOT_SIGNALED) { + DCHECK(j_volume_control_.is_null()); + j_volume_control_.Reset(Java_VolumeControl_createVolumeControl( + base::android::AttachCurrentThread(), reinterpret_cast<intptr_t>(this))); + + // Load volume map to check that the config file is correct. + g_volume_map.Get(); + + base::Thread::Options options; + options.message_loop_type = base::MessageLoop::TYPE_IO; + thread_.StartWithOptions(options); + + thread_.task_runner()->PostTask( + FROM_HERE, base::BindOnce(&VolumeControlAndroid::InitializeOnThread, + base::Unretained(this))); + initialize_complete_event_.Wait(); +} + +VolumeControlAndroid::~VolumeControlAndroid() {} void VolumeControlAndroid::AddVolumeObserver(VolumeObserver* observer) { base::AutoLock lock(observer_lock_);
diff --git a/components/arc/BUILD.gn b/components/arc/BUILD.gn index 7d21140..a24b9ac 100644 --- a/components/arc/BUILD.gn +++ b/components/arc/BUILD.gn
@@ -9,8 +9,6 @@ sources = [ "audio/arc_audio_bridge.cc", "audio/arc_audio_bridge.h", - "bluetooth/arc_bluetooth_bridge.cc", - "bluetooth/arc_bluetooth_bridge.h", "bluetooth/bluetooth_struct_traits.cc", "bluetooth/bluetooth_struct_traits.h", "bluetooth/bluetooth_type_converters.cc", @@ -215,7 +213,6 @@ sources = [ "arc_session_runner_unittest.cc", "arc_util_unittest.cc", - "bluetooth/arc_bluetooth_bridge_unittest.cc", "bluetooth/bluetooth_struct_traits_unittest.cc", "bluetooth/bluetooth_type_converters_unittest.cc", "ime/arc_ime_service_unittest.cc",
diff --git a/components/arc/bluetooth/arc_bluetooth_bridge.cc b/components/arc/bluetooth/arc_bluetooth_bridge.cc deleted file mode 100644 index 92ef78c0..0000000 --- a/components/arc/bluetooth/arc_bluetooth_bridge.cc +++ /dev/null
@@ -1,2455 +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 "components/arc/bluetooth/arc_bluetooth_bridge.h" - -#include <bluetooth/bluetooth.h> -#include <fcntl.h> -#include <stddef.h> -#include <sys/socket.h> - -#include <iomanip> -#include <string> -#include <utility> - -#include "base/bind.h" -#include "base/json/json_writer.h" -#include "base/logging.h" -#include "base/memory/ptr_util.h" -#include "base/memory/singleton.h" -#include "base/posix/eintr_wrapper.h" -#include "base/strings/string_number_conversions.h" -#include "base/strings/utf_string_conversions.h" -#include "base/threading/thread_task_runner_handle.h" -#include "base/time/time.h" -#include "components/arc/arc_bridge_service.h" -#include "components/arc/arc_browser_context_keyed_service_factory_base.h" -#include "components/arc/bluetooth/bluetooth_type_converters.h" -#include "device/bluetooth/bluetooth_common.h" -#include "device/bluetooth/bluetooth_device.h" -#include "device/bluetooth/bluetooth_gatt_connection.h" -#include "device/bluetooth/bluetooth_gatt_notify_session.h" -#include "device/bluetooth/bluetooth_local_gatt_characteristic.h" -#include "device/bluetooth/bluetooth_local_gatt_descriptor.h" -#include "device/bluetooth/bluez/bluetooth_device_bluez.h" -#include "mojo/edk/embedder/embedder.h" -#include "mojo/edk/embedder/scoped_platform_handle.h" - -using device::BluetoothAdapter; -using device::BluetoothAdapterFactory; -using device::BluetoothAdvertisement; -using device::BluetoothDevice; -using device::BluetoothDiscoveryFilter; -using device::BluetoothDiscoverySession; -using device::BluetoothGattConnection; -using device::BluetoothGattNotifySession; -using device::BluetoothGattCharacteristic; -using device::BluetoothGattDescriptor; -using device::BluetoothGattService; -using device::BluetoothLocalGattCharacteristic; -using device::BluetoothLocalGattDescriptor; -using device::BluetoothLocalGattService; -using device::BluetoothRemoteGattCharacteristic; -using device::BluetoothRemoteGattDescriptor; -using device::BluetoothRemoteGattService; -using device::BluetoothTransport; -using device::BluetoothUUID; - -namespace { -constexpr uint32_t kGattReadPermission = - BluetoothGattCharacteristic::Permission::PERMISSION_READ | - BluetoothGattCharacteristic::Permission::PERMISSION_READ_ENCRYPTED | - BluetoothGattCharacteristic::Permission:: - PERMISSION_READ_ENCRYPTED_AUTHENTICATED; -constexpr uint32_t kGattWritePermission = - BluetoothGattCharacteristic::Permission::PERMISSION_WRITE | - BluetoothGattCharacteristic::Permission::PERMISSION_WRITE_ENCRYPTED | - BluetoothGattCharacteristic::Permission:: - PERMISSION_WRITE_ENCRYPTED_AUTHENTICATED; -constexpr int32_t kInvalidGattAttributeHandle = -1; -constexpr int32_t kInvalidAdvertisementHandle = -1; -// Bluetooth Specification Version 4.2 Vol 3 Part F Section 3.2.2 -// An attribute handle of value 0xFFFF is known as the maximum attribute handle. -constexpr int32_t kMaxGattAttributeHandle = 0xFFFF; -// Bluetooth Specification Version 4.2 Vol 3 Part F Section 3.2.9 -// The maximum length of an attribute value shall be 512 octets. -constexpr int kMaxGattAttributeLength = 512; -// Copied from Android at system/bt/stack/btm/btm_ble_int.h -// https://goo.gl/k7PM6u -constexpr uint16_t kAndroidMBluetoothVersionNumber = 95; -// Bluetooth SDP Service Class ID List Attribute identifier -constexpr uint16_t kServiceClassIDListAttributeID = 0x0001; -// Timeout for Bluetooth Discovery (scan) -// 120 seconds is used here as the upper bound of the time need to do device -// discovery once, 20 seconds for inquiry scan and 100 seconds for page scan -// for 100 new devices. -constexpr base::TimeDelta kDiscoveryTimeout = base::TimeDelta::FromSeconds(120); -// From https://www.bluetooth.com/specifications/assigned-numbers/baseband -// The Class of Device for generic computer. -constexpr uint32_t kBluetoothComputerClass = 0x100; -// Timeout for Android to complete a disabling op to adapter. -// In the case where an enabling op happens immediately after a disabling op, -// Android takes the following enabling op as a no-op and waits 3~4 seconds for -// the previous disabling op to finish, so the enabling op will never be -// fulfilled by Android, and the disabling op will later routed back to Chrome -// while Chrome's adapter is enabled. This results in the wrong power state -// which should be enabled. Since the signaling from Android to Chrome for -// Bluetooth is via Bluetooth HAL layer which run on the same process as -// Bluetooth Service in Java space, so the signaling to Chrome about the -// to-be-happen sleep cannot be done. This timeout tries to ensure the validity -// and the order of toggles on power state sent to Android. -// If Android takes more than 5 seconds to complete the intent initiated by -// Chrome, Chrome will take EnableAdapter/DisableAdapter calls as a request from -// Android to toggle the power state. The power state will be synced on both -// Chrome and Android, but as a result, Bluetooth will be off. -constexpr base::TimeDelta kPowerIntentTimeout = base::TimeDelta::FromSeconds(5); - -using GattStatusCallback = - base::Callback<void(arc::mojom::BluetoothGattStatus)>; -using GattReadCallback = - base::Callback<void(arc::mojom::BluetoothGattValuePtr)>; -using CreateSdpRecordCallback = - base::Callback<void(arc::mojom::BluetoothCreateSdpRecordResultPtr)>; -using RemoveSdpRecordCallback = - base::Callback<void(arc::mojom::BluetoothStatus)>; - -// Example of identifier: /org/bluez/hci0/dev_E0_CF_65_8C_86_1A/service001a -// Convert the last 4 characters of |identifier| to an -// int, by interpreting them as hexadecimal digits. -int ConvertGattIdentifierToId(const std::string identifier) { - return std::stoi(identifier.substr(identifier.size() - 4), nullptr, 16); -} - -// Create GattDBElement and fill in common data for -// Gatt Service/Characteristic/Descriptor. -template <class RemoteGattAttribute> -arc::mojom::BluetoothGattDBElementPtr CreateGattDBElement( - const arc::mojom::BluetoothGattDBAttributeType type, - const RemoteGattAttribute* attribute) { - arc::mojom::BluetoothGattDBElementPtr element = - arc::mojom::BluetoothGattDBElement::New(); - element->type = type; - element->uuid = attribute->GetUUID(); - element->id = element->attribute_handle = element->start_handle = - element->end_handle = - ConvertGattIdentifierToId(attribute->GetIdentifier()); - element->properties = 0; - return element; -} - -template <class RemoteGattAttribute> -RemoteGattAttribute* FindGattAttributeByUuid( - const std::vector<RemoteGattAttribute*>& attributes, - const BluetoothUUID& uuid) { - auto it = std::find_if( - attributes.begin(), attributes.end(), - [uuid](RemoteGattAttribute* attr) { return attr->GetUUID() == uuid; }); - return it != attributes.end() ? *it : nullptr; -} - -// Common success callback for GATT operations that only need to report -// GattStatus back to Android. -void OnGattOperationDone(const GattStatusCallback& callback) { - callback.Run(arc::mojom::BluetoothGattStatus::GATT_SUCCESS); -} - -// Common error callback for GATT operations that only need to report -// GattStatus back to Android. -void OnGattOperationError(const GattStatusCallback& callback, - BluetoothGattService::GattErrorCode error_code) { - callback.Run(mojo::ConvertTo<arc::mojom::BluetoothGattStatus>(error_code)); -} - -// Common success callback for ReadGattCharacteristic and ReadGattDescriptor -void OnGattReadDone(const GattReadCallback& callback, - const std::vector<uint8_t>& result) { - arc::mojom::BluetoothGattValuePtr gattValue = - arc::mojom::BluetoothGattValue::New(); - gattValue->status = arc::mojom::BluetoothGattStatus::GATT_SUCCESS; - gattValue->value = result; - callback.Run(std::move(gattValue)); -} - -// Common error callback for ReadGattCharacteristic and ReadGattDescriptor -void OnGattReadError(const GattReadCallback& callback, - BluetoothGattService::GattErrorCode error_code) { - arc::mojom::BluetoothGattValuePtr gattValue = - arc::mojom::BluetoothGattValue::New(); - gattValue->status = - mojo::ConvertTo<arc::mojom::BluetoothGattStatus>(error_code); - callback.Run(std::move(gattValue)); -} - -// Callback function for mojom::BluetoothInstance::RequestGattRead -void OnGattServerRead( - const BluetoothLocalGattService::Delegate::ValueCallback& success_callback, - const BluetoothLocalGattService::Delegate::ErrorCallback& error_callback, - arc::mojom::BluetoothGattStatus status, - const std::vector<uint8_t>& value) { - if (status == arc::mojom::BluetoothGattStatus::GATT_SUCCESS) - success_callback.Run(value); - else - error_callback.Run(); -} - -// Callback function for mojom::BluetoothInstance::RequestGattWrite -void OnGattServerWrite( - const base::Closure& success_callback, - const BluetoothLocalGattService::Delegate::ErrorCallback& error_callback, - arc::mojom::BluetoothGattStatus status) { - if (status == arc::mojom::BluetoothGattStatus::GATT_SUCCESS) - success_callback.Run(); - else - error_callback.Run(); -} - -bool IsGattOffsetValid(int offset) { - return 0 <= offset && offset < kMaxGattAttributeLength; -} - -// This is needed because Android only support UUID 16 bits in service data -// section in advertising data -uint16_t GetUUID16(const BluetoothUUID& uuid) { - // Convert xxxxyyyy-xxxx-xxxx-xxxx-xxxxxxxxxxxx to int16 yyyy - return std::stoi(uuid.canonical_value().substr(4, 4), nullptr, 16); -} - -arc::mojom::BluetoothPropertyPtr GetDiscoveryTimeoutProperty(uint32_t timeout) { - arc::mojom::BluetoothPropertyPtr property = - arc::mojom::BluetoothProperty::New(); - property->set_discovery_timeout(timeout); - return property; -} - -void OnCreateServiceRecordDone(const CreateSdpRecordCallback& callback, - uint32_t service_handle) { - arc::mojom::BluetoothCreateSdpRecordResultPtr result = - arc::mojom::BluetoothCreateSdpRecordResult::New(); - result->status = arc::mojom::BluetoothStatus::SUCCESS; - result->service_handle = service_handle; - - callback.Run(std::move(result)); -} - -void OnCreateServiceRecordError( - const CreateSdpRecordCallback& callback, - bluez::BluetoothServiceRecordBlueZ::ErrorCode error_code) { - arc::mojom::BluetoothCreateSdpRecordResultPtr result = - arc::mojom::BluetoothCreateSdpRecordResult::New(); - if (error_code == - bluez::BluetoothServiceRecordBlueZ::ErrorCode::ERROR_ADAPTER_NOT_READY) { - result->status = arc::mojom::BluetoothStatus::NOT_READY; - } else { - result->status = arc::mojom::BluetoothStatus::FAIL; - } - - callback.Run(std::move(result)); -} - -void OnRemoveServiceRecordDone(const RemoveSdpRecordCallback& callback) { - callback.Run(arc::mojom::BluetoothStatus::SUCCESS); -} - -void OnRemoveServiceRecordError( - const RemoveSdpRecordCallback& callback, - bluez::BluetoothServiceRecordBlueZ::ErrorCode error_code) { - arc::mojom::BluetoothStatus status; - if (error_code == - bluez::BluetoothServiceRecordBlueZ::ErrorCode::ERROR_ADAPTER_NOT_READY) - status = arc::mojom::BluetoothStatus::NOT_READY; - else - status = arc::mojom::BluetoothStatus::FAIL; - - callback.Run(status); -} - -} // namespace - -namespace arc { -namespace { - -// Singleton factory for ArcAccessibilityHelperBridge. -class ArcBluetoothBridgeFactory - : public internal::ArcBrowserContextKeyedServiceFactoryBase< - ArcBluetoothBridge, - ArcBluetoothBridgeFactory> { - public: - // Factory name used by ArcBrowserContextKeyedServiceFactoryBase. - static constexpr const char* kName = "ArcBluetoothBridgeFactory"; - - static ArcBluetoothBridgeFactory* GetInstance() { - return base::Singleton<ArcBluetoothBridgeFactory>::get(); - } - - private: - friend base::DefaultSingletonTraits<ArcBluetoothBridgeFactory>; - ArcBluetoothBridgeFactory() = default; - ~ArcBluetoothBridgeFactory() override = default; -}; - -} // namespace - -// static -ArcBluetoothBridge* ArcBluetoothBridge::GetForBrowserContext( - content::BrowserContext* context) { - return ArcBluetoothBridgeFactory::GetForBrowserContext(context); -} - -template <typename T> -class ArcBluetoothBridge::InstanceObserver - : public InstanceHolder<T>::Observer { - public: - InstanceObserver(ArcBluetoothBridge* owner, - ArcBridgeService* arc_bridge_service) - : owner_(owner), arc_bridge_service_(arc_bridge_service) { - GetHolder()->AddObserver(this); - } - - ~InstanceObserver() override { GetHolder()->RemoveObserver(this); } - - protected: - InstanceHolder<T>* GetHolder(); - - ArcBridgeService* arc_bridge_service() { return arc_bridge_service_; } - - private: - // InstanceHolder<T>::Observer: - void OnInstanceReady() override { owner_->MaybeSendInitialPowerChange(); } - - // Unowned pointer - ArcBluetoothBridge* const owner_; - ArcBridgeService* const arc_bridge_service_; - - DISALLOW_COPY_AND_ASSIGN(InstanceObserver); -}; - -template <> -InstanceHolder<mojom::AppInstance>* -ArcBluetoothBridge::InstanceObserver<mojom::AppInstance>::GetHolder() { - return arc_bridge_service()->app(); -} - -template <> -InstanceHolder<mojom::IntentHelperInstance>* -ArcBluetoothBridge::InstanceObserver<mojom::IntentHelperInstance>::GetHolder() { - return arc_bridge_service()->intent_helper(); -} - -class ArcBluetoothBridge::AppInstanceObserver - : public InstanceObserver<mojom::AppInstance> { - public: - AppInstanceObserver(ArcBluetoothBridge* owner, - ArcBridgeService* arc_bridge_service) - : InstanceObserver<mojom::AppInstance>(owner, arc_bridge_service) {} - - ~AppInstanceObserver() override = default; - - private: - DISALLOW_COPY_AND_ASSIGN(AppInstanceObserver); -}; - -class ArcBluetoothBridge::IntentHelperInstanceObserver - : public InstanceObserver<mojom::IntentHelperInstance> { - public: - IntentHelperInstanceObserver(ArcBluetoothBridge* owner, - ArcBridgeService* arc_bridge_service) - : InstanceObserver<mojom::IntentHelperInstance>(owner, - arc_bridge_service) {} - - ~IntentHelperInstanceObserver() override = default; - - private: - DISALLOW_COPY_AND_ASSIGN(IntentHelperInstanceObserver); -}; - -ArcBluetoothBridge::ArcBluetoothBridge(content::BrowserContext* context, - ArcBridgeService* bridge_service) - : arc_bridge_service_(bridge_service), - binding_(this), - weak_factory_(this) { - arc_bridge_service_->bluetooth()->AddObserver(this); - - app_observer_ = - base::MakeUnique<AppInstanceObserver>(this, arc_bridge_service_); - intent_helper_observer_ = - base::MakeUnique<IntentHelperInstanceObserver>(this, arc_bridge_service_); - - if (BluetoothAdapterFactory::IsBluetoothSupported()) { - VLOG(1) << "Registering bluetooth adapter."; - BluetoothAdapterFactory::GetAdapter(base::Bind( - &ArcBluetoothBridge::OnAdapterInitialized, weak_factory_.GetWeakPtr())); - } else { - VLOG(1) << "Bluetooth not supported."; - } -} - -ArcBluetoothBridge::~ArcBluetoothBridge() { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - - if (bluetooth_adapter_) - bluetooth_adapter_->RemoveObserver(this); - - arc_bridge_service_->bluetooth()->RemoveObserver(this); -} - -void ArcBluetoothBridge::OnAdapterInitialized( - scoped_refptr<BluetoothAdapter> adapter) { - DCHECK(adapter); - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - - // We can downcast here because we are always running on Chrome OS, and - // so our adapter uses BlueZ. - bluetooth_adapter_ = - static_cast<bluez::BluetoothAdapterBlueZ*>(adapter.get()); - - if (!bluetooth_adapter_->HasObserver(this)) - bluetooth_adapter_->AddObserver(this); -} - -void ArcBluetoothBridge::OnInstanceReady() { - mojom::BluetoothInstance* bluetooth_instance = - ARC_GET_INSTANCE_FOR_METHOD(arc_bridge_service_->bluetooth(), Init); - DCHECK(bluetooth_instance); - - mojom::BluetoothHostPtr host_proxy; - binding_.Bind(mojo::MakeRequest(&host_proxy)); - bluetooth_instance->Init(std::move(host_proxy)); - - is_bluetooth_instance_up_ = true; -} - -void ArcBluetoothBridge::OnInstanceClosed() { - is_bluetooth_instance_up_ = false; -} - -void ArcBluetoothBridge::SendDevice(const BluetoothDevice* device) const { - auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( - arc_bridge_service_->bluetooth(), OnDeviceFound); - if (!bluetooth_instance) - return; - - std::vector<mojom::BluetoothPropertyPtr> properties = - GetDeviceProperties(mojom::BluetoothPropertyType::ALL, device); - - bluetooth_instance->OnDeviceFound(std::move(properties)); - - - if (!(device->GetType() & device::BLUETOOTH_TRANSPORT_LE)) - return; - - base::Optional<int8_t> rssi = device->GetInquiryRSSI(); - mojom::BluetoothAddressPtr addr; - - // We only want to send updated advertise data to Android only when we are - // scanning which is checked by the validity of rssi. Here are the 2 cases - // that we don't want to send updated advertise data to Android. - // 1) Cached found device and 2) rssi became invalid when we stop scanning. - if (rssi.has_value()) { - auto* btle_instance = ARC_GET_INSTANCE_FOR_METHOD( - arc_bridge_service_->bluetooth(), OnLEDeviceFound); - if (!btle_instance) - return; - std::vector<mojom::BluetoothAdvertisingDataPtr> adv_data = - GetAdvertisingData(device); - addr = mojom::BluetoothAddress::From(device->GetAddress()); - btle_instance->OnLEDeviceFound(std::move(addr), rssi.value(), - std::move(adv_data)); - } - - if (!device->IsConnected()) - return; - - addr = mojom::BluetoothAddress::From(device->GetAddress()); - OnGattConnectStateChanged(std::move(addr), true); -} - -void ArcBluetoothBridge::AdapterPoweredChanged(BluetoothAdapter* adapter, - bool powered) { - AdapterPowerState power_change = - powered ? AdapterPowerState::TURN_ON : AdapterPowerState::TURN_OFF; - if (IsPowerChangeInitiatedByRemote(power_change)) - DequeueRemotePowerChange(power_change); - else - EnqueueLocalPowerChange(power_change); -} - -void ArcBluetoothBridge::DeviceAdded(BluetoothAdapter* adapter, - BluetoothDevice* device) { - if (!IsInstanceUp()) - return; - - SendDevice(device); -} - -void ArcBluetoothBridge::DeviceChanged(BluetoothAdapter* adapter, - BluetoothDevice* device) { - if (!IsInstanceUp()) - return; - - SendDevice(device); - - if (!(device->GetType() & device::BLUETOOTH_TRANSPORT_LE)) - return; - - auto it = gatt_connection_cache_.find(device->GetAddress()); - bool was_connected = it != gatt_connection_cache_.end(); - bool is_connected = device->IsConnected(); - - if (is_connected == was_connected) - return; - - if (is_connected) - gatt_connection_cache_.insert(device->GetAddress()); - else // was_connected - gatt_connection_cache_.erase(it); - - mojom::BluetoothAddressPtr addr = - mojom::BluetoothAddress::From(device->GetAddress()); - OnGattConnectStateChanged(std::move(addr), is_connected); -} - -void ArcBluetoothBridge::DeviceAddressChanged(BluetoothAdapter* adapter, - BluetoothDevice* device, - const std::string& old_address) { - if (!IsInstanceUp()) - return; - - if (old_address == device->GetAddress()) - return; - - if (!(device->GetType() & device::BLUETOOTH_TRANSPORT_LE)) - return; - - auto it = gatt_connection_cache_.find(old_address); - if (it == gatt_connection_cache_.end()) - return; - - gatt_connection_cache_.erase(it); - gatt_connection_cache_.insert(device->GetAddress()); - - auto* btle_instance = ARC_GET_INSTANCE_FOR_METHOD( - arc_bridge_service_->bluetooth(), OnLEDeviceAddressChange); - if (!btle_instance) - return; - - mojom::BluetoothAddressPtr old_addr = - mojom::BluetoothAddress::From(old_address); - mojom::BluetoothAddressPtr new_addr = - mojom::BluetoothAddress::From(device->GetAddress()); - btle_instance->OnLEDeviceAddressChange(std::move(old_addr), - std::move(new_addr)); -} - -void ArcBluetoothBridge::DevicePairedChanged(BluetoothAdapter* adapter, - BluetoothDevice* device, - bool new_paired_status) { - if (!IsInstanceUp()) - return; - - DCHECK(adapter); - DCHECK(device); - - mojom::BluetoothAddressPtr addr = - mojom::BluetoothAddress::From(device->GetAddress()); - - if (new_paired_status) { - // OnBondStateChanged must be called with BluetoothBondState::BONDING to - // make sure the bond state machine on Android is ready to take the - // pair-done event. Otherwise the pair-done event will be dropped as an - // invalid change of paired status. - OnPairing(addr->Clone()); - OnPairedDone(std::move(addr)); - } else { - OnForgetDone(std::move(addr)); - } -} - -void ArcBluetoothBridge::DeviceRemoved(BluetoothAdapter* adapter, - BluetoothDevice* device) { - if (!IsInstanceUp()) - return; - - DCHECK(adapter); - DCHECK(device); - - mojom::BluetoothAddressPtr addr = - mojom::BluetoothAddress::From(device->GetAddress()); - OnForgetDone(std::move(addr)); - - auto it = gatt_connection_cache_.find(device->GetAddress()); - if (it == gatt_connection_cache_.end()) - return; - - addr = mojom::BluetoothAddress::From(device->GetAddress()); - gatt_connection_cache_.erase(it); - OnGattConnectStateChanged(std::move(addr), false); -} - -void ArcBluetoothBridge::GattServiceAdded(BluetoothAdapter* adapter, - BluetoothDevice* device, - BluetoothRemoteGattService* service) { - if (!IsInstanceUp()) - return; - // Placeholder for GATT client functionality -} - -void ArcBluetoothBridge::GattServiceRemoved( - BluetoothAdapter* adapter, - BluetoothDevice* device, - BluetoothRemoteGattService* service) { - if (!IsInstanceUp()) - return; - // Placeholder for GATT client functionality -} - -void ArcBluetoothBridge::GattServicesDiscovered(BluetoothAdapter* adapter, - BluetoothDevice* device) { - if (!IsInstanceUp()) - return; - - auto* btle_instance = ARC_GET_INSTANCE_FOR_METHOD( - arc_bridge_service_->bluetooth(), OnSearchComplete); - if (!btle_instance) - return; - - mojom::BluetoothAddressPtr addr = - mojom::BluetoothAddress::From(device->GetAddress()); - - btle_instance->OnSearchComplete(std::move(addr), - mojom::BluetoothGattStatus::GATT_SUCCESS); -} - -void ArcBluetoothBridge::GattDiscoveryCompleteForService( - BluetoothAdapter* adapter, - BluetoothRemoteGattService* service) { - if (!IsInstanceUp()) - return; - // Placeholder for GATT client functionality -} - -void ArcBluetoothBridge::GattServiceChanged( - BluetoothAdapter* adapter, - BluetoothRemoteGattService* service) { - if (!IsInstanceUp()) - return; - // Placeholder for GATT client functionality -} - -void ArcBluetoothBridge::GattCharacteristicAdded( - BluetoothAdapter* adapter, - BluetoothRemoteGattCharacteristic* characteristic) { - if (!IsInstanceUp()) - return; - // Placeholder for GATT client functionality -} - -void ArcBluetoothBridge::GattCharacteristicRemoved( - BluetoothAdapter* adapter, - BluetoothRemoteGattCharacteristic* characteristic) { - if (!IsInstanceUp()) - return; - // Placeholder for GATT client functionality -} - -void ArcBluetoothBridge::GattDescriptorAdded( - BluetoothAdapter* adapter, - BluetoothRemoteGattDescriptor* descriptor) { - if (!IsInstanceUp()) - return; - // Placeholder for GATT client functionality -} - -void ArcBluetoothBridge::GattDescriptorRemoved( - BluetoothAdapter* adapter, - BluetoothRemoteGattDescriptor* descriptor) { - if (!IsInstanceUp()) - return; - // Placeholder for GATT client functionality -} - -void ArcBluetoothBridge::GattCharacteristicValueChanged( - BluetoothAdapter* adapter, - BluetoothRemoteGattCharacteristic* characteristic, - const std::vector<uint8_t>& value) { - if (!IsInstanceUp()) - return; - - auto* btle_instance = ARC_GET_INSTANCE_FOR_METHOD( - arc_bridge_service_->bluetooth(), OnGattNotify); - if (!btle_instance) - return; - - BluetoothRemoteGattService* service = characteristic->GetService(); - BluetoothDevice* device = service->GetDevice(); - mojom::BluetoothAddressPtr address = - mojom::BluetoothAddress::From(device->GetAddress()); - mojom::BluetoothGattServiceIDPtr service_id = - mojom::BluetoothGattServiceID::New(); - service_id->is_primary = service->IsPrimary(); - service_id->id = mojom::BluetoothGattID::New(); - service_id->id->inst_id = ConvertGattIdentifierToId(service->GetIdentifier()); - service_id->id->uuid = service->GetUUID(); - - mojom::BluetoothGattIDPtr char_id = mojom::BluetoothGattID::New(); - char_id->inst_id = ConvertGattIdentifierToId(characteristic->GetIdentifier()); - char_id->uuid = characteristic->GetUUID(); - - btle_instance->OnGattNotify(std::move(address), std::move(service_id), - std::move(char_id), true /* is_notify */, value); -} - -void ArcBluetoothBridge::GattDescriptorValueChanged( - BluetoothAdapter* adapter, - BluetoothRemoteGattDescriptor* descriptor, - const std::vector<uint8_t>& value) { - if (!IsInstanceUp()) - return; - // Placeholder for GATT client functionality -} - -template <class LocalGattAttribute> -void ArcBluetoothBridge::OnGattAttributeReadRequest( - const BluetoothDevice* device, - const LocalGattAttribute* attribute, - int offset, - const ValueCallback& success_callback, - const ErrorCallback& error_callback) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( - arc_bridge_service_->bluetooth(), RequestGattRead); - if (!bluetooth_instance || !IsGattOffsetValid(offset)) { - error_callback.Run(); - return; - } - - DCHECK(gatt_handle_.find(attribute->GetIdentifier()) != gatt_handle_.end()); - - bluetooth_instance->RequestGattRead( - mojom::BluetoothAddress::From(device->GetAddress()), - gatt_handle_[attribute->GetIdentifier()], offset, false /* is_long */, - base::Bind(&OnGattServerRead, success_callback, error_callback)); -} - -template <class LocalGattAttribute> -void ArcBluetoothBridge::OnGattAttributeWriteRequest( - const BluetoothDevice* device, - const LocalGattAttribute* attribute, - const std::vector<uint8_t>& value, - int offset, - const base::Closure& success_callback, - const ErrorCallback& error_callback) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( - arc_bridge_service_->bluetooth(), RequestGattWrite); - if (!bluetooth_instance || !IsGattOffsetValid(offset)) { - error_callback.Run(); - return; - } - - DCHECK(gatt_handle_.find(attribute->GetIdentifier()) != gatt_handle_.end()); - - bluetooth_instance->RequestGattWrite( - mojom::BluetoothAddress::From(device->GetAddress()), - gatt_handle_[attribute->GetIdentifier()], offset, value, - base::Bind(&OnGattServerWrite, success_callback, error_callback)); -} - -void ArcBluetoothBridge::OnCharacteristicReadRequest( - const BluetoothDevice* device, - const BluetoothLocalGattCharacteristic* characteristic, - int offset, - const ValueCallback& callback, - const ErrorCallback& error_callback) { - OnGattAttributeReadRequest(device, characteristic, offset, callback, - error_callback); -} - -void ArcBluetoothBridge::OnCharacteristicWriteRequest( - const BluetoothDevice* device, - const BluetoothLocalGattCharacteristic* characteristic, - const std::vector<uint8_t>& value, - int offset, - const base::Closure& callback, - const ErrorCallback& error_callback) { - OnGattAttributeWriteRequest(device, characteristic, value, offset, callback, - error_callback); -} - -void ArcBluetoothBridge::OnDescriptorReadRequest( - const BluetoothDevice* device, - const BluetoothLocalGattDescriptor* descriptor, - int offset, - const ValueCallback& callback, - const ErrorCallback& error_callback) { - OnGattAttributeReadRequest(device, descriptor, offset, callback, - error_callback); -} - -void ArcBluetoothBridge::OnDescriptorWriteRequest( - const BluetoothDevice* device, - const BluetoothLocalGattDescriptor* descriptor, - const std::vector<uint8_t>& value, - int offset, - const base::Closure& callback, - const ErrorCallback& error_callback) { - OnGattAttributeWriteRequest(device, descriptor, value, offset, callback, - error_callback); -} - -void ArcBluetoothBridge::OnNotificationsStart( - const BluetoothDevice* device, - const BluetoothLocalGattCharacteristic* characteristic) {} - -void ArcBluetoothBridge::OnNotificationsStop( - const BluetoothDevice* device, - const BluetoothLocalGattCharacteristic* characteristic) {} - -void ArcBluetoothBridge::EnableAdapter(const EnableAdapterCallback& callback) { - DCHECK(bluetooth_adapter_); - if (IsPowerChangeInitiatedByLocal(AdapterPowerState::TURN_ON)) { - DequeueLocalPowerChange(AdapterPowerState::TURN_ON); - } else { - if (!bluetooth_adapter_->IsPowered()) { - EnqueueRemotePowerChange(AdapterPowerState::TURN_ON, callback); - return; - } - } - - OnPoweredOn(callback); -} - -void ArcBluetoothBridge::DisableAdapter( - const DisableAdapterCallback& callback) { - DCHECK(bluetooth_adapter_); - if (IsPowerChangeInitiatedByLocal(AdapterPowerState::TURN_OFF)) { - DequeueLocalPowerChange(AdapterPowerState::TURN_OFF); - } else { - if (bluetooth_adapter_->IsPowered()) { - EnqueueRemotePowerChange(AdapterPowerState::TURN_OFF, callback); - return; - } - } - - OnPoweredOff(callback); -} - -void ArcBluetoothBridge::GetAdapterProperty(mojom::BluetoothPropertyType type) { - DCHECK(bluetooth_adapter_); - auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( - arc_bridge_service_->bluetooth(), OnAdapterProperties); - if (!bluetooth_instance) - return; - - std::vector<mojom::BluetoothPropertyPtr> properties = - GetAdapterProperties(type); - - bluetooth_instance->OnAdapterProperties(mojom::BluetoothStatus::SUCCESS, - std::move(properties)); -} - -void ArcBluetoothBridge::OnSetDiscoverable(bool discoverable, - bool success, - uint32_t timeout) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - - if (success && discoverable && timeout > 0) { - discoverable_off_timer_.Start( - FROM_HERE, base::TimeDelta::FromSeconds(timeout), - base::Bind(&ArcBluetoothBridge::SetDiscoverable, - weak_factory_.GetWeakPtr(), false, 0)); - } - - auto status = - success ? mojom::BluetoothStatus::SUCCESS : mojom::BluetoothStatus::FAIL; - OnSetAdapterProperty(status, GetDiscoveryTimeoutProperty(timeout)); -} - -// Set discoverable state to on / off. -// In case of turning on, start timer to turn it back off in |timeout| seconds. -void ArcBluetoothBridge::SetDiscoverable(bool discoverable, uint32_t timeout) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - DCHECK(bluetooth_adapter_); - DCHECK(!discoverable || timeout == 0); - - bool currently_discoverable = bluetooth_adapter_->IsDiscoverable(); - - if (!discoverable && !currently_discoverable) - return; - - if (discoverable && currently_discoverable) { - if (base::TimeDelta::FromSeconds(timeout) > - discoverable_off_timer_.GetCurrentDelay()) { - // Restart discoverable_off_timer_ if new timeout is greater - OnSetDiscoverable(true, true, timeout); - } else { - // Just send message to Android if new timeout is lower. - OnSetAdapterProperty(mojom::BluetoothStatus::SUCCESS, - GetDiscoveryTimeoutProperty(timeout)); - } - return; - } - - bluetooth_adapter_->SetDiscoverable( - discoverable, - base::Bind(&ArcBluetoothBridge::OnSetDiscoverable, - weak_factory_.GetWeakPtr(), discoverable, true, timeout), - base::Bind(&ArcBluetoothBridge::OnSetDiscoverable, - weak_factory_.GetWeakPtr(), discoverable, false, timeout)); -} - -void ArcBluetoothBridge::OnSetAdapterProperty( - mojom::BluetoothStatus status, - mojom::BluetoothPropertyPtr property) { - auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( - arc_bridge_service_->bluetooth(), OnAdapterProperties); - DCHECK(bluetooth_instance); - - std::vector<arc::mojom::BluetoothPropertyPtr> properties; - properties.push_back(std::move(property)); - - bluetooth_instance->OnAdapterProperties(status, std::move(properties)); -} - -void ArcBluetoothBridge::SetAdapterProperty( - mojom::BluetoothPropertyPtr property) { - DCHECK(bluetooth_adapter_); - - if (property->is_discovery_timeout()) { - uint32_t discovery_timeout = property->get_discovery_timeout(); - if (discovery_timeout > 0) { - SetDiscoverable(true, discovery_timeout); - } else { - OnSetAdapterProperty(mojom::BluetoothStatus::PARM_INVALID, - std::move(property)); - } - } else if (property->is_bdname()) { - auto property_clone = property.Clone(); - bluetooth_adapter_->SetName( - property->get_bdname(), - base::Bind(&ArcBluetoothBridge::OnSetAdapterProperty, - weak_factory_.GetWeakPtr(), mojom::BluetoothStatus::SUCCESS, - base::Passed(&property)), - base::Bind(&ArcBluetoothBridge::OnSetAdapterProperty, - weak_factory_.GetWeakPtr(), mojom::BluetoothStatus::FAIL, - base::Passed(&property_clone))); - } else if (property->is_adapter_scan_mode()) { - // Android will set adapter scan mode in these 3 situations. - // 1) Set to BT_SCAN_MODE_NONE just before turning BT off. - // 2) Set to BT_SCAN_MODE_CONNECTABLE just after turning on. - // 3) Set to BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE just before set the - // discoverable timeout. - // Since turning BT off/on implied scan mode none/connectable and setting - // discovery timeout implied scan mode discoverable, we don't need to - // do anything here. We will just call success callback in this case. - OnSetAdapterProperty(mojom::BluetoothStatus::SUCCESS, std::move(property)); - } else { - // Android does not set any other property type. - OnSetAdapterProperty(mojom::BluetoothStatus::UNSUPPORTED, - std::move(property)); - } -} - -void ArcBluetoothBridge::GetRemoteDeviceProperty( - mojom::BluetoothAddressPtr remote_addr, - mojom::BluetoothPropertyType type) { - DCHECK(bluetooth_adapter_); - auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( - arc_bridge_service_->bluetooth(), OnRemoteDeviceProperties); - if (!bluetooth_instance) - return; - - std::string addr_str = remote_addr->To<std::string>(); - BluetoothDevice* device = bluetooth_adapter_->GetDevice(addr_str); - - std::vector<mojom::BluetoothPropertyPtr> properties = - GetDeviceProperties(type, device); - mojom::BluetoothStatus status = mojom::BluetoothStatus::SUCCESS; - - if (!device) { - VLOG(1) << __func__ << ": device " << addr_str << " not available"; - status = mojom::BluetoothStatus::FAIL; - } - - bluetooth_instance->OnRemoteDeviceProperties(status, std::move(remote_addr), - std::move(properties)); -} - -void ArcBluetoothBridge::SetRemoteDeviceProperty( - mojom::BluetoothAddressPtr remote_addr, - mojom::BluetoothPropertyPtr property) { - DCHECK(bluetooth_adapter_); - auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( - arc_bridge_service_->bluetooth(), OnRemoteDeviceProperties); - if (!bluetooth_instance) - return; - - // Unsupported. Only used by Android hidden API, BluetoothDevice.SetAlias(). - // And only Android Settings App / Android TV / NFC used that. - bluetooth_instance->OnRemoteDeviceProperties( - mojom::BluetoothStatus::UNSUPPORTED, std::move(remote_addr), - std::vector<mojom::BluetoothPropertyPtr>()); -} - -void ArcBluetoothBridge::GetRemoteServiceRecord( - mojom::BluetoothAddressPtr remote_addr, - const BluetoothUUID& uuid) { - // TODO(smbarber): Implement GetRemoteServiceRecord -} - -void ArcBluetoothBridge::GetRemoteServices( - mojom::BluetoothAddressPtr remote_addr) { - // TODO(smbarber): Implement GetRemoteServices -} - -void ArcBluetoothBridge::StartDiscovery() { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - DCHECK(bluetooth_adapter_); - - if (discovery_session_) { - LOG(ERROR) << "Discovery session already running; Reset timeout."; - discovery_off_timer_.Start(FROM_HERE, kDiscoveryTimeout, - base::Bind(&ArcBluetoothBridge::CancelDiscovery, - weak_factory_.GetWeakPtr())); - SendCachedDevicesFound(); - return; - } - - bluetooth_adapter_->StartDiscoverySession( - base::Bind(&ArcBluetoothBridge::OnDiscoveryStarted, - weak_factory_.GetWeakPtr()), - base::Bind(&ArcBluetoothBridge::OnDiscoveryError, - weak_factory_.GetWeakPtr())); -} - -void ArcBluetoothBridge::CancelDiscovery() { - if (!discovery_session_) { - return; - } - - discovery_session_->Stop(base::Bind(&ArcBluetoothBridge::OnDiscoveryStopped, - weak_factory_.GetWeakPtr()), - base::Bind(&ArcBluetoothBridge::OnDiscoveryError, - weak_factory_.GetWeakPtr())); -} - -void ArcBluetoothBridge::OnPoweredOn( - const base::Callback<void(mojom::BluetoothAdapterState)>& callback) const { - callback.Run(mojom::BluetoothAdapterState::ON); - SendCachedPairedDevices(); -} - -void ArcBluetoothBridge::OnPoweredOff( - const base::Callback<void(mojom::BluetoothAdapterState)>& callback) const { - callback.Run(mojom::BluetoothAdapterState::OFF); -} - -void ArcBluetoothBridge::OnPoweredError( - const base::Callback<void(mojom::BluetoothAdapterState)>& callback) const { - LOG(WARNING) << "failed to change power state"; - - callback.Run(bluetooth_adapter_->IsPowered() - ? mojom::BluetoothAdapterState::ON - : mojom::BluetoothAdapterState::OFF); -} - -void ArcBluetoothBridge::OnDiscoveryStarted( - std::unique_ptr<BluetoothDiscoverySession> session) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - - auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( - arc_bridge_service_->bluetooth(), OnDiscoveryStateChanged); - if (!bluetooth_instance) - return; - - discovery_session_ = std::move(session); - - // We need to set timer to turn device discovery off because of the difference - // between Android API (do device discovery once) and Chrome API (do device - // discovery until user turns it off). - discovery_off_timer_.Start(FROM_HERE, kDiscoveryTimeout, - base::Bind(&ArcBluetoothBridge::CancelDiscovery, - weak_factory_.GetWeakPtr())); - - bluetooth_instance->OnDiscoveryStateChanged( - mojom::BluetoothDiscoveryState::STARTED); - - SendCachedDevicesFound(); -} - -void ArcBluetoothBridge::OnDiscoveryStopped() { - auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( - arc_bridge_service_->bluetooth(), OnDiscoveryStateChanged); - if (!bluetooth_instance) - return; - - discovery_session_.reset(); - discovery_off_timer_.Stop(); - - bluetooth_instance->OnDiscoveryStateChanged( - mojom::BluetoothDiscoveryState::STOPPED); -} - -void ArcBluetoothBridge::CreateBond(mojom::BluetoothAddressPtr addr, - int32_t transport) { - std::string addr_str = addr->To<std::string>(); - BluetoothDevice* device = bluetooth_adapter_->GetDevice(addr_str); - if (!device || !device->IsPairable()) { - VLOG(1) << __func__ << ": device " << addr_str - << " is no longer valid or pairable"; - OnPairedError(std::move(addr), BluetoothDevice::ERROR_FAILED); - return; - } - - if (device->IsPaired()) { - OnPairedDone(std::move(addr)); - return; - } - - // Use the default pairing delegate which is the delegate registered and owned - // by ash. - BluetoothDevice::PairingDelegate* delegate = - bluetooth_adapter_->DefaultPairingDelegate(); - - if (!delegate) { - OnPairedError(std::move(addr), BluetoothDevice::ERROR_FAILED); - return; - } - - // If pairing finished successfully, DevicePairedChanged will notify Android - // on paired state change event, so DoNothing is passed as a success callback. - device->Pair(delegate, base::Bind(&base::DoNothing), - base::Bind(&ArcBluetoothBridge::OnPairedError, - weak_factory_.GetWeakPtr(), base::Passed(&addr))); -} - -void ArcBluetoothBridge::RemoveBond(mojom::BluetoothAddressPtr addr) { - // Forget the device if it is no longer valid or not even paired. - BluetoothDevice* device = - bluetooth_adapter_->GetDevice(addr->To<std::string>()); - if (!device || !device->IsPaired()) { - OnForgetDone(std::move(addr)); - return; - } - - // If unpairing finished successfully, DevicePairedChanged will notify Android - // on paired state change event, so DoNothing is passed as a success callback. - device->Forget(base::Bind(&base::DoNothing), - base::Bind(&ArcBluetoothBridge::OnForgetError, - weak_factory_.GetWeakPtr(), base::Passed(&addr))); -} - -void ArcBluetoothBridge::CancelBond(mojom::BluetoothAddressPtr addr) { - BluetoothDevice* device = - bluetooth_adapter_->GetDevice(addr->To<std::string>()); - if (!device) { - OnForgetDone(std::move(addr)); - return; - } - - device->CancelPairing(); - OnForgetDone(std::move(addr)); -} - -void ArcBluetoothBridge::GetConnectionState( - mojom::BluetoothAddressPtr addr, - const GetConnectionStateCallback& callback) { - if (!bluetooth_adapter_) { - callback.Run(false); - return; - } - - BluetoothDevice* device = - bluetooth_adapter_->GetDevice(addr->To<std::string>()); - if (!device) { - callback.Run(false); - return; - } - - callback.Run(device->IsConnected()); -} - -void ArcBluetoothBridge::StartLEScan() { - DCHECK(bluetooth_adapter_); - if (discovery_session_) { - LOG(WARNING) << "Discovery session already running; leaving alone"; - SendCachedDevicesFound(); - return; - } - bluetooth_adapter_->StartDiscoverySessionWithFilter( - base::MakeUnique<BluetoothDiscoveryFilter>( - device::BLUETOOTH_TRANSPORT_LE), - base::Bind(&ArcBluetoothBridge::OnDiscoveryStarted, - weak_factory_.GetWeakPtr()), - base::Bind(&ArcBluetoothBridge::OnDiscoveryError, - weak_factory_.GetWeakPtr())); -} - -void ArcBluetoothBridge::StopLEScan() { - CancelDiscovery(); -} - -void ArcBluetoothBridge::OnGattConnectStateChanged( - mojom::BluetoothAddressPtr addr, - bool connected) const { - auto* btle_instance = ARC_GET_INSTANCE_FOR_METHOD( - arc_bridge_service_->bluetooth(), OnLEConnectionStateChange); - if (!btle_instance) - return; - - DCHECK(addr); - - btle_instance->OnLEConnectionStateChange(std::move(addr), connected); -} - -void ArcBluetoothBridge::OnGattConnected( - mojom::BluetoothAddressPtr addr, - std::unique_ptr<BluetoothGattConnection> connection) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - gatt_connections_[addr->To<std::string>()] = std::move(connection); - OnGattConnectStateChanged(std::move(addr), true); -} - -void ArcBluetoothBridge::OnGattConnectError( - mojom::BluetoothAddressPtr addr, - BluetoothDevice::ConnectErrorCode error_code) const { - OnGattConnectStateChanged(std::move(addr), false); -} - -void ArcBluetoothBridge::OnGattDisconnected( - mojom::BluetoothAddressPtr addr) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - auto it = gatt_connections_.find(addr->To<std::string>()); - if (it == gatt_connections_.end()) { - LOG(WARNING) << "OnGattDisconnected called, " - << "but no gatt connection was found"; - } else { - gatt_connections_.erase(it); - } - - OnGattConnectStateChanged(std::move(addr), false); -} - -void ArcBluetoothBridge::ConnectLEDevice( - mojom::BluetoothAddressPtr remote_addr) { - auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( - arc_bridge_service_->bluetooth(), OnLEConnectionStateChange); - if (!bluetooth_instance) - return; - - BluetoothDevice* device = - bluetooth_adapter_->GetDevice(remote_addr->To<std::string>()); - - if (!device) { - LOG(ERROR) << "Unknown device " << remote_addr->To<std::string>(); - OnGattConnectError(std::move(remote_addr), - BluetoothDevice::ConnectErrorCode::ERROR_FAILED); - return; - } - - if (device->IsConnected()) { - bluetooth_instance->OnLEConnectionStateChange(std::move(remote_addr), true); - return; - } - - // Also pass disconnect callback in error case since it would be disconnected - // anyway. - mojom::BluetoothAddressPtr remote_addr_clone = remote_addr.Clone(); - device->CreateGattConnection( - base::Bind(&ArcBluetoothBridge::OnGattConnected, - weak_factory_.GetWeakPtr(), base::Passed(&remote_addr)), - base::Bind(&ArcBluetoothBridge::OnGattConnectError, - weak_factory_.GetWeakPtr(), base::Passed(&remote_addr_clone))); -} - -void ArcBluetoothBridge::DisconnectLEDevice( - mojom::BluetoothAddressPtr remote_addr) { - auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( - arc_bridge_service_->bluetooth(), OnLEConnectionStateChange); - if (!bluetooth_instance) - return; - - BluetoothDevice* device = - bluetooth_adapter_->GetDevice(remote_addr->To<std::string>()); - - if (!device || !device->IsConnected()) { - bluetooth_instance->OnLEConnectionStateChange(std::move(remote_addr), - false); - return; - } - - mojom::BluetoothAddressPtr remote_addr_clone = remote_addr.Clone(); - device->Disconnect( - base::Bind(&ArcBluetoothBridge::OnGattDisconnected, - weak_factory_.GetWeakPtr(), base::Passed(&remote_addr)), - base::Bind(&ArcBluetoothBridge::OnGattDisconnected, - weak_factory_.GetWeakPtr(), base::Passed(&remote_addr_clone))); -} - -void ArcBluetoothBridge::SearchService(mojom::BluetoothAddressPtr remote_addr) { - auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( - arc_bridge_service_->bluetooth(), OnSearchComplete); - if (!bluetooth_instance) - return; - - BluetoothDevice* device = - bluetooth_adapter_->GetDevice(remote_addr->To<std::string>()); - if (!device) { - LOG(ERROR) << "Unknown device " << remote_addr->To<std::string>(); - bluetooth_instance->OnSearchComplete( - std::move(remote_addr), mojom::BluetoothGattStatus::GATT_FAILURE); - return; - } - - // Call the callback if discovery is completed - if (device->IsGattServicesDiscoveryComplete()) { - bluetooth_instance->OnSearchComplete( - std::move(remote_addr), mojom::BluetoothGattStatus::GATT_SUCCESS); - return; - } - - // Discard result. Will call the callback when discovery is completed. - device->GetGattServices(); -} - -void ArcBluetoothBridge::OnStartLEListenDone( - const StartLEListenCallback& callback, - scoped_refptr<BluetoothAdvertisement> advertisement) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - advertisment_ = advertisement; - callback.Run(mojom::BluetoothGattStatus::GATT_SUCCESS); -} - -void ArcBluetoothBridge::OnStartLEListenError( - const StartLEListenCallback& callback, - BluetoothAdvertisement::ErrorCode error_code) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - advertisment_ = nullptr; - callback.Run(mojom::BluetoothGattStatus::GATT_FAILURE); -} - -void ArcBluetoothBridge::StartLEListen(const StartLEListenCallback& callback) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - std::unique_ptr<BluetoothAdvertisement::Data> adv_data = - base::MakeUnique<BluetoothAdvertisement::Data>( - BluetoothAdvertisement::ADVERTISEMENT_TYPE_BROADCAST); - bluetooth_adapter_->RegisterAdvertisement( - std::move(adv_data), base::Bind(&ArcBluetoothBridge::OnStartLEListenDone, - weak_factory_.GetWeakPtr(), callback), - base::Bind(&ArcBluetoothBridge::OnStartLEListenError, - weak_factory_.GetWeakPtr(), callback)); -} - -void ArcBluetoothBridge::OnStopLEListenDone( - const StopLEListenCallback& callback) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - advertisment_ = nullptr; - callback.Run(mojom::BluetoothGattStatus::GATT_SUCCESS); -} - -void ArcBluetoothBridge::OnStopLEListenError( - const StopLEListenCallback& callback, - BluetoothAdvertisement::ErrorCode error_code) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - advertisment_ = nullptr; - callback.Run(mojom::BluetoothGattStatus::GATT_FAILURE); -} - -void ArcBluetoothBridge::StopLEListen(const StopLEListenCallback& callback) { - if (!advertisment_) { - OnStopLEListenError( - callback, - BluetoothAdvertisement::ErrorCode::ERROR_ADVERTISEMENT_DOES_NOT_EXIST); - return; - } - advertisment_->Unregister(base::Bind(&ArcBluetoothBridge::OnStopLEListenDone, - weak_factory_.GetWeakPtr(), callback), - base::Bind(&ArcBluetoothBridge::OnStopLEListenError, - weak_factory_.GetWeakPtr(), callback)); -} - -void ArcBluetoothBridge::GetGattDB(mojom::BluetoothAddressPtr remote_addr) { - auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( - arc_bridge_service_->bluetooth(), OnGetGattDB); - if (!bluetooth_instance) - return; - - BluetoothDevice* device = - bluetooth_adapter_->GetDevice(remote_addr->To<std::string>()); - std::vector<mojom::BluetoothGattDBElementPtr> db; - - if (!device) { - LOG(ERROR) << "Unknown device " << remote_addr->To<std::string>(); - bluetooth_instance->OnGetGattDB(std::move(remote_addr), std::move(db)); - return; - } - - for (auto* service : device->GetGattServices()) { - mojom::BluetoothGattDBElementPtr service_element = CreateGattDBElement( - service->IsPrimary() - ? mojom::BluetoothGattDBAttributeType::BTGATT_DB_PRIMARY_SERVICE - : mojom::BluetoothGattDBAttributeType::BTGATT_DB_SECONDARY_SERVICE, - service); - - const auto& characteristics = service->GetCharacteristics(); - if (characteristics.size() > 0) { - const auto& descriptors = characteristics.back()->GetDescriptors(); - service_element->start_handle = - ConvertGattIdentifierToId(characteristics.front()->GetIdentifier()); - service_element->end_handle = ConvertGattIdentifierToId( - descriptors.size() > 0 ? descriptors.back()->GetIdentifier() - : characteristics.back()->GetIdentifier()); - } - db.push_back(std::move(service_element)); - - for (auto* characteristic : characteristics) { - mojom::BluetoothGattDBElementPtr characteristic_element = - CreateGattDBElement( - mojom::BluetoothGattDBAttributeType::BTGATT_DB_CHARACTERISTIC, - characteristic); - characteristic_element->properties = characteristic->GetProperties(); - db.push_back(std::move(characteristic_element)); - - for (auto* descriptor : characteristic->GetDescriptors()) { - db.push_back(CreateGattDBElement( - mojom::BluetoothGattDBAttributeType::BTGATT_DB_DESCRIPTOR, - descriptor)); - } - } - } - - bluetooth_instance->OnGetGattDB(std::move(remote_addr), std::move(db)); -} - -BluetoothRemoteGattCharacteristic* ArcBluetoothBridge::FindGattCharacteristic( - mojom::BluetoothAddressPtr remote_addr, - mojom::BluetoothGattServiceIDPtr service_id, - mojom::BluetoothGattIDPtr char_id) const { - DCHECK(remote_addr); - DCHECK(service_id); - DCHECK(char_id); - - BluetoothDevice* device = - bluetooth_adapter_->GetDevice(remote_addr->To<std::string>()); - if (!device) - return nullptr; - - BluetoothRemoteGattService* service = - FindGattAttributeByUuid(device->GetGattServices(), service_id->id->uuid); - if (!service) - return nullptr; - - return FindGattAttributeByUuid(service->GetCharacteristics(), char_id->uuid); -} - -BluetoothRemoteGattDescriptor* ArcBluetoothBridge::FindGattDescriptor( - mojom::BluetoothAddressPtr remote_addr, - mojom::BluetoothGattServiceIDPtr service_id, - mojom::BluetoothGattIDPtr char_id, - mojom::BluetoothGattIDPtr desc_id) const { - BluetoothRemoteGattCharacteristic* characteristic = FindGattCharacteristic( - std::move(remote_addr), std::move(service_id), std::move(char_id)); - if (!characteristic) - return nullptr; - - return FindGattAttributeByUuid(characteristic->GetDescriptors(), - desc_id->uuid); -} - -void ArcBluetoothBridge::SendBluetoothPoweredStateBroadcast( - AdapterPowerState powered) const { - auto* intent_instance = ARC_GET_INSTANCE_FOR_METHOD( - arc_bridge_service_->intent_helper(), SendBroadcast); - if (!intent_instance) - return; - - base::DictionaryValue extras; - extras.SetBoolean("enable", powered == AdapterPowerState::TURN_ON); - std::string extras_json; - bool write_success = base::JSONWriter::Write(extras, &extras_json); - DCHECK(write_success); - - intent_instance->SendBroadcast( - "org.chromium.arc.intent_helper.SET_BLUETOOTH_STATE", - "org.chromium.arc.intent_helper", - "org.chromium.arc.intent_helper.SettingsReceiver", extras_json); -} - -void ArcBluetoothBridge::ReadGattCharacteristic( - mojom::BluetoothAddressPtr remote_addr, - mojom::BluetoothGattServiceIDPtr service_id, - mojom::BluetoothGattIDPtr char_id, - const ReadGattCharacteristicCallback& callback) { - BluetoothRemoteGattCharacteristic* characteristic = FindGattCharacteristic( - std::move(remote_addr), std::move(service_id), std::move(char_id)); - DCHECK(characteristic); - DCHECK(characteristic->GetPermissions() & kGattReadPermission); - - characteristic->ReadRemoteCharacteristic( - base::Bind(&OnGattReadDone, callback), - base::Bind(&OnGattReadError, callback)); -} - -void ArcBluetoothBridge::WriteGattCharacteristic( - mojom::BluetoothAddressPtr remote_addr, - mojom::BluetoothGattServiceIDPtr service_id, - mojom::BluetoothGattIDPtr char_id, - mojom::BluetoothGattValuePtr value, - const WriteGattCharacteristicCallback& callback) { - BluetoothRemoteGattCharacteristic* characteristic = FindGattCharacteristic( - std::move(remote_addr), std::move(service_id), std::move(char_id)); - DCHECK(characteristic); - DCHECK(characteristic->GetPermissions() & kGattWritePermission); - - characteristic->WriteRemoteCharacteristic( - value->value, base::Bind(&OnGattOperationDone, callback), - base::Bind(&OnGattOperationError, callback)); -} - -void ArcBluetoothBridge::ReadGattDescriptor( - mojom::BluetoothAddressPtr remote_addr, - mojom::BluetoothGattServiceIDPtr service_id, - mojom::BluetoothGattIDPtr char_id, - mojom::BluetoothGattIDPtr desc_id, - const ReadGattDescriptorCallback& callback) { - BluetoothRemoteGattDescriptor* descriptor = - FindGattDescriptor(std::move(remote_addr), std::move(service_id), - std::move(char_id), std::move(desc_id)); - DCHECK(descriptor); - DCHECK(descriptor->GetPermissions() & kGattReadPermission); - - descriptor->ReadRemoteDescriptor(base::Bind(&OnGattReadDone, callback), - base::Bind(&OnGattReadError, callback)); -} - -void ArcBluetoothBridge::WriteGattDescriptor( - mojom::BluetoothAddressPtr remote_addr, - mojom::BluetoothGattServiceIDPtr service_id, - mojom::BluetoothGattIDPtr char_id, - mojom::BluetoothGattIDPtr desc_id, - mojom::BluetoothGattValuePtr value, - const WriteGattDescriptorCallback& callback) { - BluetoothRemoteGattDescriptor* descriptor = - FindGattDescriptor(std::move(remote_addr), std::move(service_id), - std::move(char_id), std::move(desc_id)); - DCHECK(descriptor); - DCHECK(descriptor->GetPermissions() & kGattWritePermission); - - // To register / deregister GATT notification, we need to - // 1) Write to CCC Descriptor to enable/disable the notification - // 2) Ask BT hw to register / deregister the notification - // The Chrome API groups both steps into one API, and does not support writing - // directly to the CCC Descriptor. Therefore, until we fix - // https://crbug.com/622832, we return successfully when we encounter this. - // TODO(http://crbug.com/622832) - if (descriptor->GetUUID() == - BluetoothGattDescriptor::ClientCharacteristicConfigurationUuid()) { - OnGattOperationDone(callback); - return; - } - - descriptor->WriteRemoteDescriptor( - value->value, base::Bind(&OnGattOperationDone, callback), - base::Bind(&OnGattOperationError, callback)); -} - -void ArcBluetoothBridge::OnGattNotifyStartDone( - const RegisterForGattNotificationCallback& callback, - const std::string char_string_id, - std::unique_ptr<BluetoothGattNotifySession> notify_session) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - notification_session_[char_string_id] = std::move(notify_session); - callback.Run(mojom::BluetoothGattStatus::GATT_SUCCESS); -} - -void ArcBluetoothBridge::RegisterForGattNotification( - mojom::BluetoothAddressPtr remote_addr, - mojom::BluetoothGattServiceIDPtr service_id, - mojom::BluetoothGattIDPtr char_id, - const RegisterForGattNotificationCallback& callback) { - BluetoothRemoteGattCharacteristic* characteristic = FindGattCharacteristic( - std::move(remote_addr), std::move(service_id), std::move(char_id)); - - if (!characteristic) { - LOG(WARNING) << __func__ << " Characteristic is not existed."; - return; - } - - characteristic->StartNotifySession( - base::Bind(&ArcBluetoothBridge::OnGattNotifyStartDone, - weak_factory_.GetWeakPtr(), callback, - characteristic->GetIdentifier()), - base::Bind(&OnGattOperationError, callback)); -} - -void ArcBluetoothBridge::DeregisterForGattNotification( - mojom::BluetoothAddressPtr remote_addr, - mojom::BluetoothGattServiceIDPtr service_id, - mojom::BluetoothGattIDPtr char_id, - const DeregisterForGattNotificationCallback& callback) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - - BluetoothRemoteGattCharacteristic* characteristic = FindGattCharacteristic( - std::move(remote_addr), std::move(service_id), std::move(char_id)); - - if (!characteristic) { - LOG(WARNING) << __func__ << " Characteristic is not existed."; - return; - } - - std::string char_id_str = characteristic->GetIdentifier(); - std::unique_ptr<BluetoothGattNotifySession> notify = - std::move(notification_session_[char_id_str]); - notification_session_.erase(char_id_str); - notify->Stop(base::Bind(&OnGattOperationDone, callback)); -} - -void ArcBluetoothBridge::ReadRemoteRssi( - mojom::BluetoothAddressPtr remote_addr, - const ReadRemoteRssiCallback& callback) { - BluetoothDevice* device = - bluetooth_adapter_->GetDevice(remote_addr->To<std::string>()); - if (!device) { - callback.Run(mojom::kUnknownPower); - return; - } - callback.Run(device->GetInquiryRSSI().value_or(mojom::kUnknownPower)); -} - -void ArcBluetoothBridge::OpenBluetoothSocket( - const OpenBluetoothSocketCallback& callback) { - base::ScopedFD sock(socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM)); - if (!sock.is_valid()) { - LOG(ERROR) << "Failed to open socket."; - callback.Run(mojo::ScopedHandle()); - return; - } - mojo::edk::ScopedPlatformHandle platform_handle{ - mojo::edk::PlatformHandle(sock.release())}; - MojoHandle wrapped_handle; - MojoResult wrap_result = mojo::edk::CreatePlatformHandleWrapper( - std::move(platform_handle), &wrapped_handle); - if (wrap_result != MOJO_RESULT_OK) { - LOG(ERROR) << "Failed to wrap handles. Closing: " << wrap_result; - callback.Run(mojo::ScopedHandle()); - return; - } - mojo::ScopedHandle scoped_handle{mojo::Handle(wrapped_handle)}; - - callback.Run(std::move(scoped_handle)); -} - -bool ArcBluetoothBridge::IsGattServerAttributeHandleAvailable(int need) { - return gatt_server_attribute_next_handle_ + need <= kMaxGattAttributeHandle; -} - -int32_t ArcBluetoothBridge::GetNextGattServerAttributeHandle() { - return IsGattServerAttributeHandleAvailable(1) - ? ++gatt_server_attribute_next_handle_ - : kInvalidGattAttributeHandle; -} - -template <class LocalGattAttribute> -int32_t ArcBluetoothBridge::CreateGattAttributeHandle( - LocalGattAttribute* attribute) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - if (!attribute) - return kInvalidGattAttributeHandle; - int32_t handle = GetNextGattServerAttributeHandle(); - if (handle == kInvalidGattAttributeHandle) - return kInvalidGattAttributeHandle; - const std::string& identifier = attribute->GetIdentifier(); - gatt_identifier_[handle] = identifier; - gatt_handle_[identifier] = handle; - return handle; -} - -void ArcBluetoothBridge::AddService(mojom::BluetoothGattServiceIDPtr service_id, - int32_t num_handles, - const AddServiceCallback& callback) { - if (!IsGattServerAttributeHandleAvailable(num_handles)) { - callback.Run(kInvalidGattAttributeHandle); - return; - } - base::WeakPtr<BluetoothLocalGattService> service = - BluetoothLocalGattService::Create( - bluetooth_adapter_.get(), service_id->id->uuid, - service_id->is_primary, nullptr /* included_service */, - this /* delegate */); - callback.Run(CreateGattAttributeHandle(service.get())); -} - -void ArcBluetoothBridge::AddCharacteristic( - int32_t service_handle, - const BluetoothUUID& uuid, - int32_t properties, - int32_t permissions, - const AddCharacteristicCallback& callback) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - DCHECK(gatt_identifier_.find(service_handle) != gatt_identifier_.end()); - if (!IsGattServerAttributeHandleAvailable(1)) { - callback.Run(kInvalidGattAttributeHandle); - return; - } - base::WeakPtr<BluetoothLocalGattCharacteristic> characteristic = - BluetoothLocalGattCharacteristic::Create( - uuid, properties, permissions, - bluetooth_adapter_->GetGattService(gatt_identifier_[service_handle])); - int32_t characteristic_handle = - CreateGattAttributeHandle(characteristic.get()); - last_characteristic_[service_handle] = characteristic_handle; - callback.Run(characteristic_handle); -} - -void ArcBluetoothBridge::AddDescriptor(int32_t service_handle, - const BluetoothUUID& uuid, - int32_t permissions, - const AddDescriptorCallback& callback) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - if (!IsGattServerAttributeHandleAvailable(1)) { - callback.Run(kInvalidGattAttributeHandle); - return; - } - // Chrome automatically adds a CCC Descriptor to a characteristic when needed. - // We will generate a bogus handle for Android. - if (uuid == - BluetoothGattDescriptor::ClientCharacteristicConfigurationUuid()) { - int32_t handle = GetNextGattServerAttributeHandle(); - callback.Run(handle); - return; - } - - DCHECK(gatt_identifier_.find(service_handle) != gatt_identifier_.end()); - BluetoothLocalGattService* service = - bluetooth_adapter_->GetGattService(gatt_identifier_[service_handle]); - DCHECK(service); - // Since the Android API does not give information about which characteristic - // is the parent of the new descriptor, we assume that it would be the last - // characteristic that was added to the given service. This matches the - // Android framework code at android/bluetooth/BluetoothGattServer.java#594. - // Link: https://goo.gl/cJZl1u - DCHECK(last_characteristic_.find(service_handle) != - last_characteristic_.end()); - int32_t last_characteristic_handle = last_characteristic_[service_handle]; - - DCHECK(gatt_identifier_.find(last_characteristic_handle) != - gatt_identifier_.end()); - BluetoothLocalGattCharacteristic* characteristic = - service->GetCharacteristic(gatt_identifier_[last_characteristic_handle]); - DCHECK(characteristic); - - base::WeakPtr<BluetoothLocalGattDescriptor> descriptor = - BluetoothLocalGattDescriptor::Create(uuid, permissions, characteristic); - callback.Run(CreateGattAttributeHandle(descriptor.get())); -} - -void ArcBluetoothBridge::StartService(int32_t service_handle, - const StartServiceCallback& callback) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - DCHECK(gatt_identifier_.find(service_handle) != gatt_identifier_.end()); - BluetoothLocalGattService* service = - bluetooth_adapter_->GetGattService(gatt_identifier_[service_handle]); - DCHECK(service); - service->Register(base::Bind(&OnGattOperationDone, callback), - base::Bind(&OnGattOperationError, callback)); -} - -void ArcBluetoothBridge::StopService(int32_t service_handle, - const StopServiceCallback& callback) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - DCHECK(gatt_identifier_.find(service_handle) != gatt_identifier_.end()); - BluetoothLocalGattService* service = - bluetooth_adapter_->GetGattService(gatt_identifier_[service_handle]); - DCHECK(service); - service->Unregister(base::Bind(&OnGattOperationDone, callback), - base::Bind(&OnGattOperationError, callback)); -} - -void ArcBluetoothBridge::DeleteService(int32_t service_handle, - const DeleteServiceCallback& callback) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - DCHECK(gatt_identifier_.find(service_handle) != gatt_identifier_.end()); - BluetoothLocalGattService* service = - bluetooth_adapter_->GetGattService(gatt_identifier_[service_handle]); - DCHECK(service); - gatt_identifier_.erase(service_handle); - gatt_handle_.erase(service->GetIdentifier()); - service->Delete(); - OnGattOperationDone(callback); -} - -void ArcBluetoothBridge::SendIndication( - int32_t attribute_handle, - mojom::BluetoothAddressPtr address, - bool confirm, - const std::vector<uint8_t>& value, - const SendIndicationCallback& callback) {} - -void ArcBluetoothBridge::GetSdpRecords(mojom::BluetoothAddressPtr remote_addr, - const BluetoothUUID& target_uuid) { - BluetoothDevice* device = - bluetooth_adapter_->GetDevice(remote_addr->To<std::string>()); - if (!device) { - OnGetServiceRecordsError(std::move(remote_addr), target_uuid, - bluez::BluetoothServiceRecordBlueZ::ErrorCode:: - ERROR_DEVICE_DISCONNECTED); - return; - } - - bluez::BluetoothDeviceBlueZ* device_bluez = - static_cast<bluez::BluetoothDeviceBlueZ*>(device); - - mojom::BluetoothAddressPtr remote_addr_clone = remote_addr.Clone(); - - device_bluez->GetServiceRecords( - base::Bind(&ArcBluetoothBridge::OnGetServiceRecordsDone, - weak_factory_.GetWeakPtr(), base::Passed(&remote_addr), - target_uuid), - base::Bind(&ArcBluetoothBridge::OnGetServiceRecordsError, - weak_factory_.GetWeakPtr(), base::Passed(&remote_addr_clone), - target_uuid)); -} - -void ArcBluetoothBridge::CreateSdpRecord( - mojom::BluetoothSdpRecordPtr record_mojo, - const CreateSdpRecordCallback& callback) { - auto record = record_mojo.To<bluez::BluetoothServiceRecordBlueZ>(); - - // Check if ServiceClassIDList attribute (attribute ID 0x0001) is included - // after type conversion, since it is mandatory for creating a service record. - if (!record.IsAttributePresented(kServiceClassIDListAttributeID)) { - mojom::BluetoothCreateSdpRecordResultPtr result = - mojom::BluetoothCreateSdpRecordResult::New(); - result->status = mojom::BluetoothStatus::FAIL; - callback.Run(std::move(result)); - return; - } - - bluetooth_adapter_->CreateServiceRecord( - record, base::Bind(&OnCreateServiceRecordDone, callback), - base::Bind(&OnCreateServiceRecordError, callback)); -} - -void ArcBluetoothBridge::RemoveSdpRecord( - uint32_t service_handle, - const RemoveSdpRecordCallback& callback) { - bluetooth_adapter_->RemoveServiceRecord( - service_handle, base::Bind(&OnRemoveServiceRecordDone, callback), - base::Bind(&OnRemoveServiceRecordError, callback)); -} - -bool ArcBluetoothBridge::GetAdvertisementHandle(int32_t* adv_handle) { - for (int i = 0; i < kMaxAdvertisements; i++) { - if (advertisements_.find(i) == advertisements_.end()) { - *adv_handle = i; - return true; - } - } - return false; -} - -void ArcBluetoothBridge::ReserveAdvertisementHandle( - const ReserveAdvertisementHandleCallback& callback) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - - // Find an empty advertisement slot. - int32_t adv_handle; - if (!GetAdvertisementHandle(&adv_handle)) { - LOG(WARNING) << "Out of space for advertisement data"; - callback.Run(mojom::BluetoothGattStatus::GATT_FAILURE, - kInvalidAdvertisementHandle); - return; - } - - // We have a handle. Put an entry in the map to reserve it. - advertisements_[adv_handle] = nullptr; - - // The advertisement will be registered when we get the call - // to SetAdvertisingData. For now, just return the adv_handle. - callback.Run(mojom::BluetoothGattStatus::GATT_SUCCESS, adv_handle); -} - -void ArcBluetoothBridge::BroadcastAdvertisement( - int32_t adv_handle, - std::unique_ptr<device::BluetoothAdvertisement::Data> advertisement, - const BroadcastAdvertisementCallback& callback) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - if (advertisements_.find(adv_handle) == advertisements_.end()) { - callback.Run(mojom::BluetoothGattStatus::GATT_FAILURE); - return; - } - - if (!advertisements_[adv_handle]) { - OnReadyToRegisterAdvertisement(callback, adv_handle, - std::move(advertisement)); - return; - } - - advertisements_[adv_handle]->Unregister( - base::Bind(&ArcBluetoothBridge::OnReadyToRegisterAdvertisement, - weak_factory_.GetWeakPtr(), callback, adv_handle, - base::Passed(std::move(advertisement))), - base::Bind(&ArcBluetoothBridge::OnRegisterAdvertisementError, - weak_factory_.GetWeakPtr(), callback, adv_handle)); -} - -void ArcBluetoothBridge::ReleaseAdvertisementHandle( - int32_t adv_handle, - const ReleaseAdvertisementHandleCallback& callback) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - if (advertisements_.find(adv_handle) == advertisements_.end()) { - callback.Run(mojom::BluetoothGattStatus::GATT_FAILURE); - return; - } - - if (!advertisements_[adv_handle]) { - advertisements_.erase(adv_handle); - callback.Run(mojom::BluetoothGattStatus::GATT_SUCCESS); - return; - } - - advertisements_[adv_handle]->Unregister( - base::Bind(&ArcBluetoothBridge::OnUnregisterAdvertisementDone, - weak_factory_.GetWeakPtr(), callback, adv_handle), - base::Bind(&ArcBluetoothBridge::OnUnregisterAdvertisementError, - weak_factory_.GetWeakPtr(), callback, adv_handle)); -} - -void ArcBluetoothBridge::OnReadyToRegisterAdvertisement( - const BroadcastAdvertisementCallback& callback, - int32_t adv_handle, - std::unique_ptr<device::BluetoothAdvertisement::Data> data) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - bluetooth_adapter_->RegisterAdvertisement( - std::move(data), - base::Bind(&ArcBluetoothBridge::OnRegisterAdvertisementDone, - weak_factory_.GetWeakPtr(), callback, adv_handle), - base::Bind(&ArcBluetoothBridge::OnRegisterAdvertisementError, - weak_factory_.GetWeakPtr(), callback, adv_handle)); -} - -void ArcBluetoothBridge::OnRegisterAdvertisementDone( - const BroadcastAdvertisementCallback& callback, - int32_t adv_handle, - scoped_refptr<BluetoothAdvertisement> advertisement) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - advertisements_[adv_handle] = std::move(advertisement); - callback.Run(mojom::BluetoothGattStatus::GATT_SUCCESS); -} - -void ArcBluetoothBridge::OnRegisterAdvertisementError( - const BroadcastAdvertisementCallback& callback, - int32_t adv_handle, - BluetoothAdvertisement::ErrorCode error_code) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - LOG(WARNING) << "Failed to register advertisement for handle " << adv_handle - << ", error code = " << error_code; - advertisements_[adv_handle] = nullptr; - callback.Run(mojom::BluetoothGattStatus::GATT_FAILURE); -} - -void ArcBluetoothBridge::OnUnregisterAdvertisementDone( - const ReleaseAdvertisementHandleCallback& callback, - int32_t adv_handle) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - advertisements_.erase(adv_handle); - callback.Run(mojom::BluetoothGattStatus::GATT_SUCCESS); -} - -void ArcBluetoothBridge::OnUnregisterAdvertisementError( - const ReleaseAdvertisementHandleCallback& callback, - int32_t adv_handle, - BluetoothAdvertisement::ErrorCode error_code) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - LOG(WARNING) << "Failed to unregister advertisement for handle " << adv_handle - << ", error code = " << error_code; - advertisements_.erase(adv_handle); - callback.Run(mojom::BluetoothGattStatus::GATT_FAILURE); -} - -void ArcBluetoothBridge::OnDiscoveryError() { - LOG(WARNING) << "failed to change discovery state"; -} - -void ArcBluetoothBridge::OnPairing(mojom::BluetoothAddressPtr addr) const { - auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( - arc_bridge_service_->bluetooth(), OnBondStateChanged); - if (!bluetooth_instance) - return; - - bluetooth_instance->OnBondStateChanged(mojom::BluetoothStatus::SUCCESS, - std::move(addr), - mojom::BluetoothBondState::BONDING); -} - -void ArcBluetoothBridge::OnPairedDone(mojom::BluetoothAddressPtr addr) const { - auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( - arc_bridge_service_->bluetooth(), OnBondStateChanged); - if (!bluetooth_instance) - return; - - bluetooth_instance->OnBondStateChanged(mojom::BluetoothStatus::SUCCESS, - std::move(addr), - mojom::BluetoothBondState::BONDED); -} - -void ArcBluetoothBridge::OnPairedError( - mojom::BluetoothAddressPtr addr, - BluetoothDevice::ConnectErrorCode error_code) const { - auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( - arc_bridge_service_->bluetooth(), OnBondStateChanged); - if (!bluetooth_instance) - return; - - bluetooth_instance->OnBondStateChanged(mojom::BluetoothStatus::FAIL, - std::move(addr), - mojom::BluetoothBondState::NONE); -} - -void ArcBluetoothBridge::OnForgetDone(mojom::BluetoothAddressPtr addr) const { - auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( - arc_bridge_service_->bluetooth(), OnBondStateChanged); - if (!bluetooth_instance) - return; - - bluetooth_instance->OnBondStateChanged(mojom::BluetoothStatus::SUCCESS, - std::move(addr), - mojom::BluetoothBondState::NONE); -} - -void ArcBluetoothBridge::OnForgetError(mojom::BluetoothAddressPtr addr) const { - auto* bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( - arc_bridge_service_->bluetooth(), OnBondStateChanged); - if (!bluetooth_instance) - return; - - BluetoothDevice* device = - bluetooth_adapter_->GetDevice(addr->To<std::string>()); - mojom::BluetoothBondState bond_state = mojom::BluetoothBondState::NONE; - if (device && device->IsPaired()) { - bond_state = mojom::BluetoothBondState::BONDED; - } - bluetooth_instance->OnBondStateChanged(mojom::BluetoothStatus::FAIL, - std::move(addr), bond_state); -} - -bool ArcBluetoothBridge::IsPowerChangeInitiatedByRemote( - ArcBluetoothBridge::AdapterPowerState powered) const { - return !remote_power_changes_.empty() && - remote_power_changes_.front() == powered; -} - -bool ArcBluetoothBridge::IsPowerChangeInitiatedByLocal( - ArcBluetoothBridge::AdapterPowerState powered) const { - return !local_power_changes_.empty() && - local_power_changes_.front() == powered; -} - -void ArcBluetoothBridge::MaybeSendInitialPowerChange() { - if (!bluetooth_adapter_ || !bluetooth_adapter_->IsPowered()) { - // The default power state of Bluetooth on Android is off, so there is no - // need to send an intent to turn off Bluetooth if the initial power state - // is off. - return; - } - - // Send initial power state in case both, Intent Helper and App instances are - // present. Intent Helper is required to dispatch this event and App is sign - // that ARC is fully started. In case of initial boot, App instance is started - // after the Intent Helper instance. In case of next boot Intent Helper and - // App instances are started at almost the same time and order of start is not - // determined. - if (!arc_bridge_service_->app()->has_instance() || - !arc_bridge_service_->intent_helper()->has_instance()) { - return; - } - - EnqueueLocalPowerChange(AdapterPowerState::TURN_ON); -} - -void ArcBluetoothBridge::EnqueueLocalPowerChange( - ArcBluetoothBridge::AdapterPowerState powered) { - local_power_changes_.push(powered); - - if (power_intent_timer_.IsRunning()) - return; - - SendBluetoothPoweredStateBroadcast(local_power_changes_.front()); - power_intent_timer_.Start( - FROM_HERE, kPowerIntentTimeout, - base::Bind(&ArcBluetoothBridge::DequeueLocalPowerChange, - weak_factory_.GetWeakPtr(), powered)); -} - -void ArcBluetoothBridge::DequeueLocalPowerChange( - ArcBluetoothBridge::AdapterPowerState powered) { - power_intent_timer_.Stop(); - - if (!IsPowerChangeInitiatedByLocal(powered)) - return; - - AdapterPowerState current_change = local_power_changes_.front(); - AdapterPowerState last_change = local_power_changes_.back(); - - // Compress the queue for power intent to reduce the amount of intents being - // sent to Android so that the powered state will be synced between Android - // and Chrome even if the state is toggled repeatedly on Chrome. - std::queue<AdapterPowerState> empty_queue; - std::swap(local_power_changes_, empty_queue); - - if (last_change == current_change) - return; - - local_power_changes_.push(last_change); - - SendBluetoothPoweredStateBroadcast(last_change); - power_intent_timer_.Start( - FROM_HERE, kPowerIntentTimeout, - base::Bind(&ArcBluetoothBridge::DequeueLocalPowerChange, - weak_factory_.GetWeakPtr(), last_change)); -} - -void ArcBluetoothBridge::EnqueueRemotePowerChange( - ArcBluetoothBridge::AdapterPowerState powered, - const EnableAdapterCallback& callback) { - remote_power_changes_.push(powered); - - bool turn_on = (powered == AdapterPowerState::TURN_ON); - bluetooth_adapter_->SetPowered( - turn_on, - base::Bind(turn_on ? &ArcBluetoothBridge::OnPoweredOn - : &ArcBluetoothBridge::OnPoweredOff, - weak_factory_.GetWeakPtr(), callback), - base::Bind(&ArcBluetoothBridge::OnPoweredError, - weak_factory_.GetWeakPtr(), callback)); -} - -void ArcBluetoothBridge::DequeueRemotePowerChange( - ArcBluetoothBridge::AdapterPowerState powered) { - remote_power_changes_.pop(); -} - -std::vector<mojom::BluetoothPropertyPtr> -ArcBluetoothBridge::GetDeviceProperties(mojom::BluetoothPropertyType type, - const BluetoothDevice* device) const { - std::vector<mojom::BluetoothPropertyPtr> properties; - - if (!device) { - return properties; - } - - if (type == mojom::BluetoothPropertyType::ALL || - type == mojom::BluetoothPropertyType::BDNAME) { - mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); - btp->set_bdname(device->GetName() ? device->GetName().value() : ""); - properties.push_back(std::move(btp)); - } - if (type == mojom::BluetoothPropertyType::ALL || - type == mojom::BluetoothPropertyType::BDADDR) { - mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); - btp->set_bdaddr(mojom::BluetoothAddress::From(device->GetAddress())); - properties.push_back(std::move(btp)); - } - if (type == mojom::BluetoothPropertyType::ALL || - type == mojom::BluetoothPropertyType::UUIDS) { - BluetoothDevice::UUIDSet uuids = device->GetUUIDs(); - if (uuids.size() > 0) { - mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); - btp->set_uuids(std::vector<BluetoothUUID>(uuids.begin(), uuids.end())); - properties.push_back(std::move(btp)); - } - } - if (type == mojom::BluetoothPropertyType::ALL || - type == mojom::BluetoothPropertyType::CLASS_OF_DEVICE) { - mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); - btp->set_device_class(device->GetBluetoothClass()); - properties.push_back(std::move(btp)); - } - if (type == mojom::BluetoothPropertyType::ALL || - type == mojom::BluetoothPropertyType::TYPE_OF_DEVICE) { - mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); - btp->set_device_type(device->GetType()); - properties.push_back(std::move(btp)); - } - if (type == mojom::BluetoothPropertyType::ALL || - type == mojom::BluetoothPropertyType::REMOTE_FRIENDLY_NAME) { - mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); - btp->set_remote_friendly_name( - base::UTF16ToUTF8(device->GetNameForDisplay())); - properties.push_back(std::move(btp)); - } - if (type == mojom::BluetoothPropertyType::ALL || - type == mojom::BluetoothPropertyType::REMOTE_RSSI) { - base::Optional<int8_t> rssi = device->GetInquiryRSSI(); - if (rssi.has_value()) { - mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); - btp->set_remote_rssi(rssi.value()); - properties.push_back(std::move(btp)); - } - } - // TODO(smbarber): Add remote version info - - return properties; -} - -std::vector<mojom::BluetoothPropertyPtr> -ArcBluetoothBridge::GetAdapterProperties( - mojom::BluetoothPropertyType type) const { - std::vector<mojom::BluetoothPropertyPtr> properties; - - if (type == mojom::BluetoothPropertyType::ALL || - type == mojom::BluetoothPropertyType::BDNAME) { - mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); - std::string name = bluetooth_adapter_->GetName(); - btp->set_bdname(name); - properties.push_back(std::move(btp)); - } - if (type == mojom::BluetoothPropertyType::ALL || - type == mojom::BluetoothPropertyType::BDADDR) { - mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); - btp->set_bdaddr( - mojom::BluetoothAddress::From(bluetooth_adapter_->GetAddress())); - properties.push_back(std::move(btp)); - } - if (type == mojom::BluetoothPropertyType::ALL || - type == mojom::BluetoothPropertyType::UUIDS) { - mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); - btp->set_uuids(bluetooth_adapter_->GetUUIDs()); - properties.push_back(std::move(btp)); - } - if (type == mojom::BluetoothPropertyType::ALL || - type == mojom::BluetoothPropertyType::CLASS_OF_DEVICE) { - mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); - btp->set_device_class(kBluetoothComputerClass); - properties.push_back(std::move(btp)); - } - if (type == mojom::BluetoothPropertyType::ALL || - type == mojom::BluetoothPropertyType::TYPE_OF_DEVICE) { - // Assume that all ChromeOS devices are dual mode Bluetooth device. - mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); - btp->set_device_type(device::BLUETOOTH_TRANSPORT_DUAL); - properties.push_back(std::move(btp)); - } - if (type == mojom::BluetoothPropertyType::ALL || - type == mojom::BluetoothPropertyType::ADAPTER_SCAN_MODE) { - mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); - mojom::BluetoothScanMode scan_mode = mojom::BluetoothScanMode::CONNECTABLE; - - if (bluetooth_adapter_->IsDiscoverable()) - scan_mode = mojom::BluetoothScanMode::CONNECTABLE_DISCOVERABLE; - - btp->set_adapter_scan_mode(scan_mode); - properties.push_back(std::move(btp)); - } - if (type == mojom::BluetoothPropertyType::ALL || - type == mojom::BluetoothPropertyType::ADAPTER_BONDED_DEVICES) { - mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); - BluetoothAdapter::DeviceList devices = bluetooth_adapter_->GetDevices(); - - std::vector<mojom::BluetoothAddressPtr> bonded_devices; - - for (auto* device : devices) { - if (device->IsPaired()) - continue; - - mojom::BluetoothAddressPtr addr = - mojom::BluetoothAddress::From(device->GetAddress()); - bonded_devices.push_back(std::move(addr)); - } - - btp->set_bonded_devices(std::move(bonded_devices)); - properties.push_back(std::move(btp)); - } - if (type == mojom::BluetoothPropertyType::ALL || - type == mojom::BluetoothPropertyType::ADAPTER_DISCOVERY_TIMEOUT) { - mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); - btp->set_discovery_timeout(bluetooth_adapter_->GetDiscoverableTimeout()); - properties.push_back(std::move(btp)); - } - if (type == mojom::BluetoothPropertyType::ALL || - type == mojom::BluetoothPropertyType::LOCAL_LE_FEATURES) { - // TODO(crbug.com/637171) Investigate all the le_features. - mojom::BluetoothPropertyPtr btp = mojom::BluetoothProperty::New(); - mojom::BluetoothLocalLEFeaturesPtr le_features = - mojom::BluetoothLocalLEFeatures::New(); - le_features->version_supported = kAndroidMBluetoothVersionNumber; - le_features->local_privacy_enabled = 0; - le_features->max_adv_instance = kMaxAdvertisements; - le_features->rpa_offload_supported = 0; - le_features->max_irk_list_size = 0; - le_features->max_adv_filter_supported = 0; - le_features->activity_energy_info_supported = 0; - le_features->scan_result_storage_size = 0; - le_features->total_trackable_advertisers = 0; - le_features->extended_scan_support = false; - le_features->debug_logging_supported = false; - btp->set_local_le_features(std::move(le_features)); - properties.push_back(std::move(btp)); - } - - return properties; -} - -// Android support 6 types of Advertising Data which are Advertising Data Flags, -// Local Name, Service UUIDs, Tx Power Level, Service Data, and Manufacturer -// Data. Note that we need to use 16-bit UUID in Service Data section because -// Android does not support 128-bit UUID there. -std::vector<mojom::BluetoothAdvertisingDataPtr> -ArcBluetoothBridge::GetAdvertisingData(const BluetoothDevice* device) const { - std::vector<mojom::BluetoothAdvertisingDataPtr> advertising_data; - - // Advertising Data Flags - if (device->GetAdvertisingDataFlags().has_value()) { - mojom::BluetoothAdvertisingDataPtr flags = - mojom::BluetoothAdvertisingData::New(); - flags->set_flags(device->GetAdvertisingDataFlags().value()); - advertising_data.push_back(std::move(flags)); - } - - // Local Name - mojom::BluetoothAdvertisingDataPtr local_name = - mojom::BluetoothAdvertisingData::New(); - local_name->set_local_name(device->GetName() ? device->GetName().value() - : ""); - advertising_data.push_back(std::move(local_name)); - - // Service UUIDs - const BluetoothDevice::UUIDSet& uuid_set = device->GetUUIDs(); - if (uuid_set.size() > 0) { - mojom::BluetoothAdvertisingDataPtr service_uuids = - mojom::BluetoothAdvertisingData::New(); - service_uuids->set_service_uuids( - std::vector<BluetoothUUID>(uuid_set.begin(), uuid_set.end())); - advertising_data.push_back(std::move(service_uuids)); - } - - // Tx Power Level - if (device->GetInquiryTxPower().has_value()) { - mojom::BluetoothAdvertisingDataPtr tx_power_level_element = - mojom::BluetoothAdvertisingData::New(); - tx_power_level_element->set_tx_power_level( - device->GetInquiryTxPower().value()); - advertising_data.push_back(std::move(tx_power_level_element)); - } - - // Service Data - for (const BluetoothUUID& uuid : device->GetServiceDataUUIDs()) { - mojom::BluetoothAdvertisingDataPtr service_data_element = - mojom::BluetoothAdvertisingData::New(); - mojom::BluetoothServiceDataPtr service_data = - mojom::BluetoothServiceData::New(); - - // Android only supports UUID 16 bit here. - service_data->uuid_16bit = GetUUID16(uuid); - - const std::vector<uint8_t>* data = device->GetServiceDataForUUID(uuid); - DCHECK(data != nullptr); - - service_data->data = *data; - - service_data_element->set_service_data(std::move(service_data)); - advertising_data.push_back(std::move(service_data_element)); - } - - // Manufacturer Data - if (!device->GetManufacturerData().empty()) { - std::vector<uint8_t> manufacturer_data; - for (const auto& pair : device->GetManufacturerData()) { - uint16_t id = pair.first; - // Use little endian here. - manufacturer_data.push_back(id & 0xff); - manufacturer_data.push_back(id >> 8); - manufacturer_data.insert(manufacturer_data.end(), pair.second.begin(), - pair.second.end()); - } - mojom::BluetoothAdvertisingDataPtr manufacturer_data_element = - mojom::BluetoothAdvertisingData::New(); - manufacturer_data_element->set_manufacturer_data(manufacturer_data); - advertising_data.push_back(std::move(manufacturer_data_element)); - } - - return advertising_data; -} - -void ArcBluetoothBridge::SendCachedDevicesFound() const { - DCHECK(bluetooth_adapter_); - - // Send devices that have already been discovered, but aren't connected. - BluetoothAdapter::DeviceList devices = bluetooth_adapter_->GetDevices(); - for (auto* device : devices) { - if (device->IsPaired()) - continue; - - SendDevice(device); - } -} - -void ArcBluetoothBridge::SendCachedPairedDevices() const { - DCHECK(bluetooth_adapter_); - - BluetoothAdapter::DeviceList devices = bluetooth_adapter_->GetDevices(); - for (auto* device : devices) { - if (!device->IsPaired()) - continue; - - SendDevice(device); - - // OnBondStateChanged must be called with mojom::BluetoothBondState::BONDING - // to make sure the bond state machine on Android is ready to take the - // pair-done event. Otherwise the pair-done event will be dropped as an - // invalid change of paired status. - mojom::BluetoothAddressPtr addr = - mojom::BluetoothAddress::From(device->GetAddress()); - OnPairing(addr->Clone()); - OnPairedDone(std::move(addr)); - } -} - -void ArcBluetoothBridge::OnGetServiceRecordsDone( - mojom::BluetoothAddressPtr remote_addr, - const BluetoothUUID& target_uuid, - const std::vector<bluez::BluetoothServiceRecordBlueZ>& records_bluez) { - auto* sdp_bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( - arc_bridge_service_->bluetooth(), OnGetSdpRecords); - if (!sdp_bluetooth_instance) - return; - - std::vector<mojom::BluetoothSdpRecordPtr> records; - for (const auto& r : records_bluez) - records.push_back(mojom::BluetoothSdpRecord::From(r)); - - sdp_bluetooth_instance->OnGetSdpRecords(mojom::BluetoothStatus::SUCCESS, - std::move(remote_addr), target_uuid, - std::move(records)); -} - -void ArcBluetoothBridge::OnGetServiceRecordsError( - mojom::BluetoothAddressPtr remote_addr, - const BluetoothUUID& target_uuid, - bluez::BluetoothServiceRecordBlueZ::ErrorCode error_code) { - auto* sdp_bluetooth_instance = ARC_GET_INSTANCE_FOR_METHOD( - arc_bridge_service_->bluetooth(), OnGetSdpRecords); - if (!sdp_bluetooth_instance) - return; - - mojom::BluetoothStatus status; - - switch (error_code) { - case bluez::BluetoothServiceRecordBlueZ::ErrorCode::ERROR_ADAPTER_NOT_READY: - status = mojom::BluetoothStatus::NOT_READY; - break; - case bluez::BluetoothServiceRecordBlueZ::ErrorCode:: - ERROR_DEVICE_DISCONNECTED: - status = mojom::BluetoothStatus::RMT_DEV_DOWN; - break; - default: - status = mojom::BluetoothStatus::FAIL; - break; - } - - sdp_bluetooth_instance->OnGetSdpRecords( - status, std::move(remote_addr), target_uuid, - std::vector<mojom::BluetoothSdpRecordPtr>()); -} - -} // namespace arc
diff --git a/components/arc/bluetooth/arc_bluetooth_bridge.h b/components/arc/bluetooth/arc_bluetooth_bridge.h deleted file mode 100644 index d60af96..0000000 --- a/components/arc/bluetooth/arc_bluetooth_bridge.h +++ /dev/null
@@ -1,551 +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 COMPONENTS_ARC_BLUETOOTH_ARC_BLUETOOTH_BRIDGE_H_ -#define COMPONENTS_ARC_BLUETOOTH_ARC_BLUETOOTH_BRIDGE_H_ - -#include <stdint.h> - -#include <map> -#include <memory> -#include <queue> -#include <string> -#include <unordered_map> -#include <unordered_set> -#include <vector> - -#include "base/callback.h" -#include "base/timer/timer.h" -#include "components/arc/common/bluetooth.mojom.h" -#include "components/arc/common/intent_helper.mojom.h" -#include "components/arc/instance_holder.h" -#include "components/keyed_service/core/keyed_service.h" -#include "device/bluetooth/bluetooth_adapter.h" -#include "device/bluetooth/bluetooth_adapter_factory.h" -#include "device/bluetooth/bluetooth_advertisement.h" -#include "device/bluetooth/bluetooth_device.h" -#include "device/bluetooth/bluetooth_discovery_session.h" -#include "device/bluetooth/bluetooth_local_gatt_service.h" -#include "device/bluetooth/bluetooth_remote_gatt_characteristic.h" -#include "device/bluetooth/bluetooth_remote_gatt_descriptor.h" -#include "device/bluetooth/bluetooth_remote_gatt_service.h" -#include "device/bluetooth/bluez/bluetooth_adapter_bluez.h" -#include "mojo/public/cpp/bindings/binding.h" - -namespace content { -class BrowserContext; -} // namespace content - -namespace arc { - -class ArcBridgeService; - -class ArcBluetoothBridge - : public KeyedService, - public InstanceHolder<mojom::BluetoothInstance>::Observer, - public device::BluetoothAdapter::Observer, - public device::BluetoothAdapterFactory::AdapterCallback, - public device::BluetoothLocalGattService::Delegate, - public mojom::BluetoothHost { - public: - // Returns singleton instance for the given BrowserContext, - // or nullptr if the browser |context| is not allowed to use ARC. - static ArcBluetoothBridge* GetForBrowserContext( - content::BrowserContext* context); - - ArcBluetoothBridge(content::BrowserContext* context, - ArcBridgeService* bridge_service); - ~ArcBluetoothBridge() override; - - // Overridden from InstanceHolder<mojom::BluetoothInstance>::Observer: - void OnInstanceReady() override; - void OnInstanceClosed() override; - - void OnAdapterInitialized(scoped_refptr<device::BluetoothAdapter> adapter); - - // Overridden from device::BluetoothAdapter::Observer - void AdapterPoweredChanged(device::BluetoothAdapter* adapter, - bool powered) override; - - void DeviceAdded(device::BluetoothAdapter* adapter, - device::BluetoothDevice* device) override; - - void DeviceChanged(device::BluetoothAdapter* adapter, - device::BluetoothDevice* device) override; - - void DeviceAddressChanged(device::BluetoothAdapter* adapter, - device::BluetoothDevice* device, - const std::string& old_address) override; - - void DevicePairedChanged(device::BluetoothAdapter* adapter, - device::BluetoothDevice* device, - bool new_paired_status) override; - - void DeviceRemoved(device::BluetoothAdapter* adapter, - device::BluetoothDevice* device) override; - - void GattServiceAdded(device::BluetoothAdapter* adapter, - device::BluetoothDevice* device, - device::BluetoothRemoteGattService* service) override; - - void GattServiceRemoved(device::BluetoothAdapter* adapter, - device::BluetoothDevice* device, - device::BluetoothRemoteGattService* service) override; - - void GattServicesDiscovered(device::BluetoothAdapter* adapter, - device::BluetoothDevice* device) override; - - void GattDiscoveryCompleteForService( - device::BluetoothAdapter* adapter, - device::BluetoothRemoteGattService* service) override; - - void GattServiceChanged(device::BluetoothAdapter* adapter, - device::BluetoothRemoteGattService* service) override; - - void GattCharacteristicAdded( - device::BluetoothAdapter* adapter, - device::BluetoothRemoteGattCharacteristic* characteristic) override; - - void GattCharacteristicRemoved( - device::BluetoothAdapter* adapter, - device::BluetoothRemoteGattCharacteristic* characteristic) override; - - void GattDescriptorAdded( - device::BluetoothAdapter* adapter, - device::BluetoothRemoteGattDescriptor* descriptor) override; - - void GattDescriptorRemoved( - device::BluetoothAdapter* adapter, - device::BluetoothRemoteGattDescriptor* descriptor) override; - - void GattCharacteristicValueChanged( - device::BluetoothAdapter* adapter, - device::BluetoothRemoteGattCharacteristic* characteristic, - const std::vector<uint8_t>& value) override; - - void GattDescriptorValueChanged( - device::BluetoothAdapter* adapter, - device::BluetoothRemoteGattDescriptor* descriptor, - const std::vector<uint8_t>& value) override; - - // Overridden from device::BluetoothLocalGattService::Delegate - void OnCharacteristicReadRequest( - const device::BluetoothDevice* device, - const device::BluetoothLocalGattCharacteristic* characteristic, - int offset, - const ValueCallback& callback, - const ErrorCallback& error_callback) override; - - void OnCharacteristicWriteRequest( - const device::BluetoothDevice* device, - const device::BluetoothLocalGattCharacteristic* characteristic, - const std::vector<uint8_t>& value, - int offset, - const base::Closure& callback, - const ErrorCallback& error_callback) override; - - void OnDescriptorReadRequest( - const device::BluetoothDevice* device, - const device::BluetoothLocalGattDescriptor* descriptor, - int offset, - const ValueCallback& callback, - const ErrorCallback& error_callback) override; - - void OnDescriptorWriteRequest( - const device::BluetoothDevice* device, - const device::BluetoothLocalGattDescriptor* descriptor, - const std::vector<uint8_t>& value, - int offset, - const base::Closure& callback, - const ErrorCallback& error_callback) override; - - void OnNotificationsStart( - const device::BluetoothDevice* device, - const device::BluetoothLocalGattCharacteristic* characteristic) override; - - void OnNotificationsStop( - const device::BluetoothDevice* device, - const device::BluetoothLocalGattCharacteristic* characteristic) override; - - // Bluetooth Mojo host interface - void EnableAdapter(const EnableAdapterCallback& callback) override; - void DisableAdapter(const DisableAdapterCallback& callback) override; - - void GetAdapterProperty(mojom::BluetoothPropertyType type) override; - void SetAdapterProperty(mojom::BluetoothPropertyPtr property) override; - - void GetRemoteDeviceProperty(mojom::BluetoothAddressPtr remote_addr, - mojom::BluetoothPropertyType type) override; - void SetRemoteDeviceProperty(mojom::BluetoothAddressPtr remote_addr, - mojom::BluetoothPropertyPtr property) override; - void GetRemoteServiceRecord(mojom::BluetoothAddressPtr remote_addr, - const device::BluetoothUUID& uuid) override; - - void GetRemoteServices(mojom::BluetoothAddressPtr remote_addr) override; - - void StartDiscovery() override; - void CancelDiscovery() override; - - void CreateBond(mojom::BluetoothAddressPtr addr, int32_t transport) override; - void RemoveBond(mojom::BluetoothAddressPtr addr) override; - void CancelBond(mojom::BluetoothAddressPtr addr) override; - - void GetConnectionState(mojom::BluetoothAddressPtr addr, - const GetConnectionStateCallback& callback) override; - - // Bluetooth Mojo host interface - Bluetooth Gatt Client functions - void StartLEScan() override; - void StopLEScan() override; - void ConnectLEDevice(mojom::BluetoothAddressPtr remote_addr) override; - void DisconnectLEDevice(mojom::BluetoothAddressPtr remote_addr) override; - void StartLEListen(const StartLEListenCallback& callback) override; - void StopLEListen(const StopLEListenCallback& callback) override; - void SearchService(mojom::BluetoothAddressPtr remote_addr) override; - - void GetGattDB(mojom::BluetoothAddressPtr remote_addr) override; - void ReadGattCharacteristic( - mojom::BluetoothAddressPtr remote_addr, - mojom::BluetoothGattServiceIDPtr service_id, - mojom::BluetoothGattIDPtr char_id, - const ReadGattCharacteristicCallback& callback) override; - void WriteGattCharacteristic( - mojom::BluetoothAddressPtr remote_addr, - mojom::BluetoothGattServiceIDPtr service_id, - mojom::BluetoothGattIDPtr char_id, - mojom::BluetoothGattValuePtr value, - const WriteGattCharacteristicCallback& callback) override; - void ReadGattDescriptor(mojom::BluetoothAddressPtr remote_addr, - mojom::BluetoothGattServiceIDPtr service_id, - mojom::BluetoothGattIDPtr char_id, - mojom::BluetoothGattIDPtr desc_id, - const ReadGattDescriptorCallback& callback) override; - void WriteGattDescriptor( - mojom::BluetoothAddressPtr remote_addr, - mojom::BluetoothGattServiceIDPtr service_id, - mojom::BluetoothGattIDPtr char_id, - mojom::BluetoothGattIDPtr desc_id, - mojom::BluetoothGattValuePtr value, - const WriteGattDescriptorCallback& callback) override; - void RegisterForGattNotification( - mojom::BluetoothAddressPtr remote_addr, - mojom::BluetoothGattServiceIDPtr service_id, - mojom::BluetoothGattIDPtr char_id, - const RegisterForGattNotificationCallback& callback) override; - void DeregisterForGattNotification( - mojom::BluetoothAddressPtr remote_addr, - mojom::BluetoothGattServiceIDPtr service_id, - mojom::BluetoothGattIDPtr char_id, - const DeregisterForGattNotificationCallback& callback) override; - void ReadRemoteRssi(mojom::BluetoothAddressPtr remote_addr, - const ReadRemoteRssiCallback& callback) override; - - void OpenBluetoothSocket( - const OpenBluetoothSocketCallback& callback) override; - - // Bluetooth Mojo host interface - Bluetooth Gatt Server functions - // Android counterpart link: - // https://source.android.com/devices/halref/bt__gatt__server_8h.html - // Create a new service. Chrome will create an integer service handle based on - // that BlueZ identifier that will pass back to Android in the callback. - // num_handles: number of handle for characteristic / descriptor that will be - // created in this service - void AddService(mojom::BluetoothGattServiceIDPtr service_id, - int32_t num_handles, - const AddServiceCallback& callback) override; - // Add a characteristic to a service and pass the characteristic handle back. - void AddCharacteristic(int32_t service_handle, - const device::BluetoothUUID& uuid, - int32_t properties, - int32_t permissions, - const AddCharacteristicCallback& callback) override; - // Add a descriptor to the last characteristic added to the given service - // and pass the descriptor handle back. - void AddDescriptor(int32_t service_handle, - const device::BluetoothUUID& uuid, - int32_t permissions, - const AddDescriptorCallback& callback) override; - // Start a local service. - void StartService(int32_t service_handle, - const StartServiceCallback& callback) override; - // Stop a local service. - void StopService(int32_t service_handle, - const StopServiceCallback& callback) override; - // Delete a local service. - void DeleteService(int32_t service_handle, - const DeleteServiceCallback& callback) override; - // Send value indication to a remote device. - void SendIndication(int32_t attribute_handle, - mojom::BluetoothAddressPtr address, - bool confirm, - const std::vector<uint8_t>& value, - const SendIndicationCallback& callback) override; - - // Bluetooth Mojo host interface - Bluetooth SDP functions - void GetSdpRecords(mojom::BluetoothAddressPtr remote_addr, - const device::BluetoothUUID& target_uuid) override; - void CreateSdpRecord(mojom::BluetoothSdpRecordPtr record_mojo, - const CreateSdpRecordCallback& callback) override; - void RemoveSdpRecord(uint32_t service_handle, - const RemoveSdpRecordCallback& callback) override; - - // Set up or disable multiple advertising. - void ReserveAdvertisementHandle( - const ReserveAdvertisementHandleCallback& callback) override; - void BroadcastAdvertisement( - int32_t adv_handle, - std::unique_ptr<device::BluetoothAdvertisement::Data> advertisement, - const BroadcastAdvertisementCallback& callback) override; - void ReleaseAdvertisementHandle( - int32_t adv_handle, - const ReleaseAdvertisementHandleCallback& callback) override; - - // Chrome observer callbacks - void OnPoweredOn( - const base::Callback<void(mojom::BluetoothAdapterState)>& callback) const; - void OnPoweredOff( - const base::Callback<void(mojom::BluetoothAdapterState)>& callback) const; - void OnPoweredError( - const base::Callback<void(mojom::BluetoothAdapterState)>& callback) const; - void OnDiscoveryStarted( - std::unique_ptr<device::BluetoothDiscoverySession> session); - void OnDiscoveryStopped(); - void OnDiscoveryError(); - void OnPairing(mojom::BluetoothAddressPtr addr) const; - void OnPairedDone(mojom::BluetoothAddressPtr addr) const; - void OnPairedError( - mojom::BluetoothAddressPtr addr, - device::BluetoothDevice::ConnectErrorCode error_code) const; - void OnForgetDone(mojom::BluetoothAddressPtr addr) const; - void OnForgetError(mojom::BluetoothAddressPtr addr) const; - - void OnGattConnectStateChanged(mojom::BluetoothAddressPtr addr, - bool connected) const; - void OnGattConnected( - mojom::BluetoothAddressPtr addr, - std::unique_ptr<device::BluetoothGattConnection> connection); - void OnGattConnectError( - mojom::BluetoothAddressPtr addr, - device::BluetoothDevice::ConnectErrorCode error_code) const; - void OnGattDisconnected(mojom::BluetoothAddressPtr addr); - - void OnStartLEListenDone(const StartLEListenCallback& callback, - scoped_refptr<device::BluetoothAdvertisement> adv); - void OnStartLEListenError( - const StartLEListenCallback& callback, - device::BluetoothAdvertisement::ErrorCode error_code); - - void OnStopLEListenDone(const StopLEListenCallback& callback); - void OnStopLEListenError( - const StopLEListenCallback& callback, - device::BluetoothAdvertisement::ErrorCode error_code); - - void OnGattNotifyStartDone( - const RegisterForGattNotificationCallback& callback, - const std::string char_string_id, - std::unique_ptr<device::BluetoothGattNotifySession> notify_session); - - private: - template <typename T> - class InstanceObserver; - class AppInstanceObserver; - class IntentHelperInstanceObserver; - - // Power state change on Bluetooth adapter. - enum class AdapterPowerState { TURN_OFF, TURN_ON }; - - bool IsInstanceUp() const { return is_bluetooth_instance_up_; } - - // Indicates if a power change is initiated by Chrome / Android. - bool IsPowerChangeInitiatedByRemote( - ArcBluetoothBridge::AdapterPowerState powered) const; - bool IsPowerChangeInitiatedByLocal( - ArcBluetoothBridge::AdapterPowerState powered) const; - - // Sends initial power state when all preconditions are met. - void MaybeSendInitialPowerChange(); - - // Manages the powered change intents sent to Android. - void EnqueueLocalPowerChange(AdapterPowerState powered); - void DequeueLocalPowerChange(AdapterPowerState powered); - - // Manages the powered change requests received from Android. - void EnqueueRemotePowerChange(AdapterPowerState powered, - const EnableAdapterCallback& callback); - void DequeueRemotePowerChange(AdapterPowerState powered); - - std::vector<mojom::BluetoothPropertyPtr> GetDeviceProperties( - mojom::BluetoothPropertyType type, - const device::BluetoothDevice* device) const; - std::vector<mojom::BluetoothPropertyPtr> GetAdapterProperties( - mojom::BluetoothPropertyType type) const; - std::vector<mojom::BluetoothAdvertisingDataPtr> GetAdvertisingData( - const device::BluetoothDevice* device) const; - - void SendCachedDevicesFound() const; - - device::BluetoothRemoteGattCharacteristic* FindGattCharacteristic( - mojom::BluetoothAddressPtr remote_addr, - mojom::BluetoothGattServiceIDPtr service_id, - mojom::BluetoothGattIDPtr char_id) const; - - device::BluetoothRemoteGattDescriptor* FindGattDescriptor( - mojom::BluetoothAddressPtr remote_addr, - mojom::BluetoothGattServiceIDPtr service_id, - mojom::BluetoothGattIDPtr char_id, - mojom::BluetoothGattIDPtr desc_id) const; - - // Send the power status change to Android via an intent. - void SendBluetoothPoweredStateBroadcast(AdapterPowerState powered) const; - - // Propagates the list of paired device to Android. - void SendCachedPairedDevices() const; - - bool IsGattServerAttributeHandleAvailable(int need); - int32_t GetNextGattServerAttributeHandle(); - template <class LocalGattAttribute> - int32_t CreateGattAttributeHandle(LocalGattAttribute* attribute); - - // Common code for OnCharacteristicReadRequest and OnDescriptorReadRequest - template <class LocalGattAttribute> - void OnGattAttributeReadRequest(const device::BluetoothDevice* device, - const LocalGattAttribute* attribute, - int offset, - const ValueCallback& success_callback, - const ErrorCallback& error_callback); - - // Common code for OnCharacteristicWriteRequest and OnDescriptorWriteRequest - template <class LocalGattAttribute> - void OnGattAttributeWriteRequest(const device::BluetoothDevice* device, - const LocalGattAttribute* attribute, - const std::vector<uint8_t>& value, - int offset, - const base::Closure& success_callback, - const ErrorCallback& error_callback); - - void OnSetDiscoverable(bool discoverable, bool success, uint32_t timeout); - void SetDiscoverable(bool discoverable, uint32_t timeout); - - void OnGetServiceRecordsDone( - mojom::BluetoothAddressPtr remote_addr, - const device::BluetoothUUID& target_uuid, - const std::vector<bluez::BluetoothServiceRecordBlueZ>& records_bluez); - void OnGetServiceRecordsError( - mojom::BluetoothAddressPtr remote_addr, - const device::BluetoothUUID& target_uuid, - bluez::BluetoothServiceRecordBlueZ::ErrorCode error_code); - - void OnSetAdapterProperty(mojom::BluetoothStatus success, - mojom::BluetoothPropertyPtr property); - - // Callbacks for managing advertisements registered from the instance. - - // Called when we have an open slot in the advertisement map and want to - // register the advertisement given by |data| for handle |adv_handle|. - void OnReadyToRegisterAdvertisement( - const BroadcastAdvertisementCallback& callback, - int32_t adv_handle, - std::unique_ptr<device::BluetoothAdvertisement::Data> data); - // Called when we've successfully registered a new advertisement for - // handle |adv_handle|. - void OnRegisterAdvertisementDone( - const BroadcastAdvertisementCallback& callback, - int32_t adv_handle, - scoped_refptr<device::BluetoothAdvertisement> advertisement); - // Called when the attempt to register an advertisement for handle - // |adv_handle| has failed. |adv_handle| remains reserved, but no - // advertisement is associated with it. - void OnRegisterAdvertisementError( - const BroadcastAdvertisementCallback& callback, - int32_t adv_handle, - device::BluetoothAdvertisement::ErrorCode error_code); - // Both of the following are called after we've tried to unregister - // the advertisement for |adv_handle|. Either way, we will no - // longer be broadcasting this advertisement, so in either case, the - // handle can be released. - void OnUnregisterAdvertisementDone( - const ReleaseAdvertisementHandleCallback& callback, - int32_t adv_handle); - void OnUnregisterAdvertisementError( - const ReleaseAdvertisementHandleCallback& callback, - int32_t adv_handle, - device::BluetoothAdvertisement::ErrorCode error_code); - // Find the next free advertisement handle and put it in *adv_handle, - // or return false if the advertisement map is full. - bool GetAdvertisementHandle(int32_t* adv_handle); - - void SendDevice(const device::BluetoothDevice* device) const; - - ArcBridgeService* const arc_bridge_service_; // Owned by ArcServiceManager. - - mojo::Binding<mojom::BluetoothHost> binding_; - - scoped_refptr<bluez::BluetoothAdapterBlueZ> bluetooth_adapter_; - scoped_refptr<device::BluetoothAdvertisement> advertisment_; - std::unique_ptr<device::BluetoothDiscoverySession> discovery_session_; - std::unordered_map<std::string, - std::unique_ptr<device::BluetoothGattNotifySession>> - notification_session_; - // Map from Android int handle to Chrome (BlueZ) string identifier. - std::unordered_map<int32_t, std::string> gatt_identifier_; - // Map from Chrome (BlueZ) string identifier to android int handle. - std::unordered_map<std::string, int32_t> gatt_handle_; - // Store last GattCharacteristic added to each GattService for GattServer. - std::unordered_map<int32_t, int32_t> last_characteristic_; - // Monotonically increasing value to use as handle to give to Android side. - int32_t gatt_server_attribute_next_handle_ = 0; - // Keeps track of all devices which initiated a GATT connection to us. - std::unordered_set<std::string> gatt_connection_cache_; - // Map of device address to GATT connection objects for connections we - // have made. We need to hang on to these as long as the connection is - // active since their destructors will drop the connections otherwise. - std::unordered_map<std::string, - std::unique_ptr<device::BluetoothGattConnection>> - gatt_connections_; - // Timer to turn discovery off. - base::OneShotTimer discovery_off_timer_; - // Timer to turn adapter discoverable off. - base::OneShotTimer discoverable_off_timer_; - - // This indicates whether the remote Bluetooth ARC instance is ready to - // receive events. - bool is_bluetooth_instance_up_; - - // Observers to listen the start-up of App and Intent Helper. - std::unique_ptr<AppInstanceObserver> app_observer_; - std::unique_ptr<IntentHelperInstanceObserver> intent_helper_observer_; - // Queue to track the powered state changes initiated by Android. - std::queue<AdapterPowerState> remote_power_changes_; - // Queue to track the powered state changes initiated by Chrome. - std::queue<AdapterPowerState> local_power_changes_; - // Timer to track the completion of power-changed intent sent to Android. - base::OneShotTimer power_intent_timer_; - - // Holds advertising data registered by the instance. - // - // When a handle is reserved, an entry is placed into the advertisements_ - // map. This entry is not yet associated with a device::BluetoothAdvertisement - // because the instance hasn't sent us any advertising data yet, so its - // mapped value is nullptr until that happens. Thus we have three states for a - // handle: - // * unmapped -> free - // * mapped to nullptr -> reserved, awaiting data - // * mapped to a device::BluetoothAdvertisement -> in use, and the mapped - // BluetoothAdvertisement is currently registered with the adapter. - // TODO(crbug.com/658385) Change back to 5 when we support setting signal - // strength per each advertisement slot. - enum { kMaxAdvertisements = 1 }; - std::map<int32_t, scoped_refptr<device::BluetoothAdvertisement>> - advertisements_; - - THREAD_CHECKER(thread_checker_); - - // WeakPtrFactory to use for callbacks. - base::WeakPtrFactory<ArcBluetoothBridge> weak_factory_; - - DISALLOW_COPY_AND_ASSIGN(ArcBluetoothBridge); -}; - -} // namespace arc - -#endif // COMPONENTS_ARC_BLUETOOTH_ARC_BLUETOOTH_BRIDGE_H_
diff --git a/components/arc/bluetooth/arc_bluetooth_bridge_unittest.cc b/components/arc/bluetooth/arc_bluetooth_bridge_unittest.cc deleted file mode 100644 index 492541c5..0000000 --- a/components/arc/bluetooth/arc_bluetooth_bridge_unittest.cc +++ /dev/null
@@ -1,332 +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 "components/arc/bluetooth/arc_bluetooth_bridge.h" - -#include <string> -#include <utility> -#include <vector> - -#include "base/memory/ptr_util.h" -#include "base/message_loop/message_loop.h" -#include "base/run_loop.h" -#include "base/strings/stringprintf.h" -#include "components/arc/arc_bridge_service.h" -#include "components/arc/bluetooth/bluetooth_type_converters.h" -#include "components/arc/common/bluetooth.mojom.h" -#include "components/arc/test/fake_bluetooth_instance.h" -#include "device/bluetooth/dbus/bluez_dbus_manager.h" -#include "device/bluetooth/dbus/fake_bluetooth_adapter_client.h" -#include "device/bluetooth/dbus/fake_bluetooth_device_client.h" -#include "device/bluetooth/dbus/fake_bluetooth_gatt_characteristic_client.h" -#include "device/bluetooth/dbus/fake_bluetooth_gatt_descriptor_client.h" -#include "device/bluetooth/dbus/fake_bluetooth_gatt_service_client.h" -#include "device/bluetooth/dbus/fake_bluetooth_le_advertising_manager_client.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace { -constexpr int16_t kTestRssi = -50; -constexpr int16_t kTestRssi2 = -70; -} - -namespace arc { - -constexpr int kFailureAdvHandle = -1; - -class ArcBluetoothBridgeTest : public testing::Test { - protected: - void AddTestDevice() { - bluez::BluezDBusManager* dbus_manager = bluez::BluezDBusManager::Get(); - auto* fake_bluetooth_device_client = - static_cast<bluez::FakeBluetoothDeviceClient*>( - dbus_manager->GetBluetoothDeviceClient()); - auto* fake_bluetooth_gatt_service_client = - static_cast<bluez::FakeBluetoothGattServiceClient*>( - dbus_manager->GetBluetoothGattServiceClient()); - auto* fake_bluetooth_gatt_characteristic_client = - static_cast<bluez::FakeBluetoothGattCharacteristicClient*>( - dbus_manager->GetBluetoothGattCharacteristicClient()); - - fake_bluetooth_device_client->CreateDevice( - dbus::ObjectPath(bluez::FakeBluetoothAdapterClient::kAdapterPath), - dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath)); - fake_bluetooth_gatt_service_client->ExposeHeartRateService( - dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath)); - fake_bluetooth_gatt_characteristic_client->ExposeHeartRateCharacteristics( - fake_bluetooth_gatt_service_client->GetHeartRateServicePath()); - - ChangeTestDeviceRssi(kTestRssi); - } - - void ChangeTestDeviceRssi(uint16_t rssi) { - bluez::BluezDBusManager* dbus_manager = bluez::BluezDBusManager::Get(); - auto* fake_bluetooth_device_client = - static_cast<bluez::FakeBluetoothDeviceClient*>( - dbus_manager->GetBluetoothDeviceClient()); - fake_bluetooth_device_client->UpdateDeviceRSSI( - dbus::ObjectPath(bluez::FakeBluetoothDeviceClient::kLowEnergyPath), - rssi); - } - - void OnAdapterInitialized(scoped_refptr<device::BluetoothAdapter> adapter) { - adapter_ = adapter; - get_adapter_run_loop_.Quit(); - } - - void SetUp() override { - std::unique_ptr<bluez::BluezDBusManagerSetter> dbus_setter = - bluez::BluezDBusManager::GetSetterForTesting(); - auto fake_bluetooth_device_client = - base::MakeUnique<bluez::FakeBluetoothDeviceClient>(); - fake_bluetooth_device_client->RemoveAllDevices(); - dbus_setter->SetBluetoothDeviceClient( - std::move(fake_bluetooth_device_client)); - dbus_setter->SetBluetoothGattServiceClient( - base::MakeUnique<bluez::FakeBluetoothGattServiceClient>()); - dbus_setter->SetBluetoothGattCharacteristicClient( - base::MakeUnique<bluez::FakeBluetoothGattCharacteristicClient>()); - dbus_setter->SetBluetoothGattDescriptorClient( - base::MakeUnique<bluez::FakeBluetoothGattDescriptorClient>()); - - arc_bridge_service_ = base::MakeUnique<ArcBridgeService>(); - fake_bluetooth_instance_ = base::MakeUnique<FakeBluetoothInstance>(); - arc_bridge_service_->bluetooth()->SetInstance( - fake_bluetooth_instance_.get(), 2); - // TODO(hidehiko): Use Singleton instance tied to BrowserContext. - arc_bluetooth_bridge_ = base::MakeUnique<ArcBluetoothBridge>( - nullptr, arc_bridge_service_.get()); - - device::BluetoothAdapterFactory::GetAdapter(base::Bind( - &ArcBluetoothBridgeTest::OnAdapterInitialized, base::Unretained(this))); - // We will quit the loop once we get the adapter. - get_adapter_run_loop_.Run(); - } - - // Helper methods for multi advertisement tests. - int32_t ReserveAdvertisementHandle() { - constexpr int kSentinelHandle = -2; - last_adv_handle_ = kSentinelHandle; - arc_bluetooth_bridge_->ReserveAdvertisementHandle( - base::Bind(&ArcBluetoothBridgeTest::ReserveAdvertisementHandleCallback, - base::Unretained(this))); - - base::RunLoop().RunUntilIdle(); - // Make sure the callback was called. - EXPECT_NE(kSentinelHandle, last_adv_handle_); - return last_adv_handle_; - } - - mojom::BluetoothGattStatus BroadcastAdvertisement( - int adv_handle, - std::unique_ptr<device::BluetoothAdvertisement::Data> data) { - last_status_ = mojom::BluetoothGattStatus::GATT_REQUEST_NOT_SUPPORTED; - arc_bluetooth_bridge_->BroadcastAdvertisement( - adv_handle, std::move(data), - base::Bind(&ArcBluetoothBridgeTest::StatusSetterCallback, - base::Unretained(this))); - - base::RunLoop().RunUntilIdle(); - EXPECT_NE(mojom::BluetoothGattStatus::GATT_REQUEST_NOT_SUPPORTED, - last_status_); - return last_status_; - } - - mojom::BluetoothGattStatus ReleaseAdvertisementHandle(int adv_handle) { - last_status_ = mojom::BluetoothGattStatus::GATT_REQUEST_NOT_SUPPORTED; - arc_bluetooth_bridge_->ReleaseAdvertisementHandle( - adv_handle, base::Bind(&ArcBluetoothBridgeTest::StatusSetterCallback, - base::Unretained(this))); - - base::RunLoop().RunUntilIdle(); - EXPECT_NE(mojom::BluetoothGattStatus::GATT_REQUEST_NOT_SUPPORTED, - last_status_); - return last_status_; - } - - void ReserveAdvertisementHandleCallback(mojom::BluetoothGattStatus status, - int32_t adv_handle) { - if (status == mojom::BluetoothGattStatus::GATT_FAILURE) - last_adv_handle_ = kFailureAdvHandle; - else - last_adv_handle_ = adv_handle; - } - - void StatusSetterCallback(mojom::BluetoothGattStatus status) { - last_status_ = status; - } - - int NumActiveAdvertisements() { - bluez::FakeBluetoothLEAdvertisingManagerClient* adv_client = - static_cast<bluez::FakeBluetoothLEAdvertisingManagerClient*>( - bluez::BluezDBusManager::Get() - ->GetBluetoothLEAdvertisingManagerClient()); - return adv_client->currently_registered(); - } - - int last_adv_handle_; - mojom::BluetoothGattStatus last_status_; - - std::unique_ptr<ArcBridgeService> arc_bridge_service_; - std::unique_ptr<FakeBluetoothInstance> fake_bluetooth_instance_; - std::unique_ptr<ArcBluetoothBridge> arc_bluetooth_bridge_; - scoped_refptr<device::BluetoothAdapter> adapter_; - base::MessageLoop message_loop_; - base::RunLoop get_adapter_run_loop_; -}; - -// When we add device to bluez::FakeBluetoothDeviceClient, ArcBluetoothBridge -// should send new device data to Android. This test will then check -// the correctness of the device properties sent via arc bridge. -TEST_F(ArcBluetoothBridgeTest, DeviceFound) { - EXPECT_EQ(0u, fake_bluetooth_instance_->device_found_data().size()); - AddTestDevice(); - EXPECT_EQ(2u, fake_bluetooth_instance_->device_found_data().size()); - const std::vector<mojom::BluetoothPropertyPtr>& prop = - fake_bluetooth_instance_->device_found_data().back(); - - EXPECT_EQ(7u, prop.size()); - EXPECT_TRUE(prop[0]->is_bdname()); - EXPECT_EQ(std::string(bluez::FakeBluetoothDeviceClient::kLowEnergyName), - prop[0]->get_bdname()); - EXPECT_TRUE(prop[1]->is_bdaddr()); - EXPECT_EQ(std::string(bluez::FakeBluetoothDeviceClient::kLowEnergyAddress), - prop[1]->get_bdaddr()->To<std::string>()); - EXPECT_TRUE(prop[2]->is_uuids()); - EXPECT_EQ(1u, prop[2]->get_uuids().size()); - EXPECT_EQ(bluez::FakeBluetoothGattServiceClient::kHeartRateServiceUUID, - prop[2]->get_uuids()[0].value()); - EXPECT_TRUE(prop[3]->is_device_class()); - EXPECT_EQ(bluez::FakeBluetoothDeviceClient::kLowEnergyClass, - prop[3]->get_device_class()); - EXPECT_TRUE(prop[4]->is_device_type()); - // bluez::FakeBluetoothDeviceClient does not return proper device type. - EXPECT_TRUE(prop[5]->is_remote_friendly_name()); - EXPECT_EQ(std::string(bluez::FakeBluetoothDeviceClient::kLowEnergyName), - prop[5]->get_remote_friendly_name()); - EXPECT_TRUE(prop[6]->is_remote_rssi()); - EXPECT_EQ(kTestRssi, prop[6]->get_remote_rssi()); - - ChangeTestDeviceRssi(kTestRssi2); - EXPECT_EQ(3u, fake_bluetooth_instance_->device_found_data().size()); - const std::vector<mojom::BluetoothPropertyPtr>& prop2 = - fake_bluetooth_instance_->device_found_data().back(); - EXPECT_EQ(7u, prop2.size()); - EXPECT_TRUE(prop2[6]->is_remote_rssi()); - EXPECT_EQ(kTestRssi2, prop2[6]->get_remote_rssi()); -} - -// Invoke OnDiscoveryStarted to send cached device to BT instance, -// and check correctness of the Advertising data sent via arc bridge. -TEST_F(ArcBluetoothBridgeTest, LEDeviceFound) { - EXPECT_EQ(0u, fake_bluetooth_instance_->le_device_found_data().size()); - AddTestDevice(); - EXPECT_EQ(1u, fake_bluetooth_instance_->le_device_found_data().size()); - - const auto& le_device_found_data = - fake_bluetooth_instance_->le_device_found_data().back(); - const mojom::BluetoothAddressPtr& addr = le_device_found_data->addr(); - const std::vector<mojom::BluetoothAdvertisingDataPtr>& adv_data = - le_device_found_data->adv_data(); - - EXPECT_EQ(std::string(bluez::FakeBluetoothDeviceClient::kLowEnergyAddress), - addr->To<std::string>()); - EXPECT_EQ(2u, adv_data.size()); - - EXPECT_TRUE(adv_data[0]->is_local_name()); - EXPECT_EQ(std::string(bluez::FakeBluetoothDeviceClient::kLowEnergyName), - adv_data[0]->get_local_name()); - - EXPECT_TRUE(adv_data[1]->is_service_uuids()); - EXPECT_EQ(1u, adv_data[1]->get_service_uuids().size()); - EXPECT_EQ(bluez::FakeBluetoothGattServiceClient::kHeartRateServiceUUID, - adv_data[1]->get_service_uuids()[0].canonical_value()); - - EXPECT_EQ(kTestRssi, le_device_found_data->rssi()); - - ChangeTestDeviceRssi(kTestRssi2); - EXPECT_EQ(2u, fake_bluetooth_instance_->le_device_found_data().size()); - EXPECT_EQ(kTestRssi2, - fake_bluetooth_instance_->le_device_found_data().back()->rssi()); -} - -// Invoke GetGattDB and check correctness of the GattDB sent via arc bridge. -TEST_F(ArcBluetoothBridgeTest, GetGattDB) { - AddTestDevice(); - - arc_bluetooth_bridge_->GetGattDB(mojom::BluetoothAddress::From( - std::string(bluez::FakeBluetoothDeviceClient::kLowEnergyAddress))); - EXPECT_EQ(1u, fake_bluetooth_instance_->gatt_db_result().size()); - - const mojom::BluetoothAddressPtr& addr = - fake_bluetooth_instance_->gatt_db_result().back()->remote_addr(); - EXPECT_EQ(std::string(bluez::FakeBluetoothDeviceClient::kLowEnergyAddress), - addr->To<std::string>()); - - // HeartRateService in bluez::FakeBluetoothDeviceClient consists of - // Service: HeartRateService - // Characteristic: HeartRateMeasurement - // Descriptor: ClientCharacteristicConfiguration - // Characteristic: BodySensorLocation - // Characteristic: HeartRateControlPoint - const std::vector<mojom::BluetoothGattDBElementPtr>& db = - fake_bluetooth_instance_->gatt_db_result().back()->db(); - EXPECT_EQ(5u, db.size()); - - EXPECT_EQ(device::BluetoothUUID( - bluez::FakeBluetoothGattServiceClient::kHeartRateServiceUUID), - db[0]->uuid); - EXPECT_EQ(mojom::BluetoothGattDBAttributeType::BTGATT_DB_PRIMARY_SERVICE, - db[0]->type); - - EXPECT_EQ(device::BluetoothUUID(bluez::FakeBluetoothGattCharacteristicClient:: - kHeartRateMeasurementUUID), - db[1]->uuid); - EXPECT_EQ(mojom::BluetoothGattDBAttributeType::BTGATT_DB_CHARACTERISTIC, - db[1]->type); - EXPECT_EQ(device::BluetoothGattCharacteristic::PROPERTY_NOTIFY, - db[1]->properties); - - EXPECT_EQ(device::BluetoothUUID(bluez::FakeBluetoothGattDescriptorClient:: - kClientCharacteristicConfigurationUUID), - db[2]->uuid); - EXPECT_EQ(mojom::BluetoothGattDBAttributeType::BTGATT_DB_DESCRIPTOR, - db[2]->type); - - EXPECT_EQ(device::BluetoothUUID(bluez::FakeBluetoothGattCharacteristicClient:: - kBodySensorLocationUUID), - db[3]->uuid); - EXPECT_EQ(mojom::BluetoothGattDBAttributeType::BTGATT_DB_CHARACTERISTIC, - db[3]->type); - EXPECT_EQ(device::BluetoothGattCharacteristic::PROPERTY_READ, - db[3]->properties); - - EXPECT_EQ(device::BluetoothUUID(bluez::FakeBluetoothGattCharacteristicClient:: - kHeartRateControlPointUUID), - db[4]->uuid); - EXPECT_EQ(mojom::BluetoothGattDBAttributeType::BTGATT_DB_CHARACTERISTIC, - db[4]->type); - EXPECT_EQ(device::BluetoothGattCharacteristic::PROPERTY_WRITE, - db[4]->properties); -} - -// Invoke multi advertisement methods and make sure they are going down to the -// D-Bus clients. -TEST_F(ArcBluetoothBridgeTest, SingleAdvertisement) { - int32_t handle = ReserveAdvertisementHandle(); - EXPECT_NE(kFailureAdvHandle, handle); - EXPECT_EQ(0, NumActiveAdvertisements()); - - auto adv_data = base::MakeUnique<device::BluetoothAdvertisement::Data>( - device::BluetoothAdvertisement::ADVERTISEMENT_TYPE_BROADCAST); - mojom::BluetoothGattStatus status = - BroadcastAdvertisement(handle, std::move(adv_data)); - EXPECT_EQ(mojom::BluetoothGattStatus::GATT_SUCCESS, status); - EXPECT_EQ(1, NumActiveAdvertisements()); - - status = ReleaseAdvertisementHandle(handle); - EXPECT_EQ(mojom::BluetoothGattStatus::GATT_SUCCESS, status); - EXPECT_EQ(0, NumActiveAdvertisements()); -} - -} // namespace arc
diff --git a/components/arc/common/voice_interaction_framework.mojom b/components/arc/common/voice_interaction_framework.mojom index d913896..aaa0a47 100644 --- a/components/arc/common/voice_interaction_framework.mojom +++ b/components/arc/common/voice_interaction_framework.mojom
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Next MinVersion: 10 +// Next MinVersion: 11 module arc.mojom; @@ -53,7 +53,7 @@ }; // Connects with Android system server. -// Next method ID: 9 +// Next method ID: 10 interface VoiceInteractionFrameworkInstance { Init@0(VoiceInteractionFrameworkHost host_ptr); @@ -81,6 +81,9 @@ // Starts the voice interaction setup wizard in container. [MinVersion=5] StartVoiceInteractionSetupWizard@6(); + // Starts the voice interaction setup wizard in container. + [MinVersion=10] ShowVoiceInteractionSettings@9(); + // Queries voice interaction settings status. [MinVersion=7] GetVoiceInteractionSettings@7() => (VoiceInteractionStatus status);
diff --git a/components/autofill/android/java/strings/translations/autofill_strings_en-GB.xtb b/components/autofill/android/java/strings/translations/autofill_strings_en-GB.xtb index 12c3fa00..5649da1e 100644 --- a/components/autofill/android/java/strings/translations/autofill_strings_en-GB.xtb +++ b/components/autofill/android/java/strings/translations/autofill_strings_en-GB.xtb
@@ -1,4 +1,5 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="en-GB"> +<translation id="1112374155460533568">Showing AutoFill pop-up</translation> </translationbundle> \ No newline at end of file
diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc index 17218afa..9413166 100644 --- a/components/content_settings/core/browser/content_settings_registry.cc +++ b/components/content_settings/core/browser/content_settings_registry.cc
@@ -317,16 +317,6 @@ WebsiteSettingsRegistry::DESKTOP | WebsiteSettingsRegistry::PLATFORM_ANDROID, ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE); - - Register(CONTENT_SETTINGS_TYPE_ACCESSIBILITY_EVENTS, "accessibility-events", - CONTENT_SETTING_ASK, WebsiteSettingsInfo::UNSYNCABLE, - WhitelistedSchemes(), - ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK, - CONTENT_SETTING_ASK), - WebsiteSettingsInfo::REQUESTING_ORIGIN_AND_TOP_LEVEL_ORIGIN_SCOPE, - WebsiteSettingsRegistry::DESKTOP | - WebsiteSettingsRegistry::PLATFORM_ANDROID, - ContentSettingsInfo::INHERIT_IF_LESS_PERMISSIVE); } void ContentSettingsRegistry::Register(
diff --git a/components/content_settings/core/common/content_settings.cc b/components/content_settings/core/common/content_settings.cc index de1df544..66b8c4d 100644 --- a/components/content_settings/core/common/content_settings.cc +++ b/components/content_settings/core/common/content_settings.cc
@@ -28,7 +28,7 @@ // content settings type name instead. // // The array size must be explicit for the static_asserts below. -constexpr size_t kNumHistogramValues = 33; +constexpr size_t kNumHistogramValues = 32; constexpr HistogramValue kHistogramValue[kNumHistogramValues] = { {CONTENT_SETTINGS_TYPE_COOKIES, 0}, {CONTENT_SETTINGS_TYPE_IMAGES, 1}, @@ -62,7 +62,6 @@ {CONTENT_SETTINGS_TYPE_SOUND, 36}, {CONTENT_SETTINGS_TYPE_CLIENT_HINTS, 37}, {CONTENT_SETTINGS_TYPE_SENSORS, 38}, - {CONTENT_SETTINGS_TYPE_ACCESSIBILITY_EVENTS, 39}, }; } // namespace
diff --git a/components/content_settings/core/common/content_settings_types.h b/components/content_settings/core/common/content_settings_types.h index 6781f84..6e0c1e67 100644 --- a/components/content_settings/core/common/content_settings_types.h +++ b/components/content_settings/core/common/content_settings_types.h
@@ -71,7 +71,7 @@ // specific origin. CONTENT_SETTINGS_TYPE_MEDIA_ENGAGEMENT, - // Content setting which stores whether or not the site can play audible + // Website setting which stores whether or not the site can play audible // sound. This will not block playback but instead the user will not hear it. CONTENT_SETTINGS_TYPE_SOUND, @@ -92,13 +92,6 @@ // ContentSettingsType. CONTENT_SETTINGS_TYPE_SENSORS, - // Content setting which stores whether or not the user has granted the site - // permission to respond to accessibility events, which can be used to - // provide a custom accessibility experience. Requires explicit user consent - // because some users may not want sites to know they're using assistive - // technology. - CONTENT_SETTINGS_TYPE_ACCESSIBILITY_EVENTS, - CONTENT_SETTINGS_NUM_TYPES, };
diff --git a/components/crash/content/app/BUILD.gn b/components/crash/content/app/BUILD.gn index 0c229701..5b68bc7 100644 --- a/components/crash/content/app/BUILD.gn +++ b/components/crash/content/app/BUILD.gn
@@ -85,6 +85,17 @@ ] } + # This source set contains the include file that declares the export thunks. + # Any target that gets compiled into both test and release code needs to + # depend on this for the include alone. The binary it's linked into then needs + # to depend on either :crash_export_thunks or :test_support, or in the case of + # release binaries, on //chrome_elf, which re-exports the thunks. + source_set("crash_export_thunk_include") { + sources = [ + "crash_export_thunks.h", + ] + } + # This source set contains a set of functions that allow using the crashpad # handler across a module boundary. The intent is for these functions to be # built into a dynamic library, which the user of the crashpad handler then @@ -102,6 +113,23 @@ deps = [ ":app", "//base", + "//third_party/crashpad/crashpad/client", + ] + } + + # This source set contains a set of test stubs for the functions above. + # time. + source_set("crash_export_stubs") { + testonly = true + + sources = [ + "crash_export_stubs.cc", + "crash_export_thunks.h", + ] + + deps = [ + ":app", + "//base", ] } } @@ -116,7 +144,7 @@ ] if (is_win) { - deps += [ ":crash_export_thunks" ] + deps += [ ":crash_export_stubs" ] } }
diff --git a/components/crash/content/app/crash_export_stubs.cc b/components/crash/content/app/crash_export_stubs.cc new file mode 100644 index 0000000..2a5d890 --- /dev/null +++ b/components/crash/content/app/crash_export_stubs.cc
@@ -0,0 +1,35 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// +// This file has no-op stub implementation for the functions declared in +// crash_export_thunks.h. This is solely for linking into tests, where +// crash reporting is unwanted and never initialized. + +#include <windows.h> + +#include "components/crash/content/app/crash_export_thunks.h" +#include "components/crash/content/app/crashpad.h" + +void RequestSingleCrashUploadThunk(const char* local_id) {} + +size_t GetCrashReportsImpl(crash_reporter::Report* reports, + size_t reports_size) { + return 0; +} + +int CrashForException(EXCEPTION_POINTERS* info) { + // Make sure to properly crash the process by dispatching directly to the + // Windows unhandled exception filter. + return UnhandledExceptionFilter(info); +} + +void SetUploadConsentImpl(bool consent) {} + +void SetCrashKeyValueImpl(const wchar_t* key, const wchar_t* value) {} + +void ClearCrashKeyValueImpl(const wchar_t* key) {} + +void SetCrashKeyValueImplEx(const char* key, const char* value) {} + +void ClearCrashKeyValueImplEx(const char* key) {}
diff --git a/components/crash/content/app/crash_export_thunks.cc b/components/crash/content/app/crash_export_thunks.cc index 9ac5b9f..42c5f172 100644 --- a/components/crash/content/app/crash_export_thunks.cc +++ b/components/crash/content/app/crash_export_thunks.cc
@@ -7,7 +7,9 @@ #include <algorithm> #include <type_traits> +#include "base/strings/utf_string_conversions.h" #include "components/crash/content/app/crashpad.h" +#include "third_party/crashpad/crashpad/client/crashpad_client.h" void RequestSingleCrashUploadThunk(const char* local_id) { crash_reporter::RequestSingleCrashUploadImpl(local_id); @@ -32,3 +34,40 @@ return crash_reports.size(); } + +int CrashForException(EXCEPTION_POINTERS* info) { + crash_reporter::GetCrashpadClient().DumpAndCrash(info); + return EXCEPTION_CONTINUE_SEARCH; +} + +// This function is used in chrome_metrics_services_manager_client.cc to trigger +// changes to the upload-enabled state. This is done when the metrics services +// are initialized, and when the user changes their consent for uploads. See +// crash_reporter::SetUploadConsent for effects. The given consent value should +// be consistent with +// crash_reporter::GetCrashReporterClient()->GetCollectStatsConsent(), but it's +// not enforced to avoid blocking startup code on synchronizing them. +void SetUploadConsentImpl(bool consent) { + crash_reporter::SetUploadConsent(consent); +} + +// NOTE: This function is used by SyzyASAN to annotate crash reports. If you +// change the name or signature of this function you will break SyzyASAN +// instrumented releases of Chrome. Please contact syzygy-team@chromium.org +// before doing so! See also http://crbug.com/567781. +void SetCrashKeyValueImpl(const wchar_t* key, const wchar_t* value) { + crash_reporter::SetCrashKeyValue(base::UTF16ToUTF8(key), + base::UTF16ToUTF8(value)); +} + +void ClearCrashKeyValueImpl(const wchar_t* key) { + crash_reporter::ClearCrashKey(base::UTF16ToUTF8(key)); +} + +void SetCrashKeyValueImplEx(const char* key, const char* value) { + crash_reporter::SetCrashKeyValue(key, value); +} + +void ClearCrashKeyValueImplEx(const char* key) { + crash_reporter::ClearCrashKey(key); +}
diff --git a/components/crash/content/app/crash_export_thunks.h b/components/crash/content/app/crash_export_thunks.h index 36e58d0..27cff6e6 100644 --- a/components/crash/content/app/crash_export_thunks.h +++ b/components/crash/content/app/crash_export_thunks.h
@@ -5,9 +5,12 @@ #ifndef COMPONENTS_CRASH_CONTENT_APP_CRASH_EXPORT_THUNKS_H_ #define COMPONENTS_CRASH_CONTENT_APP_CRASH_EXPORT_THUNKS_H_ -#include "components/crash/content/app/crashpad.h" - #include <stddef.h> +#include <windows.h> + +namespace crash_reporter { +struct Report; +} extern "C" { @@ -25,6 +28,35 @@ size_t GetCrashReportsImpl(crash_reporter::Report* reports, size_t reports_size); +// Crashes the process after generating a dump for the provided exception. Note +// that the crash reporter should be initialized before calling this function +// for it to do anything. +// NOTE: This function is used by SyzyASAN to invoke a crash. If you change the +// the name or signature of this function you will break SyzyASAN instrumented +// releases of Chrome. Please contact syzygy-team@chromium.org before doing so! +int CrashForException(EXCEPTION_POINTERS* info); + +// This function is used in chrome_metrics_services_manager_client.cc to trigger +// changes to the upload-enabled state. This is done when the metrics services +// are initialized, and when the user changes their consent for uploads. See +// crash_reporter::SetUploadConsent for effects. The given consent value should +// be consistent with +// crash_reporter::GetCrashReporterClient()->GetCollectStatsConsent(), but it's +// not enforced to avoid blocking startup code on synchronizing them. +void SetUploadConsentImpl(bool consent); + +// NOTE: This function is used by SyzyASAN to annotate crash reports. If you +// change the name or signature of this function you will break SyzyASAN +// instrumented releases of Chrome. Please contact syzygy-team@chromium.org +// before doing so! See also http://crbug.com/567781. +void SetCrashKeyValueImpl(const wchar_t* key, const wchar_t* value); + +void ClearCrashKeyValueImpl(const wchar_t* key); + +void SetCrashKeyValueImplEx(const char* key, const char* value); + +void ClearCrashKeyValueImplEx(const char* key); + } // extern "C" #endif // COMPONENTS_CRASH_CONTENT_APP_CRASH_EXPORT_THUNKS_H_
diff --git a/components/crash/content/app/crashpad.cc b/components/crash/content/app/crashpad.cc index 5873a22..aface8d 100644 --- a/components/crash/content/app/crashpad.cc +++ b/components/crash/content/app/crashpad.cc
@@ -48,15 +48,6 @@ crashpad::SimpleStringDictionary* g_simple_string_dictionary; crashpad::CrashReportDatabase* g_database; -void SetCrashKeyValue(const base::StringPiece& key, - const base::StringPiece& value) { - g_simple_string_dictionary->SetKeyValue(key.data(), value.data()); -} - -void ClearCrashKey(const base::StringPiece& key) { - g_simple_string_dictionary->RemoveKey(key.data()); -} - bool LogMessageHandler(int severity, const char* file, int line, @@ -195,6 +186,15 @@ } // namespace +void SetCrashKeyValue(const base::StringPiece& key, + const base::StringPiece& value) { + g_simple_string_dictionary->SetKeyValue(key.data(), value.data()); +} + +void ClearCrashKey(const base::StringPiece& key) { + g_simple_string_dictionary->RemoveKey(key.data()); +} + void InitializeCrashpad(bool initial_client, const std::string& process_type) { InitializeCrashpadImpl(initial_client, process_type, std::string(), false); } @@ -358,43 +358,3 @@ } } // namespace crash_reporter - -#if defined(OS_WIN) - -extern "C" { - -// This function is used in chrome_metrics_services_manager_client.cc to trigger -// changes to the upload-enabled state. This is done when the metrics services -// are initialized, and when the user changes their consent for uploads. See -// crash_reporter::SetUploadConsent for effects. The given consent value should -// be consistent with -// crash_reporter::GetCrashReporterClient()->GetCollectStatsConsent(), but it's -// not enforced to avoid blocking startup code on synchronizing them. -void SetUploadConsentImpl(bool consent) { - crash_reporter::SetUploadConsent(consent); -} - -// NOTE: This function is used by SyzyASAN to annotate crash reports. If you -// change the name or signature of this function you will break SyzyASAN -// instrumented releases of Chrome. Please contact syzygy-team@chromium.org -// before doing so! See also http://crbug.com/567781. -void SetCrashKeyValueImpl(const wchar_t* key, const wchar_t* value) { - crash_reporter::SetCrashKeyValue(base::UTF16ToUTF8(key), - base::UTF16ToUTF8(value)); -} - -void ClearCrashKeyValueImpl(const wchar_t* key) { - crash_reporter::ClearCrashKey(base::UTF16ToUTF8(key)); -} - -void SetCrashKeyValueImplEx(const char* key, const char* value) { - crash_reporter::SetCrashKeyValue(key, value); -} - -void ClearCrashKeyValueImplEx(const char* key) { - crash_reporter::ClearCrashKey(key); -} - -} // extern "C" - -#endif // OS_WIN
diff --git a/components/crash/content/app/crashpad.h b/components/crash/content/app/crashpad.h index 56120332..ad1132b 100644 --- a/components/crash/content/app/crashpad.h +++ b/components/crash/content/app/crashpad.h
@@ -117,6 +117,13 @@ // The implementation function for RequestSingleCrashUpload. void RequestSingleCrashUploadImpl(const std::string& local_id); +// Sets a crash key value. +void SetCrashKeyValue(const base::StringPiece& key, + const base::StringPiece& value); + +// Clears a crash key value. +void ClearCrashKey(const base::StringPiece& key); + namespace internal { #if defined(OS_WIN)
diff --git a/components/crash/content/app/crashpad_win.cc b/components/crash/content/app/crashpad_win.cc index 81b82a0..9727d1f 100644 --- a/components/crash/content/app/crashpad_win.cc +++ b/components/crash/content/app/crashpad_win.cc
@@ -16,6 +16,7 @@ #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "build/build_config.h" +#include "components/crash/content/app/crash_export_thunks.h" #include "components/crash/content/app/crash_reporter_client.h" #include "components/crash/content/app/crash_switches.h" #include "third_party/crashpad/crashpad/client/crashpad_client.h" @@ -204,16 +205,6 @@ extern "C" { -// Crashes the process after generating a dump for the provided exception. Note -// that the crash reporter should be initialized before calling this function -// for it to do anything. -// NOTE: This function is used by SyzyASAN to invoke a crash. If you change the -// the name or signature of this function you will break SyzyASAN instrumented -// releases of Chrome. Please contact syzygy-team@chromium.org before doing so! -int CrashForException(EXCEPTION_POINTERS* info) { - crash_reporter::GetCrashpadClient().DumpAndCrash(info); - return EXCEPTION_CONTINUE_SEARCH; -} // Injects a thread into a remote process to dump state when there is no crash. // |serialized_crash_keys| is a nul terminated string that represents serialized
diff --git a/components/cronet/ios/cronet_environment.mm b/components/cronet/ios/cronet_environment.mm index e0e28b9..98ab86b 100644 --- a/components/cronet/ios/cronet_environment.mm +++ b/components/cronet/ios/cronet_environment.mm
@@ -18,6 +18,7 @@ #include "base/mac/foundation_util.h" #include "base/macros.h" #include "base/memory/ptr_util.h" +#include "base/message_loop/message_loop.h" #include "base/metrics/statistics_recorder.h" #include "base/path_service.h" #include "base/single_thread_task_runner.h"
diff --git a/components/data_reduction_proxy/core/common/data_reduction_proxy_params.cc b/components/data_reduction_proxy/core/common/data_reduction_proxy_params.cc index 653e4cd..34b5d9f 100644 --- a/components/data_reduction_proxy/core/common/data_reduction_proxy_params.cc +++ b/components/data_reduction_proxy/core/common/data_reduction_proxy_params.cc
@@ -30,7 +30,6 @@ const char kEnabled[] = "Enabled"; const char kControl[] = "Control"; const char kDisabled[] = "Disabled"; -const char kLitePage[] = "Enabled_Preview"; const char kDefaultSecureProxyCheckUrl[] = "http://check.googlezip.net/connect"; const char kDefaultWarmupUrl[] = "http://check.googlezip.net/generate_204"; @@ -142,25 +141,6 @@ return kLoFiFlagFieldTrial; } -bool IsIncludedInLoFiEnabledFieldTrial() { - return !IsLoFiOnViaFlags() && !IsLoFiDisabledViaFlags() && - IsIncludedInFieldTrial(GetLoFiFieldTrialName()); -} - -bool IsIncludedInLoFiControlFieldTrial() { - return !IsLoFiOnViaFlags() && !IsLoFiDisabledViaFlags() && - base::StartsWith( - base::FieldTrialList::FindFullName(GetLoFiFieldTrialName()), - kControl, base::CompareCase::SENSITIVE); -} - -bool IsIncludedInLitePageFieldTrial() { - return !IsLoFiOnViaFlags() && !IsLoFiDisabledViaFlags() && - base::StartsWith( - base::FieldTrialList::FindFullName(GetLoFiFieldTrialName()), - kLitePage, base::CompareCase::SENSITIVE); -} - bool IsIncludedInServerExperimentsFieldTrial() { return !base::CommandLine::ForCurrentProcess()->HasSwitch( data_reduction_proxy::switches::
diff --git a/components/data_reduction_proxy/core/common/data_reduction_proxy_params.h b/components/data_reduction_proxy/core/common/data_reduction_proxy_params.h index 2e5f44d..73c9498 100644 --- a/components/data_reduction_proxy/core/common/data_reduction_proxy_params.h +++ b/components/data_reduction_proxy/core/common/data_reduction_proxy_params.h
@@ -52,24 +52,14 @@ base::StringPiece build_fingerprint); // Returns the name of the Lo-Fi field trial. +// TODO(ryansturm): crbug.com/759052 Cleanup once fully cutover to new blacklist const char* GetLoFiFieldTrialName(); // Returns the name of the Lo-Fi field trial that configures LoFi flags when it // is force enabled through flags. +// TODO(ryansturm): crbug.com/759052 Cleanup once fully cutover to new blacklist const char* GetLoFiFlagFieldTrialName(); -// Returns true if this client is part of the "Enabled" or "Enabled_Preview" -// group of the Lo-Fi field trial, both of which mean Lo-Fi should be enabled. -bool IsIncludedInLoFiEnabledFieldTrial(); - -// Returns true if this client is part of the "Control" group of the Lo-Fi field -// trial. -bool IsIncludedInLoFiControlFieldTrial(); - -// Returns true if this client is part of the "Preview" group of the Lo-Fi field -// trial. -bool IsIncludedInLitePageFieldTrial(); - // Returns true if this client is part of the field trial that should enable // server experiments for the data reduction proxy. bool IsIncludedInServerExperimentsFieldTrial();
diff --git a/components/data_reduction_proxy/core/common/data_reduction_proxy_params_unittest.cc b/components/data_reduction_proxy/core/common/data_reduction_proxy_params_unittest.cc index 3bb4c86..4eb560f9 100644 --- a/components/data_reduction_proxy/core/common/data_reduction_proxy_params_unittest.cc +++ b/components/data_reduction_proxy/core/common/data_reduction_proxy_params_unittest.cc
@@ -247,99 +247,6 @@ } } -// Tests if Lo-Fi field trial is set correctly. -TEST_F(DataReductionProxyParamsTest, LoFiEnabledFieldTrial) { - const struct { - std::string trial_group_name; - bool expected_enabled; - bool expected_control; - bool expected_lite_page_enabled; - } tests[] = { - {"Enabled", true, false, false}, - {"Enabled_Control", true, false, false}, - {"Disabled", false, false, false}, - {"enabled", false, false, false}, - }; - - for (const auto& test : tests) { - base::FieldTrialList field_trial_list(nullptr); - - ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( - params::GetLoFiFieldTrialName(), test.trial_group_name)); - EXPECT_EQ(test.expected_enabled, - params::IsIncludedInLoFiEnabledFieldTrial()) - << test.trial_group_name; - EXPECT_EQ(test.expected_control, - params::IsIncludedInLoFiControlFieldTrial()) - << test.trial_group_name; - EXPECT_EQ(test.expected_lite_page_enabled, - params::IsIncludedInLitePageFieldTrial()) - << test.trial_group_name; - } -} - -// Tests if Lo-Fi field trial is set correctly. -TEST_F(DataReductionProxyParamsTest, LoFiControlFieldTrial) { - const struct { - std::string trial_group_name; - bool expected_enabled; - bool expected_control; - bool expected_lite_page_enabled; - } tests[] = { - {"Control", false, true, false}, - {"Control_Enabled", false, true, false}, - {"Disabled", false, false, false}, - {"control", false, false, false}, - }; - - for (const auto& test : tests) { - base::FieldTrialList field_trial_list(nullptr); - - ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( - params::GetLoFiFieldTrialName(), test.trial_group_name)); - EXPECT_EQ(test.expected_enabled, - params::IsIncludedInLoFiEnabledFieldTrial()) - << test.trial_group_name; - EXPECT_EQ(test.expected_control, - params::IsIncludedInLoFiControlFieldTrial()) - << test.trial_group_name; - EXPECT_EQ(test.expected_lite_page_enabled, - params::IsIncludedInLitePageFieldTrial()) - << test.trial_group_name; - } -} - -// Tests if Lo-Fi field trial is set correctly. -TEST_F(DataReductionProxyParamsTest, LoFiPreviewFieldTrial) { - const struct { - std::string trial_group_name; - bool expected_enabled; - bool expected_control; - bool expected_lite_page_enabled; - } tests[] = { - {"Enabled_Preview", true, false, true}, - {"Enabled_Preview_Control", true, false, true}, - {"Disabled", false, false, false}, - {"enabled_Preview", false, false, false}, - }; - - for (const auto& test : tests) { - base::FieldTrialList field_trial_list(nullptr); - - ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial( - params::GetLoFiFieldTrialName(), test.trial_group_name)); - EXPECT_EQ(test.expected_enabled, - params::IsIncludedInLoFiEnabledFieldTrial()) - << test.trial_group_name; - EXPECT_EQ(test.expected_control, - params::IsIncludedInLoFiControlFieldTrial()) - << test.trial_group_name; - EXPECT_EQ(test.expected_lite_page_enabled, - params::IsIncludedInLitePageFieldTrial()) - << test.trial_group_name; - } -} - // Tests if the QUIC field trial is set correctly. TEST_F(DataReductionProxyParamsTest, QuicFieldTrial) { const struct {
diff --git a/components/drive/chromeos/file_cache_unittest.cc b/components/drive/chromeos/file_cache_unittest.cc index cc8a8fd..4c3038a 100644 --- a/components/drive/chromeos/file_cache_unittest.cc +++ b/components/drive/chromeos/file_cache_unittest.cc
@@ -20,6 +20,7 @@ #include "base/files/scoped_temp_dir.h" #include "base/md5.h" #include "base/path_service.h" +#include "base/run_loop.h" #include "base/single_thread_task_runner.h" #include "base/stl_util.h" #include "base/strings/stringprintf.h"
diff --git a/components/exo/keyboard_unittest.cc b/components/exo/keyboard_unittest.cc index 8844188..ba7ff9b 100644 --- a/components/exo/keyboard_unittest.cc +++ b/components/exo/keyboard_unittest.cc
@@ -7,6 +7,7 @@ #include "ash/shell.h" #include "ash/wm/tablet_mode/tablet_mode_controller.h" #include "base/macros.h" +#include "base/run_loop.h" #include "components/exo/buffer.h" #include "components/exo/keyboard_delegate.h" #include "components/exo/keyboard_device_configuration_delegate.h"
diff --git a/components/exo/surface.cc b/components/exo/surface.cc index 8f5071cb..fe6b9ec 100644 --- a/components/exo/surface.cc +++ b/components/exo/surface.cc
@@ -681,7 +681,7 @@ const std::unique_ptr<cc::RenderPass>& render_pass = frame->render_pass_list.back(); gfx::Rect output_rect(origin, content_size_); - gfx::Rect quad_rect(origin, current_resource_.size); + gfx::Rect quad_rect(current_resource_.size); gfx::Rect damage_rect; if (needs_full_damage) { @@ -722,6 +722,7 @@ output_rect.width() / transformed_buffer_size.width(), output_rect.height() / transformed_buffer_size.height()); } + buffer_to_target_matrix.postTranslate(origin.x(), origin.y()); viz::SharedQuadState* quad_state = render_pass->CreateAndAppendSharedQuadState();
diff --git a/components/exo/surface_unittest.cc b/components/exo/surface_unittest.cc index 1d1763b..09ab404 100644 --- a/components/exo/surface_unittest.cc +++ b/components/exo/surface_unittest.cc
@@ -3,12 +3,13 @@ // found in the LICENSE file. #include "components/exo/surface.h" + #include "base/bind.h" #include "cc/output/compositor_frame.h" #include "cc/quads/texture_draw_quad.h" #include "components/exo/buffer.h" #include "components/exo/shell_surface.h" -#include "components/exo/surface.h" +#include "components/exo/sub_surface.h" #include "components/exo/test/exo_test_base.h" #include "components/exo/test/exo_test_helper.h" #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h" @@ -228,17 +229,66 @@ surface->Attach(buffer.get()); surface->SetBufferTransform(Transform::ROTATE_90); surface->Commit(); - EXPECT_EQ(gfx::Size(buffer_size.height(), buffer_size.width()).ToString(), - surface->window()->bounds().size().ToString()); - EXPECT_EQ(gfx::Size(buffer_size.height(), buffer_size.width()).ToString(), - surface->content_size().ToString()); + EXPECT_EQ(gfx::Size(buffer_size.height(), buffer_size.width()), + surface->window()->bounds().size()); + EXPECT_EQ(gfx::Size(buffer_size.height(), buffer_size.width()), + surface->content_size()); RunAllPendingInMessageLoop(); - const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get()); - ASSERT_EQ(1u, frame.render_pass_list.size()); - EXPECT_EQ(gfx::Rect(0, 0, buffer_size.height(), buffer_size.width()), - frame.render_pass_list.back()->damage_rect); + { + const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get()); + ASSERT_EQ(1u, frame.render_pass_list.size()); + EXPECT_EQ(gfx::Rect(0, 0, buffer_size.height(), buffer_size.width()), + frame.render_pass_list.back()->damage_rect); + const cc::QuadList& quad_list = frame.render_pass_list[0]->quad_list; + ASSERT_EQ(1u, quad_list.size()); + EXPECT_EQ( + gfx::Rect(0, 0, 512, 256), + cc::MathUtil::MapEnclosingClippedRect( + quad_list.front()->shared_quad_state->quad_to_target_transform, + quad_list.front()->rect)); + } + + gfx::Size child_buffer_size(64, 128); + auto child_buffer = base::MakeUnique<Buffer>( + exo_test_helper()->CreateGpuMemoryBuffer(child_buffer_size)); + auto child_surface = base::MakeUnique<Surface>(); + auto sub_surface = + base::MakeUnique<SubSurface>(child_surface.get(), surface.get()); + + // Set position to 20, 10. + gfx::Point child_position(20, 10); + sub_surface->SetPosition(child_position); + + child_surface->Attach(child_buffer.get()); + child_surface->SetBufferTransform(Transform::ROTATE_180); + const int kChildBufferScale = 2; + child_surface->SetBufferScale(kChildBufferScale); + child_surface->Commit(); + surface->Commit(); + EXPECT_EQ( + gfx::ScaleToRoundedSize(child_buffer_size, 1.0f / kChildBufferScale), + child_surface->window()->bounds().size()); + EXPECT_EQ( + gfx::ScaleToRoundedSize(child_buffer_size, 1.0f / kChildBufferScale), + child_surface->content_size()); + + RunAllPendingInMessageLoop(); + + { + const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get()); + ASSERT_EQ(1u, frame.render_pass_list.size()); + const cc::QuadList& quad_list = frame.render_pass_list[0]->quad_list; + ASSERT_EQ(2u, quad_list.size()); + EXPECT_EQ( + gfx::Rect(child_position, + gfx::ScaleToRoundedSize(child_buffer_size, + 1.0f / kChildBufferScale)), + cc::MathUtil::MapEnclosingClippedRect( + quad_list.front()->shared_quad_state->quad_to_target_transform, + quad_list.front()->rect)); + } } TEST_F(SurfaceTest, MirrorLayers) {
diff --git a/components/history/core/browser/browsing_history_service_unittest.cc b/components/history/core/browser/browsing_history_service_unittest.cc index f1873637..d15c8c2 100644 --- a/components/history/core/browser/browsing_history_service_unittest.cc +++ b/components/history/core/browser/browsing_history_service_unittest.cc
@@ -10,6 +10,7 @@ #include "base/files/scoped_temp_dir.h" #include "base/macros.h" #include "base/memory/ref_counted.h" +#include "base/run_loop.h" #include "base/task/cancelable_task_tracker.h" #include "base/test/scoped_task_environment.h" #include "base/values.h"
diff --git a/components/history/core/browser/expire_history_backend_unittest.cc b/components/history/core/browser/expire_history_backend_unittest.cc index cefa307f..be6bc13 100644 --- a/components/history/core/browser/expire_history_backend_unittest.cc +++ b/components/history/core/browser/expire_history_backend_unittest.cc
@@ -16,6 +16,7 @@ #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h" #include "base/macros.h" +#include "base/message_loop/message_loop.h" #include "base/run_loop.h" #include "base/scoped_observer.h" #include "base/strings/string16.h"
diff --git a/components/ntp_snippets/remote/remote_suggestions_database_unittest.cc b/components/ntp_snippets/remote/remote_suggestions_database_unittest.cc index 1380fcb..b951f4d6 100644 --- a/components/ntp_snippets/remote/remote_suggestions_database_unittest.cc +++ b/components/ntp_snippets/remote/remote_suggestions_database_unittest.cc
@@ -12,6 +12,7 @@ #include "base/files/scoped_temp_dir.h" #include "base/macros.h" #include "base/memory/ptr_util.h" +#include "base/run_loop.h" #include "base/test/scoped_task_environment.h" #include "base/threading/thread_task_runner_handle.h" #include "components/ntp_snippets/remote/proto/ntp_snippets.pb.h"
diff --git a/components/password_manager/core/browser/password_store_default_unittest.cc b/components/password_manager/core/browser/password_store_default_unittest.cc index 62428dd..3ee7bac 100644 --- a/components/password_manager/core/browser/password_store_default_unittest.cc +++ b/components/password_manager/core/browser/password_store_default_unittest.cc
@@ -11,6 +11,7 @@ #include "base/files/scoped_temp_dir.h" #include "base/macros.h" #include "base/memory/ptr_util.h" +#include "base/run_loop.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "base/test/scoped_task_environment.h"
diff --git a/components/password_manager/core/browser/password_store_unittest.cc b/components/password_manager/core/browser/password_store_unittest.cc index 9faab13e..2ea2a82 100644 --- a/components/password_manager/core/browser/password_store_unittest.cc +++ b/components/password_manager/core/browser/password_store_unittest.cc
@@ -10,6 +10,7 @@ #include "base/files/scoped_temp_dir.h" #include "base/macros.h" #include "base/memory/ptr_util.h" +#include "base/run_loop.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "base/synchronization/waitable_event.h"
diff --git a/components/policy/core/common/remote_commands/remote_commands_service_unittest.cc b/components/policy/core/common/remote_commands/remote_commands_service_unittest.cc index 26fa373..107d96a 100644 --- a/components/policy/core/common/remote_commands/remote_commands_service_unittest.cc +++ b/components/policy/core/common/remote_commands/remote_commands_service_unittest.cc
@@ -14,6 +14,7 @@ #include "base/bind_helpers.h" #include "base/macros.h" #include "base/memory/ptr_util.h" +#include "base/run_loop.h" #include "base/test/test_mock_time_task_runner.h" #include "base/threading/thread_task_runner_handle.h" #include "base/time/tick_clock.h"
diff --git a/components/policy/resources/policy_templates_ca.xtb b/components/policy/resources/policy_templates_ca.xtb index aa76ddb..c34b822 100644 --- a/components/policy/resources/policy_templates_ca.xtb +++ b/components/policy/resources/policy_templates_ca.xtb
@@ -897,7 +897,7 @@ Aquesta política permet que els administradors tornin a activar funcions obsoletes de la plataforma web durant un temps limitat. Les funcions s'identifiquen amb una etiqueta de cadena i les funcions que corresponen a les etiquetes incloses a la llista especificada per aquesta política es tornen a activar. - Si aquesta política no s'estableix o si la llista està buida o no coincideix amb cap de les etiquetes de cadena admeses, totes les funcions obsoletes de la plataforma web continuaran desactivades. + Si aquesta política no s'estableix o si la llista és buida o no coincideix amb cap de les etiquetes de cadena admeses, totes les funcions obsoletes de la plataforma web continuaran desactivades. Tot i que la política s'admet en les plataformes anteriors, pot ser que la funció que activi no estigui disponible en totes les plataformes. No totes les funcions obsoletes de la plataforma web es poden tornar a activar; només les que s'indiquin explícitament a continuació durant un període de temps limitat, que varia segons la funció. El format general de l'etiqueta de cadena és el següent: [FuncióObsoleta]_EffectiveUntil[aaaammdd]. Com a referència, podeu consultar la finalitat dels canvis de la funció de la plataforma web a la pàgina https://bit.ly/blinkintents. </translation> @@ -1288,7 +1288,7 @@ <translation id="6074963268421707432">No permetis que cap lloc mostri notificacions d'escriptori</translation> <translation id="6076099373507468537">Defineix la llista de dispositius USB que està permès separar del controlador de kernel per tal d'utilitzar-los mitjançant l'API de chrome.usb directament dins d'una aplicació web. Les entrades són parells formats per l'identificador del producte i l'identificador del proveïdor dels USB, que permeten identificar un maquinari concret. - Si aquesta política no està configurada, la llista de dispositius USB que es poden separar està buida.</translation> + Si aquesta política no està configurada, la llista de dispositius USB que es poden separar és buida.</translation> <translation id="6093156968240188330">Permet que els usuaris remots interaccionin amb les finestres amb privilegis restringits en sessions d'assistència remota</translation> <translation id="6095999036251797924">Especifica la quantitat de temps que ha de passar sense cap interacció de l'usuari abans que la pantalla no es bloquegi quan s'utilitza amb connexió a la corrent CA o amb una bateria. @@ -1426,7 +1426,7 @@ Els URL amb esquemes d'aquesta llista no es carregaran i no s'hi podrà navegar. - Si no s'estableix aquesta política o la llista està buida, es podrà accedir a tots els esquemes a <ph name="PRODUCT_NAME" />.</translation> + Si no s'estableix aquesta política o la llista és buida, es podrà accedir a tots els esquemes a <ph name="PRODUCT_NAME" />.</translation> <translation id="6652197835259177259">Configuració dels usuaris gestionats localment</translation> <translation id="6654559957643809067">Activa la predicció de xarxa a <ph name="PRODUCT_NAME" /> i impedeix que els usuaris canviïn aquesta opció de configuració.
diff --git a/components/policy/resources/policy_templates_da.xtb b/components/policy/resources/policy_templates_da.xtb index 229f2f37..15fffbf 100644 --- a/components/policy/resources/policy_templates_da.xtb +++ b/components/policy/resources/policy_templates_da.xtb
@@ -923,7 +923,7 @@ Hvis værdien af denne politik er 0, anvendes standardcachestørrelsen, men brugeren vil ikke kunne ændre den. Hvis denne politik ikke er indstillet, bruges standardstørrelsen, og brugeren vil kunne tilsidesætte den med flaget "--media-cache-size".</translation> -<translation id="4508686775017063528">Hvis denne politik er angivet til Sand eller ikke er angivet, er <ph name="PRODUCT_NAME" /> aktiveret, og brugerne kan åbne det via appmenuen, genvejsmenuen til sider, mediekontrolelementer på Cast-kompatible websites og Cast-ikonet på værktøjslinjen (hvis det vises). +<translation id="4508686775017063528">Hvis denne politik er angivet til Sand eller ikke er angivet, er <ph name="PRODUCT_NAME" /> aktiveret, og brugerne kan åbne det via appmenuen, genvejsmenuen til sider, knapper til mediestyring på Cast-kompatible websites og Cast-ikonet på værktøjslinjen (hvis det vises). Hvis denne politik er angivet som Falsk, er <ph name="PRODUCT_NAME" /> deaktiveret.</translation> <translation id="4518251772179446575">Spørg, hver gang et website ønsker at spore brugerens fysiske placering</translation>
diff --git a/components/policy/resources/policy_templates_en-GB.xtb b/components/policy/resources/policy_templates_en-GB.xtb index dcf12a5..013c93d 100644 --- a/components/policy/resources/policy_templates_en-GB.xtb +++ b/components/policy/resources/policy_templates_en-GB.xtb
@@ -746,6 +746,11 @@ If this setting is disabled, <ph name="PRODUCT_NAME" /> will never check if it is the default browser and will disable user controls for setting this option. If this setting is not set, <ph name="PRODUCT_NAME" /> will allow the user to control whether it is the default browser and whether user notifications should be shown when it isn't.</translation> +<translation id="379602782757302612">Allows you to specify which extensions the users can NOT install. Extensions already installed will be disabled if blacklisted, without a way for the user to enable them. Once a disabled, blacklisted extension is removed, it will automatically get re-enabled. + + A blacklist value of '*' means all extensions are blacklisted unless they are explicitly listed in the whitelist. + + If this policy is left 'not set' the user can install any extension in <ph name="PRODUCT_NAME" />.</translation> <translation id="3800626789999016379">Configures the directory that <ph name="PRODUCT_NAME" /> will use for downloading files. If you set this policy, <ph name="PRODUCT_NAME" /> will use the provided directory regardless of whether the user has specified one or enabled the flag to be prompted for download location every time. @@ -1102,6 +1107,7 @@ If it is not set, the user may be asked whether to import or importing may happen automatically.</translation> <translation id="5056708224511062314">Screen magnifier disabled</translation> <translation id="5067143124345820993">Login user white list</translation> +<translation id="5068140065960598044"><ph name="PRODUCT_NAME" /> cloud policy overrides Machine policy.</translation> <translation id="5085647276663819155">Disable Print Preview</translation> <translation id="5105313908130842249">Screen lock delay when running on battery power</translation> <translation id="5130288486815037971">Whether RC4 cipher suites in TLS are enabled</translation> @@ -1579,6 +1585,13 @@ If you set this policy, users cannot change or override it. If this policy is left unset, spoken feedback is disabled initially but can be enabled by the user at any time.</translation> +<translation id="6922040258551909078"> + If the policy is set to true, cloud policy takes precedence if it conflicts with machine policy. + If the policy is set to false or not configured, machine policy takes precedence if it conflicts with cloud policy. + For more details about policy priority, please visit: https://support.google.com/chrome?p=set_chrome_policies_for_devices + + This policy is not available on Window instances that are not joined to a <ph name="MS_AD_NAME" /> domain. + </translation> <translation id="6922884955650325312">Block the <ph name="FLASH_PLUGIN_NAME" /> plug-in</translation> <translation id="6923366716660828830">Specifies the name of the default search provider. If left empty or not set, the host name specified by the search URL will be used.
diff --git a/components/policy/resources/policy_templates_mr.xtb b/components/policy/resources/policy_templates_mr.xtb index 2f8545f..935c66f3 100644 --- a/components/policy/resources/policy_templates_mr.xtb +++ b/components/policy/resources/policy_templates_mr.xtb
@@ -876,7 +876,7 @@ आपण हे धोरण सेट केल्यास, वापरकर्ते ते बदलू किंवा अधिशून्य करू शकत नाहीत. हे धोरण सेट न करता सोडल्यास, ऑन-स्क्रीन कीबोर्ड सुरुवातीस अक्षम असेल परंतु कोणत्याही वेळी वापरकर्त्याद्वारे सक्षम केला जाऊ शकतो.</translation> -<translation id="382476126209906314">दूरस्थ प्रवेश होस्टसाठी TalkGadget प्रत्यय कॉन्फिगर करा</translation> +<translation id="382476126209906314">दूरस्थ प्रवेश होस्टसाठी TalkGadget उपसर्ग कॉन्फिगर करा</translation> <translation id="383466854578875212">कोणते मूळ संदेशन होस्ट काळ्यासूचीच्या अधीन नाहीत हे निर्दिष्ट करण्याची आपल्याला अनुमती देते. * चे काळीसूची मूल्य म्हणजे सर्व मूळ संदेशन होस्ट काळ्यासूचीमध्ये आहेत आणि केवळ श्वेतसूचीमध्ये सूचीबद्ध असलेले मूळ संदेशन होस्ट लोड केले जातील. @@ -1571,8 +1571,8 @@ <translation id="5868414965372171132">वापरकर्ता स्तरीय नेटवर्क कॉन्फिगरेशन</translation> <translation id="588135807064822874">शोधण्यासाठी स्पर्श करा सक्षम करा</translation> <translation id="5883015257301027298">डीफॉल्ट कुकीज सेटिंग</translation> -<translation id="5887414688706570295">TalkGadget प्रत्यय कॉन्फिगर करते जे दूरस्थ प्रवेश होस्टद्वारे वापरले जाते आणि वापरकर्त्यास त्यास वापरण्यापासून प्रतिबंधित करते. - निर्दिष्ट केल्यास, हा प्रत्यय TalkGadget करिता एक पूर्ण डोमेन तयार करण्यासाठी आधारभूत TalkGadget नावामध्ये योजला आहे. आधारभूत TalkGadget डोमेन नाव '.talkgadget.google.com' हे आहे. +<translation id="5887414688706570295">TalkGadget उपसर्ग कॉन्फिगर करते जे दूरस्थ प्रवेश होस्टद्वारे वापरले जाते आणि वापरकर्त्यास त्यास वापरण्यापासून प्रतिबंधित करते. + निर्दिष्ट केल्यास, हा उपसर्ग TalkGadget करिता एक पूर्ण डोमेन तयार करण्यासाठी आधारभूत TalkGadget नावामध्ये योजला आहे. आधारभूत TalkGadget डोमेन नाव '.talkgadget.google.com' हे आहे. ही सेटिंग सक्षम केल्यास, जेव्हा डीफॉल्ट डोमेन नावाऐवजी TalkGadget वर प्रवेश करत असल्यास नंतर होस्ट सानुकूल डोमेन नाव वापरेल.
diff --git a/components/printing/DEPS b/components/printing/DEPS index 057bda25..abfcfb6 100644 --- a/components/printing/DEPS +++ b/components/printing/DEPS
@@ -1,5 +1,7 @@ include_rules = [ - "+content/public", + "-components/printing", + "+components/printing/common", + "+content/public/common", "+ipc", "+printing", "+third_party/WebKit/public",
diff --git a/components/printing/browser/DEPS b/components/printing/browser/DEPS new file mode 100644 index 0000000..1c35d9c --- /dev/null +++ b/components/printing/browser/DEPS
@@ -0,0 +1,3 @@ +include_rules = [ + "+content/public/browser", +]
diff --git a/components/printing/renderer/DEPS b/components/printing/renderer/DEPS index ebeed46..d6b6f93d 100644 --- a/components/printing/renderer/DEPS +++ b/components/printing/renderer/DEPS
@@ -1,5 +1,6 @@ include_rules = [ "+components/grit/components_resources.h", + "+content/public/renderer", "+net/base", "+services/service_manager/public/cpp", "+third_party/skia",
diff --git a/components/printing/service/DEPS b/components/printing/service/DEPS index 0f977bb0..e5308e2 100644 --- a/components/printing/service/DEPS +++ b/components/printing/service/DEPS
@@ -1,6 +1,5 @@ include_rules = [ "+components/discardable_memory/client", - "+content/public/common", "+content/public/utility", "+mojo/public/cpp", "+printing/common",
diff --git a/components/printing/service/pdf_compositor_service_unittest.cc b/components/printing/service/pdf_compositor_service_unittest.cc index 1ec17e7..b005a70 100644 --- a/components/printing/service/pdf_compositor_service_unittest.cc +++ b/components/printing/service/pdf_compositor_service_unittest.cc
@@ -9,6 +9,7 @@ #include "base/files/file_util.h" #include "base/memory/shared_memory.h" #include "base/path_service.h" +#include "base/run_loop.h" #include "components/printing/service/public/interfaces/pdf_compositor.mojom.h" #include "mojo/public/cpp/system/platform_handle.h" #include "services/service_manager/public/cpp/service_test.h"
diff --git a/components/printing/test/DEPS b/components/printing/test/DEPS new file mode 100644 index 0000000..6ede09e --- /dev/null +++ b/components/printing/test/DEPS
@@ -0,0 +1,6 @@ +include_rules = [ + # The test directory can do whatever it wants within components/printing. + # Same for content/public. + "+components/printing", + "+content/public", +]
diff --git a/components/spellcheck/browser/spellcheck_message_filter_platform.h b/components/spellcheck/browser/spellcheck_message_filter_platform.h index 75e5388..430a7ba0 100644 --- a/components/spellcheck/browser/spellcheck_message_filter_platform.h +++ b/components/spellcheck/browser/spellcheck_message_filter_platform.h
@@ -26,12 +26,14 @@ content::BrowserThread::ID* thread) override; bool OnMessageReceived(const IPC::Message& message) override; +#if defined(OS_MACOSX) // Adjusts remote_results by examining local_results. Any result that's both // local and remote stays type SPELLING, all others are flagged GRAMMAR. // (This is needed to force gray underline for remote-only results.) static void CombineResults( std::vector<SpellCheckResult>* remote_results, const std::vector<SpellCheckResult>& local_results); +#endif private: friend class TestingSpellCheckMessageFilter; @@ -39,17 +41,10 @@ ~SpellCheckMessageFilterPlatform() override; - void OnCheckSpelling(const base::string16& word, int route_id, bool* correct); - void OnFillSuggestionList(const base::string16& word, - std::vector<base::string16>* suggestions); void OnRequestTextCheck(int route_id, int identifier, const base::string16& text); - int ToDocumentTag(int route_id); - void RetireDocumentTag(int route_id); - std::map<int,int> tag_map_; - int render_process_id_; #if defined(OS_ANDROID) @@ -62,7 +57,17 @@ // Android-specific object used to query the Android spellchecker. std::unique_ptr<SpellCheckerSessionBridge> impl_; -#else +#endif + +#if defined(OS_MACOSX) + void OnCheckSpelling(const base::string16& word, int route_id, bool* correct); + void OnFillSuggestionList(const base::string16& word, + std::vector<base::string16>* suggestions); + + int ToDocumentTag(int route_id); + void RetireDocumentTag(int route_id); + std::map<int, int> tag_map_; + // A JSON-RPC client that calls the Spelling service in the background. std::unique_ptr<SpellingServiceClient> client_; #endif
diff --git a/components/spellcheck/browser/spellcheck_message_filter_platform_android.cc b/components/spellcheck/browser/spellcheck_message_filter_platform_android.cc index f68a73d..ca3fade9 100644 --- a/components/spellcheck/browser/spellcheck_message_filter_platform_android.cc +++ b/components/spellcheck/browser/spellcheck_message_filter_platform_android.cc
@@ -40,28 +40,8 @@ return handled; } -// static -void SpellCheckMessageFilterPlatform::CombineResults( - std::vector<SpellCheckResult>* remote_results, - const std::vector<SpellCheckResult>& local_results) { - NOTREACHED(); -} - SpellCheckMessageFilterPlatform::~SpellCheckMessageFilterPlatform() {} -void SpellCheckMessageFilterPlatform::OnCheckSpelling( - const base::string16& word, - int route_id, - bool* correct) { - NOTREACHED(); -} - -void SpellCheckMessageFilterPlatform::OnFillSuggestionList( - const base::string16& word, - std::vector<base::string16>* suggestions) { - NOTREACHED(); -} - void SpellCheckMessageFilterPlatform::OnRequestTextCheck( int route_id, int identifier, @@ -72,15 +52,6 @@ impl_->RequestTextCheck(route_id, identifier, text); } -int SpellCheckMessageFilterPlatform::ToDocumentTag(int route_id) { - NOTREACHED(); - return -1; -} - -void SpellCheckMessageFilterPlatform::RetireDocumentTag(int route_id) { - NOTREACHED(); -} - void SpellCheckMessageFilterPlatform::OnToggleSpellCheck( bool enabled, bool checked) {
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb index 436bd08f..57e1c24 100644 --- a/components/strings/components_strings_am.xtb +++ b/components/strings/components_strings_am.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">ግንኙነትን በመጠበቅ ላይ…</translation> <translation id="153384715582417236">ለአሁን ያለው ይኸው ነው</translation> <translation id="1549470594296187301">ይህን ባህሪ ለመጠቀም ጃቫስክሪፕት መንቃት አለበት።</translation> -<translation id="1555130319947370107">ሰማያዊ</translation> <translation id="1559528461873125649">እንደዚህ ያለ ፋይል ወይም አቃፊ የለም</translation> <translation id="1583429793053364125">ይህን ድረ-ገጽ በማሳየት ላይ ሳለ የሆነ ችግር ተፈጥሯል።</translation> <translation id="1592005682883173041">አካባቢያዊ የውሂብ መድረሻ</translation> <translation id="1594030484168838125">ምረጥ</translation> -<translation id="161042844686301425">ውሃ ሰማያዊ</translation> <translation id="1620510694547887537">ካሜራ</translation> <translation id="1629803312968146339">ይህን ካርድ Chrome እንዲያስቀምጥልዎት ይፈልጋሉ?</translation> <translation id="1639239467298939599">በመጫን ላይ</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">ራስ-ሙላ</translation> <translation id="2710942282213947212">በእርስዎ ኮምፒውተር ላይ ያለ ሶፍትዌር Chromium ደህንነቱ በተጠበቀ ሁኔታ ከድር ጋር እንዳይገናኝ እያስቆመው ነው</translation> <translation id="2712173769900027643">ፍቃድ ጠይቅ</translation> -<translation id="2713444072780614174">ነጭ</translation> <translation id="2720342946869265578">በአቅራቢያ</translation> <translation id="2721148159707890343">ጥያቄ ተሳክቷል</translation> <translation id="2728127805433021124">የአገልጋዩ እውቅና ማረጋገጫ የተፈረመው በደካማ የፊርማ ስልተቀመር ነው።</translation> @@ -301,7 +298,6 @@ <translation id="3303855915957856445">ምንም የፍለጋ ውጤቶች አልተገኙም</translation> <translation id="3305707030755673451">የእርስዎ ውሂብ <ph name="TIME" /> ላይ በእርስዎ የስምረት የይለፍ ቃል ተመስጥሯል። ስምረትን ለመጀመር ያስገቡት።</translation> <translation id="3320021301628644560">የመክፈያ አድራሻ አክል</translation> -<translation id="3329013043687509092">የቀለም ሙሌት</translation> <translation id="333371639341676808">ይህ ገጽ ተጨማሪ ማገናኛዎችን እንዳይፈጥር አግድ።</translation> <translation id="3338095232262050444">ደህንነቱ የተጠበቀ ነው</translation> <translation id="3340978935015468852">ቅንብሮች</translation> @@ -412,7 +408,6 @@ <translation id="4103249731201008433">የመሣሪያ መለያ ቁጥር ልክ ያልሆነ ነው</translation> <translation id="410351446219883937">ራስ-አጫውት</translation> <translation id="4103763322291513355">የተከለከሉ የዩ አር ኤሎች ዝርዝር እና ሌሎች በስርዓት አስተዳዳሪዎ አስገዳጅነት የተሰጣቸው መመሪያዎችን ለማየት <strong>chrome://policy</strong>ን ይጎብኙ።</translation> -<translation id="4115378294792113321">ሮዝ</translation> <translation id="4116663294526079822">ሁልጊዜ በዚህ ጣቢያ ላይ ፍቀድ</translation> <translation id="4117700440116928470">የመመሪያ ወሰን አይደገፍም።</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 ሌላ}one{# ሌሎች}other{# ሌሎች}}</translation> @@ -623,7 +618,6 @@ <translation id="5869522115854928033">የተቀመጡ የይለፍ ቃሎች</translation> <translation id="5872918882028971132">የወላጅ አስተያየት ጥቆማዎች</translation> <translation id="5893752035575986141">ክሬዲት ካርዶች ተቀባይነት አላቸው።</translation> -<translation id="5901630391730855834">ቢጫ</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (ሰምሯል)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 ጥቅም ላይ ያለ}one{# ጥቅም ላይ ያለ}other{# ጥቅም ላይ}}</translation> <translation id="5959728338436674663">አደገኛ መተግበሪያዎችን እና ጣቢያዎችን ማግኘት እንዲያግዝ አንዳንድ <ph name="BEGIN_WHITEPAPER_LINK" />የሥርዓት መረጃ እና የገጽ ይዘት<ph name="END_WHITEPAPER_LINK" />ን በራስ-ሰር ወደ Google ይላኩ። <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -634,12 +628,10 @@ <translation id="5990559369517809815">ወደ አገልጋዩ የተላኩ ጥያቄዎች በአንድ ቅጥያ ታግደዋል።</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{ገጽ 1}one{ገጽ #}other{ገጽ #}}</translation> -<translation id="6017514345406065928">አረንጓዴ</translation> <translation id="6017850046339264347">በ<ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> ላይ ያሉ አጥቂዎች የሆነ ሌላ ነገር እንደሆነ መስለው የሚቀርቡ አታላይ መተግበሪያዎችን ሊጭኑ ወይም የእርስዎን ዱካ ለመከታተል የሚያስችል ውሂብን ሊሰበስቡ ይችላሉ። <ph name="BEGIN_LEARN_MORE_LINK" />የበለጠ ለመረዳት<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />፣ <ph name="TYPE_2" />፣ <ph name="TYPE_3" /> (ሰምሯል)</translation> <translation id="6027201098523975773">ስም ያስገቡ</translation> <translation id="6040143037577758943">ዝጋ</translation> -<translation id="6042308850641462728">ተጨማሪ</translation> <translation id="6047233362582046994">በእርስዎ ደህንነት ላይ የሚያመጣቸውን ስጋቶች ከተረዱ አደገኛ መተግበሪያዎቹ ከመወገዳቸው በፊት <ph name="BEGIN_LINK" />ይህን ጣቢያ መጎብኘት<ph name="END_LINK" /> ይችላሉ።</translation> <translation id="6047927260846328439">ይህ ይዘት ሶፍትዌር እንዲጭኑ ወይም የግል መረጃ ገልጸው እንዲያሳዩ እርስዎን ለማሳሳት ሊሞክር ይችል ይሆናል። <ph name="BEGIN_LINK" />የሆነው ሆኖ አሳይ<ph name="END_LINK" /></translation> <translation id="6051221802930200923"><ph name="SITE" /> የዕውቅና ማረጋገጫ ሚስማር መሰካትን ስለሚጠቀም ድር ጣቢያውን አሁን መጎብኘት አይችሉም። የአውታረ መረብ ስህተቶች እና ጥቃቶች ብዙውን ጊዜ ጊዜያዊ ስለሆኑ ይህ ገጽ በኋላ ላይ ሊሠራ ይችላል።</translation> @@ -716,7 +708,6 @@ <translation id="6710213216561001401">ቀዳሚ</translation> <translation id="6710594484020273272"><የፍለጋ ቃል ይተይቡ></translation> <translation id="6711464428925977395">በተኪ አገልጋዩ ላይ የሆነ ችግር አለ ወይም አድራሻው ትክክል አይደለም።</translation> -<translation id="6727102863431372879">አዘጋጅ</translation> <translation id="674375294223700098">ያልታወቀ የአገልጋይ እውቅና ማረጋገጫ ስህተት።</translation> <translation id="6753269504797312559">የመምሪያ እሴት</translation> <translation id="6757797048963528358">የእርስዎ መሣሪያ ተኝቷል።</translation> @@ -800,7 +791,6 @@ <translation id="7518003948725431193">ለዚህ የድር አድራሻ ምንም ድረ-ገጽ አልተገኘም፦ <ph name="URL" /></translation> <translation id="7521387064766892559">ጃቫስክሪፕት</translation> <translation id="7526934274050461096">ከዚሃ ጣቢያ ጋር ያለዎት ግንኙነት የግል አይደለም</translation> -<translation id="7535087603100972091">እሴት</translation> <translation id="7537536606612762813">ግዴታ</translation> <translation id="7542403920425041731">አንዴ ካረጋገጡ በኋላ የካርድ ዝርዝሮችዎ ለዚህ ጣቢያ ይጋራሉ።</translation> <translation id="7542995811387359312">ይህ ቅጽ ደህንነቱ የተጠበቀ ግንኙነት ስለማይጠቀም የክሬዲት ካርድ ራስ-መሙላት ተሰናክሏል።</translation> @@ -811,7 +801,6 @@ <translation id="7567204685887185387">ይህ አገልጋይ <ph name="DOMAIN" /> መሆኑን ሊያረጋግጥ አልቻለም፤ የደህንነት እውቅና ማረጋገጫው በተጭበረበረ ሁኔታ ተሰጥቶ ሊሆን ይችላል። ይሄ በተሳሳተ አወቃቀር ወይም አንድ አጥቂ ግንኙነትዎን በመጥለፉ የተከሰተ ሊሆን ይችላል።</translation> <translation id="7568593326407688803">ይህ ገጽ በ<ph name="ORIGINAL_LANGUAGE" />ነው። መተርጎም ይፈልጋሉ?</translation> <translation id="7569952961197462199">ክሬዲት ካርድ ከChrome ይወገድ?</translation> -<translation id="7569983096843329377">ጥቁር</translation> <translation id="7578104083680115302">Google ላይ ያስቀመጧቸውን ካርዶች በመጠቀም በሁሉም መሣሪያዎች ላይ በጣቢያዎችና መተግበሪያዎች ላይ በፍጥነት ይክፈሉ።</translation> <translation id="7588950540487816470">አካላዊ ድር</translation> <translation id="7592362899630581445">የአገልጋዩ እውቅና ማረጋገጫ አንዳንድ ገደቦችን ይጥሳል።</translation> @@ -863,7 +852,6 @@ <translation id="79338296614623784">የሚሰራ ስልክ ቁጥር ያስገቡ</translation> <translation id="7935318582918952113">የDOM ማጣሪያ</translation> <translation id="7938958445268990899">የአገልጋይ እውቅና ማረጋገጫ ገና አልጸናም።</translation> -<translation id="7942349550061667556">ቀይ</translation> <translation id="7947285636476623132">የእርስዎን የአገልግሎት ማብቂያ ዓመት ይመልከቱ እና እንደገና ይሞክሩ</translation> <translation id="7951415247503192394">(32-ቢት)</translation> <translation id="7956713633345437162">የተንቀሳቃሽ ስልክ ዕልባቶች</translation> @@ -957,7 +945,6 @@ <translation id="8870413625673593573">በቅርብ ጊዜ የተዘጉ</translation> <translation id="8874824191258364635">የሚሰራ የካርድ ቁጥር ያስገቡ</translation> <translation id="8876793034577346603">የአውታረ መረብ ውቅር ሊተነተን አልቻለም።</translation> -<translation id="8889402386540077796">ለይ ቀለም</translation> <translation id="8891727572606052622">ልክ ያልሆነ የተኪ ሁነታ።</translation> <translation id="889901481107108152">ይቅርታ፣ ይህ ሙከራ ለመሣሪያ ስርዓትዎ አይገኝም።</translation> <translation id="8903921497873541725">አጉላ</translation> @@ -966,7 +953,6 @@ <translation id="8938939909778640821">ተቀባይነት ያላቸው የክሬዲት እና የቅድመ-ክፍያ ካርዶች</translation> <translation id="8957210676456822347">የተያዥ መግቢያ ፈቀዳ</translation> <translation id="8971063699422889582">የአገልጋይ እውቅና ማረጋገጫ ጊዜው አልፎበታል።</translation> -<translation id="8986494364107987395">የአጠቃቀም ስታስቲክስ እና የብልሽት ሪፖርቶች በራስ ሰር ወደ Google ይላኩ።</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">ቀጥሎ ያለው ጣቢያ ጎጂ ፕሮግራሙች አሉት</translation> <translation id="8997023839087525404">አገልጋዩ የእውቅና ማረጋገጫ ግልጽነት መመሪያውን በመጠቀም በይፋ ያልተገለጸ የእውቅና ማረጋገጫን አቅርቧል። ይህ ለአንዳንድ የእውቅና ማረጋገጫዎች ሊታመኑ የሚችሉ መሆናቸውን ለማረጋገጥ እና ከአጥቂዎች ጥበቃ ለማድረግ እንዲቻል አስፈላጊ ነው።</translation> @@ -982,7 +968,6 @@ <translation id="9049981332609050619"><ph name="DOMAIN" />ን ለመድረስ ሞክረው ነበር፣ ግን አገልጋዩ ልክ ያልሆነ የእውቅና ማረጋገጫ ነው ያሳየው።</translation> <translation id="9050666287014529139">የይለፍ ሐረግ</translation> <translation id="9065203028668620118">አርትዕ</translation> -<translation id="9068849894565669697">ቀለም ይምረጡ</translation> <translation id="9069693763241529744">በቅጥያ ታግዷል</translation> <translation id="9076283476770535406">ለአዋቂ ብቻ የሚሆን ይዘት ሊኖረው ይችላል</translation> <translation id="9078964945751709336">ተጨማሪ መረጃ ያስፈልጋል</translation>
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb index c10b2830..ff6f13f 100644 --- a/components/strings/components_strings_ar.xtb +++ b/components/strings/components_strings_ar.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">في انتظار الاتصال…</translation> <translation id="153384715582417236">هذا كل شيء الآن</translation> <translation id="1549470594296187301">يجب تمكين JavaScript لاستخدام هذه الميزة.</translation> -<translation id="1555130319947370107">أزرق</translation> <translation id="1559528461873125649">لا وجود لمثل هذا الملف أو الدليل</translation> <translation id="1583429793053364125">حدث خطأ في شيء ما أثناء عرض صفحة الويب هذه.</translation> <translation id="1592005682883173041">الوصول إلى البيانات المحلية</translation> <translation id="1594030484168838125">اختيار</translation> -<translation id="161042844686301425">سماوي</translation> <translation id="1620510694547887537">الكاميرا</translation> <translation id="1629803312968146339">هل تريد من Chrome حفظ هذه البطاقة؟</translation> <translation id="1639239467298939599">جارٍ التحميل.</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">الملء التلقائي</translation> <translation id="2710942282213947212">تعمل البرامج على جهاز الكمبيوتر على منع اتصال Chromium بالويب بشكل آمن</translation> <translation id="2712173769900027643">طلب إذن</translation> -<translation id="2713444072780614174">أبيض</translation> <translation id="2720342946869265578">المجاورة</translation> <translation id="2721148159707890343">تم إرسال الطلب بنجاح</translation> <translation id="2728127805433021124">شهادة الخادم موقّعة باستخدام خوارزمية توقيع ضعيفة.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">لم يتم العثور على أي نتائج بحث</translation> <translation id="3305707030755673451">تم تشفير بياناتك باستخدام عبارة مرور المزامنة في <ph name="TIME" />. أدخلها لبدء المزامنة.</translation> <translation id="3320021301628644560">إضافة عنوان إرسال الفواتير</translation> -<translation id="3329013043687509092">تشبع اللون</translation> <translation id="333371639341676808">منع هذه الصفحة من إنشاء مربّعات حوار إضافية.</translation> <translation id="3338095232262050444">آمن</translation> <translation id="3340978935015468852">الإعدادات</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">الرقم التسلسلي للجهاز غير صالح</translation> <translation id="410351446219883937">تشغيل تلقائي</translation> <translation id="4103763322291513355">انتقل إلى <strong>chrome://policy</strong> لمشاهدة قائمة بعناوين URL المضافة إلى القائمة السوداء والسياسات الأخرى التي فرضها مشرف النظام.</translation> -<translation id="4115378294792113321">أرجواني</translation> <translation id="4116663294526079822">إلغاء الحظر دومًا على هذا الموقع</translation> <translation id="4117700440116928470">نطاق السياسة غير متوافق.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{عنصر واحد آخر}zero{# عنصر آخر}two{عنصران آخران (#)}few{# عناصر أخرى}many{# عنصرًا آخر}other{# عنصر آخر}}</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">كلمات المرور المحفوظة</translation> <translation id="5872918882028971132">اقتراحات الآباء</translation> <translation id="5893752035575986141">يتم قبول بطاقات الائتمان.</translation> -<translation id="5901630391730855834">أصفر</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (تمت المزامنة)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 قيد الاستخدام}zero{# قيد الاستخدام}two{# قيد الاستخدام}few{# قيد الاستخدام}many{# قيد الاستخدام}other{# قيد الاستخدام}}</translation> <translation id="5959728338436674663">يمكنك إرسال بعض <ph name="BEGIN_WHITEPAPER_LINK" />معلومات النظام ومحتوى الصفحة<ph name="END_WHITEPAPER_LINK" /> إلى Google تلقائيًا للمساعدة في اكتشاف التطبيقات والمواقع الضارة. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">تم حظر الطلبات المقدمة إلى الخادم بواسطة إحدى الإضافات.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{صفحة 1}zero{صفحة #}two{صفحة #}few{صفحة #}many{صفحة #}other{صفحة #}}</translation> -<translation id="6017514345406065928">أخضر</translation> <translation id="6017850046339264347">يمكن للمهاجمين على <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> تثبيت تطبيقات مضللة تدعي أنها شيء آخر أو تجمع بيانات قد يتم استخدامها لتتبعك. <ph name="BEGIN_LEARN_MORE_LINK" />مزيد من المعلومات<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />، <ph name="TYPE_2" />، <ph name="TYPE_3" /> (تمت المزامنة)</translation> <translation id="6027201098523975773">أدخِل اسمًا</translation> <translation id="6040143037577758943">إغلاق</translation> -<translation id="6042308850641462728">المزيد</translation> <translation id="6047233362582046994">إذا كنت على دراية بالمخاطر التي تهدد أمانك، يمكنك <ph name="BEGIN_LINK" />زيارة موقع الويب هذا<ph name="END_LINK" /> قبل أن تتم إزالة التطبيقات الضارة.</translation> <translation id="6047927260846328439">قد يحاول هذا المحتوى خداعك لتثبيت برامج أو الكشف عن معلومات شخصية. <ph name="BEGIN_LINK" />عرض على أي حال<ph name="END_LINK" /></translation> <translation id="6051221802930200923">لا يمكنك زيارة <ph name="SITE" /> في الوقت الحالي لأن الموقع يستخدم أداة التحقق من صحة الشهادات. أخطاء الشبكة والهجمات عليها عادةً ما تكون مؤقتة، لذا ستعمل هذه الصفحة في وقت لاحق على الأرجح.</translation> @@ -717,7 +709,6 @@ <translation id="6710213216561001401">السابق</translation> <translation id="6710594484020273272"><إدخال عبارة البحث></translation> <translation id="6711464428925977395">هناك خطأ ما في الخادم الوكيل، أو العنوان غير صحيح.</translation> -<translation id="6727102863431372879">تعيين</translation> <translation id="674375294223700098">حدث خطأ غير معروف في شهادة الخادم.</translation> <translation id="6753269504797312559">قيمة السياسة</translation> <translation id="6757797048963528358">خضع جهازك إلى وضع السكون.</translation> @@ -801,7 +792,6 @@ <translation id="7518003948725431193">لم يتم العثور على أي صفحة ويب لعنوان الويب:<ph name="URL" /></translation> <translation id="7521387064766892559">جافا سكريبت</translation> <translation id="7526934274050461096">اتصالك بموقع الويب هذا لا يتمتع بخصوصية</translation> -<translation id="7535087603100972091">القيمة</translation> <translation id="7537536606612762813">إلزامية</translation> <translation id="7542403920425041731">بعد تأكيدك، ستتم مشاركة تفاصيل بطاقتك مع موقع الويب هذا.</translation> <translation id="7542995811387359312">تم تعطيل الملء التلقائي لبطاقة الائتمان لأن هذا النموذج لا يستخدم اتصالاً آمنًا.</translation> @@ -812,7 +802,6 @@ <translation id="7567204685887185387">هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ بل إنه شهادة أمان تم إصدارها عن طريق الاحتيال. وربما يكون سبب ذلك خطأ في التكوين أو مهاجمًا يعترض اتصالك.</translation> <translation id="7568593326407688803">تتوفر هذه الصفحة باللغة<ph name="ORIGINAL_LANGUAGE" />فهل تريد ترجمتها؟</translation> <translation id="7569952961197462199">هل تريد إزالة بطاقة الائتمان من Chrome؟</translation> -<translation id="7569983096843329377">أسود</translation> <translation id="7578104083680115302">الدفع سريعًا على المواقع والتطبيقات عبر الأجهزة باستخدام البطاقات التي حفظتها في Google.</translation> <translation id="7588950540487816470">الشبكة المادية</translation> <translation id="7592362899630581445">تنتهك شهادة الخادم القيود المفروضة على الاسم.</translation> @@ -864,7 +853,6 @@ <translation id="79338296614623784">أدخِل رقم هاتف صحيحًا</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">شهادة الخادم ليست صالحة بعد.</translation> -<translation id="7942349550061667556">أحمر</translation> <translation id="7947285636476623132">تحقق من عام انتهاء الصلاحية وأعِد المحاولة مرة أخرى</translation> <translation id="7951415247503192394">(32 بت)</translation> <translation id="7956713633345437162">الإشارات المرجعية على الجوال</translation> @@ -958,7 +946,6 @@ <translation id="8870413625673593573">العناصر المغلقة مؤخرًا</translation> <translation id="8874824191258364635">أدخِل رقم بطاقة صحيحًا</translation> <translation id="8876793034577346603">تعذّر تحليل تهيئة الشبكة</translation> -<translation id="8889402386540077796">تدرج اللون</translation> <translation id="8891727572606052622">وضع الخادم الوكيل غير صالح.</translation> <translation id="889901481107108152">عذرًا، هذه التجربة غير متاحة على نظامك الأساسي.</translation> <translation id="8903921497873541725">تكبير</translation> @@ -967,7 +954,6 @@ <translation id="8938939909778640821">بطاقات الائتمان وبطاقات الدفع المسبق المقبولة</translation> <translation id="8957210676456822347">تفويض المدخل المقيد</translation> <translation id="8971063699422889582">انتهت صلاحية شهادة الخادم.</translation> -<translation id="8986494364107987395">إرسال إحصائيات الاستخدام وتقارير الأعطال إلى Google تلقائيًا</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">تحتوي مقدمة الموقع على برامج ضارة</translation> <translation id="8997023839087525404">قدم الخادم شهادة لم يتم الكشف عنها علنًا باستخدام سياسة شهادة الشفافية. وهذا ضروري لبعض الشهادات، لضمان أنها جديرة بالثقة ومحمية من المهاجمين.</translation> @@ -983,7 +969,6 @@ <translation id="9049981332609050619">لقد حاولت الوصول إلى <ph name="DOMAIN" />, ولكن الخادم قدّم شهادة غير صالحة.</translation> <translation id="9050666287014529139">عبارة المرور</translation> <translation id="9065203028668620118">تحرير</translation> -<translation id="9068849894565669697">اختيار اللون</translation> <translation id="9069693763241529744">تم الحظر بواسطة إحدى الإضافات</translation> <translation id="9076283476770535406">قد يتضمن محتوى للبالغين</translation> <translation id="9078964945751709336">مطلوب مزيد من المعلومات</translation>
diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb index 1a83dfb..3818227 100644 --- a/components/strings/components_strings_bg.xtb +++ b/components/strings/components_strings_bg.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Изчаква се връзка…</translation> <translation id="153384715582417236">Това е всичко засега</translation> <translation id="1549470594296187301">Трябва да активирате JavaScript, за да използвате тази функция.</translation> -<translation id="1555130319947370107">синьо</translation> <translation id="1559528461873125649">Няма такъв файл или директория</translation> <translation id="1583429793053364125">Възникна проблем при показването на тази уеб страница.</translation> <translation id="1592005682883173041">Достъп до локални данни</translation> <translation id="1594030484168838125">Избор</translation> -<translation id="161042844686301425">синьозелено</translation> <translation id="1620510694547887537">Камера</translation> <translation id="1629803312968146339">Искате ли Chrome да запази тази карта?</translation> <translation id="1639239467298939599">Зарежда се</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Автоматично попълване</translation> <translation id="2710942282213947212">Софтуер на компютъра ви пречи на Chromium да се свърже безопасно с мрежата</translation> <translation id="2712173769900027643">Искане на разрешение</translation> -<translation id="2713444072780614174">бяло</translation> <translation id="2720342946869265578">В близост</translation> <translation id="2721148159707890343">Заявката е успешна</translation> <translation id="2728127805433021124">Сертификатът на сървъра е подписан със слаб алгоритъм.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">Няма намерени резултати от търсенето</translation> <translation id="3305707030755673451">На <ph name="TIME" /> данните ви бяха шифровани с пропуска ви за синхронизиране. Въведете го, за да стартирате синхронизирането.</translation> <translation id="3320021301628644560">Добавяне на адреса за фактуриране</translation> -<translation id="3329013043687509092">Насищане</translation> <translation id="333371639341676808">Да не се показват допълнителни диалогови прозорци от тази страница.</translation> <translation id="3338095232262050444">Има защита</translation> <translation id="3340978935015468852">настройки</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">Серийният номер на устройството е невалиден</translation> <translation id="410351446219883937">Автоматично възпроизвеждане</translation> <translation id="4103763322291513355">Посетете <strong>chrome://policy</strong>, за да видите изброени URL адресите в черния списък и другите правила, наложени от системния ви администратор.</translation> -<translation id="4115378294792113321">пурпурно</translation> <translation id="4116663294526079822">Разрешаване винаги на този сайт</translation> <translation id="4117700440116928470">Обхватът на правилата не се поддържа.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{още 1 елемент}other{още # елемента}}</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">Запазени пароли</translation> <translation id="5872918882028971132">Основни предложения</translation> <translation id="5893752035575986141">Приемат се кредитни карти.</translation> -<translation id="5901630391730855834">жълто</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (синхронизирано)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{Използва се 1}other{Използват се #}}</translation> <translation id="5959728338436674663">Автоматично изпращане до Google на <ph name="BEGIN_WHITEPAPER_LINK" />системна информация и част от съдържанието на страниците<ph name="END_WHITEPAPER_LINK" /> с цел по-лесно откриване на опасни приложения и сайтове. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">Заявките към сървъра са блокирани от разширение.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Страница 1}other{Страница #}}</translation> -<translation id="6017514345406065928">зелено</translation> <translation id="6017850046339264347">Извършители на атака срещу <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> могат да инсталират измамни приложения, които се представят за нещо друго или събират данни, които може да се използват за проследяването ви. <ph name="BEGIN_LEARN_MORE_LINK" />Научете повече<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (синхронизирани)</translation> <translation id="6027201098523975773">Въведете име</translation> <translation id="6040143037577758943">Затваряне</translation> -<translation id="6042308850641462728">Още</translation> <translation id="6047233362582046994">Ако разбирате рисковете за сигурността си, може <ph name="BEGIN_LINK" />да посетите този сайт<ph name="END_LINK" /> преди премахването на опасните приложения.</translation> <translation id="6047927260846328439">Въпросното съдържание може да се опита да ви подведе да инсталирате софтуер или да разкриете лична информация. <ph name="BEGIN_LINK" />Показване въпреки това<ph name="END_LINK" /></translation> <translation id="6051221802930200923">В момента не можете да посетите <ph name="SITE" />, защото уебсайтът използва метод за допълнително потвърждаване на сертификатите. Обикновено грешките в мрежата и атаките срещу нея са временни, така че тази страница вероятно ще работи по-късно.</translation> @@ -717,7 +709,6 @@ <translation id="6710213216561001401">Предишна</translation> <translation id="6710594484020273272"><Въведете дума за търсене></translation> <translation id="6711464428925977395">Нещо не е наред с прокси сървъра или адресът е неправилен.</translation> -<translation id="6727102863431372879">Задаване</translation> <translation id="674375294223700098">Неизвестна грешка в сертификата на сървъра.</translation> <translation id="6753269504797312559">Стойност за правилото</translation> <translation id="6757797048963528358">Устройството ви премина в спящ режим.</translation> @@ -801,7 +792,6 @@ <translation id="7518003948725431193">Не е намерена уеб страница за уеб адреса: <ph name="URL" /></translation> <translation id="7521387064766892559">Javascript</translation> <translation id="7526934274050461096">Връзката ви с този сайт не е частна</translation> -<translation id="7535087603100972091">Стойност</translation> <translation id="7537536606612762813">Задължително</translation> <translation id="7542403920425041731">След като потвърдите картата си, данните за нея ще бъдат споделени с този сайт.</translation> <translation id="7542995811387359312">Автоматичното попълване на кредитната карта е деактивирано, защото този формуляр не използва защитена връзка.</translation> @@ -812,7 +802,6 @@ <translation id="7567204685887185387">Сървърът не можа да докаже, че е <ph name="DOMAIN" />; възможно е сертификатът му за сигурност да е издаден измамнически. Това може да се дължи на неправилно конфигуриране или на прихващане на връзката ви от атакуващ.</translation> <translation id="7568593326407688803">Тази страница е на<ph name="ORIGINAL_LANGUAGE" />Искате ли да я преведете?</translation> <translation id="7569952961197462199">Кредитната карта да се премахне ли от Chrome?</translation> -<translation id="7569983096843329377">черно</translation> <translation id="7578104083680115302">Извършвайте бързи плащания в сайтове и приложения от всякакви устройства посредством картите, които сте запазили в Google.</translation> <translation id="7588950540487816470">Физическа мрежа</translation> <translation id="7592362899630581445">Сертификатът на сървъра нарушава ограниченията за име.</translation> @@ -864,7 +853,6 @@ <translation id="79338296614623784">Въведете валиден телефонен номер</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">Сертификатът на сървъра още не е валиден.</translation> -<translation id="7942349550061667556">червено</translation> <translation id="7947285636476623132">Проверете годината на валидност и опитайте отново</translation> <translation id="7951415247503192394">(32 бита)</translation> <translation id="7956713633345437162">Мобилни отметки</translation> @@ -957,7 +945,6 @@ <translation id="8870413625673593573">Наскоро затворени</translation> <translation id="8874824191258364635">Въведете валиден номер на карта</translation> <translation id="8876793034577346603">Синтактичният анализ на конфигурацията на мрежата не бе успешен.</translation> -<translation id="8889402386540077796">Цветови тон</translation> <translation id="8891727572606052622">Невалиден режим на прокси сървъра.</translation> <translation id="889901481107108152">За съжаление този експеримент не се предлага за платформата ви.</translation> <translation id="8903921497873541725">Увеличаване на мащаба</translation> @@ -966,7 +953,6 @@ <translation id="8938939909778640821">Приемани кредитни и предплатени карти</translation> <translation id="8957210676456822347">Упълномощаване в портал за удостоверяване</translation> <translation id="8971063699422889582">Сертификатът на сървъра е с изтекла валидност.</translation> -<translation id="8986494364107987395">Автоматично изпращане до Google на статистически данни за използването на Chrome и сигнали за сривове</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">На хоризонта се задава сайт с опасни програми</translation> <translation id="8997023839087525404">Сървърът предостави сертификат, който не е разкрит публично чрез правило в Прозрачност на сертификатите. Това се изисква за някои сертификати с цел защита срещу хакери и за да е сигурно, че може да им се има доверие.</translation> @@ -982,7 +968,6 @@ <translation id="9049981332609050619">Опитахте да отворите <ph name="DOMAIN" />, но сървърът предостави невалиден сертификат.</translation> <translation id="9050666287014529139">Парола</translation> <translation id="9065203028668620118">Редактиране</translation> -<translation id="9068849894565669697">Избор на цвят</translation> <translation id="9069693763241529744">Блокирано от разширение</translation> <translation id="9076283476770535406">Възможно е да има съдържание за пълнолетни</translation> <translation id="9078964945751709336">Изисква се още информация</translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb index 5a494c06..74daea0 100644 --- a/components/strings/components_strings_bn.xtb +++ b/components/strings/components_strings_bn.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">সংযোগের জন্য অপেক্ষা করা হচ্ছে...</translation> <translation id="153384715582417236">এখন এই পর্যন্তই</translation> <translation id="1549470594296187301">এই বৈশিষ্ট্যটি ব্যবহার করার জন্য JavaScript সক্ষম করা প্রয়োজন।</translation> -<translation id="1555130319947370107">নীল</translation> <translation id="1559528461873125649">এমন কোন ফাইল বা ডিরেক্টরি নেই</translation> <translation id="1583429793053364125">এই ওয়েবপৃষ্ঠাটি দেখানোর সময় কোনো সমস্যা হয়েছে।</translation> <translation id="1592005682883173041">স্থানীয় ডেটা অ্যাক্সেস</translation> <translation id="1594030484168838125">বেছে নিন</translation> -<translation id="161042844686301425">নীলাভ</translation> <translation id="1620510694547887537">ক্যামেরা</translation> <translation id="1629803312968146339">আপনি কি চান যে Chrome এই কার্ড সংরক্ষণ করুক?</translation> <translation id="1639239467298939599">লোড হচ্ছে</translation> @@ -221,7 +219,6 @@ <translation id="2709516037105925701">স্বয়ংপূরণ</translation> <translation id="2710942282213947212">আপনার কম্পিউটারের সফ্টওয়্যার Chromium কে নিরাপদে ওয়েবে সংযোগ করতে বাধা দিচ্ছে</translation> <translation id="2712173769900027643">অনুমতি নিন</translation> -<translation id="2713444072780614174">সাদা</translation> <translation id="2720342946869265578">আশেপাশে</translation> <translation id="2721148159707890343">অনুরোধ সফল হয়েছে</translation> <translation id="2728127805433021124">একটি দুর্বল স্বাক্ষর অ্যালগোরিদম ব্যবহার করে সার্ভারের শংসাপত্রে সাইন করা হয়েছে৷</translation> @@ -303,7 +300,6 @@ <translation id="3303855915957856445">কোনো অনুসন্ধান ফলাফল পাওয়া যায়নি</translation> <translation id="3305707030755673451">আপনার ডেটা আপনার সিঙ্ক পাসফ্রেজ দিয়ে <ph name="TIME" /> এ এনক্রিপ্ট করা হয়েছে। সিঙ্ক শুরু করার জন্য এটি লিখুন।</translation> <translation id="3320021301628644560">বিলিংয়ের ঠিকানা যোগ করুন</translation> -<translation id="3329013043687509092">পরিপৃক্তি</translation> <translation id="333371639341676808">এই পৃষ্ঠাটিকে অতিরিক্ত কথোপকথন তৈরি করা থেকে আটকান৷</translation> <translation id="3338095232262050444">সুরক্ষিত</translation> <translation id="3340978935015468852">সেটিংস</translation> @@ -414,7 +410,6 @@ <translation id="4103249731201008433">ডিভাইসের ক্রমিক সংখ্যা অবৈধ</translation> <translation id="410351446219883937">স্বতঃচালানো</translation> <translation id="4103763322291513355">নিবারিত URLগুলির তালিকা এবং আপনার সিস্টেম প্রশাসকের দ্বারা জারি করা অন্যান্য নীতিগুলি দেখার জন্য <strong>chrome://policy</strong> এ যান৷</translation> -<translation id="4115378294792113321">ম্যাজেন্টা</translation> <translation id="4116663294526079822">এই সাইটে সর্বদা অনুমতি দিন</translation> <translation id="4117700440116928470">নীতির সুযোগটি সমর্থিত নয়৷</translation> <translation id="4129401438321186435">{COUNT,plural, =1{আরো ১টি}one{অন্যান্য #টি}other{অন্যান্য #টি}}</translation> @@ -625,7 +620,6 @@ <translation id="5869522115854928033">সংরক্ষিত পাসওয়ার্ড</translation> <translation id="5872918882028971132">মূল প্রস্তাবনাগুলি</translation> <translation id="5893752035575986141">ক্রেডিট কার্ড গ্রহণ করা হয়।</translation> -<translation id="5901630391730855834">হলুদ</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (সিঙ্ক হয়েছে)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{১টি ব্যবহৃত হচ্ছে}one{#টি ব্যবহৃত হচ্ছে}other{#টি ব্যবহৃত হচ্ছে}}</translation> <translation id="5959728338436674663">বিপজ্জনক অ্যাপ্লিকেশান ও সাইটগুলি সনাক্ত করতে Google এর কাছে কিছু<ph name="BEGIN_WHITEPAPER_LINK" /> সিস্টেম তথ্য ও পৃষ্ঠার সামগ্রী<ph name="END_WHITEPAPER_LINK" /> স্বয়ংক্রিয়ভাবে পাঠান। <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -636,12 +630,10 @@ <translation id="5990559369517809815">সার্ভারে অনুরোধগুলি একটি এক্সটেনশান দিয়ে অবরুদ্ধ করা আছে৷</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{পৃষ্ঠা ১}one{পৃষ্ঠা #}other{পৃষ্ঠা #}}</translation> -<translation id="6017514345406065928">সবুজ</translation> <translation id="6017850046339264347"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> এ সক্রিয় থাকা আক্রমণকারীরা এমন প্রতারণামূলক অ্যাপ ইনস্টল করে দিতে পারে যেগুলি অন্যান্য আপের থেকে আলাদা করা যায় না, অথবা যেগুলি এমন ডেটা সংগ্রহ করে যা দিয়ে আপনার উপরে নজর রাখা যাবে। <ph name="BEGIN_LEARN_MORE_LINK" />আরও জানুন<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (সিঙ্ক হয়েছে)</translation> <translation id="6027201098523975773">একটি নাম লিখুন</translation> <translation id="6040143037577758943">বন্ধ</translation> -<translation id="6042308850641462728">আরো</translation> <translation id="6047233362582046994">আপনি যদি আপনার নিরাপত্তার ঝুঁকিগুলি বুঝে নিয়ে থাকেন, তাহলে ক্ষতিকারক অ্যাপগুলি সরানোর আগে <ph name="BEGIN_LINK" />এই সাইটে যেতে পারেন<ph name="END_LINK" />৷</translation> <translation id="6047927260846328439">এই কন্টেন্ট প্রতারণার মাধ্যমে আপনাকে দিয়ে কোনও সফ্টওয়্যার ইনস্টল করাতে অথবা আপনার ব্যক্তিগত তথ্য জেনে নেওয়ার চেষ্টা করতে পারে। <ph name="BEGIN_LINK" />তবুও এটি দেখতে চাই<ph name="END_LINK" /></translation> <translation id="6051221802930200923">ওয়েবসাইটটি পিন করা শংসাপত্র ব্যবহার করার কারণে আপনি এখন <ph name="SITE" /> এ যেতে পারবেন না। নেটওয়ার্ক ত্রুটি এবং আক্রমণ সাধারণত সাময়িকভাবে হয়, তাই এই পৃষ্ঠাটি সম্ভবত পরে কাজ করবে।</translation> @@ -717,7 +709,6 @@ <translation id="6710213216561001401">পূর্ববর্তী</translation> <translation id="6710594484020273272"><অনুসন্ধানের পদ লিখুন></translation> <translation id="6711464428925977395">প্রক্সী সার্ভারের কোনো সমস্যা হয়েছে, অথবা ঠিকানাটি ভুল।</translation> -<translation id="6727102863431372879">সেট</translation> <translation id="674375294223700098">অজানা সার্ভার শংসাপত্র ত্রুটি৷</translation> <translation id="6753269504797312559">নীতি মান</translation> <translation id="6757797048963528358">আপনার ডিভাইস নিদ্রা মোডে গিয়েছে।</translation> @@ -801,7 +792,6 @@ <translation id="7518003948725431193">এই ওয়েব ঠিকানার কোনও ওয়েবপৃষ্ঠা পাওয়া যায় নি: <ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">এই সাইটে আপনার সংযোগ ব্যক্তিগত নয়</translation> -<translation id="7535087603100972091">মান</translation> <translation id="7537536606612762813">বাধ্যতামূলক</translation> <translation id="7542403920425041731">আপনি নিশ্চিত করলে আপনার কার্ডের বিবরণ এই সাইটের সাথে শেয়ার করা হবে।</translation> <translation id="7542995811387359312">স্বয়ংক্রিয় ক্রেডিট কার্ড পূরণটি অক্ষম রয়েছে কারণ এই ফর্মটি কোনও সুরক্ষিত সংযোগ ব্যবহার করে না৷</translation> @@ -812,7 +802,6 @@ <translation id="7567204685887185387">এই সার্ভার প্রমাণ করতে পারেনি যে এটি <ph name="DOMAIN" />; এর নিরাপত্তা শংসাপত্র প্রতারণাপূর্ণভাবে ইস্যু করা হয়ে থাকতে পারে। কোনো ভুল কনফিগারেশনের কারণে অথবা কোনো আক্রমণকারী আপনার সংযোগ মাঝপথে আটকে দিচ্ছে বলে এমনটা হতে পারে।</translation> <translation id="7568593326407688803">এই পৃষ্ঠাটি<ph name="ORIGINAL_LANGUAGE" />ভাষাতে আছে আপনি কি এটিকে অনুবাদ করতে চাইবেন?</translation> <translation id="7569952961197462199">Chrome থেকে ক্রেডিট কার্ড সরাবেন?</translation> -<translation id="7569983096843329377">কালো</translation> <translation id="7578104083680115302">আপনি Google এর সাথে সংরক্ষণ করেছেন এমন কার্ড ব্যবহার করে ডিভাইস জুড়ে সাইট এবং অ্যাপ্লিকেশানগুলিতে দ্রুত অর্থ পরিশোধ করুন।</translation> <translation id="7588950540487816470">বাস্তবিক ওয়েব</translation> <translation id="7592362899630581445">সার্ভারের শংসাপত্র, নামের সীমাবদ্ধতাগুলি লঙ্ঘন করে৷</translation> @@ -864,7 +853,6 @@ <translation id="79338296614623784">একটি সঠিক ফোন নম্বর লিখুন</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">সার্ভারের শংসাপত্র এখনও কার্যকর নয়.</translation> -<translation id="7942349550061667556">লাল</translation> <translation id="7947285636476623132">আপনার মেয়াদ শেষের বছর পরীক্ষা করে আবার চেষ্টা করুন</translation> <translation id="7951415247503192394">(৩২-বিট)</translation> <translation id="7956713633345437162">মোবাইল বুকমার্ক</translation> @@ -957,7 +945,6 @@ <translation id="8870413625673593573">সম্প্রতি বন্ধ হয়েছে</translation> <translation id="8874824191258364635">একটি সঠিক কার্ড নম্বর লিখুন</translation> <translation id="8876793034577346603">নেটওয়ার্ক কনফিগারেশন বিশ্লেষণ করতে ব্যর্থ হয়েছে৷</translation> -<translation id="8889402386540077796">রঙ বিন্যাস</translation> <translation id="8891727572606052622">প্রক্সি মোড অবৈধ৷</translation> <translation id="889901481107108152">দুঃখিত, এই গবেষণা আপনার প্ল্যাটফর্মে উপলব্ধ নেই৷</translation> <translation id="8903921497873541725">জুম বাড়ান</translation> @@ -966,7 +953,6 @@ <translation id="8938939909778640821">ক্রেডিট ও প্রিপেড কার্ড গ্রহণ করা হয়</translation> <translation id="8957210676456822347">ক্যাপটিভ পোর্টাল অনুমোদন</translation> <translation id="8971063699422889582">সার্ভারের শংসাপত্রের মেয়াদ ফুরিয়েছে৷</translation> -<translation id="8986494364107987395">ব্যবহারের পরিসংখ্যান এবং ক্র্যাশ প্রতিবেদনগুলি স্বয়ংক্রিয়ভাবে Google-এ পাঠান</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">সামনের সাইটটিতে ক্ষতিকর প্রোগ্রামগুলি রয়েছে</translation> <translation id="8997023839087525404">সার্ভারটি এমন একটি শংসাপত্র উপস্থাপন করেছে যেটি শংসাপত্রের স্বচ্ছতার নীতি ব্যবহার করে সর্বজনীনভাবে প্রকাশ করা হয়নি। এটা কিছু শংসাপত্রের জন্য একটি আবশ্যকতা, যাতে করে সেগুলির বিশ্বাসযোগ্যত করা যায় এবং আক্রমণকারীদের বিরুদ্ধে সুরক্ষা নেওয়া যায়।</translation> @@ -982,7 +968,6 @@ <translation id="9049981332609050619">আপনি <ph name="DOMAIN" />-এ পৌছানোর প্রয়াস করছেন, কিন্তু সার্ভার একটি অবৈধ শংসাপত্র উপস্থাপন করেছে|</translation> <translation id="9050666287014529139">পাসফ্রেজ</translation> <translation id="9065203028668620118">সম্পাদনা</translation> -<translation id="9068849894565669697">রঙ নির্বাচন করুন</translation> <translation id="9069693763241529744">একটি এক্সটেনশন ব্লক করেছে</translation> <translation id="9076283476770535406">এতে প্রাপ্তবয়স্কদের সামগ্রী থাকতে পারে</translation> <translation id="9078964945751709336">আরো তথ্য প্রয়োজন</translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb index ef1866f..e85b421 100644 --- a/components/strings/components_strings_ca.xtb +++ b/components/strings/components_strings_ca.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">S'està esperant que hi hagi connexió…</translation> <translation id="153384715582417236">De moment, això és tot</translation> <translation id="1549470594296187301">Heu d'activar el JavaScript per utilitzar aquesta funció.</translation> -<translation id="1555130319947370107">Blau</translation> <translation id="1559528461873125649">No existeix el fitxer o el directori</translation> <translation id="1583429793053364125">S'ha produït un error en mostrar aquesta pàgina web.</translation> <translation id="1592005682883173041">Accés a les dades locals</translation> <translation id="1594030484168838125">Tria</translation> -<translation id="161042844686301425">Cian</translation> <translation id="1620510694547887537">Càmera</translation> <translation id="1629803312968146339">Voleu que Chrome desi aquesta targeta?</translation> <translation id="1639239467298939599">S'està carregant</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Emplenament autom.</translation> <translation id="2710942282213947212">L'ordinador conté programari que impedeix que Chromium es connecti de manera segura al web</translation> <translation id="2712173769900027643">Demana permís</translation> -<translation id="2713444072780614174">Blanc</translation> <translation id="2720342946869265578">A prop</translation> <translation id="2721148159707890343">Sol·licitud realitzada correctament</translation> <translation id="2728127805433021124">El certificat del servidor està signat mitjançant un algoritme de signatura dèbil.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">No s'ha trobat cap resultat de la cerca</translation> <translation id="3305707030755673451">Les vostres dades es van encriptar el dia <ph name="TIME" /> amb la vostra frase de contrasenya de sincronització. Introduïu-la per començar la sincronització.</translation> <translation id="3320021301628644560">Afegeix una adreça de facturació</translation> -<translation id="3329013043687509092">Saturació</translation> <translation id="333371639341676808">Evita que aquesta pàgina creï diàlegs addicionals.</translation> <translation id="3338095232262050444">Segur</translation> <translation id="3340978935015468852">configuració</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">El número de sèrie del dispositiu no és vàlid</translation> <translation id="410351446219883937">Reproducció automàtica</translation> <translation id="4103763322291513355">Visiteu <strong>chrome://policy</strong> per veure la llista d'URL inclosos a la llista negra i altres polítiques aplicades per l'administrador del sistema.</translation> -<translation id="4115378294792113321">Magenta</translation> <translation id="4116663294526079822">Permet sempre en aquest lloc</translation> <translation id="4117700440116928470">L'àmbit de la política no s'admet.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 element més}other{# elements més}}</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">Contrasenyes desades</translation> <translation id="5872918882028971132">Suggeriments per als responsables</translation> <translation id="5893752035575986141">S'accepten targetes de crèdit.</translation> -<translation id="5901630391730855834">Groc</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (informació sincronitzada)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 en ús}other{# en ús}}</translation> <translation id="5959728338436674663">Envia automàticament algunes <ph name="BEGIN_WHITEPAPER_LINK" />dades del sistema i contingut de les pàgines<ph name="END_WHITEPAPER_LINK" /> a Google per ajudar a detectar les aplicacions i els llocs perillosos. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">Una extensió ha bloquejat les peticions al servidor.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Pàgina 1}other{Pàgina #}}</translation> -<translation id="6017514345406065928">Verd</translation> <translation id="6017850046339264347">Pot ser que els atacants que es troben a <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> instal·lin aplicacions enganyoses que es facin passar per qui no són o recopilin dades que podrien utilitzar-se per fer un seguiment de la teva activitat. <ph name="BEGIN_LEARN_MORE_LINK" />Més informació<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (informació sincronitzada)</translation> <translation id="6027201098523975773">Escriu un nom</translation> <translation id="6040143037577758943">Tanca</translation> -<translation id="6042308850641462728">Més</translation> <translation id="6047233362582046994">Si entens el risc que suposa per a la teva seguretat, pots <ph name="BEGIN_LINK" />visitar aquest lloc web<ph name="END_LINK" /> abans que no s'hagin suprimit les aplicacions perjudicials.</translation> <translation id="6047927260846328439">Aquest contingut pot provar d'enganyar-te perquè instal·lis programari o proporcionis informació personal. <ph name="BEGIN_LINK" />Mostra igualment<ph name="END_LINK" />.</translation> <translation id="6051221802930200923">En aquests moments no pots visitar <ph name="SITE" /> perquè el lloc web fa servir una fixació de certificat. Els atacs i els errors de xarxa acostumen a ser temporals, o sigui que probablement la pàgina funcionarà més endavant.</translation> @@ -717,7 +709,6 @@ <translation id="6710213216561001401">Anterior</translation> <translation id="6710594484020273272"><Escriviu el terme de cerca></translation> <translation id="6711464428925977395">Hi ha hagut algun problema amb el servidor intermediari o l'adreça no és correcta.</translation> -<translation id="6727102863431372879">Configura</translation> <translation id="674375294223700098">Error de certificat del servidor desconegut.</translation> <translation id="6753269504797312559">Valor de la política</translation> <translation id="6757797048963528358">El dispositiu ha entrat en mode de repòs.</translation> @@ -801,7 +792,6 @@ <translation id="7518003948725431193">No s'ha trobat cap pàgina web per a l'adreça: <ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">La connexió amb aquest lloc no és privada</translation> -<translation id="7535087603100972091">Valor</translation> <translation id="7537536606612762813">Obligatòria</translation> <translation id="7542403920425041731">Un cop confirmada, els detalls de la targeta es compartiran amb aquest lloc web.</translation> <translation id="7542995811387359312">L'emplenament automàtic de targetes de crèdit està desactivat perquè el formulari no utilitza una connexió segura.</translation> @@ -812,7 +802,6 @@ <translation id="7567204685887185387">Aquest servidor no ha pogut comprovar que sigui <ph name="DOMAIN" /> perquè és possible que el seu certificat de seguretat s'hagi emès de manera fraudulenta. Això pot ser a causa d'una configuració incorrecta o d'un atacant que intercepta la vostra connexió.</translation> <translation id="7568593326407688803">Aquesta pàgina està en<ph name="ORIGINAL_LANGUAGE" />Voleu traduir-la?</translation> <translation id="7569952961197462199">Voleu suprimir la targeta de crèdit de Chrome?</translation> -<translation id="7569983096843329377">Negre</translation> <translation id="7578104083680115302">Agilitzeu els pagaments en llocs i en aplicacions des de qualsevol dispositiu mitjançant les targetes que hàgiu desat a Google.</translation> <translation id="7588950540487816470">El Web físic</translation> <translation id="7592362899630581445">El certificat del servidor incompleix les restriccions de nom.</translation> @@ -864,7 +853,6 @@ <translation id="79338296614623784">Introdueix un número de telèfon vàlid</translation> <translation id="7935318582918952113">Destil·lador DOM</translation> <translation id="7938958445268990899">El certificat del servidor encara no és vàlid.</translation> -<translation id="7942349550061667556">Vermell</translation> <translation id="7947285636476623132">Comprova l'any de caducitat i torna-ho a provar</translation> <translation id="7951415247503192394">(32 bits)</translation> <translation id="7956713633345437162">Adreces d'interès per a mòbils</translation> @@ -957,7 +945,6 @@ <translation id="8870413625673593573">Tancades recentment</translation> <translation id="8874824191258364635">Introdueix un número de targeta vàlid</translation> <translation id="8876793034577346603">No s'ha pogut analitzar la configuració de la xarxa.</translation> -<translation id="8889402386540077796">To</translation> <translation id="8891727572606052622">El mode de servidor intermediari no és vàlid.</translation> <translation id="889901481107108152">Aquest experiment no està disponible a la vostra plataforma.</translation> <translation id="8903921497873541725">Amplia</translation> @@ -966,7 +953,6 @@ <translation id="8938939909778640821">Targetes de crèdit i de prepagament acceptades</translation> <translation id="8957210676456822347">Autorització de portals captius</translation> <translation id="8971063699422889582">El certificat del servidor ha caducat.</translation> -<translation id="8986494364107987395">Envia automàticament estadístiques d'ús i informes d'error a Google</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">Aquest lloc conté programes perjudicials</translation> <translation id="8997023839087525404">El servidor ha presentat un certificat que no s'ha divulgat públicament mitjançant la política Transparència de certificats. Això és un requisit d'alguns certificats per garantir que són de confiança i una mesura de protecció contra els atacants.</translation> @@ -982,7 +968,6 @@ <translation id="9049981332609050619">Heu provat d'accedir a <ph name="DOMAIN" />, però el servidor ha presentat un certificat no vàlid.</translation> <translation id="9050666287014529139">Frase de contrasenya</translation> <translation id="9065203028668620118">Edita</translation> -<translation id="9068849894565669697">Selecció de color</translation> <translation id="9069693763241529744">Bloquejat per una extensió</translation> <translation id="9076283476770535406">Pot incloure contingut per a adults</translation> <translation id="9078964945751709336">Necessitem més informació</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb index e2ddd5f..e4573839 100644 --- a/components/strings/components_strings_cs.xtb +++ b/components/strings/components_strings_cs.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Čeká se na připojení…</translation> <translation id="153384715582417236">To je prozatím vše</translation> <translation id="1549470594296187301">Chcete-li tuto funkci použít, musí být aktivován JavaScript.</translation> -<translation id="1555130319947370107">Modrá</translation> <translation id="1559528461873125649">Daný soubor nebo adresář neexistuje.</translation> <translation id="1583429793053364125">Při zobrazování této webové stránky došlo k chybě.</translation> <translation id="1592005682883173041">Přístup k místním datům</translation> <translation id="1594030484168838125">Zvolit</translation> -<translation id="161042844686301425">Azurová</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1629803312968146339">Chcete, aby Chrome tuto kartu uložil?</translation> <translation id="1639239467298939599">Načítání</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Automatické vyplňování</translation> <translation id="2710942282213947212">Software na počítači brání prohlížeči Chromium v bezpečném připojení k webu</translation> <translation id="2712173769900027643">Požádat o oprávnění</translation> -<translation id="2713444072780614174">Bílá</translation> <translation id="2720342946869265578">Nablízku</translation> <translation id="2721148159707890343">Požadavek byl úspěšný</translation> <translation id="2728127805433021124">Certifikát serveru je podepsán slabým algoritmem.</translation> @@ -299,7 +296,6 @@ <translation id="3303855915957856445">Nebyly nalezeny žádné výsledky</translation> <translation id="3305707030755673451">Vaše data byla <ph name="TIME" /> zašifrována pomocí heslové fráze pro synchronizaci. Chcete-li zahájit synchronizaci, zadejte ji.</translation> <translation id="3320021301628644560">Přidání fakturační adresy</translation> -<translation id="3329013043687509092">Sytost</translation> <translation id="333371639341676808">Bránit této stránce ve vytváření dalších dialogových oken.</translation> <translation id="3338095232262050444">Zabezpečeno</translation> <translation id="3340978935015468852">nastavení</translation> @@ -409,7 +405,6 @@ <translation id="4103249731201008433">Sériové číslo zařízení je neplatné</translation> <translation id="410351446219883937">Automatické přehrávání</translation> <translation id="4103763322291513355">Na stránce <strong>chrome://policy</strong> naleznete seznam zakázaných adres URL a další zásady vynucené vaším správcem systému.</translation> -<translation id="4115378294792113321">Purpurová</translation> <translation id="4116663294526079822">Povolit vždy na tomto webu</translation> <translation id="4117700440116928470">Rozsah zásady není podporován.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 další}few{# další}many{# další}other{# dalších}}</translation> @@ -620,7 +615,6 @@ <translation id="5869522115854928033">Uložená hesla</translation> <translation id="5872918882028971132">Návrhy rodičů</translation> <translation id="5893752035575986141">Obchodník přijímá kreditní karty.</translation> -<translation id="5901630391730855834">Žlutá</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (synchronizováno)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{Používá se 1}few{Používají se #}many{Používá se #}other{Používá se #}}</translation> <translation id="5959728338436674663">Automaticky odesílat část <ph name="BEGIN_WHITEPAPER_LINK" />informací o systému a obsahu stránek<ph name="END_WHITEPAPER_LINK" /> do Googlu s cílem pomoci rozpoznávat nebezpečné aplikace a weby. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -631,12 +625,10 @@ <translation id="5990559369517809815">Žádosti na tento server jsou blokovány rozšířením.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Stránka 1}few{Stránka #}many{Stránka #}other{Stránka #}}</translation> -<translation id="6017514345406065928">Zelená</translation> <translation id="6017850046339264347">Útočníci na webu <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> by vám do zařízení mohli nainstalovat klamavé aplikace, které se vydávají za něco jiného nebo shromažďují data ke sledování vaší aktivity. <ph name="BEGIN_LEARN_MORE_LINK" />Další informace<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (synchronizováno)</translation> <translation id="6027201098523975773">Zadejte jméno</translation> <translation id="6040143037577758943">Zavřít</translation> -<translation id="6042308850641462728">Více</translation> <translation id="6047233362582046994">Pokud bezpečnostní rizika chápete, můžete <ph name="BEGIN_LINK" />tento web navštívit<ph name="END_LINK" /> před tím, než budou nebezpečné aplikace odstraněny.</translation> <translation id="6047927260846328439">Tento obsah by se vás podvodem mohl pokusit přimět k instalaci softwaru nebo odhalení osobních údajů. <ph name="BEGIN_LINK" />Přesto zobrazit<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Web <ph name="SITE" /> nyní nemůžete navštívit, protože používá připínání certifikátů. Síťové chyby a útoky jsou obvykle dočasné, tato stránka pravděpodobně později bude fungovat.</translation> @@ -712,7 +704,6 @@ <translation id="6710213216561001401">Předchozí</translation> <translation id="6710594484020273272"><Zadejte vyhledávací dotaz></translation> <translation id="6711464428925977395">Došlo k chybě proxy serveru nebo jste zadali nesprávnou adresu.</translation> -<translation id="6727102863431372879">Nastavit</translation> <translation id="674375294223700098">Neznámá chyba certifikátu serveru.</translation> <translation id="6753269504797312559">Hodnota zásady</translation> <translation id="6757797048963528358">Zařízení přešlo do režimu spánku.</translation> @@ -796,7 +787,6 @@ <translation id="7518003948725431193">Na webové adrese <ph name="URL" /> se nepodařilo nalézt žádnou webovou stránku.</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">Připojení k tomuto webu není soukromé</translation> -<translation id="7535087603100972091">Hodnota</translation> <translation id="7537536606612762813">Povinná</translation> <translation id="7542403920425041731">Po ověření budou údaje o kartě sdíleny s tímto webem.</translation> <translation id="7542995811387359312">Automatické vyplňování údajů platební karty je deaktivováno, protože tento formulář nepoužívá zabezpečené připojení.</translation> @@ -807,7 +797,6 @@ <translation id="7567204685887185387">Server nedokázal prokázat, že patří doméně <ph name="DOMAIN" />. Jeho bezpečnostní certifikát byl zřejmě vydán podvodně. Může to být způsobeno nesprávnou konfigurací nebo tím, že vaše připojení zachytává útočník.</translation> <translation id="7568593326407688803">Tato stránka je v jazyce<ph name="ORIGINAL_LANGUAGE" />Chcete ji přeložit?</translation> <translation id="7569952961197462199">Odstranit platební kartu z Chromu?</translation> -<translation id="7569983096843329377">Černá</translation> <translation id="7578104083680115302">Plaťte na webech a v aplikacích v různých zařízeních rychle pomocí karet uložených na Googlu.</translation> <translation id="7588950540487816470">Fyzický web</translation> <translation id="7592362899630581445">Certifikát serveru porušuje omezení názvů domén.</translation> @@ -859,7 +848,6 @@ <translation id="79338296614623784">Zadejte platné telefonní číslo</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">Certifikát serveru ještě není platný.</translation> -<translation id="7942349550061667556">Červená</translation> <translation id="7947285636476623132">Zkontrolujte rok vypršení platnosti a zkuste to znovu.</translation> <translation id="7951415247503192394">(32bitový)</translation> <translation id="7956713633345437162">Mobilní záložky</translation> @@ -953,7 +941,6 @@ <translation id="8870413625673593573">Nedávno zavřené</translation> <translation id="8874824191258364635">Zadejte platné číslo karty</translation> <translation id="8876793034577346603">Analýza konfigurace sítě se nezdařila.</translation> -<translation id="8889402386540077796">Odstín</translation> <translation id="8891727572606052622">Neplatný režim proxy serveru.</translation> <translation id="889901481107108152">Je nám líto, tento experiment není na vaší platformě dostupný.</translation> <translation id="8903921497873541725">Přiblížit</translation> @@ -962,7 +949,6 @@ <translation id="8938939909778640821">Přijímané kreditní a předplacené karty</translation> <translation id="8957210676456822347">Autorizace captive portálu</translation> <translation id="8971063699422889582">Platnost certifikátu serveru vypršela.</translation> -<translation id="8986494364107987395">Automaticky posílat společnosti Google statistiky používání a zprávy o selhání</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">Web, na který se chystáte přejít, obsahuje škodlivé programy</translation> <translation id="8997023839087525404">Server předložil certifikát, který nebyl zveřejněn v souladu se zásadou Certificate Transparency. U některých certifikátů je to z důvodu kontroly důvěryhodnosti a ochrany před útočníky vyžadováno.</translation> @@ -978,7 +964,6 @@ <translation id="9049981332609050619">Pokusili jste se přejít do domény <ph name="DOMAIN" />, ale server předložil certifikát, jehož platnost vypršela.</translation> <translation id="9050666287014529139">Heslová fráze</translation> <translation id="9065203028668620118">Upravit</translation> -<translation id="9068849894565669697">Výběr barvy</translation> <translation id="9069693763241529744">Blokováno rozšířením</translation> <translation id="9076283476770535406">Může obsahovat materiály pouze pro dospělé</translation> <translation id="9078964945751709336">Jsou potřeba další informace</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb index ecd85af0..a0ce8eb 100644 --- a/components/strings/components_strings_da.xtb +++ b/components/strings/components_strings_da.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Venter på forbindelse…</translation> <translation id="153384715582417236">Det var det hele indtil videre.</translation> <translation id="1549470594296187301">JavaScript skal være aktiveret, før du kan bruge denne funktion.</translation> -<translation id="1555130319947370107">Blå</translation> <translation id="1559528461873125649">Filen eller mappen findes ikke</translation> <translation id="1583429793053364125">Der opstod en fejl ved visningen af denne webside.</translation> <translation id="1592005682883173041">Lokal dataadgang</translation> <translation id="1594030484168838125">Vælg</translation> -<translation id="161042844686301425">Cyan</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1629803312968146339">Skal Chrome gemme dette kort?</translation> <translation id="1639239467298939599">Indlæser...</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">AutoFyld</translation> <translation id="2710942282213947212">Der er software på computeren, som forhindrer Chromium i at oprette en sikker forbindelse til nettet</translation> <translation id="2712173769900027643">Spørg om tilladelse</translation> -<translation id="2713444072780614174">Hvid</translation> <translation id="2720342946869265578">Tæt på</translation> <translation id="2721148159707890343">Anmodning lykkedes</translation> <translation id="2728127805433021124">Serverens certifikat er signeret ved hjælp af en svag signaturalgoritme.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">Der blev ikke fundet nogen søgeresultater</translation> <translation id="3305707030755673451">Dine data blev krypteret med din adgangssætning til synkronisering d. <ph name="TIME" />. Indtast adgangssætningen for at starte synkroniseringen.</translation> <translation id="3320021301628644560">Tilføj faktureringsadresse</translation> -<translation id="3329013043687509092">Mætning</translation> <translation id="333371639341676808">Undgå, at denne side laver nye dialogbokse.</translation> <translation id="3338095232262050444">Sikker</translation> <translation id="3340978935015468852">indstillinger</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">Enhedens serienummer er ugyldigt</translation> <translation id="410351446219883937">Autoplay</translation> <translation id="4103763322291513355">Gå til <strong>chrome://policy</strong> for at se listen over sortlistede webadresser og andre politikker, din systemadministrator har igangsat.</translation> -<translation id="4115378294792113321">Magenta</translation> <translation id="4116663294526079822">Tillad altid på dette website</translation> <translation id="4117700440116928470">Politikkens omfang understøttes ikke.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 anden/andet}one{# anden/andet}other{# andre}}</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">Gemte adgangskoder</translation> <translation id="5872918882028971132">Forslag fra forældre</translation> <translation id="5893752035575986141">Kreditkort accepteres.</translation> -<translation id="5901630391730855834">Gul</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (synkroniseret)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 i brug}one{# i brug}other{# i brug}}</translation> <translation id="5959728338436674663">Send automatisk <ph name="BEGIN_WHITEPAPER_LINK" />nogle systemoplysninger og noget sideindhold<ph name="END_WHITEPAPER_LINK" /> til Google som en hjælp til at registrere skadelige apps og websites. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">Anmodninger til serveren er blokeret af en udvidelse.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Side 1}one{Side #}other{Side #}}</translation> -<translation id="6017514345406065928">Grøn</translation> <translation id="6017850046339264347">Hackere på <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> kan installere vildledende apps, der foregiver at være noget andet, eller som indsamler data, der kan anvendes til at overvåge dig. <ph name="BEGIN_LEARN_MORE_LINK" />Få flere oplysninger<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (synkroniseret)</translation> <translation id="6027201098523975773">Angiv et navn</translation> <translation id="6040143037577758943">Luk</translation> -<translation id="6042308850641462728">Mere</translation> <translation id="6047233362582046994">Hvis du er indforstået med de forbundne sikkerhedsrisici, kan du <ph name="BEGIN_LINK" />besøge dette website<ph name="END_LINK" />, inden de skadelige apps fjernes.</translation> <translation id="6047927260846328439">Dette indhold forsøger muligvis at narre dig til at installere software eller afsløre personlige oplysninger. <ph name="BEGIN_LINK" />Vis alligevel<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Du kan ikke besøge <ph name="SITE" /> lige nu, da websitet bruger certifikatlåsning. Netværksfejl og angreb er normalt midlertidige, så siden vil sandsynligvis fungere igen senere.</translation> @@ -717,7 +709,6 @@ <translation id="6710213216561001401">Forrige</translation> <translation id="6710594484020273272"><Indtast søgeterm></translation> <translation id="6711464428925977395">Der er noget galt med proxyserveren, eller adressen er forkert.</translation> -<translation id="6727102863431372879">Angiv</translation> <translation id="674375294223700098">Ukendt fejl i servercertifikatet.</translation> <translation id="6753269504797312559">Politikkens værdi</translation> <translation id="6757797048963528358">Din enhed gik i dvale.</translation> @@ -801,7 +792,6 @@ <translation id="7518003948725431193">Ingen webside fundet på webadressen: <ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">Din forbindelse til dette website er ikke privat</translation> -<translation id="7535087603100972091">Værdi</translation> <translation id="7537536606612762813">Obligatorisk</translation> <translation id="7542403920425041731">Når du har bekræftet, deles dine kortoplysninger med dette website.</translation> <translation id="7542995811387359312">Automatisk udfyldning af kreditkort er deaktiveret, fordi formularen ikke bruger en sikker forbindelse.</translation> @@ -812,7 +802,6 @@ <translation id="7567204685887185387">Denne server kunne ikke bevise, at den er <ph name="DOMAIN" />, da sikkerhedscertifikatet er udstedt på ulovlig vis. Dette kan skyldes en fejlkonfiguration, eller at en hacker har opfanget din forbindelse.</translation> <translation id="7568593326407688803">Denne side er på<ph name="ORIGINAL_LANGUAGE" />Vil du oversætte den?</translation> <translation id="7569952961197462199">Vil du fjerne kreditkortet fra Chrome?</translation> -<translation id="7569983096843329377">Sort</translation> <translation id="7578104083680115302">Betal hurtigt på websites og i apps på alle enheder ved hjælp af kort, du har gemt med Google.</translation> <translation id="7588950540487816470">Fysisk web</translation> <translation id="7592362899630581445">Begrænsningerne for serverens certifikatnavn er overtrådt.</translation> @@ -864,7 +853,6 @@ <translation id="79338296614623784">Angiv et gyldigt telefonnummer</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">Serverens certifikatet er endnu ikke gyldigt.</translation> -<translation id="7942349550061667556">Rød</translation> <translation id="7947285636476623132">Kontrollér, om udløbsåret er korrekt, og prøv igen.</translation> <translation id="7951415247503192394">(32-bit)</translation> <translation id="7956713633345437162">Bogmærker på mobil</translation> @@ -958,7 +946,6 @@ <translation id="8870413625673593573">Senest lukkede</translation> <translation id="8874824191258364635">Angiv et gyldigt kortnummer</translation> <translation id="8876793034577346603">Netværkskonfiguration kunne ikke parses.</translation> -<translation id="8889402386540077796">Farvetone</translation> <translation id="8891727572606052622">Ugyldig proxytilstand.</translation> <translation id="889901481107108152">Dette eksperiment er ikke tilgængeligt på din platform.</translation> <translation id="8903921497873541725">Zoom ind</translation> @@ -967,7 +954,6 @@ <translation id="8938939909778640821">Accepterede betalingskort</translation> <translation id="8957210676456822347">Godkendelse af captive portal</translation> <translation id="8971063699422889582">Serverens certifikat er udløbet.</translation> -<translation id="8986494364107987395">Send automatisk brugsstatistikker og nedbrudsrapporter til Google</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">Det website, du er på vej til, indeholder skadelige programmer</translation> <translation id="8997023839087525404">Serveren viste et certifikat, der ikke blev fremvist offentligt ved hjælp af politikken for Certifikatsgennemsigtighed. Dette påkræves for nogle certifikater for at sikre, at de er troværdige, og beskytter mod hackere.</translation> @@ -983,7 +969,6 @@ <translation id="9049981332609050619">Du har forsøgt at nå <ph name="DOMAIN" />, men serveren præsenterede et ugyldigt certifikat.</translation> <translation id="9050666287014529139">Adgangssætning</translation> <translation id="9065203028668620118">Rediger</translation> -<translation id="9068849894565669697">Vælg farve</translation> <translation id="9069693763241529744">Blokeret af en udvidelse</translation> <translation id="9076283476770535406">Der er muligvis indhold for voksne på websitet</translation> <translation id="9078964945751709336">Flere oplysninger kræves</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb index 2b1f73fa..e6bc9e5 100644 --- a/components/strings/components_strings_de.xtb +++ b/components/strings/components_strings_de.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Warten auf Verbindung…</translation> <translation id="153384715582417236">Das ist im Moment alles</translation> <translation id="1549470594296187301">Für diese Funktion muss JavaScript aktiviert sein.</translation> -<translation id="1555130319947370107">Blau</translation> <translation id="1559528461873125649">Datei oder Verzeichnis nicht vorhanden</translation> <translation id="1583429793053364125">Fehler beim Anzeigen dieser Webseite.</translation> <translation id="1592005682883173041">Zugriff auf lokale Daten</translation> <translation id="1594030484168838125">Auswählen</translation> -<translation id="161042844686301425">Cyan</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1629803312968146339">Möchten Sie, dass Chrome diese Karte speichert?</translation> <translation id="1639239467298939599">Wird geladen...</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">AutoFill</translation> <translation id="2710942282213947212">Software auf Ihrem Computer verhindert, dass Chromium eine sichere Internetverbindung herstellt</translation> <translation id="2712173769900027643">Berechtigung anfordern</translation> -<translation id="2713444072780614174">Weiß</translation> <translation id="2720342946869265578">In der Nähe</translation> <translation id="2721148159707890343">Anfrage erfolgreich</translation> <translation id="2728127805433021124">Das Serverzertifikat ist mit einem schwachen Signaturalgorithmus signiert.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">Keine Suchergebnisse gefunden</translation> <translation id="3305707030755673451">Ihre Daten wurden am <ph name="TIME" /> mit Ihrer Synchronisierungspassphrase verschlüsselt. Geben Sie diese ein, um die Synchronisierung zu starten.</translation> <translation id="3320021301628644560">Rechnungsadresse hinzufügen</translation> -<translation id="3329013043687509092">Sättigung</translation> <translation id="333371639341676808">Diese Seite am Erstellen zusätzlicher Dialoge hindern</translation> <translation id="3338095232262050444">Sicher</translation> <translation id="3340978935015468852">Einstellungen</translation> @@ -412,7 +408,6 @@ <translation id="4103249731201008433">Seriennummer des Geräts ist ungültig.</translation> <translation id="410351446219883937">Autoplay</translation> <translation id="4103763322291513355">Unter <strong>chrome://policy</strong> finden Sie eine Liste der blockierten URLs und andere Richtlinien, die durch Ihren Systemadministrator erzwungen werden.</translation> -<translation id="4115378294792113321">Magenta</translation> <translation id="4116663294526079822">Auf dieser Website immer zulassen</translation> <translation id="4117700440116928470">Richtlinienbereich wird nicht unterstützt.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 weiterer}other{# weitere}}</translation> @@ -601,7 +596,7 @@ <translation id="5631439013527180824">Ungültiges Management-Token für das Gerät</translation> <translation id="5633066919399395251">Zurzeit auf <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> befindliche Hacker könnten versuchen, gefährliche Programme auf Ihrem Computer zu installieren, um Daten wie Fotos, Passwörter, Nachrichten und Kreditkartendaten zu stehlen oder zu löschen. <ph name="BEGIN_LEARN_MORE_LINK" />Weitere Informationen<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="563324245173044180">Betrügerische Inhalte blockiert.</translation> -<translation id="5646376287012673985">Speicherort</translation> +<translation id="5646376287012673985">Standort</translation> <translation id="5659593005791499971">E-Mail-Adresse</translation> <translation id="5669703222995421982">Personalisierte Inhalte erhalten</translation> <translation id="5675650730144413517">Diese Seite funktioniert nicht</translation> @@ -623,7 +618,6 @@ <translation id="5869522115854928033">Gespeicherte Passwörter</translation> <translation id="5872918882028971132">Vorschläge für Eltern</translation> <translation id="5893752035575986141">Kreditkarten werden akzeptiert.</translation> -<translation id="5901630391730855834">Gelb</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (synchronisiert)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 wird verwendet}other{# werden verwendet}}</translation> <translation id="5959728338436674663"><ph name="BEGIN_WHITEPAPER_LINK" />Ich möchte automatisch einige Systeminformationen und Seiteninhalte an Google senden<ph name="END_WHITEPAPER_LINK" />, um bei der Erfassung schädlicher Apps und Websites zu helfen. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -634,12 +628,10 @@ <translation id="5990559369517809815">Anfragen an den Server wurden durch eine Erweiterung blockiert.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Seite 1}other{Seite #}}</translation> -<translation id="6017514345406065928">Grün</translation> <translation id="6017850046339264347">Angreifer auf der Website <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> könnten betrügerische Apps installieren, die scheinbar einem anderen Zweck dienen oder Daten sammeln, um Sie auszuspionieren. <ph name="BEGIN_LEARN_MORE_LINK" />Weitere Informationen<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (synchronisiert)</translation> <translation id="6027201098523975773">Geben Sie einen Namen ein</translation> <translation id="6040143037577758943">Schließen</translation> -<translation id="6042308850641462728">Mehr</translation> <translation id="6047233362582046994">Wenn Sie die Sicherheitsrisiken kennen, können Sie <ph name="BEGIN_LINK" />diese Website aufrufen<ph name="END_LINK" />, bevor die schädlichen Apps entfernt wurden.</translation> <translation id="6047927260846328439">Mit diesen Inhalten wird möglicherweise versucht, Sie zu täuschen und so zur Installation von Software oder der Offenlegung personenbezogener Daten zu bringen. <ph name="BEGIN_LINK" />Trotzdem anzeigen<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Sie können <ph name="SITE" /> zurzeit nicht aufrufen, weil die Website das Zertifikats-Pinning nutzt. Netzwerkfehler und Angriffe sind in der Regel nur vorübergehend, sodass die Seite wahrscheinlich später wieder funktioniert.</translation> @@ -716,7 +708,6 @@ <translation id="6710213216561001401">Zurück</translation> <translation id="6710594484020273272"><Suchbegriff eingeben></translation> <translation id="6711464428925977395">Mit dem Proxyserver ist ein Problem aufgetreten oder die Adresse ist falsch.</translation> -<translation id="6727102863431372879">Festlegen</translation> <translation id="674375294223700098">Fehler wegen unbekanntem Serverzertifikat</translation> <translation id="6753269504797312559">Wert der Richtlinie</translation> <translation id="6757797048963528358">Ihr Gerät ist im Ruhemodus.</translation> @@ -800,7 +791,6 @@ <translation id="7518003948725431193">Für folgende Webadresse wurde keine Webseite gefunden: <ph name="URL" />.</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">Die Verbindung zu dieser Website ist nicht sicher</translation> -<translation id="7535087603100972091">Wert</translation> <translation id="7537536606612762813">Verbindlich</translation> <translation id="7542403920425041731">Nach erfolgter Bestätigung werden die Kartendetails an diese Website weitergegeben.</translation> <translation id="7542995811387359312">Die Funktion zur automatischen Ausfüllung der Kreditkartendaten ist deaktiviert, da dieses Formular keine sichere Verbindung nutzt.</translation> @@ -811,7 +801,6 @@ <translation id="7567204685887185387">Dieser Server konnte nicht beweisen, dass er <ph name="DOMAIN" /> ist. Sein Sicherheitszertifikat wurde möglicherweise in betrügerischer Absicht ausgegeben. Mögliche Gründe sind eine fehlerhafte Konfiguration oder ein Angreifer, der Ihre Verbindung abfängt.</translation> <translation id="7568593326407688803">Diese Seite ist auf<ph name="ORIGINAL_LANGUAGE" />Soll sie übersetzt werden?</translation> <translation id="7569952961197462199">Kreditkarte aus Chrome entfernen?</translation> -<translation id="7569983096843329377">Schwarz</translation> <translation id="7578104083680115302">Mit Karten, die Sie bei Google gespeichert haben, können Sie schnell und geräteübergreifend auf Websites und in Apps bezahlen.</translation> <translation id="7588950540487816470">Physical Web</translation> <translation id="7592362899630581445">Das Serverzertifikat verstößt gegen Namensbeschränkungen.</translation> @@ -863,7 +852,6 @@ <translation id="79338296614623784">Geben Sie eine gültige Telefonnummer ein</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">Serverzertifikat ist noch nicht gültig.</translation> -<translation id="7942349550061667556">Rot</translation> <translation id="7947285636476623132">Prüfen Sie Ihr Ablaufjahr und versuchen Sie es dann erneut</translation> <translation id="7951415247503192394">(32-Bit)</translation> <translation id="7956713633345437162">Mobile Lesezeichen</translation> @@ -957,7 +945,6 @@ <translation id="8870413625673593573">Kürzlich geschlossen</translation> <translation id="8874824191258364635">Geben Sie eine gültige Kartennummer ein</translation> <translation id="8876793034577346603">Fehler beim Parsen der Netzwerkkonfiguration</translation> -<translation id="8889402386540077796">Farbton</translation> <translation id="8891727572606052622">Ungültiger Proxy-Modus</translation> <translation id="889901481107108152">Leider steht dieses Experiment auf Ihrer Plattform nicht zur Verfügung.</translation> <translation id="8903921497873541725">Vergrößern</translation> @@ -966,7 +953,6 @@ <translation id="8938939909778640821">Akzeptierte Kredit- und Prepaidkarten</translation> <translation id="8957210676456822347">Erfassungsportal-Autorisierung</translation> <translation id="8971063699422889582">Das Serverzertifikat ist abgelaufen.</translation> -<translation id="8986494364107987395">Nutzungsstatistiken und Absturzberichte automatisch an Google senden</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">Die Website, die Sie aufrufen möchten, enthält schädliche Programme.</translation> <translation id="8997023839087525404">Der Server präsentierte ein Zertifikat, das nicht gemäß der Richtlinie zur Zertifikatstransparenz öffentlich offengelegt wurde. Dies ist für einige Zertifikate jedoch eine Voraussetzung, mit der sichergestellt wird, dass sie vertrauenswürdig sind und vor Angriffen schützen.</translation> @@ -982,7 +968,6 @@ <translation id="9049981332609050619">Sie haben versucht, auf <ph name="DOMAIN" /> zuzugreifen, der Server hat sich jedoch mit einem ungültigen Zertifikat ausgewiesen.</translation> <translation id="9050666287014529139">Passphrase</translation> <translation id="9065203028668620118">Bearbeiten</translation> -<translation id="9068849894565669697">Farbe auswählen</translation> <translation id="9069693763241529744">Von einer Erweiterung blockiert</translation> <translation id="9076283476770535406">Eventuell enthält sie nicht jugendfreie Inhalte</translation> <translation id="9078964945751709336">Weitere Informationen erforderlich</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb index 546e2e94..fadbd369 100644 --- a/components/strings/components_strings_el.xtb +++ b/components/strings/components_strings_el.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Αναμονή για σύνδεση…</translation> <translation id="153384715582417236">Αυτά προς το παρόν</translation> <translation id="1549470594296187301">Θα πρέπει να ενεργοποιηθεί η JavaScript για τη χρήση αυτής της λειτουργίας.</translation> -<translation id="1555130319947370107">Μπλε</translation> <translation id="1559528461873125649">Δεν υπάρχει τέτοιο αρχείο ή κατάλογος</translation> <translation id="1583429793053364125">Παρουσιάστηκε πρόβλημα κατά την εμφάνιση αυτής της ιστοσελίδας.</translation> <translation id="1592005682883173041">Πρόσβαση σε τοπικά δεδομένα</translation> <translation id="1594030484168838125">Επιλογή</translation> -<translation id="161042844686301425">Κυανό</translation> <translation id="1620510694547887537">Κάμερα</translation> <translation id="1629803312968146339">Θέλετε το Chrome να αποθηκεύσει αυτήν την κάρτα;</translation> <translation id="1639239467298939599">Γίνεται φόρτωση</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Αυτόματη συμπλήρωση</translation> <translation id="2710942282213947212">Κάποιο λογισμικό στον υπολογιστή σας παρεμποδίζει την ασφαλή σύνδεση του Chromium στον ιστό</translation> <translation id="2712173769900027643">Να ζητηθεί άδεια</translation> -<translation id="2713444072780614174">Λευκό</translation> <translation id="2720342946869265578">Σε κοντινή απόσταση</translation> <translation id="2721148159707890343">Το αίτημα ήταν επιτυχές</translation> <translation id="2728127805433021124">Το πιστοποιητικό του διακομιστή είναι υπογεγραμμένο με έναν αδύναμο αλγόριθμο υπογραφής.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">Δεν βρέθηκαν αποτελέσματα αναζήτησης</translation> <translation id="3305707030755673451">Τα δεδομένα σας κρυπτογραφήθηκαν με τη δική σας φράση πρόσβασης συγχρονισμού στις <ph name="TIME" />. Πληκτρολογήστε την για να ξεκινήσει ο συγχρονισμός.</translation> <translation id="3320021301628644560">Προσθήκη διεύθυνσης χρέωσης</translation> -<translation id="3329013043687509092">Κορεσμός</translation> <translation id="333371639341676808">Αποτροπή δημιουργίας πρόσθετων πλαισίων διαλόγου από αυτή τη σελίδα.</translation> <translation id="3338095232262050444">Ασφαλές</translation> <translation id="3340978935015468852">ρυθμίσεις</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">Ο σειριακός αριθμός της συσκευής δεν είναι έγκυρος</translation> <translation id="410351446219883937">Αυτόματη αναπαραγωγή</translation> <translation id="4103763322291513355">Επισκεφτείτε την <strong>chrome://policy</strong> για να δείτε τη λίστα των ανεπιθύμητων διευθύνσεων URL και άλλες πολιτικές που έχουν τεθεί σε εφαρμογή από το διαχειριστή του συστήματός σας.</translation> -<translation id="4115378294792113321">Ματζέντα</translation> <translation id="4116663294526079822">Να επιτρέπεται πάντα σε αυτόν τον ιστότοπο</translation> <translation id="4117700440116928470">Το εύρος της πολιτικής δεν υποστηρίζεται.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 ακόμα}other{# ακόμα}}</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">Αποθηκευμένοι κωδικοί πρόσβασης</translation> <translation id="5872918882028971132">Γονικές προτάσεις</translation> <translation id="5893752035575986141">Οι πιστωτικές κάρτες γίνονται δεκτές.</translation> -<translation id="5901630391730855834">Κίτρινο</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (συγχρονισμένο)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 σε χρήση}other{# σε χρήση}}</translation> <translation id="5959728338436674663">Αυτόματη αποστολή ορισμένων <ph name="BEGIN_WHITEPAPER_LINK" />πληροφοριών συστήματος και περιεχομένου σελίδων<ph name="END_WHITEPAPER_LINK" /> στην Google για διευκόλυνση του εντοπισμού επικίνδυνων εφαρμογών και ιστοτόπων<ph name="PRIVACY_PAGE_LINK" /></translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">Τα αιτήματα για τον διακομιστή έχουν αποκλειστεί από μια επέκταση.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{1 σελίδα}other{# σελίδες}}</translation> -<translation id="6017514345406065928">Πράσινο</translation> <translation id="6017850046339264347">Οι εισβολείς στον ιστότοπο <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> θα μπορούσαν να εγκαταστήσουν παραπλανητικές εφαρμογές που προσποιούνται ότι είναι κάτι άλλο ή συλλέγουν δεδομένα τα οποία μπορεί να χρησιμοποιηθούν για την παρακολούθησή σας. <ph name="BEGIN_LEARN_MORE_LINK" />Μάθετε περισσότερα<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (συγχρονισμένο)</translation> <translation id="6027201098523975773">Εισαγωγή ονόματος</translation> <translation id="6040143037577758943">Κλείσιμο</translation> -<translation id="6042308850641462728">Περισσότερα</translation> <translation id="6047233362582046994">Εάν κατανοείτε τους κινδύνους για την ασφάλειά σας, μπορείτε να <ph name="BEGIN_LINK" />επισκεφτείτε αυτόν τον ιστότοπο<ph name="END_LINK" /> πριν από την κατάργηση των επιβλαβών εφαρμογών.</translation> <translation id="6047927260846328439">Αυτό το περιεχόμενο μπορεί να προσπαθήσει να σας εξαπατήσει έτσι ώστε να εγκαταστήσετε λογισμικό ή να αποκαλύψετε προσωπικά στοιχεία. <ph name="BEGIN_LINK" />Εμφάνιση ούτως ή άλλως<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Δεν μπορείτε να επισκεφτείτε το <ph name="SITE" /> αυτήν τη στιγμή επειδή ο ιστότοπος χρησιμοποιεί certificate pinning (κλείδωμα πιστοποιητικών). Τα σφάλματα δικτύου και οι επιθέσεις είναι συνήθως προσωρινά, συνεπώς αυτή η σελίδα πιθανότατα θα λειτουργήσει αργότερα.</translation> @@ -717,7 +709,6 @@ <translation id="6710213216561001401">Προηγούμενο</translation> <translation id="6710594484020273272"><Πληκτρολογήστε όρο αναζήτησης></translation> <translation id="6711464428925977395">Υπάρχει κάποιο πρόβλημα με το διακομιστή μεσολάβησης ή η διεύθυνση είναι εσφαλμένη.</translation> -<translation id="6727102863431372879">Ορισμός</translation> <translation id="674375294223700098">Άγνωστο σφάλμα πιστοποιητικού διακομιστή</translation> <translation id="6753269504797312559">Τιμή πολιτικής</translation> <translation id="6757797048963528358">Η συσκευή σας τέθηκε σε αδράνεια.</translation> @@ -801,7 +792,6 @@ <translation id="7518003948725431193">Δεν βρέθηκε καμία ιστοσελίδα για τη διεύθυνση ιστού:<ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">Η σύνδεσή σας σε αυτόν τον ιστότοπο δεν είναι ιδιωτική</translation> -<translation id="7535087603100972091">Τιμή</translation> <translation id="7537536606612762813">Υποχρεωτική</translation> <translation id="7542403920425041731">Μετά την επιβεβαίωση, τα στοιχεία της κάρτας θα κοινοποιηθούν σε αυτόν τον ιστότοπο.</translation> <translation id="7542995811387359312">Η αυτόματη συμπλήρωση πιστωτικής κάρτας έχει απενεργοποιηθεί, επειδή αυτή η φόρμα δεν χρησιμοποιεί ασφαλή σύνδεση.</translation> @@ -812,7 +802,6 @@ <translation id="7567204685887185387">Ο διακομιστής δεν μπόρεσε να αποδείξει ότι είναι <ph name="DOMAIN" />. Το πιστοποιητικό ασφαλείας του μπορεί να εκδόθηκε παράνομα. Αυτό μπορεί να οφείλεται σε λανθασμένη ρύθμιση ή σε κάποιον τρίτο που επιτίθεται στη σύνδεσή σας.</translation> <translation id="7568593326407688803">Αυτή η σελίδα είναι στα<ph name="ORIGINAL_LANGUAGE" />Θέλετε να τη μεταφράσετε;</translation> <translation id="7569952961197462199">Κατάργηση πιστωτικής κάρτας από το Chrome;</translation> -<translation id="7569983096843329377">Μαύρο</translation> <translation id="7578104083680115302">Κάντε γρήγορες πληρωμές σε ιστότοπους και εφαρμογές σε διαφορετικές συσκευές χρησιμοποιώντας κάρτες που έχετε αποθηκεύσει στο Google.</translation> <translation id="7588950540487816470">Φυσικό δίκτυο</translation> <translation id="7592362899630581445">Το πιστοποιητικό του διακομιστή παραβαίνει τους περιορισμούς ονόματος.</translation> @@ -864,7 +853,6 @@ <translation id="79338296614623784">Εισαγάγετε έναν έγκυρο αριθμό τηλεφώνου</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">Το πιστοποιητικό του διακομιστή δεν είναι ακόμα έγκυρο.</translation> -<translation id="7942349550061667556">Κόκκινο</translation> <translation id="7947285636476623132">Ελέγξτε το έτος λήξης σας και δοκιμάστε ξανά</translation> <translation id="7951415247503192394">(32-bit)</translation> <translation id="7956713633345437162">Σελιδοδείκτες κινητής συσκευής</translation> @@ -958,7 +946,6 @@ <translation id="8870413625673593573">Έκλεισαν πρόσφατα</translation> <translation id="8874824191258364635">Εισαγάγετε έναν έγκυρο αριθμό κάρτας</translation> <translation id="8876793034577346603">Αποτυχία ανάλυσης της διαμόρφωσης δικτύου</translation> -<translation id="8889402386540077796">Απόχρωση</translation> <translation id="8891727572606052622">Μη έγκυρη λειτουργία διακομιστή μεσολάβησης.</translation> <translation id="889901481107108152">Λυπούμαστε, αυτό το πείραμα δεν είναι διαθέσιμο στην πλατφόρμα σας.</translation> <translation id="8903921497873541725">Μεγέθυνση</translation> @@ -967,7 +954,6 @@ <translation id="8938939909778640821">Αποδεκτές πιστωτικές και προπληρωμένες κάρτες</translation> <translation id="8957210676456822347">Εξουσιοδότηση πύλης υποδοχής</translation> <translation id="8971063699422889582">Το πιστοποιητικό του διακομιστή έχει λήξει.</translation> -<translation id="8986494364107987395">Αυτόματη αποστολή στατιστικών στοιχείων χρήσης και αναφορών σφαλμάτων στην Google</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">Ο ιστότοπος που πρόκειται να επισκεφτείτε περιέχει κακόβουλα προγράμματα</translation> <translation id="8997023839087525404">Ο διακομιστής παρουσίασε ένα πιστοποιητικό το οποίο δεν αποκαλύφθηκε δημοσίως με χρήση της πολιτικής Διαφάνειας πιστοποιητικών. Αυτό απαιτείται για ορισμένα πιστοποιητικά, προκειμένου να διασφαλιστεί ότι είναι αξιόπιστα και παρέχουν προστασία ενάντια σε εισβολείς.</translation> @@ -983,7 +969,6 @@ <translation id="9049981332609050619">Επιχειρήσατε να μεταβείτε στον <ph name="DOMAIN" /> , αλλά ο διακομιστής παρουσίασε ένα μη έγκυρο πιστοποιητικό.</translation> <translation id="9050666287014529139">Φράση πρόσβασής σας</translation> <translation id="9065203028668620118">Επεξεργασία</translation> -<translation id="9068849894565669697">Επιλογή χρώματος</translation> <translation id="9069693763241529744">Αποκλείστηκε από μια επέκταση</translation> <translation id="9076283476770535406">Μπορεί να διαθέτει περιεχόμενο για ενηλίκους</translation> <translation id="9078964945751709336">Απαιτούνται περισσότερες πληροφορίες</translation>
diff --git a/components/strings/components_strings_en-GB.xtb b/components/strings/components_strings_en-GB.xtb index 4ab98fc..3ab5d9a 100644 --- a/components/strings/components_strings_en-GB.xtb +++ b/components/strings/components_strings_en-GB.xtb
@@ -13,6 +13,12 @@ <translation id="106701514854093668">Desktop Bookmarks</translation> <translation id="1074497978438210769">Not secure</translation> <translation id="1080116354587839789">Fit to width</translation> +<translation id="1088860948719068836">Add Name on Card</translation> +<translation id="1092563096751750415">'<ph name="SOFTWARE_NAME" />' wasn’t installed properly on your computer or the network: + <ul> + <li>Try uninstalling '<ph name="SOFTWARE_NAME" />'</li> + <li>Try connecting to another Wi-Fi network</li> + </ul></translation> <translation id="1103523840287552314">Always translate <ph name="LANGUAGE" /></translation> <translation id="1107591249535594099">If ticked, Chrome will store a copy of your card on this device for faster form filling.</translation> <translation id="1111153019813902504">Recent bookmarks</translation> @@ -43,6 +49,7 @@ <translation id="1253921432148366685"><ph name="TYPE_1" />, <ph name="TYPE_2" /> (synced)</translation> <translation id="1263231323834454256">Reading list</translation> <translation id="1264126396475825575">Crash report captured on <ph name="CRASH_TIME" /> (not yet uploaded or ignored)</translation> +<translation id="1270502636509132238">Pickup Method</translation> <translation id="1281526147609854549">Issued by <ph name="ISSUER" /></translation> <translation id="1285320974508926690">Never translate this site</translation> <translation id="129553762522093515">Recently closed</translation> @@ -73,12 +80,10 @@ <translation id="1527263332363067270">Waiting for connection…</translation> <translation id="153384715582417236">That’s all for now</translation> <translation id="1549470594296187301">JavaScript must be enabled to use this feature.</translation> -<translation id="1555130319947370107">Blue</translation> <translation id="1559528461873125649">No such file or directory</translation> <translation id="1583429793053364125">Something went wrong while displaying this web page.</translation> <translation id="1592005682883173041">Local Data Access</translation> <translation id="1594030484168838125">Choose</translation> -<translation id="161042844686301425">Cyan</translation> <translation id="1620510694547887537">Camera</translation> <translation id="1629803312968146339">Do you want Chrome to save this card?</translation> <translation id="1639239467298939599">Loading</translation> @@ -96,6 +101,7 @@ <translation id="1710259589646384581">OS</translation> <translation id="1721312023322545264">You need permission from <ph name="NAME" /> to visit this site</translation> <translation id="1721424275792716183">* Field is required</translation> +<translation id="1727741090716970331">Add Valid Card Number</translation> <translation id="1728677426644403582">You're viewing the source of a web page</translation> <translation id="173080396488393970">This type of card isn’t supported</translation> <translation id="1734864079702812349">Amex</translation> @@ -147,7 +153,9 @@ <translation id="2114841414352855701">Ignored because it was overridden by <ph name="POLICY_NAME" />.</translation> <translation id="2138201775715568214">Looking for nearby Physical Web pages</translation> <translation id="213826338245044447">Mobile Bookmarks</translation> +<translation id="214556005048008348">Cancel payment</translation> <translation id="2147827593068025794">Background Sync</translation> +<translation id="2148613324460538318">Add Card</translation> <translation id="2154054054215849342">Sync is not available for your domain</translation> <translation id="2154484045852737596">Edit card</translation> <translation id="2166049586286450108">Full Admin Access</translation> @@ -196,6 +204,8 @@ <translation id="2501278716633472235">Go back</translation> <translation id="2503184589641749290">Accepted debit and prepaid cards</translation> <translation id="2515629240566999685">Checking the signal in your area</translation> +<translation id="2524461107774643265">Add More Information</translation> +<translation id="2536110899380797252">Add Address</translation> <translation id="2539524384386349900">Detect</translation> <translation id="255002559098805027"><ph name="HOST_NAME" /> sent an invalid response.</translation> <translation id="2556876185419854533">&Undo Edit</translation> @@ -220,11 +230,11 @@ <translation id="2709516037105925701">Auto-fill</translation> <translation id="2710942282213947212">Software on your computer is stopping Chromium from safely connecting to the web</translation> <translation id="2712173769900027643">Ask permission</translation> -<translation id="2713444072780614174">White</translation> <translation id="2720342946869265578">Nearby</translation> <translation id="2721148159707890343">Request succeeded</translation> <translation id="2728127805433021124">Server's certificate is signed using a weak signature algorithm.</translation> <translation id="2730326759066348565"><ph name="BEGIN_LINK" />Running Connectivity Diagnostics<ph name="END_LINK" /></translation> +<translation id="2734765935192287616">'<ph name="SOFTWARE_NAME" />' wasn’t installed properly on your computer or network. Ask your administrator to resolve this issue.</translation> <translation id="2740531572673183784">OK</translation> <translation id="2742870351467570537">Remove selected items</translation> <translation id="277133753123645258">Delivery method</translation> @@ -241,8 +251,10 @@ <translation id="2856444702002559011">Attackers might be trying to steal your information from <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> (for example, passwords, messages or credit cards). <ph name="BEGIN_LEARN_MORE_LINK" />Learn more<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="2889159643044928134">Don't reload</translation> <translation id="2909946352844186028">A network change was detected.</translation> +<translation id="2910057247648935477">'<ph name="SOFTWARE_NAME" />' isn’t configured correctly. Uninstalling '<ph name="SOFTWARE_NAME" />' usually fixes the problem. Applications that can cause this error includes antivirus, firewall and web-filtering or proxy software.</translation> <translation id="2916038427272391327">Close other programmes</translation> <translation id="2922350208395188000">Server's certificate cannot be checked.</translation> +<translation id="2925673989565098301">Delivery Method</translation> <translation id="2928905813689894207">Billing Address</translation> <translation id="2929525460561903222">{SHIPPING_ADDRESS,plural, =0{<ph name="SHIPPING_ADDRESS_PREVIEW" />}=1{<ph name="SHIPPING_ADDRESS_PREVIEW" /> and <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> more}other{<ph name="SHIPPING_ADDRESS_PREVIEW" /> and <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> more}}</translation> <translation id="2941952326391522266">This server could not prove that it is <ph name="DOMAIN" />; its security certificate is from <ph name="DOMAIN2" />. This may be caused by a misconfiguration or an attacker intercepting your connection.</translation> @@ -265,6 +277,7 @@ <translation id="3024663005179499861">Wrong policy type</translation> <translation id="3032412215588512954">Do you want to reload this site?</translation> <translation id="3037605927509011580">Aw, Snap!</translation> +<translation id="3039538478787849737">Save card to Google?</translation> <translation id="3041612393474885105">Certificate Information</translation> <translation id="3063697135517575841">Chrome was unable to confirm your card at this time. Please try again later.</translation> <translation id="3064966200440839136">Leaving incognito mode to pay via an external application. Continue?</translation> @@ -288,6 +301,7 @@ <ph name="PLATFORM_TEXT" /></translation> <translation id="320323717674993345">Cancel payment</translation> <translation id="3207960819495026254">Bookmarked</translation> +<translation id="3211223744486044430">To pay faster next time, save this card to your Google Account and to this device.</translation> <translation id="3225919329040284222">The server presented a certificate that doesn't match built-in expectations. These expectations are included for certain, high-security websites in order to protect you.</translation> <translation id="3226128629678568754">Press the reload button to resubmit the data needed to load the page.</translation> <translation id="3227137524299004712">Microphone</translation> @@ -302,7 +316,6 @@ <translation id="3303855915957856445">No search results found</translation> <translation id="3305707030755673451">Your data was encrypted with your sync passphrase on <ph name="TIME" />. Enter it to start sync.</translation> <translation id="3320021301628644560">Add billing address</translation> -<translation id="3329013043687509092">Saturation</translation> <translation id="333371639341676808">Prevent this page from creating additional dialogues.</translation> <translation id="3338095232262050444">Secure</translation> <translation id="3340978935015468852">settings</translation> @@ -321,6 +334,7 @@ <translation id="3380864720620200369">Client ID:</translation> <translation id="3391030046425686457">Delivery address</translation> <translation id="3395827396354264108">Pickup method</translation> +<translation id="3399952811970034796">Delivery Address</translation> <translation id="3422248202833853650">Try exiting other programmes to free up memory.</translation> <translation id="3422472998109090673"><ph name="HOST_NAME" /> is currently unreachable.</translation> <translation id="3427092606871434483">Allow (default)</translation> @@ -406,6 +420,7 @@ <translation id="4030383055268325496">&Undo add</translation> <translation id="404928562651467259">WARNING</translation> <translation id="4058922952496707368">Key "<ph name="SUBKEY" />": <ph name="ERROR" /></translation> +<translation id="4067947977115446013">Add Valid Address</translation> <translation id="4072486802667267160">There was an error processing your order. Please try again.</translation> <translation id="4075732493274867456">The client and server don't support a common SSL protocol version or cipher suite.</translation> <translation id="4079302484614802869">Proxy configuration is set to use a .pac script URL, not fixed proxy servers.</translation> @@ -413,7 +428,6 @@ <translation id="4103249731201008433">Device serial number is invalid</translation> <translation id="410351446219883937">Autoplay</translation> <translation id="4103763322291513355">Visit <strong>chrome://policy</strong> to see the list of blacklisted URLs and other policies enforced by your system administrator.</translation> -<translation id="4115378294792113321">Magenta</translation> <translation id="4116663294526079822">Always allow on this site</translation> <translation id="4117700440116928470">Policy scope is not supported.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 other}other{# others}}</translation> @@ -451,6 +465,7 @@ <translation id="4377125064752653719">You attempted to reach <ph name="DOMAIN" />, but the certificate that the server presented has been revoked by its issuer. This means that the security credentials the server presented absolutely should not be trusted. You may be communicating with an attacker.</translation> <translation id="4394049700291259645">Disable</translation> <translation id="4406896451731180161">search results</translation> +<translation id="4415426530740016218">Pickup Address</translation> <translation id="4424024547088906515">This server could not prove that it is <ph name="DOMAIN" />; its security certificate is not trusted by Chrome. This may be caused by a misconfiguration or an attacker intercepting your connection.</translation> <translation id="4432688616882109544"><ph name="HOST_NAME" /> didn’t accept your login certificate, or one may not have been provided.</translation> <translation id="443673843213245140">Use of a proxy is disabled but an explicit proxy configuration is specified.</translation> @@ -579,11 +594,13 @@ <translation id="5492298309214877701">This site on the company, organisation or school intranet has the same URL as an external website. <ph name="LINE_BREAK" /> Try contacting your system administrator.</translation> +<translation id="5499929369096410817">Enter the security code for <ph name="CREDIT_CARD" />. This code won't be saved.</translation> <translation id="5509780412636533143">Managed bookmarks</translation> <translation id="5510766032865166053">It may have been moved or deleted.</translation> <translation id="5523118979700054094">Policy name</translation> <translation id="552553974213252141">Was the text extracted correctly?</translation> <translation id="5540224163453853">Could not find the requested article.</translation> +<translation id="5541546772353173584">Add Email</translation> <translation id="5544037170328430102">An embedded page at <ph name="SITE" /> says:</translation> <translation id="5556459405103347317">Reload</translation> <translation id="5560088892362098740">Expiry Date</translation> @@ -620,27 +637,27 @@ <translation id="5810442152076338065">Your connection to <ph name="DOMAIN" /> is encrypted using an obsolete cipher suite.</translation> <translation id="5813119285467412249">&Redo Add</translation> <translation id="5838278095973806738">You should not enter any sensitive information on this site (for example, passwords or credit cards), because it could be stolen by attackers.</translation> +<translation id="5866257070973731571">Add Phone Number</translation> <translation id="5869405914158311789">This site can’t be reached</translation> <translation id="5869522115854928033">Saved passwords</translation> <translation id="5872918882028971132">Parent Suggestions</translation> <translation id="5893752035575986141">Credit cards are accepted.</translation> -<translation id="5901630391730855834">Yellow</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (synced)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 in use}other{# in use}}</translation> <translation id="5959728338436674663">Automatically send some <ph name="BEGIN_WHITEPAPER_LINK" />system information and page content<ph name="END_WHITEPAPER_LINK" /> to Google to help detect dangerous apps and sites. <ph name="PRIVACY_PAGE_LINK" /></translation> +<translation id="5967592137238574583">Edit Contact Info</translation> <translation id="5967867314010545767">Remove from history</translation> <translation id="5975083100439434680">Zoom out</translation> +<translation id="597552863672748783">Confirm security code</translation> <translation id="598637245381783098">Can’t open payment app</translation> <translation id="5989320800837274978">Neither fixed proxy servers nor a .pac script URL are specified.</translation> <translation id="5990559369517809815">Requests to the server have been blocked by an extension.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Page 1}other{Page #}}</translation> -<translation id="6017514345406065928">Green</translation> <translation id="6017850046339264347">Attackers on <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> could install deceptive apps that pretend to be something else or collect data that may be used to track you. <ph name="BEGIN_LEARN_MORE_LINK" />Learn more<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (synced)</translation> <translation id="6027201098523975773">Enter a name</translation> <translation id="6040143037577758943">Close</translation> -<translation id="6042308850641462728">More</translation> <translation id="6047233362582046994">If you understand the risks to your security, you may <ph name="BEGIN_LINK" />visit this site<ph name="END_LINK" /> before the harmful apps have been removed.</translation> <translation id="6047927260846328439">This content might try to trick you into installing software or revealing personal information. <ph name="BEGIN_LINK" />Show anyway<ph name="END_LINK" /></translation> <translation id="6051221802930200923">You cannot visit <ph name="SITE" /> right now because the website uses certificate pinning. Network errors and attacks are usually temporary, so this page will probably work later.</translation> @@ -707,6 +724,7 @@ <translation id="6569060085658103619">You're viewing an extension page</translation> <translation id="6596325263575161958">Encryption options</translation> <translation id="662080504995468778">Stay</translation> +<translation id="6624427990725312378">Contact Info</translation> <translation id="6626291197371920147">Add valid card number</translation> <translation id="6628463337424475685"><ph name="ENGINE" /> Search</translation> <translation id="6630809736994426279">Attackers currently on <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> might attempt to install dangerous programs on your Mac that steal or delete your information (for example, photos, passwords, messages and credit cards). <ph name="BEGIN_LEARN_MORE_LINK" />Learn more<ph name="END_LEARN_MORE_LINK" /></translation> @@ -717,7 +735,6 @@ <translation id="6710213216561001401">Previous</translation> <translation id="6710594484020273272"><Type search term></translation> <translation id="6711464428925977395">There is something wrong with the proxy server or the address is incorrect.</translation> -<translation id="6727102863431372879">Set</translation> <translation id="674375294223700098">Unknown server certificate error.</translation> <translation id="6753269504797312559">Policy Value</translation> <translation id="6757797048963528358">Your device went to sleep.</translation> @@ -786,6 +803,7 @@ <translation id="7400418766976504921">URL</translation> <translation id="7419106976560586862">Profile Path</translation> <translation id="7424977062513257142">An embedded page on this webpage says:</translation> +<translation id="7437289804838430631">Add contact info</translation> <translation id="7441627299479586546">Wrong policy subject</translation> <translation id="7444046173054089907">This site is blocked</translation> <translation id="7445762425076701745">The identity of the server to which you are connected cannot be fully validated. You are connected to a server using a name valid only within your network, and an external certificate authority has no way to validate ownership. As some certificate authorities will issue certificates for these names regardless, there is no way to ensure that you are connected to the intended website and not to an attacker.</translation> @@ -801,7 +819,6 @@ <translation id="7518003948725431193">No web page was found for the web address: <ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">Your connection to this site is not private</translation> -<translation id="7535087603100972091">Value</translation> <translation id="7537536606612762813">Mandatory</translation> <translation id="7542403920425041731">Once you confirm, your card details will be shared with this site.</translation> <translation id="7542995811387359312">Automatic credit card filling is disabled because this form does not use a secure connection.</translation> @@ -812,7 +829,6 @@ <translation id="7567204685887185387">This server could not prove that it is <ph name="DOMAIN" />; its security certificate might have been issued fraudulently. This may be caused by a misconfiguration or an attacker intercepting your connection.</translation> <translation id="7568593326407688803">This page is in<ph name="ORIGINAL_LANGUAGE" />Would you like to translate it?</translation> <translation id="7569952961197462199">Remove credit card from Chrome?</translation> -<translation id="7569983096843329377">Black</translation> <translation id="7578104083680115302">Pay quickly on sites and apps across devices using cards that you have saved with Google.</translation> <translation id="7588950540487816470">Physical Web</translation> <translation id="7592362899630581445">Server's certificate violates name constraints.</translation> @@ -834,9 +850,11 @@ <translation id="7699293099605015246">Articles aren't available at the moment.</translation> <translation id="7701040980221191251">None</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" />Proceed to <ph name="SITE" /> (unsafe)<ph name="END_LINK" /></translation> +<translation id="7708490115678445973">A root certificate for '<ph name="SOFTWARE_NAME" />' is required but isn’t installed. Your network administrator should look at configuration instructions for '<ph name="SOFTWARE_NAME" />' to fix this problem. Applications that can cause this error includes antivirus, firewall and web-filtering or proxy software.</translation> <translation id="7714464543167945231">Certificate</translation> <translation id="7716147886133743102">Blocked by your administrator</translation> <translation id="7716424297397655342">This site can’t be loaded from the cache</translation> +<translation id="7723047071702270851">Edit Card</translation> <translation id="774634243536837715">Dangerous content blocked.</translation> <translation id="7752995774971033316">Unmanaged</translation> <translation id="7755287808199759310">Your parent can unblock it for you</translation> @@ -847,6 +865,7 @@ <translation id="7764225426217299476">Add address</translation> <translation id="777702478322588152">Prefecture</translation> <translation id="7791543448312431591">Add</translation> +<translation id="7793553086574152071">To pay faster next time, save this card to your Google Account.</translation> <translation id="7793809570500803535">The web page at <ph name="SITE" /> might be temporarily down or it may have been moved permanently to a new web address.</translation> <translation id="7800304661137206267">The connection is encrypted using <ph name="CIPHER" />, with <ph name="MAC" /> for message authentication and <ph name="KX" /> as the key exchange mechanism.</translation> <translation id="7802523362929240268">Site is legitimate</translation> @@ -864,7 +883,6 @@ <translation id="79338296614623784">Enter a valid phone number</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">Server's certificate is not yet valid.</translation> -<translation id="7942349550061667556">Red</translation> <translation id="7947285636476623132">Check your expiry year and try again</translation> <translation id="7951415247503192394">(32-bit)</translation> <translation id="7956713633345437162">Mobile bookmarks</translation> @@ -881,6 +899,7 @@ <translation id="8088680233425245692">Failed to view article.</translation> <translation id="8091372947890762290">Activation is pending on the server</translation> <translation id="8094917007353911263">The network that you are using may require you to visit <ph name="BEGIN_BOLD" /><ph name="LOGIN_URL" /><ph name="END_BOLD" />.</translation> +<translation id="8103161714697287722">Payment Method</translation> <translation id="8118489163946903409">Payment method</translation> <translation id="8131740175452115882">Confirm</translation> <translation id="8134994873729925007"><ph name="HOST_NAME" />’s server <ph name="BEGIN_ABBR" />DNS address<ph name="END_ABBR" /> could not be found.</translation> @@ -957,16 +976,15 @@ <translation id="8870413625673593573">Recently Closed</translation> <translation id="8874824191258364635">Enter a valid card number</translation> <translation id="8876793034577346603">Network configuration failed to be parsed.</translation> -<translation id="8889402386540077796">Hue</translation> <translation id="8891727572606052622">Invalid proxy mode.</translation> <translation id="889901481107108152">Sorry, this experiment is not available on your platform.</translation> <translation id="8903921497873541725">Zoom in</translation> <translation id="8931333241327730545">Do you want to save this card to your Google Account?</translation> <translation id="8932102934695377596">Your clock is behind</translation> +<translation id="893332455753468063">Add Name</translation> <translation id="8938939909778640821">Accepted credit and prepaid cards</translation> <translation id="8957210676456822347">Captive Portal Authorisation</translation> <translation id="8971063699422889582">Server's certificate has expired.</translation> -<translation id="8986494364107987395">Automatically send usage statistics and crash reports to Google</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">The site ahead contains harmful programs</translation> <translation id="8997023839087525404">The server presented a certificate that was not publicly disclosed using the Certificate Transparency policy. This is a requirement for some certificates, to ensure that they are trustworthy and protect against attackers.</translation> @@ -982,12 +1000,12 @@ <translation id="9049981332609050619">You attempted to reach <ph name="DOMAIN" />, but the server presented an invalid certificate.</translation> <translation id="9050666287014529139">Passphrase</translation> <translation id="9065203028668620118">Edit</translation> -<translation id="9068849894565669697">Select colour</translation> <translation id="9069693763241529744">Blocked by an extension</translation> <translation id="9076283476770535406">It may have mature content</translation> <translation id="9078964945751709336">More information required</translation> <translation id="9080712759204168376">Order Summary</translation> <translation id="9103872766612412690"><ph name="SITE" /> normally uses encryption to protect your information. When Chromium tried to connect to <ph name="SITE" /> this time, the website sent back unusual and incorrect credentials. This may happen when an attacker is trying to pretend to be <ph name="SITE" />, or a Wi-Fi sign-in screen has interrupted the connection. Your information is still secure because Chromium stopped the connection before any data was exchanged.</translation> +<translation id="9106062320799175032">Add Billing Address</translation> <translation id="910908805481542201">Help me fix this</translation> <translation id="9128870381267983090">Connect to network</translation> <translation id="9137013805542155359">Show original</translation> @@ -1001,6 +1019,7 @@ <translation id="9183425211371246419"><ph name="HOST_NAME" /> uses an unsupported protocol.</translation> <translation id="9205078245616868884">Your data is encrypted with your sync passphrase. Enter it to start sync.</translation> <translation id="9207861905230894330">Failed to add article.</translation> +<translation id="9215416866750762878">An application is stopping Chrome from safely connecting to this site</translation> <translation id="9219103736887031265">Images</translation> <translation id="933612690413056017">There is no Internet connection</translation> <translation id="933712198907837967">Diners Club</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb index 49f4c05..f3dcb25 100644 --- a/components/strings/components_strings_es-419.xtb +++ b/components/strings/components_strings_es-419.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Esperando conexión…</translation> <translation id="153384715582417236">Eso es todo por ahora</translation> <translation id="1549470594296187301">JavaScript debe estar habilitado para usar esta función.</translation> -<translation id="1555130319947370107">Azul</translation> <translation id="1559528461873125649">El archivo o directorio no existe</translation> <translation id="1583429793053364125">Se produjo un error al mostrar la página web.</translation> <translation id="1592005682883173041">Acceso a datos locales</translation> <translation id="1594030484168838125">Seleccionar</translation> -<translation id="161042844686301425">Cian</translation> <translation id="1620510694547887537">Cámara</translation> <translation id="1629803312968146339">¿Quieres que Chrome guarde esta tarjeta?</translation> <translation id="1639239467298939599">Cargando</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Autocompletar</translation> <translation id="2710942282213947212">Un software en tu computadora impide que Chromium se conecte de forma segura a la Web</translation> <translation id="2712173769900027643">Solicitar permiso</translation> -<translation id="2713444072780614174">Blanco</translation> <translation id="2720342946869265578">Cercanas</translation> <translation id="2721148159707890343">Solicitud correcta</translation> <translation id="2728127805433021124">El certificado del servidor está firmado con un algoritmo de firma no seguro.</translation> @@ -303,7 +300,6 @@ <translation id="3303855915957856445">No se encontraron resultados en la búsqueda</translation> <translation id="3305707030755673451">Tus datos se encriptaron con tu frase de contraseña para sincronización el <ph name="TIME" />. Debes ingresarla para iniciar la sincronización.</translation> <translation id="3320021301628644560">Agregar dirección de facturación</translation> -<translation id="3329013043687509092">Saturación</translation> <translation id="333371639341676808">Evita que esta página cree cuadros de diálogo adicionales.</translation> <translation id="3338095232262050444">Seguro</translation> <translation id="3340978935015468852">configuración</translation> @@ -414,7 +410,6 @@ <translation id="4103249731201008433">El número de serie del dispositivo no es válido.</translation> <translation id="410351446219883937">Reproducción automática</translation> <translation id="4103763322291513355">Visita <strong>chrome://policy</strong> para ver las URL en lista negra y otras políticas que estableció el administrador del sistema.</translation> -<translation id="4115378294792113321">Magenta</translation> <translation id="4116663294526079822">Permitir siempre en este sitio</translation> <translation id="4117700440116928470">No se admite el alcance de la política.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 más}other{# más}}</translation> @@ -625,7 +620,6 @@ <translation id="5869522115854928033">Contraseñas almacenadas</translation> <translation id="5872918882028971132">Sugerencias para padres</translation> <translation id="5893752035575986141">Se aceptan tarjetas de crédito.</translation> -<translation id="5901630391730855834">Amarillo</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (sincronizado)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 en uso}other{# en uso}}</translation> <translation id="5959728338436674663">Enviar automáticamente <ph name="BEGIN_WHITEPAPER_LINK" />determinado contenido de la página e información del sistema<ph name="END_WHITEPAPER_LINK" /> a Google para detectar apps y sitios peligrosos <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -636,12 +630,10 @@ <translation id="5990559369517809815">Una extensión bloqueó las solicitudes al servidor.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Página 1}other{Página #}}</translation> -<translation id="6017514345406065928">Verde</translation> <translation id="6017850046339264347">Es posible que los atacantes que se encuentran en <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> instalen apps engañosas que se hagan pasar por otro tipo de contenido o que recopilen datos que se usen para rastrearte. <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (sincronizados)</translation> <translation id="6027201098523975773">Ingresa un nombre</translation> <translation id="6040143037577758943">Cerrar</translation> -<translation id="6042308850641462728">Más</translation> <translation id="6047233362582046994">Si comprendes los riesgos de seguridad, puedes <ph name="BEGIN_LINK" />visitar este sitio<ph name="END_LINK" /> antes de que se hayan quitado las apps dañinas.</translation> <translation id="6047927260846328439">Es posible que este contenido trate de engañarte para que instales software o reveles información personal. <ph name="BEGIN_LINK" />Mostrar de todos modos<ph name="END_LINK" /></translation> <translation id="6051221802930200923">No puedes visitar <ph name="SITE" /> ahora porque el sitio web usa la fijación de certificados. Los ataques y errores de red suelen ser temporales, por lo que es posible que esta página funcione más tarde.</translation> @@ -718,7 +710,6 @@ <translation id="6710213216561001401">Anterior</translation> <translation id="6710594484020273272"><Escribe el término de búsqueda></translation> <translation id="6711464428925977395">Hay un error en el servidor proxy o la dirección es incorrecta.</translation> -<translation id="6727102863431372879">Establecer</translation> <translation id="674375294223700098">Error de certificado de servidor desconocido.</translation> <translation id="6753269504797312559">Valor de la política</translation> <translation id="6757797048963528358">El dispositivo se suspendió.</translation> @@ -802,7 +793,6 @@ <translation id="7518003948725431193">No se encontró una página web para la siguiente dirección web: <ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">Tu conexión con este sitio no es privada</translation> -<translation id="7535087603100972091">Valor</translation> <translation id="7537536606612762813">Obligatoria</translation> <translation id="7542403920425041731">Después de que se confirme, los datos de tu tarjeta se compartirán con este sitio.</translation> <translation id="7542995811387359312">El rellenado automático de la tarjeta de crédito se inhabilitó porque este formulario no usa una conexión segura.</translation> @@ -813,7 +803,6 @@ <translation id="7567204685887185387">Este servidor no pudo probar que su dominio es <ph name="DOMAIN" />; el certificado de seguridad podría haberse emitido de forma fraudulenta. Es posible que esto se deba a una configuración incorrecta o a que un atacante interceptó la conexión.</translation> <translation id="7568593326407688803">Esta página está en<ph name="ORIGINAL_LANGUAGE" />¿Quieres traducirla?</translation> <translation id="7569952961197462199">¿Confirmas que quieres quitar la tarjeta de crédito de Chrome?</translation> -<translation id="7569983096843329377">Negro</translation> <translation id="7578104083680115302">Paga con rapidez en sitios y apps a través de varios dispositivos con tarjetas que guardaste en Google.</translation> <translation id="7588950540487816470">Web física</translation> <translation id="7592362899630581445">El certificado del servidor no cumple con las restricciones de nombre.</translation> @@ -865,7 +854,6 @@ <translation id="79338296614623784">Ingresa un número de teléfono válido</translation> <translation id="7935318582918952113">Filtro de DOM</translation> <translation id="7938958445268990899">El certificado del servidor aún no es válido.</translation> -<translation id="7942349550061667556">Rojo</translation> <translation id="7947285636476623132">Comprueba el año de vencimiento y vuelve a intentarlo</translation> <translation id="7951415247503192394">(32 bits)</translation> <translation id="7956713633345437162">Favoritos del celular</translation> @@ -959,7 +947,6 @@ <translation id="8870413625673593573">Cerrado recientemente</translation> <translation id="8874824191258364635">Ingresa un número de tarjeta válido</translation> <translation id="8876793034577346603">No se pudo analizar la configuración de red.</translation> -<translation id="8889402386540077796">Tono</translation> <translation id="8891727572606052622">Modo proxy no válido</translation> <translation id="889901481107108152">Este experimento no está disponible en tu plataforma.</translation> <translation id="8903921497873541725">Acercar</translation> @@ -968,7 +955,6 @@ <translation id="8938939909778640821">Tarjetas de crédito y prepago aceptadas</translation> <translation id="8957210676456822347">Autorización de portal cautivo</translation> <translation id="8971063699422889582">El certificado del servidor ha caducado.</translation> -<translation id="8986494364107987395">Enviar automáticamente estadísticas de uso e informes sobre fallos a Google</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">El siguiente sitio contiene programas peligrosos</translation> <translation id="8997023839087525404">El servidor presentó un certificado que no se divulgó de forma pública con la política Certificado de transparencia. Este es un requisito para algunos certificados que permite garantizar su confiabilidad y protegerte de atacantes.</translation> @@ -984,7 +970,6 @@ <translation id="9049981332609050619">Has intentado acceder a <ph name="DOMAIN" />, pero el servidor presentó un certificado no válido.</translation> <translation id="9050666287014529139">Frase de contraseña</translation> <translation id="9065203028668620118">Editar</translation> -<translation id="9068849894565669697">Seleccionar color</translation> <translation id="9069693763241529744">Bloqueado por una extensión</translation> <translation id="9076283476770535406">Es posible que incluya contenido para adultos</translation> <translation id="9078964945751709336">Se requiere más información</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb index 62401b32..3baa104 100644 --- a/components/strings/components_strings_es.xtb +++ b/components/strings/components_strings_es.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Esperando conexión…</translation> <translation id="153384715582417236">Eso es todo por ahora</translation> <translation id="1549470594296187301">JavaScript debe estar habilitado para utilizar esta función.</translation> -<translation id="1555130319947370107">Azul</translation> <translation id="1559528461873125649">No existe el archivo o el directorio.</translation> <translation id="1583429793053364125">Se ha producido un error al mostrar esta página web.</translation> <translation id="1592005682883173041">Acceso a datos locales</translation> <translation id="1594030484168838125">Seleccionar</translation> -<translation id="161042844686301425">Cian</translation> <translation id="1620510694547887537">Cámara</translation> <translation id="1629803312968146339">¿Quieres que Chrome guarde esta tarjeta?</translation> <translation id="1639239467298939599">Cargando</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Autocompletar</translation> <translation id="2710942282213947212">Hay software en tu ordenador que impide que Chromium se conecte a la Web de forma segura</translation> <translation id="2712173769900027643">Solicitar permiso</translation> -<translation id="2713444072780614174">Blanco</translation> <translation id="2720342946869265578">Cercanas</translation> <translation id="2721148159707890343">Solicitud correcta</translation> <translation id="2728127805433021124">El certificado del servidor está firmado con un algoritmo de firma no seguro.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">No se han encontrado resultados de búsqueda</translation> <translation id="3305707030755673451">Tus datos se cifraron con tu frase de contraseña de sincronización el <ph name="TIME" />. Introdúcela para iniciar la sincronización.</translation> <translation id="3320021301628644560">Añadir dirección de facturación</translation> -<translation id="3329013043687509092">Saturación</translation> <translation id="333371639341676808">Evita que esta página cree cuadros de diálogo adicionales.</translation> <translation id="3338095232262050444">Es seguro</translation> <translation id="3340978935015468852">configuración</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">El número de serie del dispositivo no es válido.</translation> <translation id="410351446219883937">Reproducción automática</translation> <translation id="4103763322291513355">Accede a la página <strong>chrome://policy</strong> para ver la lista de URLs no admitidas y otras políticas establecidas por el administrador del sistema.</translation> -<translation id="4115378294792113321">Magenta</translation> <translation id="4116663294526079822">Permitir siempre en este sitio</translation> <translation id="4117700440116928470">No se admite el alcance de la política.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{Uno más}other{# más}}</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">Contraseñas guardadas</translation> <translation id="5872918882028971132">Sugerencias de padres</translation> <translation id="5893752035575986141">Se aceptan tarjetas de crédito.</translation> -<translation id="5901630391730855834">Amarillo</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (sincronizado)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 en uso}other{# en uso}}</translation> <translation id="5959728338436674663">Enviar automáticamente <ph name="BEGIN_WHITEPAPER_LINK" />información del sistema y contenido de las páginas<ph name="END_WHITEPAPER_LINK" /> a Google para facilitar la detección de aplicaciones y sitios web peligrosos. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">Una extensión ha bloqueado el envío de solicitudes al servidor.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Página 1}other{Página #}}</translation> -<translation id="6017514345406065928">Verde</translation> <translation id="6017850046339264347">Se ha detectado la presencia de atacantes en el sitio web <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />. Estos podrían instalar aplicaciones engañosas que se hagan pasar por otra persona o recojan datos que podrían usarse para realizar un seguimiento de tu actividad. <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (sincronizados)</translation> <translation id="6027201098523975773">Introduce un nombre</translation> <translation id="6040143037577758943">Cerrar</translation> -<translation id="6042308850641462728">Más</translation> <translation id="6047233362582046994">Si entiendes los riesgos para tu seguridad, puedes <ph name="BEGIN_LINK" />acceder a este sitio web<ph name="END_LINK" /> antes de que se hayan eliminado las aplicaciones dañinas.</translation> <translation id="6047927260846328439">Es posible que este contenido intente engañarte para que instales software o reveles información personal. <ph name="BEGIN_LINK" />Mostrar de todos modos<ph name="END_LINK" /></translation> <translation id="6051221802930200923">No puedes acceder a <ph name="SITE" /> en este momento porque el sitio web utiliza la fijación de certificados. Los ataques y los errores de red suelen ser temporales, por lo que es probable que esta página funcione más tarde.</translation> @@ -717,7 +709,6 @@ <translation id="6710213216561001401">Anterior</translation> <translation id="6710594484020273272"><Introducir término de búsqueda></translation> <translation id="6711464428925977395">Se ha producido un error con el servidor proxy o la dirección es incorrecta.</translation> -<translation id="6727102863431372879">Establecer</translation> <translation id="674375294223700098">Error de certificado de servidor desconocido</translation> <translation id="6753269504797312559">Valor de la política</translation> <translation id="6757797048963528358">El dispositivo se ha suspendido.</translation> @@ -801,7 +792,6 @@ <translation id="7518003948725431193">No se ha encontrado ninguna página web para la dirección <ph name="URL" />.</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">Tu conexión con este sitio web no es privada</translation> -<translation id="7535087603100972091">Valor</translation> <translation id="7537536606612762813">Obligatoria</translation> <translation id="7542403920425041731">Cuando la confirmes, la información de la tarjeta se compartirá con este sitio web.</translation> <translation id="7542995811387359312">La opción de autocompletado de la tarjeta de crédito está inhabilitada porque este formulario no utiliza una conexión segura.</translation> @@ -812,7 +802,6 @@ <translation id="7567204685887185387">Este servidor no ha podido probar que su dominio es <ph name="DOMAIN" />, su certificado de seguridad podría haberse emitido de forma fraudulenta. El problema puede deberse a una configuración incorrecta o a que un atacante haya interceptado la conexión.</translation> <translation id="7568593326407688803">Esta página está escrita en<ph name="ORIGINAL_LANGUAGE" />¿Quieres traducirla?</translation> <translation id="7569952961197462199">¿Eliminar tarjeta de crédito de Chrome?</translation> -<translation id="7569983096843329377">Negro</translation> <translation id="7578104083680115302">Paga rápidamente en aplicaciones y sitios web desde tus dispositivos utilizando las tarjetas que has guardado en Google.</translation> <translation id="7588950540487816470">Web física</translation> <translation id="7592362899630581445">El certificado del servidor incluye un nombre que está fuera de su cobertura.</translation> @@ -864,7 +853,6 @@ <translation id="79338296614623784">Introduce un número de teléfono válido</translation> <translation id="7935318582918952113">Extractor de DOM</translation> <translation id="7938958445268990899">Aún no es válido el certificado de servidor.</translation> -<translation id="7942349550061667556">Rojo</translation> <translation id="7947285636476623132">Consulta el año de vencimiento y vuelve a intentarlo</translation> <translation id="7951415247503192394">(32 bits)</translation> <translation id="7956713633345437162">Marcadores del móvil</translation> @@ -957,7 +945,6 @@ <translation id="8870413625673593573">Cerrado recientemente</translation> <translation id="8874824191258364635">Introduce un número de tarjeta válido</translation> <translation id="8876793034577346603">No se ha podido analizar la configuración de red.</translation> -<translation id="8889402386540077796">Matiz</translation> <translation id="8891727572606052622">El modo de proxy no es válido.</translation> <translation id="889901481107108152">Esta función experimental no está disponible en tu plataforma.</translation> <translation id="8903921497873541725">Acercar</translation> @@ -966,7 +953,6 @@ <translation id="8938939909778640821">Tarjetas prepago y de crédito aceptadas</translation> <translation id="8957210676456822347">Autorización de portal cautivo</translation> <translation id="8971063699422889582">El certificado del servidor ha caducado.</translation> -<translation id="8986494364107987395">Enviar automáticamente estadísticas de uso e informes sobre fallos a Google</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">El sitio al que vas a acceder contiene programas dañinos</translation> <translation id="8997023839087525404">El servidor ha mostrado un certificado que no se ha hecho público mediante la Política de Transparencia en los Certificados. Este requisito se aplica a algunos certificados para garantizar que son de confianza y ofrecer protección contra los atacantes.</translation> @@ -982,7 +968,6 @@ <translation id="9049981332609050619">Has intentado acceder a <ph name="DOMAIN" />, pero el servidor ha presentado un certificado no válido.</translation> <translation id="9050666287014529139">Frase de contraseña</translation> <translation id="9065203028668620118">Editar</translation> -<translation id="9068849894565669697">Seleccionar color</translation> <translation id="9069693763241529744">Bloqueado por una extensión</translation> <translation id="9076283476770535406">Es posible que incluya contenido para adultos</translation> <translation id="9078964945751709336">Se necesita más información</translation>
diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb index 32cc042..8389359 100644 --- a/components/strings/components_strings_et.xtb +++ b/components/strings/components_strings_et.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Ühenduse ootamine …</translation> <translation id="153384715582417236">See on praeguseks kõik</translation> <translation id="1549470594296187301">Selle funktsiooni kasutamiseks peab JavaScript olema lubatud.</translation> -<translation id="1555130319947370107">Sinine</translation> <translation id="1559528461873125649">Pole sellist faili või kataloogi</translation> <translation id="1583429793053364125">Veebilehe kuvamisel läks midagi valesti.</translation> <translation id="1592005682883173041">Juurdepääs kohalikele andmetele</translation> <translation id="1594030484168838125">Vali</translation> -<translation id="161042844686301425">Tsüaan</translation> <translation id="1620510694547887537">Kaamera</translation> <translation id="1629803312968146339">Kas soovite, et Chrome salvestaks selle kaardi?</translation> <translation id="1639239467298939599">Laadimine</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Automaatne täitmine</translation> <translation id="2710942282213947212">Teie arvutis olev tarkvara ei luba Chromiumil veebiga ohutult ühendust luua</translation> <translation id="2712173769900027643">Küsi luba</translation> -<translation id="2713444072780614174">Valge</translation> <translation id="2720342946869265578">Läheduses</translation> <translation id="2721148159707890343">Taotlus õnnestus</translation> <translation id="2728127805433021124">Serveri sertifikaat on allkirjastatud nõrga allkirjaalgoritmiga.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">Otsingutulemusi ei leitud</translation> <translation id="3305707030755673451">Teie andmed krüpteeriti <ph name="TIME" /> teie sünkroonimisparooliga. Sisestage see sünkroonimise alustamiseks.</translation> <translation id="3320021301628644560">Arveldusaadressi lisamine</translation> -<translation id="3329013043687509092">Küllastus</translation> <translation id="333371639341676808">Keela sellel leheküljel lisadialoogide loomine.</translation> <translation id="3338095232262050444">Turvaline</translation> <translation id="3340978935015468852">seaded</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">Seadme seerianumber on kehtetu</translation> <translation id="410351446219883937">Automaatesitus</translation> <translation id="4103763322291513355">Külastage saiti <strong>chrome://policy</strong>, et näha mustas nimekirjas olevate URL-ide loendit ja teisi reegleid, mille on jõustanud teie süsteemiadministraator.</translation> -<translation id="4115378294792113321">Magenta</translation> <translation id="4116663294526079822">Luba sellel saidil alati</translation> <translation id="4117700440116928470">Reegli ulatust ei toetata.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{veel 1}other{veel #}}</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">Salvestatud paroolid</translation> <translation id="5872918882028971132">Vanema soovitused</translation> <translation id="5893752035575986141">Kaupmees aktsepteerib krediitkaarte.</translation> -<translation id="5901630391730855834">Kollane</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (sünkroonitud)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 on kasutusel}other{# on kasutusel}}</translation> <translation id="5959728338436674663">Saatke Google'ile automaatselt <ph name="BEGIN_WHITEPAPER_LINK" />süsteemiteavet ja lehe sisu<ph name="END_WHITEPAPER_LINK" />, et aidata tuvastada ohtlikke rakendusi ja saite. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">Laiendus blokeeris serverisse saadetavad päringud.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Lk 1}other{Lk #}}</translation> -<translation id="6017514345406065928">Roheline</translation> <translation id="6017850046339264347">Ründajad saidil <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> võivad installida petlikke rakendusi, mis esinevad millegi muuna või koguvad andmeid, mida võidakse kasutada teie jälgimiseks. <ph name="BEGIN_LEARN_MORE_LINK" />Lisateave<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (sünkroonitud)</translation> <translation id="6027201098523975773">Sisestage nimi</translation> <translation id="6040143037577758943">Sulge</translation> -<translation id="6042308850641462728">Rohkem</translation> <translation id="6047233362582046994">Kui mõistate, kuidas see teie turvalisust ohustab, siis võite <ph name="BEGIN_LINK" />seda saiti külastada<ph name="END_LINK" /> enne, kui kahjulikud rakendused on eemaldatud.</translation> <translation id="6047927260846328439">See sisu võib meelitada teid installima tarkvara või avaldama isiklikke andmeid. <ph name="BEGIN_LINK" />Kuva ikkagi<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Te ei saa saiti <ph name="SITE" /> praegu külastada, sest veebisait kasutab sertifikaadi kinnitamist. Võrguvead ja -rünnakud on tavaliselt ajutised, nii et leht tõenäoliselt hiljem töötab.</translation> @@ -717,7 +709,6 @@ <translation id="6710213216561001401">Eelmine</translation> <translation id="6710594484020273272"><Sisestage otsingutermin></translation> <translation id="6711464428925977395">Puhverserveriga on midagi valesti või aadress on vale.</translation> -<translation id="6727102863431372879">Määra</translation> <translation id="674375294223700098">Serveri sertifikaadi tundmatu viga.</translation> <translation id="6753269504797312559">Reegli väärtus</translation> <translation id="6757797048963528358">Teie seade lülitus unerežiimile.</translation> @@ -801,7 +792,6 @@ <translation id="7518003948725431193">Järgneval veebiaadressil ei olnud ühtegi veebilehte: <ph name="URL" /></translation> <translation id="7521387064766892559">Javascript</translation> <translation id="7526934274050461096">Teie ühendus selle saidiga pole privaatne</translation> -<translation id="7535087603100972091">Väärtus</translation> <translation id="7537536606612762813">Kohustuslik</translation> <translation id="7542403920425041731">Kui selle kinnitate, jagatakse teie kaardi üksikasju selle saidiga.</translation> <translation id="7542995811387359312">Automaatne krediitkaardi täide on keelatud, sest see vorm ei kasuta turvalist ühendust.</translation> @@ -812,7 +802,6 @@ <translation id="7567204685887185387">Server ei suutnud tõestada, et see on domeen <ph name="DOMAIN" />, selle turvasertifikaat võib olla väljastatud pettuse teel. Selle põhjuseks võib olla vale seadistus või ründaja, kes on sekkunud teie ühendusse.</translation> <translation id="7568593326407688803">See leht on keeles<ph name="ORIGINAL_LANGUAGE" />Kas soovite seda tõlkida?</translation> <translation id="7569952961197462199">Kas eemaldada Chrome'ist krediitkaart?</translation> -<translation id="7569983096843329377">Must</translation> <translation id="7578104083680115302">Google'i salvestatud kaartide abil saate eri seadmetes saitidel ja rakendustes kiirelt maksta.</translation> <translation id="7588950540487816470">Füüsiline veeb</translation> <translation id="7592362899630581445">Serveri sertifikaat rikub nime piiranguid.</translation> @@ -864,7 +853,6 @@ <translation id="79338296614623784">Sisestage kehtiv telefoninumber</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">Serveri sertifikaat ei kehti veel.</translation> -<translation id="7942349550061667556">Punane</translation> <translation id="7947285636476623132">Kontrollige aegumisaastat ja proovige uuesti</translation> <translation id="7951415247503192394">(32-bitine)</translation> <translation id="7956713633345437162">Mobiili järjehoidjad</translation> @@ -957,7 +945,6 @@ <translation id="8870413625673593573">Viimati suletud</translation> <translation id="8874824191258364635">Sisestaeg kehtiv kaardinumber</translation> <translation id="8876793034577346603">Võrgu seadistust ei õnnestunud sõeluda.</translation> -<translation id="8889402386540077796">Värvitoon</translation> <translation id="8891727572606052622">Kehtetu puhverserveri režiim.</translation> <translation id="889901481107108152">Kahjuks ei ole see eksperiment teie platvormil saadaval.</translation> <translation id="8903921497873541725">Suurendab</translation> @@ -966,7 +953,6 @@ <translation id="8938939909778640821">Aktsepteeritavad ettemakstud ja krediitkaardid</translation> <translation id="8957210676456822347">Kontrollportaali volitamine</translation> <translation id="8971063699422889582">Serveri sertifikaat on aegunud.</translation> -<translation id="8986494364107987395">Saada kasutusstatistika ja krahhiaruanded automaatselt Google'ile</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">Sait, mille soovite avada, sisaldab kahjulikke programme</translation> <translation id="8997023839087525404">Server esitas sertifikaadi, mida ei ole sertifikaadi läbipaistvuse reegli kohaselt avalikustatud. See on teatud sertifikaatide puhul nõutav, et need oleksid usaldusväärsed ja kaitseksid ründajate eest.</translation> @@ -982,7 +968,6 @@ <translation id="9049981332609050619">Proovisite jõuda domeenile <ph name="DOMAIN" />, kuid server esitas kehtetu sertifikaadi.</translation> <translation id="9050666287014529139">Parool</translation> <translation id="9065203028668620118">Muuda</translation> -<translation id="9068849894565669697">Värvi valimine</translation> <translation id="9069693763241529744">Blokeeris laiendus</translation> <translation id="9076283476770535406">See võib sisaldada täiskasvanutele mõeldud sisu</translation> <translation id="9078964945751709336">Vaja on rohkem teavet</translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb index 3f4c89e..1af50fe9 100644 --- a/components/strings/components_strings_fa.xtb +++ b/components/strings/components_strings_fa.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">درانتظار برقراری اتصال…</translation> <translation id="153384715582417236">درحالحاضر مورد دیگری وجود ندارد</translation> <translation id="1549470594296187301">برای استفاده از این قابلیت، جاوا اسکریپت باید فعال باشد.</translation> -<translation id="1555130319947370107">آبی</translation> <translation id="1559528461873125649">فاقد چنین فایل یا دایرکتوری است</translation> <translation id="1583429793053364125">هنگام نمایش این صفحه وب مشکلی پیش آمد.</translation> <translation id="1592005682883173041">دسترسی داده محلی</translation> <translation id="1594030484168838125">انتخاب</translation> -<translation id="161042844686301425">فیروزهای</translation> <translation id="1620510694547887537">دوربین</translation> <translation id="1629803312968146339">میخواهید Chrome این کارت را ذخیره کند؟</translation> <translation id="1639239467298939599">بارگیری</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">تکمیل خودکار</translation> <translation id="2710942282213947212">نرمافزاری در رایانهتان مانع از اتصال ایمن Chromium به وب میشود</translation> <translation id="2712173769900027643">درخواست اجازه</translation> -<translation id="2713444072780614174">سفید</translation> <translation id="2720342946869265578">اطراف</translation> <translation id="2721148159707890343">درخواست با موفقیت انجام شد</translation> <translation id="2728127805433021124">گواهی سرور با استفاده از یک الگوریتم امضای ضعیف امضا شده است.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">هیچ نتیجهای برای جستجو یافت نشد</translation> <translation id="3305707030755673451">دادههای شما در تاریخ <ph name="TIME" /> با عبارت عبور همگامسازیتان رمزگذاری شد. برای شروع همگامسازی آن را وارد کنید.</translation> <translation id="3320021301628644560">افزودن نشانی صورتحساب</translation> -<translation id="3329013043687509092">اشباع رنگ</translation> <translation id="333371639341676808">از ایجاد کادرهای گفتگوی دیگر توسط این صفحه جلوگیری شود.</translation> <translation id="3338095232262050444">ایمن</translation> <translation id="3340978935015468852">تنظیمات</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">شماره سریال دستگاه نامعتبر است</translation> <translation id="410351446219883937">پخش خودکار</translation> <translation id="4103763322291513355">برای مشاهده فهرست نشانیهای وب ممنوع و سایر خطمشیهای اجباری براساس تصمیم سرپرست سیستم خود از <strong>chrome://policy</strong> بازدید نمایید.</translation> -<translation id="4115378294792113321">سرخابی</translation> <translation id="4116663294526079822">همیشه مجاز در این سایت</translation> <translation id="4117700440116928470">محدوده خطمشی پشتیبانی نمیشود.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{۱ مورد دیگر}one{# مورد دیگر}other{# مورد دیگر}}</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">گذرواژههای ذخیرهشده</translation> <translation id="5872918882028971132">پیشنهادات والدین</translation> <translation id="5893752035575986141">کارتهای اعتباری پذیرفته میشوند.</translation> -<translation id="5901630391730855834">زرد</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (همگامسازیشده)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{۱ کوکی درحال استفاده}one{# کوکی درحال استفاده}other{# کوکی درحال استفاده}}</translation> <translation id="5959728338436674663">ارسال خودکار برخی از <ph name="BEGIN_WHITEPAPER_LINK" />اطلاعات سیستم و محتوای صفحه<ph name="END_WHITEPAPER_LINK" /> به Google برای کمک به شناسایی برنامهها و سایتهای خطرناک. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">درخواستهای ارسالی به سرور توسط یک برنامهٔ افزودنی مسدود شد.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{صفحه ۱}one{صفحه #}other{صفحه #}}</translation> -<translation id="6017514345406065928">سبز</translation> <translation id="6017850046339264347">مهاجمها در <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> میتوانند برنامههای فریبدهندهای نصب کنند که وانمود میکنند چیز دیگری هستند یا دادههایی جمعآوری کنند که ممکن است برای ردیابی شما استفاده شوند. <ph name="BEGIN_LEARN_MORE_LINK" />بیشتر بدانید<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />، <ph name="TYPE_2" />، <ph name="TYPE_3" /> (همگامسازیشده)</translation> <translation id="6027201098523975773">نامی وارد کنید</translation> <translation id="6040143037577758943">بستن</translation> -<translation id="6042308850641462728">بیشتر</translation> <translation id="6047233362582046994">اگر خطری را که امنیتتان را تهدید میکند درک میکنید، میتوانید قبل از حذف برنامههای مضر، <ph name="BEGIN_LINK" />از این سایت بازدید کنید<ph name="END_LINK" />.</translation> <translation id="6047927260846328439">شاید محتوای این صفحه تلاش کند شما را فریب دهد تا نرمافزاری نصب کنید یا اطلاعات شخصی را افشا سازید. <ph name="BEGIN_LINK" />درهرصورت نمایش داده شود<ph name="END_LINK" /></translation> <translation id="6051221802930200923">درحالحاضر نمیتوانید از <ph name="SITE" /> دیدن کنید، زیرا وبسایت از پین کردن گواهینامه استفاده میکند. خطاهای شبکه و حملهها موقتی هستند، بنابراین احتمالاً این صفحه بعداً کار خواهد کرد.</translation> @@ -717,7 +709,6 @@ <translation id="6710213216561001401">قبلی</translation> <translation id="6710594484020273272"><عبارت جستجو را تایپ کنید></translation> <translation id="6711464428925977395">مشکلی در سرور پروکسی وجود دارد یا این آدرس درست نیست.</translation> -<translation id="6727102863431372879">تنظیم</translation> <translation id="674375294223700098">خطای ناشناس گواهی سرور.</translation> <translation id="6753269504797312559">مقدار خطمشی</translation> <translation id="6757797048963528358">دستگاهتان به خواب رفته است.</translation> @@ -801,7 +792,6 @@ <translation id="7518003948725431193">صفحه وبی با این آدرس وب یافت نشد: <ph name="URL" /></translation> <translation id="7521387064766892559">جاوا اسکریپت</translation> <translation id="7526934274050461096">اتصال شما به این سایت خصوصی نیست</translation> -<translation id="7535087603100972091">مقدار</translation> <translation id="7537536606612762813">اجباری</translation> <translation id="7542403920425041731">بعد از تأیید شما، جزئیات کارتتان با این سایت به اشتراک گذاشته میشود.</translation> <translation id="7542995811387359312">تکمیل خودکار کارت اعتباری غیر فعال است زیرا این فرم از یک اتصال امن استفاده نمیکند.</translation> @@ -812,7 +802,6 @@ <translation id="7567204685887185387">این سرور نتوانست اثبات کند که این <ph name="DOMAIN" /> است؛ ممکن است گواهی امنیتی آن به صورت تقلبی صادر شده باشد. ممکن است علت این موضوع پیکربندی اشتباه باشد یا مهاجمی اتصال شما را قطع کرده است.</translation> <translation id="7568593326407688803">این صفحه به <ph name="ORIGINAL_LANGUAGE" /> است، آیا مایلید ترجمه شود؟</translation> <translation id="7569952961197462199">کارت اعتباری از Chrome پاک شود؟</translation> -<translation id="7569983096843329377">سیاه</translation> <translation id="7578104083680115302">با استفاده از کارتهایی که با Google ذخیره کردهاید بهسرعت در همه دستگاههایتان پرداختهای سایتها و برنامهها را انجام دهید.</translation> <translation id="7588950540487816470">وب فیزیکی</translation> <translation id="7592362899630581445">گواهی سرور محدودیتهای نام را نقض میکند.</translation> @@ -864,7 +853,6 @@ <translation id="79338296614623784">شماره تلفن معتبری وارد کنید</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">گواهی سرور هنوز معتبر نیست.</translation> -<translation id="7942349550061667556">قرمز</translation> <translation id="7947285636476623132">سال انقضا را بررسی و دوباره امتحان کنید</translation> <translation id="7951415247503192394">(۳۲ بیت)</translation> <translation id="7956713633345437162">نشانکهای تلفن همراه</translation> @@ -957,7 +945,6 @@ <translation id="8870413625673593573">اخیراً بستهشده</translation> <translation id="8874824191258364635">شماره کارت معتبری وارد کنید</translation> <translation id="8876793034577346603">پیکربندی شبکه نتوانست تجزیه شود.</translation> -<translation id="8889402386540077796">رنگمایه</translation> <translation id="8891727572606052622">حالت پروکسی نامعتبر است.</translation> <translation id="889901481107108152">متأسفیم، این آزمایش بر روی دستگاه شما قابل انجام نیست.</translation> <translation id="8903921497873541725">بزرگنمایی</translation> @@ -966,7 +953,6 @@ <translation id="8938939909778640821">کارتهای اعتباری و پیشپرداخت قابلقبول</translation> <translation id="8957210676456822347">مجوز پورتال محدود</translation> <translation id="8971063699422889582">گواهی سرور منقضی شده است.</translation> -<translation id="8986494364107987395">ارسال خودکار آمار کاربرد و گزارشهای خرابی به Google</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">سایت در پیشرو حاوی برنامههای خطرناک است</translation> <translation id="8997023839087525404">سرور گواهیای را ارائه کرده است که با استفاده از خطمشی شفافیت گواهینامه بهصورت عمومی نشان داده نشده است. برای برخی گواهیها این یک مسئله ضروری است تا از قابل اعتماد بودن آنها و محافظت دربرابر مهاجمین اطمینان حاصل شود.</translation> @@ -982,7 +968,6 @@ <translation id="9049981332609050619">شما سعی کردید به <ph name="DOMAIN" /> دسترسی داشته باشید، اما سرور یک گواهی نامعتبر را نشان داد.</translation> <translation id="9050666287014529139">عبارت عبور</translation> <translation id="9065203028668620118">ویرایش</translation> -<translation id="9068849894565669697">انتخاب رنگ</translation> <translation id="9069693763241529744">توسط افزونه مسدود شده است</translation> <translation id="9076283476770535406">این سایت ممکن است شامل محتوای مخصوص بزرگسالان باشد</translation> <translation id="9078964945751709336">اطلاعات بیشتری نیاز است</translation>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb index 90aae3f1..c7af81f 100644 --- a/components/strings/components_strings_fi.xtb +++ b/components/strings/components_strings_fi.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Odotetaan yhteyttä…</translation> <translation id="153384715582417236">Siinä kaikki toistaiseksi</translation> <translation id="1549470594296187301">Tämän ominaisuuden käyttö edellyttää JavaScriptiä.</translation> -<translation id="1555130319947370107">Sininen</translation> <translation id="1559528461873125649">Tiedostoa tai hakemistoa ei ole olemassa</translation> <translation id="1583429793053364125">Jokin meni vikaan tätä verkkosivua näytettäessä.</translation> <translation id="1592005682883173041">Tietojen paikallinen käyttö</translation> <translation id="1594030484168838125">Valitse</translation> -<translation id="161042844686301425">Turkoosi</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1629803312968146339">Haluatko, että Chrome tallentaa tämän kortin?</translation> <translation id="1639239467298939599">Ladataan</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Automaattinen täyttö</translation> <translation id="2710942282213947212">Tietokoneelle asennettu ohjelmisto estää Chromiumia muodostamasta turvallista yhteyttä verkkoon</translation> <translation id="2712173769900027643">Pyydä käyttölupaa</translation> -<translation id="2713444072780614174">Valkoinen</translation> <translation id="2720342946869265578">Nearby</translation> <translation id="2721148159707890343">Pyyntö onnistui</translation> <translation id="2728127805433021124">Palvelimen varmenne on allekirjoitettu heikolla allekirjoitusalgoritmilla.</translation> @@ -303,7 +300,6 @@ <translation id="3303855915957856445">Ei hakutuloksia</translation> <translation id="3305707030755673451">Tietosi salattiin synkronoinnin tunnuslauseesi avulla <ph name="TIME" />. Aloita synkronointi antamalla tunnuslause.</translation> <translation id="3320021301628644560">Lisää laskutusosoite</translation> -<translation id="3329013043687509092">Värikylläisyys</translation> <translation id="333371639341676808">Estä tätä sivua luomasta muita viestejä.</translation> <translation id="3338095232262050444">Turvallinen</translation> <translation id="3340978935015468852">asetuksissa</translation> @@ -414,7 +410,6 @@ <translation id="4103249731201008433">Laitteen sarjanumero on virheellinen</translation> <translation id="410351446219883937">Automaattinen toisto</translation> <translation id="4103763322291513355">Voit lukea listan kielletyistä URL-osoitteista ja muut järjestelmänvalvojasi määräämät käytännöt osoitteessa <strong>chrome://policy</strong>.</translation> -<translation id="4115378294792113321">Purppura</translation> <translation id="4116663294526079822">Salli aina tässä sivustossa</translation> <translation id="4117700440116928470">Käytännön laajuutta ei tueta.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 muu}other{# muuta}}</translation> @@ -625,7 +620,6 @@ <translation id="5869522115854928033">Tallennetut salasanat</translation> <translation id="5872918882028971132">Ylätason ehdotukset</translation> <translation id="5893752035575986141">Luottokortit hyväksytään.</translation> -<translation id="5901630391730855834">Keltainen</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (synkronoitu)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 käytössä}other{# käytössä}}</translation> <translation id="5959728338436674663"><ph name="BEGIN_WHITEPAPER_LINK" />Lähetä automaattisesti<ph name="END_WHITEPAPER_LINK" /> joitain järjestelmän tietoja ja sivujen sisältöjä Googlelle auttaaksesi sitä havaitsemaan vaarallisia sovelluksia ja sivustoja. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -636,12 +630,10 @@ <translation id="5990559369517809815">Laajennus esti palvelinpyynnöt.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Sivu 1}other{Sivu #}}</translation> -<translation id="6017514345406065928">Vihreä</translation> <translation id="6017850046339264347">Sivuston <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> hyökkääjät voivat asentaa harhaanjohtavia sovelluksia, jotka teeskentelevät olevansa jotain muuta tai keräävät tietoja, joiden avulla ne voivat seurata sinua. <ph name="BEGIN_LEARN_MORE_LINK" />Lisätietoja<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (synkronoitu)</translation> <translation id="6027201098523975773">Kirjoita nimi</translation> <translation id="6040143037577758943">Sulje</translation> -<translation id="6042308850641462728">Lisää</translation> <translation id="6047233362582046994">Jos ymmärrät käyntiä koskevat turvallisuusriskit, voit <ph name="BEGIN_LINK" />siirtyä tälle sivustolle<ph name="END_LINK" /> jo ennen haitallisten sovellusten poistamista.</translation> <translation id="6047927260846328439">Tämä sisältö saattaa yrittää huijata sinua asentamaan ohjelmistoja tai paljastamaan henkilökohtaisia tietoja. <ph name="BEGIN_LINK" />Näytä silti<ph name="END_LINK" /></translation> <translation id="6051221802930200923"><ph name="SITE" /> ei juuri nyt ole käytettävissä, koska se käyttää varmenteiden kiinnittämistä. Verkkovirheet ja hyökkäykset ovat yleensä väliaikaisia, joten sivu luultavasti toimii myöhemmin.</translation> @@ -718,7 +710,6 @@ <translation id="6710213216561001401">Edellinen</translation> <translation id="6710594484020273272"><Anna hakukysely></translation> <translation id="6711464428925977395">Välityspalvelimessa on jotain vikaa tai osoite on virheellinen.</translation> -<translation id="6727102863431372879">Aseta</translation> <translation id="674375294223700098">Tuntematon palvelimen varmennevirhe.</translation> <translation id="6753269504797312559">Käytännön arvo</translation> <translation id="6757797048963528358">Laitteesi siirtyi virransäästötilaan.</translation> @@ -802,7 +793,6 @@ <translation id="7518003948725431193">Verkkosivua ei löytynyt osoitteelle: <ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">Sivustoon muodostamasi yhteys ei ole yksityinen.</translation> -<translation id="7535087603100972091">Arvo</translation> <translation id="7537536606612762813">Pakollinen</translation> <translation id="7542403920425041731">Vahvistamisen jälkeen korttisi tiedot jaetaan sivuston kanssa.</translation> <translation id="7542995811387359312">Automaattinen luottokortin tietojen täyttäminen on poistettu käytöstä, koska tämä lomake ei käytä suojattua yhteyttä.</translation> @@ -813,7 +803,6 @@ <translation id="7567204685887185387">Palvelin ei voinut todistaa olevansa <ph name="DOMAIN" />; sen suojausvarmenne on ehkä luotu vilpillisesti. Tämä voi johtua määritysvirheestä tai verkkoyhteytesi siepanneesta hyökkääjästä.</translation> <translation id="7568593326407688803">Tämä sivu on kirjoitettu kielellä<ph name="ORIGINAL_LANGUAGE" />Haluatko kääntää sen?</translation> <translation id="7569952961197462199">Poistetaanko luottokortti Chromen tiedoista?</translation> -<translation id="7569983096843329377">Musta</translation> <translation id="7578104083680115302">Voit maksaa sivustoilla ja sovelluksissa nopeasti eri laitteillasi käyttämällä Googleen tallennettuja kortteja.</translation> <translation id="7588950540487816470">Fyysinen web</translation> <translation id="7592362899630581445">Palvelimen varmenne rikkoo nimirajoituksia.</translation> @@ -865,7 +854,6 @@ <translation id="79338296614623784">Anna kelvollinen puhelinnumero.</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">Palvelimen varmenne ei ole vielä voimassa.</translation> -<translation id="7942349550061667556">Punainen</translation> <translation id="7947285636476623132">Tarkista vanhentumisvuosi ja yritä uudelleen.</translation> <translation id="7951415247503192394">(32-bittinen)</translation> <translation id="7956713633345437162">Mobiilikirjanmerkit</translation> @@ -959,7 +947,6 @@ <translation id="8870413625673593573">Hiljattain suljetut</translation> <translation id="8874824191258364635">Anna kelvollinen kortin numero.</translation> <translation id="8876793034577346603">Verkkoasetuksia ei voitu jäsentää.</translation> -<translation id="8889402386540077796">Sävy</translation> <translation id="8891727572606052622">Virheellinen välityspalvelimen tila.</translation> <translation id="889901481107108152">Tämä kokeilu ei ole käytettävissä käyttöympäristössäsi.</translation> <translation id="8903921497873541725">Lähennä</translation> @@ -968,7 +955,6 @@ <translation id="8938939909778640821">Hyväksytyt luotto- ja prepaid-kortit</translation> <translation id="8957210676456822347">Captive portal -valtuutus</translation> <translation id="8971063699422889582">Palvelimen varmenne on vanhentunut.</translation> -<translation id="8986494364107987395">Lähetä Googlelle käyttötilastoja ja virheraportteja automaattisesti</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">Sivusto sisältää haitallisia ohjelmia</translation> <translation id="8997023839087525404">Palvelimen lähettämän varmenteen tietoja ei ole annettu yleiseen käyttöön Certificate Transparency ‑käytännön mukaisesti. Tietojen antamista edellytetään joiltakin varmenteilta, jotta niiden luotettavuus voidaan varmistaa ja käyttäjiä suojella hyökkääjiltä.</translation> @@ -984,7 +970,6 @@ <translation id="9049981332609050619">Yritit muodostaa yhteyden verkkotunnukseen <ph name="DOMAIN" />, mutta palvelin esitti virheellisen varmenteen.</translation> <translation id="9050666287014529139">Tunnuslause</translation> <translation id="9065203028668620118">Muokkaa</translation> -<translation id="9068849894565669697">Valitse väri</translation> <translation id="9069693763241529744">Laajennuksen estämä</translation> <translation id="9076283476770535406">Se saattaa sisältää vain aikuisille tarkoitettua sisältöä.</translation> <translation id="9078964945751709336">Lisätietoja tarvitaan</translation>
diff --git a/components/strings/components_strings_fil.xtb b/components/strings/components_strings_fil.xtb index bca6fcc..580394c1 100644 --- a/components/strings/components_strings_fil.xtb +++ b/components/strings/components_strings_fil.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Naghihintay ng koneksyon…</translation> <translation id="153384715582417236">'Yan na muna sa ngayon</translation> <translation id="1549470594296187301">Dapat naka-enable ang JavaScript upang magamit ang feature na ito.</translation> -<translation id="1555130319947370107">Asul</translation> <translation id="1559528461873125649">Walang naturang file o direktoryo</translation> <translation id="1583429793053364125">Nagkaroon ng problema habang ipinapakita ang webpage na ito.</translation> <translation id="1592005682883173041">Access sa Lokal na Data</translation> <translation id="1594030484168838125">Pumili</translation> -<translation id="161042844686301425">Cyan</translation> <translation id="1620510694547887537">Camera</translation> <translation id="1629803312968146339">Gusto mo bang i-save ng Chrome ang card na ito?</translation> <translation id="1639239467298939599">Naglo-load</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">AutoFill</translation> <translation id="2710942282213947212">Pinipigilan ng software sa iyong computer na makakonekta nang ligtas ang Chromium sa web</translation> <translation id="2712173769900027643">Humingi ng pahintulot</translation> -<translation id="2713444072780614174">Puti</translation> <translation id="2720342946869265578">Malapit</translation> <translation id="2721148159707890343">Matagumpay ang kahilingan</translation> <translation id="2728127805433021124">Nilagdaan ang certificate ng server gamit ang mahinang algorithm ng lagda.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">Walang nakitang resulta ng paghahanap</translation> <translation id="3305707030755673451">Na-encrypt ang iyong data gamit ang iyong passphrase sa pag-sync noong <ph name="TIME" />. Ilagay ito upang simulan ang pag-sync.</translation> <translation id="3320021301628644560">Magdagdag ng billing address</translation> -<translation id="3329013043687509092">Saturation</translation> <translation id="333371639341676808">Iwasan ang pahinang ito mula sa paglikha ng karagdagang mga dialog.</translation> <translation id="3338095232262050444">Secure</translation> <translation id="3340978935015468852">mga setting</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">Di-wasto ang serial number ng device</translation> <translation id="410351446219883937">I-autoplay</translation> <translation id="4103763322291513355">Bisitahin ang <strong>chrome://policy</strong> upang makita ang listahan ng mga naka-blacklist na URL at iba pang mga patakaran na ipinapatupad ng iyong system administrator.</translation> -<translation id="4115378294792113321">Magenta</translation> <translation id="4116663294526079822">Palaging payagan sa site na ito</translation> <translation id="4117700440116928470">Hindi sinusuportahan ang saklaw ng patakaran.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 pa}one{# pa}other{# pa}}</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">Mga naka-save na password</translation> <translation id="5872918882028971132">Mga Suhestyon ng Magulang</translation> <translation id="5893752035575986141">Tinatanggap ang mga credit card.</translation> -<translation id="5901630391730855834">Dilaw</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (naka-sync)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 ang ginagamit}one{# ang ginagamit}other{# ang ginagamit}}</translation> <translation id="5959728338436674663">Awtomatikong magpadala ng ilang <ph name="BEGIN_WHITEPAPER_LINK" />impormasyon sa system at content ng page<ph name="END_WHITEPAPER_LINK" /> sa Google upang makatulong na tumukoy ng mapapanganib na app at site. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">Na-block ng isang extension ang mga kahilingan sa server.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Page 1}one{Page #}other{Page #}}</translation> -<translation id="6017514345406065928">Berde</translation> <translation id="6017850046339264347">Ang mga umaatake sa <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> ay maaaring mag-install ng mga mapanlinlang na app na nagpapanggap na ibang bagay o nangongolekta ng data na maaaring gamitin upang subaybayan ka. <ph name="BEGIN_LEARN_MORE_LINK" />Matuto pa<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (naka-sync)</translation> <translation id="6027201098523975773">Maglagay ng pangalan</translation> <translation id="6040143037577758943">Isara</translation> -<translation id="6042308850641462728">Higit pa</translation> <translation id="6047233362582046994">Kung nauunawaan mo ang mga panganib sa iyong seguridad, maaari mong <ph name="BEGIN_LINK" />bisitahin ang site na ito<ph name="END_LINK" /> bago maalis ang mga mapaminsalang app.</translation> <translation id="6047927260846328439">Maaaring subukan ng content na ito na linlangin kang mag-install ng software o maghayag ng personal na impormasyon. <ph name="BEGIN_LINK" />Ipakita pa rin<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Hindi mo maaaring bisitahin ang <ph name="SITE" /> sa ngayon dahil gumagamit ng pag-pin ng certificate ang website. Karaniwang pansamantala lang ang mga error at pag-atake sa network, kaya malamang na gagana ang page na ito sa ibang pagkakataon.</translation> @@ -717,7 +709,6 @@ <translation id="6710213216561001401">Nakaraan</translation> <translation id="6710594484020273272"><I-type ang termino para sa paghahanap></translation> <translation id="6711464428925977395">May problema sa proxy server, o mali ang address.</translation> -<translation id="6727102863431372879">Itakda</translation> <translation id="674375294223700098">Hindi alam na error sa certificate ng server</translation> <translation id="6753269504797312559">Halaga ng patakaran</translation> <translation id="6757797048963528358">Nag-sleep ang iyong device.</translation> @@ -801,7 +792,6 @@ <translation id="7518003948725431193">Walang webpage na nahanap para sa web address:<ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">Hindi pribado ang iyong koneksyon sa site na ito</translation> -<translation id="7535087603100972091">Value</translation> <translation id="7537536606612762813">Kinakailangan</translation> <translation id="7542403920425041731">Kapag nagkumpirma ka, ibabahagi ang mga detalye ng iyong card sa site na ito.</translation> <translation id="7542995811387359312">Hindi pinagana ang awtomatikong pagpuno ng credit card dahil ang form na ito ay hindi gumagamit ng secure na koneksyon.</translation> @@ -812,7 +802,6 @@ <translation id="7567204685887185387">Hindi mapatunayan ng server na ito na ito ay <ph name="DOMAIN" />; maaaring mapanlokong ibinigay ang certificate ng seguridad nito. Maaaring dulot ito ng maling configuration o isang umaatake na hinahadlangan ang iyong koneksyon.</translation> <translation id="7568593326407688803">Ang pahinang ito ay nasa<ph name="ORIGINAL_LANGUAGE" />Gusto mong isalin ito?</translation> <translation id="7569952961197462199">Alisin ang credit card sa Chrome?</translation> -<translation id="7569983096843329377">Itim</translation> <translation id="7578104083680115302">Magbayad nang mabilis sa mga site at app sa iba't ibang device gamit ang mga card na na-save mo sa Google.</translation> <translation id="7588950540487816470">Pisikal na Web</translation> <translation id="7592362899630581445">Lumabag ang certificate ng server sa limitasyon sa pangalan.</translation> @@ -864,7 +853,6 @@ <translation id="79338296614623784">Maglagay ng wastong numero ng telepono</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">Wala pang bisa ang certificate ng server.</translation> -<translation id="7942349550061667556">Pula</translation> <translation id="7947285636476623132">Tingnan ang iyong taon ng pag-expire at subukang muli</translation> <translation id="7951415247503192394">(32-bit)</translation> <translation id="7956713633345437162">Mga bookmark sa mobile</translation> @@ -957,7 +945,6 @@ <translation id="8870413625673593573">Recently Closed</translation> <translation id="8874824191258364635">Maglagay ng wastong numero ng card</translation> <translation id="8876793034577346603">Nabigong ma-parse ang configuration ng network.</translation> -<translation id="8889402386540077796">Hue</translation> <translation id="8891727572606052622">Di-wastong mode ng proxy.</translation> <translation id="889901481107108152">Paumanhin, hindi available ang eksperimentong ito sa iyong platform.</translation> <translation id="8903921497873541725">Mag-zoom in</translation> @@ -966,7 +953,6 @@ <translation id="8938939909778640821">Mga tinatanggap na credit at prepaid card</translation> <translation id="8957210676456822347">Pagpapahintulot sa Captive Portal</translation> <translation id="8971063699422889582">Nag-expire na ang certificate ng server.</translation> -<translation id="8986494364107987395">Awtomatikong ipadala ang mga istatistika ng paggamit at mga ulat ng pag-crash sa Google</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">Ang susunod na site ay naglalaman ng mga mapanirang program</translation> <translation id="8997023839087525404">Nagpakita ang server ng certificate na hindi inihayag sa publiko gamit ang patakaran sa Transparency ng Certificate. Kinakailangan ito para sa ilang certificate, upang matiyak na mapagkakatiwalaan ang mga ito at maprotektahan laban sa mga umaatake.</translation> @@ -982,7 +968,6 @@ <translation id="9049981332609050619">Tinangka mong maabot ang <ph name="DOMAIN" />, ngunit nagpakita ang server ng isang di-wastong certificate.</translation> <translation id="9050666287014529139">Passphrase</translation> <translation id="9065203028668620118">I-edit</translation> -<translation id="9068849894565669697">Pumili ng kulay</translation> <translation id="9069693763241529744">Na-block ng isang extension</translation> <translation id="9076283476770535406">Maaaring mayroon itong mature content</translation> <translation id="9078964945751709336">Nangangailangan ng higit pang impormasyon</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb index 5cecc2c..4059a69 100644 --- a/components/strings/components_strings_fr.xtb +++ b/components/strings/components_strings_fr.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">En attente de connexion…</translation> <translation id="153384715582417236">C'est tout !</translation> <translation id="1549470594296187301">Vous devez activer JavaScript pour utiliser cette fonctionnalité.</translation> -<translation id="1555130319947370107">Bleu</translation> <translation id="1559528461873125649">Fichier ou répertoire inexistant</translation> <translation id="1583429793053364125">Une erreur s'est produite lors de l'affichage de la page Web.</translation> <translation id="1592005682883173041">Accès aux données locales</translation> <translation id="1594030484168838125">Sélectionner</translation> -<translation id="161042844686301425">Cyan</translation> <translation id="1620510694547887537">Appareil photo</translation> <translation id="1629803312968146339">Voulez-vous que cette carte soit enregistrée dans Chrome ?</translation> <translation id="1639239467298939599">Chargement en cours</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Saisie automatique</translation> <translation id="2710942282213947212">Un logiciel installé sur votre ordinateur empêche Chromium de se connecter au Web de manière sécurisée</translation> <translation id="2712173769900027643">Demander l'autorisation</translation> -<translation id="2713444072780614174">Blanc</translation> <translation id="2720342946869265578">À proximité</translation> <translation id="2721148159707890343">Demande réussie.</translation> <translation id="2728127805433021124">Le certificat du serveur a été signé avec un algorithme de signature faible.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">Aucun résultat de recherche n'a été trouvé.</translation> <translation id="3305707030755673451">Vos données ont été chiffrées avec votre phrase secrète de synchronisation le <ph name="TIME" />. Saisissez-la pour lancer la synchronisation.</translation> <translation id="3320021301628644560">Ajouter une adresse de facturation</translation> -<translation id="3329013043687509092">Saturation</translation> <translation id="333371639341676808">Empêcher cette page de générer des boîtes de dialogue supplémentaires</translation> <translation id="3338095232262050444">Sécurisé</translation> <translation id="3340978935015468852">paramètres</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">Le numéro de série de l'appareil n'est pas valide.</translation> <translation id="410351446219883937">Lecture automatique</translation> <translation id="4103763322291513355">Accédez à <strong>chrome://policy</strong> pour consulter une liste des URL ajoutées à la liste noire et des autres règles définies par votre administrateur système.</translation> -<translation id="4115378294792113321">Magenta</translation> <translation id="4116663294526079822">Toujours autoriser sur ce site</translation> <translation id="4117700440116928470">La portée de la règle n'est pas compatible.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 autre}one{# autre}other{# autres}}</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">Mots de passe enregistrés</translation> <translation id="5872918882028971132">Suggestions des parents</translation> <translation id="5893752035575986141">Les cartes de crédit sont acceptées.</translation> -<translation id="5901630391730855834">Jaune</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (synchronisés)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 en cours d'utilisation}one{# en cours d'utilisation}other{# en cours d'utilisation}}</translation> <translation id="5959728338436674663">Envoyer automatiquement <ph name="BEGIN_WHITEPAPER_LINK" />des informations système et du contenu de page<ph name="END_WHITEPAPER_LINK" /> à Google afin de faciliter la détection d'applications et de sites dangereux. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">Les requêtes vers le serveur ont été bloquées par une extension.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Page 1}one{Page #}other{Page #}}</translation> -<translation id="6017514345406065928">Vert</translation> <translation id="6017850046339264347">Les pirates informatiques qui contrôlent le site <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> peuvent installer des applications trompeuses se faisant passer pour d'autres, ou collecter des données afin de vous surveiller. <ph name="BEGIN_LEARN_MORE_LINK" />En savoir plus<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (synchronisés)</translation> <translation id="6027201098523975773">Saisissez un nom</translation> <translation id="6040143037577758943">Fermer</translation> -<translation id="6042308850641462728">Plus</translation> <translation id="6047233362582046994">Si vous êtes conscient des risques auxquels vous vous exposez, vous pouvez <ph name="BEGIN_LINK" />consulter ce site<ph name="END_LINK" /> avant que les applications dangereuses aient été supprimées.</translation> <translation id="6047927260846328439">Ce contenu peut vous inciter à installer un logiciel ou vous soutirer des informations personnelles. <ph name="BEGIN_LINK" />Je souhaite y accéder malgré tout.<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Le site <ph name="SITE" /> est actuellement inaccessible, car il utilise l'épinglage des certificats. Les erreurs réseau et les attaques sont généralement temporaires. Vous devriez donc pouvoir accéder à cette page plus tard.</translation> @@ -717,7 +709,6 @@ <translation id="6710213216561001401">Précédent</translation> <translation id="6710594484020273272"><Saisissez le terme de recherche></translation> <translation id="6711464428925977395">Le serveur proxy présente une erreur, ou l'adresse est incorrecte.</translation> -<translation id="6727102863431372879">Définir</translation> <translation id="674375294223700098">Erreur inconnue liée au certificat du serveur.</translation> <translation id="6753269504797312559">Valeur de la règle</translation> <translation id="6757797048963528358">Votre appareil s'est mis en veille.</translation> @@ -801,7 +792,6 @@ <translation id="7518003948725431193">Aucune page Web trouvée à l'adresse :<ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">Votre connexion à ce site n'est pas privée</translation> -<translation id="7535087603100972091">Valeur</translation> <translation id="7537536606612762813">Obligatoire</translation> <translation id="7542403920425041731">Une fois la validation terminée, les informations relatives à votre carte seront partagées avec ce site.</translation> <translation id="7542995811387359312">La saisie automatique des numéros de carte de paiement est désactivée, car la connexion utilisée par ce formulaire n'est pas sécurisée.</translation> @@ -812,7 +802,6 @@ <translation id="7567204685887185387">Impossible de vérifier sur le serveur qu'il s'agit bien du domaine <ph name="DOMAIN" />. Il se peut que son certificat de sécurité ait été émis de manière frauduleuse. Cela peut être dû à une mauvaise configuration ou bien à l'interception de votre connexion par un pirate informatique.</translation> <translation id="7568593326407688803">Cette page est en<ph name="ORIGINAL_LANGUAGE" />Voulez-vous la traduire ?</translation> <translation id="7569952961197462199">Supprimer les données de carte de paiement de Chrome ?</translation> -<translation id="7569983096843329377">Noir</translation> <translation id="7578104083680115302">Payez rapidement sur des sites et dans des applications sur tous vos appareils au moyen de cartes que vous avez enregistrées sur Google.</translation> <translation id="7588950540487816470">Web physique</translation> <translation id="7592362899630581445">Le certificat du serveur ne respecte pas les restrictions de noms.</translation> @@ -864,7 +853,6 @@ <translation id="79338296614623784">Saisissez un numéro de téléphone valide</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">Le certificat du serveur n'est pas encore valide.</translation> -<translation id="7942349550061667556">Rouge</translation> <translation id="7947285636476623132">Veuillez vérifier l'année d'expiration, puis réessayer</translation> <translation id="7951415247503192394">(32 bits)</translation> <translation id="7956713633345437162">Favoris sur mobile</translation> @@ -957,7 +945,6 @@ <translation id="8870413625673593573">Récemment fermés</translation> <translation id="8874824191258364635">Saisissez un numéro de carte valide</translation> <translation id="8876793034577346603">Échec de l'analyse de la configuration du réseau.</translation> -<translation id="8889402386540077796">Teinte</translation> <translation id="8891727572606052622">Mode proxy non valide.</translation> <translation id="889901481107108152">Désolé, cette fonctionnalité expérimentale n'est pas disponible pour votre plate-forme.</translation> <translation id="8903921497873541725">Zoom avant</translation> @@ -966,7 +953,6 @@ <translation id="8938939909778640821">Cartes de crédit et cartes prépayées acceptées</translation> <translation id="8957210676456822347">Autorisation du portail captif</translation> <translation id="8971063699422889582">Le certificat du serveur a expiré.</translation> -<translation id="8986494364107987395">Envoyer automatiquement les statistiques d'utilisation et les rapports d'erreur à Google</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">Le site Web que vous allez ouvrir contient des programmes dangereux</translation> <translation id="8997023839087525404">Le certificat présenté par le serveur n'a pas été communiqué au public. Selon les règles de transparence des certificats, certains certificats doivent obligatoirement être communiqués publiquement pour garantir qu'ils sont dignes de confiance et qu'ils protègent contre les individus malveillants.</translation> @@ -982,7 +968,6 @@ <translation id="9049981332609050619">Vous avez tenté de contacter <ph name="DOMAIN" />, mais le certificat présenté par le serveur est incorrect.</translation> <translation id="9050666287014529139">Phrase secrète</translation> <translation id="9065203028668620118">Modifier</translation> -<translation id="9068849894565669697">Sélectionner couleur</translation> <translation id="9069693763241529744">Bloqué par une extension</translation> <translation id="9076283476770535406">Il est possible qu'il comporte du contenu réservé aux adultes</translation> <translation id="9078964945751709336">Veuillez fournir d'autres informations</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb index 3d1867a..8243015 100644 --- a/components/strings/components_strings_gu.xtb +++ b/components/strings/components_strings_gu.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">કનેક્શનની રાહ જોઈ રહ્યાં છીએ...</translation> <translation id="153384715582417236">હમણાં માટે બસ આટલું પૂરતું છે</translation> <translation id="1549470594296187301">આ સુવિધાનો ઉપયોગ કરવા માટે JavaScript સક્ષમ કરેલ હોવી આવશ્યક છે.</translation> -<translation id="1555130319947370107">વાદળી</translation> <translation id="1559528461873125649">આવી કોઈ ફાઇલ અથવા નિર્દેશિકા નથી</translation> <translation id="1583429793053364125">આ વેબપૃષ્ઠ પ્રદર્શિત કરતી વખતે કંઇક ખોટું થયું.</translation> <translation id="1592005682883173041">સ્થાનિક ડેટા ઍક્સેસ</translation> <translation id="1594030484168838125">પસંદ કરો</translation> -<translation id="161042844686301425">સ્યાન</translation> <translation id="1620510694547887537">કૅમેરો</translation> <translation id="1629803312968146339">શું તમે ઇચ્છો છો કે Chrome આ કાર્ડ સાચવે?</translation> <translation id="1639239467298939599">લોડ કરી રહ્યું છે</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">સ્વતઃભરો</translation> <translation id="2710942282213947212">તમારા કમ્પ્યુટરમાંનું સૉફ્ટવેર Chromiumને સુરક્ષિત રીતે વેબ સાથે કનેક્ટ થવાથી રોકી રહ્યું છે</translation> <translation id="2712173769900027643">પરવાનગી માગો</translation> -<translation id="2713444072780614174">શ્વેત</translation> <translation id="2720342946869265578">નજીકના</translation> <translation id="2721148159707890343">વિનંતી સફળ થઇ</translation> <translation id="2728127805433021124">સર્વરનું પ્રમાણપત્ર એક નબળા હસ્તાક્ષર અલ્ગોરિધમનો ઉપયોગ કરીને હસ્તાક્ષરિત કરેલું છે.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">કોઈ શોધ પરિણામો મળ્યાં નથી</translation> <translation id="3305707030755673451">તમારો ડેટા <ph name="TIME" /> ના રોજ તમારા સમન્વયન પાસફ્રેઝ સાથે એન્ક્રિપ્ટ કરવામાં આવ્યો હતો. સમન્વયન શરૂ કરવા માટે તે દાખલ કરો.</translation> <translation id="3320021301628644560">બિલિંગ સરનામું ઉમેરો</translation> -<translation id="3329013043687509092">સંતૃપ્તતા</translation> <translation id="333371639341676808">આ પૃષ્ઠને વધારાનાં સંવાદો બનાવવાથી રોકો.</translation> <translation id="3338095232262050444">સુરક્ષિત</translation> <translation id="3340978935015468852">સેટિંગ્સ</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">ઉપકરણ અનુક્ર્માંક નંબર અમાન્ય છે</translation> <translation id="410351446219883937">ઑટોપ્લે</translation> <translation id="4103763322291513355">બ્લેકલિસ્ટ કરેલા URL ની સૂચિ અને તમારા સિસ્ટમ વ્યવસ્થાપક દ્વારા લાગુ અન્ય નીતિઓ જોવા માટે <strong>chrome://policy</strong> ની મુલાકાત લો.</translation> -<translation id="4115378294792113321">કિરમજી</translation> <translation id="4116663294526079822">હંમેશા આ સાઇટ પર મંજૂરી આપો</translation> <translation id="4117700440116928470">નીતિ મર્યાદા સમર્થિત નથી.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 અન્ય}one{# અન્ય}other{# અન્ય}}</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">સાચવેલા પાસવર્ડ્સ</translation> <translation id="5872918882028971132">પેરેન્ટ સૂચનો</translation> <translation id="5893752035575986141">ક્રેડિટ કાર્ડ સ્વીકારવામાં આવે છે.</translation> -<translation id="5901630391730855834">પીળો</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (સમન્વયિત)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 ઉપયોગમાં છે}one{# ઉપયોગમાં છે}other{# ઉપયોગમાં છે}}</translation> <translation id="5959728338436674663">જોખમી અૅપ્લિકેશનો અને સાઇટ્સ શોધવામાં સહાય કરવા માટે Google ને કેટલીક <ph name="BEGIN_WHITEPAPER_LINK" />સિસ્ટમ માહિતી અને પૃષ્ઠ સામગ્રી<ph name="END_WHITEPAPER_LINK" /> આપમેળે મોકલો. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">સર્વર પરની વિનંતિઓને એક્સ્ટેંશન દ્વારા અવરોધિત કરવામાં આવી છે.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{પૃષ્ઠ 1}one{પૃષ્ઠ #}other{પૃષ્ઠ #}}</translation> -<translation id="6017514345406065928">લીલો</translation> <translation id="6017850046339264347">હુમલાખોરો <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> પર ભ્રામક ઍપ્લિકેશન ઇન્સ્ટૉલ કરી શકે છે જે કંઈક બીજું હોવાનો ડોળ કરે છે અથવા તમને ટ્રૅક કરવા માટે ઉપયોગમાં લઈ શકાય તેવો ડેટા એકત્રિત કરી શકે છે. <ph name="BEGIN_LEARN_MORE_LINK" />વધુ જાણો<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (સમન્વયિત)</translation> <translation id="6027201098523975773">એક નામ દાખલ કરો</translation> <translation id="6040143037577758943">બંધ કરો</translation> -<translation id="6042308850641462728">વધુ</translation> <translation id="6047233362582046994">જો તમે તમારી સુરક્ષાના જોખમોને સમજો છો, તો તમે જોખમકારક ઍપ્લિકેશનો દૂર કરતા પહેલા <ph name="BEGIN_LINK" />આ સાઇટની મુલાકાત<ph name="END_LINK" /> લઈ શકો છો.</translation> <translation id="6047927260846328439">આ કન્ટેન્ટ કદાચ સૉફ્ટવેર ઇન્સ્ટૉલ કરવા માટે અથવા વ્યક્તિગત માહિતી કઢાવવા માટે તમારી સાથે કપટ કરવાનો પ્રયાસ કરી શકે છે. <ph name="BEGIN_LINK" />છતાં પણ બતાવો<ph name="END_LINK" /></translation> <translation id="6051221802930200923">તમે અત્યારે આ <ph name="SITE" />ની મુલાકાત લઈ શકતાં નથી કારણ કે આ વેબસાઇટ પ્રમાણપત્ર પિનિંગનો ઉપયોગ કરે છે. નેટવર્કમાં ભૂલ આવવી અને હુમલા થવા સામાન્ય રીતે અસ્થાયી હોય છે, તેથી આ પેજ સંભવિત રૂપે થોડા સમય પછી કાર્ય કરશે.</translation> @@ -717,7 +709,6 @@ <translation id="6710213216561001401">પહેલાનું</translation> <translation id="6710594484020273272"><શોધ શબ્દ લખો></translation> <translation id="6711464428925977395">પ્રોક્સી સર્વરમાં કંઈક ખોટું થયું છે અથવા તો સરનામું ખોટું છે.</translation> -<translation id="6727102863431372879">સેટ કરો</translation> <translation id="674375294223700098">અજ્ઞાત સર્વર પ્રમાણપત્ર ભૂલ.</translation> <translation id="6753269504797312559">નીતિ મૂલ્ય</translation> <translation id="6757797048963528358">તમારું ઉપકરણ નિષ્ક્રિય થઈ ગયું હતું.</translation> @@ -801,7 +792,6 @@ <translation id="7518003948725431193">વેબ સરનામાં માટે કોઈ વેબપેજ મળ્યું નથી: <ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">આ સાઇટ પરનું તમારું કનેક્શન ખાનગી નથી</translation> -<translation id="7535087603100972091">મૂલ્ય</translation> <translation id="7537536606612762813">ફરજિયાત</translation> <translation id="7542403920425041731">એકવાર તમે પુષ્ટિ કરી લો તે પછી, આ સાઇટ સાથે તમારા કાર્ડની વિગતો શેર કરવામાં આવશે.</translation> <translation id="7542995811387359312">આપમેળે ક્રેડિટ કાર્ડ ભરણ અક્ષમ કર્યું છે કારણ કે આ ફોર્મ સુરક્ષિત કનેક્શનનો ઉપયોગ કરતું નથી.</translation> @@ -812,7 +802,6 @@ <translation id="7567204685887185387">આ સર્વર સાબિત કરી શક્યું નથી કે તે <ph name="DOMAIN" /> છે; તેનું સુરક્ષા પ્રમાણપત્ર કપટપૂર્વક રજૂ કરવામાં આવેલ હોઈ શકે છે. આ કોઈ ખોટી ગોઠવણીને કારણે થયું હશે અથવા કોઈ હુમલાખોર તમારા કનેક્શનને અટકાવી રહ્યો છે.</translation> <translation id="7568593326407688803">આ પૃષ્ઠ<ph name="ORIGINAL_LANGUAGE" />માં છે શું તમે તેને અનુવાદિત કરવા માંગો છો?</translation> <translation id="7569952961197462199">Chrome માંથી ક્રેડિટ કાર્ડ દૂર કરીએ?</translation> -<translation id="7569983096843329377">શ્યામ</translation> <translation id="7578104083680115302">તમે Google સાથે સાચવ્યાં છે તે કાર્ડ્સનો ઉપયોગ કરીને સમગ્ર ઉપકરણોમાં સાઇટ્સ અને ઍપ્લિકેશનો પર ઝડપથી ચુકવણી કરો.</translation> <translation id="7588950540487816470">વાસ્તવિક વેબ</translation> <translation id="7592362899630581445">સર્વરનું પ્રમાણપત્ર, નામ નિગ્રહોનું ઉલ્લંઘન કરે છે.</translation> @@ -864,7 +853,6 @@ <translation id="79338296614623784">એક માન્ય ફોન નંબર દાખલ કરો</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">સર્વરનું પ્રમાણપત્ર હજી માન્ય નથી.</translation> -<translation id="7942349550061667556">લાલ</translation> <translation id="7947285636476623132">તમારું સમાપ્તિ વર્ષ તપાસો અને ફરી પ્રયાસ કરો</translation> <translation id="7951415247503192394">(32-બિટ)</translation> <translation id="7956713633345437162">મોબાઇલ બુકમાર્ક્સ</translation> @@ -957,7 +945,6 @@ <translation id="8870413625673593573">તાજેતરમાં બંધ કરેલા</translation> <translation id="8874824191258364635">એક માન્ય કાર્ડ નંબર દાખલ કરો</translation> <translation id="8876793034577346603">નેટવર્ક ગોઠવણી વિશ્લેષિત થવામાં નિષ્ફળ થઇ.</translation> -<translation id="8889402386540077796">હ્યુ</translation> <translation id="8891727572606052622">અમાન્ય પ્રોક્સી મોડ.</translation> <translation id="889901481107108152">માફ કરશો, આ પ્રયોગ તમારા પ્લેટફોર્મ પર ઉપલબ્ધ નથી.</translation> <translation id="8903921497873541725">ઝૂમ વધારો</translation> @@ -966,7 +953,6 @@ <translation id="8938939909778640821">સ્વીકૃત ક્રેડિટ અને પ્રીપેઇડ કાર્ડ</translation> <translation id="8957210676456822347">કૅપ્ટિવ પોર્ટલ અધિકૃતતા</translation> <translation id="8971063699422889582">સર્વરના પ્રમાણપત્રની સમયસીમા સમાપ્ત થઈ છે.</translation> -<translation id="8986494364107987395">ઉપયોગિતા આંકડાઓ અને ક્રેશ રિપોર્ટ્સ Google ને આપમેળે મોકલો</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">સાઇટમાં આગળ હાનિકારક પ્રોગ્રામ્સ છે</translation> <translation id="8997023839087525404">સર્વરે એવું પ્રમાણપત્ર પ્રસ્તુત કર્યું કે જે પ્રમાણપત્ર પારદર્શિતા નીતિનો ઉપયોગ કરીને સાર્વજનિક રીતે જાહેર કર્યું ન હતું. આ કેટલાક પ્રમાણપત્રો માટે એ ખાતરી કરવા હેતુ આવશ્યક છે કે તેઓ વિશ્વસનીય છે અને હુમલાખારો સામે રક્ષણ કરે છે.</translation> @@ -982,7 +968,6 @@ <translation id="9049981332609050619">તમે <ph name="DOMAIN" /> સુધી પહોંચવાનો પ્રયાસ કર્યો, પરંતુ સર્વરે અમાન્ય પ્રમાણપત્ર પ્રસ્તુત કર્યું. </translation> <translation id="9050666287014529139">પાસફ્રેઝ</translation> <translation id="9065203028668620118">સંપાદન</translation> -<translation id="9068849894565669697">રંગ પસંદ કરો</translation> <translation id="9069693763241529744">એક્સ્ટેન્શન દ્વારા અવરોધિત કરેલ છે</translation> <translation id="9076283476770535406">તેમાં વયસ્ક સામગ્રી હોઈ શકે છે</translation> <translation id="9078964945751709336">વધુ માહિતી આવશ્યક</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb index ed82a91..e4ab1ef 100644 --- a/components/strings/components_strings_hi.xtb +++ b/components/strings/components_strings_hi.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">कनेक्शन के इंतज़ार में…</translation> <translation id="153384715582417236">अभी के लिए हो गया</translation> <translation id="1549470594296187301">इस सुविधा का उपयोग करने के लिए JavaScript को सक्षम किया जाना चाहिए.</translation> -<translation id="1555130319947370107">नीला</translation> <translation id="1559528461873125649">कोई ऐसी फ़ाइल या निर्देशिका नहीं है</translation> <translation id="1583429793053364125">यह वेबपेज प्रदर्शित करते समय कोई समस्या हुई.</translation> <translation id="1592005682883173041">स्थानीय डेटा एक्सेस</translation> <translation id="1594030484168838125">चुनें</translation> -<translation id="161042844686301425">स्यान</translation> <translation id="1620510694547887537">कैमरा</translation> <translation id="1629803312968146339">क्या आप चाहते हैं कि Chrome इस कार्ड को सहेजे?</translation> <translation id="1639239467298939599">लोड हो रहा है</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">ऑटोमैटिक भरना</translation> <translation id="2710942282213947212">आपके कंप्यूटर पर मौजूद सॉफ़्टवेयर क्रोमियम को सुरक्षित तरीके से वेब से जुड़ने से रोक रहा है</translation> <translation id="2712173769900027643">अनुमति मांगें</translation> -<translation id="2713444072780614174">सफ़ेद</translation> <translation id="2720342946869265578">आस-पास</translation> <translation id="2721148159707890343">अनुरोध सफल रहा</translation> <translation id="2728127805433021124">सर्वर का प्रमाणपत्र एक कमज़ोर हस्ताक्षर एल्गोरिदम का उपयोग करके हस्ताक्षरित किया गया है.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">कोई खोज परिणाम नहीं मिला</translation> <translation id="3305707030755673451">आपका डेटा आपके समन्वयन पासफ़्रेज़ के साथ <ph name="TIME" /> को एन्क्रिप्ट किया गया था. समन्वयन शुरू करने के लिए इसे डालें.</translation> <translation id="3320021301628644560">बिलिंग पता जोड़ें</translation> -<translation id="3329013043687509092">संतृप्तता</translation> <translation id="333371639341676808">इस पेज को अतिरिक्त ब्लॉग बनाने से रोकें.</translation> <translation id="3338095232262050444">सुरक्षित</translation> <translation id="3340978935015468852">सेटिंग</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">डिवाइस की क्रम संख्या अमान्य है</translation> <translation id="410351446219883937">स्वतः चलाएं</translation> <translation id="4103763322291513355">काली सूची में डाले गए URL तथा आपके सिस्टम व्यवस्थापक द्वारा लागू की गई अन्य नीतियों को देखने के लिए <strong>chrome://policy</strong> पर जाएं.</translation> -<translation id="4115378294792113321">मैजेंटा</translation> <translation id="4116663294526079822">इस साइट पर हमेशा अनुमति दें</translation> <translation id="4117700440116928470">नीति क्षेत्र समर्थित नहीं है.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 अन्य}one{# अन्य}other{# अन्य}}</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">सहेजे गए पासवर्ड</translation> <translation id="5872918882028971132">अभिभावक सुझाव</translation> <translation id="5893752035575986141">क्रेडिट कार्ड स्वीकार किए जाते हैं.</translation> -<translation id="5901630391730855834">पीला</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (सिंक किया गया)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 उपयोग में है}one{# उपयोग में हैं}other{# उपयोग में हैं}}</translation> <translation id="5959728338436674663">Google को कुछ <ph name="BEGIN_WHITEPAPER_LINK" />सिस्टम संबंधी जानकारी और पेज सामग्री<ph name="END_WHITEPAPER_LINK" /> अपने आप भेजें ताकि खतरनाक ऐप्लिकेशन और साइटों का पता लगाने में सहायता मिल सके. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">सर्वर से किए गए अनुरोधों को एक्सटेंशन द्वारा अवरुद्ध कर दिया गया है.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{पेज 1}one{पेज #}other{पेज #}}</translation> -<translation id="6017514345406065928">हरा</translation> <translation id="6017850046339264347"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> पर मौजूद हमलावर ऐसे भ्रामक ऐप्लिकेशन इंस्टॉल कर सकते हैं जो कुछ और होने का दावा करते हैं या ऐसा डेटा एकत्रित करते हैं जिसका उपयोग आप पर नज़र रखने के लिए किया जा सके. <ph name="BEGIN_LEARN_MORE_LINK" />अधिक जानें<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (सिंक किए गए)</translation> <translation id="6027201098523975773">नाम डालें</translation> <translation id="6040143037577758943">बंद करें</translation> -<translation id="6042308850641462728">अधिक</translation> <translation id="6047233362582046994">अगर आप अपनी सुरक्षा में होने वाले जोखिमों को समझते हैं, तो खतरनाक ऐप्लिकेशन निकाले जाने से पहले आप <ph name="BEGIN_LINK" />इस साइट पर जा<ph name="END_LINK" /> सकते हैं.</translation> <translation id="6047927260846328439">यह सामग्री आपसे धोखे से सॉफ़्टवेयर इंस्टॉल करवाने या व्यक्तिगत जानकारी का खुलासा करवाने की कोशिश कर सकती है. <ph name="BEGIN_LINK" />फिर भी दिखाएं<ph name="END_LINK" /></translation> <translation id="6051221802930200923">आप इस समय <ph name="SITE" /> पर नहीं जा सकते हैं क्योंकि वेबसाइट प्रमाणपत्र पिनिंग का उपयोग करती है. नेटवर्क की गड़बड़ियां और हमले आमतौर पर कुछ देर के लिए होते हैं, इसलिए यह पेज शायद बाद में ठीक से काम करेगा.</translation> @@ -717,7 +709,6 @@ <translation id="6710213216561001401">पिछला</translation> <translation id="6710594484020273272"><खोज शब्द लिखें></translation> <translation id="6711464428925977395">प्रॉक्सी सर्वर के साथ कुछ गलत है या पता गलत है.</translation> -<translation id="6727102863431372879">सेट करें</translation> <translation id="674375294223700098">अज्ञात सर्वर प्रमाणपत्र गड़बड़ी.</translation> <translation id="6753269504797312559">नीति मान</translation> <translation id="6757797048963528358">आपका डिवाइस निष्क्रिय हो गया है.</translation> @@ -801,7 +792,6 @@ <translation id="7518003948725431193">इस वेब पते के लिए कोई वेब पेज नहीं मिला था: <ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">इस साइट से आपका कनेक्शन निजी नहीं है</translation> -<translation id="7535087603100972091">मान</translation> <translation id="7537536606612762813">आवश्यक</translation> <translation id="7542403920425041731">आपकी तरफ से पुष्टि हो जाने पर, आपके कार्ड के विवरण इस साइट के साथ साझा किए जाएंगे.</translation> <translation id="7542995811387359312">स्वतः क्रेडिट कार्ड भरना अक्षम किया गया है क्योंकि यह फ़ॉर्म किसी सुरक्षित कनेक्शन का उपयोग नहीं करता है.</translation> @@ -812,7 +802,6 @@ <translation id="7567204685887185387">यह सर्वर यह प्रमाणित नहीं कर सका कि यह <ph name="DOMAIN" /> है; हो सकता है इसका सुरक्षा प्रमाणपत्र धोखे से जारी किया गया हो. ऐसा गलत कॉन्फ़िगरेशन के कारण या किसी आक्रमणकर्ता द्वारा आपके कनेक्शन में अवरोध डालने के कारण हो सकता है.</translation> <translation id="7568593326407688803">यह पृष्ठ<ph name="ORIGINAL_LANGUAGE" />में है क्या आप इसका अनुवाद करना चाहेंगे?</translation> <translation id="7569952961197462199">Chrome से क्रेडिट कार्ड निकालें?</translation> -<translation id="7569983096843329377">काला</translation> <translation id="7578104083680115302">Google के साथ सहेजे गए कार्ड का उपयोग करके डिवाइसों में मौजूद साइटों और ऐप्स पर तुरंत भुगतान करें.</translation> <translation id="7588950540487816470">जीता-जागता वेब</translation> <translation id="7592362899630581445">सर्वर का प्रमाणपत्र नाम संबंधी प्रतिबंधों का उल्लंघन करता है.</translation> @@ -864,7 +853,6 @@ <translation id="79338296614623784">मान्य फ़ोन नंबर डालें</translation> <translation id="7935318582918952113">DOM डिस्टिलर</translation> <translation id="7938958445268990899">सर्वर का प्रमाणपत्र अभी तक मान्य नहीं है.</translation> -<translation id="7942349550061667556">लाल</translation> <translation id="7947285636476623132">अपना समाप्ति वर्ष जांचें और फिर से कोशिश करें</translation> <translation id="7951415247503192394">(32-बिट)</translation> <translation id="7956713633345437162">मोबाइल बुकमार्क</translation> @@ -958,7 +946,6 @@ <translation id="8870413625673593573">हाल ही में बंद किए गए</translation> <translation id="8874824191258364635">मान्य कार्ड संख्या डालें</translation> <translation id="8876793034577346603">नेटवर्क कॉन्फ़िगरेशन पार्स होने में विफल रहा.</translation> -<translation id="8889402386540077796">रंग</translation> <translation id="8891727572606052622">अमान्य प्रॉक्सी मोड.</translation> <translation id="889901481107108152">क्षमा करें, यह प्रयोग आपके प्लेटफ़ॉर्म पर उपलब्ध नहीं है.</translation> <translation id="8903921497873541725">ज़ूम इन करें</translation> @@ -967,7 +954,6 @@ <translation id="8938939909778640821">स्वीकृत क्रेडिट और प्रीपेड कार्ड</translation> <translation id="8957210676456822347">कैप्टिव पोर्टल प्राधिकरण</translation> <translation id="8971063699422889582">सर्वर के प्रमाणपत्र की समय-सीमा समाप्त हो चुकी है.</translation> -<translation id="8986494364107987395">उपयोग संबंधी आंकड़े और क्रैश रिपोर्ट अपने आप Google को भेजने की अनुमति दें</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">साइट में आगे हानिकारक प्रोग्राम हैं</translation> <translation id="8997023839087525404">सर्वर ने एक प्रमाणपत्र प्रस्तुत किया है, जिसे प्रमाणपत्र पारदर्शिता पॉलिसी का उपयोग करके सार्वजनिक रूप से प्रकट नहीं किया गया था. कुछ प्रमाणपत्रों के लिए यह सुनिश्चित करना आवश्यक है कि वे विश्वसनीय हैं और आक्रमणकर्ताओं से रक्षा करते हैं.</translation> @@ -983,7 +969,6 @@ <translation id="9049981332609050619">आपने <ph name="DOMAIN" /> पर पहुंचने का प्रयास किया, लेकिन सर्वर ने एक अमान्य प्रमाणपत्र प्रस्तुत किया.</translation> <translation id="9050666287014529139">पासफ़्रेज़</translation> <translation id="9065203028668620118">संपादित करें</translation> -<translation id="9068849894565669697">रंग चुनें</translation> <translation id="9069693763241529744">किसी एक्सटेंशन से अवरोधित है</translation> <translation id="9076283476770535406">इसमें वयस्क सामग्री हो सकती है</translation> <translation id="9078964945751709336">अधिक जानकारी की आवश्यकता है</translation>
diff --git a/components/strings/components_strings_hr.xtb b/components/strings/components_strings_hr.xtb index 9b071c6a..eaa921a 100644 --- a/components/strings/components_strings_hr.xtb +++ b/components/strings/components_strings_hr.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Čekanje na uspostavu veze…</translation> <translation id="153384715582417236">To je zasad sve</translation> <translation id="1549470594296187301">Za upotrebu te značajke mora biti omogućen JavaScript.</translation> -<translation id="1555130319947370107">Plava</translation> <translation id="1559528461873125649">Nema takve datoteke ili direktorija</translation> <translation id="1583429793053364125">Nešto nije u redu s prikazivanjem ove web-stranice.</translation> <translation id="1592005682883173041">Pristup lokalnim podacima</translation> <translation id="1594030484168838125">Odaberi</translation> -<translation id="161042844686301425">Cijan</translation> <translation id="1620510694547887537">Fotoaparat</translation> <translation id="1629803312968146339">Želite li da Chrome spremi tu karticu?</translation> <translation id="1639239467298939599">Učitavanje</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Automatsko popunjavanje</translation> <translation id="2710942282213947212">Softver na računalu sprječava sigurno povezivanje Chromea s webom</translation> <translation id="2712173769900027643">Traži dopuštenje</translation> -<translation id="2713444072780614174">Bijela</translation> <translation id="2720342946869265578">U blizini</translation> <translation id="2721148159707890343">Zahtjev je uspio</translation> <translation id="2728127805433021124">Certifikat poslužitelja potpisan je slabim algoritmom potpisa.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">Nisu pronađeni rezultati pretraživanja</translation> <translation id="3305707030755673451">Vaši su podaci šifrirani vašom šifrom za sinkronizaciju <ph name="TIME" />. Unesite je da biste pokrenuli sinkronizaciju.</translation> <translation id="3320021301628644560">Dodajte adresu za naplatu</translation> -<translation id="3329013043687509092">Zasićenje</translation> <translation id="333371639341676808">Spriječite ovu stranicu od stvaranja dodatnih dijaloga.</translation> <translation id="3338095232262050444">Sigurno</translation> <translation id="3340978935015468852">postavke</translation> @@ -412,7 +408,6 @@ <translation id="4103249731201008433">Serijski broj uređaja nije važeći</translation> <translation id="410351446219883937">Automatska reprodukcija</translation> <translation id="4103763322291513355">Posjetite <strong>chrome://policy</strong> da biste vidjeli popis nedopuštenih URL-ova i druga pravila koja je nametnuo vaš administrator sustava.</translation> -<translation id="4115378294792113321">Magenta</translation> <translation id="4116663294526079822">Uvijek dopusti na ovoj web-lokaciji</translation> <translation id="4117700440116928470">Opseg pravila nije podržan.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 druga stavka}one{# druga stavka}few{# druge stavke}other{# drugih stavki}}</translation> @@ -623,7 +618,6 @@ <translation id="5869522115854928033">Spremljene zaporke</translation> <translation id="5872918882028971132">Nadređeni prijedlozi</translation> <translation id="5893752035575986141">Prihvaćaju se kreditne kartice.</translation> -<translation id="5901630391730855834">Žuta</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (sinkronizirano)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 u upotrebi}one{# u upotrebi}few{# u upotrebi}other{# u upotrebi}}</translation> <translation id="5959728338436674663">Automatski šalji Googleu neke <ph name="BEGIN_WHITEPAPER_LINK" />podatke o sustavu i sadržaj stranice<ph name="END_WHITEPAPER_LINK" /> radi otkrivanja opasnih aplikacija i web-lokacija. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -634,12 +628,10 @@ <translation id="5990559369517809815">Zahtjevi poslužitelju blokirani su proširenjem.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{1. stranica}one{#. stranica}few{#. stranica}other{#. stranica}}</translation> -<translation id="6017514345406065928">Zelena</translation> <translation id="6017850046339264347">Napadači na web-lokaciji <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> mogli bi instalirati obmanjujuće aplikacije koje se pretvaraju da su nešto drugo ili prikupljaju podatke na temelju kojih vas je moguće pratiti. <ph name="BEGIN_LEARN_MORE_LINK" />Saznajte više<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (sinkronizirano)</translation> <translation id="6027201098523975773">Unesite ime</translation> <translation id="6040143037577758943">Zatvori</translation> -<translation id="6042308850641462728">Više</translation> <translation id="6047233362582046994">Ako ste svjesni sigurnosnih rizika, možete <ph name="BEGIN_LINK" />posjetiti ovu web-lokaciju<ph name="END_LINK" /> prije uklanjanja štetnih aplikacija.</translation> <translation id="6047927260846328439">Ovaj vas sadržaj može na prijevaru pokušati navesti da instalirate softver ili odate svoje osobne podatke. <ph name="BEGIN_LINK" />Ipak prikaži<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Trenutačno ne možete otvoriti <ph name="SITE" /> jer web-lokacija upotrebljava prikvačivanje certifikata. Mrežne pogreške i napadi obično su privremeni, tako da će stranica kasnije vjerojatno funkcionirati.</translation> @@ -716,7 +708,6 @@ <translation id="6710213216561001401">Prethodno</translation> <translation id="6710594484020273272"><Upišite pojam za pretraživanje></translation> <translation id="6711464428925977395">Nešto nije u redu s proxy poslužiteljem ili adresa nije točna.</translation> -<translation id="6727102863431372879">Postavi</translation> <translation id="674375294223700098">Nepoznata pogreška certifikata poslužitelja</translation> <translation id="6753269504797312559">Vrijednost pravila</translation> <translation id="6757797048963528358">Uređaj je u stanju mirovanja.</translation> @@ -800,7 +791,6 @@ <translation id="7518003948725431193">Za web-adresu nije pronađena web-stranica:<ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">Veza s web-lokacijom nije privatna</translation> -<translation id="7535087603100972091">Vrijednost</translation> <translation id="7537536606612762813">Obavezno</translation> <translation id="7542403920425041731">Nakon što ih potvrdite, podaci o kartici dijelit će se s ovom web-lokacijom.</translation> <translation id="7542995811387359312">Automatsko popunjavanje kreditne kartice onemogućeno je jer se ovaj obrazac ne služi sigurnom vezom.</translation> @@ -811,7 +801,6 @@ <translation id="7567204685887185387">Poslužitelj nije mogao dokazati da je <ph name="DOMAIN" />; njegov sigurnosni certifikat možda je lažan. To može biti uzrokovano pogrešnom konfiguracijom ili napadom na vašu vezu.</translation> <translation id="7568593326407688803">Ova je stranica na ovom jeziku:<ph name="ORIGINAL_LANGUAGE" />Želite li je prevesti?</translation> <translation id="7569952961197462199">Želite li s Chromea ukloniti kreditnu karticu?</translation> -<translation id="7569983096843329377">Crna</translation> <translation id="7578104083680115302">Plaćajte brzo na web-lokacijama i u aplikacijama na više uređaja karticama koje ste spremili na Google.</translation> <translation id="7588950540487816470">Fizički web</translation> <translation id="7592362899630581445">Certifikat poslužitelja krši ograničenja naziva.</translation> @@ -863,7 +852,6 @@ <translation id="79338296614623784">Unesite važeći telefonski broj</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">Certifkat poslužitelja još nije valjan.</translation> -<translation id="7942349550061667556">Crvena</translation> <translation id="7947285636476623132">Provjerite godinu isteka, pa pokušajte ponovo</translation> <translation id="7951415247503192394">(32-bitni)</translation> <translation id="7956713633345437162">Mobilne oznake</translation> @@ -957,7 +945,6 @@ <translation id="8870413625673593573">Nedavno zatvoreno</translation> <translation id="8874824191258364635">Unesite važeći broj kreditne kartice</translation> <translation id="8876793034577346603">Mrežna konfiguracija nije uspješno analizirana.</translation> -<translation id="8889402386540077796">Ton</translation> <translation id="8891727572606052622">Nevažeći način proxy poslužitelja.</translation> <translation id="889901481107108152">Nažalost, ovaj eksperiment nije dostupan na vašoj platformi.</translation> <translation id="8903921497873541725">Povećaj</translation> @@ -966,7 +953,6 @@ <translation id="8938939909778640821">Prihvaćene kreditne i pretplatne kartice</translation> <translation id="8957210676456822347">Autorizacija obaveznog portala za autentifikaciju</translation> <translation id="8971063699422889582">Istekao je certifikat poslužitelja.</translation> -<translation id="8986494364107987395">Automatski šalji Googleu statistiku o upotrebi i izvješća o padu programa</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">Sljedeća web-lokacija sadrži štetne programe</translation> <translation id="8997023839087525404">Poslužitelj je prikazao certifikat koji nije javno otkriven putem pravila Transparentnost certifikata. Taj se zahtjev postavlja za neke certifikate radi provjere njihove pouzdanosti i zaštite od napada.</translation> @@ -982,7 +968,6 @@ <translation id="9049981332609050619">Pokušali ste pristupiti domeni <ph name="DOMAIN" />, ali poslužitelj je prikazao nevažeći certifikat.</translation> <translation id="9050666287014529139">Zaporka</translation> <translation id="9065203028668620118">Uredi</translation> -<translation id="9068849894565669697">Odaberite boju</translation> <translation id="9069693763241529744">Blokiralo proširenje</translation> <translation id="9076283476770535406">Možda ima sadržaj za odrasle</translation> <translation id="9078964945751709336">Potrebno je više podataka</translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb index 4809a96..3de56e7 100644 --- a/components/strings/components_strings_hu.xtb +++ b/components/strings/components_strings_hu.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Várakozás a kapcsolódásra…</translation> <translation id="153384715582417236">Egyelőre ennyi</translation> <translation id="1549470594296187301">A funkció használatához engedélyezni kell a JavaScriptet.</translation> -<translation id="1555130319947370107">Kék</translation> <translation id="1559528461873125649">Nincs ilyen fájl vagy könyvtár</translation> <translation id="1583429793053364125">Valami nem sikerült a weboldal megjelenítése során.</translation> <translation id="1592005682883173041">Helyi adatok elérése</translation> <translation id="1594030484168838125">Kiválaszt</translation> -<translation id="161042844686301425">Cián</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1629803312968146339">Szeretné, hogy a Chrome mentse ezt a kártyát?</translation> <translation id="1639239467298939599">Betöltés</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Automatikus kitöltés</translation> <translation id="2710942282213947212">A számítógépen található valamelyik szoftver megakadályozza a Chromiumot abban, hogy biztonságosan csatlakozzon az internethez</translation> <translation id="2712173769900027643">Engedély kérése</translation> -<translation id="2713444072780614174">Fehér</translation> <translation id="2720342946869265578">A közelben</translation> <translation id="2721148159707890343">Sikeres kérés</translation> <translation id="2728127805433021124">A szerver tanúsítványa gyenge aláírási algoritmussal van aláírva.</translation> @@ -300,7 +297,6 @@ <translation id="3303855915957856445">Nincs találat</translation> <translation id="3305707030755673451">Adatainak titkosítása megtörtént összetett szinkronizálási jelszavával a következő időpontban: <ph name="TIME" />. Adja meg a jelszót a szinkronizálás megkezdéséhez.</translation> <translation id="3320021301628644560">Számlázási cím hozzáadása</translation> -<translation id="3329013043687509092">Telítettség</translation> <translation id="333371639341676808">Ez az oldal ne nyisson meg további párbeszédablakokat.</translation> <translation id="3338095232262050444">Biztonságos</translation> <translation id="3340978935015468852">beállítások</translation> @@ -411,7 +407,6 @@ <translation id="4103249731201008433">Az eszköz sorozatszáma érvénytelen</translation> <translation id="410351446219883937">Automatikus lejátszás</translation> <translation id="4103763322291513355">Látogasson el a <strong>chrome://policy</strong> oldalra a feketelistán lévő URL-ek és egyéb, a rendszergazda által előírt szabályok megtekintéséhez.</translation> -<translation id="4115378294792113321">Magenta</translation> <translation id="4116663294526079822">Mindig engedélyezze ezen az oldalon</translation> <translation id="4117700440116928470">Az irányelv hatásköre nem támogatott.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 egyéb}other{# egyéb}}</translation> @@ -622,7 +617,6 @@ <translation id="5869522115854928033">Mentett jelszavak</translation> <translation id="5872918882028971132">Szülői javaslatok</translation> <translation id="5893752035575986141">Elfogadott hitelkártyák.</translation> -<translation id="5901630391730855834">Sárga</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (szinkronizálva)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 van használatban}other{# van használatban}}</translation> <translation id="5959728338436674663">Bizonyos <ph name="BEGIN_WHITEPAPER_LINK" />rendszer-információk és oldaltartalmak<ph name="END_WHITEPAPER_LINK" /> automatikus küldése a Google-nak a veszélyes alkalmazások és webhelyek felderítése érdekében. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -633,12 +627,10 @@ <translation id="5990559369517809815">A szerver felé irányuló kéréseket egy bővítmény blokkolja.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{1. oldal}other{#. oldal}}</translation> -<translation id="6017514345406065928">Zöld</translation> <translation id="6017850046339264347">A(z) <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> webhelyen lévő támadók megtévesztő alkalmazásokat telepíthetnek, amelyek más alkalmazásnak tettethetik magukat, illetve az Ön nyomon követésére alkalmas adatokat gyűjthetnek. <ph name="BEGIN_LEARN_MORE_LINK" />További információ<ph name="END_LEARN_MORE_LINK" />.</translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (szinkronizálva)</translation> <translation id="6027201098523975773">Adjon meg nevet</translation> <translation id="6040143037577758943">Bezárás</translation> -<translation id="6042308850641462728">Hosszabban</translation> <translation id="6047233362582046994">Ha tisztában van a biztonságát fenyegető kockázatokkal, a káros alkalmazások eltávolítása előtt is <ph name="BEGIN_LINK" />felkeresheti ezt a webhelyet<ph name="END_LINK" />.</translation> <translation id="6047927260846328439">Lehet, hogy ez a tartalom megpróbálja rávenni Önt szoftver telepítésére vagy személyes adatok kiadására. <ph name="BEGIN_LINK" />Megjelenítés mindenképpen<ph name="END_LINK" />.</translation> <translation id="6051221802930200923">Pillanatnyilag nem tudja felkeresni a(z) <ph name="SITE" /> webhelyet, mivel a webhely tanúsítványrögzítést használ. A hálózati hibák és támadások rendszerint átmenetiek, ezért az említett oldal működése később valószínűleg helyreáll.</translation> @@ -715,7 +707,6 @@ <translation id="6710213216561001401">Előző</translation> <translation id="6710594484020273272"><Írja be a keresési kifejezést></translation> <translation id="6711464428925977395">Valami gond van a proxyszerverrel, vagy a cím nem megfelelő.</translation> -<translation id="6727102863431372879">Beállítás</translation> <translation id="674375294223700098">Ismeretlen szervertanúsítvány-hiba.</translation> <translation id="6753269504797312559">Házirend értéke</translation> <translation id="6757797048963528358">Eszköze alvó üzemmódba váltott.</translation> @@ -799,7 +790,6 @@ <translation id="7518003948725431193">Nem található weboldal az internetcímen:<ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">A webhellyel való kapcsolata nem privát</translation> -<translation id="7535087603100972091">Érték</translation> <translation id="7537536606612762813">Kötelező</translation> <translation id="7542403920425041731">Az igazolást követően a böngésző megosztja kártyaadatait a webhellyel.</translation> <translation id="7542995811387359312">Az automatikus bankkártya-kitöltés le van tiltva, mivel ez az űrlap nem biztonságos kapcsolatot használ.</translation> @@ -810,7 +800,6 @@ <translation id="7567204685887185387">A szerver nem tudta bizonyítani, hogy valóban a(z) <ph name="DOMAIN" /> domainbe tartozik; biztonsági tanúsítványát csalással állíthatták ki. Ennek oka lehet konfigurációs hiba, vagy hogy egy támadó eltérítette az Ön kapcsolódását.</translation> <translation id="7568593326407688803">Az oldal nyelve<ph name="ORIGINAL_LANGUAGE" />Kívánja lefordítani?</translation> <translation id="7569952961197462199">Eltávolítja a hitelkártyát a Chrome-ból?</translation> -<translation id="7569983096843329377">Fekete</translation> <translation id="7578104083680115302">A Google rendszerében mentett kártyákkal gyorsan fizethet webhelyeken és alkalmazásokban bármelyik eszközén.</translation> <translation id="7588950540487816470">Fizikai web</translation> <translation id="7592362899630581445">A szervertanúsítvány sérti a névre vonatkozó megkötéseket.</translation> @@ -862,7 +851,6 @@ <translation id="79338296614623784">Érvényes telefonszámot adjon meg</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">A szerver tanúsítványa még nem érvényes.</translation> -<translation id="7942349550061667556">Piros</translation> <translation id="7947285636476623132">Ellenőrizze a lejárati évet, majd próbálja újra</translation> <translation id="7951415247503192394">(32 bites)</translation> <translation id="7956713633345437162">Mobil könyvjelzők</translation> @@ -956,7 +944,6 @@ <translation id="8870413625673593573">Mostanában bezárt</translation> <translation id="8874824191258364635">Érvényes kártyaszámot adjon meg</translation> <translation id="8876793034577346603">A hálózati konfiguráció előfeldolgozása sikertelen.</translation> -<translation id="8889402386540077796">Színárnyalat</translation> <translation id="8891727572606052622">Érvénytelen proxymód.</translation> <translation id="889901481107108152">Sajnos ez a kísérlet nem érhető el az Ön operációs rendszerén.</translation> <translation id="8903921497873541725">Nagyítás</translation> @@ -965,7 +952,6 @@ <translation id="8938939909778640821">Elfogadott hitel- és feltöltőkártyák</translation> <translation id="8957210676456822347">Hitelesítés hitelesítési portállal</translation> <translation id="8971063699422889582">A szerver tanúsítványa lejárt.</translation> -<translation id="8986494364107987395">Használati statisztikák és hibajelentések automatikus küldése a Google-nak</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">A felkeresni kívánt webhely ártalmas programokat tartalmaz</translation> <translation id="8997023839087525404">A szerver olyan tanúsítványt mutatott be, amelyet nem A tanúsítványok átláthatósága keretrendszer segítségével hoztak nyilvánosságra. Ez egyes tanúsítványoknál követelmény annak biztosítása érdekében, hogy az adott tanúsítványok megbízhatók, és védelmet nyújtanak a támadók ellen.</translation> @@ -981,7 +967,6 @@ <translation id="9049981332609050619">Megpróbálta elérni a(z) <ph name="DOMAIN" /> webhelyet, de a szerver érvénytelen tanúsítványt mutatott be.</translation> <translation id="9050666287014529139">Összetett jelszó</translation> <translation id="9065203028668620118">Szerkesztés</translation> -<translation id="9068849894565669697">Szín kiválasztása</translation> <translation id="9069693763241529744">Bővítmény tiltja</translation> <translation id="9076283476770535406">Lehet, hogy felnőtt tartalommal rendelkezik</translation> <translation id="9078964945751709336">Több információra van szükség</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb index a611737..05d0c3e 100644 --- a/components/strings/components_strings_id.xtb +++ b/components/strings/components_strings_id.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Menunggu sambungan internet...</translation> <translation id="153384715582417236">Itu saja untuk sekarang</translation> <translation id="1549470594296187301">JavaScript harus diaktifkan untuk menggunakan fitur ini.</translation> -<translation id="1555130319947370107">Biru</translation> <translation id="1559528461873125649">Tidak ada file atau direktori tersebut</translation> <translation id="1583429793053364125">Terjadi masalah sewaktu menampilkan laman web ini.</translation> <translation id="1592005682883173041">Akses Data Lokal</translation> <translation id="1594030484168838125">Pilih</translation> -<translation id="161042844686301425">Sian</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1629803312968146339">Ingin Chrome menyimpan kartu ini?</translation> <translation id="1639239467298939599">Memuat</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Isi-Otomatis</translation> <translation id="2710942282213947212">Software di komputer membuat Chromium tidak terhubung dengan aman ke web</translation> <translation id="2712173769900027643">Minta izin</translation> -<translation id="2713444072780614174">Putih</translation> <translation id="2720342946869265578">Di Sekitar</translation> <translation id="2721148159707890343">Permintaan berhasil</translation> <translation id="2728127805433021124">Sertifikat server ditandai menggunakan algoritme yang lemah.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">Hasil penelusuran tidak ditemukan</translation> <translation id="3305707030755673451">Data Anda dienkripsi dengan frasa sandi sinkronisasi pada tanggal <ph name="TIME" />. Masukkan frasa sandi untuk memulai sinkronisasi.</translation> <translation id="3320021301628644560">Tambahkan alamat penagihan</translation> -<translation id="3329013043687509092">Saturasi</translation> <translation id="333371639341676808">Cegah dialog lain dari laman ini.</translation> <translation id="3338095232262050444">Aman</translation> <translation id="3340978935015468852">setelan</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">Nomor seri perangkat tidak valid</translation> <translation id="410351446219883937">Putar otomatis</translation> <translation id="4103763322291513355">Kunjungi <strong>chrome://policy</strong> untuk melihat daftar URL yang masuk daftar hitam dan kebijakan lain yang diterapkan oleh administrator sistem Anda.</translation> -<translation id="4115378294792113321">Magenta</translation> <translation id="4116663294526079822">Selalu izinkan di situs ini</translation> <translation id="4117700440116928470">Lingkup kebijakan tidak didukung.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 lainnya}other{# lainnya}}</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">Sandi tersimpan</translation> <translation id="5872918882028971132">Saran Induk</translation> <translation id="5893752035575986141">Kartu kredit diterima.</translation> -<translation id="5901630391730855834">Kuning</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (disinkronkan)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 terpakai}other{# terpakai}}</translation> <translation id="5959728338436674663">Kirim beberapa <ph name="BEGIN_WHITEPAPER_LINK" />informasi sistem dan konten halaman<ph name="END_WHITEPAPER_LINK" /> secara otomatis ke Google untuk membantu mendeteksi aplikasi dan situs berbahaya. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">Permintaan ke server telah dicekal oleh ekstensi.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Halaman 1}other{Halaman #}}</translation> -<translation id="6017514345406065928">Hijau</translation> <translation id="6017850046339264347">Penyerang di <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> dapat menginstal aplikasi penipuan dengan berpura-pura menjadi sesuatu yang lain atau mengumpulkan data yang dapat digunakan untuk melacak Anda. <ph name="BEGIN_LEARN_MORE_LINK" />Pelajari lebih lanjut<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (disinkronkan)</translation> <translation id="6027201098523975773">Masukkan nama</translation> <translation id="6040143037577758943">Tutup</translation> -<translation id="6042308850641462728">Lainnya</translation> <translation id="6047233362582046994">Jika Anda memahami risiko keamanan tersebut, Anda dapat <ph name="BEGIN_LINK" />mengunjungi situs ini<ph name="END_LINK" /> sebelum aplikasi berbahaya tersebut dihapus.</translation> <translation id="6047927260846328439">Konten ini mungkin mencoba mengelabui Anda agar menginstal software atau mengungkapkan informasi pribadi. <ph name="BEGIN_LINK" />Tetap tampilkan<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Anda tidak dapat membuka <ph name="SITE" /> sekarang karena situs menggunakan penyematan sertifikat. Error jaringan dan serangan biasanya bersifat sementara, sehingga halaman ini mungkin akan berfungsi nanti.</translation> @@ -717,7 +709,6 @@ <translation id="6710213216561001401">Sebelumnya</translation> <translation id="6710594484020273272"><Ketik istilah penelusuran></translation> <translation id="6711464428925977395">Ada yang salah dengan server proxy, atau alamat tidak benar.</translation> -<translation id="6727102863431372879">Setel</translation> <translation id="674375294223700098">Kesalahan sertifikat server tidak dikenal.</translation> <translation id="6753269504797312559">Nilai kebijakan</translation> <translation id="6757797048963528358">Perangkat Anda sedang dalam mode tidur.</translation> @@ -801,7 +792,6 @@ <translation id="7518003948725431193">Tidak ada laman web yang ditemukan untuk alamat web:<ph name="URL" /></translation> <translation id="7521387064766892559">Javascript</translation> <translation id="7526934274050461096">Koneksi Anda ke situs ini tidak bersifat pribadi</translation> -<translation id="7535087603100972091">Nilai</translation> <translation id="7537536606612762813">Wajib</translation> <translation id="7542403920425041731">Setelah mengonfirmasi, detail kartu Anda akan dibagikan dengan situs ini.</translation> <translation id="7542995811387359312">Pengisian kartu kredit otomatis dinonaktifkan karena formulir ini tidak menggunakan sambungan aman.</translation> @@ -812,7 +802,6 @@ <translation id="7567204685887185387">Server ini tidak dapat membuktikan bahwa ini adalah <ph name="DOMAIN" />; sertifikat keamanannya mungkin telah dikeluarkan dengan curang. Hal ini disebabkan oleh kesalahan konfigurasi atau penyerang memotong sambungan Anda.</translation> <translation id="7568593326407688803">Laman ini dalam bahasa<ph name="ORIGINAL_LANGUAGE" />Ingin diterjemahkan?</translation> <translation id="7569952961197462199">Hapus kartu kredit dari Chrome?</translation> -<translation id="7569983096843329377">Hitam</translation> <translation id="7578104083680115302">Bayar di situs dan aplikasi di semua perangkat dengan cepat menggunakan kartu yang disimpan dengan Google.</translation> <translation id="7588950540487816470">Web Fisik</translation> <translation id="7592362899630581445">Sertifikat server melanggar batasan nama.</translation> @@ -864,7 +853,6 @@ <translation id="79338296614623784">Masukkan nomor telepon yang valid</translation> <translation id="7935318582918952113">Penyaring DOM</translation> <translation id="7938958445268990899">Sertifikat server belum valid.</translation> -<translation id="7942349550061667556">Merah</translation> <translation id="7947285636476623132">Periksa tahun kedaluwarsa dan coba lagi</translation> <translation id="7951415247503192394">(32 bit)</translation> <translation id="7956713633345437162">Bookmark seluler</translation> @@ -957,7 +945,6 @@ <translation id="8870413625673593573">Barusan Ditutup</translation> <translation id="8874824191258364635">Masukkan nomor kartu yang valid</translation> <translation id="8876793034577346603">Konfigurasi jaringan gagal diuraikan.</translation> -<translation id="8889402386540077796">Rona</translation> <translation id="8891727572606052622">Mode proxy tidak valid.</translation> <translation id="889901481107108152">Maaf, percobaan ini tidak tersedia di platform Anda.</translation> <translation id="8903921497873541725">Perbesar</translation> @@ -966,7 +953,6 @@ <translation id="8938939909778640821">Kartu kredit dan prabayar yang diterima</translation> <translation id="8957210676456822347">Otorisasi Portal Tawanan</translation> <translation id="8971063699422889582">Sertifikat server telah kedaluwarsa.</translation> -<translation id="8986494364107987395">Kirim statistik penggunaan dan laporan kerusakan ke Google secara otomatis</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">Situs yang akan dibuka berisi program berbahaya</translation> <translation id="8997023839087525404">Server menampilkan sertifikat yang tidak diungkapkan ke publik melalui kebijakan Transparansi Sertifikat. Ini adalah persyaratan untuk beberapa sertifikat, untuk memastikan bahwa sertifikat dapat dipercaya agar terlindung dari penyerang.</translation> @@ -982,7 +968,6 @@ <translation id="9049981332609050619">Anda berupaya menjangkau <ph name="DOMAIN" />, tetapi server menyajikan sertifikat yang tidak valid.</translation> <translation id="9050666287014529139">Frasa sandi</translation> <translation id="9065203028668620118">Edit</translation> -<translation id="9068849894565669697">Pilih warna</translation> <translation id="9069693763241529744">Diblokir oleh ekstensi</translation> <translation id="9076283476770535406">Situs mungkin berisi konten dewasa</translation> <translation id="9078964945751709336">Dibutuhkan informasi lebih lanjut</translation>
diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb index 6fb8f5f..ad3afb17 100644 --- a/components/strings/components_strings_it.xtb +++ b/components/strings/components_strings_it.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">In attesa di connessione…</translation> <translation id="153384715582417236">Per il momento è tutto</translation> <translation id="1549470594296187301">JavaScript deve essere attivato per utilizzare questa funzione.</translation> -<translation id="1555130319947370107">Blu</translation> <translation id="1559528461873125649">Nessun file o directory corrispondente</translation> <translation id="1583429793053364125">Si è verificato un problema durante la visualizzazione della pagina web.</translation> <translation id="1592005682883173041">Accesso ai dati locali</translation> <translation id="1594030484168838125">Scegli</translation> -<translation id="161042844686301425">Ciano</translation> <translation id="1620510694547887537">Videocamera</translation> <translation id="1629803312968146339">Vuoi che Chrome salvi questa carta?</translation> <translation id="1639239467298939599">Caricamento</translation> @@ -218,9 +216,8 @@ <translation id="2704951214193499422">Al momento non è possibile confermare la carta in Chromium. Riprova più tardi.</translation> <translation id="2705137772291741111">La copia del sito salvata (nella cache) era illeggibile.</translation> <translation id="2709516037105925701">Compilazione automatica</translation> -<translation id="2710942282213947212">Il software installato sul computer sta impedendo a Chromium di connettersi in sicurezza a Internet.</translation> +<translation id="2710942282213947212">Il software installato sul computer sta impedendo a Chromium di connettersi in sicurezza a Internet</translation> <translation id="2712173769900027643">Chiedi autorizzazione</translation> -<translation id="2713444072780614174">Bianco</translation> <translation id="2720342946869265578">Qui vicino</translation> <translation id="2721148159707890343">Richiesta riuscita</translation> <translation id="2728127805433021124">Il certificato del server è stato firmato utilizzando un algoritmo di firma debole.</translation> @@ -299,7 +296,6 @@ <translation id="3303855915957856445">Nessun risultato di ricerca trovato</translation> <translation id="3305707030755673451">I tuoi dati sono stati criptati con la tua passphrase di sincronizzazione in data <ph name="TIME" />. Inseriscila per avviare la sincronizzazione.</translation> <translation id="3320021301628644560">Aggiungi l'indirizzo di fatturazione</translation> -<translation id="3329013043687509092">Saturazione</translation> <translation id="333371639341676808">Impedisci alla pagina di creare altre finestre di dialogo.</translation> <translation id="3338095232262050444">Sicuro</translation> <translation id="3340978935015468852">impostazioni</translation> @@ -410,7 +406,6 @@ <translation id="4103249731201008433">Il numero di serie del dispositivo non è valido</translation> <translation id="410351446219883937">Riproduzione automatica</translation> <translation id="4103763322291513355">Visita <strong>chrome://policy</strong> per visualizzare l'elenco di URL inseriti nella blacklist e altre norme applicate dall'amministratore di sistema.</translation> -<translation id="4115378294792113321">Magenta</translation> <translation id="4116663294526079822">Consenti sempre su questo sito</translation> <translation id="4117700440116928470">L'ambito della norma non è supportato.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 altro}other{# altri}}</translation> @@ -621,7 +616,6 @@ <translation id="5869522115854928033">Password salvate</translation> <translation id="5872918882028971132">Suggerimenti per i genitori</translation> <translation id="5893752035575986141">Le carte di credito sono accettate.</translation> -<translation id="5901630391730855834">Giallo</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (sincronizzati)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 in uso}other{# in uso}}</translation> <translation id="5959728338436674663">Invia automaticamente a Google <ph name="BEGIN_WHITEPAPER_LINK" />alcune informazioni sul sistema e alcuni contenuti delle pagine<ph name="END_WHITEPAPER_LINK" /> per contribuire a rilevare app e siti pericolosi. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -632,12 +626,10 @@ <translation id="5990559369517809815">Le richieste al server sono state bloccate da un'estensione.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Pagina 1}other{Pagina #}}</translation> -<translation id="6017514345406065928">Verde</translation> <translation id="6017850046339264347">Gli utenti malintenzionati presenti sul sito <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> potrebbero installare app ingannevoli che si spacciano per qualcos'altro o raccolgono dati che potrebbero essere usati per monitorare la tua attività. <ph name="BEGIN_LEARN_MORE_LINK" />Ulteriori informazioni<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (sincronizzati)</translation> <translation id="6027201098523975773">Inserisci un nome</translation> <translation id="6040143037577758943">Chiudi</translation> -<translation id="6042308850641462728">Più</translation> <translation id="6047233362582046994">Se sei consapevole dei rischi per la tua sicurezza, potresti <ph name="BEGIN_LINK" />visitare questo sito<ph name="END_LINK" /> senza aspettare che vengano rimosse le app dannose.</translation> <translation id="6047927260846328439">Questi contenuti potrebbero cercare di indurti con l'inganno a installare software o a rivelare informazioni personali. <ph name="BEGIN_LINK" />Mostra comunque<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Al momento non puoi visitare il sito web <ph name="SITE" /> perché utilizza il blocco dei certificati. In genere gli errori di rete e gli attacchi sono temporanei, pertanto questa pagina potrebbe funzionare più tardi.</translation> @@ -713,7 +705,6 @@ <translation id="6710213216561001401">Indietro</translation> <translation id="6710594484020273272"><Digita un termine di ricerca></translation> <translation id="6711464428925977395">Si è verificato un problema con il server proxy oppure l'indirizzo non è corretto.</translation> -<translation id="6727102863431372879">Imposta</translation> <translation id="674375294223700098">Errore sconosciuto del certificato del server.</translation> <translation id="6753269504797312559">Valore norma</translation> <translation id="6757797048963528358">Il dispositivo è entrato in modalità sospensione.</translation> @@ -797,7 +788,6 @@ <translation id="7518003948725431193">Nessuna pagina web trovata per l'indirizzo web: <ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">La connessione a questo sito non è privata</translation> -<translation id="7535087603100972091">Valore</translation> <translation id="7537536606612762813">Obbligatoria</translation> <translation id="7542403920425041731">Dopo essere stati confermati, i dati della carta saranno condivisi con questo sito.</translation> <translation id="7542995811387359312">La compilazione automatica della carta di credito è disattivata perché questo modulo non utilizza una connessione sicura.</translation> @@ -808,7 +798,6 @@ <translation id="7567204685887185387">Questo server non è riuscito a dimostrare che si tratta di <ph name="DOMAIN" />; il relativo certificato di sicurezza potrebbe essere stato emesso in modo fraudolento. Il problema potrebbe essere dovuto a un'errata configurazione o a un malintenzionato che intercetta la connessione.</translation> <translation id="7568593326407688803">Questa pagina è in<ph name="ORIGINAL_LANGUAGE" />Vuoi tradurla?</translation> <translation id="7569952961197462199">Rimuovere la carta di credito da Chrome?</translation> -<translation id="7569983096843329377">Nero</translation> <translation id="7578104083680115302">Paga velocemente su siti e app su più dispositivi utilizzando le carte salvate su Google.</translation> <translation id="7588950540487816470">Physical Web</translation> <translation id="7592362899630581445">Il certificato del server vìola i vincoli relativi ai nomi.</translation> @@ -860,7 +849,6 @@ <translation id="79338296614623784">Inserisci un numero di telefono valido</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">Il certificato del server non è ancora valido.</translation> -<translation id="7942349550061667556">Rosso</translation> <translation id="7947285636476623132">Controlla l'anno di scadenza e riprova</translation> <translation id="7951415247503192394">(a 32 bit)</translation> <translation id="7956713633345437162">Preferiti su disp. mobili</translation> @@ -953,7 +941,6 @@ <translation id="8870413625673593573">Chiusi di recente</translation> <translation id="8874824191258364635">Inserisci un numero di carta di credito valido</translation> <translation id="8876793034577346603">Analisi della configurazione di rete non riuscita.</translation> -<translation id="8889402386540077796">Tonalità</translation> <translation id="8891727572606052622">Modalità proxy non valida.</translation> <translation id="889901481107108152">Spiacenti, questo esperimento non è disponibile sulla tua piattaforma.</translation> <translation id="8903921497873541725">Aumenta lo zoom</translation> @@ -962,7 +949,6 @@ <translation id="8938939909778640821">Carte di credito e prepagate accettate</translation> <translation id="8957210676456822347">Autorizzazione Captive Portal</translation> <translation id="8971063699422889582">Il certificato del server è scaduto.</translation> -<translation id="8986494364107987395">Invia automaticamente a Google statistiche sull'utilizzo e rapporti sugli arresti anomali</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">Il sito che stai per visitare contiene programmi dannosi</translation> <translation id="8997023839087525404">Il server ha presentato un certificato che non è stato reso pubblico tramite le norme di Certificate Transparency, la cui applicazione costituisce un requisito di alcuni certificati al fine di garantire la loro attendibilità nonché la sicurezza nei confronti dei malintenzionati.</translation> @@ -978,7 +964,6 @@ <translation id="9049981332609050619">Hai tentato di connetterti a <ph name="DOMAIN" />, ma il server ha presentato un certificato scaduto.</translation> <translation id="9050666287014529139">Passphrase</translation> <translation id="9065203028668620118">Modifica</translation> -<translation id="9068849894565669697">Seleziona colore</translation> <translation id="9069693763241529744">Bloccata da un'estensione</translation> <translation id="9076283476770535406">Può includere contenuti per adulti</translation> <translation id="9078964945751709336">Sono necessarie maggiori informazioni</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb index 84dbc49..a529e82 100644 --- a/components/strings/components_strings_iw.xtb +++ b/components/strings/components_strings_iw.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">ממתין לחיבור...</translation> <translation id="153384715582417236">זה הכול בינתיים</translation> <translation id="1549470594296187301">JavaScript צריך להיות מופעל כדי להשתמש בתכונה זו.</translation> -<translation id="1555130319947370107">כחול</translation> <translation id="1559528461873125649">אין קובץ או ספרייה בשם זה</translation> <translation id="1583429793053364125">משהו השתבש בעת הצגת דף אינטרנט זה.</translation> <translation id="1592005682883173041">גישה לנתונים מקומיים</translation> <translation id="1594030484168838125">בחר</translation> -<translation id="161042844686301425">ציאן</translation> <translation id="1620510694547887537">מצלמה</translation> <translation id="1629803312968146339">האם תרצה ש-Chrome ישמור את הכרטיס הזה?</translation> <translation id="1639239467298939599">טוען</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">מילוי אוטומטי</translation> <translation id="2710942282213947212">תוכנה במחשב שלך מונעת מ-Chromium להתחבר באופן מאובטח לאינטרנט</translation> <translation id="2712173769900027643">בקש רשות</translation> -<translation id="2713444072780614174">לבן</translation> <translation id="2720342946869265578">קרוב</translation> <translation id="2721148159707890343">הבקשה בוצעה בהצלחה</translation> <translation id="2728127805433021124">האישור של השרת נחתם באמצעות אלגוריתם של חתימה חלשה.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">לא נמצאו תוצאות חיפוש</translation> <translation id="3305707030755673451">הנתונים שלך הוצפנו ב-<ph name="TIME" /> באמצעות ביטוי הסיסמה לסינכרון. הזן אותו כדי להתחיל בסינכרון.</translation> <translation id="3320021301628644560">הוספה של כתובת לחיוב</translation> -<translation id="3329013043687509092">רווייה</translation> <translation id="333371639341676808">מנע מדף זה ליצור דיאלוגים נוספים.</translation> <translation id="3338095232262050444">מאובטח</translation> <translation id="3340978935015468852">הגדרות</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">המספר הסידורי של המכשיר אינו חוקי</translation> <translation id="410351446219883937">הפעלה אוטומטית</translation> <translation id="4103763322291513355">היכנס לכתובת <strong>chrome://policy</strong> כדי לראות רשימה של כתובות אתרים שנמנעה אליהם הגישה, כמו גם תקנונים אחרים שנאכפו על ידי מנהל המערכת שלך.</translation> -<translation id="4115378294792113321">מגנטה</translation> <translation id="4116663294526079822">אפשר תמיד באתר זה</translation> <translation id="4117700440116928470">היקף המדיניות אינו נתמך.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{אחד נוסף}two{שניים נוספים}many{# נוספים}other{# נוספים}}</translation> @@ -629,7 +624,6 @@ <translation id="5869522115854928033">סיסמאות שמורות</translation> <translation id="5872918882028971132">הצעות להורים</translation> <translation id="5893752035575986141">אפשר לשלם באמצעות כרטיסי אשראי.</translation> -<translation id="5901630391730855834">צהוב</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (מסונכרנים)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{אחד נמצא בשימוש}two{שניים נמצאים בשימוש}many{# נמצאים בשימוש}other{# נמצאים בשימוש}}</translation> <translation id="5959728338436674663">שלח באופן אוטומטי <ph name="BEGIN_WHITEPAPER_LINK" />חלק מפרטי המערכת ותוכן הדף<ph name="END_WHITEPAPER_LINK" /> אל Google כדי לעזור בזיהוי של אפליקציות ואתרים מסוכנים. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -640,12 +634,10 @@ <translation id="5990559369517809815">בקשות שנשלחו לשרת נחסמו על ידי תוסף.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{דף 1}two{דף #}many{דף #}other{דף #}}</translation> -<translation id="6017514345406065928">ירוק</translation> <translation id="6017850046339264347">תוקפים שמשתמשים ב-<ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> עלולים להתקין יישומים מטעים שמתחזים לאחרים או לאסוף נתונים שאפשר להשתמש בהם כדי לעקוב אחריך. <ph name="BEGIN_LEARN_MORE_LINK" />מידע נוסף<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (מסונכרנים)</translation> <translation id="6027201098523975773">עליך להזין שם</translation> <translation id="6040143037577758943">סגור</translation> -<translation id="6042308850641462728">עוד</translation> <translation id="6047233362582046994">אם אתה מבין את סיכוני האבטחה, תוכל <ph name="BEGIN_LINK" />להיכנס לאתר הזה<ph name="END_LINK" /> לפני הסרת היישומים המזיקים.</translation> <translation id="6047927260846328439">ייתכן שבתוכן הזה יש מידע מטעה שנועד לגרום לך להתקין תוכנות או לחשוף מידע אישי. <ph name="BEGIN_LINK" />הצג בכל זאת<ph name="END_LINK" /></translation> <translation id="6051221802930200923">נכון לעכשיו אי אפשר לבקר באתר <ph name="SITE" />, מאחר שבאתר הזה נעשה שימוש בנעיצת אישורים. שגיאות רשת ומתקפות הן בדרך כלל זמניות, כך שהדף הזה יחזור כנראה לפעול מאוחר יותר.</translation> @@ -722,7 +714,6 @@ <translation id="6710213216561001401">הקודם</translation> <translation id="6710594484020273272"><הקלד מונח חיפוש></translation> <translation id="6711464428925977395">משהו אינו תקין בשרת ה-proxy, או שהכתובת שגויה.</translation> -<translation id="6727102863431372879">הגדר</translation> <translation id="674375294223700098">שגיאת אישור שרת לא ידוע.</translation> <translation id="6753269504797312559">ערך מדיניות</translation> <translation id="6757797048963528358">המכשיר עבר למצב שינה.</translation> @@ -806,7 +797,6 @@ <translation id="7518003948725431193">לא נמצא דף אינטרנט עבור כתובת האינטרנט: <ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">החיבור שלך לאתר זה אינו פרטי</translation> -<translation id="7535087603100972091">ערך</translation> <translation id="7537536606612762813">הכרחי</translation> <translation id="7542403920425041731">ברגע שתאשר, פרטי הכרטיס שלך ישותפו עם האתר הזה.</translation> <translation id="7542995811387359312">מילוי אוטומטי של פרטי כרטיס אשראי מושבת כיוון שטופס זה אינו משתמש בחיבור מאובטח.</translation> @@ -817,7 +807,6 @@ <translation id="7567204685887185387">השרת הזה לא הצליח להוכיח שהוא <ph name="DOMAIN" />. ייתכן שאישור האבטחה שלו נופק כהונאה. הסיבה לכך עשויה להיות הגדרה שגויה או תוקף המיירט את החיבור שלך.</translation> <translation id="7568593326407688803">זהו דף ב<ph name="ORIGINAL_LANGUAGE" />האם ברצונך לתרגם אותו?</translation> <translation id="7569952961197462199">האם להסיר את כרטיס האשראי מ-Chrome?</translation> -<translation id="7569983096843329377">שחור</translation> <translation id="7578104083680115302">שלם במהירות באתרים ובאפליקציות בכל המכשירים באמצעות כרטיסים ששמרת ב-Google.</translation> <translation id="7588950540487816470">האינטרנט הווירטופיזי</translation> <translation id="7592362899630581445">אישור השרת מפר את אילוצי השמות.</translation> @@ -869,7 +858,6 @@ <translation id="79338296614623784">עליך להזין מספר טלפון חוקי</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">אישור השרת עדיין לא בתוקף.</translation> -<translation id="7942349550061667556">אדום</translation> <translation id="7947285636476623132">בדוק את שנת התפוגה ונסה שוב</translation> <translation id="7951415247503192394">(32 סיביות)</translation> <translation id="7956713633345437162">סימניות לנייד</translation> @@ -963,7 +951,6 @@ <translation id="8870413625673593573">נסגרו לאחרונה</translation> <translation id="8874824191258364635">עליך להזין מספר כרטיס חוקי</translation> <translation id="8876793034577346603">ניתוח תצורת הרשת נכשל.</translation> -<translation id="8889402386540077796">גוון</translation> <translation id="8891727572606052622">מצב שרת Proxy לא חוקי.</translation> <translation id="889901481107108152">מצטערים, ניסוי זה אינו זמין בפלטפורמה שלך.</translation> <translation id="8903921497873541725">התקרב</translation> @@ -972,7 +959,6 @@ <translation id="8938939909778640821">כרטיסי אשראי וכרטיסים משולמים מראש שהסוחר מקבל</translation> <translation id="8957210676456822347">הרשאת פורטל חובה</translation> <translation id="8971063699422889582">פג תוקפו של אישור השרת.</translation> -<translation id="8986494364107987395">שלח ל-Google דוחות קריסה וסטטיסטיקת שימוש באופן אוטומטי</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">האתר שאתה עומד לעבור אליו מכיל תוכניות מזיקות</translation> <translation id="8997023839087525404">השרת הציג אישור שלא נחשף באופן ציבורי בעזרת מדיניות 'שקיפות אישורים'. זוהי דרישה עבור חלק מהאישורים, ומטרתה לוודא שהם מהימנים וכדי להגן מפני תוקפים.</translation> @@ -988,7 +974,6 @@ <translation id="9049981332609050619">ניסית להגיע ל-<ph name="DOMAIN" />, אך השרת הציג אישור לא חוקי.</translation> <translation id="9050666287014529139">משפט-סיסמה</translation> <translation id="9065203028668620118">ערוך</translation> -<translation id="9068849894565669697">בחירת צבע</translation> <translation id="9069693763241529744">נחסמה על-ידי תוסף</translation> <translation id="9076283476770535406">ייתכן שהאתר מכיל תוכן למבוגרים בלבד</translation> <translation id="9078964945751709336">נדרש מידע נוסף</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb index 15a3d63..1533eff 100644 --- a/components/strings/components_strings_ja.xtb +++ b/components/strings/components_strings_ja.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">接続を待機しています…</translation> <translation id="153384715582417236">現時点では他にありません</translation> <translation id="1549470594296187301">この機能を使用するには JavaScript を有効にする必要があります。</translation> -<translation id="1555130319947370107">青</translation> <translation id="1559528461873125649">該当するファイルまたはディレクトリがありません</translation> <translation id="1583429793053364125">このウェブページを表示中に問題が発生しました。</translation> <translation id="1592005682883173041">ローカルデータへのアクセス</translation> <translation id="1594030484168838125">選択</translation> -<translation id="161042844686301425">シアン</translation> <translation id="1620510694547887537">カメラ</translation> <translation id="1629803312968146339">Chrome にこのカードを保存しますか?</translation> <translation id="1639239467298939599">読み込み中</translation> @@ -218,8 +216,8 @@ <translation id="2704951214193499422">Chromium でカードを確認できませんでした。しばらくしてからもう一度お試しください。</translation> <translation id="2705137772291741111">このサイトの保存(キャッシュ)されたコピーを読み取れませんでした。</translation> <translation id="2709516037105925701">自動入力</translation> +<translation id="2710942282213947212">パソコンにインストールされているソフトウェアが原因で、Chromium からインターネットに安全に接続することができません</translation> <translation id="2712173769900027643">権限をリクエスト</translation> -<translation id="2713444072780614174">白</translation> <translation id="2720342946869265578">周辺</translation> <translation id="2721148159707890343">リクエストを正常に送信しました</translation> <translation id="2728127805433021124">サーバーの証明書は脆弱な署名アルゴリズムを使用して署名されています。</translation> @@ -301,7 +299,6 @@ <translation id="3303855915957856445">一致する結果は見つかりませんでした</translation> <translation id="3305707030755673451">データは <ph name="TIME" /> に同期パスフレーズで暗号化されました。同期を開始するには、同期パスフレーズを入力してください。</translation> <translation id="3320021301628644560">請求先住所を追加</translation> -<translation id="3329013043687509092">彩度</translation> <translation id="333371639341676808">このページでこれ以上ダイアログボックスを生成しない</translation> <translation id="3338095232262050444">保護された通信</translation> <translation id="3340978935015468852">設定</translation> @@ -412,7 +409,6 @@ <translation id="4103249731201008433">デバイスのシリアル番号が無効です</translation> <translation id="410351446219883937">自動再生</translation> <translation id="4103763322291513355"><strong>chrome://policy</strong> にアクセスして、ブラックリストに登録されている URL とシステム管理者が設定した他のポリシーを確認できます。</translation> -<translation id="4115378294792113321">マゼンタ</translation> <translation id="4116663294526079822">このサイトでは常に許可</translation> <translation id="4117700440116928470">ポリシーの適用範囲がサポートされていません。</translation> <translation id="4129401438321186435">{COUNT,plural, =1{他 1 件}other{他 # 件}}</translation> @@ -623,7 +619,6 @@ <translation id="5869522115854928033">保存したパスワード</translation> <translation id="5872918882028971132">保護者からのおすすめ</translation> <translation id="5893752035575986141">クレジット カードをご利用いただけます。</translation> -<translation id="5901630391730855834">黄</translation> <translation id="5908541034548427511"><ph name="TYPE_1" />(同期済み)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 個が使用中}other{# 個が使用中}}</translation> <translation id="5959728338436674663">危険なアプリやサイトの検出に役立てるために一部の<ph name="BEGIN_WHITEPAPER_LINK" />システム情報やページのコンテンツ<ph name="END_WHITEPAPER_LINK" />を Google に自動送信する。<ph name="PRIVACY_PAGE_LINK" /></translation> @@ -634,12 +629,10 @@ <translation id="5990559369517809815">サーバーへのリクエストは拡張機能によってブロックされています。</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{ページ 1}other{ページ #}}</translation> -<translation id="6017514345406065928">緑</translation> <translation id="6017850046339264347"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> では、悪意のあるユーザーによって詐欺的なアプリ(他のものに成りすましたり、ユーザーの追跡などに使用可能なデータを収集したりするアプリ)がインストールされる可能性があります。<ph name="BEGIN_LEARN_MORE_LINK" />詳細<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />、<ph name="TYPE_2" />、<ph name="TYPE_3" />(同期済み)</translation> <translation id="6027201098523975773">名前を入力してください</translation> <translation id="6040143037577758943">閉じる</translation> -<translation id="6042308850641462728">もっと見る</translation> <translation id="6047233362582046994">有害なアプリがまだ存在する可能性があるにもかかわらず<ph name="BEGIN_LINK" />このサイトにアクセスする<ph name="END_LINK" />場合は、セキュリティ上の危険性をあらかじめご認識ください。</translation> <translation id="6047927260846328439">アクセス先のコンテンツは、ユーザーをだましてソフトウェアをインストールさせようとしたり、個人情報を危険にさらしたりする可能性があります。<ph name="BEGIN_LINK" />危険性を理解したうえで表示する<ph name="END_LINK" /></translation> <translation id="6051221802930200923"><ph name="SITE" /> では証明書ピンニングが使用されているため、現在アクセスできません。通常、ネットワーク エラーやネットワークへの攻撃は一時的なものです。しばらくするとページにアクセスできるようになります。</translation> @@ -716,7 +709,6 @@ <translation id="6710213216561001401">前へ</translation> <translation id="6710594484020273272"><検索キーワードを入力></translation> <translation id="6711464428925977395">プロキシ サーバーに問題がある、またはアドレスが正しくありません。</translation> -<translation id="6727102863431372879">設定</translation> <translation id="674375294223700098">不明なサーバー証明書エラー</translation> <translation id="6753269504797312559">ポリシーの値</translation> <translation id="6757797048963528358">デバイスがスリープ状態です。</translation> @@ -800,7 +792,6 @@ <translation id="7518003948725431193">次の URL のウェブページは見つかりませんでした:<ph name="URL" /></translation> <translation id="7521387064766892559">Javascript</translation> <translation id="7526934274050461096">このサイトへの接続ではプライバシーが保護されません</translation> -<translation id="7535087603100972091">値</translation> <translation id="7537536606612762813">必須</translation> <translation id="7542403920425041731">確認すると、カードの情報がこのサイトに共有されます。</translation> <translation id="7542995811387359312">このフォームは安全な接続を使用していないため、クレジットカードの自動入力が無効になっています。</translation> @@ -811,7 +802,6 @@ <translation id="7567204685887185387">このサーバーが <ph name="DOMAIN" /> であることを確認できませんでした。このサーバーのセキュリティ証明書は不正に発行されたものである可能性があります。原因としては、不適切な設定や、悪意のあるユーザーによる接続妨害が考えられます。</translation> <translation id="7568593326407688803">これは<ph name="ORIGINAL_LANGUAGE" />のページです。翻訳しますか?</translation> <translation id="7569952961197462199">Chrome からクレジット カードを削除してもよろしいですか?</translation> -<translation id="7569983096843329377">黒</translation> <translation id="7578104083680115302">どの端末でも、Google に保存したカードを使ってサイトやアプリの支払いをすばやく行うことができます。</translation> <translation id="7588950540487816470">フィジカルウェブ</translation> <translation id="7592362899630581445">サーバーの証明書が名前の制約に違反しています。</translation> @@ -863,7 +853,6 @@ <translation id="79338296614623784">有効な電話番号を入力してください</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">サーバーの証明書が有効になっていません。</translation> -<translation id="7942349550061667556">赤</translation> <translation id="7947285636476623132">有効期限の「年」を確認してもう一度お試しください</translation> <translation id="7951415247503192394">(32 ビット)</translation> <translation id="7956713633345437162">モバイルのブックマーク</translation> @@ -957,7 +946,6 @@ <translation id="8870413625673593573">最近閉じたタブ</translation> <translation id="8874824191258364635">有効なクレジット カード番号を入力してください</translation> <translation id="8876793034577346603">ネットワーク設定を解析できませんでした。</translation> -<translation id="8889402386540077796">色調</translation> <translation id="8891727572606052622">プロキシ モードが無効です。</translation> <translation id="889901481107108152">この試験運用機能は、お使いのプラットフォームでは利用できません。</translation> <translation id="8903921497873541725">拡大する</translation> @@ -966,7 +954,6 @@ <translation id="8938939909778640821">利用可能なクレジット カードとプリペイド カード</translation> <translation id="8957210676456822347">キャプティブ ポータル認証</translation> <translation id="8971063699422889582">サーバーの証明書の有効期限が切れています。</translation> -<translation id="8986494364107987395">使用統計データと障害レポートを Google に自動送信する</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">この先のサイトには有害なプログラムがあります</translation> <translation id="8997023839087525404">サーバーから提示された証明書は、証明書の透明性ポリシーを介して公開されていません。一部の証明書は、信頼性の確保と攻撃者からの保護のため、証明書の透明性ポリシーを介して公開されることが要件となっています。</translation> @@ -982,7 +969,6 @@ <translation id="9049981332609050619"><ph name="DOMAIN" /> にアクセスしようとしましたが、サーバーから無効な証明書が提示されました。</translation> <translation id="9050666287014529139">パスフレーズ</translation> <translation id="9065203028668620118">編集</translation> -<translation id="9068849894565669697">色の選択</translation> <translation id="9069693763241529744">拡張機能によってブロック</translation> <translation id="9076283476770535406">成人向けコンテンツが含まれている可能性があります</translation> <translation id="9078964945751709336">その他の情報が必要です</translation>
diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb index c555ae9..0007691d 100644 --- a/components/strings/components_strings_kn.xtb +++ b/components/strings/components_strings_kn.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">ಸಂಪರ್ಕಕ್ಕೆ ಕಾಯಲಾಗುತ್ತಿದೆ...</translation> <translation id="153384715582417236">ಇದುವರೆಗೂ ಇಷ್ಟೇ</translation> <translation id="1549470594296187301">ಈ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಬಳಸಲು JavaScript ಸಕ್ರಿಯಗೊಳಿಸಬೇಕು.</translation> -<translation id="1555130319947370107">ನೀಲಿ</translation> <translation id="1559528461873125649">ಆ ರೀತಿಯ ಯಾವುದೇ ಫೈಲ್ ಅಥವಾ ಡೈರೆಕ್ಟರಿ ಇಲ್ಲ</translation> <translation id="1583429793053364125">ಈ ವೆಬ್ಪುಟವನ್ನು ಪ್ರದರ್ಶಿಸುವಾಗ ಯಾವುದೋ ತಪ್ಪು ಸಂಭವಿಸಿದೆ.</translation> <translation id="1592005682883173041">ಸ್ಥಳೀಯ ಡೇಟಾ ಪ್ರವೇಶ</translation> <translation id="1594030484168838125">ಆರಿಸಿ</translation> -<translation id="161042844686301425">ಹಸಿರುನೀಲಿ</translation> <translation id="1620510694547887537">ಕ್ಯಾಮರಾ</translation> <translation id="1629803312968146339">ಈ ಕಾರ್ಡ್ ಅನ್ನು Chrome ಉಳಿಸಬೇಕೆಂದು ನೀವು ಬಯಸುವಿರಾ?</translation> <translation id="1639239467298939599">ಲೋಡ್ ಆಗುತ್ತಿದೆ</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">ಸ್ವಯಂತುಂಬುವಿಕೆ</translation> <translation id="2710942282213947212">ಸುರಕ್ಷಿತವಾಗಿ ವೆಬ್ಗೆ ಸಂಪರ್ಕಿಸುವ Chromium ನ ಕಾರ್ಯವನ್ನು ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿರುವ ಸಾಫ್ಟ್ವೇರ್ ಸ್ಥಗಿತಗೊಳಿಸಿದೆ</translation> <translation id="2712173769900027643">ಅನುಮತಿ ಕೇಳಿ</translation> -<translation id="2713444072780614174">ಬಿಳಿ</translation> <translation id="2720342946869265578">ಸಮೀಪ ಸಾಧನ</translation> <translation id="2721148159707890343">ವಿನಂತಿಯನ್ನು ಯಶಸ್ವಿಗೊಳಿಸಲಾಗಿದೆ</translation> <translation id="2728127805433021124">ಕ್ಷೀಣವಾದ ಸಹಿ ಅಲ್ಗಾರಿದಮ್ ಬಳಸಿಕೊಂಡು ಸರ್ವರ್ನ ಪ್ರಮಾಣಪತ್ರಕ್ಕೆ ಸಹಿ ಮಾಡಲಾಗಿದೆ.</translation> @@ -300,7 +297,6 @@ <translation id="3303855915957856445">ಯಾವುದೇ ಹುಡುಕಾಟ ಫಲಿತಾಂಶಗಳು ಕಂಡುಬಂದಿಲ್ಲ</translation> <translation id="3305707030755673451">ನಿಮ್ಮ ಡೇಟಾವನ್ನು <ph name="TIME" /> ರಂದು ನಿಮ್ಮ ಸಿಂಕ್ ಪಾಸ್ಫ್ರೇಸ್ನೊಂದಿಗೆ ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಲಾಗಿದೆ. ಸಿಂಕ್ ಪ್ರಾರಂಭಿಸಲು ಅದನ್ನು ನಮೂದಿಸಿ.</translation> <translation id="3320021301628644560">ಬಿಲ್ಲಿಂಗ್ ವಿಳಾಸವನ್ನು ಸೇರಿಸಿ</translation> -<translation id="3329013043687509092">ಸ್ಯಾಚುರೇಶನ್</translation> <translation id="333371639341676808">ಈ ಪುಟ ಹೆಚ್ಚುವರಿ ಸಂವಾದಗಳನ್ನು ರಚಿಸುವುದನ್ನು ತಡೆಯಿರಿ.</translation> <translation id="3338095232262050444">ಸುರಕ್ಷಿತ</translation> <translation id="3340978935015468852">ಸೆಟ್ಟಿಂಗ್ಗಳು</translation> @@ -408,7 +404,6 @@ <translation id="4103249731201008433">ಸಾಧನದ ಸರಣಿಯ ಸಂಖ್ಯೆ ಅಮಾನ್ಯವಾಗಿದೆ</translation> <translation id="410351446219883937">ಆಟೋಪ್ಲೇ</translation> <translation id="4103763322291513355">ನಿಮ್ಮ ಸಿಸ್ಟಂ ನಿರ್ವಾಹಕರು ವಿಧಿಸಿರುವ ಕಪ್ಪುಪಟ್ಟಿಯ URLಗಳು ಮತ್ತು ಇತರ ನೀತಿಗಳನ್ನು ವೀಕ್ಷಿಸಲು <strong>chrome://policy</strong> ಗೆ ಭೇಟಿ ನೀಡಿ.</translation> -<translation id="4115378294792113321">ಮಜೆಂತಾ</translation> <translation id="4116663294526079822">ಈ ಸೈಟ್ನಲ್ಲಿ ಯಾವಾಗಲೂ ಅನುಮತಿಸಿ</translation> <translation id="4117700440116928470">ನೀತಿಯ ವ್ಯಾಪ್ತಿಯು ಬೆಂಬಲಿತವಾಗಿಲ್ಲ.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 ಇತರೆ}one{# ಇತರೆ}other{# ಇತರೆ}}</translation> @@ -618,7 +613,6 @@ <translation id="5869522115854928033">ಉಳಿಸಲಾದ ಪಾಸ್ವರ್ಡ್ಗಳು</translation> <translation id="5872918882028971132">ಪೋಷಕ ಸಲಹೆಗಳು</translation> <translation id="5893752035575986141">ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್ಗಳನ್ನು ಸಮ್ಮತಿಸಲಾಗಿದೆ.</translation> -<translation id="5901630391730855834">ಹಳದಿ</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (ಸಿಂಕ್ ಮಾಡಲಾಗಿದೆ)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 ಬಳಕೆಯಲ್ಲಿದೆ}one{# ಬಳಕೆಯಲ್ಲಿದೆ}other{# ಬಳಕೆಯಲ್ಲಿದೆ}}</translation> <translation id="5959728338436674663">ಅಪಾಯಕಾರಿ ಅಪ್ಲಿಕೇಶನ್ಗಳು ಮತ್ತು ಸೈಟ್ಗಳ ಪತ್ತೆಗೆ ಸಹಾಯ ಮಾಡಲು Google ಗೆ ಕೆಲವು <ph name="BEGIN_WHITEPAPER_LINK" />ಸಿಸ್ಟಂ ಮಾಹಿತಿ ಮತ್ತು ಪುಟ ವಿಷಯ<ph name="END_WHITEPAPER_LINK" />ವನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಕಳುಹಿಸಿ. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -629,12 +623,10 @@ <translation id="5990559369517809815">ಸರ್ವರ್ಗಳ ವಿನಂತಿಗಳನ್ನು ವಿಸ್ತರಣೆಯಿಂದ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{ಪುಟ 1}one{ಪುಟ #}other{ಪುಟ #}}</translation> -<translation id="6017514345406065928">ಹಸಿರು</translation> <translation id="6017850046339264347"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> ನಲ್ಲಿನ ದಾಳಿಕೋರರು ವಂಚನೆಯ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಸ್ಥಾಪಿಸಿ, ನಿಮ್ಮನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ಬಳಸಬಹುದಾದ ಬೇರೆ ಯಾವುದಾದರೂ ಮಾಹಿತಿ ಅಥವಾ ಡೇಟಾ ಸಂಗ್ರಹಿಸುವ ಸಾಧ್ಯವಿದೆ. <ph name="BEGIN_LEARN_MORE_LINK" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (ಸಿಂಕ್ ಮಾಡಲಾಗಿದೆ)</translation> <translation id="6027201098523975773">ಹೆಸರು ನಮೂದಿಸಿ</translation> <translation id="6040143037577758943">ಮುಚ್ಚಿರಿ</translation> -<translation id="6042308850641462728">ಇನ್ನಷ್ಟು</translation> <translation id="6047233362582046994">ನಿಮ್ಮ ಸುರಕ್ಷತೆ ಅಪಾಯಗಳು ನಿಮಗೆ ಅರ್ಥವಾಗಿದ್ದರೆ, ಅಪಾಯಕಾರಿ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ತೆಗೆದುಹಾಕುವುದಕ್ಕೂ ಮೊದಲು ನೀವು <ph name="BEGIN_LINK" />ಈ ಸೈಟ್ಗೆ ಭೇಟಿ<ph name="END_LINK" /> ನೀಡಬಹುದು.</translation> <translation id="6047927260846328439">ಈ ಕಂಟೆಂಟ್ ಸಾಫ್ಟ್ವೇರ್ ಸ್ಥಾಪಿಸುವಂತೆ ಅಥವಾ ನಿಮ್ಮ ವೈಯಕ್ತಿಕ ಮಾಹಿತಿಯನ್ನು ಬಹಿರಂಗಪಡಿಸುವಂತೆ ನಿಮ್ಮನ್ನು ಮೋಸಗೊಳಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತಿರಬಹುದು. <ph name="BEGIN_LINK" />ಹೇಗಿದ್ದರೂ ತೋರಿಸಿ<ph name="END_LINK" /></translation> <translation id="6051221802930200923">ನೀವು ಸದ್ಯಕ್ಕೆ <ph name="SITE" /> ಗೆ ಭೇಟಿ ನೀಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಏಕೆಂದರೆ, ವೆಬ್ಸೈಟ್ ಪ್ರಮಾಣಪತ್ರ ಪಿನ್ ಮಾಡುವಿಕೆಯನ್ನು ಬಳಸುತ್ತದೆ. ನೆಟ್ವರ್ಕ್ ದೋಷಗಳು ಮತ್ತು ಆಕ್ರಮಣಗಳು ತಾತ್ಕಾಲಿಕವಾಗಿರುತ್ತವೆ, ಹೀಗಾಗಿ ಈ ಪುಟವು ಸ್ವಲ್ಪ ಸಮಯದ ನಂತರ ಕಾರ್ಯ ನಿರ್ವಹಿಸಬಹುದು.</translation> @@ -710,7 +702,6 @@ <translation id="6710213216561001401">ಹಿಂದೆ</translation> <translation id="6710594484020273272"><ಹುಡುಕಾಟದ ಪದ ಟೈಪ್ ಮಾಡಿ></translation> <translation id="6711464428925977395">ಪ್ರಾಕ್ಸಿ ಸರ್ವರ್ನಲ್ಲಿ ಏನೋ ದೋಷವಿದೆ ಅಥವಾ ವಿಳಾಸವು ತಪ್ಪಾಗಿದೆ.</translation> -<translation id="6727102863431372879">ಹೊಂದಿಸು</translation> <translation id="674375294223700098">ಅಪರಿಚಿತ ಸರ್ವರ್ ಪ್ರಮಾಣಪತ್ರ ದೋಷ.</translation> <translation id="6753269504797312559">ನೀತಿ ಮೌಲ್ಯ</translation> <translation id="6757797048963528358">ನಿಮ್ಮ ಸಾಧನವು ನಿದ್ರಾವಸ್ಥೆಗೆ ಹೋಗಿದೆ.</translation> @@ -753,7 +744,7 @@ <translation id="7155487117670177674">ಪಾವತಿ ಸುರಕ್ಷಿತವಾಗಿಲ್ಲ</translation> <translation id="7175401108899573750">{SHIPPING_OPTIONS,plural, =0{<ph name="SHIPPING_OPTION_PREVIEW" />}=1{<ph name="SHIPPING_OPTION_PREVIEW" /> ಮತ್ತು <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> ಇನ್ನಷ್ಟು}one{<ph name="SHIPPING_OPTION_PREVIEW" /> ಮತ್ತು <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> ಇನ್ನಷ್ಟು}other{<ph name="SHIPPING_OPTION_PREVIEW" /> ಮತ್ತು <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> ಇನ್ನಷ್ಟು}}</translation> <translation id="7179921470347911571">ಇದೀಗ ಮರುಪ್ರಾರಂಭಿಸು</translation> -<translation id="7180611975245234373">ರೀಫ್ರೆಶ್ ಮಾಡಿ</translation> +<translation id="7180611975245234373">ರಿಫ್ರೆಶ್ ಮಾಡಿ</translation> <translation id="7182878459783632708">ಯಾವುದೇ ನೀತಿಗಳನ್ನು ಹೊಂದಿಸಿಲ್ಲ</translation> <translation id="7186367841673660872">ಈ ಪುಟವನ್ನು<ph name="ORIGINAL_LANGUAGE" />ನಿಂದ<ph name="LANGUAGE_LANGUAGE" />ಗೆ ಭಾಷಾಂತರಿಸಲಾಗಿದೆ</translation> <translation id="7192203810768312527"><ph name="SIZE" /> ತೆಗೆದುಹಾಕಿ. ನಿಮ್ಮ ನಂತರದ ಭೇಟಿಯ ಸಮಯದಲ್ಲಿ ಕೆಲವು ಸೈಟ್ಗಳು ನಿಧಾನವಾಗಿ ಲೋಡ್ ಆಗಬಹುದು.</translation> @@ -794,7 +785,6 @@ <translation id="7518003948725431193">ಈ ವೆಬ್ ವಿಳಾಸಕ್ಕಾಗಿ ಯಾವುದೇ ವೆಬ್ ಪುಟವು ಕಂಡುಬರಲಿಲ್ಲ: <ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">ಈ ಸೈಟ್ಗೆ ನಿಮ್ಮ ಸಂಪರ್ಕವು ಖಾಸಗಿಯಾಗಿಲ್ಲ.</translation> -<translation id="7535087603100972091">ಮೌಲ್ಯ</translation> <translation id="7537536606612762813">ಕಡ್ಡಾಯ</translation> <translation id="7542403920425041731">ನೀವು ಒಮ್ಮೆ ಖಚಿತಪಡಿಸಿದರೆ, ನಿಮ್ಮ ಕಾರ್ಡ್ ವಿವರಗಳನ್ನು ಈ ಸೈಟ್ ಜೊತೆಗೆ ಹಂಚಿಕೊಳ್ಳಲಾಗುತ್ತದೆ.</translation> <translation id="7542995811387359312">ಈ ಫಾರ್ಮ್ ಸುರಕ್ಷಿತವಾದ ಸಂಪರ್ಕವನ್ನು ಬಳಸುತ್ತಿಲ್ಲವಾದ ಕಾರಣ ಸ್ವಯಂಚಾಲಿತ ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್ ಭರ್ತಿ ಮಾಡುವಿಕೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ.</translation> @@ -805,7 +795,6 @@ <translation id="7567204685887185387">ಈ ಸರ್ವರ್ <ph name="DOMAIN" /> ಆಗಿದೆ ಎಂಬುದನ್ನು ಸಾಬೀತುಪಡಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ; ಅದರ ಸುರಕ್ಷತಾ ಪ್ರಮಾಣಪತ್ರವನ್ನು ವಂಚನೆಯಿಂದ ನೀಡಿರಬಹುದು. ಇದು ತಪ್ಪು ಕಾನ್ಫಿಗರೇಶನ್ನಿಂದ ಅಥವಾ ಆಕ್ರಮಣಕಾರರು ನಿಮ್ಮ ಸಂಪರ್ಕದಲ್ಲಿ ಒಳನುಸುಳಿರುವುದರಿಂದ ಆಗಿರಬಹುದು.</translation> <translation id="7568593326407688803">ಈ ಪುಟವು<ph name="ORIGINAL_LANGUAGE" />ನಲ್ಲಿದೆ ನೀವು ಅದನ್ನು ಭಾಷಾಂತರಿಸಲು ಬಯಸುವಿರಾ?</translation> <translation id="7569952961197462199">Chrome ನಿಂದ ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್ ತೆಗೆದುಹಾಕುವುದೇ?</translation> -<translation id="7569983096843329377">ಕಪ್ಪು</translation> <translation id="7578104083680115302">Google ನೊಂದಿಗೆ ನೀವು ಉಳಿಸಲಾದ ಕಾರ್ಡ್ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಸಾಧನಗಳಾದ್ಯಂತ ಸೈಟ್ಗಳು ಮತ್ತು ಅಪ್ಲಿಕೇಶನ್ಗಳಲ್ಲಿ ತ್ವರಿತವಾಗಿ ಪಾವತಿಸಿ.</translation> <translation id="7588950540487816470">ಭೌತಿಕ ವೆಬ್</translation> <translation id="7592362899630581445">ಸರ್ವರ್ ಪ್ರಮಾಣಪತ್ರವು ಹೆಸರಿನ ನಿರ್ಬಂಧನೆಗಳನ್ನು ಉಲ್ಲಂಘಿಸುತ್ತದೆ.</translation> @@ -857,7 +846,6 @@ <translation id="79338296614623784">ಮಾನ್ಯವಾದ ಫೋನ್ ಸಂಖ್ಯೆಯನ್ನು ನಮೂದಿಸಿ</translation> <translation id="7935318582918952113">DOM ಡಿಸ್ಟಿಲರ್</translation> <translation id="7938958445268990899">ಸರ್ವರ್ನ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಇನ್ನೂ ಮಾನ್ಯಗೊಳಿಸಿಲ್ಲ.</translation> -<translation id="7942349550061667556">ಕೆಂಪು</translation> <translation id="7947285636476623132">ನಿಮ್ಮ ಮುಕ್ತಾಯ ವರ್ಷವನ್ನು ಪರಿಶೀಲಿಸಿ ಮತ್ತು ಪುನಃ ಪ್ರಯತ್ನಿಸಿ</translation> <translation id="7951415247503192394">(32-ಬಿಟ್)</translation> <translation id="7956713633345437162">ಮೊಬೈಲ್ ಬುಕ್ಮಾರ್ಕ್ಗಳು</translation> @@ -951,7 +939,6 @@ <translation id="8870413625673593573">ಇತ್ತೀಚೆಗೆ ಮುಚ್ಚಿರುವುದು</translation> <translation id="8874824191258364635">ಮಾನ್ಯವಾದ ಕಾರ್ಡ್ ಸಂಖ್ಯೆಯನ್ನು ನಮೂದಿಸಿ</translation> <translation id="8876793034577346603">ಪಾರ್ಸ್ ಮಾಡಬೇಕಾಗಿರುವ ನೆಟ್ವರ್ಕ್ ಕಾನ್ಫಿಗರೇಶನ್ ವಿಫಲವಾಗಿದೆ.</translation> -<translation id="8889402386540077796">ವರ್ಣ</translation> <translation id="8891727572606052622">ಅಮಾನ್ಯವಾದ ಪ್ರಾಕ್ಸಿ ಮೋಡ್.</translation> <translation id="889901481107108152">ಕ್ಷಮಿಸಿ, ಈ ಪ್ರಯೋಗವು ನಿಮ್ಮ ಪ್ಲ್ಯಾಟ್ಫಾರ್ಮ್ನಲ್ಲಿ ಲಭ್ಯವಿಲ್ಲ.</translation> <translation id="8903921497873541725">ಝೂಮ್ ಇನ್</translation> @@ -960,7 +947,6 @@ <translation id="8938939909778640821">ಸಮ್ಮತಿಸಲಾದ ಕ್ರೆಡಿಟ್ ಮತ್ತು ಪ್ರೀಪೇಯ್ಡ್ ಕಾರ್ಡ್ಗಳು</translation> <translation id="8957210676456822347">ಕ್ಯಾಪ್ಟಿವ್ ಪೋರ್ಟಲ್ ದೃಢೀಕರಣ</translation> <translation id="8971063699422889582">ಸರ್ವರ್ನ ಪ್ರಕಮಾಣಪತ್ರದ ಅವಧಿ ಮುಕ್ತಾಯಗೊಂಡಿದೆ.</translation> -<translation id="8986494364107987395">ಬಳಕೆಯ ಅಂಕಿಅಂಶಗಳನ್ನು ಮತ್ತು ಕ್ರಾಶ್ ವರದಿಗಳನ್ನು Google ಗೆ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ರವಾನಿಸು</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">ಈ ಮುಂದಕ್ಕೆ ಸೈಟ್ ಹಾನಿಕಾರಕ ಪ್ರೋಗ್ರಾಂಗಳನ್ನು ಹೊಂದಿದೆ</translation> <translation id="8997023839087525404">ಪ್ರಮಾಣಪತ್ರ ಪಾರದರ್ಶಕತೆ ನೀತಿಯನ್ನು ಬಳಸಿಕೊಂಡು ಸಾರ್ವಜನಿಕವಾಗಿ ಬಹಿರಂಗಗೊಳಿಸದ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಸರ್ವರ್ ಪ್ರಸ್ತುತಪಡಿಸಿದೆ. ಇದು ಅವುಗಳು ವಿಶ್ವಾಸಾರ್ಹವಾಗಿವೆ ಮತ್ತು ಆಕ್ರಮಣಗಾರರ ವಿರುದ್ಧ ರಕ್ಷಣೆಯನ್ನು ನೀಡುತ್ತವೆ ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ಕೆಲವು ಪ್ರಮಾಣಪತ್ರಗಳಿಗೆ ಅಗತ್ಯವಾಗಿದೆ.</translation> @@ -976,7 +962,6 @@ <translation id="9049981332609050619">ನೀವು <ph name="DOMAIN" /> ಅನ್ನು ತಲುಪಲು ಪ್ರಯತ್ನಿಸಿರುವಿರಿ, ಆದರೆ ಸರ್ವರ್ ಅಮಾನ್ಯ ಪ್ರಮಾಣಪತ್ರವನ್ನು ನೀಡಿದೆ.</translation> <translation id="9050666287014529139">ಪಾಸ್ಫ್ರೇಸ್</translation> <translation id="9065203028668620118">ಎಡಿಟ್</translation> -<translation id="9068849894565669697">ಬಣ್ಣವನ್ನು ಆಯ್ಕೆಮಾಡಿ</translation> <translation id="9069693763241529744">ವಿಸ್ತರಣೆಯ ಮೂಲಕ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation> <translation id="9076283476770535406">ಇದು ಪ್ರಬುದ್ಧ ವಿಷಯವನ್ನು ಹೊಂದಿರಬಹುದು</translation> <translation id="9078964945751709336">ಇನ್ನಷ್ಟು ಮಾಹಿತಿಯ ಅಗತ್ಯವಿದೆ</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb index d5bb815e..2d8eb85 100644 --- a/components/strings/components_strings_ko.xtb +++ b/components/strings/components_strings_ko.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">연결 대기 중...</translation> <translation id="153384715582417236">새 콘텐츠가 없습니다.</translation> <translation id="1549470594296187301">이 기능을 이용하려면 자바스크립트를 사용하도록 설정해야 합니다.</translation> -<translation id="1555130319947370107">파란색</translation> <translation id="1559528461873125649">해당 파일이나 디렉토리가 없습니다.</translation> <translation id="1583429793053364125">이 웹페이지를 표시하는 도중 문제가 발생했습니다.</translation> <translation id="1592005682883173041">로컬 데이터 액세스</translation> <translation id="1594030484168838125">선택</translation> -<translation id="161042844686301425">청록색</translation> <translation id="1620510694547887537">카메라</translation> <translation id="1629803312968146339">Chrome에서 이 카드를 저장하도록 하시겠습니까?</translation> <translation id="1639239467298939599">로드 중</translation> @@ -218,9 +216,8 @@ <translation id="2704951214193499422">현재 Chromium에서 카드를 확인할 수 없습니다. 나중에 다시 시도해 주세요.</translation> <translation id="2705137772291741111">사이트의 저장된(캐시된) 사본을 읽을 수 없습니다.</translation> <translation id="2709516037105925701">자동완성</translation> -<translation id="2710942282213947212">컴퓨터의 소프트웨어로 인해 Chromium이 안전하게 웹에 접속할 수 없음</translation> +<translation id="2710942282213947212">컴퓨터에 설치된 소프트웨어로 인해 Chromium이 안전하게 웹에 접속할 수 없음</translation> <translation id="2712173769900027643">권한 요청</translation> -<translation id="2713444072780614174">흰색</translation> <translation id="2720342946869265578">근처</translation> <translation id="2721148159707890343">요청 성공</translation> <translation id="2728127805433021124">서버의 인증서가 안전성이 낮은 서명 알고리즘을 사용하여 서명되어 있습니다.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">검색결과 없음</translation> <translation id="3305707030755673451"><ph name="TIME" />에 동기화 암호로 데이터가 암호화되었습니다. 동기화를 시작하려면 입력하세요.</translation> <translation id="3320021301628644560">청구지 주소 추가</translation> -<translation id="3329013043687509092">채도</translation> <translation id="333371639341676808">이 페이지가 추가적인 대화를 생성하지 않도록 차단합니다.</translation> <translation id="3338095232262050444">안전함</translation> <translation id="3340978935015468852">설정</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">기기 일련번호가 잘못됨</translation> <translation id="410351446219883937">자동재생</translation> <translation id="4103763322291513355">차단된 URL 및 시스템 관리자가 설정한 기타 정책 목록을 확인하려면 <strong>chrome://policy</strong>를 방문하세요.</translation> -<translation id="4115378294792113321">자홍색</translation> <translation id="4116663294526079822">이 사이트에서 항상 허용</translation> <translation id="4117700440116928470">지원되지 않는 정책 범위입니다.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{외 1개}other{외 #개}}</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">저장된 비밀번호</translation> <translation id="5872918882028971132">상위 추천</translation> <translation id="5893752035575986141">신용카드를 사용할 수 있습니다.</translation> -<translation id="5901630391730855834">노란색</translation> <translation id="5908541034548427511"><ph name="TYPE_1" />(동기화됨)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1개 사용 중}other{#개 사용 중}}</translation> <translation id="5959728338436674663">위험한 앱과 사이트를 감지할 수 있도록 일부 <ph name="BEGIN_WHITEPAPER_LINK" />시스템 정보와 페이지 콘텐츠<ph name="END_WHITEPAPER_LINK" />를 Google로 자동 전송합니다. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">서버에 대한 요청이 확장 프로그램에 의해 차단되었습니다.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{1페이지}other{#페이지}}</translation> -<translation id="6017514345406065928">녹색</translation> <translation id="6017850046339264347"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />에 있는 공격자는 다른 앱인 것처럼 가장하거나 사용자를 추적하는 데 사용될 수 있는 데이터를 수집하는 사기성 앱을 설치할 수도 있습니다. <ph name="BEGIN_LEARN_MORE_LINK" />자세히 알아보기<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" />(동기화됨)</translation> <translation id="6027201098523975773">이름을 입력하세요.</translation> <translation id="6040143037577758943">닫기</translation> -<translation id="6042308850641462728">더보기</translation> <translation id="6047233362582046994">유해한 앱이 삭제되기 전에 <ph name="BEGIN_LINK" />이 사이트를 방문<ph name="END_LINK" />하는 경우 보안상 위험을 반드시 이해하시기 바랍니다.</translation> <translation id="6047927260846328439">이 콘텐츠는 사용자를 속여 소프트웨어를 설치하거나 개인정보를 유출할 수도 있습니다. <ph name="BEGIN_LINK" />표시하기<ph name="END_LINK" /></translation> <translation id="6051221802930200923">현재 <ph name="SITE" />에서 인증서 고정을 사용하기 때문에 방문할 수 없습니다. 네트워크 오류와 공격은 대부분 일시적이므로 나중에 이 페이지가 정상적으로 작동할 수 있습니다.</translation> @@ -717,7 +709,6 @@ <translation id="6710213216561001401">이전</translation> <translation id="6710594484020273272"><검색어 입력></translation> <translation id="6711464428925977395">프록시 서버에 문제가 발생했거나 주소가 잘못되었습니다.</translation> -<translation id="6727102863431372879">설정</translation> <translation id="674375294223700098">알 수 없는 서버 인증서 오류입니다.</translation> <translation id="6753269504797312559">정책 값</translation> <translation id="6757797048963528358">기기가 절전 모드 상태입니다.</translation> @@ -801,7 +792,6 @@ <translation id="7518003948725431193">다음 웹 주소(<ph name="URL" />)에 대해 발견된 웹페이지가 없습니다.</translation> <translation id="7521387064766892559">자바스크립트</translation> <translation id="7526934274050461096">이 사이트로의 연결은 비공개가 아닙니다.</translation> -<translation id="7535087603100972091">값</translation> <translation id="7537536606612762813">필수</translation> <translation id="7542403920425041731">확인하면 카드 세부정보가 이 사이트와 공유됩니다.</translation> <translation id="7542995811387359312">양식에 보안 연결이 사용되지 않아 신용카드 자동 채우기가 사용 중지되었습니다.</translation> @@ -812,7 +802,6 @@ <translation id="7567204685887185387">이 서버가 <ph name="DOMAIN" />임을 입증할 수 없으며 서버의 보안 인증서가 부정한 방식으로 발행되었을 수 있습니다. 서버를 잘못 설정했거나 불법 사용자가 연결을 가로채고 있기 때문일 수 있습니다.</translation> <translation id="7568593326407688803">이 페이지는<ph name="ORIGINAL_LANGUAGE" />로 되어 있습니다. 번역하시겠습니까?</translation> <translation id="7569952961197462199">Chrome에서 신용카드를 삭제하시겠습니까?</translation> -<translation id="7569983096843329377">검정색</translation> <translation id="7578104083680115302">Google에 저장한 카드를 사용하여 어떤 기기에서든지 사이트 및 앱에서 빠르게 지불할 수 있습니다.</translation> <translation id="7588950540487816470">피지컬 웹</translation> <translation id="7592362899630581445">서버의 인증서가 이름 제약 조건을 위반합니다.</translation> @@ -864,7 +853,6 @@ <translation id="79338296614623784">올바른 전화번호를 입력하세요.</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">서버 인증서가 유효하지 않습니다.</translation> -<translation id="7942349550061667556">빨간색</translation> <translation id="7947285636476623132">유효기간 연도를 확인한 후 다시 시도해 주세요.</translation> <translation id="7951415247503192394">(32비트)</translation> <translation id="7956713633345437162">모바일 북마크</translation> @@ -957,7 +945,6 @@ <translation id="8870413625673593573">최근에 닫은 탭</translation> <translation id="8874824191258364635">올바른 카드 번호를 입력하세요.</translation> <translation id="8876793034577346603">네트워크 설정을 파싱하지 못했습니다.</translation> -<translation id="8889402386540077796">색조</translation> <translation id="8891727572606052622">프록시 모드가 잘못되었습니다.</translation> <translation id="889901481107108152">죄송합니다. 현재 플랫폼에서 사용할 수 없는 실험실 기능입니다.</translation> <translation id="8903921497873541725">확대</translation> @@ -966,7 +953,6 @@ <translation id="8938939909778640821">사용 가능한 신용카드 및 선불카드</translation> <translation id="8957210676456822347">캡티브 포털 승인</translation> <translation id="8971063699422889582">서버 인증서가 만료되었습니다.</translation> -<translation id="8986494364107987395">사용 통계 및 비정상 종료 보고서를 Google에 자동으로 보내기</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">방문하려는 사이트에 유해한 프로그램이 있습니다.</translation> <translation id="8997023839087525404">서버에서 인증서 투명성 정책을 사용하여 공개되지 않은 인증서를 제시했습니다. 인증서 투명성 정책은 인증서가 신뢰할 수 있으며 공격자로부터 사용자를 보호하고 있음을 보장하기 위한 것으로 일부 인증서의 경우 필수사항입니다.</translation> @@ -982,7 +968,6 @@ <translation id="9049981332609050619"><ph name="DOMAIN" />에 접속하려 했지만 서버가 잘못된 인증서를 전달했습니다.</translation> <translation id="9050666287014529139">암호</translation> <translation id="9065203028668620118">수정</translation> -<translation id="9068849894565669697">색상 선택</translation> <translation id="9069693763241529744">확장 프로그램에서 차단함</translation> <translation id="9076283476770535406">성인용 콘텐츠가 포함되어 있을 수 있습니다.</translation> <translation id="9078964945751709336">자세한 정보 필요</translation>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb index a238eba..ef2f911 100644 --- a/components/strings/components_strings_lt.xtb +++ b/components/strings/components_strings_lt.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Laukiama ryšio…</translation> <translation id="153384715582417236">Kol kas tiek</translation> <translation id="1549470594296187301">Norint naudoti šią funkciją, reikia įgalinti „JavaScript“.</translation> -<translation id="1555130319947370107">Mėlyna</translation> <translation id="1559528461873125649">Nėra tokio failo ar katalogo</translation> <translation id="1583429793053364125">Rodant šį tinklalapį įvyko nenumatyta klaida.</translation> <translation id="1592005682883173041">Prieiga prie vietinių duomenų</translation> <translation id="1594030484168838125">Pasirinkti</translation> -<translation id="161042844686301425">Žydra</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1629803312968146339">Ar norite, kad „Chrome“ išsaugotų šią kortelę?</translation> <translation id="1639239467298939599">Įkeliama</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Automatinis pildymas</translation> <translation id="2710942282213947212">Programinė įranga jūsų kompiuteryje neleidžia „Chromium“ saugiai prisijungti prie žiniatinklio</translation> <translation id="2712173769900027643">Prašyti leidimo</translation> -<translation id="2713444072780614174">Balta</translation> <translation id="2720342946869265578">Netoliese</translation> <translation id="2721148159707890343">Užklausa sėkminga</translation> <translation id="2728127805433021124">Serverio sertifikatas pasirašytas naudojant nepatikimą parašo algoritmą.</translation> @@ -303,7 +300,6 @@ <translation id="3303855915957856445">Nerasta jokių paieškos rezultatų</translation> <translation id="3305707030755673451"><ph name="TIME" /> duomenys buvo užšifruoti naudojant sinchronizavimo slaptafrazę. Įveskite ją, kad pradėtumėte sinchronizuoti.</translation> <translation id="3320021301628644560">Atsiskaitymo adreso pridėjimas</translation> -<translation id="3329013043687509092">Spalvų sodrumas</translation> <translation id="333371639341676808">Neleiskite šiam puslapiui kurti papildomų dialogo langų.</translation> <translation id="3338095232262050444">Saugi</translation> <translation id="3340978935015468852">nustatymų</translation> @@ -414,7 +410,6 @@ <translation id="4103249731201008433">Netinkamas įrenginio serijos numeris</translation> <translation id="410351446219883937">Automatinis paleidimas</translation> <translation id="4103763322291513355">Apsilankykite <strong>chrome://policy</strong>, kad peržiūrėtumėte į juodąjį sąrašą įtrauktų URL sąrašą ir kitą politiką, kurią priverstinai paleido sistemos administratorius.</translation> -<translation id="4115378294792113321">Purpurinė</translation> <translation id="4116663294526079822">Visada leisti šioje svetainėje</translation> <translation id="4117700440116928470">Politikos aprėptis nepalaikoma.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{Dar 1}one{Dar #}few{Dar #}many{Dar #}other{Dar #}}</translation> @@ -625,7 +620,6 @@ <translation id="5869522115854928033">Išsaugoti slaptažodžiai</translation> <translation id="5872918882028971132">Pasiūlymai tėvams</translation> <translation id="5893752035575986141">Kredito kortelės tinkamos.</translation> -<translation id="5901630391730855834">Geltona</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (sinchronizuota)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{Naudojamas 1 slapukas}one{Naudojamas # slapukas}few{Naudojami # slapukai}many{Naudojama # slapuko}other{Naudojama # slapukų}}</translation> <translation id="5959728338436674663">Automatiškai siųsti tam tikrą <ph name="BEGIN_WHITEPAPER_LINK" />sistemos informaciją ir puslapio turinį<ph name="END_WHITEPAPER_LINK" /> į sistemą „Google“ siekiant padėti aptikti pavojingas programas ir svetaines. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -636,12 +630,10 @@ <translation id="5990559369517809815">Plėtinys užblokavo serveriui teikiamas užklausas.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{1 puslapis}one{# puslapis}few{# puslapiai}many{# puslapio}other{# puslapių}}</translation> -<translation id="6017514345406065928">Žalia</translation> <translation id="6017850046339264347">Užgrobėjai svetainėje <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> gali įdiegti klaidinančių programų, kurios apsimeta kitomis programomis, arba rinkti duomenis, naudojamus jums stebėti. <ph name="BEGIN_LEARN_MORE_LINK" />Sužinokite daugiau<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (sinchronizuota)</translation> <translation id="6027201098523975773">Įveskite pavadinimą</translation> <translation id="6040143037577758943">Uždaryti</translation> -<translation id="6042308850641462728">Daugiau</translation> <translation id="6047233362582046994">Jei suprantate, kokia rizika gali kilti jūsų saugai, galite <ph name="BEGIN_LINK" />apsilankyti šioje svetainėje<ph name="END_LINK" />, kol iš jos dar nepašalintos kenkėjiškos programos.</translation> <translation id="6047927260846328439">Šiuo turiniu gali būti bandoma apgaule priversti jus įdiegti programinę įrangą arba atskleisti asmens informaciją. <ph name="BEGIN_LINK" />Rodyti vis tiek<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Šiuo metu negalite apsilankyti <ph name="SITE" />, nes svetainėje naudojamas sertifikatų prisegimas. Tinklo klaidos ir užpuolimai dažniausiai yra laikini, todėl šis puslapis vėliau tikriausiai veiks.</translation> @@ -718,7 +710,6 @@ <translation id="6710213216561001401">Ankstesnis</translation> <translation id="6710594484020273272"><Įveskite paieškos terminą></translation> <translation id="6711464428925977395">Kažkas negerai su tarpiniu serveriu arba adresas netinkamas.</translation> -<translation id="6727102863431372879">Nustatyti</translation> <translation id="674375294223700098">Nežinoma serverio sertifikato klaida.</translation> <translation id="6753269504797312559">Politikos vertė</translation> <translation id="6757797048963528358">Įjungta įrenginio miego būsena.</translation> @@ -802,7 +793,6 @@ <translation id="7518003948725431193">Nerasta nė vieno tinklalapio šiuo žiniatinklio adresu: <ph name="URL" /></translation> <translation id="7521387064766892559">„JavaScript“</translation> <translation id="7526934274050461096">Jūsų ryšys su šia svetaine nėra privatus</translation> -<translation id="7535087603100972091">Reikšmė</translation> <translation id="7537536606612762813">Privaloma</translation> <translation id="7542403920425041731">Kai patvirtinsite, išsami kortelės informacija bus bendrinama su šia svetaine.</translation> <translation id="7542995811387359312">Automatinis kredito kortelės informacijos pildymas neleidžiamas, nes šiai formai nenaudojamas saugus ryšys.</translation> @@ -813,7 +803,6 @@ <translation id="7567204685887185387">Šiam serveriui nepavyko patvirtinti, kad tai yra <ph name="DOMAIN" />; jo saugos sertifikatas gali būti neteisėtai išduotas. Taip gali nutikti dėl netinkamos konfigūracijos ar dėl ryšį pertraukusio užgrobėjo.</translation> <translation id="7568593326407688803">Šis puslapis yra<ph name="ORIGINAL_LANGUAGE" />Ar norėtumėte jį išversti?</translation> <translation id="7569952961197462199">Pašalinti kredito kortelės informaciją iš „Chrome“?</translation> -<translation id="7569983096843329377">Juoda</translation> <translation id="7578104083680115302">Greitai mokėkite svetainėse ir programose įvairiuose įrenginiuose naudodami korteles, kurias išsaugojote „Google“.</translation> <translation id="7588950540487816470">Fizinis žiniatinklis</translation> <translation id="7592362899630581445">Serverio sertifikatas pažeidžia pavadinimų apribojimus.</translation> @@ -865,7 +854,6 @@ <translation id="79338296614623784">Įveskite tinkamą telefono numerį</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">Serverio sertifikatas dar negalioja.</translation> -<translation id="7942349550061667556">Raudona</translation> <translation id="7947285636476623132">Patikrinkite galiojimo pabaigos metus ir bandykite dar kartą</translation> <translation id="7951415247503192394">(32 bitų)</translation> <translation id="7956713633345437162">Žymės mobiliesiems</translation> @@ -959,7 +947,6 @@ <translation id="8870413625673593573">Neseniai uždaryta</translation> <translation id="8874824191258364635">Įveskite tinkamą kortelės numerį</translation> <translation id="8876793034577346603">Analizuojant tinklo konfigūraciją įvyko klaida.</translation> -<translation id="8889402386540077796">Spalva</translation> <translation id="8891727572606052622">Netinkamas įgaliotojo serverio režimas.</translation> <translation id="889901481107108152">Deja, šis eksperimentas negalimas platformoje.</translation> <translation id="8903921497873541725">Artinti</translation> @@ -968,7 +955,6 @@ <translation id="8938939909778640821">Tinkamos kredito ir išankstinio mokėjimo kortelės</translation> <translation id="8957210676456822347">Fiksuotojo portalo autorizavimas</translation> <translation id="8971063699422889582">Baigėsi serverio sertifikato galiojimo laikas.</translation> -<translation id="8986494364107987395">Automatiškai siųsti naudojimo statistiką ir strigčių ataskaitas „Google“</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">Pateiktoje svetainėje yra kenkėjiškų programų</translation> <translation id="8997023839087525404">Serveris pateikė sertifikatą, kuris nebuvo viešai atskleistas naudojant sertifikato skaidrumo politiką. Tai yra tam tikriems sertifikatams taikomas reikalavimas, siekiant užtikrinti, jog jie patikimi ir apsaugo nuo įsilaužėlių.</translation> @@ -984,7 +970,6 @@ <translation id="9049981332609050619">Bandėte pasiekti <ph name="DOMAIN" />, bet serveris pateikė neteisingą sertifikatą.</translation> <translation id="9050666287014529139">Slaptafrazė</translation> <translation id="9065203028668620118">Redaguoti</translation> -<translation id="9068849894565669697">Pasirinkite spalvą</translation> <translation id="9069693763241529744">Užblokuota pagal plėtinį</translation> <translation id="9076283476770535406">Joje gali būti suaugusiesiems skirto turinio</translation> <translation id="9078964945751709336">Būtina pateikti daugiau informacijos</translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb index f2335f94..19387037 100644 --- a/components/strings/components_strings_lv.xtb +++ b/components/strings/components_strings_lv.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Tiek gaidīta savienojuma izveide...</translation> <translation id="153384715582417236">Pagaidām tas arī viss!</translation> <translation id="1549470594296187301">Lai izmantotu šo funkciju, ir jābūt iespējotai valodai JavaScript.</translation> -<translation id="1555130319947370107">Zila</translation> <translation id="1559528461873125649">Nav tāda faila vai direktorija</translation> <translation id="1583429793053364125">Šīs tīmekļa lapas rādīšanas laikā radās kļūda.</translation> <translation id="1592005682883173041">Piekļuve lokālajiem datiem</translation> <translation id="1594030484168838125">Izvēlēties</translation> -<translation id="161042844686301425">Ciānzila</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1629803312968146339">Vai vēlaties, lai Chrome saglabātu šo karti?</translation> <translation id="1639239467298939599">Notiek ielāde</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Automātiskā aizpilde</translation> <translation id="2710942282213947212">Programmatūra jūsu datorā, kuras dēļ pārlūkā Chromium nevar izveidot drošu tīmekļa savienojumu</translation> <translation id="2712173769900027643">Lūgt atļauju</translation> -<translation id="2713444072780614174">Balta</translation> <translation id="2720342946869265578">Tuvumā</translation> <translation id="2721148159707890343">Pieprasījums bija veiksmīgs.</translation> <translation id="2728127805433021124">Servera sertifikāts ir parakstīts, izmantojot vāju paraksta algoritmu.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">Netika atrasts neviens meklēšanas rezultāts.</translation> <translation id="3305707030755673451">Jūsu dati tika šifrēti, izmantojot jūsu sinhronizācijas ieejas frāzi šādā datumā: <ph name="TIME" />. Lai sāktu sinhronizāciju, ievadiet ieejas frāzi.</translation> <translation id="3320021301628644560">Norēķinu adreses pievienošana</translation> -<translation id="3329013043687509092">Piesātinājums</translation> <translation id="333371639341676808">Neļaujiet šai lapai veidot papildu dialogus.</translation> <translation id="3338095232262050444">Droši</translation> <translation id="3340978935015468852">Iestatījumi</translation> @@ -412,7 +408,6 @@ <translation id="4103249731201008433">Ierīces sērijas numurs nav derīgs.</translation> <translation id="410351446219883937">Automātiskā atskaņošana</translation> <translation id="4103763322291513355">Apmeklējiet vietni <strong>chrome://policy</strong>, lai skatītu melnajā sarakstā iekļautos vietrāžus URL, kā arī citas politikas, ko noteicis sistēmas administrators.</translation> -<translation id="4115378294792113321">Fuksīnsarkana</translation> <translation id="4116663294526079822">Vienmēr atļaut šajā vietnē</translation> <translation id="4117700440116928470">Politikas diapazons netiek atbalstīts.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{vēl 1}zero{vēl #}one{vēl #}other{vēl #}}</translation> @@ -623,7 +618,6 @@ <translation id="5869522115854928033">Saglabātās paroles</translation> <translation id="5872918882028971132">Vecāku ieteikumi</translation> <translation id="5893752035575986141">Tiek pieņemtas kredītkartes.</translation> -<translation id="5901630391730855834">Dzeltena</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (veikta sinhronizācija)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 tiek lietots}zero{# tiek lietoti}one{# tiek lietots}other{# tiek lietoti}}</translation> <translation id="5959728338436674663">Automātiski sūtīt Google serveriem noteiktu <ph name="BEGIN_WHITEPAPER_LINK" />sistēmas informāciju un lapu saturu<ph name="END_WHITEPAPER_LINK" />, lai palīdzētu noteikt bīstamas lietotnes un vietnes. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -634,12 +628,10 @@ <translation id="5990559369517809815">Paplašinājums ir bloķējis pieprasījumus serverim.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{1. lapa}zero{#. lapa}one{#. lapa}other{#. lapa}}</translation> -<translation id="6017514345406065928">Zaļa</translation> <translation id="6017850046339264347">Uzbrucēji vietnē <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> varētu instalēt maldinošas lietotnes, kas uzdodas par citu saturu, vai ievākt datus, ko izmantot jūsu izsekošanai. <ph name="BEGIN_LEARN_MORE_LINK" />Uzziniet vairāk<ph name="END_LEARN_MORE_LINK" />.</translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (veikta sinhronizācija)</translation> <translation id="6027201098523975773">Ievadiet vārdu</translation> <translation id="6040143037577758943">Aizvērt</translation> -<translation id="6042308850641462728">Vairāk</translation> <translation id="6047233362582046994">Ja apzināties drošības risku, varat arī <ph name="BEGIN_LINK" />apmeklēt šo vietni<ph name="END_LINK" />, pirms ir noņemtas kaitīgās lietotnes.</translation> <translation id="6047927260846328439">Ar šo saturu jūs var maldināt un panākt, ka instalējat programmatūru vai atklājat personas informāciju. <ph name="BEGIN_LINK" />Tāpat rādīt<ph name="END_LINK" />.</translation> <translation id="6051221802930200923">Pašlaik nevarat apmeklēt vietni <ph name="SITE" />, jo tajā tiek izmantota sertifikātu piespraušana. Tā kā tīkla kļūdas un uzbrukumi parasti ir īslaicīgi, visticamāk, šī lapa vēlāk darbosies.</translation> @@ -716,7 +708,6 @@ <translation id="6710213216561001401">Iepriekšējais</translation> <translation id="6710594484020273272"><Ierakstiet meklēšanas vienumu></translation> <translation id="6711464428925977395">Starpniekserverī radās kļūda, vai arī adrese nav pareiza.</translation> -<translation id="6727102863431372879">Iestatīt</translation> <translation id="674375294223700098">Nezināma servera sertifikāta kļūda.</translation> <translation id="6753269504797312559">Politikas vērtība</translation> <translation id="6757797048963528358">Ierīce tika pārslēgta miega režīmā.</translation> @@ -800,7 +791,6 @@ <translation id="7518003948725431193">Šādā tīmekļa adresē netika atrasta neviena tīmekļa lapa: <ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">Jūsu savienojums ar šo vietni nav privāts.</translation> -<translation id="7535087603100972091">Vērtība</translation> <translation id="7537536606612762813">Obligāti</translation> <translation id="7542403920425041731">Pēc apstiprinājuma jūsu kartes informācija tiks kopīgota ar šo vietni.</translation> <translation id="7542995811387359312">Automātiska kredītkartes numura ievadīšana ir atspējota, jo šai veidlapai netiek izmantots drošs savienojums.</translation> @@ -811,7 +801,6 @@ <translation id="7567204685887185387">Šis serveris nevarēja pierādīt, ka šī ir vietne <ph name="DOMAIN" />; tās drošības sertifikāts, iespējams, ir izveidots krāpnieciski. Iespējams, tas ir nepareizas konfigurācijas dēļ vai arī kāds ir ļaunprātīgi izmantojis jūsu savienojumu.</translation> <translation id="7568593326407688803">Šī lapa ir rakstīta<ph name="ORIGINAL_LANGUAGE" />valodā. Vai vēlaties to tulkot?</translation> <translation id="7569952961197462199">Vai noņemt kredītkarti no pārlūka Chrome?</translation> -<translation id="7569983096843329377">Melna</translation> <translation id="7578104083680115302">Ātri apmaksājiet pirkumus vietnēs un lietotnēs no dažādām ierīcēm, izmantojot kartes, ko esat saglabājis Google sistēmā.</translation> <translation id="7588950540487816470">Fiziskais tīmeklis</translation> <translation id="7592362899630581445">Servera sertifikātā ir pārkāpti nosaukuma ierobežojumi.</translation> @@ -863,7 +852,6 @@ <translation id="79338296614623784">Ievadiet derīgu tālruņa numuru</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">Servera sertifikāts vēl nav apstiprināts.</translation> -<translation id="7942349550061667556">Sarkana</translation> <translation id="7947285636476623132">Pārbaudiet derīguma termiņa gadu un mēģiniet vēlreiz.</translation> <translation id="7951415247503192394">(32 bitu)</translation> <translation id="7956713633345437162">Mobilās grāmatzīmes</translation> @@ -957,7 +945,6 @@ <translation id="8870413625673593573">Nesen aizvērtas</translation> <translation id="8874824191258364635">Ievadiet derīgu kartes numuru</translation> <translation id="8876793034577346603">Neizdevās parsēt tīkla konfigurāciju.</translation> -<translation id="8889402386540077796">Nokrāsa</translation> <translation id="8891727572606052622">Nederīgs starpniekservera režīms.</translation> <translation id="889901481107108152">Diemžēl šis eksperiments nav pieejams jūsu platformā.</translation> <translation id="8903921497873541725">Tuvināt</translation> @@ -966,7 +953,6 @@ <translation id="8938939909778640821">Atbalstītās kredītkartes un priekšapmaksas kartes</translation> <translation id="8957210676456822347">Caurlaides lapas autorizācija</translation> <translation id="8971063699422889582">Servera sertifikātam ir beidzies derīguma termiņš.</translation> -<translation id="8986494364107987395">Automātiski sūtīt lietošanas statistiku un avāriju pārskatus uzņēmumam Google</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">Vietnē, kura tiks atvērta, ir kaitīgas programmas</translation> <translation id="8997023839087525404">Serveris uzrādīja sertifikātu, kas netika publiski atklāts, izmantojot Certificate Transparency politiku. Šī ir prasība noteiktiem sertifikātiem, lai nodrošinātu to uzticamību un aizsardzību pret uzbrucējiem.</translation> @@ -982,7 +968,6 @@ <translation id="9049981332609050619">Jūs centāties piekļūt <ph name="DOMAIN" />, bet serveris piedāvāja nederīgu sertifikātu.</translation> <translation id="9050666287014529139">Ieejas frāze</translation> <translation id="9065203028668620118">Labot</translation> -<translation id="9068849894565669697">Krāsas izvēle</translation> <translation id="9069693763241529744">Bloķēja paplašinājums</translation> <translation id="9076283476770535406">Vietnē var būt pieaugušajiem paredzēts saturs</translation> <translation id="9078964945751709336">Nepieciešama plašāka informācija.</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb index 04c750d..d6028422 100644 --- a/components/strings/components_strings_ml.xtb +++ b/components/strings/components_strings_ml.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">കണക്ഷനുവേണ്ടി കാക്കുന്നു…</translation> <translation id="153384715582417236">ഇപ്പോൾ ഇത്രമാത്രമേ ലഭ്യമായിട്ടുള്ളൂ</translation> <translation id="1549470594296187301">ഈ ഫീച്ചർ ഉപയോഗിക്കാൻ JavaScript പ്രവർത്തനക്ഷമമാക്കിയിരിക്കണം.</translation> -<translation id="1555130319947370107">നീല</translation> <translation id="1559528461873125649">അത്തരത്തിലുള്ള ഫയലോ ഡയറക്ടറിയോ ഇല്ല</translation> <translation id="1583429793053364125">ഈ വെബ്പേജ് പ്രദർശിപ്പിക്കുമ്പോൾ എന്തോ കുഴപ്പം സംഭവിച്ചു.</translation> <translation id="1592005682883173041">പ്രാദേശിക ഡാറ്റ ആക്സസ്സ്</translation> <translation id="1594030484168838125">തിരഞ്ഞെടുക്കുക</translation> -<translation id="161042844686301425">സിയാൻ</translation> <translation id="1620510694547887537">ക്യാമറ</translation> <translation id="1629803312968146339">Chrome ഈ കാർഡ് സംരക്ഷിക്കണോ?</translation> <translation id="1639239467298939599">ലോഡുചെയ്യുന്നു</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">ഓട്ടോഫില്</translation> <translation id="2710942282213947212">വെബിലേക്ക് സുരക്ഷിതമായി കണക്റ്റുചെയ്യുന്നതിൽ നിന്ന് Chromium-ത്തിനെ നിങ്ങളുടെ കമ്പ്യൂട്ടറിലെ സോഫ്റ്റ്വെയർ തടയുന്നു</translation> <translation id="2712173769900027643">അനുമതി ചോദിക്കുക</translation> -<translation id="2713444072780614174">വെള്ള</translation> <translation id="2720342946869265578">സമീപമുള്ളവ</translation> <translation id="2721148159707890343">അഭ്യർത്ഥന വിജയിച്ചു</translation> <translation id="2728127805433021124">ഒരു ദുര്ബ്ബല സിഗ്നേച്ചര് അല്ഗോരിതം ഉപയോഗിച്ചുകൊണ്ട് സെര്വറിന്റെ സര്ട്ടിഫിക്കറ്റ് ഒപ്പുവച്ചു.</translation> @@ -301,7 +298,6 @@ <translation id="3303855915957856445">തിരയൽ ഫലങ്ങളൊന്നും കണ്ടെത്തിയില്ല</translation> <translation id="3305707030755673451"><ph name="TIME" />-ന് നിങ്ങളുടെ സമന്വയ പാസ്ഫ്രെയ്സ് ഉപയോഗിച്ച് ഡാറ്റ എൻക്രിപ്റ്റുചെയ്തു. സമന്വയം ആരംഭിക്കുന്നതിന് ഇത് നൽകുക.</translation> <translation id="3320021301628644560">ബില്ലിംഗ് വിലാസം ചേർക്കുക</translation> -<translation id="3329013043687509092">സാച്ചുറേഷൻ</translation> <translation id="333371639341676808">അധികമുള്ള ഡയലോഗുകള് സൃഷ്ടിക്കുന്നതില് നിന്ന് ഈ പേജിനെ തടയൂ.</translation> <translation id="3338095232262050444">സുരക്ഷിതം</translation> <translation id="3340978935015468852">ക്രമീകരണങ്ങൾ</translation> @@ -412,7 +408,6 @@ <translation id="4103249731201008433">ഉപകരണ സീരിയൽ നമ്പർ അസാധുവാണ്</translation> <translation id="410351446219883937">സ്വയം പ്ലേചെയ്യൽ</translation> <translation id="4103763322291513355">ബ്ലാക്ക്ലിസ്റ്റിൽപ്പെട്ട URL-കളുടെ ലിസ്റ്റും നിങ്ങളുടെ സിസ്റ്റം അഡ്മിനിസ്ട്രേറ്റർ നടപ്പിലാക്കിയ മറ്റ് നയങ്ങളും കാണുന്നതിന് <strong>chrome://policy</strong> സന്ദർശിക്കുക.</translation> -<translation id="4115378294792113321">മജന്ത</translation> <translation id="4116663294526079822">ഈ സൈറ്റിൽ എല്ലായ്പ്പോഴും അനുവദിക്കുക</translation> <translation id="4117700440116928470">നയ സ്കോപ്പ് പിന്തുണയ്ക്കുന്നില്ല.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{മറ്റൊരെണ്ണം}other{മറ്റ് # എണ്ണം}}</translation> @@ -623,7 +618,6 @@ <translation id="5869522115854928033">സംരക്ഷിച്ച പാസ്വേഡുകള്</translation> <translation id="5872918882028971132">പാരന്റ് നിർദ്ദേശങ്ങൾ</translation> <translation id="5893752035575986141">ക്രെഡിറ്റ് കാർഡുകൾ സ്വീകരിക്കുന്നു.</translation> -<translation id="5901630391730855834">മഞ്ഞ</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (സമന്വയിപ്പിച്ചത്)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{ഒരെണ്ണം ഉപയോഗത്തിലുണ്ട്}other{# എണ്ണം ഉപയോഗത്തിലുണ്ട്}}</translation> <translation id="5959728338436674663">അപകടകരമായ ആപ്സുകളും സൈറ്റുകളും കണ്ടെത്താൻ സഹായിക്കുന്നതിന് ചില <ph name="BEGIN_WHITEPAPER_LINK" />സിസ്റ്റം വിവരങ്ങളും പേജ് ഉള്ളടക്കവും<ph name="END_WHITEPAPER_LINK" /> Google-ന് സ്വയമേവ അയയ്ക്കുക. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -634,12 +628,10 @@ <translation id="5990559369517809815">സെർവറിലേക്കുള്ള അഭ്യർത്ഥനകൾ ഒരു വിപുലീകരണം തടഞ്ഞു.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{പേജ് 1}other{പേജ് #}}</translation> -<translation id="6017514345406065928">പച്ച</translation> <translation id="6017850046339264347"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> എന്നതിലുള്ള അക്രമികൾ, മറ്റെന്തെങ്കിലുമാണെന്ന വ്യാജേന തെറ്റിദ്ധരിപ്പിക്കുന്ന ആപ്പുകൾ ഇൻസ്റ്റാൾ ചെയ്യാം അല്ലെങ്കിൽ ഡാറ്റ ശേഖരിച്ച് നിങ്ങളെ ട്രാക്കുചെയ്യാൻ ഉപയോഗിക്കാം. <ph name="BEGIN_LEARN_MORE_LINK" />കൂടുതലറിയുക<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (സമന്വയിപ്പിച്ചത്)</translation> <translation id="6027201098523975773">ഒരു പേര് നൽകുക</translation> <translation id="6040143037577758943">അടയ്ക്കുക</translation> -<translation id="6042308850641462728">കൂടുതൽ</translation> <translation id="6047233362582046994">നിങ്ങളുടെ സുരക്ഷയെ ബാധിക്കാനിടയുണ്ടെന്ന് മനസ്സിലാക്കുകയാണെങ്കിൽ, ദോഷകരമായ ആപ്പുകൾ നീക്കംചെയ്യുന്നതിനു മുമ്പ് <ph name="BEGIN_LINK" />ഈ സൈറ്റ് സന്ദർശിക്കുക<ph name="END_LINK" />.</translation> <translation id="6047927260846328439">സോഫ്റ്റ്വെയർ ഇൻസ്റ്റാൾ ചെയ്യുന്നതിലേക്കോ വ്യക്തിഗത വിവരങ്ങൾ വെളിപ്പെടുത്തുന്നതിലേക്കോ നിങ്ങളെ തന്ത്രപൂർവ്വം നയിച്ചുകൊണ്ട്, ഈ ഉള്ളടക്കം നിങ്ങളെ കബളിപ്പിക്കാൻ ശ്രമിച്ചേക്കാം. <ph name="BEGIN_LINK" />എന്തായാലും കാണിക്കുക<ph name="END_LINK" /></translation> <translation id="6051221802930200923"><ph name="SITE" /> എന്ന വെബ്സൈറ്റ് സർട്ടിഫിക്കറ്റ് പിന്നിംഗ് ഉപയോഗിക്കുന്നതിനാൽ നിങ്ങൾക്കിപ്പോൾ അത് സന്ദർശിക്കാനാകില്ല. നെറ്റ്വർക്ക് പിശകുകളും ആക്രമണങ്ങളും സാധാരണയായി താൽക്കാലികമായിരിക്കും, അതിനാൽ ഈ പേജ് മിക്കവാറും പിന്നീട് പ്രവർത്തിക്കും.</translation> @@ -716,7 +708,6 @@ <translation id="6710213216561001401">കഴിഞ്ഞ</translation> <translation id="6710594484020273272"><തിരയൽ പദം നൽകുക></translation> <translation id="6711464428925977395">പ്രോക്സി സെർവറിൽ എന്തോ പ്രശ്നമുണ്ട്, അല്ലെങ്കിൽ വിലാസം തെറ്റാണ്.</translation> -<translation id="6727102863431372879">സജ്ജമാക്കുക</translation> <translation id="674375294223700098">അറിയപ്പെടാത്ത സെര്വര് സര്ട്ടിഫിക്കറ്റ് പിശക്.</translation> <translation id="6753269504797312559">നയ മൂല്യം</translation> <translation id="6757797048963528358">നിങ്ങളുടെ ഉപകരണം സുഷുപ്തിയിലായി.</translation> @@ -800,7 +791,6 @@ <translation id="7518003948725431193">വെബ് വിലാസത്തിനായി വെബ്പേജൊന്നും കണ്ടെത്തിയില്ല: <ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">ഈ സൈറ്റിലേക്കുള്ള നിങ്ങളുടെ കണക്ഷൻ സ്വകാര്യമല്ല</translation> -<translation id="7535087603100972091">മൂല്യം</translation> <translation id="7537536606612762813">നിർബന്ധിതം</translation> <translation id="7542403920425041731">സ്ഥിരീകരിച്ചുകഴിഞ്ഞാൽ, നിങ്ങളുടെ കാർഡ് വിശദാംശങ്ങൾ ഈ സൈറ്റുമായി പങ്കിടും.</translation> <translation id="7542995811387359312">ഈ ഫോം ഒരു സുരക്ഷിത കണക്ഷന് ഉപയോഗിക്കാത്തതിനാല് സ്വപ്രേരിത ക്രെഡിറ്റ് കാര്ഡ് പൂരിപ്പിക്കല് അപ്രാപ്തമാക്കി.</translation> @@ -811,7 +801,6 @@ <translation id="7567204685887185387">ഈ സെർവറിന് അത് <ph name="DOMAIN" /> ആണെന്ന് തെളിയിക്കാനായില്ല; സെർവറിന്റെ സുരക്ഷ സർട്ടിഫിക്കറ്റ് വഞ്ചനാപരമായി ഇഷ്യൂ ചെയ്തിരിക്കാം. തെറ്റായ കോൺഫിഗറേഷൻ കാരണമോ ഒരു അക്രമണകാരി നിങ്ങളുടെ കണക്ഷനെ തടസ്സപ്പെടുത്തുന്നത് കൊണ്ടോ ആയിരിക്കാം ഇത് സംഭവിച്ചത്.</translation> <translation id="7568593326407688803">ഈ പേജ്<ph name="ORIGINAL_LANGUAGE" />ലാണ് നിങ്ങളത് വിവര്ത്തനം ചെയ്യാന് താല്പ്പര്യപ്പെടുന്നോ?</translation> <translation id="7569952961197462199">Chrome-ൽ നിന്ന് ക്രെഡിറ്റ് കാർഡ് നീക്കംചെയ്യണോ?</translation> -<translation id="7569983096843329377">കറുപ്പ്</translation> <translation id="7578104083680115302">നിങ്ങൾ Google-ൽ സംരക്ഷിച്ച കാർഡുകൾ ഉപയോഗിച്ച് ഉപകരണങ്ങളിലുടനീളമുള്ള സൈറ്റുകളിലും ആപ്സിലും പെട്ടെന്ന് പണമടയ്ക്കുക.</translation> <translation id="7588950540487816470">ഫിസിക്കൽ വെബ്</translation> <translation id="7592362899630581445">സെർവറിന്റെ സർട്ടിഫിക്കറ്റ് പേരിന്റെ പരിധി ലംഘിക്കുന്നു.</translation> @@ -863,7 +852,6 @@ <translation id="79338296614623784">ശരിയായ ഒരു ഫോൺ നമ്പർ നൽകുക</translation> <translation id="7935318582918952113">DOM ഡിസ്റ്റിലർ</translation> <translation id="7938958445268990899">സെര്വറിന്റെ സര്ട്ടിഫിക്കറ്റ് ഇതുവരെയും സാധുവല്ല.</translation> -<translation id="7942349550061667556">ചുവപ്പ്</translation> <translation id="7947285636476623132">കാലാവധി തീരുന്ന വർഷം പരിശോധിച്ച് വീണ്ടും ശ്രമിച്ചുനോക്കൂ</translation> <translation id="7951415247503192394">(32-ബിറ്റ്)</translation> <translation id="7956713633345437162">മൊബൈൽ ബുക്ക്മാർക്കുകൾ</translation> @@ -957,7 +945,6 @@ <translation id="8870413625673593573">സമീപകാലത്ത് അടച്ചവ</translation> <translation id="8874824191258364635">ശരിയായ കാർഡ് നമ്പർ നൽകുക</translation> <translation id="8876793034577346603">നെറ്റ്വർക്ക് കോൺഫിഗറേഷൻ പാഴ്സുചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു</translation> -<translation id="8889402386540077796">ഹ്യൂ</translation> <translation id="8891727572606052622">അസാധുവായ പ്രോക്സി മോഡ്</translation> <translation id="889901481107108152">ക്ഷമിക്കണം, ഈ പരീക്ഷണം നിങ്ങളുടെ പ്ലാറ്റ്ഫോമിൽ ലഭ്യമല്ല.</translation> <translation id="8903921497873541725">സൂം ഇന്</translation> @@ -966,7 +953,6 @@ <translation id="8938939909778640821">ക്രെഡിറ്റ് കാർഡുകളും പ്രീപെയ്ഡ് കാർഡുകളും സ്വീകരിക്കുന്നു</translation> <translation id="8957210676456822347">ക്യാപ്റ്റീവ് പോർട്ടൽ അംഗീകരിക്കൽ</translation> <translation id="8971063699422889582">സെര്വറിന്റെ സര്ട്ടിഫിക്കറ്റ് കാലഹരണപ്പെട്ടു.</translation> -<translation id="8986494364107987395">Google ലേക്ക് സ്വപ്രേരിതമായി ഉപയോഗ സ്ഥിതിവിവരക്കണക്കുകളും ക്രാഷ് റിപ്പോര്ട്ടുകളും അയയ്ക്കുക</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">നിങ്ങൾ പോകാനിരിക്കുന്ന സൈറ്റിൽ ദോഷകരമായ പ്രോഗ്രാമുകളുണ്ട്</translation> <translation id="8997023839087525404">സർട്ടിഫിക്കറ്റ് സുതാര്യതാ നയം ഉപയോഗിച്ച് സെർവർ, എല്ലാവർക്കുമായി വെളുപ്പെടുത്തിയിട്ടില്ലാത്ത ഒരു സർട്ടിഫിക്കറ്റ് ലഭ്യമാക്കി. ചില സർട്ടിഫിക്കറ്റുകൾ വിശ്വാസയോഗ്യമാണെന്നും അക്രമകാരികളിൽ നിന്നും പരിരക്ഷിക്കുന്നതാണെന്നും ഉറപ്പാക്കാൻ അവയ്ക്ക് ഇത് ആവശ്യമാണ്.</translation> @@ -982,7 +968,6 @@ <translation id="9049981332609050619">നിങ്ങള് <ph name="DOMAIN" /> എന്നതില് എത്താന് ശ്രമിച്ചു, പക്ഷേ സെര്വര് ഒരു അസാധുവായ സര്ട്ടിഫിക്കറ്റ് അവതരിപ്പിച്ചു.</translation> <translation id="9050666287014529139">പാസ്ഫ്രെയ്സ്</translation> <translation id="9065203028668620118">എഡിറ്റുചെയ്യുക</translation> -<translation id="9068849894565669697">വർണ്ണം തിരഞ്ഞെടുക്കുക</translation> <translation id="9069693763241529744">ഒരു വിപുലീകരണം മുഖേന ബ്ലോക്കുചെയ്തു</translation> <translation id="9076283476770535406">ഇതിൽ മുതിർന്നവർക്കുള്ള ഉള്ളടക്കം ഉണ്ടായിരിക്കാം</translation> <translation id="9078964945751709336">കൂടുതൽ വിവരങ്ങൾ ആവശ്യമാണ്</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb index 2f9ccccb..46e1aa1 100644 --- a/components/strings/components_strings_mr.xtb +++ b/components/strings/components_strings_mr.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">कनेक्शनची वाट पाहत आहे...</translation> <translation id="153384715582417236">सध्या इतकेच</translation> <translation id="1549470594296187301">हे वैशिष्ट्य वापरण्यासाठी JavaScript सक्षम करणे आवश्यक आहे.</translation> -<translation id="1555130319947370107">निळा</translation> <translation id="1559528461873125649">अशी कोणतीही फाइल किंवा निर्देशिका नाही</translation> <translation id="1583429793053364125">हे वेबपृष्ठ प्रदर्शित करताना काहीतरी चूक झाली.</translation> <translation id="1592005682883173041">स्थानिक डेटा प्रवेश</translation> <translation id="1594030484168838125">निवडा</translation> -<translation id="161042844686301425">निळसर</translation> <translation id="1620510694547887537">कॅमेरा</translation> <translation id="1629803312968146339">Chrome ने हे कार्ड जतन करावे असे आपण इच्छिता?</translation> <translation id="1639239467298939599">लोड करीत आहे</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">ऑटोफिल</translation> <translation id="2710942282213947212">तुमच्या काँप्युटरवरील सॉफ्टवेअर Chromium ला वेबशी सुरक्षितपणे कनेक्ट होण्यापासून थांबवत आहे</translation> <translation id="2712173769900027643">परवानगी मागा</translation> -<translation id="2713444072780614174">पांढरा</translation> <translation id="2720342946869265578">जवळपास</translation> <translation id="2721148159707890343">विनंती यशस्वी</translation> <translation id="2728127805433021124">सर्व्हरचे प्रमाणपत्र कमकुवत स्वाक्षरी अल्गोरिदम वापरून स्वाक्षरित केले आहे.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">कोणतेही शोध परिणाम आढळले नाहीत</translation> <translation id="3305707030755673451">आपला डेटा आपल्या संकालन सांकेतिक वाक्यांशासह <ph name="TIME" /> वाजता कूटबद्ध केला होता. संकालन सुरु करण्यासाठी तो प्रविष्ट करा.</translation> <translation id="3320021301628644560">बिलिंग पत्ता जोडा</translation> -<translation id="3329013043687509092">संपृक्तता</translation> <translation id="333371639341676808">अतिरिक्त संवाद तयार करण्यापासून या पृष्ठाला प्रतिबंधित करा.</translation> <translation id="3338095232262050444">सुरक्षित</translation> <translation id="3340978935015468852">सेटिंग्ज</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">डीव्हाइस सिरीयल क्रमांक अवैध आहे</translation> <translation id="410351446219883937">ऑटोप्ले</translation> <translation id="4103763322291513355">आपल्या सिस्टीम प्रशासकाद्वारे प्रवर्तित काळ्यासूचीतील URLs आणि अन्य धोरणांची सूची पाहण्यासाठी <strong>chrome://policy</strong> ला भेट द्या.</translation> -<translation id="4115378294792113321">किरमिजी</translation> <translation id="4116663294526079822">या साइटवर नेहमी अनुमती द्या</translation> <translation id="4117700440116928470">धोरण कक्षा समर्थित नाही.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{अन्य 1}one{अन्य #}other{अन्य #}}</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">जतन केलेले संकेतशब्द</translation> <translation id="5872918882028971132">पालक सूचना</translation> <translation id="5893752035575986141">क्रेडिट कार्डे स्वीकारली जातात.</translation> -<translation id="5901630391730855834">पिवळा</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (सिंक केलेले)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 वापरात आहे}one{# वापरात आहे}other{# वापरात आहेत}}</translation> <translation id="5959728338436674663">धोकादायक अॅप्स आणि साइट शोधण्यात मदत करण्यासाठी काही <ph name="BEGIN_WHITEPAPER_LINK" />सिस्टीम माहिती आणि पृष्ठ सामग्री<ph name="END_WHITEPAPER_LINK" /> स्वयंचलितपणे Google कडे पाठवा. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">सर्व्हरला केल्या जाणार्या विनंत्या एका विस्ताराने अवरोधित केल्या गेल्या आहेत.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{पृष्ठ 1}one{पृष्ठ #}other{पृष्ठे #}}</translation> -<translation id="6017514345406065928">हिरवा</translation> <translation id="6017850046339264347"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />वर असलेले आक्रमणकर्ता फसवणारे अॅप्स इंस्टॉल करू शकतात जे दुसरे काहीतरी असल्याचे भासवू शकतात किंवा तुम्हाला शोधण्यासाठी डेटा वापरू शकतात. <ph name="BEGIN_LEARN_MORE_LINK" />अधिक जाणून घ्या<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (सिंक केलेले)</translation> <translation id="6027201098523975773">नाव प्रविष्ट करा</translation> <translation id="6040143037577758943">बंद करा</translation> -<translation id="6042308850641462728">अधिक</translation> <translation id="6047233362582046994">तुम्हाला तुमच्या सुरक्षेला असणारा धोका समजत असल्यास, हानिकारक अॅप्स काढले जाण्यापूर्वी तुम्ही <ph name="BEGIN_LINK" />या साइटला भेट देऊ शकता<ph name="END_LINK" />.</translation> <translation id="6047927260846328439">हा आशय तुम्हाला सॉफ्टवेअर इंस्टॉल करण्याचा किंवा वैयक्तिक माहिती उघड करण्याचा फसवा प्रयत्न करू शकेल. <ph name="BEGIN_LINK" />तरीही दाखवा<ph name="END_LINK" /></translation> <translation id="6051221802930200923">ही वेबसाइट प्रमाणपत्र पिनिंग वापरत असल्यामुळे तुम्ही आत्ता <ph name="SITE" /> पाहू शकणार नाही. नेटवर्क एरर आणि आक्रमणे शक्यतो तात्पुरती असतात, त्यामुळे हे पेज नंतर पाहता येईल.</translation> @@ -718,7 +710,6 @@ <translation id="6710213216561001401">मागील</translation> <translation id="6710594484020273272"><शोध संज्ञा प्रविष्ट करा></translation> <translation id="6711464428925977395">प्रॉक्सी सर्व्हरमध्ये काहीतरी चुकीचे आहे किंवा पत्ता चुकीचा आहे.</translation> -<translation id="6727102863431372879">सेट करा</translation> <translation id="674375294223700098">अज्ञात सर्व्हर प्रमाणपत्र त्रुटी.</translation> <translation id="6753269504797312559">धोरण मूल्य</translation> <translation id="6757797048963528358">आपले डीव्हाइस निष्क्रीय झाले.</translation> @@ -802,7 +793,6 @@ <translation id="7518003948725431193">या वेबपत्त्यासाठी वेबपृष्ठ आढळले नाही: <ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">या साइटवर तुमचे कनेक्शन खाजगी नाही</translation> -<translation id="7535087603100972091">मूल्य</translation> <translation id="7537536606612762813">अनिवार्य</translation> <translation id="7542403920425041731">तुम्ही निश्चित केल्यावर, तुमचे कार्ड तपशील या साइटसह शेअर केले जातील.</translation> <translation id="7542995811387359312">स्वयंचलित क्रेडिट कार्ड भरणे अक्षम झाले आहे कारण हा फॉर्म सुरक्षित कनेक्शन वापरत नाही.</translation> @@ -813,7 +803,6 @@ <translation id="7567204685887185387">हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षितता प्रमाणपत्र कदाचित लबाडीने जारी केले असावे. हे कदाचित एका चुकीच्या कॉन्फिगरेशनमुळे किंवा आक्रमणकर्त्याने आपले कनेक्शन आंतरखंडित केल्यामुळे झाले असू शकते.</translation> <translation id="7568593326407688803">हे पृष्ठ<ph name="ORIGINAL_LANGUAGE" />मध्ये आहे आपण याचा भाषांतर करु इच्छिता?</translation> <translation id="7569952961197462199">Chrome मधून क्रेडिट कार्ड काढायचे?</translation> -<translation id="7569983096843329377">काळा</translation> <translation id="7578104083680115302">आपण Google सह जतन केलेल्या कार्डचा वापर करून डिव्हाइसेसवरून द्रुतपणे साइट आणि अॅप्सवर देय द्या.</translation> <translation id="7588950540487816470">भौतिक वेब</translation> <translation id="7592362899630581445">सर्व्हरचे प्रमाणपत्र नाव मर्यादांचे उल्लंघन करते.</translation> @@ -865,7 +854,6 @@ <translation id="79338296614623784">वैध फोन नंबर प्रविष्ट करा</translation> <translation id="7935318582918952113">DOM डिस्टिलर</translation> <translation id="7938958445268990899">सर्व्हरचे प्रमाणपत्र अद्याप वैध नाही.</translation> -<translation id="7942349550061667556">लाल</translation> <translation id="7947285636476623132">आपले कालबाह्यता वर्ष तपासा आणि पुन्हा प्रयत्न करा</translation> <translation id="7951415247503192394">(32-बिट)</translation> <translation id="7956713633345437162">Mobile बुकमार्क</translation> @@ -958,7 +946,6 @@ <translation id="8870413625673593573">अलीकडे बंद</translation> <translation id="8874824191258364635">वैध कार्ड नंबर प्रविष्ट करा</translation> <translation id="8876793034577346603">विश्लेषण करण्यात नेटवर्क कॉन्फिगरेशन अयशस्वी.</translation> -<translation id="8889402386540077796">रंगछटा</translation> <translation id="8891727572606052622">अवैध प्रॉक्सी मोड.</translation> <translation id="889901481107108152">क्षमस्व, हा प्रयोग आपल्या प्लॅटफॉर्मवर उपलब्ध नाही.</translation> <translation id="8903921497873541725">झूम वाढवा</translation> @@ -967,7 +954,6 @@ <translation id="8938939909778640821">स्वीकारलेली क्रेडिट आणि प्रीपेड कार्डे</translation> <translation id="8957210676456822347">बंद पोर्टल प्राधिकृतता</translation> <translation id="8971063699422889582">सर्व्हरचे प्रमाणपत्र कालबाह्य झाले आहे.</translation> -<translation id="8986494364107987395">Google ला वापर आकडेवारी आणि क्रॅश अहवाल स्वयंचलितपणे पाठवा</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">पुढे असणार्या साइटमध्ये हानिकारक प्रोग्राम आहेत</translation> <translation id="8997023839087525404">सर्व्हरने प्रमाणपत्र पारदर्शकता धोरणाचा वापर करून सार्वजनिकरीत्या उघड न केलेले एक प्रमाणपत्र सादर केले. काही प्रमाणपत्रे विश्वसनीय आहेत आणि आक्रमणकर्त्यांविरूद्ध संरक्षण करतात हे सुनिश्चित करण्यासाठी त्यांच्यासाठी ही एक आवश्यकता आहे.</translation> @@ -983,7 +969,6 @@ <translation id="9049981332609050619">आपण <ph name="DOMAIN" /> वर पोहोचण्याचा प्रयत्न केला, परंतु सर्व्हरने अवैध प्रमाणपत्र सादर केले आहे.</translation> <translation id="9050666287014529139">सांकेतिक वाक्यांश</translation> <translation id="9065203028668620118">संपादन</translation> -<translation id="9068849894565669697">रंग निवडा</translation> <translation id="9069693763241529744">एक विस्ताराने ब्लॉक केलेले</translation> <translation id="9076283476770535406">कदाचित तिच्यामध्ये प्रौढ सामग्री असू शकते</translation> <translation id="9078964945751709336">अधिक माहिती आवश्यक आहे</translation>
diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb index 397ba4c..7241772 100644 --- a/components/strings/components_strings_ms.xtb +++ b/components/strings/components_strings_ms.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Menunggu sambungan...</translation> <translation id="153384715582417236">Itu sahaja buat masa ini</translation> <translation id="1549470594296187301">Javascript mesti didayakan untuk menggunakan ciri ini.</translation> -<translation id="1555130319947370107">Biru</translation> <translation id="1559528461873125649">Tiada fail atau direktori sedemikian</translation> <translation id="1583429793053364125">Kesilapan berlaku semasa memaparkan halaman web ini.</translation> <translation id="1592005682883173041">Akses Data Setempat</translation> <translation id="1594030484168838125">Pilih</translation> -<translation id="161042844686301425">Sian</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1629803312968146339">Adakah anda mahu Chrome menyimpan kad ini?</translation> <translation id="1639239467298939599">Memuatkan</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Autoisi</translation> <translation id="2710942282213947212">Perisian pada komputer anda menghalang Chromium daripada menyambung ke web dengan selamat</translation> <translation id="2712173769900027643">Minta kebenaran</translation> -<translation id="2713444072780614174">Putih</translation> <translation id="2720342946869265578">Berdekatan</translation> <translation id="2721148159707890343">Permintaan berjaya</translation> <translation id="2728127805433021124">Sijil pelayan ditandatangani menggunakan algoritma tandatangan yang lemah.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">Tiada hasil carian ditemui</translation> <translation id="3305707030755673451">Data anda disulitkan dengan ungkapan laluan segerak anda pada <ph name="TIME" />. Masukkannya untuk memulakan penyegerakan.</translation> <translation id="3320021301628644560">Tambahkan alamat pengebilan</translation> -<translation id="3329013043687509092">Ketepuan</translation> <translation id="333371639341676808">Halang halaman ini daripada mencipta dialog tambahan.</translation> <translation id="3338095232262050444">Selamat</translation> <translation id="3340978935015468852">tetapan</translation> @@ -414,7 +410,6 @@ <translation id="4103249731201008433">Nombor siri peranti tidak sah</translation> <translation id="410351446219883937">Automain</translation> <translation id="4103763322291513355">Lawati <strong>chrome://policy</strong> untuk melihat senarai URL yang disenarai hitam dan dasar lain yang dikuatkuasakan oleh pentadbir sistem anda.</translation> -<translation id="4115378294792113321">Magenta</translation> <translation id="4116663294526079822">Sentiasa benarkan di tapak ini</translation> <translation id="4117700440116928470">Skop dasar tidak disokong.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 yang lain}other{# yang lain}}</translation> @@ -625,7 +620,6 @@ <translation id="5869522115854928033">Kata laluan disimpan</translation> <translation id="5872918882028971132">Cadangan Ibu Bapa</translation> <translation id="5893752035575986141">Kad kredit diterima.</translation> -<translation id="5901630391730855834">Kuning</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (disegerakkan)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 sedang digunakan}other{# sedang digunakan}}</translation> <translation id="5959728338436674663">Hantar secara automatik beberapa <ph name="BEGIN_WHITEPAPER_LINK" />maklumat sistem dan kandungan halaman<ph name="END_WHITEPAPER_LINK" /> kepada Google untuk membantu anda mengesan apl dan tapak yang berbahaya. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -636,12 +630,10 @@ <translation id="5990559369517809815">Permintaan pada pelayan telah disekat oleh sambungan.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Halaman 1}other{Halaman #}}</translation> -<translation id="6017514345406065928">Hijau</translation> <translation id="6017850046339264347">Penyerang di <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> boleh memasang apl yang mengelirukan yang menyamar menjadi sesuatu yang lain atau mengumpul data yang boleh digunakan untuk menjejak anda. <ph name="BEGIN_LEARN_MORE_LINK" />Ketahui lebih lanjut<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (disegerakkan)</translation> <translation id="6027201098523975773">Masukkan nama</translation> <translation id="6040143037577758943">Tutup</translation> -<translation id="6042308850641462728">Lagi</translation> <translation id="6047233362582046994">Jika anda memahami risiko terhadap keselamatan anda, anda boleh <ph name="BEGIN_LINK" />melawat tapak ini<ph name="END_LINK" /> sebelum program yang berbahaya ini dialih keluar.</translation> <translation id="6047927260846328439">Kandungan ini mungkin menggunakan tipu muslihat supaya anda memasang perisian atau mendedahkan maklumat peribadi. <ph name="BEGIN_LINK" />Tunjukkan juga<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Anda tidak boleh melawati <ph name="SITE" /> sekarang kerana tapak web ini menggunakan penyematan sijil. Ralat dan serangan rangkaian biasanya bersifat sementara. Oleh sebab itu, halaman ini mungkin akan berfungsi semula kemudian.</translation> @@ -718,7 +710,6 @@ <translation id="6710213216561001401">Sebelumnya</translation> <translation id="6710594484020273272"><Taip istilah carian></translation> <translation id="6711464428925977395">Ada sesuatu yang tidak kena dengan pelayan proksi atau alamat tidak betul.</translation> -<translation id="6727102863431372879">Tetapkan</translation> <translation id="674375294223700098">Ralat sijil pelayan tidak diketahui.</translation> <translation id="6753269504797312559">Nilai dasar</translation> <translation id="6757797048963528358">Peranti anda tidak aktif.</translation> @@ -802,7 +793,6 @@ <translation id="7518003948725431193">Tiada halaman web dijumpai untuk alamat web: <ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">Sambungan anda ke tapak ini tidak berciri peribadi</translation> -<translation id="7535087603100972091">Nilai</translation> <translation id="7537536606612762813">Wajib</translation> <translation id="7542403920425041731">Setelah anda mengesahkan, butiran kad anda akan dikongsi dengan tapak ini.</translation> <translation id="7542995811387359312">Pengisian kad kredit automatik dilumpuhkan kerana borang ini tidak menggunakan sambungan selamat.</translation> @@ -813,7 +803,6 @@ <translation id="7567204685887185387">Pelayan ini tidak dapat membuktikan bahawa domainnya ialah <ph name="DOMAIN" />; sijil keselamatannya mungkin telah dikeluarkan melalui penipuan. Ini mungkin disebabkan oleh kesilapan konfigurasi atau penyerang yang memintasi sambungan anda.</translation> <translation id="7568593326407688803">Halaman ini adalah dalam<ph name="ORIGINAL_LANGUAGE" />Adakah anda ingin menterjemahkannya?</translation> <translation id="7569952961197462199">Alih keluar kad kredit daripada Chrome?</translation> -<translation id="7569983096843329377">Hitam</translation> <translation id="7578104083680115302">Bayar dengan cepat di tapak dan apl merentas peranti menggunakan kad yang telah disimpan dengan Google.</translation> <translation id="7588950540487816470">Web Fizikal</translation> <translation id="7592362899630581445">Sijil pelayan melanggar kekangan nama.</translation> @@ -865,7 +854,6 @@ <translation id="79338296614623784">Masukkan nombor telefon yang sah</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">Sijil pelayan masih belum sah.</translation> -<translation id="7942349550061667556">Merah</translation> <translation id="7947285636476623132">Semak tahun tamat tempoh anda dan cuba lagi</translation> <translation id="7951415247503192394">(32-bit)</translation> <translation id="7956713633345437162">Penanda halaman mudah alih</translation> @@ -959,7 +947,6 @@ <translation id="8870413625673593573">Ditutup Baru-baru Ini</translation> <translation id="8874824191258364635">Masukkan nombor kad yang sah</translation> <translation id="8876793034577346603">Konfigurasi rangkaian gagal dihuraikan.</translation> -<translation id="8889402386540077796">Rona</translation> <translation id="8891727572606052622">Mod proksi tidak sah.</translation> <translation id="889901481107108152">Maaf, eksperimen ini tidak tersedia pada platform anda.</translation> <translation id="8903921497873541725">Zum masuk</translation> @@ -968,7 +955,6 @@ <translation id="8938939909778640821">Kad kredit dan prabayar yang diterima</translation> <translation id="8957210676456822347">Keizinan Portal Tawanan</translation> <translation id="8971063699422889582">Sijil pelayan telah tamat tempoh.</translation> -<translation id="8986494364107987395">Hantar statistik penggunaan dan laporan nahas kepada Google secara automatik</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">Laman web yang akan dilayari mengandungi atur cara berbahaya</translation> <translation id="8997023839087525404">Pelayan memberikan sijil yang tidak didedahkan kepada umum menggunakan dasar Ketelusan Sijil. Ini merupakan keperluan bagi sesetengah sijil untuk memastikan sijil itu boleh dipercayai dan untuk melindungi pengguna daripada penyerang.</translation> @@ -984,7 +970,6 @@ <translation id="9049981332609050619">Anda cuba untuk mencapai <ph name="DOMAIN" />, tetapi pelayan memberikan sijil tidak sah.</translation> <translation id="9050666287014529139">Frasa laluan</translation> <translation id="9065203028668620118">Edit</translation> -<translation id="9068849894565669697">Pilih warna</translation> <translation id="9069693763241529744">Disekat oleh sambungan</translation> <translation id="9076283476770535406">Tapak mungkin mengandungi kandungan dewasa</translation> <translation id="9078964945751709336">Maklumat lanjut diperlukan</translation>
diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb index 2048b8a..99b9e6c4 100644 --- a/components/strings/components_strings_nl.xtb +++ b/components/strings/components_strings_nl.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Wachten op verbinding...</translation> <translation id="153384715582417236">Dat is voorlopig alles</translation> <translation id="1549470594296187301">JavaScript moet zijn ingeschakeld om deze functie te kunnen gebruiken.</translation> -<translation id="1555130319947370107">Blauw</translation> <translation id="1559528461873125649">Dit bestand of deze directory bestaat niet</translation> <translation id="1583429793053364125">Er is iets misgegaan met het weergeven van deze webpagina.</translation> <translation id="1592005682883173041">Lokale gegevenstoegang</translation> <translation id="1594030484168838125">Kiezen</translation> -<translation id="161042844686301425">Cyaan</translation> <translation id="1620510694547887537">Camera</translation> <translation id="1629803312968146339">Wil je dat Chrome deze kaart opslaat?</translation> <translation id="1639239467298939599">Laden</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Automatisch aanvullen</translation> <translation id="2710942282213947212">Software op je computer voorkomt dat Chromium veilig verbinding kan maken met internet</translation> <translation id="2712173769900027643">Toestemming vragen</translation> -<translation id="2713444072780614174">Wit</translation> <translation id="2720342946869265578">In de buurt</translation> <translation id="2721148159707890343">Verzoek geslaagd</translation> <translation id="2728127805433021124">Het certificaat van de server is ondertekend met een zwak ondertekeningsalgoritme.</translation> @@ -299,7 +296,6 @@ <translation id="3303855915957856445">Geen zoekresultaten gevonden</translation> <translation id="3305707030755673451">Je gegevens zijn op <ph name="TIME" /> versleuteld met je wachtwoordzin voor synchronisatie. Geef deze op om de synchronisatie te starten.</translation> <translation id="3320021301628644560">Factuuradres toevoegen</translation> -<translation id="3329013043687509092">Verzadiging</translation> <translation id="333371639341676808">Voorkom dat deze pagina extra dialoogvensters weergeeft.</translation> <translation id="3338095232262050444">Veilig</translation> <translation id="3340978935015468852">instellingen</translation> @@ -409,7 +405,6 @@ <translation id="4103249731201008433">Serienummer van apparaat is ongeldig</translation> <translation id="410351446219883937">Automatisch afspelen</translation> <translation id="4103763322291513355">Ga naar <strong>chrome://policy</strong> om de lijst met URL's op de zwarte lijst en andere beleidsregels te bekijken die worden afgedwongen door je systeembeheerder.</translation> -<translation id="4115378294792113321">Magenta</translation> <translation id="4116663294526079822">Altijd toestaan op deze site</translation> <translation id="4117700440116928470">Beleidsbereik wordt niet ondersteund.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 andere persoon}other{# andere mensen}}</translation> @@ -620,7 +615,6 @@ <translation id="5869522115854928033">Opgeslagen wachtwoorden</translation> <translation id="5872918882028971132">Bovenliggende suggesties</translation> <translation id="5893752035575986141">Creditcards worden geaccepteerd.</translation> -<translation id="5901630391730855834">Geel</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (gesynchroniseerd)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 in gebruik}other{# in gebruik}}</translation> <translation id="5959728338436674663">Bepaalde <ph name="BEGIN_WHITEPAPER_LINK" />systeeminformatie en paginacontent<ph name="END_WHITEPAPER_LINK" /> automatisch verzenden naar Google om te helpen bij de detectie van gevaarlijke apps en sites. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -631,12 +625,10 @@ <translation id="5990559369517809815">Verzoeken aan de server zijn door een extensie geblokkeerd.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Pagina 1}other{Pagina #}}</translation> -<translation id="6017514345406065928">Groen</translation> <translation id="6017850046339264347">Aanvallers op <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> kunnen misleidende apps installeren die zich voordoen als iets anders of gegevens verzamelen die kunnen worden gebruikt om je te volgen. <ph name="BEGIN_LEARN_MORE_LINK" />Meer informatie<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (gesynchroniseerd)</translation> <translation id="6027201098523975773">Geef een naam op</translation> <translation id="6040143037577758943">Sluiten</translation> -<translation id="6042308850641462728">Meer</translation> <translation id="6047233362582046994">Als je de beveiligingsrisico's begrijpt, kun je <ph name="BEGIN_LINK" />deze site bezoeken<ph name="END_LINK" /> voordat de schadelijke apps zijn verwijderd.</translation> <translation id="6047927260846328439">Deze content probeert je mogelijk te misleiden om software te installeren of persoonlijke gegevens openbaar te maken. <ph name="BEGIN_LINK" />Toch weergeven<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Je kunt <ph name="SITE" /> momenteel niet bezoeken, omdat de website gebruikmaakt van certificaatpinning. Netwerkfouten en aanvallen zijn doorgaans tijdelijk, dus deze pagina werkt later waarschijnlijk correct.</translation> @@ -712,7 +704,6 @@ <translation id="6710213216561001401">Vorige</translation> <translation id="6710594484020273272"><Typ een zoekterm></translation> <translation id="6711464428925977395">Er is iets mis met de proxyserver of het adres is onjuist.</translation> -<translation id="6727102863431372879">Instellen</translation> <translation id="674375294223700098">Onbekende fout met servercertificaat.</translation> <translation id="6753269504797312559">Beleidswaarde</translation> <translation id="6757797048963528358">De slaapstand van je apparaat is geactiveerd.</translation> @@ -796,7 +787,6 @@ <translation id="7518003948725431193">Er is geen webpagina gevonden voor het webadres: <ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">Je verbinding met deze site is niet privé</translation> -<translation id="7535087603100972091">Waarde</translation> <translation id="7537536606612762813">Verplicht</translation> <translation id="7542403920425041731">Zodra je bevestigt, worden je creditcardgegevens gedeeld met deze site.</translation> <translation id="7542995811387359312">Het automatisch invullen van creditcardnummers is uitgeschakeld, omdat dit formulier geen beveiligde verbinding gebruikt.</translation> @@ -807,7 +797,6 @@ <translation id="7567204685887185387">De server kan niet bewijzen dat dit <ph name="DOMAIN" /> is. Het beveiligingscertificaat van de server is mogelijk frauduleus verstrekt. Dit kan worden veroorzaakt door een verkeerde configuratie of een aanvaller die je verbinding onderschept.</translation> <translation id="7568593326407688803">Deze pagina is geschreven in het<ph name="ORIGINAL_LANGUAGE" />Wil je deze laten vertalen?</translation> <translation id="7569952961197462199">Creditcard verwijderen uit Chrome?</translation> -<translation id="7569983096843329377">Zwart</translation> <translation id="7578104083680115302">Betaal op verschillende apparaten snel op sites en in apps met kaarten die je hebt opgeslagen via Google.</translation> <translation id="7588950540487816470">Fysieke web</translation> <translation id="7592362899630581445">Het certificaat van de server is in strijd met naambeperkingen.</translation> @@ -859,7 +848,6 @@ <translation id="79338296614623784">Geef een geldig telefoonnummer op</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">Het servercertificaat is nog niet geldig.</translation> -<translation id="7942349550061667556">Rood</translation> <translation id="7947285636476623132">Controleer het vervaljaar en probeer het opnieuw</translation> <translation id="7951415247503192394">(32-bits)</translation> <translation id="7956713633345437162">Mobiele bladwijzers</translation> @@ -952,7 +940,6 @@ <translation id="8870413625673593573">Recent gesloten</translation> <translation id="8874824191258364635">Geef een geldig kaartnummer op</translation> <translation id="8876793034577346603">Netwerkconfiguratie kan niet worden geparseerd.</translation> -<translation id="8889402386540077796">Kleurtoon</translation> <translation id="8891727572606052622">Ongeldige proxymodus.</translation> <translation id="889901481107108152">Dit experiment is niet beschikbaar op je platform.</translation> <translation id="8903921497873541725">Inzoomen</translation> @@ -961,7 +948,6 @@ <translation id="8938939909778640821">Geaccepteerde creditcards en prepaidkaarten</translation> <translation id="8957210676456822347">Autorisatie van captive portal</translation> <translation id="8971063699422889582">Het servercertificaat is verlopen.</translation> -<translation id="8986494364107987395">Automatisch gebruiksstatistieken en crashrapporten naar Google verzenden</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">De volgende site bevat schadelijke programma's</translation> <translation id="8997023839087525404">De server heeft een certificaat gepresenteerd dat niet openbaar bekend is gemaakt via het beleid voor Certificaattransparantie. Dit is voor bepaalde certificaten een vereiste om er zeker van te zijn dat ze betrouwbaar zijn en bescherming bieden tegen aanvallers.</translation> @@ -977,7 +963,6 @@ <translation id="9049981332609050619">Je probeert <ph name="DOMAIN" /> te bereiken, maar de server heeft een ongeldig certificaat geretourneerd.</translation> <translation id="9050666287014529139">Wachtwoordzin</translation> <translation id="9065203028668620118">Bewerken</translation> -<translation id="9068849894565669697">Kleur selecteren</translation> <translation id="9069693763241529744">Geblokkeerd door een extensie</translation> <translation id="9076283476770535406">De site kan content voor volwassenen bevatten</translation> <translation id="9078964945751709336">Meer informatie vereist</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb index 1727fb2..1943363 100644 --- a/components/strings/components_strings_no.xtb +++ b/components/strings/components_strings_no.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Venter på tilkobling …</translation> <translation id="153384715582417236">Det var alt for denne gangen</translation> <translation id="1549470594296187301">Denne funksjonen kan ikke brukes når JavaScript er slått av.</translation> -<translation id="1555130319947370107">Blå</translation> <translation id="1559528461873125649">Finner ingen slik fil eller katalog</translation> <translation id="1583429793053364125">Noe gikk galt under åpningen av denne nettsiden.</translation> <translation id="1592005682883173041">Tilgang til lokale data</translation> <translation id="1594030484168838125">Velg</translation> -<translation id="161042844686301425">Cyan</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1629803312968146339">Vil du at Chrome skal lagre dette kortet?</translation> <translation id="1639239467298939599">Laster inn</translation> @@ -218,8 +216,8 @@ <translation id="2704951214193499422">Chromium kunne ikke bekrefte kortet ditt akkurat nå. Prøv igjen senere.</translation> <translation id="2705137772291741111">Den lagrede (bufrede) kopien av dette nettstedet kunne ikke leses.</translation> <translation id="2709516037105925701">Autofyll</translation> +<translation id="2710942282213947212">Det er programvare på datamaskinen din som hindrer Chromium i å koble trygt til nettet</translation> <translation id="2712173769900027643">Be om tillatelse</translation> -<translation id="2713444072780614174">Hvit</translation> <translation id="2720342946869265578">Like ved</translation> <translation id="2721148159707890343">Forespørselen var vellykket</translation> <translation id="2728127805433021124">Tjenerens sertifikat er signert med en usikker signaturalgoritme.</translation> @@ -301,7 +299,6 @@ <translation id="3303855915957856445">Søket ga ingen treff</translation> <translation id="3305707030755673451">Dataene dine er kryptert med passordfrasen din for synkronisering <ph name="TIME" />. Skriv den inn for å starte synkroniseringen.</translation> <translation id="3320021301628644560">Legg til faktureringsadresse</translation> -<translation id="3329013043687509092">Metning</translation> <translation id="333371639341676808">Hindre denne siden i å opprette flere dialogbokser.</translation> <translation id="3338095232262050444">Sikker</translation> <translation id="3340978935015468852">innstillinger</translation> @@ -412,7 +409,6 @@ <translation id="4103249731201008433">Enhetens serienummer er ugyldig</translation> <translation id="410351446219883937">Autoavspilling</translation> <translation id="4103763322291513355">Gå til <strong>chrome://policy</strong> for å se listen over sperrede nettadresser og andre innstillinger aktivert av systemadministratoren din.</translation> -<translation id="4115378294792113321">Magenta</translation> <translation id="4116663294526079822">Tillat alltid på dette nettstedet</translation> <translation id="4117700440116928470">Omfanget for innstillingen støttes ikke.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 til}other{# til}}</translation> @@ -623,7 +619,6 @@ <translation id="5869522115854928033">Lagrede passord</translation> <translation id="5872918882028971132">Overordnede forslag</translation> <translation id="5893752035575986141">Kredittkort godtas.</translation> -<translation id="5901630391730855834">Gul</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (synkronisert)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 er i bruk}other{# er i bruk}}</translation> <translation id="5959728338436674663">Send automatisk noe <ph name="BEGIN_WHITEPAPER_LINK" />systeminformasjon og sideinnhold<ph name="END_WHITEPAPER_LINK" /> til Google for å bidra til å oppdage farlige apper og nettsteder. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -634,12 +629,10 @@ <translation id="5990559369517809815">Forespørsler til tjeneren har blitt blokkert av en utvidelse.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Side 1}other{Side #}}</translation> -<translation id="6017514345406065928">Grønn</translation> <translation id="6017850046339264347">Angripere på <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> kan installere villedende apper som ser ut til å være noe annet, eller samle inn data som kan brukes til å spore deg. <ph name="BEGIN_LEARN_MORE_LINK" />Finn ut mer<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" /> og <ph name="TYPE_3" /> (synkronisert)</translation> <translation id="6027201098523975773">Skriv inn et navn</translation> <translation id="6040143037577758943">Lukk</translation> -<translation id="6042308850641462728">Mer</translation> <translation id="6047233362582046994">Hvis du forstår sikkerhetsrisikoen, kan du <ph name="BEGIN_LINK" />gå til dette nettstedet<ph name="END_LINK" /> før de skadelige appene er fjernet.</translation> <translation id="6047927260846328439">Dette innholdet kan prøve å lure deg til å installere programvare eller oppgi personopplysninger. <ph name="BEGIN_LINK" />Vis det likevel<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Du kan ikke gå til <ph name="SITE" /> akkurat nå, siden nettstedet bruker sertifikatfesting. Nettverksfeil og -angrep er vanligvis midlertidige, så denne siden fungerer sannsynligvis senere.</translation> @@ -716,7 +709,6 @@ <translation id="6710213216561001401">Forrige</translation> <translation id="6710594484020273272"><Skriv inn en søketerm></translation> <translation id="6711464428925977395">Det er noe galt med proxy-tjeneren, eller adressen er feil.</translation> -<translation id="6727102863431372879">Angi</translation> <translation id="674375294223700098">Ukjent feil med tjenersertifikat.</translation> <translation id="6753269504797312559">Retningslinjeverdi</translation> <translation id="6757797048963528358">Enheten din gikk inn i hvilemodus.</translation> @@ -800,7 +792,6 @@ <translation id="7518003948725431193">Finner ingen nettside for denne nettadressen: <ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">Tilkoblingen til dette nettstedet er ikke privat</translation> -<translation id="7535087603100972091">Verdi</translation> <translation id="7537536606612762813">Obligatorisk</translation> <translation id="7542403920425041731">Når du bekrefter, deles kortinformasjonen din med dette nettstedet.</translation> <translation id="7542995811387359312">Automatisk utfylling av kredittkort er deaktivert fordi dette skjemaet ikke bruker en sikker tilkobling.</translation> @@ -811,7 +802,6 @@ <translation id="7567204685887185387">Denne tjeneren kunne ikke bevise at den er <ph name="DOMAIN" />. Tjenerens sikkerhetssertifikat kan ha blitt utstedt på uredelig vis. Dette kan være forårsaket av en feilkonfigurering eller en angriper som avskjærer tilkoblingen din.</translation> <translation id="7568593326407688803">Denne siden er på<ph name="ORIGINAL_LANGUAGE" />Vil du ha den oversatt?</translation> <translation id="7569952961197462199">Vil du fjerne kredittkortet fra Chrome?</translation> -<translation id="7569983096843329377">Svart</translation> <translation id="7578104083680115302">Når du lagrer kort med Google, kan du bruke dem til å betale raskt på nettsteder og i apper – uansett hvilken enhet du bruker.</translation> <translation id="7588950540487816470">Fysisk nett</translation> <translation id="7592362899630581445">Tjenerens sertifikat bryter navnereglene.</translation> @@ -863,7 +853,6 @@ <translation id="79338296614623784">Angi et gyldig telefonnummer</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">Tjenerens sertifikat er ikke gyldig ennå.</translation> -<translation id="7942349550061667556">Rød</translation> <translation id="7947285636476623132">Kontrollér utløpsdatoen, og prøv igjen</translation> <translation id="7951415247503192394">(32-bit)</translation> <translation id="7956713633345437162">Bokmerker for mobil</translation> @@ -956,7 +945,6 @@ <translation id="8870413625673593573">Nylig lukket</translation> <translation id="8874824191258364635">Angi et gyldig kortnummer</translation> <translation id="8876793034577346603">Nettverkskonfigurasjon kunne ikke analyseres.</translation> -<translation id="8889402386540077796">Fargetone</translation> <translation id="8891727572606052622">Ugyldig modus for mellomtjener.</translation> <translation id="889901481107108152">Beklager, dette eksperimentet er ikke er tilgjengelig på plattformen din.</translation> <translation id="8903921497873541725">Zoom inn</translation> @@ -965,7 +953,6 @@ <translation id="8938939909778640821">Godkjente kredittkort og forhåndsbetalte kort</translation> <translation id="8957210676456822347">Captive Portal-autorisasjon</translation> <translation id="8971063699422889582">Tjenerens sertifikat er utløpt.</translation> -<translation id="8986494364107987395">Send bruksstatistikk og programstopprapporter automatisk til Google</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">Nettstedet du er i ferd med å åpne, inneholder skadelige programmer</translation> <translation id="8997023839087525404">Tjeneren har presentert et sertifikat som ikke er offentlig vist i henhold til regelen om sertifikatåpenhet. Dette er et krav for enkelte sertifikater for å sikre at de er pålitelige, og bidrar til å beskytte mot angrep.</translation> @@ -981,7 +968,6 @@ <translation id="9049981332609050619">Du forsøkte å nå <ph name="DOMAIN" />, men tjeneren oppga et ugyldig sertifikat.</translation> <translation id="9050666287014529139">Passordfrase</translation> <translation id="9065203028668620118">Endre</translation> -<translation id="9068849894565669697">Velg farge</translation> <translation id="9069693763241529744">Blokkert av en utvidelse</translation> <translation id="9076283476770535406">Det kan ha voksent innhold</translation> <translation id="9078964945751709336">Mer informasjon er nødvendig</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb index 18603ba..c23c10eb 100644 --- a/components/strings/components_strings_pl.xtb +++ b/components/strings/components_strings_pl.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Czekam na połączenie…</translation> <translation id="153384715582417236">Na razie to wszystko</translation> <translation id="1549470594296187301">Aby można było korzystać z tej funkcji, musi być włączony JavaScript.</translation> -<translation id="1555130319947370107">Niebieski</translation> <translation id="1559528461873125649">Brak takiego pliku lub katalogu</translation> <translation id="1583429793053364125">Podczas wyświetlania strony wystąpił błąd.</translation> <translation id="1592005682883173041">Lokalny dostęp do danych</translation> <translation id="1594030484168838125">Wybierz</translation> -<translation id="161042844686301425">Cyjan</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1629803312968146339">Czy Chrome ma zapisać tę kartę?</translation> <translation id="1639239467298939599">Wczytuję</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Autouzupełnianie</translation> <translation id="2710942282213947212">Oprogramowanie na Twoim komputerze uniemożliwia Chromium bezpieczne połączenie się z internetem</translation> <translation id="2712173769900027643">Poproś o pozwolenie</translation> -<translation id="2713444072780614174">Biały</translation> <translation id="2720342946869265578">W pobliżu</translation> <translation id="2721148159707890343">Żądanie wykonane pomyślnie</translation> <translation id="2728127805433021124">Certyfikat serwera został podpisany przy użyciu słabego algorytmu podpisu.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">Brak wyników wyszukiwania</translation> <translation id="3305707030755673451">Twoje dane zostały zaszyfrowane z użyciem hasła synchronizacji w dniu <ph name="TIME" />. Wpisz je, by rozpocząć synchronizację.</translation> <translation id="3320021301628644560">Dodaj adres rozliczeniowy</translation> -<translation id="3329013043687509092">Nasycenie</translation> <translation id="333371639341676808">Zapobiegaj wyświetlaniu dodatkowych okien dialogowych na tej stronie.</translation> <translation id="3338095232262050444">Bezpieczna</translation> <translation id="3340978935015468852">ustawienia</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">Numer seryjny urządzenia jest nieprawidłowy</translation> <translation id="410351446219883937">Autoodtwarzanie</translation> <translation id="4103763322291513355">Wejdź na stronę <strong>chrome://policy</strong>, aby wyświetlić czarną listę URL-i oraz inne zasady egzekwowane przez administratora systemu.</translation> -<translation id="4115378294792113321">Magenta</translation> <translation id="4116663294526079822">Zawsze zezwalaj w tej witrynie</translation> <translation id="4117700440116928470">Ten zakres zasad nie jest obsługiwany.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 inny wpis}few{# inne wpisy}many{# innych wpisów}other{# innego wpisu}}</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">Zapisane hasła</translation> <translation id="5872918882028971132">Propozycje rodziców</translation> <translation id="5893752035575986141">Karty kredytowe są akceptowane.</translation> -<translation id="5901630391730855834">Żółty</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (zsynchronizowane)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{W użyciu: 1}few{W użyciu: #}many{W użyciu: #}other{W użyciu: #}}</translation> <translation id="5959728338436674663">Automatycznie wysyłaj do Google niektóre <ph name="BEGIN_WHITEPAPER_LINK" />informacje o systemie i część zawartości stron<ph name="END_WHITEPAPER_LINK" />, by pomóc w wykrywaniu niebezpiecznych aplikacji i witryn. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">Żądania do serwera zostały zablokowane przez rozszerzenie.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Strona 1}few{Strona #}many{Strona #}other{Strona #}}</translation> -<translation id="6017514345406065928">Zielony</translation> <translation id="6017850046339264347">Osoby atakujące stronę <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> mogą instalować wprowadzające w błąd aplikacje, które udają, że są przeznaczone do czegoś innego niż w rzeczywistości, lub zbierają dane, na podstawie których można Cię śledzić. <ph name="BEGIN_LEARN_MORE_LINK" />Więcej informacji<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (zsynchronizowane)</translation> <translation id="6027201098523975773">Wpisz imię i nazwisko</translation> <translation id="6040143037577758943">Zamknij</translation> -<translation id="6042308850641462728">Więcej</translation> <translation id="6047233362582046994">Jeśli rozumiesz zagrożenie, możesz <ph name="BEGIN_LINK" />wejść na tę stronę<ph name="END_LINK" />, zanim szkodliwe aplikacje zostaną usunięte.</translation> <translation id="6047927260846328439">Te treści mogą próbować podstępem nakłonić Cię do zainstalowania oprogramowania lub ujawnienia danych osobowych. <ph name="BEGIN_LINK" />Wyświetl mimo to<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Nie możesz teraz otworzyć strony <ph name="SITE" />, ponieważ stosuje ona przypinanie certyfikatów. Błędy sieciowe i ataki są zazwyczaj tymczasowe, więc prawdopodobnie strona będzie dostępna później.</translation> @@ -717,7 +709,6 @@ <translation id="6710213216561001401">Wstecz</translation> <translation id="6710594484020273272"><Wpisz wyszukiwane słowa></translation> <translation id="6711464428925977395">Serwer proxy działa nieprawidłowo albo adres jest błędny.</translation> -<translation id="6727102863431372879">Ustaw</translation> <translation id="674375294223700098">Nieznany błąd certyfikatu serwera.</translation> <translation id="6753269504797312559">Wartość zasady</translation> <translation id="6757797048963528358">Twoje urządzenie przeszło w tryb uśpienia.</translation> @@ -801,7 +792,6 @@ <translation id="7518003948725431193">Nie znaleziono strony internetowej pod adresem <ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">Twoje połączenie z tą stroną nie jest prywatne</translation> -<translation id="7535087603100972091">Wartość</translation> <translation id="7537536606612762813">Obowiązkowe</translation> <translation id="7542403920425041731">Po potwierdzeniu szczegółowe dane karty zostaną udostępnione tej stronie.</translation> <translation id="7542995811387359312">Automatyczne wypełnianie danych karty kredytowej jest wyłączone, ponieważ ten formularz nie korzysta z bezpiecznego połączenia.</translation> @@ -812,7 +802,6 @@ <translation id="7567204685887185387">Ten serwer nie mógł udowodnić, że należy do <ph name="DOMAIN" />. Jego certyfikat bezpieczeństwa mógł zostać wydany w celu oszustwa. Może to być spowodowane błędną konfiguracją lub przechwyceniem połączenia przez atakującego.</translation> <translation id="7568593326407688803">Język strony:<ph name="ORIGINAL_LANGUAGE" />Chcesz ją przetłumaczyć?</translation> <translation id="7569952961197462199">Usunąć tę kartę kredytową z Chrome?</translation> -<translation id="7569983096843329377">Czarny</translation> <translation id="7578104083680115302">Używaj swoich kart zapisanych w Google, by łatwiej dokonywać płatności na stronach i w aplikacjach na różnych urządzeniach.</translation> <translation id="7588950540487816470">Internet rzeczy</translation> <translation id="7592362899630581445">Certyfikat serwera narusza ograniczenia dotyczące nazw.</translation> @@ -864,7 +853,6 @@ <translation id="79338296614623784">Wpisz prawidłowy numer telefonu</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">Certyfikat serwera nie jest jeszcze ważny.</translation> -<translation id="7942349550061667556">Czerwony</translation> <translation id="7947285636476623132">Sprawdź rok ważności i spróbuj ponownie</translation> <translation id="7951415247503192394">(32-bitowa)</translation> <translation id="7956713633345437162">Zakładki na komórce</translation> @@ -957,7 +945,6 @@ <translation id="8870413625673593573">Ostatnio zamknięte</translation> <translation id="8874824191258364635">Wpisz prawidłowy numer karty</translation> <translation id="8876793034577346603">Przetwarzanie konfiguracji sieci nie powiodło się.</translation> -<translation id="8889402386540077796">Odcień</translation> <translation id="8891727572606052622">Nieprawidłowy tryb proxy</translation> <translation id="889901481107108152">Eksperyment jest niedostępny na Twojej platformie.</translation> <translation id="8903921497873541725">Powiększ</translation> @@ -966,7 +953,6 @@ <translation id="8938939909778640821">Akceptowane karty kredytowe i przedpłacone</translation> <translation id="8957210676456822347">Autoryzacja portalu przechwytującego</translation> <translation id="8971063699422889582">Ważność certyfikatu serwera wygasła.</translation> -<translation id="8986494364107987395">Automatycznie przesyłaj do Google statystyki użytkowania i raporty o awariach</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">Na następnej stronie znajdują się szkodliwe programy</translation> <translation id="8997023839087525404">Certyfikat przesłany przez serwer nie został publicznie ujawniony przez protokół Certificate Transparency. Jest to wymagane w przypadku niektórych certyfikatów jako potwierdzenie, że są one zaufane i zabezpieczone przed atakami.</translation> @@ -982,7 +968,6 @@ <translation id="9049981332609050619">Podjęto próbę nawiązania połączenia z witryną <ph name="DOMAIN" />, jednak serwer przedstawił nieprawidłowy certyfikat.</translation> <translation id="9050666287014529139">Hasło</translation> <translation id="9065203028668620118">Edycja</translation> -<translation id="9068849894565669697">Wybierz kolor</translation> <translation id="9069693763241529744">Zablokowane przez rozszerzenie</translation> <translation id="9076283476770535406">Może zawierać treści dla dorosłych</translation> <translation id="9078964945751709336">Potrzebujemy więcej informacji</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb index 7d41604e..b4cfcf5 100644 --- a/components/strings/components_strings_pt-BR.xtb +++ b/components/strings/components_strings_pt-BR.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Aguardando conexão...</translation> <translation id="153384715582417236">Isso é tudo por enquanto</translation> <translation id="1549470594296187301">O JavaScript deve ser ativado para usar este recurso.</translation> -<translation id="1555130319947370107">Azul</translation> <translation id="1559528461873125649">Arquivo ou diretório não encontrado</translation> <translation id="1583429793053364125">Algo deu errado ao exibir esta página da Web.</translation> <translation id="1592005682883173041">Acesso a dados locais</translation> <translation id="1594030484168838125">Escolher</translation> -<translation id="161042844686301425">Ciano</translation> <translation id="1620510694547887537">Câmera</translation> <translation id="1629803312968146339">Deseja que o Chrome salve este cartão?</translation> <translation id="1639239467298939599">Carregando</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Preenchimento automático</translation> <translation id="2710942282213947212">Algum software no seu computador está impedindo o Chromium de se conectar com segurança à Web</translation> <translation id="2712173769900027643">Pedir permissão</translation> -<translation id="2713444072780614174">Branco</translation> <translation id="2720342946869265578">Por perto</translation> <translation id="2721148159707890343">Solicitação bem-sucedida</translation> <translation id="2728127805433021124">O certificado do servidor é assinado com um algoritmo de assinatura fraco.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">Nenhum resultado de pesquisa encontrado</translation> <translation id="3305707030755673451">Seus dados foram criptografados com sua senha longa de sincronização no dia <ph name="TIME" />. Informe-a para começar a sincronização.</translation> <translation id="3320021301628644560">Adicionar endereço de faturamento</translation> -<translation id="3329013043687509092">Saturação</translation> <translation id="333371639341676808">Impedir que esta página crie caixas de diálogo adicionais.</translation> <translation id="3338095232262050444">Seguro</translation> <translation id="3340978935015468852">configurações</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">O número de série do dispositivo é inválido</translation> <translation id="410351446219883937">Reprodução automática</translation> <translation id="4103763322291513355">Visite <strong>chrome://policy</strong> para ver a lista de URLs adicionados à lista negra e outras políticas aplicadas pelo administrador do seu sistema.</translation> -<translation id="4115378294792113321">Magenta</translation> <translation id="4116663294526079822">Sempre permitir neste site</translation> <translation id="4117700440116928470">O escopo da política não é suportado.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{mais 1}one{mais #}other{mais #}}</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">Senhas salvas</translation> <translation id="5872918882028971132">Sugestões para pais</translation> <translation id="5893752035575986141">Cartões de crédito são aceitos.</translation> -<translation id="5901630391730855834">Amarelo</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (sincronizado)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 em uso}one{# em uso}other{# em uso}}</translation> <translation id="5959728338436674663">Enviar automaticamente <ph name="BEGIN_WHITEPAPER_LINK" />algumas informações do sistema e conteúdos de página<ph name="END_WHITEPAPER_LINK" /> ao Google para ajudar a detectar sites e apps perigosos. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">Solicitações ao servidor foram bloqueadas por uma extensão.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Página 1}one{Página #}other{Página #}}</translation> -<translation id="6017514345406065928">Verde</translation> <translation id="6017850046339264347">Invasores em <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> podem instalar apps enganosos que fingem ser outra pessoa ou coletam dados que podem ser usados para rastrear você. <ph name="BEGIN_LEARN_MORE_LINK" />Saiba mais<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (sincronizados)</translation> <translation id="6027201098523975773">Insira um nome</translation> <translation id="6040143037577758943">Fechar</translation> -<translation id="6042308850641462728">Mais</translation> <translation id="6047233362582046994">Se você conhece os riscos para sua segurança, pode <ph name="BEGIN_LINK" />visitar este site<ph name="END_LINK" /> antes de os apps prejudiciais serem removidos.</translation> <translation id="6047927260846328439">Este conteúdo pode tentar enganar você para que instale um software ou revele informações pessoais. <ph name="BEGIN_LINK" />Mostrar mesmo assim<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Não é possível acessar <ph name="SITE" /> no momento, porque o site usa bloqueio de certificados. Como os ataques e erros de rede são geralmente temporários, esta pagina provavelmente funcionará mais tarde.</translation> @@ -717,7 +709,6 @@ <translation id="6710213216561001401">Anterior</translation> <translation id="6710594484020273272"><Digitar termo de pesquisa></translation> <translation id="6711464428925977395">Há algo errado com o servidor proxy, ou o endereço está incorreto.</translation> -<translation id="6727102863431372879">Definir</translation> <translation id="674375294223700098">Erro, certificado de servidor desconhecido.</translation> <translation id="6753269504797312559">Valor da política</translation> <translation id="6757797048963528358">O dispositivo entrou em modo de suspensão.</translation> @@ -801,7 +792,6 @@ <translation id="7518003948725431193">Nenhuma página da web foi encontrada para o endereço da Web:<ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">Sua conexão a este site não é particular</translation> -<translation id="7535087603100972091">Valor</translation> <translation id="7537536606612762813">Obrigatória</translation> <translation id="7542403920425041731">Depois da confirmação, os detalhes do cartão serão compartilhados com esse site.</translation> <translation id="7542995811387359312">O preenchimento automático do cartão de crédito está desativado porque este formulário não usa uma conexão segura.</translation> @@ -812,7 +802,6 @@ <translation id="7567204685887185387">Este servidor não conseguiu provar que é <ph name="DOMAIN" />. O certificado de segurança pode ter sido emitido de forma fraudulenta. Isso pode ser causado por uma configuração incorreta ou pela interceptação da sua conexão por um invasor.</translation> <translation id="7568593326407688803">Esta página está em<ph name="ORIGINAL_LANGUAGE" />Deseja traduzi-la?</translation> <translation id="7569952961197462199">Remover cartão de crédito do Chrome?</translation> -<translation id="7569983096843329377">Preto</translation> <translation id="7578104083680115302">Pague rapidamente em sites e aplicativos em vários dispositivos usando os cards que você salvou com o Google.</translation> <translation id="7588950540487816470">Web física</translation> <translation id="7592362899630581445">O certificado do servidor viola as restrições de nome.</translation> @@ -864,7 +853,6 @@ <translation id="79338296614623784">Informe um número de telefone válido</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">O certificado do servidor ainda não é válido.</translation> -<translation id="7942349550061667556">Vermelho</translation> <translation id="7947285636476623132">Verifique o ano de validade e tente novamente</translation> <translation id="7951415247503192394">32 bits</translation> <translation id="7956713633345437162">Favoritos de dispositivos móveis</translation> @@ -958,7 +946,6 @@ <translation id="8870413625673593573">Recentemente fechadas</translation> <translation id="8874824191258364635">Informe um número de cartão válido</translation> <translation id="8876793034577346603">Falha ao analisar a configuração de rede.</translation> -<translation id="8889402386540077796">Matiz</translation> <translation id="8891727572606052622">Modo de proxy inválido.</translation> <translation id="889901481107108152">Esta experiência não está disponível na sua plataforma.</translation> <translation id="8903921497873541725">Aumentar zoom</translation> @@ -967,7 +954,6 @@ <translation id="8938939909778640821">Cartões de crédito e pré-pagos aceitos</translation> <translation id="8957210676456822347">Autorização de portal cativo</translation> <translation id="8971063699422889582">O certificado do servidor expirou.</translation> -<translation id="8986494364107987395">Enviar estatísticas de uso e relatórios de erros ao Google automaticamente</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">O site a seguir contém programas prejudiciais</translation> <translation id="8997023839087525404">O servidor apresentou um certificado que não foi divulgado publicamente usando a política de Transparência dos certificados. Esse é um requisito para alguns certificados, a fim de garantir que eles sejam confiáveis e protejam você contra invasores.</translation> @@ -983,7 +969,6 @@ <translation id="9049981332609050619">Você tentou acessar <ph name="DOMAIN" />, mas o servidor apresentou um certificado inválido.</translation> <translation id="9050666287014529139">Senha</translation> <translation id="9065203028668620118">Editar</translation> -<translation id="9068849894565669697">Selecionar cor</translation> <translation id="9069693763241529744">Bloqueada por uma extensão</translation> <translation id="9076283476770535406">Pode apresentar conteúdo adulto</translation> <translation id="9078964945751709336">São necessárias mais informações</translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb index 93007347..2f50ca88 100644 --- a/components/strings/components_strings_pt-PT.xtb +++ b/components/strings/components_strings_pt-PT.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">A aguardar ligação…</translation> <translation id="153384715582417236">É tudo por agora</translation> <translation id="1549470594296187301">É necessário ativar o JavaScript para utilizar esta funcionalidade.</translation> -<translation id="1555130319947370107">Azul</translation> <translation id="1559528461873125649">Esse ficheiro ou diretório não existe</translation> <translation id="1583429793053364125">Ocorreu um erro ao apresentar esta página Web.</translation> <translation id="1592005682883173041">Acesso aos dados locais</translation> <translation id="1594030484168838125">Escolher</translation> -<translation id="161042844686301425">Turquesa</translation> <translation id="1620510694547887537">Câmara</translation> <translation id="1629803312968146339">Pretende que o Chrome guarde este cartão?</translation> <translation id="1639239467298939599">A carregar</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Preenchimento automático</translation> <translation id="2710942282213947212">Existe software no computador que está a impedir que o Chromium se ligue à Web em segurança</translation> <translation id="2712173769900027643">Pedir autorização</translation> -<translation id="2713444072780614174">Branco</translation> <translation id="2720342946869265578">Próximo</translation> <translation id="2721148159707890343">Pedido com êxito</translation> <translation id="2728127805433021124">O certificado do servidor foi assinado utilizando um algoritmo de assinatura fraco.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">Não foram encontrados resultados da pesquisa</translation> <translation id="3305707030755673451">Os dados foram encriptados com a sua frase de acesso de sincronização em <ph name="TIME" />. Introduza-a para iniciar a sincronização.</translation> <translation id="3320021301628644560">Adicionar endereço de faturação</translation> -<translation id="3329013043687509092">Saturação</translation> <translation id="333371639341676808">Evitar que esta página crie caixas de diálogo adicionais.</translation> <translation id="3338095232262050444">Seguro</translation> <translation id="3340978935015468852">definições</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">Número de série do dispositivo é inválido</translation> <translation id="410351446219883937">Reprodução automática</translation> <translation id="4103763322291513355">Visite <strong>chrome://policy</strong> para ver os URLs que foram colocados na lista negra e outras políticas aplicadas pelo administrador do sistema.</translation> -<translation id="4115378294792113321">Magenta</translation> <translation id="4116663294526079822">Permitir sempre neste Website</translation> <translation id="4117700440116928470">O âmbito da política não é suportado.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 outro}one{# others}other{# outros}}</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">Palavras-passe guardadas</translation> <translation id="5872918882028971132">Sugestões superiores</translation> <translation id="5893752035575986141">Os cartões de crédito são admitidos.</translation> -<translation id="5901630391730855834">Amarelo</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (sincronizados)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 em utilização}one{# in use}other{# em utilização}}</translation> <translation id="5959728338436674663">Enviar automaticamente algumas <ph name="BEGIN_WHITEPAPER_LINK" />informações do sistema e conteúdos de páginas<ph name="END_WHITEPAPER_LINK" /> para a Google de modo a ajudar a detetar aplicações e sites perigosos. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">Os pedidos para o servidor foram bloqueados por uma extensão.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Página 1}one{Page #}other{Página #}}</translation> -<translation id="6017514345406065928">Verde</translation> <translation id="6017850046339264347">Os utilizadores mal-intencionados em <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> podem instalar aplicações fraudulentas que se fazem passar por algo diferente ou recolhem dados que podem ser utilizados para o monitorizar. <ph name="BEGIN_LEARN_MORE_LINK" />Saiba mais<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (sincronizados)</translation> <translation id="6027201098523975773">Introduza um nome</translation> <translation id="6040143037577758943">Fechar</translation> -<translation id="6042308850641462728">Mais</translation> <translation id="6047233362582046994">Se compreende os riscos para a sua segurança, pode <ph name="BEGIN_LINK" />visitar este site<ph name="END_LINK" /> antes de as aplicações prejudiciais terem sido removidas.</translation> <translation id="6047927260846328439">Este conteúdo pode tentar enganá-lo de forma a que instale software ou revele informações pessoais. <ph name="BEGIN_LINK" />Mostrar mesmo assim<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Não pode visitar <ph name="SITE" /> neste momento, porque o Website utiliza a afixação de certificados. Os erros de rede e os ataques são geralmente temporários, pelo que esta página deverá funcionar mais tarde.</translation> @@ -717,7 +709,6 @@ <translation id="6710213216561001401">Anterior</translation> <translation id="6710594484020273272"><Introduzir termo de pesquisa></translation> <translation id="6711464428925977395">Existe um problema com o servidor proxy ou o endereço está incorreto.</translation> -<translation id="6727102863431372879">Definir</translation> <translation id="674375294223700098">Erro de certificado de servidor desconhecido.</translation> <translation id="6753269504797312559">Valor da política</translation> <translation id="6757797048963528358">O dispositivo entrou em suspensão.</translation> @@ -801,7 +792,6 @@ <translation id="7518003948725431193">Não foi encontrada qualquer página Web para o endereço Web: <ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">A sua ligação a este site não é privada.</translation> -<translation id="7535087603100972091">Valor</translation> <translation id="7537536606612762813">Obrigatório</translation> <translation id="7542403920425041731">Ao confirmar, os detalhes do cartão são partilhados com este site.</translation> <translation id="7542995811387359312">O preenchimento automático de cartões de crédito está desactivado, porque este formulário não utiliza uma ligação segura.</translation> @@ -812,7 +802,6 @@ <translation id="7567204685887185387">Este servidor não conseguiu provar que é o domínio <ph name="DOMAIN" />; o respetivo certificado de segurança poderá ter sido emitido de forma fraudulenta. Isto pode ser o resultado de uma configuração incorreta ou de um invasor a intercetar a sua ligação.</translation> <translation id="7568593326407688803">Esta página está em<ph name="ORIGINAL_LANGUAGE" />Pretende traduzi-la?</translation> <translation id="7569952961197462199">Pretende remover o cartão de crédito do Chrome?</translation> -<translation id="7569983096843329377">Preto</translation> <translation id="7578104083680115302">Pague rapidamente em sites e aplicações em todos os dispositivos com cartões que tenha guardado com o Google.</translation> <translation id="7588950540487816470">Web física</translation> <translation id="7592362899630581445">O certificado do servidor viola as restrições de nome.</translation> @@ -864,7 +853,6 @@ <translation id="79338296614623784">Introduza um número de telefone válido</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">O certificado do servidor ainda não é válido.</translation> -<translation id="7942349550061667556">Vermelho</translation> <translation id="7947285636476623132">Verifique o ano de validade e tente novamente</translation> <translation id="7951415247503192394">32 bits</translation> <translation id="7956713633345437162">Marcadores do telemóvel</translation> @@ -958,7 +946,6 @@ <translation id="8870413625673593573">Fechadas recentemente</translation> <translation id="8874824191258364635">Introduza um número de cartão válido</translation> <translation id="8876793034577346603">Falha ao analisar a configuração de rede.</translation> -<translation id="8889402386540077796">Tonalidade</translation> <translation id="8891727572606052622">Modo de proxy inválido.</translation> <translation id="889901481107108152">Infelizmente, esta experiência não está disponível na sua plataforma.</translation> <translation id="8903921497873541725">Ampliar</translation> @@ -967,7 +954,6 @@ <translation id="8938939909778640821">Cartões de crédito e pré-pagos admitidos</translation> <translation id="8957210676456822347">Autorização de portal cativo</translation> <translation id="8971063699422889582">O certificado do servidor expirou.</translation> -<translation id="8986494364107987395">Enviar automaticamente estatísticas de utilização e relatórios de falhas para a Google</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">O site que se segue contém programas prejudiciais</translation> <translation id="8997023839087525404">O servidor apresentou um certificado que não foi divulgado publicamente através da política de Transparência de certificados. Trata-se de um requisito para alguns certificados de modo a assegurar que são fidedignos e protegem contra utilizadores mal intencionados.</translation> @@ -983,7 +969,6 @@ <translation id="9049981332609050619">Tentou aceder a <ph name="DOMAIN" />, mas o servidor apresentou um certificado inválido.</translation> <translation id="9050666287014529139">Frase de acesso</translation> <translation id="9065203028668620118">Editar</translation> -<translation id="9068849894565669697">Selecionar cor</translation> <translation id="9069693763241529744">Bloqueada por uma extensão</translation> <translation id="9076283476770535406">Pode ter conteúdo para adultos</translation> <translation id="9078964945751709336">São necessárias mais informações</translation>
diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb index 7493f42b..ddd7489 100644 --- a/components/strings/components_strings_ro.xtb +++ b/components/strings/components_strings_ro.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Se așteaptă conectarea…</translation> <translation id="153384715582417236">Asta este tot</translation> <translation id="1549470594296187301">Trebuie să activezi JavaScript pentru a folosi această funcție.</translation> -<translation id="1555130319947370107">Albastru</translation> <translation id="1559528461873125649">Nu există un astfel de fișier sau director</translation> <translation id="1583429793053364125">A apărut o eroare la afișarea paginii web.</translation> <translation id="1592005682883173041">Accesul la datele locale</translation> <translation id="1594030484168838125">Alegeți</translation> -<translation id="161042844686301425">Cyan</translation> <translation id="1620510694547887537">Camera</translation> <translation id="1629803312968146339">Dorești ca acest card să fie salvat în Chrome?</translation> <translation id="1639239467298939599">Se încarcă</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Completare automată</translation> <translation id="2710942282213947212">Pe computer există software care împiedică Chromium să se conecteze în siguranță la internet</translation> <translation id="2712173769900027643">Solicită permisiunea</translation> -<translation id="2713444072780614174">Alb</translation> <translation id="2720342946869265578">În apropiere</translation> <translation id="2721148159707890343">Solicitarea a reușit</translation> <translation id="2728127805433021124">Certificatul serverului este semnat utilizând un algoritm de semnătură slab.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">Nu s-au găsit rezultate de căutare</translation> <translation id="3305707030755673451">Datele au fost criptate cu expresia de acces pentru sincronizare la <ph name="TIME" />. Introdu-o pentru a începe sincronizarea.</translation> <translation id="3320021301628644560">Adaugă o adresă de facturare</translation> -<translation id="3329013043687509092">Saturație</translation> <translation id="333371639341676808">Împiedică această pagină să creeze alte casete de dialog.</translation> <translation id="3338095232262050444">Securizat</translation> <translation id="3340978935015468852">setări</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">Numărul de serie al gadgetului este nevalid</translation> <translation id="410351446219883937">Redare automată</translation> <translation id="4103763322291513355">Accesați <strong>chrome://policy</strong> pentru a vedea adresele URL introduse pe lista neagră și alte politici impuse de către administratorul de sistem.</translation> -<translation id="4115378294792113321">Magenta</translation> <translation id="4116663294526079822">Permiteți întotdeauna pe acest site</translation> <translation id="4117700440116928470">Domeniul politicii nu este acceptat.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{încă 1}few{încă #}other{încă #}}</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">Parole salvate</translation> <translation id="5872918882028971132">Sugestii parentale</translation> <translation id="5893752035575986141">Se acceptă carduri de credit.</translation> -<translation id="5901630391730855834">Galben</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (sincronizat)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 în uz}few{# în uz}other{# în uz}}</translation> <translation id="5959728338436674663">Trimite automat anumite <ph name="BEGIN_WHITEPAPER_LINK" />informații despre sistem și conținutul paginii<ph name="END_WHITEPAPER_LINK" /> la Google pentru a detecta aplicațiile și site-urile periculoase. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">Solicitările trimise la server au fost blocate de o extensie.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Pagina 1}few{Pagina #}other{Pagina #}}</translation> -<translation id="6017514345406065928">Verde</translation> <translation id="6017850046339264347">Atacatorii de pe <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> ar putea instala aplicații înșelătoare care pretind a fi altceva sau culeg date care pot fi folosite pentru a te urmări. <ph name="BEGIN_LEARN_MORE_LINK" />Află mai multe<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (sincronizate)</translation> <translation id="6027201098523975773">Introdu un nume</translation> <translation id="6040143037577758943">Închide</translation> -<translation id="6042308850641462728">Mai multe</translation> <translation id="6047233362582046994">Dacă îți asumi riscurile de securitate, poți să <ph name="BEGIN_LINK" />accesezi acest site<ph name="END_LINK" /> înainte ca aplicațiile dăunătoare să fie eliminate.</translation> <translation id="6047927260846328439">Acest conținut ar putea încerca să te păcălească să instalezi software sau să dezvălui informații cu caracter personal. <ph name="BEGIN_LINK" />Afișează oricum<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Nu poți accesa <ph name="SITE" /> acum, deoarece site-ul folosește fixarea certificatelor. Erorile de rețea și atacurile sunt de obicei temporare și probabil că această pagină va funcționa mai târziu.</translation> @@ -717,7 +709,6 @@ <translation id="6710213216561001401">Înapoi</translation> <translation id="6710594484020273272"><Introdu termenul de căutare></translation> <translation id="6711464428925977395">A apărut o problemă la serverul proxy sau adresa nu este corectă.</translation> -<translation id="6727102863431372879">Setează</translation> <translation id="674375294223700098">Eroare de certificat de server necunoscută.</translation> <translation id="6753269504797312559">Valoarea politicii</translation> <translation id="6757797048963528358">Dispozitivul este inactiv.</translation> @@ -801,7 +792,6 @@ <translation id="7518003948725431193">Nu a fost găsită nicio pagină web pentru adresa: <ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">Conexiunea la acest site nu este privată</translation> -<translation id="7535087603100972091">Valoare</translation> <translation id="7537536606612762813">Obligatorie</translation> <translation id="7542403920425041731">După ce confirmi, acest site va avea acces la detaliile cardului tău.</translation> <translation id="7542995811387359312">Completarea automată a cardului de credit este dezactivată, deoarece acest formular nu utilizează o conexiune sigură.</translation> @@ -812,7 +802,6 @@ <translation id="7567204685887185387">Acest server nu a putut dovedi că este <ph name="DOMAIN" />; este posibil ca certificatul său de securitate să fi fost emis fraudulos. Cauza poate fi o configurare greșită sau interceptarea conexiunii de către un atacator.</translation> <translation id="7568593326407688803">Această pagină este în <ph name="ORIGINAL_LANGUAGE" /> Vrei să fie tradusă?</translation> <translation id="7569952961197462199">Elimini cardul de credit din Chrome?</translation> -<translation id="7569983096843329377">Negru</translation> <translation id="7578104083680115302">Plătește rapid pe site-uri și în aplicații pe diferite dispozitive folosind cardurile pe care le-ai salvat pe Google.</translation> <translation id="7588950540487816470">Web material</translation> <translation id="7592362899630581445">Certificatul serverului încalcă limitările privind numele.</translation> @@ -864,7 +853,6 @@ <translation id="79338296614623784">Introdu un număr de telefon valid</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">Certificatul serverului nu este încă valid.</translation> -<translation id="7942349550061667556">Roșu</translation> <translation id="7947285636476623132">Verifică anul în care expiră și încearcă din nou</translation> <translation id="7951415247503192394">(32 de biți)</translation> <translation id="7956713633345437162">Marcaje mobile</translation> @@ -958,7 +946,6 @@ <translation id="8870413625673593573">Închise recent</translation> <translation id="8874824191258364635">Introdu un număr de card valid</translation> <translation id="8876793034577346603">Configurația rețelei nu a putut fi analizată.</translation> -<translation id="8889402386540077796">Nuanță</translation> <translation id="8891727572606052622">Mod proxy nevalid.</translation> <translation id="889901481107108152">Ne pare rău, acest experiment nu este disponibil pe platforma dvs.</translation> <translation id="8903921497873541725">Mărește</translation> @@ -967,7 +954,6 @@ <translation id="8938939909778640821">Carduri de credit și preplătite acceptate</translation> <translation id="8957210676456822347">Autorizarea prin portalul captiv</translation> <translation id="8971063699422889582">Certificatul serverului a expirat.</translation> -<translation id="8986494364107987395">Trimite automat la Google statistici de utilizare și rapoarte de blocare</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">Site-ul pe care urmează să îl accesezi conține programe dăunătoare</translation> <translation id="8997023839087525404">Serverul a prezentat un certificat care nu a fost dezvăluit public folosind politica privind Transparența certificatului. Aceasta este o cerință pentru anumite certificate, pentru a se asigura că sunt de încredere și pentru protecție împotriva atacatorilor.</translation> @@ -983,7 +969,6 @@ <translation id="9049981332609050619">Ai încercat să accesezi <ph name="DOMAIN" />, dar serverul a prezentat un certificat nevalid.</translation> <translation id="9050666287014529139">Expresie de acces</translation> <translation id="9065203028668620118">Editează</translation> -<translation id="9068849894565669697">Selectați culoarea</translation> <translation id="9069693763241529744">Blocată de o extensie</translation> <translation id="9076283476770535406">Poate include conținut destinat adulților</translation> <translation id="9078964945751709336">Sunt necesare mai multe informații</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb index 89e0586..8dc8538 100644 --- a/components/strings/components_strings_ru.xtb +++ b/components/strings/components_strings_ru.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Ожидание подключения…</translation> <translation id="153384715582417236">Пока это всё</translation> <translation id="1549470594296187301">Для использования этой функции необходимо включить JavaScript.</translation> -<translation id="1555130319947370107">Синий</translation> <translation id="1559528461873125649">Данный файл или каталог не существует</translation> <translation id="1583429793053364125">При загрузке этой страницы возникли неполадки.</translation> <translation id="1592005682883173041">Доступ к данным на устройстве</translation> <translation id="1594030484168838125">Выбрать</translation> -<translation id="161042844686301425">Голубой</translation> <translation id="1620510694547887537">Камера</translation> <translation id="1629803312968146339">Сохранить эту карту в Chrome?</translation> <translation id="1639239467298939599">Загрузка</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Автозаполнение</translation> <translation id="2710942282213947212">ПО, установленное на компьютере, не позволяет Chromium безопасно подключиться к Интернету</translation> <translation id="2712173769900027643">Попросить разрешения</translation> -<translation id="2713444072780614174">Белый</translation> <translation id="2720342946869265578">Мое окружение</translation> <translation id="2721148159707890343">Запрос выполнен успешно</translation> <translation id="2728127805433021124">Сертификат сервера подписан с использованием ненадежного алгоритма.</translation> @@ -301,7 +298,6 @@ <translation id="3303855915957856445">Ничего не найдено</translation> <translation id="3305707030755673451">Данные были зашифрованы с помощью кодовой фразы <ph name="TIME" />. Введите ее, чтобы начать синхронизацию.</translation> <translation id="3320021301628644560">Добавьте платежный адрес</translation> -<translation id="3329013043687509092">Насыщенность</translation> <translation id="333371639341676808">Предотвратить создание дополнительных диалоговых окон на этой странице.</translation> <translation id="3338095232262050444">Надежный</translation> <translation id="3340978935015468852">настройках</translation> @@ -412,7 +408,6 @@ <translation id="4103249731201008433">Серийный номер устройства недействителен</translation> <translation id="410351446219883937">Автовоспроизведение</translation> <translation id="4103763322291513355">Чтобы просмотреть URL, внесенные в черный список, и другие правила, заданные системным администратором, перейдите по адресу: <strong>chrome://policy</strong>.</translation> -<translation id="4115378294792113321">Пурпурный</translation> <translation id="4116663294526079822">Всегда разрешать на этом сайте</translation> <translation id="4117700440116928470">Область действия правил не поддерживается.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{ещё 1 вариант}one{ещё # вариант}few{ещё # варианта}many{ещё # вариантов}other{ещё # варианта}}</translation> @@ -623,7 +618,6 @@ <translation id="5869522115854928033">Сайты с сохраненными паролями</translation> <translation id="5872918882028971132">Подсказки для родительских элементов</translation> <translation id="5893752035575986141">Принимаются кредитные карты.</translation> -<translation id="5901630391730855834">Желтый</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (данные синхронизируются)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{Используется 1 файл cookie}one{Используется # файл cookie}few{Используется # файла cookie}many{Используется # файлов cookie}other{Используется # файла cookie}}</translation> <translation id="5959728338436674663">Автоматически отправлять <ph name="BEGIN_WHITEPAPER_LINK" />системную информацию и контент страниц<ph name="END_WHITEPAPER_LINK" /> в Google, чтобы улучшить распознавание опасных приложений и сайтов. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -634,12 +628,10 @@ <translation id="5990559369517809815">Расширение заблокировало отправку запроса на сервер.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Страница 1}one{Страница #}few{Страница #}many{Страница #}other{Страница #}}</translation> -<translation id="6017514345406065928">Зеленый</translation> <translation id="6017850046339264347">Злоумышленники могут использовать сайт <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />, чтобы установить вредоносные приложения, маскирующиеся под безопасные программы или собирающие данные, по которым вас можно отследить. <ph name="BEGIN_LEARN_MORE_LINK" />Подробнее…<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (данные синхронизируются)</translation> <translation id="6027201098523975773">Введите имя.</translation> <translation id="6040143037577758943">Закрыть</translation> -<translation id="6042308850641462728">Подробнее...</translation> <translation id="6047233362582046994">Если вы осознаете, что можете подвергнуть риску свои личные данные, то можете <ph name="BEGIN_LINK" />перейти на зараженный сайт<ph name="END_LINK" />, не дожидаясь удаления вредоносных приложений.</translation> <translation id="6047927260846328439">Посещение этой страницы может привести к установке вредоносной программы или хищению вашей личной информации. <ph name="BEGIN_LINK" />Все равно продолжить<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Веб-сайт <ph name="SITE" /> использует механизм Certificate Pinning, поэтому на нем могла произойти подмена сертификата. Открыть сайт в настоящее время нельзя. Сбой мог быть вызван сетевой ошибкой или действиями злоумышленников. Скорее всего, сайт заработает через некоторое время.</translation> @@ -716,7 +708,6 @@ <translation id="6710213216561001401">Назад</translation> <translation id="6710594484020273272"><Введите поисковый запрос></translation> <translation id="6711464428925977395">На прокси-сервере возникла проблема или адрес указан неверно.</translation> -<translation id="6727102863431372879">Установить</translation> <translation id="674375294223700098">Неизвестная ошибка сертификата сервера.</translation> <translation id="6753269504797312559">Значение правила</translation> <translation id="6757797048963528358">Устройство находится в спящем режиме.</translation> @@ -800,7 +791,6 @@ <translation id="7518003948725431193">Не найдена страница для веб-адреса <ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">Подключение к сайту не защищено</translation> -<translation id="7535087603100972091">Значение</translation> <translation id="7537536606612762813">Обязательная</translation> <translation id="7542403920425041731">После этого данные вашей карты будут переданы сайту.</translation> <translation id="7542995811387359312">Автозаполнение отключено – незащищенное подключение.</translation> @@ -811,7 +801,6 @@ <translation id="7567204685887185387">Не удалось подтвердить, что это сервер <ph name="DOMAIN" />. Его сертификат безопасности мог быть выдан обманным путем. Возможно, сервер настроен неправильно или кто-то пытается перехватить ваши данные.</translation> <translation id="7568593326407688803">Язык этой страницы<ph name="ORIGINAL_LANGUAGE" />Хотите перевести ее?</translation> <translation id="7569952961197462199">Удалить кредитную карту из Chrome?</translation> -<translation id="7569983096843329377">Черный</translation> <translation id="7578104083680115302">Быстро оплачивайте покупки на сайтах и в приложениях с помощью карт, сохраненных в Google Payments. Настройка будет действовать на всех ваших устройствах.</translation> <translation id="7588950540487816470">Интернет вокруг нас</translation> <translation id="7592362899630581445">Сертификат сервера не соответствует ограничениям в отношении имен.</translation> @@ -863,7 +852,6 @@ <translation id="79338296614623784">Укажите действительный номер телефона.</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">Сертификат сервера еще не действителен.</translation> -<translation id="7942349550061667556">Красный</translation> <translation id="7947285636476623132">Проверьте год в сроке действия карты и повторите попытку</translation> <translation id="7951415247503192394">(32 бит)</translation> <translation id="7956713633345437162">Закладки на мобильном</translation> @@ -956,7 +944,6 @@ <translation id="8870413625673593573">Недавно закрытые</translation> <translation id="8874824191258364635">Введите действительный номер карты.</translation> <translation id="8876793034577346603">Не удалось выполнить анализ конфигурации сети.</translation> -<translation id="8889402386540077796">Тон</translation> <translation id="8891727572606052622">Недопустимый режим работы прокси-сервера.</translation> <translation id="889901481107108152">К сожалению, данное действие невозможно выполнить на этой платформе.</translation> <translation id="8903921497873541725">Увеличить</translation> @@ -965,7 +952,6 @@ <translation id="8938939909778640821">Кредитные карты и карты предоплаты, которые принимаются к оплате</translation> <translation id="8957210676456822347">Авторизация через адаптивный портал</translation> <translation id="8971063699422889582">Сертификат сервера устарел.</translation> -<translation id="8986494364107987395">Автоматически отправлять в Google статистику использования и отчеты о сбоях</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">Сайт содержит нежелательное ПО</translation> <translation id="8997023839087525404">Предоставленный сервером сертификат не проходил проверку безопасности. Она необходима в некоторых случаях, чтобы доказать, что сертификат надежен и защищает от злоумышленников.</translation> @@ -981,7 +967,6 @@ <translation id="9049981332609050619">Вы попытались открыть <ph name="DOMAIN" />, однако представленный сервером сертификат недействителен.</translation> <translation id="9050666287014529139">Кодовая фраза</translation> <translation id="9065203028668620118">Изменить</translation> -<translation id="9068849894565669697">Выберите цвет</translation> <translation id="9069693763241529744">Заблокировано расширением</translation> <translation id="9076283476770535406">Может содержать контент для взрослых</translation> <translation id="9078964945751709336">Информации недостаточно</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb index f3f7e27..8f2c69bf 100644 --- a/components/strings/components_strings_sk.xtb +++ b/components/strings/components_strings_sk.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Čaká sa na pripojenie...</translation> <translation id="153384715582417236">To je zatiaľ všetko</translation> <translation id="1549470594296187301">Ak chcete použiť túto funkciu, musíte povoliť JavaScript.</translation> -<translation id="1555130319947370107">Modrá</translation> <translation id="1559528461873125649">Neexistuje žiadny takýto súbor ani priečinok</translation> <translation id="1583429793053364125">Pri zobrazovaní tejto webovej stránky sa vyskytla chyba.</translation> <translation id="1592005682883173041">Prístup k miestnym údajom</translation> <translation id="1594030484168838125">Zvoliť</translation> -<translation id="161042844686301425">Azúrová</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1629803312968146339">Chcete, aby Chrome uložil túto kartu?</translation> <translation id="1639239467298939599">Prebieha načítavanie</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Automatické dopĺňanie</translation> <translation id="2710942282213947212">Softvér vo vašom počítači bráni prehliadaču Chromium bezpečne sa pripojiť k webu</translation> <translation id="2712173769900027643">Požiadať o povolenie</translation> -<translation id="2713444072780614174">Biela</translation> <translation id="2720342946869265578">Nablízku</translation> <translation id="2721148159707890343">Žiadosť bola úspešná</translation> <translation id="2728127805433021124">Certifikát servera je podpísaný pomocou slabého podpisového algoritmu.</translation> @@ -299,7 +296,6 @@ <translation id="3303855915957856445">Nenašli sa žiadne výsledky vyhľadávania</translation> <translation id="3305707030755673451">Vaše údaje boli <ph name="TIME" /> zašifrované pomocou vlastnej prístupovej frázy synchronizácie. Keď ju zadáte, synchronizácia sa spustí.</translation> <translation id="3320021301628644560">Pridanie fakturačnej adresy</translation> -<translation id="3329013043687509092">Sýtosť</translation> <translation id="333371639341676808">Zakázať tejto stránke otvárať ďalšie dialógové okná.</translation> <translation id="3338095232262050444">Zabezpečené</translation> <translation id="3340978935015468852">nastavenia</translation> @@ -409,7 +405,6 @@ <translation id="4103249731201008433">Sériové číslo zariadenia je neplatné</translation> <translation id="410351446219883937">Automatické prehrávanie</translation> <translation id="4103763322291513355">Na stránke <strong>chrome://policy</strong> nájdete zoznam zakázaných webových adries a ďalšie pravidlá vynútené vaším správcom systému.</translation> -<translation id="4115378294792113321">Purpurová</translation> <translation id="4116663294526079822">Vždy povoliť na týchto stránkach</translation> <translation id="4117700440116928470">Rozsah pravidla nie je podporovaný.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 ďalšia}few{# ďalšie}many{# ďalšej}other{# ďalších}}</translation> @@ -620,7 +615,6 @@ <translation id="5869522115854928033">Uložené heslá</translation> <translation id="5872918882028971132">Návrhy rodiča</translation> <translation id="5893752035575986141">Kreditné karty sú akceptované.</translation> -<translation id="5901630391730855834">Žltá</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (synchronizované)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{Používa sa 1}few{Používajú sa #}many{Používa sa #}other{Používa sa #}}</translation> <translation id="5959728338436674663">Automaticky odosielať <ph name="BEGIN_WHITEPAPER_LINK" />niektoré informácie o systéme a obsah stránok<ph name="END_WHITEPAPER_LINK" /> do Googlu s cieľom pomôcť rozpoznávať nebezpečné aplikácie a weby. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -631,12 +625,10 @@ <translation id="5990559369517809815">Žiadosti odoslané serveru boli zablokované rozšírením.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Strana 1}few{Strana #}many{Strana #}other{Strana #}}</translation> -<translation id="6017514345406065928">Zelená</translation> <translation id="6017850046339264347">Útočníci na webe <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> by mohli nainštalovať klamlivé aplikácie vydávajúce sa za iné aplikácie alebo zhromažďujúce údaje, ktoré sa dajú použiť na sledovanie vašej osoby. <ph name="BEGIN_LEARN_MORE_LINK" />Ďalšie informácie<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (synchronizované)</translation> <translation id="6027201098523975773">Zadajte meno</translation> <translation id="6040143037577758943">Zavrieť</translation> -<translation id="6042308850641462728">Viac</translation> <translation id="6047233362582046994">Ak si uvedomujete bezpečnostné riziko, môžete <ph name="BEGIN_LINK" />tento web navštíviť<ph name="END_LINK" /> ešte skôr, ako budú škodlivé aplikácie odstránené.</translation> <translation id="6047927260846328439">Tento obsah sa vás môže podvodom pokúsiť presvedčiť, aby ste si nainštalovali softvér alebo poskytli osobné informácie. <ph name="BEGIN_LINK" />Napriek tomu zobraziť<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Web <ph name="SITE" /> momentálne nemôžete navštíviť, pretože používa pripínanie certifikátov. Chyby siete a útoky sú zvyčajne dočasné, takže by táto stránka mala neskôr pravdepodobne fungovať.</translation> @@ -712,7 +704,6 @@ <translation id="6710213216561001401">Dozadu</translation> <translation id="6710594484020273272"><Zadajte hľadaný výraz></translation> <translation id="6711464428925977395">Vyskytol sa problém s proxy serverom alebo je adresa nesprávna.</translation> -<translation id="6727102863431372879">Nastaviť</translation> <translation id="674375294223700098">Neznáma chyba spôsobená certifikátom servera.</translation> <translation id="6753269504797312559">Hodnota pravidla</translation> <translation id="6757797048963528358">Vaše zariadenie prešlo do režimu spánku.</translation> @@ -796,7 +787,6 @@ <translation id="7518003948725431193">Na webovej adrese <ph name="URL" /> sa nepodarilo nájsť žiadne webové stránky</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">Vaše pripojenie k tomuto webu nie je súkromné</translation> -<translation id="7535087603100972091">Hodnota</translation> <translation id="7537536606612762813">Povinné</translation> <translation id="7542403920425041731">Po potvrdení budú údaje karty zdieľané s týmto webom.</translation> <translation id="7542995811387359312">Automatické dopĺňanie údajov o kreditnej karte je zakázané, pretože tento formulár nepoužíva zabezpečené pripojenie.</translation> @@ -807,7 +797,6 @@ <translation id="7567204685887185387">Server nedokáže overiť, či ide o doménu <ph name="DOMAIN" />, bol zrejme vydaný falošný bezpečnostný certifikát. Môže to byť spôsobené nesprávnou konfiguráciou alebo tým, že vaše pripojenie zachytil útočník.</translation> <translation id="7568593326407688803">Táto stránka je v jazyku<ph name="ORIGINAL_LANGUAGE" />Chceli by ste ju preložiť?</translation> <translation id="7569952961197462199">Chcete kreditnú kartu odstrániť z prehliadača Chrome?</translation> -<translation id="7569983096843329377">Čierna</translation> <translation id="7578104083680115302">Zaplaťte rýchlejšie na stránkach a v aplikáciách v rôznych službách pomocou kariet, ktoré ste si uložili na Googli.</translation> <translation id="7588950540487816470">Fyzický web</translation> <translation id="7592362899630581445">Certifikát servera porušuje obmedzenia názvov.</translation> @@ -859,7 +848,6 @@ <translation id="79338296614623784">Zadajte platné telefónne číslo</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">Certifikát servera ešte nie je platný.</translation> -<translation id="7942349550061667556">Červená</translation> <translation id="7947285636476623132">Skontrolujte rok vypršania platnosti a skúste to znova</translation> <translation id="7951415247503192394">(32-bitová verzia)</translation> <translation id="7956713633345437162">Záložky v mobile</translation> @@ -953,7 +941,6 @@ <translation id="8870413625673593573">Naposledy zatvorené</translation> <translation id="8874824191258364635">Zadajte platné číslo karty</translation> <translation id="8876793034577346603">Konfiguráciu siete sa nepodarilo analyzovať.</translation> -<translation id="8889402386540077796">Odtieň</translation> <translation id="8891727572606052622">Neplatný režim proxy.</translation> <translation id="889901481107108152">Je nám ľúto, ale tento experiment nie je na vašej platforme k dispozícii.</translation> <translation id="8903921497873541725">Priblížiť</translation> @@ -962,7 +949,6 @@ <translation id="8938939909778640821">Akceptované kreditné a predplatené karty</translation> <translation id="8957210676456822347">Autorizácia portálu na prihlásenie do siete</translation> <translation id="8971063699422889582">Platnosť certifikátu servera vypršala.</translation> -<translation id="8986494364107987395">Automaticky odosielať Googlu štatistiky používania a správy o zlyhaní</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">Webové stránky, ktoré sa chystáte navštíviť, obsahujú škodlivé programy</translation> <translation id="8997023839087525404">Server prezentoval certifikát, ktorý nebol zverejnený pomocou pravidla transparentnosti certifikátov. V prípade niektorých certifikátov sa táto podmienka vyžaduje s cieľom zaistiť ich dôveryhodnosť a ochranu proti útočníkom.</translation> @@ -978,7 +964,6 @@ <translation id="9049981332609050619">Pokúšate sa otvoriť doménu <ph name="DOMAIN" />, ale server predložil neplatný certifikát.</translation> <translation id="9050666287014529139">Prístupová fráza</translation> <translation id="9065203028668620118">Upraviť</translation> -<translation id="9068849894565669697">Výber farby</translation> <translation id="9069693763241529744">Blokované rozšírením</translation> <translation id="9076283476770535406">Môže zahŕňať obsah pre dospelých</translation> <translation id="9078964945751709336">Treba zadať ďalšie informácie</translation>
diff --git a/components/strings/components_strings_sl.xtb b/components/strings/components_strings_sl.xtb index 022ed779e..c8b03e7 100644 --- a/components/strings/components_strings_sl.xtb +++ b/components/strings/components_strings_sl.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Čakanje na povezavo ...</translation> <translation id="153384715582417236">To je vse za zdaj</translation> <translation id="1549470594296187301">Če želite uporabljati to funkcijo, mora biti omogočen JavaScript.</translation> -<translation id="1555130319947370107">Modra</translation> <translation id="1559528461873125649">Taka datoteka ali imenik ne obstaja</translation> <translation id="1583429793053364125">Med prikazom spletne strani je prišlo do napake.</translation> <translation id="1592005682883173041">Dostop do lokalnih podatkov</translation> <translation id="1594030484168838125">Izberi</translation> -<translation id="161042844686301425">Cianova</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1629803312968146339">Ali želite, da Chrome shrani to kartico?</translation> <translation id="1639239467298939599">Nalaganje</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Samodejno izpolnjevanje</translation> <translation id="2710942282213947212">Programska oprema v računalniku Chromiumu preprečuje vzpostavitev varne povezave s spletom</translation> <translation id="2712173769900027643">Zahtevaj dovoljenje</translation> -<translation id="2713444072780614174">Bela</translation> <translation id="2720342946869265578">V bližini</translation> <translation id="2721148159707890343">Zahteva je uspela</translation> <translation id="2728127805433021124">Strežnikovo potrdilo je podpisano s šibkim podpisnim algoritmom.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">Ni rezultatov iskanja</translation> <translation id="3305707030755673451">Podatki so bili šifrirani z vašim geslom za sinhronizacijo <ph name="TIME" />. Vnesite ga, če želite začeti sinhronizacijo.</translation> <translation id="3320021301628644560">Dodajanje naslova za izstavitev računa</translation> -<translation id="3329013043687509092">Nasičenost</translation> <translation id="333371639341676808">Tej strani preprečite, da bi ustvarila dodatna pogovorna okna.</translation> <translation id="3338095232262050444">Varno</translation> <translation id="3340978935015468852">nastavitve</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">Neveljavna serijska številka naprave</translation> <translation id="410351446219883937">Samodejno predvajanje</translation> <translation id="4103763322291513355">Na <strong>chrome://policy</strong> si lahko ogledate seznam blokiranih URL-jev in drugih pravilnikov, ki jih uveljavlja skrbnik sistema.</translation> -<translation id="4115378294792113321">Škrlatna</translation> <translation id="4116663294526079822">Vedno dovoli na tem spletnem mestu</translation> <translation id="4117700440116928470">Obseg pravilnika ni podprt.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{in še 1 drug}one{in še # drug}two{in še # druga}few{in še # drugi}other{in še # drugih}}</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">Shranjena gesla</translation> <translation id="5872918882028971132">Predlogi staršev</translation> <translation id="5893752035575986141">Sprejema kreditne kartice.</translation> -<translation id="5901630391730855834">Rumena</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (sinhronizirano)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 v uporabi}one{# v uporabi}two{# v uporabi}few{# v uporabi}other{# v uporabi}}</translation> <translation id="5959728338436674663">Samodejno pošlji Googlu nekatere <ph name="BEGIN_WHITEPAPER_LINK" />sistemske podatke in vsebino strani<ph name="END_WHITEPAPER_LINK" /> zaradi zaznavanja nevarnih aplikacij in spletnih mest. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">Zahteve za strežnik je blokirala razširitev.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Stran 1}one{Stran #}two{Stran #}few{Stran #}other{Stran #}}</translation> -<translation id="6017514345406065928">Zelena</translation> <translation id="6017850046339264347">Napadalci na spletnem mestu <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> bi lahko namestili zavajajoče aplikacije, ki se pretvarjajo, da so nekaj drugega, ali zbirajo podatke, s katerimi vas lahko spremljajo. <ph name="BEGIN_LEARN_MORE_LINK" />Več o tem<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (sinhronizirano)</translation> <translation id="6027201098523975773">Vnesite ime</translation> <translation id="6040143037577758943">Zapri</translation> -<translation id="6042308850641462728">Več</translation> <translation id="6047233362582046994">Če se zavedate varnostnega tveganja, lahko <ph name="BEGIN_LINK" />obiščete to spletno mesto<ph name="END_LINK" />, preden bodo škodljive aplikacije odstranjene.</translation> <translation id="6047927260846328439">Ta vsebina vas morda poskuša zavesti, da namestite programsko opremo ali razkrijete osebne podatke. <ph name="BEGIN_LINK" />Vseeno prikaži<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Spletnega mesta <ph name="SITE" /> trenutno ni mogoče obiskati, ker uporablja pripenjanje potrdil. Napake omrežja in napadi na omrežje so običajno začasni, zato bo ta stran verjetno delovala pozneje.</translation> @@ -717,7 +709,6 @@ <translation id="6710213216561001401">Nazaj</translation> <translation id="6710594484020273272"><Vnesite iskalno poizvedbo></translation> <translation id="6711464428925977395">Nekaj je narobe s strežnikom proxy ali pa naslov ni pravilen.</translation> -<translation id="6727102863431372879">Nastavi</translation> <translation id="674375294223700098">Neznana napaka potrdila strežnika.</translation> <translation id="6753269504797312559">Vrednost pravilnika</translation> <translation id="6757797048963528358">Naprava je preklopila v stanje pripravljenosti.</translation> @@ -801,7 +792,6 @@ <translation id="7518003948725431193">Za ta spletni naslov in bilo mogoče najti nobene spletne strani:<ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">Povezava s tem mestom ni zasebna</translation> -<translation id="7535087603100972091">Vrednost</translation> <translation id="7537536606612762813">Obvezen</translation> <translation id="7542403920425041731">Ko potrdite, bodo temu spletnemu mestu razkriti podatki o kartici.</translation> <translation id="7542995811387359312">Samodejno izpolnjevanje podatkov o kreditni kartici je onemogočeno, ker ta obrazec ne uporablja varne povezave.</translation> @@ -812,7 +802,6 @@ <translation id="7567204685887185387">Strežniku ni uspelo dokazati, da je <ph name="DOMAIN" />; njegovo varnostno potrdilo je bilo morda izdano z goljufijo. Razlog za to je lahko napačna konfiguracija ali napadalčevo prestrezanje povezave.</translation> <translation id="7568593326407688803">Ta stran je v jeziku:<ph name="ORIGINAL_LANGUAGE" />Jo želite prevesti?</translation> <translation id="7569952961197462199">Želite odstraniti kreditno kartico iz Chroma?</translation> -<translation id="7569983096843329377">Črna</translation> <translation id="7578104083680115302">Hitro plačevanje na spletnih mestih in v aplikacijah v vseh napravah s karticami, ki ste jih shranili v Googlu.</translation> <translation id="7588950540487816470">Fizični splet</translation> <translation id="7592362899630581445">Strežnikovo potrdilo krši omejitve imen.</translation> @@ -864,7 +853,6 @@ <translation id="79338296614623784">Vnesite veljavno telefonsko številko</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">Potrdilo strežnika še ni veljavno.</translation> -<translation id="7942349550061667556">Rdeča</translation> <translation id="7947285636476623132">Preverite leto poteka veljavnosti in poskusite znova</translation> <translation id="7951415247503192394">(32-bitno)</translation> <translation id="7956713633345437162">Zaznamki mobilne naprave</translation> @@ -957,7 +945,6 @@ <translation id="8870413625673593573">Nedavno zaprto</translation> <translation id="8874824191258364635">Vnesite veljavno številko kartice</translation> <translation id="8876793034577346603">Omrežne konfiguracije ni bilo mogoče razčleniti.</translation> -<translation id="8889402386540077796">Odtenek</translation> <translation id="8891727572606052622">Neveljaven način strežnika proxy.</translation> <translation id="889901481107108152">Oprostite, ta poskus ni na voljo za vaše okolje.</translation> <translation id="8903921497873541725">Povečaj</translation> @@ -966,7 +953,6 @@ <translation id="8938939909778640821">Sprejete kreditne in predplačniške kartice</translation> <translation id="8957210676456822347">Odobritev prestreznega portala</translation> <translation id="8971063699422889582">Potrdilo strežnika je poteklo.</translation> -<translation id="8986494364107987395">Samodejno pošlji statistične podatke o uporabi in poročila o zrušitvah Googlu</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">Pozor: Spletno mesto vsebuje škodljive programe.</translation> <translation id="8997023839087525404">Strežnik je posredoval potrdilo, ki ni bilo javno razkrito na podlagi pravilnika o preglednosti potrdila. To je obvezno za nekatera potrdila zaradi zagotavljanja, da so zaupanja vredna in ščitijo pred napadalci.</translation> @@ -982,7 +968,6 @@ <translation id="9049981332609050619">Skušali ste dostopati do domene <ph name="DOMAIN" />, vendar je strežnik predložil neveljavno potrdilo.</translation> <translation id="9050666287014529139">Geslo</translation> <translation id="9065203028668620118">Uredi</translation> -<translation id="9068849894565669697">Izbira barve</translation> <translation id="9069693763241529744">Blokirala razširitev</translation> <translation id="9076283476770535406">Morda vsebuje vsebino za odrasle</translation> <translation id="9078964945751709336">Vnesti morate več podatkov</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb index ab40327..d896e15 100644 --- a/components/strings/components_strings_sr.xtb +++ b/components/strings/components_strings_sr.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Чека се веза…</translation> <translation id="153384715582417236">То је све за сада</translation> <translation id="1549470594296187301">JavaScript мора да буде омогућен да бисте користили ову функцију.</translation> -<translation id="1555130319947370107">Плава</translation> <translation id="1559528461873125649">Нема такве датотеке или директоријума</translation> <translation id="1583429793053364125">Дошло је до грешке при приказивању ове веб-странице.</translation> <translation id="1592005682883173041">Приступ локалним подацима</translation> <translation id="1594030484168838125">Одабери</translation> -<translation id="161042844686301425">Плавозелена</translation> <translation id="1620510694547887537">Камера</translation> <translation id="1629803312968146339">Желите ли да Chrome сачува ову картицу?</translation> <translation id="1639239467298939599">Учитавање</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Аутоматско попуњавање</translation> <translation id="2710942282213947212">Софтвер на вашем рачунару онемогућава Chromium-у да се безбедно повеже на веб</translation> <translation id="2712173769900027643">Затражи дозволу</translation> -<translation id="2713444072780614174">Бела</translation> <translation id="2720342946869265578">У околини</translation> <translation id="2721148159707890343">Захтев је успео</translation> <translation id="2728127805433021124">Сертификат сервера је потписан слабим алгоритмом.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">Нису пронађени резултати претраге</translation> <translation id="3305707030755673451">Подаци су шифровани помоћу приступне фразе за синхронизацију <ph name="TIME" />. Унесите је да бисте започели синхронизацију.</translation> <translation id="3320021301628644560">Додајте адресу за обрачун</translation> -<translation id="3329013043687509092">Засићеност боја</translation> <translation id="333371639341676808">Спречите ову страницу да прави додатне дијалоге.</translation> <translation id="3338095232262050444">Безбедан</translation> <translation id="3340978935015468852">подешавања</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">Серијски број уређаја је неважећи</translation> <translation id="410351446219883937">Аутоплеј</translation> <translation id="4103763322291513355">Посетите <strong>chrome://policy</strong> да бисте видели листу URL-ова стављених на црну листу и друге смернице које је наметнуо администратор система.</translation> -<translation id="4115378294792113321">Циклама</translation> <translation id="4116663294526079822">Увек дозволи на овом сајту</translation> <translation id="4117700440116928470">Опсег смерница није подржан.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{још 1}one{још #}few{још #}other{још #}}</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">Сачуване лозинке</translation> <translation id="5872918882028971132">Предлози родитеља</translation> <translation id="5893752035575986141">Прихватају се кредитне картице.</translation> -<translation id="5901630391730855834">Жута</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (синхронизовано)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{Користи се 1}one{Користи се #}few{Користе се #}other{Користи се #}}</translation> <translation id="5959728338436674663">Аутоматски шаљите одређене <ph name="BEGIN_WHITEPAPER_LINK" />информације о систему и садржај страница<ph name="END_WHITEPAPER_LINK" /> Google-у да бисте нам помогли да откријемо опасне апликације и сајтове. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">Додатак је блокирао захтеве упућене серверу.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{1. страница}one{#. страница}few{#. страница}other{#. страница}}</translation> -<translation id="6017514345406065928">Зелена</translation> <translation id="6017850046339264347">Нападачи који су на <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> могу да инсталирају обмањујуће апликације које се претварају да су нешто друго или да прикупљају податке који могу да се користе за праћење. <ph name="BEGIN_LEARN_MORE_LINK" />Сазнајте више<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (синхронизовано)</translation> <translation id="6027201098523975773">Унесите назив</translation> <translation id="6040143037577758943">Затвори</translation> -<translation id="6042308850641462728">Више</translation> <translation id="6047233362582046994">Ако разумете безбедносне ризике, можете да <ph name="BEGIN_LINK" />посетите овај сајт<ph name="END_LINK" /> пре него што уклонимо штетне апликације.</translation> <translation id="6047927260846328439">Овај садржај ће покушати да вас превари да инсталирате софтвер или откријете личне податке. <ph name="BEGIN_LINK" />Ипак прикажи<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Тренутно не можете да посетите <ph name="SITE" /> јер веб-сајт користи проверу сертификата. Грешке и напади на мрежи су обично привремени, па ће ова страница вероватно функционисати касније.</translation> @@ -716,7 +708,6 @@ <translation id="6710213216561001401">Претходно</translation> <translation id="6710594484020273272"><Унесите термин за претрагу></translation> <translation id="6711464428925977395">Нешто није у реду са прокси сервером или је адреса нетачна.</translation> -<translation id="6727102863431372879">Постави</translation> <translation id="674375294223700098">Непозната грешка сертификата сервера.</translation> <translation id="6753269504797312559">Вредност смерница</translation> <translation id="6757797048963528358">Уређај је прешао у режим спавања.</translation> @@ -800,7 +791,6 @@ <translation id="7518003948725431193">Ниједна веб-страница није пронађена за веб адресу: <ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">Веза са овим сајтом није приватна</translation> -<translation id="7535087603100972091">Вредност</translation> <translation id="7537536606612762813">Обавезно</translation> <translation id="7542403920425041731">Када будете потврдили, подаци о картици ће бити послати овом сајту.</translation> <translation id="7542995811387359312">Онемогућено је аутоматско попуњавање кредитне картице зато што овај образац не користи безбедну везу.</translation> @@ -811,7 +801,6 @@ <translation id="7567204685887185387">Овај сервер не може да докаже да је <ph name="DOMAIN" />; његов безбедносни сертификат је можда лажно издат. Узрок томе је можда погрешна конфигурација или нападач који је прекинуо везу.</translation> <translation id="7568593326407688803">Ова страница је на језику:<ph name="ORIGINAL_LANGUAGE" />Желите ли да је преведете?</translation> <translation id="7569952961197462199">Желите ли да уклоните кредитну картицу из Chrome-а?</translation> -<translation id="7569983096843329377">Црна</translation> <translation id="7578104083680115302">Плаћајте брзо на сајтовима и у апликацијама на свим уређајима помоћу картица које сте сачували на Google-у.</translation> <translation id="7588950540487816470">Интернет око нас</translation> <translation id="7592362899630581445">Сертификат сервера крши ограничења за име.</translation> @@ -863,7 +852,6 @@ <translation id="79338296614623784">Унесите важећи број телефона</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">Сертификат сервера још увек није важећи.</translation> -<translation id="7942349550061667556">Црвена</translation> <translation id="7947285636476623132">Проверите годину истека и пробајте поново</translation> <translation id="7951415247503192394">(32-битни)</translation> <translation id="7956713633345437162">Обележивачи на мобилном уређају</translation> @@ -957,7 +945,6 @@ <translation id="8870413625673593573">Недавно затворено</translation> <translation id="8874824191258364635">Унесите важећи број картице</translation> <translation id="8876793034577346603">Рашчлањивање конфигурације мреже није успело.</translation> -<translation id="8889402386540077796">Нијанса</translation> <translation id="8891727572606052622">Неважећи режим проксија.</translation> <translation id="889901481107108152">Жао нам је, овај експеримент није доступан на платформи.</translation> <translation id="8903921497873541725">Увећавање</translation> @@ -966,7 +953,6 @@ <translation id="8938939909778640821">Прихватају се кредитне и припејд картице</translation> <translation id="8957210676456822347">Овлашћење на улазном порталу</translation> <translation id="8971063699422889582">Сертификат сервера је истекао.</translation> -<translation id="8986494364107987395">Аутоматски шаљи Google-у статистичке податке о коришћењу и извештаје о отказивању</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">Сајт који ћете посетити садржи штетне програме</translation> <translation id="8997023839087525404">Сервер је приказао сертификат који није јавно откривен помоћу смерница Транспарентност сертификата. То је обавезно за неке сертификате да бисмо се уверили да су поуздани и да штите од нападача.</translation> @@ -982,7 +968,6 @@ <translation id="9049981332609050619">Покушали сте да дођете до домена <ph name="DOMAIN" />, али сервер је послао неважећи сертификат.</translation> <translation id="9050666287014529139">Приступна фраза</translation> <translation id="9065203028668620118">Измени</translation> -<translation id="9068849894565669697">Изаберите боју</translation> <translation id="9069693763241529744">Блокира додатак</translation> <translation id="9076283476770535406">Можда обухвата садржај за одрасле</translation> <translation id="9078964945751709336">Потребно је више информација</translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb index d5eb44d..3b1fcdb5 100644 --- a/components/strings/components_strings_sv.xtb +++ b/components/strings/components_strings_sv.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Väntar på anslutning …</translation> <translation id="153384715582417236">Det var allt för den här gången</translation> <translation id="1549470594296187301">JavaScript måste aktiveras för att du ska kunna använda den här funktionen.</translation> -<translation id="1555130319947370107">Blå</translation> <translation id="1559528461873125649">Filen eller katalogen finns inte</translation> <translation id="1583429793053364125">Ett fel uppstod när webbsidan skulle visas.</translation> <translation id="1592005682883173041">Lokal dataåtkomst</translation> <translation id="1594030484168838125">Välj</translation> -<translation id="161042844686301425">Cyanblå</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1629803312968146339">Vill du att Chrome sparar det här kortet?</translation> <translation id="1639239467298939599">Läser in</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Autofyll</translation> <translation id="2710942282213947212">Programvara på datorn förhindrar att Chromium ansluts till internet på ett säkert sätt</translation> <translation id="2712173769900027643">Begär behörighet</translation> -<translation id="2713444072780614174">Vit</translation> <translation id="2720342946869265578">I närheten</translation> <translation id="2721148159707890343">Begäran genomfördes</translation> <translation id="2728127805433021124">Serverns certifikat är signerat med en svag signaturalgoritm.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">Inga sökresultat hittades</translation> <translation id="3305707030755673451">Din data krypterades med din lösenfras för synkronisering den <ph name="TIME" />. Ange den om du vill starta synkroniseringen.</translation> <translation id="3320021301628644560">Lägg till faktureringsadress</translation> -<translation id="3329013043687509092">Mättnad</translation> <translation id="333371639341676808">Förhindra att den här sidan öppnar ytterligare dialogrutor.</translation> <translation id="3338095232262050444">Säker</translation> <translation id="3340978935015468852">inställningar</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">Enhetens serienummer är ogiltigt</translation> <translation id="410351446219883937">Automatisk uppspelning</translation> <translation id="4103763322291513355">Besök <strong>chrome://policy</strong> om du vill visa listan med webbadresser som inte är godkända och andra policyer som angetts av systemadministratören.</translation> -<translation id="4115378294792113321">Magenta</translation> <translation id="4116663294526079822">Tillåt alltid på den här webbplatsen</translation> <translation id="4117700440116928470">Principens omfattning stöds inte.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 till}other{# till}}</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">Sparade lösenord</translation> <translation id="5872918882028971132">Föräldratips</translation> <translation id="5893752035575986141">Kreditkort får användas.</translation> -<translation id="5901630391730855834">Gul</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (synkroniserade)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 används}other{# används}}</translation> <translation id="5959728338436674663">Skicka automatiskt viss <ph name="BEGIN_WHITEPAPER_LINK" />information om systemet och innehåll på sidan<ph name="END_WHITEPAPER_LINK" /> för att hjälpa Google att identifiera skadliga appar och webbplatser. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">Förfrågningar till servern har blockerats av ett tillägg.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Sida 1}other{Sida #}}</translation> -<translation id="6017514345406065928">Grön</translation> <translation id="6017850046339264347">Angripare på <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> skulle kunna installera bedrägliga appar som inte gör vad de påstås göra eller samla in data som används för att spåra dig. <ph name="BEGIN_LEARN_MORE_LINK" />Läs mer<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (synkroniserade)</translation> <translation id="6027201098523975773">Ange ett namn</translation> <translation id="6040143037577758943">Stäng</translation> -<translation id="6042308850641462728">Mer</translation> <translation id="6047233362582046994">Om du är medveten om säkerhetsriskerna kan du <ph name="BEGIN_LINK" />besöka webbplatsen<ph name="END_LINK" /> innan de skadliga apparna har tagits bort.</translation> <translation id="6047927260846328439">Sidan kan ha till syfte att försöka lura dig att installera programvara eller avslöja personliga uppgifter. <ph name="BEGIN_LINK" />Visa ändå<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Du kan inte besöka <ph name="SITE" /> just nu eftersom tekniken att fästa certifikat används på webbplatsen. Nätverksfel och attacker är ofta tillfälliga, så sidan kommer förmodligen att fungera senare.</translation> @@ -717,7 +709,6 @@ <translation id="6710213216561001401">Föregående</translation> <translation id="6710594484020273272"><Ange sökterm></translation> <translation id="6711464428925977395">Något är fel med proxyservern eller så är adressen felaktig.</translation> -<translation id="6727102863431372879">Ange</translation> <translation id="674375294223700098">Fel - okänt servercertifikat.</translation> <translation id="6753269504797312559">Policyvärde</translation> <translation id="6757797048963528358">Enheten gick i viloläge.</translation> @@ -801,7 +792,6 @@ <translation id="7518003948725431193">Det fanns ingen webbsida på webbadressen: <ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">Din anslutning till webbplatsen är inte privat</translation> -<translation id="7535087603100972091">Värde</translation> <translation id="7537536606612762813">Obligatorisk</translation> <translation id="7542403920425041731">När du bekräftar delas kortuppgifterna med den här webbplatsen.</translation> <translation id="7542995811387359312">Automatisk ifyllning av kreditkort har inaktiverats eftersom formulärets anslutning inte är säker.</translation> @@ -812,7 +802,6 @@ <translation id="7567204685887185387">Servern kunde inte bevisa att den är <ph name="DOMAIN" /> eftersom dess säkerhetscertifikat kan ha utfärdats utan behörighet. Detta kan orsakas av en felaktig konfigurering eller att någon spärrar anslutningen.</translation> <translation id="7568593326407688803">Den här sidan är på<ph name="ORIGINAL_LANGUAGE" />Vill du översätta den?</translation> <translation id="7569952961197462199">Vill du ta bort kreditkortet från Chrome?</translation> -<translation id="7569983096843329377">Svart</translation> <translation id="7578104083680115302">Betala snabbt på webbplatser och i appar på olika enheter med kort som du har sparat hos Google.</translation> <translation id="7588950540487816470">Physical Web</translation> <translation id="7592362899630581445">Serverns certifikat strider mot namnrestriktionerna.</translation> @@ -864,7 +853,6 @@ <translation id="79338296614623784">Ange ett giltigt telefonnummer</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">Servercertifikatet är inte giltigt ännu.</translation> -<translation id="7942349550061667556">Röd</translation> <translation id="7947285636476623132">Kontrollera utgångsår och försök igen</translation> <translation id="7951415247503192394">(32 bitar)</translation> <translation id="7956713633345437162">Bokmärken i mobilen</translation> @@ -958,7 +946,6 @@ <translation id="8870413625673593573">Nyligen stängda</translation> <translation id="8874824191258364635">Ange ett giltigt kortnummer</translation> <translation id="8876793034577346603">Det gick inte att tolka nätverkskonfigurationen.</translation> -<translation id="8889402386540077796">Nyans</translation> <translation id="8891727572606052622">Ogiltigt proxyläge.</translation> <translation id="889901481107108152">Experimentet finns tyvärr inte på din plattform.</translation> <translation id="8903921497873541725">Zooma in</translation> @@ -967,7 +954,6 @@ <translation id="8938939909778640821">Godkända kreditkort och förbetalda kort</translation> <translation id="8957210676456822347">Auktorisering av infångstportal</translation> <translation id="8971063699422889582">Servercertifikatet har gått ut.</translation> -<translation id="8986494364107987395">Skicka användningsstatistik och kraschrapporter till Google automatiskt</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">Webbplatsen som öppnas innehåller skadliga program</translation> <translation id="8997023839087525404">Servern visade ett certifikat som inte lämnats ut via principen Certifikattransparens. Detta är ett krav för vissa certifikat för att säkerställa att de är pålitliga och skyddar mot hackare.</translation> @@ -983,7 +969,6 @@ <translation id="9049981332609050619">Du försökte nå <ph name="DOMAIN" /> men servern angav ett ogiltigt certifikat.</translation> <translation id="9050666287014529139">Lösenfras</translation> <translation id="9065203028668620118">Redigera</translation> -<translation id="9068849894565669697">Välj färg</translation> <translation id="9069693763241529744">Blockerades av ett tillägg</translation> <translation id="9076283476770535406">Den kan innehålla barnförbjudet innehåll</translation> <translation id="9078964945751709336">Mer information krävs</translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb index e6cf90e1..69f4161 100644 --- a/components/strings/components_strings_sw.xtb +++ b/components/strings/components_strings_sw.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Inasubiri muunganisho...</translation> <translation id="153384715582417236">Hayo yanatosha kwa sasa</translation> <translation id="1549470594296187301">Lazima JavaScript iwashwe ili utumie kipengele hiki.</translation> -<translation id="1555130319947370107">Samawati</translation> <translation id="1559528461873125649">Hakuna faili au saraka kama hiyo</translation> <translation id="1583429793053364125">Hitilafu ilitokea wakati wa kuonyesha ukurasa huu wa wavuti.</translation> <translation id="1592005682883173041">Ufikiaji wa Data Iliyo Katika Kifaa Chako</translation> <translation id="1594030484168838125">Chagua</translation> -<translation id="161042844686301425">Samawati-Kijani</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1629803312968146339">Je, unataka Chrome ihifadhi kadi hii?</translation> <translation id="1639239467298939599">Inapakia</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Kujaza Kiotomatiki</translation> <translation id="2710942282213947212">Programu iliyo katika kompyuta yako inaizuia Chromium kuunganisha kwenye wavuti kwa njia salama</translation> <translation id="2712173769900027643">Omba ruhusa</translation> -<translation id="2713444072780614174">Nyeupe</translation> <translation id="2720342946869265578">Uhamishaji wa Karibu</translation> <translation id="2721148159707890343">Ombi limefanikiwa</translation> <translation id="2728127805433021124">Cheti cha seva kimetiwa sahihi kwa kutumia algoriti dhaifu ya sahihi.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">Hakuna matokeo ya utafutaji yaliyopatikana</translation> <translation id="3305707030755673451">Data yako ilisimbwa kwa njia fiche kwa kauli yako ya siri ya kusawazisha mnamo <ph name="TIME" />. Iweke ili uanze kusawazisha.</translation> <translation id="3320021301628644560">Ongeza anwani ya kutuma bili</translation> -<translation id="3329013043687509092">Kukolea</translation> <translation id="333371639341676808">Zuia ukurasa huu usiulize maswali zaidi.</translation> <translation id="3338095232262050444">Salama</translation> <translation id="3340978935015468852">mipangilio</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">Namabari tambulishi ya kifaa ni batili</translation> <translation id="410351446219883937">Kucheza kiotomatiki</translation> <translation id="4103763322291513355">Tembelea <strong>chrome://policy</strong> ili kuona orodha ya URL zilizoondolewa idhini na sera zingine zinazosimamiwa na msimamizi wako wa mfumo.</translation> -<translation id="4115378294792113321">Rangi ya damu ya mzee</translation> <translation id="4116663294526079822">Ruhusu mara kwa mara kwenye tovuti hii</translation> <translation id="4117700440116928470">Upeo wa sera hauwezi kutumika.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{Nyingine 1 }other{Nyingine #}}</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">Manenosiri yaliyohifadhiwa</translation> <translation id="5872918882028971132">Mapendekezo ya Wazazi</translation> <translation id="5893752035575986141">Kadi za mikopo zinakubaliwa.</translation> -<translation id="5901630391730855834">Manjano</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (imesawazishwa)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 kinatumika}other{ # vinatumika}}</translation> <translation id="5959728338436674663">Tuma kiotomatiki <ph name="BEGIN_WHITEPAPER_LINK" />maelezo ya mfumo na maudhui kadha ya ukurasa<ph name="END_WHITEPAPER_LINK" /> kwa Google ili kusaidia kugundua programu na tovuti hatari. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">Maombi katika seva yamezuiwa kwa kiendelezi.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Ukurasa wa 1}other{Ukurasa wa #}}</translation> -<translation id="6017514345406065928">Kijani</translation> <translation id="6017850046339264347">Wavamizi walio kwenye <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> wanaweza kusakinisha programu za udanganyifu zinazojifanya kuwa kitu kingine au kukusanya data inayoweza kutumika kukufuatilia. <ph name="BEGIN_LEARN_MORE_LINK" />Pata maelezo zaidi<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (imesawazishwa)</translation> <translation id="6027201098523975773">Andika jina</translation> <translation id="6040143037577758943">Funga</translation> -<translation id="6042308850641462728">Zaidi</translation> <translation id="6047233362582046994">Ikiwa unaelewa hatari kwa usalama wako, unaweza <ph name="BEGIN_LINK" />kuitembelea tovuti hii<ph name="END_LINK" /> kabla programu hasidi hazijaondolewa.</translation> <translation id="6047927260846328439">Maudhui haya yanaweza kukuhadaa kusakinisha programu au kuonyesha maelezo yako ya binafsi. <ph name="BEGIN_LINK" />Onyesha tu<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Huwezi kutembelea <ph name="SITE" /> sasa hivi kwa sababu tovuti hii inatumia ubandikaji cheti. Hitilafu na uvamizi wa mtandao kwa kawaida huwa vya muda, kwa hivyo ukurasa huu huenda utafanya kazi baadaye.</translation> @@ -717,7 +709,6 @@ <translation id="6710213216561001401">Iliyotangulia</translation> <translation id="6710594484020273272"><Andika neno unalotaka kutafuta></translation> <translation id="6711464428925977395">Kuna hitilafu katika seva mbadala, au anwani siyo sahihi.</translation> -<translation id="6727102863431372879">Weka</translation> <translation id="674375294223700098">Hitilafu isiyojulikana ya cheti cha seva.</translation> <translation id="6753269504797312559">Thamani ya sera</translation> <translation id="6757797048963528358">Kifaa chako kiko katika hali tuli.</translation> @@ -801,7 +792,6 @@ <translation id="7518003948725431193">Hakuna ukurasa wa wavuti uliopatikana kwa anwani hii ya wavuti: <ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">Muunganisho wako kwenye tovuti hii si wa faragha</translation> -<translation id="7535087603100972091">Thamani</translation> <translation id="7537536606612762813">Lazima</translation> <translation id="7542403920425041731">Baada ya kuthibitisha, maelezo ya kadi yako yatashirikiwa na tovuti hii.</translation> <translation id="7542995811387359312">Mjazo otomatiki wa kadi ya mkopo umelemazwa kwa sababu fomu hii haitumii muunganisho salama.</translation> @@ -812,7 +802,6 @@ <translation id="7567204685887185387">Seva hii haikuweza kuthibitisha kuwa ni <ph name="DOMAIN" />; huenda cheti chake cha usalama kimetolewa kwa njia ya ulaghai. Hii inaweza kusababishwa na usanidi usiofaa au mvamizi kuingilia muunganisho wako.</translation> <translation id="7568593326407688803">Ukurasa huu umeandikwa kwa<ph name="ORIGINAL_LANGUAGE" />Je, ungependa kuutafsiri?</translation> <translation id="7569952961197462199">Ungependa kuondoa kadi ya malipo kutoka kwenye Chrome?</translation> -<translation id="7569983096843329377">Nyeusi</translation> <translation id="7578104083680115302">Lipa haraka kwenye tovuti na programu katika vifaa vyote ukitumia kadi ulizohifadhi kwenye Google.</translation> <translation id="7588950540487816470">Wavuti Kila Mahali</translation> <translation id="7592362899630581445">Cheti cha seva kinakiuka vikwazo vya jina.</translation> @@ -864,7 +853,6 @@ <translation id="79338296614623784">Andika nambari sahihi ya simu</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">Cheti cha seva bado sio halali.</translation> -<translation id="7942349550061667556">Nyekundu</translation> <translation id="7947285636476623132">Angalia mwaka kuisha kwa muda wa matumizi halafu ujajibu tena</translation> <translation id="7951415247503192394">(biti 32)</translation> <translation id="7956713633345437162">Alamisho kwenye simu</translation> @@ -958,7 +946,6 @@ <translation id="8870413625673593573">Zilizofungwa Hivi Karibuni</translation> <translation id="8874824191258364635">Andika nambari sahihi ya kadi</translation> <translation id="8876793034577346603">Usanidi wa mtandao umekosa kuchanganuliwa.</translation> -<translation id="8889402386540077796">Rangi</translation> <translation id="8891727572606052622">Modi batili ya proksi.</translation> <translation id="889901481107108152">Samahani, jaribio hili halipatikani kwenye mfumo wako wa uendeshaji.</translation> <translation id="8903921497873541725">Kuza karibu</translation> @@ -967,7 +954,6 @@ <translation id="8938939909778640821">Kadi za mikopo na za kulipia awali zinazokubaliwa</translation> <translation id="8957210676456822347">Uidhinishaji wa Ukurasa wa Wavuti</translation> <translation id="8971063699422889582">Cheti cha seva kimechina.</translation> -<translation id="8986494364107987395">Tumia Google takwimu za matumizi na ripoti za mara ambazo kivinjari kinaacha kufanya kazi, moja kwa moja</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">Tovuti unayoelekea kufungua ina programu zinazodhuru</translation> <translation id="8997023839087525404">Seva imewasilisha cheti ambacho hakikufichuliwa hadharani kwa kutumia sera ya Uwazi wa Cheti. Hili ni hitaji kwa baadhi ya vyeti, ili kuhakikisha kwamba ni cha kuaminika na kulinda dhidi ya wavamizi.</translation> @@ -983,7 +969,6 @@ <translation id="9049981332609050619">Ulijaribu kufikia <ph name="DOMAIN" />, lakini seva iliwasilisha cheti batili.</translation> <translation id="9050666287014529139">Kaulisiri</translation> <translation id="9065203028668620118">Badilisha</translation> -<translation id="9068849894565669697">Chagua rangi</translation> <translation id="9069693763241529744">Imezuiwa na kiendelezi</translation> <translation id="9076283476770535406">Huenda ina maudhui ya ngono</translation> <translation id="9078964945751709336">Maelezo zaidi yanahitajika</translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb index 20fa8d9..b51e28f7 100644 --- a/components/strings/components_strings_ta.xtb +++ b/components/strings/components_strings_ta.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">இணைப்பிற்காகக் காத்திருக்கிறது…</translation> <translation id="153384715582417236">அவ்வளவு தான்!</translation> <translation id="1549470594296187301">இந்த அம்சத்தைப் பயன்படுத்த JavaScript இயக்கப்பட வேண்டும்.</translation> -<translation id="1555130319947370107">நீலம்</translation> <translation id="1559528461873125649">இதுபோன்ற கோப்பு அல்லது கோப்பகம் எதுவுமில்லை</translation> <translation id="1583429793053364125">இந்த இணையப்பக்கத்தைக் காட்டும்போது ஏதோ தவறு ஏற்பட்டது.</translation> <translation id="1592005682883173041">அகத் தரவு அணுகல்</translation> <translation id="1594030484168838125">தேர்வுசெய்</translation> -<translation id="161042844686301425">சியான்</translation> <translation id="1620510694547887537">கேமரா</translation> <translation id="1629803312968146339">இந்தக் கார்டை Chrome சேமிக்க வேண்டுமா?</translation> <translation id="1639239467298939599">ஏற்றுகிறது</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">தானாகநிரப்பு</translation> <translation id="2710942282213947212">உங்கள் கணினியில் உள்ள மென்பொருளானது, இணையத்துடன் Chromium பாதுகாப்பாக இணைவதை நிறுத்துகிறது</translation> <translation id="2712173769900027643">அனுமதி கேள்</translation> -<translation id="2713444072780614174">வெள்ளை</translation> <translation id="2720342946869265578">அருகிலுள்ளவை</translation> <translation id="2721148159707890343">கோரிக்கை வெற்றி</translation> <translation id="2728127805433021124">சேவையகச் சான்றிதழ் ஒரு வலுவற்ற கையொப்ப அல்காரிதமைப் பயன்படுத்தி கையொப்பமிடப்பட்டுள்ளது.</translation> @@ -299,7 +296,6 @@ <translation id="3303855915957856445">தேடல் முடிவுகள் எதுவுமில்லை</translation> <translation id="3305707030755673451"><ph name="TIME" /> அன்று உங்கள் தரவு உங்கள் ஒத்திசைவு கடவுச்சொற்றொடரைக் கொண்டு முறைமையாக்கப்பட்டது. ஒத்திசைவைத் தொடங்க, அதை உள்ளிடவும்.</translation> <translation id="3320021301628644560">பில்லிங் முகவரியைச் சேர்க்கவும்</translation> -<translation id="3329013043687509092">நிறை செறிவு நிலை</translation> <translation id="333371639341676808">இந்த பக்கம் கூடுதல் உரையாடல்களை உருவாக்குவதைத் தடு.</translation> <translation id="3338095232262050444">பாதுகாப்பானது</translation> <translation id="3340978935015468852">அமைப்புகள்</translation> @@ -410,7 +406,6 @@ <translation id="4103249731201008433">சாதன சீரியல் எண் தவறானது</translation> <translation id="410351446219883937">தானியங்கி</translation> <translation id="4103763322291513355">ஏற்கத்தகாத URLகளின் பட்டியலையும் உங்கள் கணினி நிர்வாகியால் செயற்படுத்தப்படும் பிற கொள்கைகளையும் காண <strong>chrome://policy</strong> ஐப் பார்வையிடவும்.</translation> -<translation id="4115378294792113321">மெஜந்தா</translation> <translation id="4116663294526079822">இந்தத் தளத்தில் எப்போதும் அனுமதி</translation> <translation id="4117700440116928470">கொள்கையின் நோக்கம் ஆதரிக்கப்படவில்லை.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{மேலும் ஒன்று}other{மேலும் #}}</translation> @@ -621,7 +616,6 @@ <translation id="5869522115854928033">சேமிக்கப்பட்ட கடவுச்சொற்கள்</translation> <translation id="5872918882028971132">மூலப் பரிந்துரைகள்</translation> <translation id="5893752035575986141">கிரெடிட் கார்டுகள் ஏற்கப்படுகின்றன.</translation> -<translation id="5901630391730855834">மஞ்சள்</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (ஒத்திசைக்கப்பட்டது)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{ஒரு குக்கீ பயன்படுத்தப்படுகிறது}other{# குக்கீகள் பயன்படுத்தப்படுகின்றன}}</translation> <translation id="5959728338436674663">ஆபத்தான பயன்பாடுகளையும் தளங்களையும் கண்டறிவதற்கு உதவியாக, சில <ph name="BEGIN_WHITEPAPER_LINK" />சாதனத் தகவலையும் பக்க உள்ளடக்கத்தையும்<ph name="END_WHITEPAPER_LINK" /> Googleக்குத் தானாக அனுப்பு. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -632,12 +626,10 @@ <translation id="5990559369517809815">சேவையகத்திற்கான கோரிக்கைகள் நீட்டிப்பினால் தடுக்கப்பட்டது.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{பக்கம் 1}other{பக்கம் #}}</translation> -<translation id="6017514345406065928">பச்சை</translation> <translation id="6017850046339264347"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> எனும் தளத்தில் உள்ள தீங்கிழைப்பவர்கள், ஏமாற்றக்கூடிய பயன்பாடுகளை (இவை வேறு ஏதோவொன்றைப் போல போலியாகத் தோற்றமளிக்கும் அல்லது உங்களை டிராக் செய்வதற்குப் பயன்படுத்தக்கூடிய தரவைச் சேகரிக்கும்) நிறுவலாம். <ph name="BEGIN_LEARN_MORE_LINK" />மேலும் அறிக<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (ஒத்திசைக்கப்பட்டன)</translation> <translation id="6027201098523975773">பெயரை உள்ளிடவும்</translation> <translation id="6040143037577758943">மூடு</translation> -<translation id="6042308850641462728">மேலும்</translation> <translation id="6047233362582046994">உங்கள் பாதுகாப்பிற்கான ஆபத்துகளைப் புரிந்துகொண்டால், தீங்கிழைக்கும் பயன்பாடுகள் அகற்றப்படுவதற்கு முன் நீங்கள் <ph name="BEGIN_LINK" />இந்தத் தளத்தைப் பார்வையிடலாம்<ph name="END_LINK" />.</translation> <translation id="6047927260846328439">இந்த உள்ளடக்கம், உங்களை ஏமாற்றி மென்பொருளை நிறுவ வைக்கலாம் அல்லது தனிப்பட்ட தகவலை வெளிப்படுத்தச் செய்யலாம். <ph name="BEGIN_LINK" />பரவாயில்லை, காட்டு<ph name="END_LINK" /></translation> <translation id="6051221802930200923"><ph name="SITE" /> தளமானது சர்டிஃபிகேட் பின்னிங்கைப் பயன்படுத்துவதால், தற்போது அதைப் பார்க்க முடியாது. பொதுவாக நெட்வொர்க் பிழைகளும் பாதிப்புகளும் தற்காலிகமானவை என்பதால், இந்தப் பக்கம் பின்னர் சரியாகச் செயல்படக்கூடும்.</translation> @@ -713,7 +705,6 @@ <translation id="6710213216561001401">முந்தையது</translation> <translation id="6710594484020273272"><தேடல் வார்த்தையை உள்ளிடுக></translation> <translation id="6711464428925977395">ப்ராக்ஸி சர்வரில் ஏதோ தவறு உள்ளது அல்லது முகவரி தவறாக உள்ளது.</translation> -<translation id="6727102863431372879">அமை</translation> <translation id="674375294223700098">தெரியாத சேவையகச் சான்றிதழ் பிழை.</translation> <translation id="6753269504797312559">கொள்கை மதிப்பு</translation> <translation id="6757797048963528358">உங்கள் சாதனம் உறக்கநிலைக்குச் சென்றது.</translation> @@ -797,7 +788,6 @@ <translation id="7518003948725431193">வலை முகவரிக்கான வலைப்பக்கங்கள் ஏதும் காணப்படவில்லை: <ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">இந்தத் தளத்திற்கான உங்கள் இணைப்பு தனிப்பட்டதல்ல</translation> -<translation id="7535087603100972091">மதிப்பு</translation> <translation id="7537536606612762813">கட்டாயம்</translation> <translation id="7542403920425041731">நீங்கள் உறுதிசெய்ததும், உங்கள் கார்டு விவரங்கள் இந்தத் தளத்துடன் பகிரப்படும்.</translation> <translation id="7542995811387359312">இந்தப் படிவம் பாதுகாப்பான இணைப்பைப் பயன்படுத்தாத காரணத்தால், தானியங்கு கடன் அட்டை நிரப்புதல் முடக்கப்பட்டிருக்கிறது.</translation> @@ -808,7 +798,6 @@ <translation id="7567204685887185387">இது <ph name="DOMAIN" /> தான் என்பதை இந்தச் சேவையகம் உறுதிப்படுத்தவில்லை; இதன் பாதுகாப்புச் சான்றிதழில் மோசடி செய்யப்பட்டிருக்கலாம். இது தவறான உள்ளமைவால் ஏற்பட்டிருக்கலாம் அல்லது தீங்கிழைப்பவர் உங்கள் இணைப்பில் குறுக்கிட்டிருக்கலாம்.</translation> <translation id="7568593326407688803">இந்தப் பக்கமானது<ph name="ORIGINAL_LANGUAGE" />இல் உள்ளது இதை மொழிபெயர்க்க விரும்புகிறீர்களா?</translation> <translation id="7569952961197462199">Chrome இலிருந்து கிரெடிட் கார்டை அகற்றவா?</translation> -<translation id="7569983096843329377">கருப்பு</translation> <translation id="7578104083680115302">Google இல் நீங்கள் சேமித்துள்ள கார்டுகளைப் பயன்படுத்தி பல தளங்களிலும் பயன்பாடுகளிலும் உங்களுடைய சாதனங்களில் அனைத்திலும் விரைவாகப் பணம் செலுத்தலாம்.</translation> <translation id="7588950540487816470">இயல்நிலை இணையம்</translation> <translation id="7592362899630581445">பெயர் கட்டுப்பாடுகளைச் சேவையகத்தின் சான்றிதழ் மீறுகிறது.</translation> @@ -860,7 +849,6 @@ <translation id="79338296614623784">சரியான ஃபோன் எண்ணை உள்ளிடவும்</translation> <translation id="7935318582918952113">DOM டிஸ்டில்லர்</translation> <translation id="7938958445268990899">சேவையகச் சான்றிதழ் இன்னும் செல்லுபடியாகவில்லை.</translation> -<translation id="7942349550061667556">சிவப்பு</translation> <translation id="7947285636476623132">காலாவதி ஆண்டைச் சரிபார்த்து, மீண்டும் முயலவும்</translation> <translation id="7951415247503192394">(32-பிட்)</translation> <translation id="7956713633345437162">மொபைல் புக்மார்க்குகள்</translation> @@ -953,7 +941,6 @@ <translation id="8870413625673593573">சமீபத்தில் மூடியவை</translation> <translation id="8874824191258364635">சரியான கார்டு எண்ணை உள்ளிடவும்</translation> <translation id="8876793034577346603">அலசுவதில் பிணைய உள்ளமைவு தோல்வி.</translation> -<translation id="8889402386540077796">நிறச்சாயல்</translation> <translation id="8891727572606052622">தவறான ப்ராக்ஸி முறை.</translation> <translation id="889901481107108152">மன்னிக்கவும், இந்த சோதனை உங்கள் தளத்தில் கிடைக்கவில்லை.</translation> <translation id="8903921497873541725">பெரிதாக்கு</translation> @@ -962,7 +949,6 @@ <translation id="8938939909778640821">ஏற்கப்படும் கிரெடிட் மற்றும் ப்ரீபெய்டு கார்டுகள்</translation> <translation id="8957210676456822347">கேப்டிவ் போர்டல் அங்கீகாரம்</translation> <translation id="8971063699422889582">சேவையகச் சான்றிதழ் காலாவதியானது.</translation> -<translation id="8986494364107987395">பயன்பாட்டுப் புள்ளிவிவரங்களையும் சிதைவு அறிக்கைகளையும் தானாகவே Google க்கு அனுப்பு</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">தளத்தில் தீங்கிழைக்கும் நிரல்கள் அதிகளவில் உள்ளன</translation> <translation id="8997023839087525404">சான்றிதழ் வெளிப்படைத்தன்மை கொள்கையின்படி பொதுவில் வெளியிடப்படாத சான்றிதழைச் சேவையகம் வழங்கியுள்ளது. நம்பகத்தன்மை மற்றும் தாக்குதல்களுக்கு எதிரான பாதுகாப்பை உறுதிசெய்ய, சில சான்றிதழ்களுக்கு இது தேவையான ஒன்றாகும்.</translation> @@ -978,7 +964,6 @@ <translation id="9049981332609050619">நீங்கள் <ph name="DOMAIN" /> ஐ அடைய முயற்சி செய்தீர்கள், ஆனால் சேவையகம் ஒரு செல்லாத சான்றிதழை வழங்கியது.</translation> <translation id="9050666287014529139">கடவுச்சொற்றொடர்</translation> <translation id="9065203028668620118">திருத்து</translation> -<translation id="9068849894565669697">வண்ணத்தைத் தேர்ந்தெடு</translation> <translation id="9069693763241529744">நீட்டிப்பு தடுத்துள்ளது</translation> <translation id="9076283476770535406">இதில் பெரியவர்களுக்கான உள்ளடக்கம் இருக்கக்கூடும்</translation> <translation id="9078964945751709336">கூடுதல் தகவல் தேவை</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb index 76ab06e..bad7f00 100644 --- a/components/strings/components_strings_te.xtb +++ b/components/strings/components_strings_te.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">కనెక్షన్ కోసం వేచి ఉన్నాము...</translation> <translation id="153384715582417236">ఇప్పటికి ఇంతే</translation> <translation id="1549470594296187301">ఈ లక్షణాన్ని ఉపయోగించడానికి జావాస్క్రిప్ట్ తప్పనిసరిగా ప్రారంభించాలి.</translation> -<translation id="1555130319947370107">నీలం</translation> <translation id="1559528461873125649">అటువంటి ఫైల్ లేదా డైరెక్టరీ లేదు</translation> <translation id="1583429793053364125">ఈ వెబ్ పేజీని ప్రదర్శిస్తున్నప్పుడు ఏదో తప్పు జరిగింది.</translation> <translation id="1592005682883173041">స్థానిక డేటా ప్రాప్యత</translation> <translation id="1594030484168838125">ఎంచుకోండి</translation> -<translation id="161042844686301425">నీలి ఆకుపచ్చ</translation> <translation id="1620510694547887537">కెమెరా</translation> <translation id="1629803312968146339">Chrome ఈ కార్డ్ను సేవ్ చేయాలని మీరు కోరుకుంటున్నారా?</translation> <translation id="1639239467298939599">లోడ్ అవుతోంది</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">స్వయంపూర్తి</translation> <translation id="2710942282213947212">మీ కంప్యూటర్లోని సాఫ్ట్వేర్ Chromium సురక్షితంగా వెబ్కు కనెక్ట్ కాకుండా ఆపుతోంది</translation> <translation id="2712173769900027643">అనుమతి అడుగు</translation> -<translation id="2713444072780614174">తెలుపు</translation> <translation id="2720342946869265578">సమీపం</translation> <translation id="2721148159707890343">అభ్యర్థన విజయవంతం అయింది</translation> <translation id="2728127805433021124">సర్వర్ యొక్క ప్రమాణపత్రం ఒక బలహీనమైన సంతకం అల్గారిథమ్ ఉపయోగించి సంతకం చేయబడింది.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">శోధన ఫలితాలు ఏవీ కనుగొనబడలేదు</translation> <translation id="3305707030755673451"><ph name="TIME" />న మీ సమకాలీకరణ రహస్య పదబంధంతో మీ డేటా గుప్తీకరించబడింది. సమకాలీకరణను ప్రారంభించడానికి దీన్ని నమోదు చేయండి.</translation> <translation id="3320021301628644560">బిల్లింగ్ చిరునామాను జోడించండి</translation> -<translation id="3329013043687509092">సంతృప్తత</translation> <translation id="333371639341676808">అదనపు డైలాగ్లను సృష్టించకుండా ఈ పేజీని అడ్డుకో</translation> <translation id="3338095232262050444">సురక్షితం</translation> <translation id="3340978935015468852">సెట్టింగ్లు</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">పరికరం క్రమ సంఖ్య చెల్లదు</translation> <translation id="410351446219883937">స్వీయ ప్లే</translation> <translation id="4103763322291513355">నిరోధిత జాబితాలో ఉన్న URLల జాబితాను మరియు మీ సిస్టమ్ నిర్వాహకుని ద్వారా అమలు చేయబడిన ఇతర విధానాలను చూడటానికి <strong>chrome://policy</strong>ని సందర్శించండి.</translation> -<translation id="4115378294792113321">మెజెంటా</translation> <translation id="4116663294526079822">ఈ సైట్లో ఎల్లప్పుడూ అనుమతించు</translation> <translation id="4117700440116928470">విధానం పరిధికి మద్దతు లేదు.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{మరో 1}other{మరో #}}</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">సేవ్ చేసిన పాస్వర్డ్లు</translation> <translation id="5872918882028971132">తల్లి/తండ్రి సూచనలు</translation> <translation id="5893752035575986141">క్రెడిట్ కార్డ్లు ఆమోదించబడతాయి.</translation> -<translation id="5901630391730855834">పసుపు</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (సమకాలీకరించబడింది)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 వినియోగంలో ఉంది}other{# వినియోగంలో ఉన్నాయి}}</translation> <translation id="5959728338436674663">హానికరమైన అనువర్తనాలు మరియు సైట్లను గుర్తించడంలో సహాయపడటానికి కొంత <ph name="BEGIN_WHITEPAPER_LINK" />సిస్టమ్ సమాచారాన్ని మరియు పేజీ కంటెంట్<ph name="END_WHITEPAPER_LINK" />ను Googleకు స్వయంచాలకంగా పంపుతుంది. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">సర్వర్కు అభ్యర్థనలను ఒక పొడిగింపు బ్లాక్ చేయబడ్డాయి.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{పేజీ 1}other{పేజీ #}}</translation> -<translation id="6017514345406065928">ఆకుపచ్చ</translation> <translation id="6017850046339264347"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />లోని హ్యాకర్లు మోసపూరిత యాప్లను ఇన్స్టాల్ చేయవచ్చు, ఇవి వేరే వాటిలా కనిపించవచ్చు లేదా మిమ్మల్ని ట్రాక్ చేయడానికి ఉపయోగించబడే డేటాని సేకరించవచ్చు. <ph name="BEGIN_LEARN_MORE_LINK" />మరింత తెలుసుకోండి<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (సమకాలీకరించబడ్డాయి)</translation> <translation id="6027201098523975773">పేరుని నమోదు చేయండి</translation> <translation id="6040143037577758943">మూసివేయి</translation> -<translation id="6042308850641462728">మరింత</translation> <translation id="6047233362582046994">మీ భద్రతకు వాటిల్లే ఆపదల గురించి మీకు అర్థం అయ్యి ఉంటే, హానికర యాప్లు తీసివేయబడటానికి ముందే మీరు <ph name="BEGIN_LINK" />ఈ సైట్ను సందర్శించవచ్చు<ph name="END_LINK" />.</translation> <translation id="6047927260846328439">ఈ కంటెంట్ సాఫ్ట్వేర్ని ఇన్స్టాల్ చేయడానికి లేదా వ్యక్తిగత సమాచారాన్ని బహిర్గతం చేయడానికి పురిగొల్పేలా మిమ్మల్ని మాయ చేయడానికి ప్రయత్నించవచ్చు. <ph name="BEGIN_LINK" />ఏదేమైనా చూపు<ph name="END_LINK" /></translation> <translation id="6051221802930200923">ప్రమాణపత్రాన్ని పిన్ చేసే పద్ధతిని వెబ్సైట్ ఉపయోగిస్తుంది కనుక మీరు ప్రస్తుతానికి <ph name="SITE" />ని సందర్శించలేరు. నెట్వర్క్ లోపాలు మరియు దాడులు సాధారణంగా తాత్కాలికమే, కనుక ఈ పేజీ తర్వాత పని చేయవచ్చు.</translation> @@ -717,7 +709,6 @@ <translation id="6710213216561001401">మునుపటి</translation> <translation id="6710594484020273272"><శోధన పదాన్ని టైప్ చేయండి></translation> <translation id="6711464428925977395">ప్రాక్సీ సర్వర్లో ఏదో తప్పు ఉంది లేదా చిరునామా సరైనది కాదు.</translation> -<translation id="6727102863431372879">సెట్ చెయ్యి</translation> <translation id="674375294223700098">తెలియని సర్వర్ ప్రమాణపత్రం లోపం.</translation> <translation id="6753269504797312559">విధానం విలువ</translation> <translation id="6757797048963528358">మీ పరికరం నిద్రావస్థకి వెళ్లింది.</translation> @@ -801,7 +792,6 @@ <translation id="7518003948725431193">వెబ్ చిరునామాకు వెబ్పేజీ కనుగొనబడలేదు: <ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">ఈ సైట్కి మీ కనెక్షన్ ప్రైవేట్ కాదు</translation> -<translation id="7535087603100972091">విలువ</translation> <translation id="7537536606612762813">తప్పనిసరి</translation> <translation id="7542403920425041731">మీరు నిర్ధారించిన తర్వాత, మీ కార్డ్ వివరాలు ఈ సైట్తో షేర్ చేయబడతాయి.</translation> <translation id="7542995811387359312">ఈ ఫారమ్ సురక్షిత కనెక్షన్ని ఉపయోగించనందున స్వయంచాలకంగా క్రెడిట్ కార్డ్ పూర్తి చెయ్యడం ఆపివేయబడింది.</translation> @@ -812,7 +802,6 @@ <translation id="7567204685887185387">ఈ సర్వర్ <ph name="DOMAIN" /> అని నిరూపించుకోలేకపోయింది; దీని భద్రతా ప్రమాణపత్రం మోసపూరితంగా జారీ అయ్యి ఉండవచ్చు. ఇది తప్పుగా కాన్ఫిగర్ చేయడం వలన లేదా దాడిచేసే వ్యక్తి మీ కనెక్షన్కి అంతరాయం కలిగించడం వలన జరిగి ఉండవచ్చు.</translation> <translation id="7568593326407688803">ఈ పేజీ<ph name="ORIGINAL_LANGUAGE" />లో ఉంది మీరు దీన్ని అనువదించాలనుకుంటున్నారా?</translation> <translation id="7569952961197462199">Chrome నుండి క్రెడిట్ కార్డ్ను తీసివేయాలా?</translation> -<translation id="7569983096843329377">నలుపు</translation> <translation id="7578104083680115302">మీరు Googleతో సేవ్ చేసిన కార్డ్లను ఉపయోగించి పరికరాల్లోని సైట్లు మరియు అనువర్తనాల్లో శీఘ్రంగా చెల్లించండి.</translation> <translation id="7588950540487816470">భౌతిక వెబ్</translation> <translation id="7592362899630581445">సర్వర్ యొక్క ప్రమాణపత్రం పేరు పరిమితులను ఉల్లంఘిస్తోంది.</translation> @@ -864,7 +853,6 @@ <translation id="79338296614623784">చెల్లుబాటు అయ్యే ఫోన్ నంబర్ని నమోదు చేయండి</translation> <translation id="7935318582918952113">DOM డిస్టిల్లర్</translation> <translation id="7938958445268990899">సర్వర్ ప్రమాణపత్రం ఇంకా చెల్లుబాటు కాదు.</translation> -<translation id="7942349550061667556">ఎరుపు</translation> <translation id="7947285636476623132">మీ గడువు ముగింపు సంవత్సరాన్ని తనిఖీ చేసి, ఆపై మళ్లీ ప్రయత్నించండి</translation> <translation id="7951415247503192394">(32-బిట్)</translation> <translation id="7956713633345437162">మొబైల్ బుక్మార్క్లు</translation> @@ -958,7 +946,6 @@ <translation id="8870413625673593573">ఇటీవల మూసివేసినవి</translation> <translation id="8874824191258364635">చెల్లుబాటు అయ్యే కార్డ్ నంబర్ను నమోదు చేయండి</translation> <translation id="8876793034577346603">నెట్వర్క్ కాన్ఫిగరేషన్ అన్వయించబడటంలో విఫలమైంది.</translation> -<translation id="8889402386540077796">వర్ణం</translation> <translation id="8891727572606052622">చెల్లని ప్రాక్సీ మోడ్.</translation> <translation id="889901481107108152">క్షమించండి, ఈ ప్రయోగం మీ ప్లాట్ఫారమ్లో అందుబాటులో లేదు.</translation> <translation id="8903921497873541725">దగ్గరికి జూమ్ చెయ్యి</translation> @@ -967,7 +954,6 @@ <translation id="8938939909778640821">ఆమోదించబడిన క్రెడిట్ మరియు ప్రీపెయిడ్ కార్డ్లు</translation> <translation id="8957210676456822347">క్యాప్టివ్ పోర్టల్ ప్రామాణీకరణ</translation> <translation id="8971063699422889582">సర్వర్ యొక్క ప్రమాణపత్రం గడువు ముగిసింది.</translation> -<translation id="8986494364107987395">Googleకు స్వయంచాలకంగా ఉపయోగ గణాంకాలను మరియు క్రాష్ నివేదికలను పంపు</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">ఈ సైట్ హానికర ప్రోగ్రామ్లను కలిగి ఉంది</translation> <translation id="8997023839087525404">సర్వర్ ప్రమాణపత్ర పారదర్శకత విధానాన్ని ఉపయోగించి పబ్లిక్గా బహిరంగపరచబడని ప్రమాణపత్రాన్ని అందించింది. కొన్ని ప్రమాణపత్రాలకు, అవి విశ్వసనీయమైనవని మరియు దాడి చేసేవారి నుండి రక్షణ కల్పించగలవని నిర్ధారించడానికి, ఇది ఆవశ్యకం.</translation> @@ -983,7 +969,6 @@ <translation id="9049981332609050619">మీరు <ph name="DOMAIN" />ని చేరుకోవడానికి ప్రయత్నించారు, కానీ సర్వర్ ఒక చెల్లుబాటులో లేని ప్రమాణపత్రంని అందించింది.</translation> <translation id="9050666287014529139">పాస్ఫ్రేజ్</translation> <translation id="9065203028668620118">సవరించు</translation> -<translation id="9068849894565669697">రంగుని ఎంచుకోండి</translation> <translation id="9069693763241529744">పొడిగింపు ద్వారా బ్లాక్ చేయబడింది</translation> <translation id="9076283476770535406">ఇందులో పెద్దలకు మాత్రమే అనుమతించిన కంటెంట్ ఉండవచ్చు</translation> <translation id="9078964945751709336">మరింత సమాచారం ఆవశ్యకం</translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb index 375f9b2..2f9e2bc 100644 --- a/components/strings/components_strings_th.xtb +++ b/components/strings/components_strings_th.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">กำลังรอการเชื่อมต่อ…</translation> <translation id="153384715582417236">เสร็จเรียบร้อย</translation> <translation id="1549470594296187301">ต้องเปิดใช้ JavaScript เพื่อใช้ฟีเจอร์นี้</translation> -<translation id="1555130319947370107">สีน้ำเงิน</translation> <translation id="1559528461873125649">ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว</translation> <translation id="1583429793053364125">มีสิ่งผิดปกติเกิดขึ้นในขณะที่แสดงหน้าเว็บนี้</translation> <translation id="1592005682883173041">การเข้าถึงข้อมูลในเครื่อง</translation> <translation id="1594030484168838125">เลือก</translation> -<translation id="161042844686301425">สีฟ้า</translation> <translation id="1620510694547887537">กล้องถ่ายรูป</translation> <translation id="1629803312968146339">คุณต้องการให้ Chrome บันทึกบัตรนี้ไหม</translation> <translation id="1639239467298939599">กำลังโหลด</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">ป้อนอัตโนมัติ</translation> <translation id="2710942282213947212">ซอฟต์แวร์ในคอมพิวเตอร์ของคุณทำให้ Chromium ไม่สามารถเชื่อมต่อกับเว็บอย่างปลอดภัย</translation> <translation id="2712173769900027643">ขออนุญาต</translation> -<translation id="2713444072780614174">สีขาว</translation> <translation id="2720342946869265578">ใกล้เคียง</translation> <translation id="2721148159707890343">คำขอสำเร็จ</translation> <translation id="2728127805433021124">ใบรับรองของเซิร์ฟเวอร์ถูกเซ็นชื่อด้วยอัลกอริทึมลายเซ็นที่ไม่รัดกุม</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">ไม่พบผลการค้นหา</translation> <translation id="3305707030755673451">ข้อมูลของคุณได้รับการเข้ารหัสด้วยรหัสผ่านการซิงค์เมื่อวันที่ <ph name="TIME" /> โปรดป้อนรหัสผ่านเพื่อเริ่มซิงค์</translation> <translation id="3320021301628644560">เพิ่มที่อยู่สำหรับการเรียกเก็บเงิน</translation> -<translation id="3329013043687509092">ความอิ่มตัวของสี</translation> <translation id="333371639341676808">ป้องกันหน้านี้จากการสร้างการโต้ตอบเพิ่มเติม</translation> <translation id="3338095232262050444">ปลอดภัย</translation> <translation id="3340978935015468852">การตั้งค่า</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">หมายเลขซีเรียลของอุปกรณ์ไม่ถูกต้อง</translation> <translation id="410351446219883937">เล่นอัตโนมัติ</translation> <translation id="4103763322291513355">ไปที่ <strong>chrome://policy</strong> เพื่อดูรายการของ URL ที่ไม่ได้รับอนุญาต และนโยบายอื่นๆ ที่ผู้ดูแลระบบของคุณบังคับใช้</translation> -<translation id="4115378294792113321">สีม่วงแดง</translation> <translation id="4116663294526079822">อนุญาตบนไซต์นี้เสมอ</translation> <translation id="4117700440116928470">ขอบข่ายนโยบายไม่ได้รับการสนับสนุน</translation> <translation id="4129401438321186435">{COUNT,plural, =1{อีก 1 รายการ}other{อีก # รายการ}}</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">รหัสผ่านที่บันทึกไว้</translation> <translation id="5872918882028971132">คำแนะนำระดับบนสุด</translation> <translation id="5893752035575986141">รับบัตรเครดิต</translation> -<translation id="5901630391730855834">สีเหลือง</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (ซิงค์แล้ว)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{ใช้งานอยู่ 1 รายการ}other{ใช้งานอยู่ # รายการ}}</translation> <translation id="5959728338436674663">ส่ง<ph name="BEGIN_WHITEPAPER_LINK" />ข้อมูลบางอย่างของระบบและเนื้อหาของหน้าเว็บ<ph name="END_WHITEPAPER_LINK" />ไปยัง Google เพื่อช่วยตรวจหาแอปและเว็บไซต์ที่เป็นอันตรายโดยอัตโนมัติ<ph name="PRIVACY_PAGE_LINK" /></translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">คำขอไปยังเซิร์ฟเวอร์ถูกบล็อกโดยส่วนขยาย</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{หน้า 1}other{หน้า #}}</translation> -<translation id="6017514345406065928">สีเขียว</translation> <translation id="6017850046339264347">ผู้โจมตี <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> สามารถติดตั้งแอปที่หลอกลวงซึ่งปลอมเป็นเนื้อหาอย่างอื่นหรือรวบรวมข้อมูลที่อาจนำไปใช้ติดตามคุณ <ph name="BEGIN_LEARN_MORE_LINK" />เรียนรู้เพิ่มเติม<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" /> <ph name="TYPE_2" /> <ph name="TYPE_3" /> (ซิงค์แล้ว)</translation> <translation id="6027201098523975773">ป้อนชื่อ</translation> <translation id="6040143037577758943">ปิด</translation> -<translation id="6042308850641462728">เพิ่มเติม</translation> <translation id="6047233362582046994">หากคุณเข้าใจความเสี่ยงต่อความปลอดภัย คุณสามารถ<ph name="BEGIN_LINK" />ไปยังไซต์นี้<ph name="END_LINK" />ก่อนที่จะมีการนำแอปอันตรายออก</translation> <translation id="6047927260846328439">เนื้อหานี้อาจพยายามหลอกล่อให้คุณติดตั้งซอฟต์แวร์หรือเปิดเผยข้อมูลส่วนบุคคล <ph name="BEGIN_LINK" />แสดงเนื้อหา<ph name="END_LINK" /></translation> <translation id="6051221802930200923">คุณไม่สามารถไปที่ <ph name="SITE" /> ได้ในขณะนี้เนื่องจากเว็บไซต์ใช้การตรึงใบรับรอง โดยปกติข้อผิดพลาดของเครือข่ายและการโจมตีจะเกิดขึ้นเพียงชั่วคราว หน้านี้จึงอาจใช้งานได้ในภายหลัง</translation> @@ -717,7 +709,6 @@ <translation id="6710213216561001401">ก่อนหน้า</translation> <translation id="6710594484020273272"><พิมพ์ข้อความค้นหา></translation> <translation id="6711464428925977395">พร็อกซีเซิร์ฟเวอร์ผิดปกติหรือที่อยู่ไม่ถูกต้อง</translation> -<translation id="6727102863431372879">ตั้งค่า</translation> <translation id="674375294223700098">ข้อผิดพลาดใบรับรองของเซิร์ฟเวอร์ที่ไม่รู้จัก</translation> <translation id="6753269504797312559">ค่านโยบาย</translation> <translation id="6757797048963528358">อุปกรณ์ของคุณเข้าสู่โหมดสลีปแล้ว</translation> @@ -801,7 +792,6 @@ <translation id="7518003948725431193">ไม่พบหน้าเว็บสำหรับที่อยู่เว็บ: <ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">การเชื่อมต่อกับไซต์นี้ไม่เป็นส่วนตัว</translation> -<translation id="7535087603100972091">ราคา</translation> <translation id="7537536606612762813">จำเป็น</translation> <translation id="7542403920425041731">เมื่อคุณยืนยันแล้ว จะมีการแชร์รายละเอียดบัตรของคุณกับไซต์นี้</translation> <translation id="7542995811387359312">การป้อนหมายเลขบัตรเครดิตอัตโนมัติถูกปิดใช้งานเนื่องจากฟอร์มนี้ไม่ได้ใช้การเชื่อมต่อที่ปลอดภัย</translation> @@ -812,7 +802,6 @@ <translation id="7567204685887185387">เซิร์ฟเวอร์นี้ไม่สามารถพิสูจน์ได้ว่าเป็น <ph name="DOMAIN" /> เพราะอาจมีการออกใบรับรองความปลอดภัยปลอม โดยอาจเกิดจากการกำหนดค่าผิดหรือผู้บุกรุกที่ขัดขวางการเชื่อมต่อของคุณ</translation> <translation id="7568593326407688803">หน้าเว็บนี้เป็น<ph name="ORIGINAL_LANGUAGE" />คุณต้องการแปลหรือไม่</translation> <translation id="7569952961197462199">นำบัตรเครดิตออกจาก Chrome ไหม</translation> -<translation id="7569983096843329377">สีดำ</translation> <translation id="7578104083680115302">ชำระเงินบนเว็บไซต์และแอปในอุปกรณ์ต่างๆ ได้อย่างรวดเร็วด้วยบัตรที่คุณได้บันทึกไว้กับ Google</translation> <translation id="7588950540487816470">Physical Web</translation> <translation id="7592362899630581445">ใบรับรองของเซิร์ฟเวอร์ละเมิดข้อกำหนดชื่อ</translation> @@ -864,7 +853,6 @@ <translation id="79338296614623784">ป้อนหมายเลขโทรศัพท์ที่ถูกต้อง</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">ใบรับรองของเซิร์ฟเวอร์ยังไม่ถูกต้อง</translation> -<translation id="7942349550061667556">สีแดง</translation> <translation id="7947285636476623132">ตรวจสอบปีหมดอายุแล้วลองอีกครั้ง</translation> <translation id="7951415247503192394">(32 บิต)</translation> <translation id="7956713633345437162">บุ๊กมาร์กบนมือถือ</translation> @@ -958,7 +946,6 @@ <translation id="8870413625673593573">เพิ่งปิด</translation> <translation id="8874824191258364635">ป้อนหมายเลขบัตรที่ถูกต้อง</translation> <translation id="8876793034577346603">ไม่สามารถแยกวิเคราะห์การกำหนดค่าเครือข่าย</translation> -<translation id="8889402386540077796">โทนสี</translation> <translation id="8891727572606052622">โหมดพร็อกซีไม่ถูกต้อง</translation> <translation id="889901481107108152">ขออภัย การทดลองนี้ไม่สามารถใช้ได้กับแพลตฟอร์มของคุณ</translation> <translation id="8903921497873541725">ขยาย</translation> @@ -967,7 +954,6 @@ <translation id="8938939909778640821">บัตรเครดิตและบัตรเติมเงินที่ยอมรับ</translation> <translation id="8957210676456822347">การให้สิทธิ์แคปทีฟพอร์ทัล</translation> <translation id="8971063699422889582">ใบรับรองของเซิร์ฟเวอร์หมดอายุแล้ว</translation> -<translation id="8986494364107987395">ส่งสถิติการใช้งานและรายงานข้อขัดข้องไปยัง Google โดยอัตโนมัติ</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">ไซต์ที่จะเปิดมีโปรแกรมที่เป็นอันตราย</translation> <translation id="8997023839087525404">เซิร์ฟเวอร์แสดงใบรับรองที่ไม่มีการเปิดเผยต่อสาธารณะโดยใช้นโยบายความโปร่งใสของใบรับรอง ซึ่งเป็นข้อกำหนดสำหรับใบรับรองบางรายการ เพื่อยืนยันว่าเชื่อถือได้และป้องกันการจู่โจม</translation> @@ -983,7 +969,6 @@ <translation id="9049981332609050619">คุณพยายามเข้าถึง <ph name="DOMAIN" /> แต่เซิร์ฟเวอร์แสดงใบรับรองที่ไม่ถูกต้อง</translation> <translation id="9050666287014529139">ข้อความรหัสผ่าน</translation> <translation id="9065203028668620118">แก้ไข</translation> -<translation id="9068849894565669697">เลือกสี</translation> <translation id="9069693763241529744">ถูกบล็อกโดยส่วนขยาย</translation> <translation id="9076283476770535406">เว็บไซต์นี้อาจมีเนื้อหาสำหรับผู้ใหญ่</translation> <translation id="9078964945751709336">ต้องระบุข้อมูลเพิ่มเติม</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb index 7c8fa9f..5cf86d5 100644 --- a/components/strings/components_strings_tr.xtb +++ b/components/strings/components_strings_tr.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Bağlantı bekleniyor…</translation> <translation id="153384715582417236">Şimdilik hepsi bu</translation> <translation id="1549470594296187301">Bu özelliğin kullanılabilmesi için JavaScript etkinleştirilmelidir.</translation> -<translation id="1555130319947370107">Mavi</translation> <translation id="1559528461873125649">Belirtilen dosya veya dizin yok</translation> <translation id="1583429793053364125">Bu web sayfasını görüntülerken bir hata oluştu.</translation> <translation id="1592005682883173041">Yerel Veri Erişimi</translation> <translation id="1594030484168838125">Seç</translation> -<translation id="161042844686301425">Camgöbeği</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1629803312968146339">Chrome'un bu kartı kaydetmesini istiyor musunuz?</translation> <translation id="1639239467298939599">Yükleniyor</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Otomatik doldurma</translation> <translation id="2710942282213947212">Bilgisayarınızdaki yazılım, Chromium'un web'e güvenli bir şekilde bağlanmasını engelliyor</translation> <translation id="2712173769900027643">İzin iste</translation> -<translation id="2713444072780614174">Beyaz</translation> <translation id="2720342946869265578">Etrafımda</translation> <translation id="2721148159707890343">İstek başarılı oldu</translation> <translation id="2728127805433021124">Sunucunun sertifikası, zayıf bir imza algoritması kullanılarak imzalanmış.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">Arama sonucu bulunamadı</translation> <translation id="3305707030755673451">Verileriniz <ph name="TIME" /> tarihinde senkronizasyon parolanızla şifrelendi. Senkronizasyonu başlatmak için senkronizasyon parolanızı girin.</translation> <translation id="3320021301628644560">Fatura adresi ekle</translation> -<translation id="3329013043687509092">Doygunluk</translation> <translation id="333371639341676808">Bu sayfanın ek iletişim kutusu oluşturmasına izin verme.</translation> <translation id="3338095232262050444">Güvenli</translation> <translation id="3340978935015468852">ayarlar</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">Cihazın seri numarası geçersiz</translation> <translation id="410351446219883937">Otomatik oynatma</translation> <translation id="4103763322291513355">Kara listeye alınmış URL'lerin ve sistem yöneticinizin zorunlu tuttuğu diğer politikaların listesini görmek için <strong>chrome://policy</strong> adresini ziyaret edin.</translation> -<translation id="4115378294792113321">Macenta</translation> <translation id="4116663294526079822">Bu sitede her zaman izin ver</translation> <translation id="4117700440116928470">Politika kapsamı desteklenmiyor.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 öğe daha}other{# öğe daha}}</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">Kayıtlı şifreler</translation> <translation id="5872918882028971132">Ebeveyn Önerileri</translation> <translation id="5893752035575986141">Kredi kartları kabul edilir.</translation> -<translation id="5901630391730855834">Sarı</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (senkronize edildi)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 çerez kullanımda}other{# çerez kullanımda}}</translation> <translation id="5959728338436674663">Tehlikeli uygulamaların ve sitelerin tespit edilmesine yardımcı olmak için Google'a bazı <ph name="BEGIN_WHITEPAPER_LINK" />sistem bilgilerini ve sayfa içeriklerini<ph name="END_WHITEPAPER_LINK" /> otomatik olarak gönder.<ph name="PRIVACY_PAGE_LINK" /></translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">Sunucuya gönderilen istekler bir uzantı tarafından engellendi.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{1. sayfa}other{#. sayfa}}</translation> -<translation id="6017514345406065928">Yeşil</translation> <translation id="6017850046339264347"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> öğesini kullanan saldırganlar başka bir şeyi taklit eden aldatıcı uygulamalar yükleyebilir veya sizi izlemek için kullanılabilecek veriler toplayabilirler. <ph name="BEGIN_LEARN_MORE_LINK" />Daha fazla bilgi<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (senkronize edildi)</translation> <translation id="6027201098523975773">Bir ad girin</translation> <translation id="6040143037577758943">Kapat</translation> -<translation id="6042308850641462728">Daha fazla</translation> <translation id="6047233362582046994">Güvenliğinize ilişkin riskleri anladıysanız zararlı programlar kaldırılmadan önce <ph name="BEGIN_LINK" />bu siteyi ziyaret edebilirsiniz<ph name="END_LINK" />.</translation> <translation id="6047927260846328439">Bu içerik sizi kandırarak yazılım yüklemenizi veya kişisel bilgilerinizi ifşa etmenizi sağlamaya çalışabilir. <ph name="BEGIN_LINK" />Yine de göster<ph name="END_LINK" /></translation> <translation id="6051221802930200923"><ph name="SITE" /> sitesi sertifika sabitleme yöntemi kullandığından siteyi şu anda ziyaret edemezsiniz. Ağ hataları ve saldırılar genellikle geçici olduğundan bu sayfa muhtemelen daha sonra çalışacaktır.</translation> @@ -717,7 +709,6 @@ <translation id="6710213216561001401">Önceki</translation> <translation id="6710594484020273272"><Arama terimini yazın></translation> <translation id="6711464428925977395">Proxy sunucusunda bir sorun var veya adres yanlış.</translation> -<translation id="6727102863431372879">Ayarla</translation> <translation id="674375294223700098">Bilinmeyen sunucu sertifikası hatası.</translation> <translation id="6753269504797312559">Politika değeri</translation> <translation id="6757797048963528358">Cihazınız uyku moduna geçti.</translation> @@ -801,7 +792,6 @@ <translation id="7518003948725431193">Şu web adresi için web sayfası bulunamadı:<ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">Bu siteye bağlantınız gizli değil</translation> -<translation id="7535087603100972091">Değer</translation> <translation id="7537536606612762813">Zorunlu</translation> <translation id="7542403920425041731">Onayladığınızda kart ayrıntılarınız bu siteyle paylaşılacaktır.</translation> <translation id="7542995811387359312">Bu form güvenli bağlantı kullanmadığından kredi kartı bilgilerini otomatik doldurma özelliği devre dışı bırakıldı.</translation> @@ -812,7 +802,6 @@ <translation id="7567204685887185387">Bu sunucu <ph name="DOMAIN" /> olduğunu kanıtlayamadı. Güvenlik sertifikası hileli bir şekilde yayınlanmış olabilir. Bu durum, bir yanlış yapılandırmadan veya bağlantıya müdahale eden bir saldırgandan kaynaklanıyor olabilir.</translation> <translation id="7568593326407688803">Bu sayfanın dili<ph name="ORIGINAL_LANGUAGE" />Çevrilmesini istiyor musunuz?</translation> <translation id="7569952961197462199">Kredi kartı Chrome'dan kaldırılsın mı?</translation> -<translation id="7569983096843329377">Siyah</translation> <translation id="7578104083680115302">Google'a kaydettiğiniz kartları kullanarak farklı cihazlardan sitelerde ve uygulamalarda ödemelerinizi hızla yapabilirsiniz.</translation> <translation id="7588950540487816470">Fiziksel Web</translation> <translation id="7592362899630581445">Sunucunun sertifikası ad sınırlamasını ihlal ediyor.</translation> @@ -864,7 +853,6 @@ <translation id="79338296614623784">Geçerli bir telefon numarası girin</translation> <translation id="7935318582918952113">DOM Ayrıştırıcı</translation> <translation id="7938958445268990899">Sunucunun sertifikası henüz geçerli değil.</translation> -<translation id="7942349550061667556">Kırmızı</translation> <translation id="7947285636476623132">Son kullanma tarihinin yılını kontrol edip tekrar deneyin</translation> <translation id="7951415247503192394">(32 bit)</translation> <translation id="7956713633345437162">Mobil yer işaretleri</translation> @@ -958,7 +946,6 @@ <translation id="8870413625673593573">Son Kapatılan</translation> <translation id="8874824191258364635">Geçerli bir kart numarası girin</translation> <translation id="8876793034577346603">Ağ yapılandırması ayrıştırılamadı.</translation> -<translation id="8889402386540077796">Ton</translation> <translation id="8891727572606052622">Geçersiz proxy modu.</translation> <translation id="889901481107108152">Maalesef bu deney platformunuzda kullanılamıyor.</translation> <translation id="8903921497873541725">Yakınlaştır</translation> @@ -967,7 +954,6 @@ <translation id="8938939909778640821">Kabul edilen kredi kartları ve ön ödemeli kartlar</translation> <translation id="8957210676456822347">Giriş Portalı Yetkilendirmesi</translation> <translation id="8971063699422889582">Sunucu sertifikasının süresi doldu.</translation> -<translation id="8986494364107987395">Kullanım istatistiklerini ve çökme raporlarını otomatik olarak Google'a gönder</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">Girmekte olduğunuz site zararlı programlar içermektedir</translation> <translation id="8997023839087525404">Sunucu, Sertifika Şeffaflığı politikası kullanılarak herkese açık bir şekilde açıklanmayan bir sertifika sundu. Güvenilir olduklarından emin olmak ve saldırganlara karşı koruma sağlamak için bazı sertifikalarda bu zorunludur.</translation> @@ -983,7 +969,6 @@ <translation id="9049981332609050619"><ph name="DOMAIN" /> alan adına erişmeye çalıştınız, ancak sunucu geçersiz bir sertifika sağladı.</translation> <translation id="9050666287014529139">Parola</translation> <translation id="9065203028668620118">Düzenle</translation> -<translation id="9068849894565669697">Renk seçin</translation> <translation id="9069693763241529744">Bir uzantı tarafından engellendi</translation> <translation id="9076283476770535406">Yetişkin içeriği bulunabilir</translation> <translation id="9078964945751709336">Daha fazla bilgi gerekli</translation>
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb index 74ca759..022abd7 100644 --- a/components/strings/components_strings_uk.xtb +++ b/components/strings/components_strings_uk.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Очікується з’єднання…</translation> <translation id="153384715582417236">Більше нічого немає</translation> <translation id="1549470594296187301">Щоб користуватися цією функцією, потрібно ввімкнути JavaScript.</translation> -<translation id="1555130319947370107">Синій</translation> <translation id="1559528461873125649">Такого файла або каталогу немає</translation> <translation id="1583429793053364125">Під час показу цієї сторінки сталася помилка.</translation> <translation id="1592005682883173041">Доступ до локальних даних</translation> <translation id="1594030484168838125">Вибрати</translation> -<translation id="161042844686301425">Бірюзовий</translation> <translation id="1620510694547887537">Камера</translation> <translation id="1629803312968146339">Зберегти цю картку в Chrome?</translation> <translation id="1639239467298939599">Завантаження</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Автозаповнення</translation> <translation id="2710942282213947212">Програмне забезпечення на вашому комп’ютері перешкоджає Chromium безпечно під’єднуватися до Інтернету</translation> <translation id="2712173769900027643">Запитувати дозвіл</translation> -<translation id="2713444072780614174">Білий</translation> <translation id="2720342946869265578">Поблизу</translation> <translation id="2721148159707890343">Запит надіслано</translation> <translation id="2728127805433021124">Сертифікат сервера підписано з використанням слабкого алгоритму підпису.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">Немає результатів</translation> <translation id="3305707030755673451">Ваші дані було зашифровано <ph name="TIME" /> за допомогою парольної фрази для синхронізації. Введіть її, щоб почати синхронізацію.</translation> <translation id="3320021301628644560">Додати платіжну адресу</translation> -<translation id="3329013043687509092">Насиченість</translation> <translation id="333371639341676808">Заборонити створення додаткових діалогових вікон цією сторінкою.</translation> <translation id="3338095232262050444">Надійне</translation> <translation id="3340978935015468852">налаштування</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">Недійсний серійний номер пристрою</translation> <translation id="410351446219883937">Автовідтворення</translation> <translation id="4103763322291513355">Перейдіть на сторінку <strong>chrome://policy</strong>, щоб переглянути список URL-адрес із "чорного" списку й інші правила, що примусово застосовується системним адміністратором.</translation> -<translation id="4115378294792113321">Пурпурний</translation> <translation id="4116663294526079822">Завжди дозволяти на цьому сайті</translation> <translation id="4117700440116928470">Правило не підтримується.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{і ще 1 елемент даних}one{і ще # елемент даних}few{і ще # елементи даних}many{і ще # елементів даних}other{і ще # елемента даних}}</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">Збережені паролі</translation> <translation id="5872918882028971132">Поради для батьків</translation> <translation id="5893752035575986141">Кредитні картки, які приймаються.</translation> -<translation id="5901630391730855834">Жовтий</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (синхронізовано)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{Використовується 1 файл}one{Використовується # файл}few{Використовуються # файли}many{Використовуються # файлів}other{Використовуються # файлу}}</translation> <translation id="5959728338436674663">Автоматично надсилати в Google деяку <ph name="BEGIN_WHITEPAPER_LINK" />інформацію про систему та вміст сторінок<ph name="END_WHITEPAPER_LINK" />, щоб допомогти виявляти небезпечні додатки й сайти<ph name="PRIVACY_PAGE_LINK" />.</translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">Надсилання запитів на сервер заблоковано розширенням.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Сторінка 1}one{Сторінка #}few{Сторінка #}many{Сторінка #}other{Сторінка #}}</translation> -<translation id="6017514345406065928">Зелений</translation> <translation id="6017850046339264347">Зловмисники на сайті <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> можуть установити на ваш пристрій оманливі додатки, які видають себе за інший вміст або збирають дані для відстеження вашої активності. <ph name="BEGIN_LEARN_MORE_LINK" />Докладніше<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (синхронізовано)</translation> <translation id="6027201098523975773">Введіть ім’я</translation> <translation id="6040143037577758943">Закрити</translation> -<translation id="6042308850641462728">Більше</translation> <translation id="6047233362582046994">Якщо ви розумієте ризики, пов’язані з безпекою, можете <ph name="BEGIN_LINK" />перейти на цей сайт<ph name="END_LINK" />, перш ніж небезпечні додатки буде видалено.</translation> <translation id="6047927260846328439">Цей вміст може оманливим шляхом змусити вас установити програмну або надати особисту інформацію. <ph name="BEGIN_LINK" />Усе одно показати<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Зараз не можна перейти на сторінку <ph name="SITE" />, оскільки цей веб-сайт використовує закріплення сертифікатів. Помилки мережі й атаки зазвичай тимчасові, тому ця сторінка, скоріш за все, запрацює пізніше.</translation> @@ -717,7 +709,6 @@ <translation id="6710213216561001401">Попереднє</translation> <translation id="6710594484020273272"><Введіть пошуковий термін></translation> <translation id="6711464428925977395">Помилка проксі-сервера або неправильна адреса.</translation> -<translation id="6727102863431372879">Встановити</translation> <translation id="674375294223700098">Помилка "Невідомий сертифікат сервера".</translation> <translation id="6753269504797312559">Значення правила</translation> <translation id="6757797048963528358">Ваш пристрій перейшов у режим сну.</translation> @@ -801,7 +792,6 @@ <translation id="7518003948725431193">Не знайдено веб-сторінок для веб-адреси <ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">Ваше з’єднання з цим сайтом не конфіденційне</translation> -<translation id="7535087603100972091">Яскравість</translation> <translation id="7537536606612762813">Обов’язкове</translation> <translation id="7542403920425041731">Щойно ви підтвердите, цей сайт отримає доступ до даних вашої картки.</translation> <translation id="7542995811387359312">Автоматичне заповнення кредитної картки вимкнено, оскільки ця форма не використовує безпечне з'єднання.</translation> @@ -812,7 +802,6 @@ <translation id="7567204685887185387">Цей сервер не зміг довести, що він – домен <ph name="DOMAIN" />. Можливо, його сертифікат безпеки видали шахраї. Імовірні причини: неправильна конфігурація або хтось намагається перехопити ваше з’єднання.</translation> <translation id="7568593326407688803">Мова цієї сторінки:<ph name="ORIGINAL_LANGUAGE" />Перекласти її?</translation> <translation id="7569952961197462199">Видалити дані кредитної картки з Chrome?</translation> -<translation id="7569983096843329377">Чорний</translation> <translation id="7578104083680115302">Зберігайте картки в Google, щоб швидко платити на сайтах і в додатках на всіх своїх пристроях.</translation> <translation id="7588950540487816470">Інтернет навколо нас</translation> <translation id="7592362899630581445">Сертифікат сервера порушує обмежувальні умови щодо імен.</translation> @@ -864,7 +853,6 @@ <translation id="79338296614623784">Введіть дійсний номер телефону</translation> <translation id="7935318582918952113">Дистилятор DOM</translation> <translation id="7938958445268990899">Сертифікат сервера ще не дійсний.</translation> -<translation id="7942349550061667556">Червоний</translation> <translation id="7947285636476623132">Перевірте рік закінчення терміну дії та повторіть спробу</translation> <translation id="7951415247503192394">(32-розрядна версія)</translation> <translation id="7956713633345437162">Закладки для мобільних пристроїв</translation> @@ -958,7 +946,6 @@ <translation id="8870413625673593573">Нещодавно закриті</translation> <translation id="8874824191258364635">Введіть дійсний номер картки</translation> <translation id="8876793034577346603">Помилка аналізу конфігурації мережі.</translation> -<translation id="8889402386540077796">Тон</translation> <translation id="8891727572606052622">Недійсний режим проксі-сервера.</translation> <translation id="889901481107108152">На жаль, цей експеримент не доступний на вашій платформі.</translation> <translation id="8903921497873541725">Збільшити масштаб</translation> @@ -967,7 +954,6 @@ <translation id="8938939909778640821">Прийнятні кредитні та передплачені картки</translation> <translation id="8957210676456822347">Авторизація приєднаного порталу</translation> <translation id="8971063699422889582">Термін дії сертифіката сервера завершився.</translation> -<translation id="8986494364107987395">Автоматично надсилати статистику використання та звіти про аварійне завершення роботи в Google</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">Сайт містить шкідливі програми</translation> <translation id="8997023839087525404">Сервер надав сертифікат без інформації про перевірку. Це обов’язкові дані для деяких сертифікатів. Вони підтверджують надійність сертифіката й захищають від атак зловмисників.</translation> @@ -983,7 +969,6 @@ <translation id="9049981332609050619">Ви пробували зв’язатися з доменом <ph name="DOMAIN" />, але сервер надав недійсний сертифікат.</translation> <translation id="9050666287014529139">Парольна фраза</translation> <translation id="9065203028668620118">Редагувати</translation> -<translation id="9068849894565669697">Вибрати колір</translation> <translation id="9069693763241529744">Заблоковано розширенням</translation> <translation id="9076283476770535406">На ньому може бути вміст для дорослих</translation> <translation id="9078964945751709336">Потрібно більше інформації</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb index fb803108..a3e95f4 100644 --- a/components/strings/components_strings_vi.xtb +++ b/components/strings/components_strings_vi.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">Đang chờ kết nối…</translation> <translation id="153384715582417236">Hiện đã hoàn tất</translation> <translation id="1549470594296187301">Bạn phải bật JavaScript để sử dụng tính năng này.</translation> -<translation id="1555130319947370107">Xanh lam</translation> <translation id="1559528461873125649">Không có tệp hoặc thư mục nào như vậy</translation> <translation id="1583429793053364125">Đã xảy ra lỗi khi hiển thị trang web này.</translation> <translation id="1592005682883173041">Quyền truy cập dữ liệu cục bộ</translation> <translation id="1594030484168838125">Chọn</translation> -<translation id="161042844686301425">Lục lam</translation> <translation id="1620510694547887537">Máy ảnh</translation> <translation id="1629803312968146339">Bạn có muốn Chrome lưu thẻ này không?</translation> <translation id="1639239467298939599">Đang tải</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">Tự động điền</translation> <translation id="2710942282213947212">Phần mềm trên máy tính của bạn hiện không cho Chromium kết nối an toàn với web</translation> <translation id="2712173769900027643">Xin phép</translation> -<translation id="2713444072780614174">Trắng</translation> <translation id="2720342946869265578">Lân cận</translation> <translation id="2721148159707890343">Yêu cầu đã thành công</translation> <translation id="2728127805433021124">Chứng chỉ của máy chủ đã được ký bằng thuật toán chữ ký yếu.</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">Không tìm thấy kết quả tìm kiếm nào</translation> <translation id="3305707030755673451">Dữ liệu của bạn đã được mã hóa bằng cụm mật khẩu đồng bộ hóa của bạn vào <ph name="TIME" />. Nhập cụm mật khẩu đó để bắt đầu đồng bộ hóa.</translation> <translation id="3320021301628644560">Thêm địa chỉ thanh toán</translation> -<translation id="3329013043687509092">Độ bão hòa</translation> <translation id="333371639341676808">Ngăn không cho trang này tạo hộp thoại bổ sung.</translation> <translation id="3338095232262050444">Bảo mật</translation> <translation id="3340978935015468852">cài đặt</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">Số sê-ri thiết bị không hợp lệ</translation> <translation id="410351446219883937">Tự động phát</translation> <translation id="4103763322291513355">Truy cập <strong>chrome://policy</strong> để xem danh sách các URL bị chặn quyền truy cập và các chính sách khác bị quản trị viên hệ thống buộc phải thực thi.</translation> -<translation id="4115378294792113321">Đỏ thẫm</translation> <translation id="4116663294526079822">Luôn cho phép trên trang web này</translation> <translation id="4117700440116928470">Phạm vi chính sách không được hỗ trợ.</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 mục khác}other{# mục khác}}</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">Mật khẩu đã lưu</translation> <translation id="5872918882028971132">Đề xuất chính</translation> <translation id="5893752035575986141">Thẻ tín dụng được chấp nhận.</translation> -<translation id="5901630391730855834">Vàng</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (được đồng bộ hóa)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{Đang sử dụng 1 cookie}other{Đang sử dụng # cookie}}</translation> <translation id="5959728338436674663">Tự động gửi một số <ph name="BEGIN_WHITEPAPER_LINK" />thông tin hệ thống và nội dung trang<ph name="END_WHITEPAPER_LINK" /> tới Google để giúp phát hiện các ứng dụng và trang web nguy hiểm. <ph name="PRIVACY_PAGE_LINK" /></translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">Tiện ích đã chặn yêu cầu tới máy chủ.</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Trang 1}other{Trang #}}</translation> -<translation id="6017514345406065928">Xanh lục</translation> <translation id="6017850046339264347">Những kẻ tấn công trên <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> có thể cài đặt ứng dụng lừa đảo giả vờ là nội dung khác hoặc thu thập dữ liệu có thể dùng để theo dõi bạn. <ph name="BEGIN_LEARN_MORE_LINK" />Tìm hiểu thêm<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (được đồng bộ hóa)</translation> <translation id="6027201098523975773">Nhập tên</translation> <translation id="6040143037577758943">Đóng</translation> -<translation id="6042308850641462728">Thêm</translation> <translation id="6047233362582046994">Nếu bạn hiểu các rủi ro về bảo mật, bạn có thể <ph name="BEGIN_LINK" />truy cập trang này<ph name="END_LINK" /> trước khi các ứng dụng có hại bị xóa.</translation> <translation id="6047927260846328439">Nội dung này có thể tìm cách đánh lừa bạn cài đặt phần mềm hoặc tiết lộ thông tin cá nhân. <ph name="BEGIN_LINK" />Vẫn hiển thị<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Bạn không thể truy cập vào <ph name="SITE" /> ngay bây giờ do trang web sử dụng tính năng ghim chứng chỉ. Lỗi mạng và các cuộc tấn công mạng thường chỉ là tạm thời nên trang này có thể sẽ hoạt động lại sau.</translation> @@ -717,7 +709,6 @@ <translation id="6710213216561001401">Trước đó</translation> <translation id="6710594484020273272"><Nhập cụm từ tìm kiếm></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> -<translation id="6727102863431372879">Đặt</translation> <translation id="674375294223700098">Lỗi chứng chỉ máy chủ không xác định.</translation> <translation id="6753269504797312559">Giá trị chính sách</translation> <translation id="6757797048963528358">Thiết bị của bạn đã chuyển sang chế độ ngủ.</translation> @@ -801,7 +792,6 @@ <translation id="7518003948725431193">Không tìm thấy trang web nào ứng với địa chỉ web:<ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">Kết nối của bạn tới trang web này không ở chế độ riêng tư</translation> -<translation id="7535087603100972091">Giá trị</translation> <translation id="7537536606612762813">Bắt buộc</translation> <translation id="7542403920425041731">Sau khi bạn xác nhận, chi tiết thẻ của bạn sẽ được chia sẻ với trang web này.</translation> <translation id="7542995811387359312">Tính năng tự động điền thẻ tín dụng đã bị vô hiệu hóa vì biểu mẫu này không sử dụng kết nối an toàn.</translation> @@ -812,7 +802,6 @@ <translation id="7567204685887185387">Máy chủ này không chứng minh được rằng đó là <ph name="DOMAIN" />; chứng chỉ bảo mật của máy chủ này có thể đã bị gian lận khi phát hành. Điều này có thể do định cấu hình sai hoặc có kẻ tấn công chặn kết nối của bạn.</translation> <translation id="7568593326407688803">Trang này bằng<ph name="ORIGINAL_LANGUAGE" />Bạn có muốn dịch trang này không?</translation> <translation id="7569952961197462199">Xóa thẻ tín dụng khỏi Chrome?</translation> -<translation id="7569983096843329377">Đen</translation> <translation id="7578104083680115302">Thanh toán nhanh trên các trang web và ứng dụng trong mọi thiết bị nhờ sử dụng thẻ bạn đã lưu với Google.</translation> <translation id="7588950540487816470">Web trong cuộc sống</translation> <translation id="7592362899630581445">Chứng chỉ của máy chủ vi phạm hạn chế tên.</translation> @@ -864,7 +853,6 @@ <translation id="79338296614623784">Nhập số điện thoại hợp lệ</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">Chứng chỉ của máy chủ chưa hợp lệ.</translation> -<translation id="7942349550061667556">Đỏ</translation> <translation id="7947285636476623132">Kiểm tra năm hết hạn của bạn và thử lại</translation> <translation id="7951415247503192394">(32 bit)</translation> <translation id="7956713633345437162">Dấu trang di động</translation> @@ -958,7 +946,6 @@ <translation id="8870413625673593573">Các tab đã Đóng gần đây</translation> <translation id="8874824191258364635">Nhập số thẻ hợp lệ</translation> <translation id="8876793034577346603">Không thể phân tích cú pháp cấu hình mạng.</translation> -<translation id="8889402386540077796">Màu sắc</translation> <translation id="8891727572606052622">Chế độ proxy không hợp lệ.</translation> <translation id="889901481107108152">Rất tiếc, thử nghiệm này không sẵn có trên nền tảng của bạn.</translation> <translation id="8903921497873541725">Phóng to</translation> @@ -967,7 +954,6 @@ <translation id="8938939909778640821">Thẻ tín dụng và thẻ trả trước được chấp nhận</translation> <translation id="8957210676456822347">Ủy quyền cổng bị khóa</translation> <translation id="8971063699422889582">Chứng chỉ của máy chủ đã hết hạ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="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">Trang web sắp truy cập chứa chương trình độc hại</translation> <translation id="8997023839087525404">Máy chủ đã đưa ra chứng chỉ không được tiết lộ công khai theo chính sách Tính minh bạch của chứng chỉ. Đây là yêu cầu đối với một số chứng chỉ, để đảm bảo chúng đáng tin cậy và giúp chống lại những kẻ tấn công.</translation> @@ -983,7 +969,6 @@ <translation id="9049981332609050619">Bạn đã cố truy cập vào <ph name="DOMAIN" />, nhưng máy chủ cho biết chứng chỉ không hợp lệ.</translation> <translation id="9050666287014529139">Cụm mật khẩu</translation> <translation id="9065203028668620118">Chỉnh sửa</translation> -<translation id="9068849894565669697">Chọn màu</translation> <translation id="9069693763241529744">Bị một tiện ích chặn</translation> <translation id="9076283476770535406">Trang web có thể có nội dung người lớn</translation> <translation id="9078964945751709336">Yêu cầu thêm thông tin</translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb index a74ee89..dc5575e 100644 --- a/components/strings/components_strings_zh-CN.xtb +++ b/components/strings/components_strings_zh-CN.xtb
@@ -73,12 +73,10 @@ <translation id="1527263332363067270">正在等待建立连接…</translation> <translation id="153384715582417236">暂无新内容</translation> <translation id="1549470594296187301">必须启用 JavaScript 才能使用此功能。</translation> -<translation id="1555130319947370107">蓝色</translation> <translation id="1559528461873125649">不存在此类文件或目录</translation> <translation id="1583429793053364125">显示此网页时出了点问题。</translation> <translation id="1592005682883173041">本地数据访问权限</translation> <translation id="1594030484168838125">选择</translation> -<translation id="161042844686301425">青色</translation> <translation id="1620510694547887537">摄像头</translation> <translation id="1629803312968146339">您希望 Chrome 保存此信用卡吗?</translation> <translation id="1639239467298939599">正在加载</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">自动填充</translation> <translation id="2710942282213947212">您计算机上的软件导致 Chromium 无法安全地连接到网络</translation> <translation id="2712173769900027643">请求批准</translation> -<translation id="2713444072780614174">白色</translation> <translation id="2720342946869265578">附近</translation> <translation id="2721148159707890343">请求成功</translation> <translation id="2728127805433021124">服务器的证书是使用弱签名算法进行签名的。</translation> @@ -300,7 +297,6 @@ <translation id="3303855915957856445">未找到任何搜索结果</translation> <translation id="3305707030755673451">您的数据已于 <ph name="TIME" />使用您的同步密码加密。输入该密码即可开始同步。</translation> <translation id="3320021301628644560">添加账单邮寄地址</translation> -<translation id="3329013043687509092">饱和度</translation> <translation id="333371639341676808">禁止此页再显示对话框。</translation> <translation id="3338095232262050444">安全</translation> <translation id="3340978935015468852">设置</translation> @@ -410,7 +406,6 @@ <translation id="4103249731201008433">设备序列号无效</translation> <translation id="410351446219883937">自动播放</translation> <translation id="4103763322291513355">请访问 <strong>chrome:// 政策</strong>,查看列入黑名单的网址列表以及您的系统管理员强制要求执行的其他政策。</translation> -<translation id="4115378294792113321">洋红色</translation> <translation id="4116663294526079822">在此网站上始终允许</translation> <translation id="4117700440116928470">政策范围不受支持。</translation> <translation id="4129401438321186435">{COUNT,plural, =1{1 项其他内容}other{# 项其他内容}}</translation> @@ -621,7 +616,6 @@ <translation id="5869522115854928033">已保存的密码</translation> <translation id="5872918882028971132">家长建议</translation> <translation id="5893752035575986141">接受信用卡。</translation> -<translation id="5901630391730855834">黄色</translation> <translation id="5908541034548427511"><ph name="TYPE_1" />(已同步)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{正在使用 1 个}other{正在使用 # 个}}</translation> <translation id="5959728338436674663">自动向 Google 发送一些<ph name="BEGIN_WHITEPAPER_LINK" />系统信息和网页内容<ph name="END_WHITEPAPER_LINK" />,以帮助检测危险应用和网站。<ph name="PRIVACY_PAGE_LINK" /></translation> @@ -632,12 +626,10 @@ <translation id="5990559369517809815">对服务器的请求已遭到某个扩展程序的阻止。</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{第 1 页}other{第 # 页}}</translation> -<translation id="6017514345406065928">绿色</translation> <translation id="6017850046339264347"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> 上的攻击者可能会安装欺骗性应用来冒充其他内容或收集可用于对您进行跟踪的数据。<ph name="BEGIN_LEARN_MORE_LINK" />了解详情<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />、<ph name="TYPE_2" />、<ph name="TYPE_3" />(已同步)</translation> <translation id="6027201098523975773">请输入名称</translation> <translation id="6040143037577758943">关闭</translation> -<translation id="6042308850641462728">更多</translation> <translation id="6047233362582046994">如果您了解自己将面临的安全风险,则可在有害应用被移除之前<ph name="BEGIN_LINK" />访问此网站<ph name="END_LINK" />。</translation> <translation id="6047927260846328439">此内容可能会试图诱骗您安装软件或透露个人信息。<ph name="BEGIN_LINK" />仍然显示<ph name="END_LINK" /></translation> <translation id="6051221802930200923">您目前无法访问 <ph name="SITE" />,因为此网站使用了证书锁定。网络错误和攻击通常是暂时的,因此,此网页稍后可能会恢复正常。</translation> @@ -713,7 +705,6 @@ <translation id="6710213216561001401">上一个</translation> <translation id="6710594484020273272"><输入搜索字词></translation> <translation id="6711464428925977395">代理服务器出现问题,或者地址有误。</translation> -<translation id="6727102863431372879">设置</translation> <translation id="674375294223700098">未知的服务器证书错误。</translation> <translation id="6753269504797312559">政策值</translation> <translation id="6757797048963528358">您的设备已进入休眠模式。</translation> @@ -797,7 +788,6 @@ <translation id="7518003948725431193">找不到与以下网址对应的网页:<ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">您与此网站的连接不是私密连接</translation> -<translation id="7535087603100972091">值</translation> <translation id="7537536606612762813">强制</translation> <translation id="7542403920425041731">一旦您予以确认,系统便会将您的信用卡详情共享给此网站。</translation> <translation id="7542995811387359312">由于该表单不使用安全连接,因此自动填写信用卡信息的功能已停用。</translation> @@ -808,7 +798,6 @@ <translation id="7567204685887185387">此服务器无法证明它是<ph name="DOMAIN" />;其安全证书可能是由骗子发出的。出现此问题的原因可能是配置有误或您的连接被拦截了。</translation> <translation id="7568593326407688803">此网页为<ph name="ORIGINAL_LANGUAGE" />网页,是否需要翻译?</translation> <translation id="7569952961197462199">从 Chrome 中移除信用卡信息?</translation> -<translation id="7569983096843329377">黑色</translation> <translation id="7578104083680115302">通过各种设备在网站和应用中购物时,您都可以使用 Google 为您保存的银行卡信息快速付款。</translation> <translation id="7588950540487816470">实物网</translation> <translation id="7592362899630581445">服务器的证书违反了域名限制。</translation> @@ -860,7 +849,6 @@ <translation id="79338296614623784">请输入有效的电话号码</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">服务器的证书尚未生效。</translation> -<translation id="7942349550061667556">红色</translation> <translation id="7947285636476623132">请检查您的信用卡到期年份,然后重试</translation> <translation id="7951415247503192394">(32 位)</translation> <translation id="7956713633345437162">移动设备书签</translation> @@ -954,7 +942,6 @@ <translation id="8870413625673593573">最近关闭的标签页</translation> <translation id="8874824191258364635">请输入有效的信用卡号</translation> <translation id="8876793034577346603">无法解析网络配置。</translation> -<translation id="8889402386540077796">色调</translation> <translation id="8891727572606052622">代理模式无效。</translation> <translation id="889901481107108152">抱歉,此项实验性功能不能用于您的平台。</translation> <translation id="8903921497873541725">放大</translation> @@ -963,7 +950,6 @@ <translation id="8938939909778640821">接受的信用卡和预付卡</translation> <translation id="8957210676456822347">强制门户授权</translation> <translation id="8971063699422889582">服务器的证书已过期。</translation> -<translation id="8986494364107987395">将使用情况统计信息和崩溃报告自动发送给 Google</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">您要访问的网站包含有害程序</translation> <translation id="8997023839087525404">该服务器提供了一个未通过证书透明度政策公开披露的证书。某些证书必须通过证书透明度政策进行公开披露,以确保它们值得信任且能保护用户免遭攻击。</translation> @@ -979,7 +965,6 @@ <translation id="9049981332609050619">您试图访问 <ph name="DOMAIN" />,但服务器提供的证书无效。</translation> <translation id="9050666287014529139">密码</translation> <translation id="9065203028668620118">修改</translation> -<translation id="9068849894565669697">选择颜色</translation> <translation id="9069693763241529744">已被某款扩展程序阻止</translation> <translation id="9076283476770535406">此网站可能包含成人内容</translation> <translation id="9078964945751709336">必须提供更多信息</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb index ab9cf23..df74a7db 100644 --- a/components/strings/components_strings_zh-TW.xtb +++ b/components/strings/components_strings_zh-TW.xtb
@@ -68,17 +68,15 @@ <translation id="1430915738399379752">列印</translation> <translation id="1506687042165942984">顯示這個網頁的儲存複本 (亦即現已不再使用的版本)。</translation> <translation id="1517433312004943670">必須輸入電話號碼</translation> -<translation id="1517500485252541695">接受的信用卡和金融卡</translation> +<translation id="1517500485252541695">接受的信用卡和簽帳金融卡</translation> <translation id="1519264250979466059">建立日期</translation> <translation id="1527263332363067270">正在等待連線…</translation> <translation id="153384715582417236">暫無內容</translation> <translation id="1549470594296187301">您必須啟用 JavaScript 才能使用這項功能。</translation> -<translation id="1555130319947370107">藍色</translation> <translation id="1559528461873125649">找不到你所指定的檔案或目錄</translation> <translation id="1583429793053364125">顯示這個網頁時發生錯誤。</translation> <translation id="1592005682883173041">本機資料存取權</translation> <translation id="1594030484168838125">選擇</translation> -<translation id="161042844686301425">青色</translation> <translation id="1620510694547887537">攝影機</translation> <translation id="1629803312968146339">您希望 Chrome 儲存這張信用卡嗎?</translation> <translation id="1639239467298939599">載入中</translation> @@ -169,7 +167,7 @@ <translation id="230155334948463882">新信用卡?</translation> <translation id="2316887270356262533">釋出不到 1 MB。下次造訪部分網站時,載入速度可能會變慢。</translation> <translation id="2317259163369394535"><ph name="DOMAIN" /> 要求提供使用者名稱和密碼。</translation> -<translation id="2317583587496011522">接受金融卡。</translation> +<translation id="2317583587496011522">接受簽帳金融卡。</translation> <translation id="2337852623177822836">管理員所控制的設定</translation> <translation id="2354001756790975382">其他書籤</translation> <translation id="2354430244986887761">Google 安全瀏覽服務最近在 <ph name="SITE" /> <ph name="BEGIN_LINK" />發現有害的應用程式<ph name="END_LINK" />。</translation> @@ -220,7 +218,6 @@ <translation id="2709516037105925701">自動填入</translation> <translation id="2710942282213947212">你的電腦上有軟體在阻止 Chromium 建立安全的網路連線</translation> <translation id="2712173769900027643">要求權限</translation> -<translation id="2713444072780614174">白色</translation> <translation id="2720342946869265578">鄰近網頁</translation> <translation id="2721148159707890343">要求成功</translation> <translation id="2728127805433021124">伺服器憑證是以防護力較弱的簽章演算法進行簽署。</translation> @@ -302,7 +299,6 @@ <translation id="3303855915957856445">找不到相符的搜尋結果</translation> <translation id="3305707030755673451">您已在 <ph name="TIME" />使用同步通關密語對資料進行加密,請輸入通關密語開始進行同步。</translation> <translation id="3320021301628644560">新增帳單地址</translation> -<translation id="3329013043687509092">飽和度</translation> <translation id="333371639341676808">防止此網頁產生其他對話方塊。</translation> <translation id="3338095232262050444">安全</translation> <translation id="3340978935015468852">設定</translation> @@ -413,7 +409,6 @@ <translation id="4103249731201008433">裝置序號無效</translation> <translation id="410351446219883937">自動播放</translation> <translation id="4103763322291513355">請前往 <strong>chrome://policy</strong> 查看列入黑名單的網址清單,以及其他系統管理員強制執行的政策。</translation> -<translation id="4115378294792113321">洋紅色</translation> <translation id="4116663294526079822">永遠允許在這個網站執行</translation> <translation id="4117700440116928470">系統不支援這項政策的範圍。</translation> <translation id="4129401438321186435">{COUNT,plural, =1{以及另外 1 項表單資料}other{以及另外 # 項表單資料}}</translation> @@ -454,7 +449,7 @@ <translation id="4424024547088906515">伺服器無法證明其屬於 <ph name="DOMAIN" /> 網域;其安全性憑證未取得 Chrome 的信任。這可能是因為設定錯誤,或有攻擊者攔截你的連線所致。</translation> <translation id="4432688616882109544"><ph name="HOST_NAME" /> 不接受你的登入憑證,或是你可能未提供登入憑證。</translation> <translation id="443673843213245140">雖然已停用 Proxy,不過已指定明確 Proxy 設定。</translation> -<translation id="445100540951337728">接受的金融卡</translation> +<translation id="445100540951337728">接受的簽帳金融卡</translation> <translation id="4506176782989081258">驗證錯誤:<ph name="VALIDATION_ERROR" /></translation> <translation id="4506599922270137252">與系統管理員聯絡</translation> <translation id="450710068430902550">與管理員分享</translation> @@ -624,7 +619,6 @@ <translation id="5869522115854928033">已儲存的密碼</translation> <translation id="5872918882028971132">家長建議</translation> <translation id="5893752035575986141">接受金融卡。</translation> -<translation id="5901630391730855834">黃色</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (已同步)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{目前使用 1 個 Cookie}other{目前使用 # 個 Cookie}}</translation> <translation id="5959728338436674663">自動傳送部分<ph name="BEGIN_WHITEPAPER_LINK" />系統資訊和網頁內容<ph name="END_WHITEPAPER_LINK" />給 Google,協助偵測危險的應用程式和網站。<ph name="PRIVACY_PAGE_LINK" /></translation> @@ -635,12 +629,10 @@ <translation id="5990559369517809815">擴充功能已封鎖要傳送至伺服器的要求。</translation> <translation id="6008256403891681546">JCB</translation> <translation id="6016158022840135739">{COUNT,plural, =1{第 1 頁}other{第 # 頁}}</translation> -<translation id="6017514345406065928">綠色</translation> <translation id="6017850046339264347">目前在 <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> 上的攻擊者可能會讓你安裝身分不實的欺騙性應用程式,或是收集可用於追蹤你的資料。<ph name="BEGIN_LEARN_MORE_LINK" />瞭解詳情<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="6025416945513303461"><ph name="TYPE_1" />、<ph name="TYPE_2" />、<ph name="TYPE_3" /> (已同步)</translation> <translation id="6027201098523975773">輸入名稱</translation> <translation id="6040143037577758943">關閉</translation> -<translation id="6042308850641462728">更多</translation> <translation id="6047233362582046994">如果你瞭解安全性風險,也可以選擇在有害應用程式尚未遭到移除的狀態下<ph name="BEGIN_LINK" />造訪這個網站<ph name="END_LINK" />。</translation> <translation id="6047927260846328439">這項內容可能會試圖誘使你安裝軟體或提供個人資訊。<ph name="BEGIN_LINK" />仍要顯示<ph name="END_LINK" /></translation> <translation id="6051221802930200923">目前無法造訪 <ph name="SITE" />,因為這個網站使用憑證鎖定功能。網路錯誤和攻擊行為通常是暫時性的,因此這個網頁可能稍後就會恢復正常狀態。</translation> @@ -696,7 +688,7 @@ <translation id="647261751007945333">裝置政策</translation> <translation id="6477321094435799029">Chrome 在這個網頁上偵測到異常代碼。為了保護你的個人資訊 (包括密碼、電話號碼或信用卡資料),Chrome 已封鎖這個網頁。</translation> <translation id="6489534406876378309">開始上傳當機報告</translation> -<translation id="6507833130742554667">接受信用卡和金融卡。</translation> +<translation id="6507833130742554667">接受信用卡和簽帳金融卡。</translation> <translation id="6508722015517270189">重新啟動 Chrome</translation> <translation id="6529602333819889595">重做刪除(&R)</translation> <translation id="6534179046333460208">實體化網路建議</translation> @@ -717,7 +709,6 @@ <translation id="6710213216561001401">返回</translation> <translation id="6710594484020273272"><輸入搜尋字詞></translation> <translation id="6711464428925977395">Proxy 伺服器發生錯誤,或是位址不正確。</translation> -<translation id="6727102863431372879">設定</translation> <translation id="674375294223700098">不明的伺服器憑證錯誤。</translation> <translation id="6753269504797312559">政策值</translation> <translation id="6757797048963528358">您的裝置已進入睡眠模式。</translation> @@ -801,7 +792,6 @@ <translation id="7518003948725431193">找不到此網址的網頁:<ph name="URL" /></translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7526934274050461096">你與這個網站之間的連線不是私人連線</translation> -<translation id="7535087603100972091">值</translation> <translation id="7537536606612762813">強制</translation> <translation id="7542403920425041731">經過你確認後,這個網站就會取得你的信用卡詳細資料。</translation> <translation id="7542995811387359312">由於這個表單並未採用加密連線方式,所以信用卡自動填入功能已停用。</translation> @@ -812,7 +802,6 @@ <translation id="7567204685887185387">伺服器無法證明其屬於 <ph name="DOMAIN" /> 網域;其安全性憑證是以欺詐方式發行。這可能是因為設定錯誤,或有攻擊者攔截你的連線所致。</translation> <translation id="7568593326407688803">此網頁為<ph name="ORIGINAL_LANGUAGE" />你要翻譯網頁內容嗎?</translation> <translation id="7569952961197462199">要從 Chrome 中移除信用卡嗎?</translation> -<translation id="7569983096843329377">黑色</translation> <translation id="7578104083680115302">在不同的裝置上透過各個網站和應用程式消費時,使用您讓 Google 儲存的信用卡資料即可快速付款。</translation> <translation id="7588950540487816470">實體化網路</translation> <translation id="7592362899630581445">伺服器憑證的名稱不符合限制。</translation> @@ -864,7 +853,6 @@ <translation id="79338296614623784">請輸入有效的電話號碼</translation> <translation id="7935318582918952113">DOM Distiller</translation> <translation id="7938958445268990899">伺服器憑證尚未生效。</translation> -<translation id="7942349550061667556">紅色</translation> <translation id="7947285636476623132">請檢查信用卡到期年份,然後再試一次</translation> <translation id="7951415247503192394">(32 位元)</translation> <translation id="7956713633345437162">行動版書籤</translation> @@ -957,7 +945,6 @@ <translation id="8870413625673593573">最近關閉的分頁</translation> <translation id="8874824191258364635">請輸入有效的信用卡號碼</translation> <translation id="8876793034577346603">無法解析網路設定。</translation> -<translation id="8889402386540077796">色調</translation> <translation id="8891727572606052622">Proxy 模式無效。</translation> <translation id="889901481107108152">很抱歉,這項實驗功能無法支援你的平台。</translation> <translation id="8903921497873541725">放大</translation> @@ -966,7 +953,6 @@ <translation id="8938939909778640821">接受的信用卡和預付卡</translation> <translation id="8957210676456822347">監控式入口網站授權</translation> <translation id="8971063699422889582">伺服器憑證已過期。</translation> -<translation id="8986494364107987395">自動傳送使用統計資料及當機報告給 Google</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">你要瀏覽的網站含有有害程式</translation> <translation id="8997023839087525404">該伺服器的憑證並未根據憑證透明化政策對外公開。部分憑證必須符合這項規定,以確保憑證值得信任,不會讓使用者遭到攻擊。</translation> @@ -982,7 +968,6 @@ <translation id="9049981332609050619">你嘗試連線至 <ph name="DOMAIN" />,但伺服器提供的憑證無效。</translation> <translation id="9050666287014529139">通關密語</translation> <translation id="9065203028668620118">編輯</translation> -<translation id="9068849894565669697">選取顏色</translation> <translation id="9069693763241529744">依據擴充功能設定封鎖</translation> <translation id="9076283476770535406">這個網站可能含有成人內容</translation> <translation id="9078964945751709336">請提供詳細資訊</translation>
diff --git a/components/subresource_filter/content/browser/content_activation_list_utils.cc b/components/subresource_filter/content/browser/content_activation_list_utils.cc index 24674d7..e985383 100644 --- a/components/subresource_filter/content/browser/content_activation_list_utils.cc +++ b/components/subresource_filter/content/browser/content_activation_list_utils.cc
@@ -22,7 +22,18 @@ } return ActivationList::PHISHING_INTERSTITIAL; } else if (subresource_filter) { - return ActivationList::SUBRESOURCE_FILTER; + switch (threat_type_metadata.threat_pattern_type) { + case safe_browsing::ThreatPatternType::SUBRESOURCE_FILTER_BETTER_ADS: + return ActivationList::BETTER_ADS; + case safe_browsing::ThreatPatternType::SUBRESOURCE_FILTER_ABUSIVE_ADS: + return ActivationList::ABUSIVE_ADS; + case safe_browsing::ThreatPatternType::SUBRESOURCE_FILTER_ALL_ADS: + return ActivationList::ALL_ADS; + case safe_browsing::ThreatPatternType::NONE: + return ActivationList::SUBRESOURCE_FILTER; + default: + break; + } } return ActivationList::NONE;
diff --git a/components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle.cc b/components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle.cc index 59e0d671..04dd48c 100644 --- a/components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle.cc +++ b/components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle.cc
@@ -84,6 +84,24 @@ "SubresourceFilterOnly", chain_size); break; + case ActivationList::BETTER_ADS: + UMA_HISTOGRAM_COUNTS( + "SubresourceFilter.PageLoad.RedirectChainLength." + "BetterAds", + chain_size); + break; + case ActivationList::ABUSIVE_ADS: + UMA_HISTOGRAM_COUNTS( + "SubresourceFilter.PageLoad.RedirectChainLength." + "AbusiveAds", + chain_size); + break; + case ActivationList::ALL_ADS: + UMA_HISTOGRAM_COUNTS( + "SubresourceFilter.PageLoad.RedirectChainLength." + "AllAds", + chain_size); + break; default: break; }
diff --git a/components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle_unittest.cc b/components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle_unittest.cc index 2670aefb..f7ed063b 100644 --- a/components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle_unittest.cc +++ b/components/subresource_filter/content/browser/subresource_filter_safe_browsing_activation_throttle_unittest.cc
@@ -12,6 +12,7 @@ #include <vector> #include "base/memory/ptr_util.h" +#include "base/message_loop/message_loop.h" #include "base/metrics/field_trial.h" #include "base/run_loop.h" #include "base/test/histogram_tester.h" @@ -120,6 +121,12 @@ return "PhishingInterstitial"; case ActivationList::SUBRESOURCE_FILTER: return "SubresourceFilterOnly"; + case ActivationList::BETTER_ADS: + return "BetterAds"; + case ActivationList::ABUSIVE_ADS: + return "AbusiveAds"; + case ActivationList::ALL_ADS: + return "AllAds"; case ActivationList::NONE: return std::string(); } @@ -134,18 +141,25 @@ }; const ActivationListTestData kActivationListTestData[] = { - {subresource_filter::kActivationListSocialEngineeringAdsInterstitial, + {kActivationListSocialEngineeringAdsInterstitial, ActivationList::SOCIAL_ENG_ADS_INTERSTITIAL, safe_browsing::SB_THREAT_TYPE_URL_PHISHING, safe_browsing::ThreatPatternType::SOCIAL_ENGINEERING_ADS}, - {subresource_filter::kActivationListPhishingInterstitial, - ActivationList::PHISHING_INTERSTITIAL, + {kActivationListPhishingInterstitial, ActivationList::PHISHING_INTERSTITIAL, safe_browsing::SB_THREAT_TYPE_URL_PHISHING, safe_browsing::ThreatPatternType::NONE}, - {subresource_filter::kActivationListSubresourceFilter, - ActivationList::SUBRESOURCE_FILTER, + {kActivationListSubresourceFilter, ActivationList::SUBRESOURCE_FILTER, safe_browsing::SB_THREAT_TYPE_SUBRESOURCE_FILTER, safe_browsing::ThreatPatternType::NONE}, + {kActivationListBetterAds, ActivationList::BETTER_ADS, + safe_browsing::SB_THREAT_TYPE_SUBRESOURCE_FILTER, + safe_browsing::ThreatPatternType::SUBRESOURCE_FILTER_BETTER_ADS}, + {kActivationListAbusiveAds, ActivationList::ABUSIVE_ADS, + safe_browsing::SB_THREAT_TYPE_SUBRESOURCE_FILTER, + safe_browsing::ThreatPatternType::SUBRESOURCE_FILTER_ABUSIVE_ADS}, + {kActivationListAllAds, ActivationList::ALL_ADS, + safe_browsing::SB_THREAT_TYPE_SUBRESOURCE_FILTER, + safe_browsing::ThreatPatternType::SUBRESOURCE_FILTER_ALL_ADS}, }; } // namespace
diff --git a/components/subresource_filter/core/browser/subresource_filter_features.cc b/components/subresource_filter/core/browser/subresource_filter_features.cc index 450e3283..aa706f3 100644 --- a/components/subresource_filter/core/browser/subresource_filter_features.cc +++ b/components/subresource_filter/core/browser/subresource_filter_features.cc
@@ -80,19 +80,26 @@ } ActivationList ParseActivationList(std::string activation_lists_string) { - ActivationList activation_list_type = ActivationList::NONE; CommaSeparatedStrings activation_lists(std::move(activation_lists_string)); if (activation_lists.CaseInsensitiveContains( kActivationListPhishingInterstitial)) { return ActivationList::PHISHING_INTERSTITIAL; } else if (activation_lists.CaseInsensitiveContains( kActivationListSocialEngineeringAdsInterstitial)) { - activation_list_type = ActivationList::SOCIAL_ENG_ADS_INTERSTITIAL; + return ActivationList::SOCIAL_ENG_ADS_INTERSTITIAL; } else if (activation_lists.CaseInsensitiveContains( kActivationListSubresourceFilter)) { - activation_list_type = ActivationList::SUBRESOURCE_FILTER; + return ActivationList::SUBRESOURCE_FILTER; + } else if (activation_lists.CaseInsensitiveContains( + kActivationListBetterAds)) { + return ActivationList::BETTER_ADS; + } else if (activation_lists.CaseInsensitiveContains( + kActivationListAbusiveAds)) { + return ActivationList::ABUSIVE_ADS; + } else if (activation_lists.CaseInsensitiveContains(kActivationListAllAds)) { + return ActivationList::ALL_ADS; } - return activation_list_type; + return ActivationList::NONE; } double ParsePerformanceMeasurementRate(const std::string& rate) { @@ -259,6 +266,9 @@ "social_engineering_ads_interstitial"; const char kActivationListPhishingInterstitial[] = "phishing_interstitial"; const char kActivationListSubresourceFilter[] = "subresource_filter"; +const char kActivationListBetterAds[] = "better_ads"; +const char kActivationListAbusiveAds[] = "abusive_ads"; +const char kActivationListAllAds[] = "all_ads"; const char kActivationPriorityParameterName[] = "activation_priority";
diff --git a/components/subresource_filter/core/browser/subresource_filter_features.h b/components/subresource_filter/core/browser/subresource_filter_features.h index 2d011a47..31216b8 100644 --- a/components/subresource_filter/core/browser/subresource_filter_features.h +++ b/components/subresource_filter/core/browser/subresource_filter_features.h
@@ -201,6 +201,9 @@ extern const char kActivationListSocialEngineeringAdsInterstitial[]; extern const char kActivationListPhishingInterstitial[]; extern const char kActivationListSubresourceFilter[]; +extern const char kActivationListBetterAds[]; +extern const char kActivationListAbusiveAds[]; +extern const char kActivationListAllAds[]; extern const char kActivationPriorityParameterName[];
diff --git a/components/subresource_filter/core/browser/subresource_filter_features_unittest.cc b/components/subresource_filter/core/browser/subresource_filter_features_unittest.cc index 5ab04be..eb5640b 100644 --- a/components/subresource_filter/core/browser/subresource_filter_features_unittest.cc +++ b/components/subresource_filter/core/browser/subresource_filter_features_unittest.cc
@@ -252,6 +252,9 @@ {true, "%$ garbage !%", ActivationList::NONE}, {true, kActivationListSocialEngineeringAdsInterstitial, ActivationList::SOCIAL_ENG_ADS_INTERSTITIAL}, + {true, kActivationListBetterAds, ActivationList::BETTER_ADS}, + {true, kActivationListAbusiveAds, ActivationList::ABUSIVE_ADS}, + {true, kActivationListAllAds, ActivationList::ALL_ADS}, {true, kActivationListPhishingInterstitial, ActivationList::PHISHING_INTERSTITIAL}, {true, socEngPhising.c_str(), ActivationList::NONE},
diff --git a/components/subresource_filter/core/common/activation_list.cc b/components/subresource_filter/core/common/activation_list.cc index a5f50e1..e3ad196 100644 --- a/components/subresource_filter/core/common/activation_list.cc +++ b/components/subresource_filter/core/common/activation_list.cc
@@ -24,6 +24,15 @@ case ActivationList::SUBRESOURCE_FILTER: os << "SUBRESOURCE_FILTER"; break; + case ActivationList::BETTER_ADS: + os << "BETTER_ADS"; + break; + case ActivationList::ABUSIVE_ADS: + os << "ABUSIVE_ADS"; + break; + case ActivationList::ALL_ADS: + os << "ALL_ADS"; + break; default: NOTREACHED(); break;
diff --git a/components/subresource_filter/core/common/activation_list.h b/components/subresource_filter/core/common/activation_list.h index 9caa27b2..eff38ca 100644 --- a/components/subresource_filter/core/common/activation_list.h +++ b/components/subresource_filter/core/common/activation_list.h
@@ -17,8 +17,17 @@ PHISHING_INTERSTITIAL, SUBRESOURCE_FILTER, + // Site violates the better ads standard. + BETTER_ADS, + + // Site shows abusive ads. + ABUSIVE_ADS, + + // Site violates the better ads standard and shows abusive ads. + ALL_ADS, + // Make sure new elements added update the LAST value. - LAST = SUBRESOURCE_FILTER + LAST = ALL_ADS }; // For logging use only.
diff --git a/components/vector_icons/BUILD.gn b/components/vector_icons/BUILD.gn index b03c189..1b8d75b4 100644 --- a/components/vector_icons/BUILD.gn +++ b/components/vector_icons/BUILD.gn
@@ -8,7 +8,6 @@ icon_directory = "." icons = [ - "accessibility.icon", "back_arrow.1x.icon", "back_arrow.icon", "bluetooth_connected.icon",
diff --git a/components/vector_icons/accessibility.icon b/components/vector_icons/accessibility.icon deleted file mode 100644 index 62b8b71c..0000000 --- a/components/vector_icons/accessibility.icon +++ /dev/null
@@ -1,25 +0,0 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -CANVAS_DIMENSIONS, 32, -MOVE_TO, 16, 11.44f, -R_CUBIC_TO, -3.5f, 0, -7.2f, -0.62f, -10.27f, -1.44f, -LINE_TO, 5, 12.16f, -R_CUBIC_TO, 2.27f, 0.77f, 5.56f, 1.05f, 8, 1.34f, -V_LINE_TO, 28, -R_H_LINE_TO, 2, -R_V_LINE_TO, -7, -R_H_LINE_TO, 2, -R_V_LINE_TO, 7, -R_H_LINE_TO, 2, -V_LINE_TO, 13.5f, -R_CUBIC_TO, 2.44f, -0.29f, 5.73f, -0.57f, 8, -1.34f, -LINE_TO, 26.27f, 10, -R_CUBIC_TO, -3.07f, 0.82f, -6.77f, 1.44f, -10.27f, 1.44f, -CLOSE, -R_MOVE_TO, 0, -1.94f, -R_ARC_TO, 2.5f, 2.5f, 0, 1, 0, 0, -5, -R_ARC_TO, 2.5f, 2.5f, 0, 0, 0, 0, 5, -CLOSE, -END
diff --git a/components/viz/service/display/gl_renderer.cc b/components/viz/service/display/gl_renderer.cc index 490f0aa2..011bb55 100644 --- a/components/viz/service/display/gl_renderer.cc +++ b/components/viz/service/display/gl_renderer.cc
@@ -213,14 +213,16 @@ sk_sp<SkImage> filter_image; // The original contents, bound for sampling. - std::unique_ptr<cc::ResourceProvider::ScopedSamplerGL> contents_resource_lock; + std::unique_ptr<cc::DisplayResourceProvider::ScopedSamplerGL> + contents_resource_lock; // A mask to be applied when drawing the RPDQ. - std::unique_ptr<cc::ResourceProvider::ScopedSamplerGL> mask_resource_lock; + std::unique_ptr<cc::DisplayResourceProvider::ScopedSamplerGL> + mask_resource_lock; // Original background texture. std::unique_ptr<cc::ScopedResource> background_texture; - std::unique_ptr<cc::ResourceProvider::ScopedSamplerGL> + std::unique_ptr<cc::DisplayResourceProvider::ScopedSamplerGL> shader_background_sampler_lock; // Backdrop bounding box. @@ -1299,9 +1301,10 @@ void GLRenderer::UpdateRPDQTexturesForSampling( DrawRenderPassDrawQuadParams* params) { if (params->quad->mask_resource_id()) { - params->mask_resource_lock.reset(new cc::ResourceProvider::ScopedSamplerGL( - resource_provider_, params->quad->mask_resource_id(), GL_TEXTURE1, - GL_LINEAR)); + params->mask_resource_lock.reset( + new cc::DisplayResourceProvider::ScopedSamplerGL( + resource_provider_, params->quad->mask_resource_id(), GL_TEXTURE1, + GL_LINEAR)); } if (params->filter_image) { @@ -1320,7 +1323,7 @@ params->source_needs_flip = kBottomLeft_GrSurfaceOrigin == origin; } else { params->contents_resource_lock = - base::MakeUnique<cc::ResourceProvider::ScopedSamplerGL>( + base::MakeUnique<cc::DisplayResourceProvider::ScopedSamplerGL>( resource_provider_, params->contents_texture->id(), GL_LINEAR); DCHECK_EQ(static_cast<GLenum>(GL_TEXTURE_2D), params->contents_resource_lock->target()); @@ -1473,7 +1476,7 @@ } if (params->background_texture) { params->shader_background_sampler_lock = - base::MakeUnique<cc::ResourceProvider::ScopedSamplerGL>( + base::MakeUnique<cc::DisplayResourceProvider::ScopedSamplerGL>( resource_provider_, params->background_texture->id(), GL_TEXTURE0 + last_texture_unit, GL_LINEAR); DCHECK_EQ(static_cast<GLenum>(GL_TEXTURE_2D), @@ -1952,7 +1955,7 @@ float edge[24]; SetupQuadForClippingAndAntialiasing(device_transform, quad, &aa_quad, clip_region, &local_quad, edge); - cc::ResourceProvider::ScopedSamplerGL quad_resource_lock( + cc::DisplayResourceProvider::ScopedSamplerGL quad_resource_lock( resource_provider_, resource_id, quad->nearest_neighbor ? GL_NEAREST : GL_LINEAR); SamplerType sampler = @@ -2025,8 +2028,8 @@ ? GL_LINEAR : GL_NEAREST; - cc::ResourceProvider::ScopedSamplerGL quad_resource_lock(resource_provider_, - resource_id, filter); + cc::DisplayResourceProvider::ScopedSamplerGL quad_resource_lock( + resource_provider_, resource_id, filter); SamplerType sampler = SamplerTypeFromTextureTarget(quad_resource_lock.target()); @@ -2146,27 +2149,27 @@ // The source color space should never be RGB. DCHECK_NE(src_color_space, src_color_space.GetAsFullRangeRGB()); - cc::ResourceProvider::ScopedSamplerGL y_plane_lock( + cc::DisplayResourceProvider::ScopedSamplerGL y_plane_lock( resource_provider_, quad->y_plane_resource_id(), GL_TEXTURE1, GL_LINEAR); if (base::FeatureList::IsEnabled(media::kVideoColorManagement)) DCHECK_EQ(src_color_space, y_plane_lock.color_space()); - cc::ResourceProvider::ScopedSamplerGL u_plane_lock( + cc::DisplayResourceProvider::ScopedSamplerGL u_plane_lock( resource_provider_, quad->u_plane_resource_id(), GL_TEXTURE2, GL_LINEAR); DCHECK_EQ(y_plane_lock.target(), u_plane_lock.target()); DCHECK_EQ(y_plane_lock.color_space(), u_plane_lock.color_space()); // TODO(jbauman): Use base::Optional when available. - std::unique_ptr<cc::ResourceProvider::ScopedSamplerGL> v_plane_lock; + std::unique_ptr<cc::DisplayResourceProvider::ScopedSamplerGL> v_plane_lock; if (uv_texture_mode == UV_TEXTURE_MODE_U_V) { - v_plane_lock.reset(new cc::ResourceProvider::ScopedSamplerGL( + v_plane_lock.reset(new cc::DisplayResourceProvider::ScopedSamplerGL( resource_provider_, quad->v_plane_resource_id(), GL_TEXTURE3, GL_LINEAR)); DCHECK_EQ(y_plane_lock.target(), v_plane_lock->target()); DCHECK_EQ(y_plane_lock.color_space(), v_plane_lock->color_space()); } - std::unique_ptr<cc::ResourceProvider::ScopedSamplerGL> a_plane_lock; + std::unique_ptr<cc::DisplayResourceProvider::ScopedSamplerGL> a_plane_lock; if (alpha_texture_mode == YUV_HAS_ALPHA_TEXTURE) { - a_plane_lock.reset(new cc::ResourceProvider::ScopedSamplerGL( + a_plane_lock.reset(new cc::DisplayResourceProvider::ScopedSamplerGL( resource_provider_, quad->a_plane_resource_id(), GL_TEXTURE4, GL_LINEAR)); DCHECK_EQ(y_plane_lock.target(), a_plane_lock->target()); @@ -2352,7 +2355,7 @@ SetBlendEnabled(draw_cache_.needs_blending); // Assume the current active textures is 0. - cc::ResourceProvider::ScopedSamplerGL locked_quad( + cc::DisplayResourceProvider::ScopedSamplerGL locked_quad( resource_provider_, draw_cache_.resource_id, draw_cache_.nearest_neighbor ? GL_NEAREST : GL_LINEAR);
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_am.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_am.xtb index 92406ec2..b97457bb 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_am.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_am.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="am"> +<translation id="1555130319947370107">ሰማያዊ</translation> +<translation id="161042844686301425">ውሃ ሰማያዊ</translation> +<translation id="2713444072780614174">ነጭ</translation> +<translation id="3329013043687509092">የቀለም ሙሌት</translation> +<translation id="4115378294792113321">ሮዝ</translation> +<translation id="5901630391730855834">ቢጫ</translation> +<translation id="6017514345406065928">አረንጓዴ</translation> +<translation id="6042308850641462728">ተጨማሪ</translation> +<translation id="6727102863431372879">አዘጋጅ</translation> +<translation id="7535087603100972091">እሴት</translation> +<translation id="7569983096843329377">ጥቁር</translation> +<translation id="7658239707568436148">ይቅር</translation> +<translation id="7942349550061667556">ቀይ</translation> +<translation id="8889402386540077796">ለይ ቀለም</translation> +<translation id="9068849894565669697">ቀለም ይምረጡ</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_ar.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_ar.xtb index 198ea62..014ab4c 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_ar.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_ar.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ar"> +<translation id="1555130319947370107">أزرق</translation> +<translation id="161042844686301425">سماوي</translation> +<translation id="2713444072780614174">أبيض</translation> +<translation id="3329013043687509092">تشبع اللون</translation> +<translation id="4115378294792113321">أرجواني</translation> +<translation id="5901630391730855834">أصفر</translation> +<translation id="6017514345406065928">أخضر</translation> +<translation id="6042308850641462728">المزيد</translation> +<translation id="6727102863431372879">تعيين</translation> +<translation id="7535087603100972091">القيمة</translation> +<translation id="7569983096843329377">أسود</translation> +<translation id="7658239707568436148">إلغاء</translation> +<translation id="7942349550061667556">أحمر</translation> +<translation id="8889402386540077796">تدرج اللون</translation> +<translation id="9068849894565669697">اختيار اللون</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_bg.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_bg.xtb index 6681995..66a42e7 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_bg.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_bg.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="bg"> +<translation id="1555130319947370107">синьо</translation> +<translation id="161042844686301425">синьозелено</translation> +<translation id="2713444072780614174">бяло</translation> +<translation id="3329013043687509092">Насищане</translation> +<translation id="4115378294792113321">пурпурно</translation> +<translation id="5901630391730855834">жълто</translation> +<translation id="6017514345406065928">зелено</translation> +<translation id="6042308850641462728">Още</translation> +<translation id="6727102863431372879">Задаване</translation> +<translation id="7535087603100972091">Стойност</translation> +<translation id="7569983096843329377">черно</translation> +<translation id="7658239707568436148">Отказ</translation> +<translation id="7942349550061667556">червено</translation> +<translation id="8889402386540077796">Цветови тон</translation> +<translation id="9068849894565669697">Избор на цвят</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_ca.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_ca.xtb index 71cdd772..dce1297b 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_ca.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_ca.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ca"> +<translation id="1555130319947370107">Blau</translation> +<translation id="161042844686301425">Cian</translation> +<translation id="2713444072780614174">Blanc</translation> +<translation id="3329013043687509092">Saturació</translation> +<translation id="4115378294792113321">Magenta</translation> +<translation id="5901630391730855834">Groc</translation> +<translation id="6017514345406065928">Verd</translation> +<translation id="6042308850641462728">Més</translation> +<translation id="6727102863431372879">Configura</translation> +<translation id="7535087603100972091">Valor</translation> +<translation id="7569983096843329377">Negre</translation> +<translation id="7658239707568436148">Cancel·la</translation> +<translation id="7942349550061667556">Vermell</translation> +<translation id="8889402386540077796">To</translation> +<translation id="9068849894565669697">Selecció de color</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_cs.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_cs.xtb index dc153a85..1b8d838 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_cs.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_cs.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="cs"> +<translation id="1555130319947370107">Modrá</translation> +<translation id="161042844686301425">Azurová</translation> +<translation id="2713444072780614174">Bílá</translation> +<translation id="3329013043687509092">Sytost</translation> +<translation id="4115378294792113321">Purpurová</translation> +<translation id="5901630391730855834">Žlutá</translation> +<translation id="6017514345406065928">Zelená</translation> +<translation id="6042308850641462728">Více</translation> +<translation id="6727102863431372879">Nastavit</translation> +<translation id="7535087603100972091">Hodnota</translation> +<translation id="7569983096843329377">Černá</translation> +<translation id="7658239707568436148">Zrušit</translation> +<translation id="7942349550061667556">Červená</translation> +<translation id="8889402386540077796">Odstín</translation> +<translation id="9068849894565669697">Výběr barvy</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_da.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_da.xtb index 1256832..1e8dad8 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_da.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_da.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="da"> +<translation id="1555130319947370107">Blå</translation> +<translation id="161042844686301425">Cyan</translation> +<translation id="2713444072780614174">Hvid</translation> +<translation id="3329013043687509092">Mætning</translation> +<translation id="4115378294792113321">Magenta</translation> +<translation id="5901630391730855834">Gul</translation> +<translation id="6017514345406065928">Grøn</translation> +<translation id="6042308850641462728">Mere</translation> +<translation id="6727102863431372879">Angiv</translation> +<translation id="7535087603100972091">Værdi</translation> +<translation id="7569983096843329377">Sort</translation> +<translation id="7658239707568436148">Annuller</translation> +<translation id="7942349550061667556">Rød</translation> +<translation id="8889402386540077796">Farvetone</translation> +<translation id="9068849894565669697">Vælg farve</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_de.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_de.xtb index 43dd909..c8a6c55 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_de.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_de.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="de"> +<translation id="1555130319947370107">Blau</translation> +<translation id="161042844686301425">Cyan</translation> +<translation id="2713444072780614174">Weiß</translation> +<translation id="3329013043687509092">Sättigung</translation> +<translation id="4115378294792113321">Magenta</translation> +<translation id="5901630391730855834">Gelb</translation> +<translation id="6017514345406065928">Grün</translation> +<translation id="6042308850641462728">Mehr</translation> +<translation id="6727102863431372879">Festlegen</translation> +<translation id="7535087603100972091">Wert</translation> +<translation id="7569983096843329377">Schwarz</translation> +<translation id="7658239707568436148">Abbrechen</translation> +<translation id="7942349550061667556">Rot</translation> +<translation id="8889402386540077796">Farbton</translation> +<translation id="9068849894565669697">Farbe auswählen</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_el.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_el.xtb index 1b096642..46782d2 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_el.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_el.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="el"> +<translation id="1555130319947370107">Μπλε</translation> +<translation id="161042844686301425">Κυανό</translation> +<translation id="2713444072780614174">Λευκό</translation> +<translation id="3329013043687509092">Κορεσμός</translation> +<translation id="4115378294792113321">Ματζέντα</translation> +<translation id="5901630391730855834">Κίτρινο</translation> +<translation id="6017514345406065928">Πράσινο</translation> +<translation id="6042308850641462728">Περισσότερα</translation> +<translation id="6727102863431372879">Ορισμός</translation> +<translation id="7535087603100972091">Τιμή</translation> +<translation id="7569983096843329377">Μαύρο</translation> +<translation id="7658239707568436148">Ακύρωση</translation> +<translation id="7942349550061667556">Κόκκινο</translation> +<translation id="8889402386540077796">Απόχρωση</translation> +<translation id="9068849894565669697">Επιλογή χρώματος</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_en-GB.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_en-GB.xtb index 12c3fa00..d6ec75b4 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_en-GB.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_en-GB.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="en-GB"> +<translation id="1555130319947370107">Blue</translation> +<translation id="161042844686301425">Cyan</translation> +<translation id="2713444072780614174">White</translation> +<translation id="3329013043687509092">Saturation</translation> +<translation id="4115378294792113321">Magenta</translation> +<translation id="5901630391730855834">Yellow</translation> +<translation id="6017514345406065928">Green</translation> +<translation id="6042308850641462728">More</translation> +<translation id="6727102863431372879">Set</translation> +<translation id="7535087603100972091">Value</translation> +<translation id="7569983096843329377">Black</translation> +<translation id="7658239707568436148">Cancel</translation> +<translation id="7942349550061667556">Red</translation> +<translation id="8889402386540077796">Hue</translation> +<translation id="9068849894565669697">Select colour</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_es-419.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_es-419.xtb index b652ed0..77c8804 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_es-419.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_es-419.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="es-419"> +<translation id="1555130319947370107">Azul</translation> +<translation id="161042844686301425">Cian</translation> +<translation id="2713444072780614174">Blanco</translation> +<translation id="3329013043687509092">Saturación</translation> +<translation id="4115378294792113321">Magenta</translation> +<translation id="5901630391730855834">Amarillo</translation> +<translation id="6017514345406065928">Verde</translation> +<translation id="6042308850641462728">Más</translation> +<translation id="6727102863431372879">Establecer</translation> +<translation id="7535087603100972091">Valor</translation> +<translation id="7569983096843329377">Negro</translation> +<translation id="7658239707568436148">Cancelar</translation> +<translation id="7942349550061667556">Rojo</translation> +<translation id="8889402386540077796">Tono</translation> +<translation id="9068849894565669697">Seleccionar color</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_es.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_es.xtb index 4d4f400..d5f44cb 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_es.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_es.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="es"> +<translation id="1555130319947370107">Azul</translation> +<translation id="161042844686301425">Cian</translation> +<translation id="2713444072780614174">Blanco</translation> +<translation id="3329013043687509092">Saturación</translation> +<translation id="4115378294792113321">Magenta</translation> +<translation id="5901630391730855834">Amarillo</translation> +<translation id="6017514345406065928">Verde</translation> +<translation id="6042308850641462728">Más</translation> +<translation id="6727102863431372879">Establecer</translation> +<translation id="7535087603100972091">Valor</translation> +<translation id="7569983096843329377">Negro</translation> +<translation id="7658239707568436148">Cancelar</translation> +<translation id="7942349550061667556">Rojo</translation> +<translation id="8889402386540077796">Matiz</translation> +<translation id="9068849894565669697">Seleccionar color</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_fa.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_fa.xtb index 4cff15d..3748341 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_fa.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_fa.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="fa"> +<translation id="1555130319947370107">آبی</translation> +<translation id="161042844686301425">فیروزهای</translation> +<translation id="2713444072780614174">سفید</translation> +<translation id="3329013043687509092">اشباع رنگ</translation> +<translation id="4115378294792113321">سرخابی</translation> +<translation id="5901630391730855834">زرد</translation> +<translation id="6017514345406065928">سبز</translation> +<translation id="6042308850641462728">بیشتر</translation> +<translation id="6727102863431372879">تنظیم</translation> +<translation id="7535087603100972091">مقدار</translation> +<translation id="7569983096843329377">سیاه</translation> +<translation id="7658239707568436148">لغو</translation> +<translation id="7942349550061667556">قرمز</translation> +<translation id="8889402386540077796">رنگمایه</translation> +<translation id="9068849894565669697">انتخاب رنگ</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_fi.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_fi.xtb index 60ba9aa..6c0fff9 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_fi.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_fi.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="fi"> +<translation id="1555130319947370107">Sininen</translation> +<translation id="161042844686301425">Turkoosi</translation> +<translation id="2713444072780614174">Valkoinen</translation> +<translation id="3329013043687509092">Värikylläisyys</translation> +<translation id="4115378294792113321">Purppura</translation> +<translation id="5901630391730855834">Keltainen</translation> +<translation id="6017514345406065928">Vihreä</translation> +<translation id="6042308850641462728">Lisää</translation> +<translation id="6727102863431372879">Aseta</translation> +<translation id="7535087603100972091">Arvo</translation> +<translation id="7569983096843329377">Musta</translation> +<translation id="7658239707568436148">Peruuta</translation> +<translation id="7942349550061667556">Punainen</translation> +<translation id="8889402386540077796">Sävy</translation> +<translation id="9068849894565669697">Valitse väri</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_fil.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_fil.xtb index 8f6a880..38fd3acb 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_fil.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_fil.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="fil"> +<translation id="1555130319947370107">Asul</translation> +<translation id="161042844686301425">Cyan</translation> +<translation id="2713444072780614174">Puti</translation> +<translation id="3329013043687509092">Saturation</translation> +<translation id="4115378294792113321">Magenta</translation> +<translation id="5901630391730855834">Dilaw</translation> +<translation id="6017514345406065928">Berde</translation> +<translation id="6042308850641462728">Higit pa</translation> +<translation id="6727102863431372879">Itakda</translation> +<translation id="7535087603100972091">Value</translation> +<translation id="7569983096843329377">Itim</translation> +<translation id="7658239707568436148">Ikansela</translation> +<translation id="7942349550061667556">Pula</translation> +<translation id="8889402386540077796">Hue</translation> +<translation id="9068849894565669697">Pumili ng kulay</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_fr.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_fr.xtb index bf48975a..79702bf 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_fr.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_fr.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="fr"> +<translation id="1555130319947370107">Bleu</translation> +<translation id="161042844686301425">Cyan</translation> +<translation id="2713444072780614174">Blanc</translation> +<translation id="3329013043687509092">Saturation</translation> +<translation id="4115378294792113321">Magenta</translation> +<translation id="5901630391730855834">Jaune</translation> +<translation id="6017514345406065928">Vert</translation> +<translation id="6042308850641462728">Plus</translation> +<translation id="6727102863431372879">Définir</translation> +<translation id="7535087603100972091">Valeur</translation> +<translation id="7569983096843329377">Noir</translation> +<translation id="7658239707568436148">Annuler</translation> +<translation id="7942349550061667556">Rouge</translation> +<translation id="8889402386540077796">Teinte</translation> +<translation id="9068849894565669697">Sélectionner couleur</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_hi.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_hi.xtb index 279503cd..d3d4cc7 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_hi.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_hi.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="hi"> +<translation id="1555130319947370107">नीला</translation> +<translation id="161042844686301425">स्यान</translation> +<translation id="2713444072780614174">सफ़ेद</translation> +<translation id="3329013043687509092">संतृप्तता</translation> +<translation id="4115378294792113321">मैजेंटा</translation> +<translation id="5901630391730855834">पीला</translation> +<translation id="6017514345406065928">हरा</translation> +<translation id="6042308850641462728">अधिक</translation> +<translation id="6727102863431372879">सेट करें</translation> +<translation id="7535087603100972091">मान</translation> +<translation id="7569983096843329377">काला</translation> +<translation id="7658239707568436148">अभी नहीं</translation> +<translation id="7942349550061667556">लाल</translation> +<translation id="8889402386540077796">रंग</translation> +<translation id="9068849894565669697">रंग चुनें</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_hr.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_hr.xtb index 9ec62af..724d1ec 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_hr.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_hr.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="hr"> +<translation id="1555130319947370107">Plava</translation> +<translation id="161042844686301425">Cijan</translation> +<translation id="2713444072780614174">Bijela</translation> +<translation id="3329013043687509092">Zasićenje</translation> +<translation id="4115378294792113321">Magenta</translation> +<translation id="5901630391730855834">Žuta</translation> +<translation id="6017514345406065928">Zelena</translation> +<translation id="6042308850641462728">Više</translation> +<translation id="6727102863431372879">Postavi</translation> +<translation id="7535087603100972091">Vrijednost</translation> +<translation id="7569983096843329377">Crna</translation> +<translation id="7658239707568436148">Odustani</translation> +<translation id="7942349550061667556">Crvena</translation> +<translation id="8889402386540077796">Ton</translation> +<translation id="9068849894565669697">Odaberite boju</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_hu.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_hu.xtb index bdc02eeac..a572e731 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_hu.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_hu.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="hu"> +<translation id="1555130319947370107">Kék</translation> +<translation id="161042844686301425">Cián</translation> +<translation id="2713444072780614174">Fehér</translation> +<translation id="3329013043687509092">Telítettség</translation> +<translation id="4115378294792113321">Magenta</translation> +<translation id="5901630391730855834">Sárga</translation> +<translation id="6017514345406065928">Zöld</translation> +<translation id="6042308850641462728">Hosszabban</translation> +<translation id="6727102863431372879">Beállítás</translation> +<translation id="7535087603100972091">Érték</translation> +<translation id="7569983096843329377">Fekete</translation> +<translation id="7658239707568436148">Mégse</translation> +<translation id="7942349550061667556">Piros</translation> +<translation id="8889402386540077796">Színárnyalat</translation> +<translation id="9068849894565669697">Szín kiválasztása</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_id.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_id.xtb index 5f2882d0..b476691 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_id.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_id.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="id"> +<translation id="1555130319947370107">Biru</translation> +<translation id="161042844686301425">Sian</translation> +<translation id="2713444072780614174">Putih</translation> +<translation id="3329013043687509092">Saturasi</translation> +<translation id="4115378294792113321">Magenta</translation> +<translation id="5901630391730855834">Kuning</translation> +<translation id="6017514345406065928">Hijau</translation> +<translation id="6042308850641462728">Lainnya</translation> +<translation id="6727102863431372879">Setel</translation> +<translation id="7535087603100972091">Nilai</translation> +<translation id="7569983096843329377">Hitam</translation> +<translation id="7658239707568436148">Batal</translation> +<translation id="7942349550061667556">Merah</translation> +<translation id="8889402386540077796">Rona</translation> +<translation id="9068849894565669697">Pilih warna</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_it.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_it.xtb index e7df702..26d68d1 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_it.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_it.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="it"> +<translation id="1555130319947370107">Blu</translation> +<translation id="161042844686301425">Ciano</translation> +<translation id="2713444072780614174">Bianco</translation> +<translation id="3329013043687509092">Saturazione</translation> +<translation id="4115378294792113321">Magenta</translation> +<translation id="5901630391730855834">Giallo</translation> +<translation id="6017514345406065928">Verde</translation> +<translation id="6042308850641462728">Più</translation> +<translation id="6727102863431372879">Imposta</translation> +<translation id="7535087603100972091">Valore</translation> +<translation id="7569983096843329377">Nero</translation> +<translation id="7658239707568436148">Annulla</translation> +<translation id="7942349550061667556">Rosso</translation> +<translation id="8889402386540077796">Tonalità</translation> +<translation id="9068849894565669697">Seleziona colore</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_iw.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_iw.xtb index a29d4ad..c9c1c2e 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_iw.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_iw.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="iw"> +<translation id="1555130319947370107">כחול</translation> +<translation id="161042844686301425">ציאן</translation> +<translation id="2713444072780614174">לבן</translation> +<translation id="3329013043687509092">רווייה</translation> +<translation id="4115378294792113321">מגנטה</translation> +<translation id="5901630391730855834">צהוב</translation> +<translation id="6017514345406065928">ירוק</translation> +<translation id="6042308850641462728">עוד</translation> +<translation id="6727102863431372879">הגדר</translation> +<translation id="7535087603100972091">ערך</translation> +<translation id="7569983096843329377">שחור</translation> +<translation id="7658239707568436148">ביטול</translation> +<translation id="7942349550061667556">אדום</translation> +<translation id="8889402386540077796">גוון</translation> +<translation id="9068849894565669697">בחירת צבע</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_ja.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_ja.xtb index d8a3543..2c5bdc0 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_ja.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_ja.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ja"> +<translation id="1555130319947370107">青</translation> +<translation id="161042844686301425">シアン</translation> +<translation id="2713444072780614174">白</translation> +<translation id="3329013043687509092">彩度</translation> +<translation id="4115378294792113321">マゼンタ</translation> +<translation id="5901630391730855834">黄</translation> +<translation id="6017514345406065928">緑</translation> +<translation id="6042308850641462728">もっと見る</translation> +<translation id="6727102863431372879">設定</translation> +<translation id="7535087603100972091">値</translation> +<translation id="7569983096843329377">黒</translation> +<translation id="7658239707568436148">キャンセル</translation> +<translation id="7942349550061667556">赤</translation> +<translation id="8889402386540077796">色調</translation> +<translation id="9068849894565669697">色の選択</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_ko.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_ko.xtb index 558b05b..6970fc9d 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_ko.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_ko.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ko"> +<translation id="1555130319947370107">파란색</translation> +<translation id="161042844686301425">청록색</translation> +<translation id="2713444072780614174">흰색</translation> +<translation id="3329013043687509092">채도</translation> +<translation id="4115378294792113321">자홍색</translation> +<translation id="5901630391730855834">노란색</translation> +<translation id="6017514345406065928">녹색</translation> +<translation id="6042308850641462728">더보기</translation> +<translation id="6727102863431372879">설정</translation> +<translation id="7535087603100972091">값</translation> +<translation id="7569983096843329377">검정색</translation> +<translation id="7658239707568436148">취소</translation> +<translation id="7942349550061667556">빨간색</translation> +<translation id="8889402386540077796">색조</translation> +<translation id="9068849894565669697">색상 선택</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_lt.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_lt.xtb index f20c0fa2..4f2e4d1 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_lt.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_lt.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="lt"> +<translation id="1555130319947370107">Mėlyna</translation> +<translation id="161042844686301425">Žydra</translation> +<translation id="2713444072780614174">Balta</translation> +<translation id="3329013043687509092">Spalvų sodrumas</translation> +<translation id="4115378294792113321">Purpurinė</translation> +<translation id="5901630391730855834">Geltona</translation> +<translation id="6017514345406065928">Žalia</translation> +<translation id="6042308850641462728">Daugiau</translation> +<translation id="6727102863431372879">Nustatyti</translation> +<translation id="7535087603100972091">Reikšmė</translation> +<translation id="7569983096843329377">Juoda</translation> +<translation id="7658239707568436148">Atšaukti</translation> +<translation id="7942349550061667556">Raudona</translation> +<translation id="8889402386540077796">Spalva</translation> +<translation id="9068849894565669697">Pasirinkite spalvą</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_lv.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_lv.xtb index 6f3afbc..aa5d59c 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_lv.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_lv.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="lv"> +<translation id="1555130319947370107">Zila</translation> +<translation id="161042844686301425">Ciānzila</translation> +<translation id="2713444072780614174">Balta</translation> +<translation id="3329013043687509092">Piesātinājums</translation> +<translation id="4115378294792113321">Fuksīnsarkana</translation> +<translation id="5901630391730855834">Dzeltena</translation> +<translation id="6017514345406065928">Zaļa</translation> +<translation id="6042308850641462728">Vairāk</translation> +<translation id="6727102863431372879">Iestatīt</translation> +<translation id="7535087603100972091">Vērtība</translation> +<translation id="7569983096843329377">Melna</translation> +<translation id="7658239707568436148">Atcelt</translation> +<translation id="7942349550061667556">Sarkana</translation> +<translation id="8889402386540077796">Nokrāsa</translation> +<translation id="9068849894565669697">Krāsas izvēle</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_nl.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_nl.xtb index 05ab957..dbc50fd 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_nl.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_nl.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="nl"> +<translation id="1555130319947370107">Blauw</translation> +<translation id="161042844686301425">Cyaan</translation> +<translation id="2713444072780614174">Wit</translation> +<translation id="3329013043687509092">Verzadiging</translation> +<translation id="4115378294792113321">Magenta</translation> +<translation id="5901630391730855834">Geel</translation> +<translation id="6017514345406065928">Groen</translation> +<translation id="6042308850641462728">Meer</translation> +<translation id="6727102863431372879">Instellen</translation> +<translation id="7535087603100972091">Waarde</translation> +<translation id="7569983096843329377">Zwart</translation> +<translation id="7658239707568436148">Annuleren</translation> +<translation id="7942349550061667556">Rood</translation> +<translation id="8889402386540077796">Kleurtoon</translation> +<translation id="9068849894565669697">Kleur selecteren</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_no.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_no.xtb index ede4de30..abb6d31 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_no.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_no.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="no"> +<translation id="1555130319947370107">Blå</translation> +<translation id="161042844686301425">Cyan</translation> +<translation id="2713444072780614174">Hvit</translation> +<translation id="3329013043687509092">Metning</translation> +<translation id="4115378294792113321">Magenta</translation> +<translation id="5901630391730855834">Gul</translation> +<translation id="6017514345406065928">Grønn</translation> +<translation id="6042308850641462728">Mer</translation> +<translation id="6727102863431372879">Angi</translation> +<translation id="7535087603100972091">Verdi</translation> +<translation id="7569983096843329377">Svart</translation> +<translation id="7658239707568436148">Avbryt</translation> +<translation id="7942349550061667556">Rød</translation> +<translation id="8889402386540077796">Fargetone</translation> +<translation id="9068849894565669697">Velg farge</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_pl.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_pl.xtb index 1bf17bd5..75dfdd6 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_pl.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_pl.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="pl"> +<translation id="1555130319947370107">Niebieski</translation> +<translation id="161042844686301425">Cyjan</translation> +<translation id="2713444072780614174">Biały</translation> +<translation id="3329013043687509092">Nasycenie</translation> +<translation id="4115378294792113321">Magenta</translation> +<translation id="5901630391730855834">Żółty</translation> +<translation id="6017514345406065928">Zielony</translation> +<translation id="6042308850641462728">Więcej</translation> +<translation id="6727102863431372879">Ustaw</translation> +<translation id="7535087603100972091">Wartość</translation> +<translation id="7569983096843329377">Czarny</translation> +<translation id="7658239707568436148">Anuluj</translation> +<translation id="7942349550061667556">Czerwony</translation> +<translation id="8889402386540077796">Odcień</translation> +<translation id="9068849894565669697">Wybierz kolor</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_pt-BR.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_pt-BR.xtb index de39dfa..7eab6e0b 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_pt-BR.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_pt-BR.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="pt-BR"> +<translation id="1555130319947370107">Azul</translation> +<translation id="161042844686301425">Ciano</translation> +<translation id="2713444072780614174">Branco</translation> +<translation id="3329013043687509092">Saturação</translation> +<translation id="4115378294792113321">Magenta</translation> +<translation id="5901630391730855834">Amarelo</translation> +<translation id="6017514345406065928">Verde</translation> +<translation id="6042308850641462728">Mais</translation> +<translation id="6727102863431372879">Definir</translation> +<translation id="7535087603100972091">Valor</translation> +<translation id="7569983096843329377">Preto</translation> +<translation id="7658239707568436148">Cancelar</translation> +<translation id="7942349550061667556">Vermelho</translation> +<translation id="8889402386540077796">Matiz</translation> +<translation id="9068849894565669697">Selecionar cor</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_pt-PT.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_pt-PT.xtb index 0b98ee77..d86e46d1 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_pt-PT.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_pt-PT.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="pt-PT"> +<translation id="1555130319947370107">Azul</translation> +<translation id="161042844686301425">Turquesa</translation> +<translation id="2713444072780614174">Branco</translation> +<translation id="3329013043687509092">Saturação</translation> +<translation id="4115378294792113321">Magenta</translation> +<translation id="5901630391730855834">Amarelo</translation> +<translation id="6017514345406065928">Verde</translation> +<translation id="6042308850641462728">Mais</translation> +<translation id="6727102863431372879">Definir</translation> +<translation id="7535087603100972091">Valor</translation> +<translation id="7569983096843329377">Preto</translation> +<translation id="7658239707568436148">Cancelar</translation> +<translation id="7942349550061667556">Vermelho</translation> +<translation id="8889402386540077796">Tonalidade</translation> +<translation id="9068849894565669697">Selecionar cor</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_ro.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_ro.xtb index 7129eb4..b3a135a 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_ro.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_ro.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ro"> +<translation id="1555130319947370107">Albastru</translation> +<translation id="161042844686301425">Cyan</translation> +<translation id="2713444072780614174">Alb</translation> +<translation id="3329013043687509092">Saturație</translation> +<translation id="4115378294792113321">Magenta</translation> +<translation id="5901630391730855834">Galben</translation> +<translation id="6017514345406065928">Verde</translation> +<translation id="6042308850641462728">Mai multe</translation> +<translation id="6727102863431372879">Setează</translation> +<translation id="7535087603100972091">Valoare</translation> +<translation id="7569983096843329377">Negru</translation> +<translation id="7658239707568436148">Anulează</translation> +<translation id="7942349550061667556">Roșu</translation> +<translation id="8889402386540077796">Nuanță</translation> +<translation id="9068849894565669697">Selectați culoarea</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_ru.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_ru.xtb index 6dfaa442..d93955e 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_ru.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_ru.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ru"> +<translation id="1555130319947370107">Синий</translation> +<translation id="161042844686301425">Голубой</translation> +<translation id="2713444072780614174">Белый</translation> +<translation id="3329013043687509092">Насыщенность</translation> +<translation id="4115378294792113321">Пурпурный</translation> +<translation id="5901630391730855834">Желтый</translation> +<translation id="6017514345406065928">Зеленый</translation> +<translation id="6042308850641462728">Подробнее...</translation> +<translation id="6727102863431372879">Установить</translation> +<translation id="7535087603100972091">Значение</translation> +<translation id="7569983096843329377">Черный</translation> +<translation id="7658239707568436148">Отмена</translation> +<translation id="7942349550061667556">Красный</translation> +<translation id="8889402386540077796">Тон</translation> +<translation id="9068849894565669697">Выберите цвет</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_sk.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_sk.xtb index 202e515a..f8b1a859 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_sk.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_sk.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="sk"> +<translation id="1555130319947370107">Modrá</translation> +<translation id="161042844686301425">Azúrová</translation> +<translation id="2713444072780614174">Biela</translation> +<translation id="3329013043687509092">Sýtosť</translation> +<translation id="4115378294792113321">Purpurová</translation> +<translation id="5901630391730855834">Žltá</translation> +<translation id="6017514345406065928">Zelená</translation> +<translation id="6042308850641462728">Viac</translation> +<translation id="6727102863431372879">Nastaviť</translation> +<translation id="7535087603100972091">Hodnota</translation> +<translation id="7569983096843329377">Čierna</translation> +<translation id="7658239707568436148">Zrušiť</translation> +<translation id="7942349550061667556">Červená</translation> +<translation id="8889402386540077796">Odtieň</translation> +<translation id="9068849894565669697">Výber farby</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_sl.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_sl.xtb index 31b5a1a..16b97e7 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_sl.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_sl.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="sl"> +<translation id="1555130319947370107">Modra</translation> +<translation id="161042844686301425">Cianova</translation> +<translation id="2713444072780614174">Bela</translation> +<translation id="3329013043687509092">Nasičenost</translation> +<translation id="4115378294792113321">Škrlatna</translation> +<translation id="5901630391730855834">Rumena</translation> +<translation id="6017514345406065928">Zelena</translation> +<translation id="6042308850641462728">Več</translation> +<translation id="6727102863431372879">Nastavi</translation> +<translation id="7535087603100972091">Vrednost</translation> +<translation id="7569983096843329377">Črna</translation> +<translation id="7658239707568436148">Prekliči</translation> +<translation id="7942349550061667556">Rdeča</translation> +<translation id="8889402386540077796">Odtenek</translation> +<translation id="9068849894565669697">Izbira barve</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_sr.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_sr.xtb index 984d7192..b1b1b6e8 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_sr.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_sr.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="sr"> +<translation id="1555130319947370107">Плава</translation> +<translation id="161042844686301425">Плавозелена</translation> +<translation id="2713444072780614174">Бела</translation> +<translation id="3329013043687509092">Засићеност боја</translation> +<translation id="4115378294792113321">Циклама</translation> +<translation id="5901630391730855834">Жута</translation> +<translation id="6017514345406065928">Зелена</translation> +<translation id="6042308850641462728">Више</translation> +<translation id="6727102863431372879">Постави</translation> +<translation id="7535087603100972091">Вредност</translation> +<translation id="7569983096843329377">Црна</translation> +<translation id="7658239707568436148">Откажи</translation> +<translation id="7942349550061667556">Црвена</translation> +<translation id="8889402386540077796">Нијанса</translation> +<translation id="9068849894565669697">Изаберите боју</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_sv.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_sv.xtb index 9a787b8..d82147b 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_sv.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_sv.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="sv"> +<translation id="1555130319947370107">Blå</translation> +<translation id="161042844686301425">Cyanblå</translation> +<translation id="2713444072780614174">Vit</translation> +<translation id="3329013043687509092">Mättnad</translation> +<translation id="4115378294792113321">Magenta</translation> +<translation id="5901630391730855834">Gul</translation> +<translation id="6017514345406065928">Grön</translation> +<translation id="6042308850641462728">Mer</translation> +<translation id="6727102863431372879">Ange</translation> +<translation id="7535087603100972091">Värde</translation> +<translation id="7569983096843329377">Svart</translation> +<translation id="7658239707568436148">Avbryt</translation> +<translation id="7942349550061667556">Röd</translation> +<translation id="8889402386540077796">Nyans</translation> +<translation id="9068849894565669697">Välj färg</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_sw.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_sw.xtb index 9aa61cb..ebea446 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_sw.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_sw.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="sw"> +<translation id="1555130319947370107">Samawati</translation> +<translation id="161042844686301425">Samawati-Kijani</translation> +<translation id="2713444072780614174">Nyeupe</translation> +<translation id="3329013043687509092">Kukolea</translation> +<translation id="4115378294792113321">Rangi ya damu ya mzee</translation> +<translation id="5901630391730855834">Manjano</translation> +<translation id="6017514345406065928">Kijani</translation> +<translation id="6042308850641462728">Zaidi</translation> +<translation id="6727102863431372879">Weka</translation> +<translation id="7535087603100972091">Thamani</translation> +<translation id="7569983096843329377">Nyeusi</translation> +<translation id="7658239707568436148">Ghairi</translation> +<translation id="7942349550061667556">Nyekundu</translation> +<translation id="8889402386540077796">Rangi</translation> +<translation id="9068849894565669697">Chagua rangi</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_th.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_th.xtb index dbe6a601..44f904b 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_th.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_th.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="th"> +<translation id="1555130319947370107">สีน้ำเงิน</translation> +<translation id="161042844686301425">สีฟ้า</translation> +<translation id="2713444072780614174">สีขาว</translation> +<translation id="3329013043687509092">ความอิ่มตัวของสี</translation> +<translation id="4115378294792113321">สีม่วงแดง</translation> +<translation id="5901630391730855834">สีเหลือง</translation> +<translation id="6017514345406065928">สีเขียว</translation> +<translation id="6042308850641462728">เพิ่มเติม</translation> +<translation id="6727102863431372879">ตั้งค่า</translation> +<translation id="7535087603100972091">ราคา</translation> +<translation id="7569983096843329377">สีดำ</translation> +<translation id="7658239707568436148">ยกเลิก</translation> +<translation id="7942349550061667556">สีแดง</translation> +<translation id="8889402386540077796">โทนสี</translation> +<translation id="9068849894565669697">เลือกสี</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_tr.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_tr.xtb index d99480c0..8207ecb0 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_tr.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_tr.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="tr"> +<translation id="1555130319947370107">Mavi</translation> +<translation id="161042844686301425">Camgöbeği</translation> +<translation id="2713444072780614174">Beyaz</translation> +<translation id="3329013043687509092">Doygunluk</translation> +<translation id="4115378294792113321">Macenta</translation> +<translation id="5901630391730855834">Sarı</translation> +<translation id="6017514345406065928">Yeşil</translation> +<translation id="6042308850641462728">Daha fazla</translation> +<translation id="6727102863431372879">Ayarla</translation> +<translation id="7535087603100972091">Değer</translation> +<translation id="7569983096843329377">Siyah</translation> +<translation id="7658239707568436148">İptal</translation> +<translation id="7942349550061667556">Kırmızı</translation> +<translation id="8889402386540077796">Ton</translation> +<translation id="9068849894565669697">Renk seçin</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_uk.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_uk.xtb index 6e80099d..14d5e75 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_uk.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_uk.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="uk"> +<translation id="1555130319947370107">Синій</translation> +<translation id="161042844686301425">Бірюзовий</translation> +<translation id="2713444072780614174">Білий</translation> +<translation id="3329013043687509092">Насиченість</translation> +<translation id="4115378294792113321">Пурпурний</translation> +<translation id="5901630391730855834">Жовтий</translation> +<translation id="6017514345406065928">Зелений</translation> +<translation id="6042308850641462728">Більше</translation> +<translation id="6727102863431372879">Встановити</translation> +<translation id="7535087603100972091">Яскравість</translation> +<translation id="7569983096843329377">Чорний</translation> +<translation id="7658239707568436148">Скасувати</translation> +<translation id="7942349550061667556">Червоний</translation> +<translation id="8889402386540077796">Тон</translation> +<translation id="9068849894565669697">Вибрати колір</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_vi.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_vi.xtb index 8a42ab1..1089abef 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_vi.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_vi.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="vi"> +<translation id="1555130319947370107">Xanh lam</translation> +<translation id="161042844686301425">Lục lam</translation> +<translation id="2713444072780614174">Trắng</translation> +<translation id="3329013043687509092">Độ bão hòa</translation> +<translation id="4115378294792113321">Đỏ thẫm</translation> +<translation id="5901630391730855834">Vàng</translation> +<translation id="6017514345406065928">Xanh lục</translation> +<translation id="6042308850641462728">Thêm</translation> +<translation id="6727102863431372879">Đặt</translation> +<translation id="7535087603100972091">Giá trị</translation> +<translation id="7569983096843329377">Đen</translation> +<translation id="7658239707568436148">Hủy</translation> +<translation id="7942349550061667556">Đỏ</translation> +<translation id="8889402386540077796">Màu sắc</translation> +<translation id="9068849894565669697">Chọn màu</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_zh-CN.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_zh-CN.xtb index c7d76e8..25dd741e 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_zh-CN.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_zh-CN.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="zh-CN"> +<translation id="1555130319947370107">蓝色</translation> +<translation id="161042844686301425">青色</translation> +<translation id="2713444072780614174">白色</translation> +<translation id="3329013043687509092">饱和度</translation> +<translation id="4115378294792113321">洋红色</translation> +<translation id="5901630391730855834">黄色</translation> +<translation id="6017514345406065928">绿色</translation> +<translation id="6042308850641462728">更多</translation> +<translation id="6727102863431372879">设置</translation> +<translation id="7535087603100972091">值</translation> +<translation id="7569983096843329377">黑色</translation> +<translation id="7658239707568436148">取消</translation> +<translation id="7942349550061667556">红色</translation> +<translation id="8889402386540077796">色调</translation> +<translation id="9068849894565669697">选择颜色</translation> </translationbundle> \ No newline at end of file
diff --git a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_zh-TW.xtb b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_zh-TW.xtb index 3e0c306..5527596 100644 --- a/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_zh-TW.xtb +++ b/components/web_contents_delegate_android/java/strings/translations/web_contents_delegate_android_strings_zh-TW.xtb
@@ -1,4 +1,19 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="zh-TW"> +<translation id="1555130319947370107">藍色</translation> +<translation id="161042844686301425">青色</translation> +<translation id="2713444072780614174">白色</translation> +<translation id="3329013043687509092">飽和度</translation> +<translation id="4115378294792113321">洋紅色</translation> +<translation id="5901630391730855834">黃色</translation> +<translation id="6017514345406065928">綠色</translation> +<translation id="6042308850641462728">更多</translation> +<translation id="6727102863431372879">設定</translation> +<translation id="7535087603100972091">值</translation> +<translation id="7569983096843329377">黑色</translation> +<translation id="7658239707568436148">取消</translation> +<translation id="7942349550061667556">紅色</translation> +<translation id="8889402386540077796">色調</translation> +<translation id="9068849894565669697">選取顏色</translation> </translationbundle> \ No newline at end of file
diff --git a/content/app/strings/translations/content_strings_da.xtb b/content/app/strings/translations/content_strings_da.xtb index 8c4313b..ea76167 100644 --- a/content/app/strings/translations/content_strings_da.xtb +++ b/content/app/strings/translations/content_strings_da.xtb
@@ -36,7 +36,7 @@ <translation id="248395913932153421">Dag</translation> <translation id="2507943997699731163">Udfyld dette felt.</translation> <translation id="2508569020611168319">faneliste</translation> -<translation id="2561842179657104141">vis flere mediekontrolelementer</translation> +<translation id="2561842179657104141">vis flere knapper til mediestyring</translation> <translation id="2572483411312390101">afspil</translation> <translation id="2613802280814924224">Angiv en gyldig værdi. Den nærmeste gyldige værdi er <ph name="VALID_VALUE" />.</translation> <translation id="2653659639078652383">Indsend</translation>
diff --git a/content/browser/accessibility/accessibility_tree_formatter_android.cc b/content/browser/accessibility/accessibility_tree_formatter_android.cc index 40bca53..eb7f6fb 100644 --- a/content/browser/accessibility/accessibility_tree_formatter_android.cc +++ b/content/browser/accessibility/accessibility_tree_formatter_android.cc
@@ -48,7 +48,7 @@ }; const char* const STRING_ATTRIBUTES[] = { - "name" + "name", "hint", }; const char* const INT_ATTRIBUTES[] = { @@ -131,6 +131,7 @@ // String attributes. dict->SetString("name", android_node->GetText()); + dict->SetString("hint", android_node->GetHint()); dict->SetString("role_description", android_node->GetRoleDescription()); // Int attributes.
diff --git a/content/browser/accessibility/browser_accessibility_android.cc b/content/browser/accessibility/browser_accessibility_android.cc index bc0e61f..5509626 100644 --- a/content/browser/accessibility/browser_accessibility_android.cc +++ b/content/browser/accessibility/browser_accessibility_android.cc
@@ -379,25 +379,11 @@ return base::string16(); } - // We can only expose one accessible name on Android, - // not 2 or 3 like on Windows or Mac. - // First, always return the |value| attribute if this is an // input field. base::string16 value = GetValue(); - if (!value.empty()) { - if (HasState(ui::AX_STATE_EDITABLE)) - return value; - - switch (GetRole()) { - case ui::AX_ROLE_COMBO_BOX: - case ui::AX_ROLE_POP_UP_BUTTON: - case ui::AX_ROLE_TEXT_FIELD: - return value; - default: - break; - } - } + if (ShouldExposeValueAsName()) + return value; // For color wells, the color is stored in separate attributes. // Perhaps we could return color names in the future? @@ -412,13 +398,6 @@ } base::string16 text = GetString16Attribute(ui::AX_ATTR_NAME); - base::string16 description = GetString16Attribute(ui::AX_ATTR_DESCRIPTION); - if (!description.empty()) { - if (!text.empty()) - text += base::ASCIIToUTF16(" "); - text += description; - } - if (text.empty()) text = value; @@ -448,6 +427,22 @@ return text; } +base::string16 BrowserAccessibilityAndroid::GetHint() const { + base::string16 description = GetString16Attribute(ui::AX_ATTR_DESCRIPTION); + + // If we're returning the value as the main text, then return both the + // accessible name and description as the hint. + if (ShouldExposeValueAsName()) { + base::string16 name = GetString16Attribute(ui::AX_ATTR_NAME); + if (!name.empty() && !description.empty()) + return name + base::ASCIIToUTF16(" ") + description; + else if (!name.empty()) + return name; + } + + return description; +} + base::string16 BrowserAccessibilityAndroid::GetRoleDescription() const { content::ContentClient* content_client = content::GetContentClient(); @@ -1385,6 +1380,26 @@ GetRole() == ui::AX_ROLE_IFRAME_PRESENTATIONAL); } +bool BrowserAccessibilityAndroid::ShouldExposeValueAsName() const { + base::string16 value = GetValue(); + if (value.empty()) + return false; + + if (HasState(ui::AX_STATE_EDITABLE)) + return true; + + switch (GetRole()) { + case ui::AX_ROLE_COMBO_BOX: + case ui::AX_ROLE_POP_UP_BUTTON: + case ui::AX_ROLE_TEXT_FIELD: + return true; + default: + break; + } + + return false; +} + void BrowserAccessibilityAndroid::OnDataChanged() { BrowserAccessibility::OnDataChanged();
diff --git a/content/browser/accessibility/browser_accessibility_android.h b/content/browser/accessibility/browser_accessibility_android.h index 666ad9e..b8f6e56b 100644 --- a/content/browser/accessibility/browser_accessibility_android.h +++ b/content/browser/accessibility/browser_accessibility_android.h
@@ -75,6 +75,7 @@ const char* GetClassName() const; base::string16 GetText() const override; + base::string16 GetHint() const; base::string16 GetRoleDescription() const; @@ -150,6 +151,7 @@ bool HasOnlyTextChildren() const; bool HasOnlyTextAndImageChildren() const; bool IsIframe() const; + bool ShouldExposeValueAsName() const; void NotifyLiveRegionUpdate(base::string16& aria_live);
diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc index e63f0d7..d7ed629 100644 --- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc +++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
@@ -228,6 +228,12 @@ AddFilter(filters, "roleDescription=*"); // + // Android + // + + AddFilter(filters, "hint=*"); + + // // General //
diff --git a/content/browser/accessibility/web_contents_accessibility_android.cc b/content/browser/accessibility/web_contents_accessibility_android.cc index a33a8e0..1c40b9a2 100644 --- a/content/browser/accessibility/web_contents_accessibility_android.cc +++ b/content/browser/accessibility/web_contents_accessibility_android.cc
@@ -699,6 +699,7 @@ Java_WebContentsAccessibility_setAccessibilityNodeInfoKitKatAttributes( env, obj, info, is_root, node->IsEditableText(), base::android::ConvertUTF16ToJavaString(env, node->GetRoleDescription()), + base::android::ConvertUTF16ToJavaString(env, node->GetHint()), node->GetIntAttribute(ui::AX_ATTR_TEXT_SEL_START), node->GetIntAttribute(ui::AX_ATTR_TEXT_SEL_END));
diff --git a/content/browser/android/content_view_core.cc b/content/browser/android/content_view_core.cc index c4f702df..4ec9060 100644 --- a/content/browser/android/content_view_core.cc +++ b/content/browser/android/content_view_core.cc
@@ -234,21 +234,16 @@ JNIEnv* env, const base::android::JavaParamRef<jobject>& obj, jlong window_android) { - ui::ViewAndroid* view = GetViewAndroid(); - ui::WindowAndroid* window = - reinterpret_cast<ui::WindowAndroid*>(window_android); - if (window == GetWindowAndroid()) + auto* window = reinterpret_cast<ui::WindowAndroid*>(window_android); + auto* old_window = GetWindowAndroid(); + if (window == old_window) return; - if (GetWindowAndroid()) { - for (auto& observer : observer_list_) - observer.OnDetachedFromWindow(); + + auto* view = GetViewAndroid(); + if (old_window) view->RemoveFromParent(); - } - if (window) { + if (window) window->AddChild(view); - for (auto& observer : observer_list_) - observer.OnAttachedToWindow(); - } } base::android::ScopedJavaLocalRef<jobject>
diff --git a/content/browser/android/content_view_core_observer.h b/content/browser/android/content_view_core_observer.h index 396618a..aa444aca 100644 --- a/content/browser/android/content_view_core_observer.h +++ b/content/browser/android/content_view_core_observer.h
@@ -7,11 +7,10 @@ namespace content { +// TODO(jinsukkim): Remove this interface. class ContentViewCoreObserver { public: virtual void OnContentViewCoreDestroyed() = 0; - virtual void OnAttachedToWindow() = 0; - virtual void OnDetachedFromWindow() = 0; protected: virtual ~ContentViewCoreObserver() {}
diff --git a/content/browser/android/dialog_overlay_impl.cc b/content/browser/android/dialog_overlay_impl.cc index b6a6368b..72712df4 100644 --- a/content/browser/android/dialog_overlay_impl.cc +++ b/content/browser/android/dialog_overlay_impl.cc
@@ -4,10 +4,11 @@ #include "content/browser/android/dialog_overlay_impl.h" -#include "content/public/browser/web_contents.h" +#include "content/browser/web_contents/web_contents_impl.h" #include "content/public/browser/web_contents_delegate.h" #include "gpu/ipc/common/gpu_surface_tracker.h" #include "jni/DialogOverlayImpl_jni.h" +#include "ui/android/view_android_observer.h" #include "ui/android/window_android.h" using base::android::AttachCurrentThread; @@ -40,28 +41,21 @@ if (web_contents_impl->HasPersistentVideo()) return 0; - ContentViewCore* cvc = ContentViewCore::FromWebContents(web_contents_impl); - - if (!cvc) - return 0; - return reinterpret_cast<jlong>( - new DialogOverlayImpl(obj, rfhi, web_contents_impl, cvc)); + new DialogOverlayImpl(obj, rfhi, web_contents_impl)); } DialogOverlayImpl::DialogOverlayImpl(const JavaParamRef<jobject>& obj, RenderFrameHostImpl* rfhi, - WebContents* web_contents, - ContentViewCore* cvc) - : WebContentsObserver(web_contents), rfhi_(rfhi), cvc_(cvc) { + WebContents* web_contents) + : WebContentsObserver(web_contents), rfhi_(rfhi) { DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK(rfhi_); - DCHECK(cvc_); JNIEnv* env = AttachCurrentThread(); obj_ = JavaObjectWeakGlobalRef(env, obj); - cvc_->AddObserver(this); + web_contents->GetNativeView()->AddObserver(this); // Note that we're not allowed to call back into |obj| before it calls // CompleteInit. However, the observer won't actually call us back until the @@ -87,18 +81,16 @@ // Send the initial token, if there is one. The observer will notify us about // changes only. - if (ui::WindowAndroid* window = cvc_->GetWindowAndroid()) { + if (auto* window = web_contents()->GetNativeView()->GetWindowAndroid()) { ScopedJavaLocalRef<jobject> token = window->GetWindowToken(); if (!token.is_null()) Java_DialogOverlayImpl_onWindowToken(env, obj, token); - // else we will send one if we get a callback from |cvc_|. + // else we will send one if we get a callback from ViewAndroid. } } DialogOverlayImpl::~DialogOverlayImpl() { DCHECK_CURRENTLY_ON(BrowserThread::UI); - // We should only be deleted after one unregisters for token callbacks. - DCHECK(!cvc_); } void DialogOverlayImpl::Stop() { @@ -123,11 +115,8 @@ JNIEnv* env, const base::android::JavaParamRef<jobject>& obj, const base::android::JavaParamRef<jobject>& rect) { - gfx::Point point; - if (cvc_) { - if (ui::ViewAndroid* view = cvc_->GetViewAndroid()) - point = view->GetLocationOfContainerViewOnScreen(); - } + gfx::Point point = + web_contents()->GetNativeView()->GetLocationOfContainerViewOnScreen(); Java_DialogOverlayImpl_receiveCompositorOffset(env, rect, point.x(), point.y()); @@ -135,7 +124,8 @@ void DialogOverlayImpl::UnregisterForTokensIfNeeded() { DCHECK_CURRENTLY_ON(BrowserThread::UI); - if (!cvc_) + + if (!rfhi_) return; // We clear overlay mode here rather than in Destroy(), because we may have @@ -145,15 +135,10 @@ if (delegate) delegate->SetOverlayMode(false); - cvc_->RemoveObserver(this); - cvc_ = nullptr; + web_contents()->GetNativeView()->RemoveObserver(this); rfhi_ = nullptr; } -void DialogOverlayImpl::OnContentViewCoreDestroyed() { - // We will receive a destruction notification via WebContentsDestroyed(). -} - void DialogOverlayImpl::RenderFrameDeleted(RenderFrameHost* render_frame_host) { DCHECK_CURRENTLY_ON(BrowserThread::UI); if (render_frame_host == rfhi_) @@ -189,7 +174,7 @@ ScopedJavaLocalRef<jobject> token; - if (ui::WindowAndroid* window = cvc_->GetWindowAndroid()) + if (auto* window = web_contents()->GetNativeView()->GetWindowAndroid()) token = window->GetWindowToken(); ScopedJavaLocalRef<jobject> obj = obj_.get(env);
diff --git a/content/browser/android/dialog_overlay_impl.h b/content/browser/android/dialog_overlay_impl.h index 51312539..ba8863a 100644 --- a/content/browser/android/dialog_overlay_impl.h +++ b/content/browser/android/dialog_overlay_impl.h
@@ -9,9 +9,9 @@ #include "base/android/jni_weak_ref.h" #include "base/android/scoped_java_ref.h" #include "base/unguessable_token.h" -#include "content/browser/android/content_view_core.h" -#include "content/browser/android/content_view_core_observer.h" +#include "content/browser/frame_host/render_frame_host_impl.h" #include "content/public/browser/web_contents_observer.h" +#include "ui/android/view_android_observer.h" namespace content { @@ -19,15 +19,14 @@ // java side. When the ContentViewCore for the provided token is attached or // detached from a WindowAndroid, we get the Android window token and notify the // java side. -class DialogOverlayImpl : public ContentViewCoreObserver, +class DialogOverlayImpl : public ui::ViewAndroidObserver, public WebContentsObserver { public: // This may not call back into |obj| directly, but must post. This is because // |obj| is still being initialized. DialogOverlayImpl(const base::android::JavaParamRef<jobject>& obj, RenderFrameHostImpl* rfhi, - WebContents* web_contents, - ContentViewCore* cvc); + WebContents* web_contents); ~DialogOverlayImpl() override; // Called when the java side is ready for token / dismissed callbacks. May @@ -45,8 +44,7 @@ const base::android::JavaParamRef<jobject>& obj, const base::android::JavaParamRef<jobject>& rect); - // ContentViewCoreObserver - void OnContentViewCoreDestroyed() override; + // ui::ViewAndroidObserver void OnAttachedToWindow() override; void OnDetachedFromWindow() override; @@ -58,7 +56,7 @@ void RenderFrameHostChanged(RenderFrameHost* old_host, RenderFrameHost* new_host) override; - // Unregister for tokens if we're registered, and clear |cvc_|. + // Unregister for tokens if we're registered. void UnregisterForTokensIfNeeded(); private: @@ -70,9 +68,6 @@ // RenderFrameHostImpl* associated with the given overlay routing token. RenderFrameHostImpl* rfhi_; - - // ContentViewCore instance that we're registered with as an observer. - ContentViewCore* cvc_; }; } // namespace content
diff --git a/content/browser/appcache/appcache_request_handler_unittest.cc b/content/browser/appcache/appcache_request_handler_unittest.cc index a0be2a2..407b501 100644 --- a/content/browser/appcache/appcache_request_handler_unittest.cc +++ b/content/browser/appcache/appcache_request_handler_unittest.cc
@@ -18,6 +18,7 @@ #include "base/macros.h" #include "base/memory/ptr_util.h" #include "base/memory/weak_ptr.h" +#include "base/message_loop/message_loop.h" #include "base/single_thread_task_runner.h" #include "base/strings/stringprintf.h" #include "base/synchronization/waitable_event.h"
diff --git a/content/browser/appcache/appcache_response_unittest.cc b/content/browser/appcache/appcache_response_unittest.cc index b8ee654..d72e2be 100644 --- a/content/browser/appcache/appcache_response_unittest.cc +++ b/content/browser/appcache/appcache_response_unittest.cc
@@ -15,6 +15,7 @@ #include "base/compiler_specific.h" #include "base/location.h" #include "base/macros.h" +#include "base/message_loop/message_loop.h" #include "base/pickle.h" #include "base/single_thread_task_runner.h" #include "base/synchronization/waitable_event.h"
diff --git a/content/browser/appcache/appcache_update_job_unittest.cc b/content/browser/appcache/appcache_update_job_unittest.cc index 482df660..d91219f3 100644 --- a/content/browser/appcache/appcache_update_job_unittest.cc +++ b/content/browser/appcache/appcache_update_job_unittest.cc
@@ -14,6 +14,7 @@ #include "base/location.h" #include "base/macros.h" #include "base/memory/ptr_util.h" +#include "base/message_loop/message_loop.h" #include "base/single_thread_task_runner.h" #include "base/stl_util.h" #include "base/strings/stringprintf.h"
diff --git a/content/browser/appcache/appcache_url_request_job_unittest.cc b/content/browser/appcache/appcache_url_request_job_unittest.cc index 2e278d3d..eb9eea6 100644 --- a/content/browser/appcache/appcache_url_request_job_unittest.cc +++ b/content/browser/appcache/appcache_url_request_job_unittest.cc
@@ -19,6 +19,7 @@ #include "base/logging.h" #include "base/macros.h" #include "base/memory/weak_ptr.h" +#include "base/message_loop/message_loop.h" #include "base/pickle.h" #include "base/single_thread_task_runner.h" #include "base/synchronization/waitable_event.h"
diff --git a/content/browser/background_sync/background_sync_browsertest.cc b/content/browser/background_sync/background_sync_browsertest.cc index 2b522c4d..c45610f9 100644 --- a/content/browser/background_sync/background_sync_browsertest.cc +++ b/content/browser/background_sync/background_sync_browsertest.cc
@@ -11,6 +11,7 @@ #include "base/command_line.h" #include "base/macros.h" +#include "base/run_loop.h" #include "base/strings/string_split.h" #include "base/strings/stringprintf.h" #include "base/task_runner_util.h"
diff --git a/content/browser/browsing_data/clear_site_data_throttle_browsertest.cc b/content/browser/browsing_data/clear_site_data_throttle_browsertest.cc index 1c95be4..e8c5fe7 100644 --- a/content/browser/browsing_data/clear_site_data_throttle_browsertest.cc +++ b/content/browser/browsing_data/clear_site_data_throttle_browsertest.cc
@@ -9,6 +9,7 @@ #include "base/bind.h" #include "base/callback.h" #include "base/command_line.h" +#include "base/run_loop.h" #include "base/scoped_observer.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h"
diff --git a/content/browser/cross_site_transfer_browsertest.cc b/content/browser/cross_site_transfer_browsertest.cc index fcd6bdf4..29d7514 100644 --- a/content/browser/cross_site_transfer_browsertest.cc +++ b/content/browser/cross_site_transfer_browsertest.cc
@@ -10,6 +10,7 @@ #include "base/files/scoped_temp_dir.h" #include "base/macros.h" #include "base/memory/ptr_util.h" +#include "base/run_loop.h" #include "base/strings/stringprintf.h" #include "content/browser/child_process_security_policy_impl.h" #include "content/browser/loader/resource_dispatcher_host_impl.h"
diff --git a/content/browser/devtools/protocol/storage_handler.cc b/content/browser/devtools/protocol/storage_handler.cc index 1246b7c..e0b373a 100644 --- a/content/browser/devtools/protocol/storage_handler.cc +++ b/content/browser/devtools/protocol/storage_handler.cc
@@ -225,7 +225,7 @@ BrowserThread::PostTask( BrowserThread::UI, FROM_HERE, base::BindOnce(&StorageHandler::NotifyCacheStorageListChanged, owner_, - origin.GetURL().spec())); + origin.Serialize())); } void OnCacheContentChanged(const url::Origin& origin, @@ -236,7 +236,7 @@ BrowserThread::PostTask( BrowserThread::UI, FROM_HERE, base::BindOnce(&StorageHandler::NotifyCacheStorageContentChanged, - owner_, origin.GetURL().spec(), cache_name)); + owner_, origin.Serialize(), cache_name)); } // Maintained on the IO thread to avoid mutex contention.
diff --git a/content/browser/dom_storage/dom_storage_browsertest.cc b/content/browser/dom_storage/dom_storage_browsertest.cc index c9efa24..2e5e126 100644 --- a/content/browser/dom_storage/dom_storage_browsertest.cc +++ b/content/browser/dom_storage/dom_storage_browsertest.cc
@@ -3,6 +3,7 @@ // found in the LICENSE file. #include "base/command_line.h" +#include "base/run_loop.h" #include "build/build_config.h" #include "content/browser/dom_storage/dom_storage_context_wrapper.h" #include "content/browser/dom_storage/local_storage_context_mojo.h"
diff --git a/content/browser/frame_host/interstitial_page_impl_browsertest.cc b/content/browser/frame_host/interstitial_page_impl_browsertest.cc index 58cb70f..7ec70faf 100644 --- a/content/browser/frame_host/interstitial_page_impl_browsertest.cc +++ b/content/browser/frame_host/interstitial_page_impl_browsertest.cc
@@ -7,6 +7,7 @@ #include <tuple> #include "base/macros.h" +#include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" #include "content/browser/web_contents/web_contents_impl.h" #include "content/common/clipboard_messages.h"
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc index 930fd055..a502303e 100644 --- a/content/browser/frame_host/render_frame_host_impl.cc +++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -118,6 +118,7 @@ #include "media/mojo/interfaces/media_service.mojom.h" #include "media/mojo/interfaces/remoting.mojom.h" #include "media/mojo/services/media_interface_provider.h" +#include "media/mojo/services/video_decode_stats_recorder.h" #include "media/mojo/services/watch_time_recorder.h" #include "mojo/public/cpp/bindings/associated_interface_ptr.h" #include "mojo/public/cpp/bindings/strong_binding.h" @@ -3033,6 +3034,8 @@ registry_->AddInterface( base::Bind(&InputInjectorImpl::Create, weak_ptr_factory_.GetWeakPtr())); } + + registry_->AddInterface(base::Bind(&media::VideoDecodeStatsRecorder::Create)); } void RenderFrameHostImpl::ResetWaitingState() {
diff --git a/content/browser/geolocation/geolocation_service_impl_unittest.cc b/content/browser/geolocation/geolocation_service_impl_unittest.cc index 9656e96..7fd35508de9 100644 --- a/content/browser/geolocation/geolocation_service_impl_unittest.cc +++ b/content/browser/geolocation/geolocation_service_impl_unittest.cc
@@ -4,6 +4,7 @@ #include "content/browser/geolocation/geolocation_service_impl.h" +#include "base/run_loop.h" #include "base/test/scoped_feature_list.h" #include "content/public/browser/permission_manager.h" #include "content/public/browser/permission_type.h"
diff --git a/content/browser/gpu/gpu_process_host.cc b/content/browser/gpu/gpu_process_host.cc index b3a74d8..5d376045 100644 --- a/content/browser/gpu/gpu_process_host.cc +++ b/content/browser/gpu/gpu_process_host.cc
@@ -132,6 +132,7 @@ switches::kEnableGpuRasterization, switches::kEnableHeapProfiling, switches::kEnableLogging, + switches::kEnableOOPRasterization, #if defined(OS_CHROMEOS) switches::kDisableVaapiAcceleratedVideoEncode, #endif
diff --git a/content/browser/indexed_db/indexed_db_pre_close_task_queue_unittest.cc b/content/browser/indexed_db/indexed_db_pre_close_task_queue_unittest.cc index 5735658..d8ffcc5a0 100644 --- a/content/browser/indexed_db/indexed_db_pre_close_task_queue_unittest.cc +++ b/content/browser/indexed_db/indexed_db_pre_close_task_queue_unittest.cc
@@ -7,6 +7,7 @@ #include <memory> #include "base/memory/ptr_util.h" +#include "base/run_loop.h" #include "base/strings/string16.h" #include "base/strings/utf_string_conversions.h" #include "base/test/scoped_task_environment.h"
diff --git a/content/browser/loader/cross_site_resource_handler_browsertest.cc b/content/browser/loader/cross_site_resource_handler_browsertest.cc index ab9b09c..2e986ad1 100644 --- a/content/browser/loader/cross_site_resource_handler_browsertest.cc +++ b/content/browser/loader/cross_site_resource_handler_browsertest.cc
@@ -7,6 +7,7 @@ #include "base/macros.h" #include "base/memory/ptr_util.h" #include "base/memory/weak_ptr.h" +#include "base/run_loop.h" #include "base/single_thread_task_runner.h" #include "base/threading/thread_task_runner_handle.h" #include "content/browser/frame_host/render_frame_host_impl.h"
diff --git a/content/browser/loader/mime_sniffing_resource_handler_unittest.cc b/content/browser/loader/mime_sniffing_resource_handler_unittest.cc index ff07111..45f93a4 100644 --- a/content/browser/loader/mime_sniffing_resource_handler_unittest.cc +++ b/content/browser/loader/mime_sniffing_resource_handler_unittest.cc
@@ -14,6 +14,7 @@ #include "base/logging.h" #include "base/macros.h" #include "base/memory/ptr_util.h" +#include "base/run_loop.h" #include "base/single_thread_task_runner.h" #include "base/threading/thread_task_runner_handle.h" #include "content/browser/loader/intercepting_resource_handler.h"
diff --git a/content/browser/media/session/media_session_impl_visibility_browsertest.cc b/content/browser/media/session/media_session_impl_visibility_browsertest.cc index a5ad0b02..95b2293 100644 --- a/content/browser/media/session/media_session_impl_visibility_browsertest.cc +++ b/content/browser/media/session/media_session_impl_visibility_browsertest.cc
@@ -7,6 +7,7 @@ #include "base/command_line.h" #include "base/location.h" #include "base/logging.h" +#include "base/run_loop.h" #include "base/single_thread_task_runner.h" #include "base/test/scoped_feature_list.h" #include "base/threading/thread_task_runner_handle.h"
diff --git a/content/browser/permissions/permission_service_impl.cc b/content/browser/permissions/permission_service_impl.cc index 6addd7358..196d2eb 100644 --- a/content/browser/permissions/permission_service_impl.cc +++ b/content/browser/permissions/permission_service_impl.cc
@@ -56,8 +56,6 @@ return PermissionType::BACKGROUND_SYNC; case PermissionName::SENSORS: return PermissionType::SENSORS; - case PermissionName::ACCESSIBILITY_EVENTS: - return PermissionType::ACCESSIBILITY_EVENTS; } NOTREACHED(); @@ -84,7 +82,6 @@ case PermissionType::BACKGROUND_SYNC: case PermissionType::FLASH: case PermissionType::SENSORS: - case PermissionType::ACCESSIBILITY_EVENTS: case PermissionType::NUM: // These aren't exposed by feature policy. return blink::WebFeaturePolicyFeature::kNotFound;
diff --git a/content/browser/renderer_host/input/wheel_scroll_latching_browsertest.cc b/content/browser/renderer_host/input/wheel_scroll_latching_browsertest.cc index b19d544..69797f5 100644 --- a/content/browser/renderer_host/input/wheel_scroll_latching_browsertest.cc +++ b/content/browser/renderer_host/input/wheel_scroll_latching_browsertest.cc
@@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "base/run_loop.h" #include "base/test/scoped_feature_list.h" #include "content/browser/renderer_host/render_widget_host_impl.h" #include "content/browser/renderer_host/render_widget_host_input_event_router.h" @@ -231,4 +232,4 @@ WheelEventTargetTest(); } -} // namespace content \ No newline at end of file +} // namespace content
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc index 66e8ed5..616a031a 100644 --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -2547,6 +2547,7 @@ switches::kEnableLCDText, switches::kEnableLogging, switches::kEnableNetworkInformationDownlinkMax, + switches::kEnableOOPRasterization, switches::kEnablePinch, switches::kEnablePluginPlaceholderTesting, switches::kEnablePreciseMemoryInfo,
diff --git a/content/browser/renderer_host/render_widget_host_input_event_router_unittest.cc b/content/browser/renderer_host/render_widget_host_input_event_router_unittest.cc index 6eb6e4b..d5d386d 100644 --- a/content/browser/renderer_host/render_widget_host_input_event_router_unittest.cc +++ b/content/browser/renderer_host/render_widget_host_input_event_router_unittest.cc
@@ -4,6 +4,7 @@ #include "content/browser/renderer_host/render_widget_host_input_event_router.h" +#include "base/run_loop.h" #include "base/test/scoped_task_environment.h" #include "content/browser/renderer_host/mock_widget_impl.h" #include "content/browser/renderer_host/render_widget_host_impl.h"
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 fb8d1585..8ba7840 100644 --- a/content/browser/renderer_host/render_widget_host_view_android.cc +++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -86,6 +86,7 @@ #include "third_party/khronos/GLES2/gl2.h" #include "third_party/khronos/GLES2/gl2ext.h" #include "third_party/skia/include/core/SkCanvas.h" +#include "ui/android/view_android_observer.h" #include "ui/android/window_android.h" #include "ui/android/window_android_compositor.h" #include "ui/base/layout.h" @@ -2102,11 +2103,13 @@ resize = true; if (content_view_core_) { content_view_core_->RemoveObserver(this); + view_.RemoveObserver(this); view_.RemoveFromParent(); view_.GetLayer()->RemoveFromParent(); } if (content_view_core) { content_view_core->AddObserver(this); + view_.AddObserver(this); ui::ViewAndroid* parent_view = content_view_core->GetViewAndroid(); parent_view->AddChild(&view_); parent_view->GetLayer()->AddChild(view_.GetLayer()); @@ -2217,6 +2220,9 @@ } void RenderWidgetHostViewAndroid::OnAttachedToWindow() { + if (!content_view_core_) + return; + if (is_showing_) StartObservingRootWindow(); DCHECK(view_.GetWindowAndroid());
diff --git a/content/browser/renderer_host/render_widget_host_view_android.h b/content/browser/renderer_host/render_widget_host_view_android.h index b2c421d..898bbe96 100644 --- a/content/browser/renderer_host/render_widget_host_view_android.h +++ b/content/browser/renderer_host/render_widget_host_view_android.h
@@ -70,6 +70,7 @@ class CONTENT_EXPORT RenderWidgetHostViewAndroid : public RenderWidgetHostViewBase, public ui::GestureProviderClient, + public ui::ViewAndroidObserver, public ui::ViewClient, public ui::WindowAndroidObserver, public viz::FrameEvictorClient, @@ -199,6 +200,10 @@ bool OnMouseWheelEvent(const ui::MotionEventAndroid& event) override; void OnPhysicalBackingSizeChanged() override; + // ui::ViewAndroidObserver implementation: + void OnAttachedToWindow() override; + void OnDetachedFromWindow() override; + // ui::GestureProviderClient implementation. void OnGestureEvent(const ui::GestureEventData& gesture) override; @@ -213,8 +218,6 @@ // content::ContentViewCoreObserver implementation. void OnContentViewCoreDestroyed() override; - void OnAttachedToWindow() override; - void OnDetachedFromWindow() override; // viz::FrameEvictor implementation void EvictDelegatedFrame() override;
diff --git a/content/browser/renderer_host/render_widget_host_view_child_frame_browsertest.cc b/content/browser/renderer_host/render_widget_host_view_child_frame_browsertest.cc index 3c101ff..17495c87 100644 --- a/content/browser/renderer_host/render_widget_host_view_child_frame_browsertest.cc +++ b/content/browser/renderer_host/render_widget_host_view_child_frame_browsertest.cc
@@ -3,6 +3,7 @@ // found in the LICENSE file. #include "base/macros.h" +#include "base/run_loop.h" #include "components/viz/common/surfaces/surface_id.h" #include "components/viz/common/surfaces/surface_sequence.h" #include "content/browser/frame_host/frame_tree_node.h"
diff --git a/content/browser/service_worker/service_worker_context_unittest.cc b/content/browser/service_worker/service_worker_context_unittest.cc index fee4a77b..faf861b 100644 --- a/content/browser/service_worker/service_worker_context_unittest.cc +++ b/content/browser/service_worker/service_worker_context_unittest.cc
@@ -10,6 +10,7 @@ #include "base/logging.h" #include "base/memory/ptr_util.h" #include "base/message_loop/message_loop.h" +#include "base/run_loop.h" #include "base/time/time.h" #include "content/browser/browser_thread_impl.h" #include "content/browser/service_worker/embedded_worker_registry.h"
diff --git a/content/browser/service_worker/service_worker_provider_host_unittest.cc b/content/browser/service_worker/service_worker_provider_host_unittest.cc index ae63833..67b8e7a 100644 --- a/content/browser/service_worker/service_worker_provider_host_unittest.cc +++ b/content/browser/service_worker/service_worker_provider_host_unittest.cc
@@ -10,6 +10,7 @@ #include "base/macros.h" #include "base/memory/ptr_util.h" #include "base/memory/weak_ptr.h" +#include "base/run_loop.h" #include "base/threading/thread_task_runner_handle.h" #include "content/browser/service_worker/embedded_worker_test_helper.h" #include "content/browser/service_worker/service_worker_context_core.h"
diff --git a/content/browser/site_per_process_browsertest.cc b/content/browser/site_per_process_browsertest.cc index aed8fcf..9891f00 100644 --- a/content/browser/site_per_process_browsertest.cc +++ b/content/browser/site_per_process_browsertest.cc
@@ -19,6 +19,7 @@ #include "base/location.h" #include "base/memory/ptr_util.h" #include "base/path_service.h" +#include "base/run_loop.h" #include "base/sequenced_task_runner.h" #include "base/single_thread_task_runner.h" #include "base/strings/pattern.h"
diff --git a/content/browser/tracing/background_tracing_manager_browsertest.cc b/content/browser/tracing/background_tracing_manager_browsertest.cc index bbf7d7c..cc408bf 100644 --- a/content/browser/tracing/background_tracing_manager_browsertest.cc +++ b/content/browser/tracing/background_tracing_manager_browsertest.cc
@@ -9,6 +9,7 @@ #include "base/command_line.h" #include "base/macros.h" #include "base/metrics/histogram_macros.h" +#include "base/run_loop.h" #include "base/strings/pattern.h" #include "base/trace_event/trace_event.h" #include "content/browser/tracing/background_tracing_manager_impl.h"
diff --git a/content/browser/web_contents_binding_set_browsertest.cc b/content/browser/web_contents_binding_set_browsertest.cc index 63435d1..f3bbbc2 100644 --- a/content/browser/web_contents_binding_set_browsertest.cc +++ b/content/browser/web_contents_binding_set_browsertest.cc
@@ -4,6 +4,7 @@ #include "base/macros.h" #include "base/memory/ptr_util.h" +#include "base/run_loop.h" #include "content/browser/web_contents/web_contents_impl.h" #include "content/public/browser/web_contents_binding_set.h" #include "content/public/test/browser_test_utils.h"
diff --git a/content/browser/webrtc/webrtc_content_browsertest_base.cc b/content/browser/webrtc/webrtc_content_browsertest_base.cc index 91a8a77e..e7f817e9 100644 --- a/content/browser/webrtc/webrtc_content_browsertest_base.cc +++ b/content/browser/webrtc/webrtc_content_browsertest_base.cc
@@ -5,6 +5,7 @@ #include "content/browser/webrtc/webrtc_content_browsertest_base.h" #include "base/command_line.h" +#include "base/run_loop.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "build/build_config.h"
diff --git a/content/public/android/BUILD.gn b/content/public/android/BUILD.gn index 8aca8d92..6daa0be 100644 --- a/content/public/android/BUILD.gn +++ b/content/public/android/BUILD.gn
@@ -413,6 +413,7 @@ "//third_party/jsr-305:jsr_305_javalib", "//third_party/junit", "//ui/android:ui_java", + "//ui/android:ui_java_test_support", "//ui/gfx/geometry/mojo:mojo_java", ]
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/KitKatWebContentsAccessibility.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/KitKatWebContentsAccessibility.java index f7ca2fd..6b6233c6 100644 --- a/content/public/android/java/src/org/chromium/content/browser/accessibility/KitKatWebContentsAccessibility.java +++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/KitKatWebContentsAccessibility.java
@@ -33,10 +33,11 @@ @Override protected void setAccessibilityNodeInfoKitKatAttributes(AccessibilityNodeInfo node, - boolean isRoot, boolean isEditableText, String roleDescription, int selectionStartIndex, - int selectionEndIndex) { + boolean isRoot, boolean isEditableText, String roleDescription, String hint, + int selectionStartIndex, int selectionEndIndex) { Bundle bundle = node.getExtras(); bundle.putCharSequence("AccessibilityNodeInfo.roleDescription", roleDescription); + bundle.putCharSequence("AccessibilityNodeInfo.hint", hint); if (isRoot) { bundle.putCharSequence( "ACTION_ARGUMENT_HTML_ELEMENT_STRING_VALUES", mSupportedHtmlElementTypes);
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/OWebContentsAccessibility.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/OWebContentsAccessibility.java index 5cbc217..1fb6e67 100644 --- a/content/public/android/java/src/org/chromium/content/browser/accessibility/OWebContentsAccessibility.java +++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/OWebContentsAccessibility.java
@@ -43,6 +43,15 @@ } @Override + protected void setAccessibilityNodeInfoKitKatAttributes(AccessibilityNodeInfo node, + boolean isRoot, boolean isEditableText, String roleDescription, String hint, + int selectionStartIndex, int selectionEndIndex) { + super.setAccessibilityNodeInfoKitKatAttributes(node, isRoot, isEditableText, + roleDescription, hint, selectionStartIndex, selectionEndIndex); + node.setHintText(hint); + } + + @Override public void addExtraDataToAccessibilityNodeInfo( int virtualViewId, AccessibilityNodeInfo info, String extraDataKey, Bundle arguments) { if (!extraDataKey.equals(EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY)) return;
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibility.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibility.java index ca14aea..f8dd8268ec 100644 --- a/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibility.java +++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibility.java
@@ -971,8 +971,8 @@ @CalledByNative protected void setAccessibilityNodeInfoKitKatAttributes(AccessibilityNodeInfo node, - boolean isRoot, boolean isEditableText, String roleDescription, int selectionStartIndex, - int selectionEndIndex) { + boolean isRoot, boolean isEditableText, String roleDescription, String hint, + int selectionStartIndex, int selectionEndIndex) { // Requires KitKat or higher. }
diff --git a/content/public/android/java/strings/translations/android_content_strings_ja.xtb b/content/public/android/java/strings/translations/android_content_strings_ja.xtb index 67337d09..a9e67e6 100644 --- a/content/public/android/java/strings/translations/android_content_strings_ja.xtb +++ b/content/public/android/java/strings/translations/android_content_strings_ja.xtb
@@ -19,6 +19,7 @@ <translation id="4768459022382175196">秒</translation> <translation id="4859501799452851758">プロファイラを終了しました。結果は <ph name="FILENAME" /> をご覧ください。</translation> <translation id="4932733599132424254">日付</translation> +<translation id="5659744962989939577">辞書に追加</translation> <translation id="5789643057113097023">.</translation> <translation id="5966707198760109579">週</translation> <translation id="6015796118275082299">年</translation>
diff --git a/content/public/android/java/strings/translations/android_content_strings_no.xtb b/content/public/android/java/strings/translations/android_content_strings_no.xtb index de911fd..cc4f2f6 100644 --- a/content/public/android/java/strings/translations/android_content_strings_no.xtb +++ b/content/public/android/java/strings/translations/android_content_strings_no.xtb
@@ -19,6 +19,7 @@ <translation id="4768459022382175196">Sekund</translation> <translation id="4859501799452851758">Profileringsverktøyet er ferdig. Du finner resultatene i <ph name="FILENAME" />.</translation> <translation id="4932733599132424254">Dato</translation> +<translation id="5659744962989939577">Legg til i ordlisten</translation> <translation id="5789643057113097023">.</translation> <translation id="5966707198760109579">Uke</translation> <translation id="6015796118275082299">År</translation>
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/VideoFullscreenOrientationLockTest.java b/content/public/android/javatests/src/org/chromium/content/browser/VideoFullscreenOrientationLockTest.java index 44de05a..1fee5b053 100644 --- a/content/public/android/javatests/src/org/chromium/content/browser/VideoFullscreenOrientationLockTest.java +++ b/content/public/android/javatests/src/org/chromium/content/browser/VideoFullscreenOrientationLockTest.java
@@ -17,6 +17,7 @@ import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.Feature; +import org.chromium.base.test.util.Restriction; import org.chromium.content.browser.test.ContentJUnit4ClassRunner; import org.chromium.content.browser.test.util.Criteria; import org.chromium.content.browser.test.util.CriteriaHelper; @@ -25,7 +26,7 @@ import org.chromium.content.browser.test.util.UiUtils; import org.chromium.content_shell_apk.ContentShellActivityTestRule; import org.chromium.media.MediaSwitches; -import org.chromium.ui.base.DeviceFormFactor; +import org.chromium.ui.test.util.UiRestriction; import java.util.concurrent.Callable; import java.util.concurrent.TimeoutException; @@ -133,12 +134,8 @@ @Test @MediumTest @Feature({"VideoFullscreenOrientationLock"}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE}) public void testEnterExitFullscreenWithControlsButton() throws Exception { - // TODO(johnme): Use RESTRICTION_TYPE_PHONE once crbug.com/673917 moves it out of chrome/. - if (DeviceFormFactor.isTablet()) { - return; - } - // Start playback to guarantee it's properly loaded. Assert.assertTrue(DOMUtils.isMediaPaused(mActivityTestRule.getWebContents(), VIDEO_ID)); DOMUtils.playMedia(mActivityTestRule.getWebContents(), VIDEO_ID); @@ -164,12 +161,8 @@ @Test @MediumTest @Feature({"VideoFullscreenOrientationLock"}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE}) public void testEnterExitFullscreenWithAPI() throws Exception { - // TODO(johnme): Use RESTRICTION_TYPE_PHONE once crbug.com/673917 moves it out of chrome/. - if (DeviceFormFactor.isTablet()) { - return; - } - // Start playback to guarantee it's properly loaded. Assert.assertTrue(DOMUtils.isMediaPaused(mActivityTestRule.getWebContents(), VIDEO_ID)); DOMUtils.playMedia(mActivityTestRule.getWebContents(), VIDEO_ID); @@ -191,12 +184,8 @@ @Test @MediumTest @Feature({"VideoFullscreenOrientationLock"}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE}) public void testExitFullscreenByRemovingVideo() throws Exception { - // TODO(johnme): Use RESTRICTION_TYPE_PHONE once crbug.com/673917 moves it out of chrome/. - if (DeviceFormFactor.isTablet()) { - return; - } - // Start playback to guarantee it's properly loaded. Assert.assertTrue(DOMUtils.isMediaPaused(mActivityTestRule.getWebContents(), VIDEO_ID)); DOMUtils.playMedia(mActivityTestRule.getWebContents(), VIDEO_ID); @@ -219,12 +208,8 @@ @Test @MediumTest @Feature({"VideoFullscreenOrientationLock"}) + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE}) public void testExitFullscreenWithNavigation() throws Exception { - // TODO(johnme): Use RESTRICTION_TYPE_PHONE once crbug.com/673917 moves it out of chrome/. - if (DeviceFormFactor.isTablet()) { - return; - } - // Start playback to guarantee it's properly loaded. Assert.assertTrue(DOMUtils.isMediaPaused(mActivityTestRule.getWebContents(), VIDEO_ID)); DOMUtils.playMedia(mActivityTestRule.getWebContents(), VIDEO_ID);
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/VideoRotateToFullscreenTest.java b/content/public/android/javatests/src/org/chromium/content/browser/VideoRotateToFullscreenTest.java index 8966760..b636f5c 100644 --- a/content/public/android/javatests/src/org/chromium/content/browser/VideoRotateToFullscreenTest.java +++ b/content/public/android/javatests/src/org/chromium/content/browser/VideoRotateToFullscreenTest.java
@@ -16,6 +16,7 @@ import org.chromium.base.ThreadUtils; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.DisabledTest; +import org.chromium.base.test.util.Restriction; import org.chromium.content.browser.test.ContentJUnit4ClassRunner; import org.chromium.content.browser.test.util.Criteria; import org.chromium.content.browser.test.util.CriteriaHelper; @@ -23,7 +24,7 @@ import org.chromium.content.browser.test.util.JavaScriptUtils; import org.chromium.content_shell_apk.ContentShellActivityTestRule; import org.chromium.media.MediaSwitches; -import org.chromium.ui.base.DeviceFormFactor; +import org.chromium.ui.test.util.UiRestriction; import java.util.concurrent.Callable; import java.util.concurrent.TimeoutException; @@ -91,12 +92,8 @@ // @MediumTest // @Feature({"VideoRotateToFullscreen"}) @DisabledTest(message = "crbug.com/726977") + @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE}) public void testPortraitToLandscapeAndBack() throws Exception { - // TODO(johnme): Use RESTRICTION_TYPE_PHONE once crbug.com/673917 moves it out of chrome/. - if (DeviceFormFactor.isTablet()) { - return; - } - // Start off in portrait screen orientation. mRule.getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); waitForScreenOrientation("\"portrait\"");
diff --git a/content/public/app/mojo/content_browser_manifest.json b/content/public/app/mojo/content_browser_manifest.json index 6b45cdac..f141e9aa 100644 --- a/content/public/app/mojo/content_browser_manifest.json +++ b/content/public/app/mojo/content_browser_manifest.json
@@ -145,6 +145,7 @@ "media::mojom::InterfaceFactory", "media::mojom::RemoterFactory", "media::mojom::Renderer", + "media::mojom::VideoDecodeStatsRecorder", "media::mojom::WatchTimeRecorderProvider", "mojom::MediaDevicesDispatcherHost", "payments::mojom::PaymentManager",
diff --git a/content/public/browser/permission_type.h b/content/public/browser/permission_type.h index 876eec5278..22b3c3b 100644 --- a/content/public/browser/permission_type.h +++ b/content/public/browser/permission_type.h
@@ -25,7 +25,6 @@ BACKGROUND_SYNC = 10, FLASH = 11, SENSORS = 12, - ACCESSIBILITY_EVENTS = 13, // Always keep this at the end. NUM,
diff --git a/content/public/test/android/BUILD.gn b/content/public/test/android/BUILD.gn index 478a8fa..2ff16e3c 100644 --- a/content/public/test/android/BUILD.gn +++ b/content/public/test/android/BUILD.gn
@@ -27,6 +27,7 @@ "//third_party/android_support_test_runner:runner_java", "//third_party/junit:junit", "//ui/android:ui_java", + "//ui/android:ui_java_test_support", ] java_files = [ "javatests/src/org/chromium/content/browser/test/ChildProcessAllocatorSettings.java",
diff --git a/content/public/test/android/javatests/src/org/chromium/content/browser/test/ContentJUnit4ClassRunner.java b/content/public/test/android/javatests/src/org/chromium/content/browser/test/ContentJUnit4ClassRunner.java index 8581532..8cb5d362 100644 --- a/content/public/test/android/javatests/src/org/chromium/content/browser/test/ContentJUnit4ClassRunner.java +++ b/content/public/test/android/javatests/src/org/chromium/content/browser/test/ContentJUnit4ClassRunner.java
@@ -4,11 +4,17 @@ package org.chromium.content.browser.test; +import android.support.test.InstrumentationRegistry; + import org.junit.runners.model.InitializationError; +import org.chromium.base.CollectionUtil; import org.chromium.base.test.BaseJUnit4ClassRunner; import org.chromium.base.test.BaseTestResult.PreTestHook; import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.base.test.util.SkipCheck; +import org.chromium.ui.test.util.UiDisableIfSkipCheck; +import org.chromium.ui.test.util.UiRestrictionSkipCheck; import java.util.Arrays; import java.util.List; @@ -23,9 +29,14 @@ * @throws InitializationError if the test class malformed */ public ContentJUnit4ClassRunner(final Class<?> klass) throws InitializationError { - super(klass, null, defaultPreTestHooks()); + super(klass, defaultSkipChecks(), defaultPreTestHooks()); } + private static List<SkipCheck> defaultSkipChecks() { + return CollectionUtil.newArrayList( + new UiRestrictionSkipCheck(InstrumentationRegistry.getTargetContext()), + new UiDisableIfSkipCheck(InstrumentationRegistry.getTargetContext())); + } /** * Change this static function to add default {@code PreTestHook}s. */
diff --git a/content/public/test/browser_test_base.cc b/content/public/test/browser_test_base.cc index 2841a53..b13c07a 100644 --- a/content/public/test/browser_test_base.cc +++ b/content/public/test/browser_test_base.cc
@@ -15,6 +15,7 @@ #include "base/macros.h" #include "base/memory/ptr_util.h" #include "base/message_loop/message_loop.h" +#include "base/run_loop.h" #include "base/single_thread_task_runner.h" #include "base/strings/string_number_conversions.h" #include "base/sys_info.h"
diff --git a/content/public/test/render_view_test.cc b/content/public/test/render_view_test.cc index 0382c0ac..8c6739a 100644 --- a/content/public/test/render_view_test.cc +++ b/content/public/test/render_view_test.cc
@@ -119,9 +119,8 @@ : public RendererBlinkPlatformImpl { public: RendererBlinkPlatformImplTestOverrideImpl( - blink::scheduler::RendererScheduler* scheduler, - base::WeakPtr<service_manager::Connector> connector) - : RendererBlinkPlatformImpl(scheduler, std::move(connector)) {} + blink::scheduler::RendererScheduler* scheduler) + : RendererBlinkPlatformImpl(scheduler) {} // Get rid of the dependency to the sandbox, which is not available in // RenderViewTest. @@ -142,11 +141,10 @@ return blink_platform_impl_.get(); } -void RenderViewTest::RendererBlinkPlatformImplTestOverride::Initialize( - base::WeakPtr<service_manager::Connector> connector) { +void RenderViewTest::RendererBlinkPlatformImplTestOverride::Initialize() { renderer_scheduler_ = blink::scheduler::RendererScheduler::Create(); - blink_platform_impl_.reset(new RendererBlinkPlatformImplTestOverrideImpl( - renderer_scheduler_.get(), std::move(connector))); + blink_platform_impl_.reset( + new RendererBlinkPlatformImplTestOverrideImpl(renderer_scheduler_.get())); } void RenderViewTest::RendererBlinkPlatformImplTestOverride::Shutdown() { @@ -247,7 +245,7 @@ // Blink needs to be initialized before calling CreateContentRendererClient() // because it uses blink internally. - blink_platform_impl_.Initialize(render_thread_->GetConnector()->GetWeakPtr()); + blink_platform_impl_.Initialize(); blink::Initialize(blink_platform_impl_.Get()); content_client_.reset(CreateContentClient()); @@ -381,20 +379,26 @@ SendWebKeyboardEvent(key_event); } -void RenderViewTest::SendWebKeyboardEvent( - const blink::WebKeyboardEvent& key_event) { +void RenderViewTest::SendInputEvent(const blink::WebInputEvent& input_event) { RenderViewImpl* impl = static_cast<RenderViewImpl*>(view_); impl->OnMessageReceived(InputMsg_HandleInputEvent( - 0, &key_event, std::vector<const WebInputEvent*>(), ui::LatencyInfo(), + 0, &input_event, std::vector<const WebInputEvent*>(), ui::LatencyInfo(), InputEventDispatchType::DISPATCH_TYPE_BLOCKING)); } +void RenderViewTest::SendWebKeyboardEvent( + const blink::WebKeyboardEvent& key_event) { + SendInputEvent(key_event); +} + void RenderViewTest::SendWebMouseEvent( const blink::WebMouseEvent& mouse_event) { - RenderViewImpl* impl = static_cast<RenderViewImpl*>(view_); - impl->OnMessageReceived(InputMsg_HandleInputEvent( - 0, &mouse_event, std::vector<const WebInputEvent*>(), ui::LatencyInfo(), - InputEventDispatchType::DISPATCH_TYPE_BLOCKING)); + SendInputEvent(mouse_event); +} + +void RenderViewTest::SendWebGestureEvent( + const blink::WebGestureEvent& gesture_event) { + SendInputEvent(gesture_event); } const char* const kGetCoordinatesScript =
diff --git a/content/public/test/render_view_test.h b/content/public/test/render_view_test.h index bce82d0..29cb0a9 100644 --- a/content/public/test/render_view_test.h +++ b/content/public/test/render_view_test.h
@@ -33,6 +33,7 @@ namespace scheduler { class RendererScheduler; } +class WebGestureEvent; class WebInputElement; class WebMouseEvent; class WebWidget; @@ -64,7 +65,7 @@ RendererBlinkPlatformImplTestOverride(); ~RendererBlinkPlatformImplTestOverride(); RendererBlinkPlatformImpl* Get() const; - void Initialize(base::WeakPtr<service_manager::Connector> connector); + void Initialize(); void Shutdown(); private: @@ -119,6 +120,9 @@ // Send a raw mouse event to the renderer. void SendWebMouseEvent(const blink::WebMouseEvent& mouse_event); + // Send a raw gesture event to the renderer. + void SendWebGestureEvent(const blink::WebGestureEvent& gesture_event); + // Returns the bounds (coordinates and size) of the element with id // |element_id|. Returns an empty rect if such an element was not found. gfx::Rect GetElementBounds(const std::string& element_id); @@ -216,6 +220,7 @@ private: void GoToOffset(int offset, const GURL& url, const PageState& state); + void SendInputEvent(const blink::WebInputEvent& input_event); }; } // namespace content
diff --git a/content/renderer/gpu/render_widget_compositor.cc b/content/renderer/gpu/render_widget_compositor.cc index 3b8bfab..388344d 100644 --- a/content/renderer/gpu/render_widget_compositor.cc +++ b/content/renderer/gpu/render_widget_compositor.cc
@@ -429,6 +429,8 @@ base::FeatureList::IsEnabled(features::kColorCorrectRendering); settings.resource_settings.buffer_to_texture_target_map = compositor_deps->GetBufferToTextureTargetMap(); + settings.enable_oop_rasterization = + cmd.HasSwitch(switches::kEnableOOPRasterization); // Build LayerTreeSettings from command line args. LayerTreeSettingsFactory::SetBrowserControlsSettings(settings, cmd);
diff --git a/content/renderer/media/audio_ipc_factory_unittest.cc b/content/renderer/media/audio_ipc_factory_unittest.cc index 166e840..b8ed82d9 100644 --- a/content/renderer/media/audio_ipc_factory_unittest.cc +++ b/content/renderer/media/audio_ipc_factory_unittest.cc
@@ -9,6 +9,7 @@ #include <vector> #include "base/message_loop/message_loop.h" +#include "base/run_loop.h" #include "base/threading/thread.h" #include "content/renderer/media/audio_message_filter.h" #include "mojo/public/cpp/bindings/binding.h"
diff --git a/content/renderer/media/media_factory.cc b/content/renderer/media/media_factory.cc index dba18537..2ccdca1 100644 --- a/content/renderer/media/media_factory.cc +++ b/content/renderer/media/media_factory.cc
@@ -32,6 +32,7 @@ #include "media/media_features.h" #include "media/renderers/default_renderer_factory.h" #include "mojo/public/cpp/bindings/associated_interface_ptr.h" +#include "services/service_manager/public/cpp/connect.h" #include "services/service_manager/public/cpp/interface_provider.h" #include "services/ui/public/cpp/gpu/context_provider_command_buffer.h" #include "third_party/WebKit/public/web/WebKit.h" @@ -278,7 +279,9 @@ media_observer, max_keyframe_distance_to_disable_background_video, max_keyframe_distance_to_disable_background_video_mse, enable_instant_source_buffer_gc, embedded_media_experience_enabled, - watch_time_recorder_provider_.get())); + watch_time_recorder_provider_.get(), + base::Bind(&MediaFactory::CreateVideoDecodeStatsRecorder, + base::Unretained(this)))); media::WebMediaPlayerImpl* media_player = new media::WebMediaPlayerImpl( web_frame, client, encrypted_client, GetWebMediaPlayerDelegate(), @@ -513,6 +516,15 @@ return cdm_factory_.get(); } +media::mojom::VideoDecodeStatsRecorderPtr +MediaFactory::CreateVideoDecodeStatsRecorder() { + DCHECK(remote_interfaces_); + media::mojom::VideoDecodeStatsRecorderPtr recorder_ptr; + service_manager::GetInterface(remote_interfaces_->get(), &recorder_ptr); + + return recorder_ptr; +} + #if BUILDFLAG(ENABLE_MOJO_MEDIA) media::mojom::InterfaceFactory* MediaFactory::GetMediaInterfaceFactory() { if (!media_interface_factory_) {
diff --git a/content/renderer/media/media_factory.h b/content/renderer/media/media_factory.h index 9a89376..3b67219 100644 --- a/content/renderer/media/media_factory.h +++ b/content/renderer/media/media_factory.h
@@ -15,6 +15,7 @@ #include "media/media_features.h" #include "media/mojo/features.h" #include "media/mojo/interfaces/remoting.mojom.h" +#include "media/mojo/interfaces/video_decode_stats_recorder.mojom.h" #include "media/mojo/interfaces/watch_time_recorder.mojom.h" #include "third_party/WebKit/public/platform/WebMediaPlayerSource.h" #include "third_party/WebKit/public/platform/WebSecurityOrigin.h" @@ -137,6 +138,8 @@ media::CdmFactory* GetCdmFactory(); + media::mojom::VideoDecodeStatsRecorderPtr CreateVideoDecodeStatsRecorder(); + #if BUILDFLAG(ENABLE_MOJO_MEDIA) media::mojom::InterfaceFactory* GetMediaInterfaceFactory();
diff --git a/content/renderer/mojo/blink_interface_provider_impl.cc b/content/renderer/mojo/blink_interface_provider_impl.cc index 95cb7bf..8d80f7e2 100644 --- a/content/renderer/mojo/blink_interface_provider_impl.cc +++ b/content/renderer/mojo/blink_interface_provider_impl.cc
@@ -15,36 +15,42 @@ namespace content { -BlinkInterfaceProviderImpl::BlinkInterfaceProviderImpl( - base::WeakPtr<service_manager::Connector> connector) - : connector_(connector), - main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()), - weak_ptr_factory_(this) { - weak_ptr_ = weak_ptr_factory_.GetWeakPtr(); +namespace { + +void BindInterface(base::WeakPtr<service_manager::Connector> connector, + const std::string& name, + mojo::ScopedMessagePipeHandle handle) { + if (!connector) + return; + + connector->BindInterface( + service_manager::Identity(mojom::kBrowserServiceName, + service_manager::mojom::kInheritUserID), + name, std::move(handle)); } +} // namespace + +BlinkInterfaceProviderImpl::BlinkInterfaceProviderImpl( + service_manager::Connector* connector) + : connector_(connector->GetWeakPtr()), + main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()) {} + BlinkInterfaceProviderImpl::~BlinkInterfaceProviderImpl() = default; void BlinkInterfaceProviderImpl::GetInterface( const char* name, mojo::ScopedMessagePipeHandle handle) { - GetInterfaceInternal(name, std::move(handle)); -} + // Construct a closure that can safely be passed across threads if necessary. + base::OnceClosure closure = base::BindOnce( + &BindInterface, connector_, std::string(name), std::move(handle)); -void BlinkInterfaceProviderImpl::GetInterfaceInternal( - const std::string& name, - mojo::ScopedMessagePipeHandle handle) { - if (!main_thread_task_runner_->BelongsToCurrentThread()) { - main_thread_task_runner_->PostTask( - FROM_HERE, base::Bind(&BlinkInterfaceProviderImpl::GetInterfaceInternal, - weak_ptr_, name, base::Passed(&handle))); + if (main_thread_task_runner_->BelongsToCurrentThread()) { + std::move(closure).Run(); return; } - connector_->BindInterface( - service_manager::Identity(mojom::kBrowserServiceName, - service_manager::mojom::kInheritUserID), - name, std::move(handle)); + main_thread_task_runner_->PostTask(FROM_HERE, std::move(closure)); } } // namespace content
diff --git a/content/renderer/mojo/blink_interface_provider_impl.h b/content/renderer/mojo/blink_interface_provider_impl.h index a7c320da..298b4a6 100644 --- a/content/renderer/mojo/blink_interface_provider_impl.h +++ b/content/renderer/mojo/blink_interface_provider_impl.h
@@ -25,8 +25,7 @@ // service_manager::InterfaceProvider. class BlinkInterfaceProviderImpl : public blink::InterfaceProvider { public: - explicit BlinkInterfaceProviderImpl( - base::WeakPtr<service_manager::Connector> connector); + explicit BlinkInterfaceProviderImpl(service_manager::Connector* connector); ~BlinkInterfaceProviderImpl(); // blink::InterfaceProvider override. @@ -34,18 +33,9 @@ mojo::ScopedMessagePipeHandle handle) override; private: - void GetInterfaceInternal(const std::string& name, - mojo::ScopedMessagePipeHandle handle); - const base::WeakPtr<service_manager::Connector> connector_; - scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_; - // Should only be accessed by Web Worker threads that are using the - // blink::Platform-level interface provider. - base::WeakPtr<BlinkInterfaceProviderImpl> weak_ptr_; - base::WeakPtrFactory<BlinkInterfaceProviderImpl> weak_ptr_factory_; - DISALLOW_COPY_AND_ASSIGN(BlinkInterfaceProviderImpl); };
diff --git a/content/renderer/mus/renderer_window_tree_client.cc b/content/renderer/mus/renderer_window_tree_client.cc index 408c281..983bdc4 100644 --- a/content/renderer/mus/renderer_window_tree_client.cc +++ b/content/renderer/mus/renderer_window_tree_client.cc
@@ -102,7 +102,6 @@ } void RendererWindowTreeClient::OnEmbed( - ui::ClientSpecificId client_id, ui::mojom::WindowDataPtr root, ui::mojom::WindowTreePtr tree, int64_t display_id,
diff --git a/content/renderer/mus/renderer_window_tree_client.h b/content/renderer/mus/renderer_window_tree_client.h index 89d618a..0734088 100644 --- a/content/renderer/mus/renderer_window_tree_client.h +++ b/content/renderer/mus/renderer_window_tree_client.h
@@ -67,7 +67,6 @@ // implementations would require some amount of refactoring out of // RenderWidget and related classes (e.g. resize, input, ime etc.). void OnEmbed( - ui::ClientSpecificId client_id, ui::mojom::WindowDataPtr root, ui::mojom::WindowTreePtr tree, int64_t display_id,
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index 2540e89..51fbdc21 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc
@@ -4287,6 +4287,20 @@ blink::WebRect selection_in_window(data.selection_rect); GetRenderWidget()->ConvertViewportToWindow(&selection_in_window); params.selection_rect = selection_in_window; + +#if defined(OS_ANDROID) + // The Samsung Email app relies on the context menu being shown after the + // javascript onselectionchanged is triggered. + // See crbug.com/729488 + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::Bind(&RenderFrameImpl::ShowDeferredContextMenu, + weak_factory_.GetWeakPtr(), params)); +#else + ShowDeferredContextMenu(params); +#endif +} + +void RenderFrameImpl::ShowDeferredContextMenu(const ContextMenuParams& params) { Send(new FrameHostMsg_ContextMenu(routing_id_, params)); }
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h index e0cf719..1fde4f9 100644 --- a/content/renderer/render_frame_impl.h +++ b/content/renderer/render_frame_impl.h
@@ -1173,6 +1173,8 @@ void ReportPeakMemoryStats(); void BindWidget(mojom::WidgetRequest request); + void ShowDeferredContextMenu(const ContextMenuParams& params); + // Stores the WebLocalFrame we are associated with. This is null from the // constructor until BindToFrame() is called, and it is null after // FrameDetached() is called until destruction (which is asynchronous in the
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc index b3c683e..a99ee51 100644 --- a/content/renderer/render_thread_impl.cc +++ b/content/renderer/render_thread_impl.cc
@@ -138,6 +138,7 @@ #include "gin/public/debug.h" #include "gpu/GLES2/gl2extchromium.h" #include "gpu/command_buffer/client/shared_memory_limits.h" +#include "gpu/config/gpu_switches.h" #include "gpu/ipc/client/command_buffer_proxy_impl.h" #include "gpu/ipc/client/gpu_channel_host.h" #include "ipc/ipc_channel_handle.h" @@ -374,6 +375,7 @@ scoped_refptr<gpu::GpuChannelHost> gpu_channel_host, const gpu::SharedMemoryLimits& limits, bool support_locking, + bool support_oop_rasterization, ui::command_buffer_metrics::ContextType type, int32_t stream_id, gpu::SchedulingPriority stream_priority) { @@ -391,6 +393,8 @@ attributes.sample_buffers = 0; attributes.bind_generates_resource = false; attributes.lose_context_when_out_of_memory = true; + attributes.enable_oop_rasterization = support_oop_rasterization; + const bool automatic_flushes = false; return make_scoped_refptr(new ui::ContextProviderCommandBuffer( std::move(gpu_channel_host), stream_id, stream_priority, @@ -1187,8 +1191,8 @@ gin::Debug::SetJitCodeEventHandler(vTune::GetVtuneCodeEventHandler()); #endif - blink_platform_impl_.reset(new RendererBlinkPlatformImpl( - renderer_scheduler_.get(), GetConnector()->GetWeakPtr())); + blink_platform_impl_.reset( + new RendererBlinkPlatformImpl(renderer_scheduler_.get())); SetRuntimeFeaturesDefaultsAndUpdateFromArgs(command_line); GetContentClient() ->renderer() @@ -1437,8 +1441,10 @@ // use lower limits than the default. gpu::SharedMemoryLimits limits = gpu::SharedMemoryLimits::ForMailboxContext(); bool support_locking = true; + bool support_oop_rasterization = false; scoped_refptr<ui::ContextProviderCommandBuffer> media_context_provider = CreateOffscreenContext(gpu_channel_host, limits, support_locking, + support_oop_rasterization, ui::command_buffer_metrics::MEDIA_CONTEXT, kGpuStreamIdDefault, kGpuStreamPriorityDefault); if (!media_context_provider->BindToCurrentThread()) @@ -1490,8 +1496,10 @@ } bool support_locking = false; + bool support_oop_rasterization = false; shared_main_thread_contexts_ = CreateOffscreenContext( std::move(gpu_channel_host), gpu::SharedMemoryLimits(), support_locking, + support_oop_rasterization, ui::command_buffer_metrics::RENDERER_MAINTHREAD_CONTEXT, kGpuStreamIdDefault, kGpuStreamPriorityDefault); if (!shared_main_thread_contexts_->BindToCurrentThread()) @@ -2410,8 +2418,12 @@ } bool support_locking = true; + bool support_oop_rasterization = + base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kEnableOOPRasterization); shared_worker_context_provider_ = CreateOffscreenContext( std::move(gpu_channel_host), gpu::SharedMemoryLimits(), support_locking, + support_oop_rasterization, ui::command_buffer_metrics::RENDER_WORKER_CONTEXT, stream_id, stream_priority); if (!shared_worker_context_provider_->BindToCurrentThread())
diff --git a/content/renderer/render_view_browsertest.cc b/content/renderer/render_view_browsertest.cc index f02363d..33e511a 100644 --- a/content/renderer/render_view_browsertest.cc +++ b/content/renderer/render_view_browsertest.cc
@@ -112,6 +112,7 @@ using base::TimeDelta; using blink::WebFrame; using blink::WebFrameContentDumper; +using blink::WebGestureEvent; using blink::WebInputEvent; using blink::WebLocalFrame; using blink::WebMouseEvent; @@ -1410,6 +1411,7 @@ EXPECT_EQ(1, view()->history_list_offset_); } +#if !defined(OS_ANDROID) TEST_F(RenderViewImplTest, ContextMenu) { LoadHTML("<div>Page A</div>"); @@ -1432,6 +1434,46 @@ FrameHostMsg_ContextMenu::ID)); } +#else +TEST_F(RenderViewImplTest, AndroidContextMenuSelectionOrdering) { + LoadHTML("<div>Page A</div><div id=result>Not selected</div>"); + + ExecuteJavaScriptForTests( + "document.onselectionchange = function() { " + "document.getElementById('result').innerHTML = 'Selected'}"); + + // Create a long press in the center of the iframe. (I'm hoping this will + // make this a bit more robust in case of some other formatting or other bug.) + WebGestureEvent gesture_event( + WebInputEvent::kGestureLongPress, WebInputEvent::kNoModifiers, + ui::EventTimeStampToSeconds(ui::EventTimeForNow())); + gesture_event.x = 250; + gesture_event.y = 250; + + SendWebGestureEvent(gesture_event); + + scoped_refptr<content::MessageLoopRunner> message_loop_runner = + new content::MessageLoopRunner; + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, message_loop_runner->QuitClosure()); + + EXPECT_FALSE(render_thread_->sink().GetUniqueMessageMatching( + FrameHostMsg_ContextMenu::ID)); + + message_loop_runner->Run(); + + EXPECT_TRUE(render_thread_->sink().GetUniqueMessageMatching( + FrameHostMsg_ContextMenu::ID)); + + int did_select = -1; + base::string16 check_did_select = base::ASCIIToUTF16( + "Number(document.getElementById('result').innerHTML == 'Selected')"); + EXPECT_TRUE( + ExecuteJavaScriptAndReturnIntValue(check_did_select, &did_select)); + EXPECT_EQ(1, did_select); +} +#endif + TEST_F(RenderViewImplTest, TestBackForward) { LoadHTML("<div id=pagename>Page A</div>"); PageState page_a_state = GetCurrentPageState();
diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer/renderer_blink_platform_impl.cc index 68d0ec27..dfc3f52e 100644 --- a/content/renderer/renderer_blink_platform_impl.cc +++ b/content/renderer/renderer_blink_platform_impl.cc
@@ -253,8 +253,7 @@ //------------------------------------------------------------------------------ RendererBlinkPlatformImpl::RendererBlinkPlatformImpl( - blink::scheduler::RendererScheduler* renderer_scheduler, - base::WeakPtr<service_manager::Connector> connector) + blink::scheduler::RendererScheduler* renderer_scheduler) : BlinkPlatformImpl(renderer_scheduler->DefaultTaskRunner()), main_thread_(renderer_scheduler->CreateMainThread()), clipboard_delegate_(new RendererClipboardDelegate), @@ -264,8 +263,7 @@ default_task_runner_(renderer_scheduler->DefaultTaskRunner()), loading_task_runner_(renderer_scheduler->LoadingTaskRunner()), web_scrollbar_behavior_(new WebScrollbarBehaviorImpl), - renderer_scheduler_(renderer_scheduler), - blink_interface_provider_(new BlinkInterfaceProviderImpl(connector)) { + renderer_scheduler_(renderer_scheduler) { #if !defined(OS_ANDROID) && !defined(OS_WIN) && !defined(OS_FUCHSIA) if (g_sandbox_enabled && sandboxEnabled()) { sandbox_support_.reset(new RendererBlinkPlatformImpl::SandboxSupport); @@ -298,6 +296,8 @@ connector_ = service_manager::Connector::Create(&request); } + blink_interface_provider_.reset( + new BlinkInterfaceProviderImpl(connector_.get())); top_level_blame_context_.Initialize(); renderer_scheduler_->SetTopLevelBlameContext(&top_level_blame_context_); }
diff --git a/content/renderer/renderer_blink_platform_impl.h b/content/renderer/renderer_blink_platform_impl.h index 2a9c4ac..18ab5e6 100644 --- a/content/renderer/renderer_blink_platform_impl.h +++ b/content/renderer/renderer_blink_platform_impl.h
@@ -67,9 +67,8 @@ class CONTENT_EXPORT RendererBlinkPlatformImpl : public BlinkPlatformImpl { public: - RendererBlinkPlatformImpl( - blink::scheduler::RendererScheduler* renderer_scheduler, - base::WeakPtr<service_manager::Connector> connector); + explicit RendererBlinkPlatformImpl( + blink::scheduler::RendererScheduler* renderer_scheduler); ~RendererBlinkPlatformImpl() override; // Shutdown must be called just prior to shutting down blink.
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 5c8ba5b..51e3d34a 100644 --- a/content/shell/browser/layout_test/layout_test_message_filter.cc +++ b/content/shell/browser/layout_test/layout_test_message_filter.cc
@@ -182,8 +182,6 @@ type = PermissionType::PROTECTED_MEDIA_IDENTIFIER; } else if (name == "background-sync") { type = PermissionType::BACKGROUND_SYNC; - } else if (name == "accessibility-events") { - type = PermissionType::ACCESSIBILITY_EVENTS; } else { NOTREACHED(); type = PermissionType::NOTIFICATIONS;
diff --git a/content/shell/test_runner/resources/fonts/fonts.conf b/content/shell/test_runner/resources/fonts/fonts.conf index d337b12..7ed6e12 100644 --- a/content/shell/test_runner/resources/fonts/fonts.conf +++ b/content/shell/test_runner/resources/fonts/fonts.conf
@@ -249,4 +249,29 @@ </edit> </match> + <!-- When we encounter a character that the current font doesn't + support, gfx::GetFallbackFontForChar() returns the first font + that does have a glyph for the character. The list of fonts is + sorted by a pattern that includes the current locale, but doesn't + include a font family (which means that the fallback font depends + on the locale but not on the current font). + + DejaVu Sans is commonly the only font that supports some + characters, such as "⇧", and even when other candidates are + available, DejaVu Sans is commonly first among them, because of + the way Fontconfig is ordinarily configured. For example, the + configuration in the Fonconfig source lists DejaVu Sans under the + sans-serif generic family, and appends sans-serif to patterns + that don't already include a generic family (such as the pattern + in gfx::GetFallbackFontForChar()). + + To get the same fallback font in the layout tests, we could + duplicate this configuration here, or more directly, simply + append DejaVu Sans to all patterns. --> + <match target="pattern"> + <edit name="family" mode="append_last"> + <string>DejaVu Sans</string> + </edit> + </match> + </fontconfig>
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn index 35186ad19..c7cebf0 100644 --- a/content/test/BUILD.gn +++ b/content/test/BUILD.gn
@@ -1536,7 +1536,7 @@ sources += [ "../renderer/sandbox_mac_v2_unittest.mm" ] } - if (is_android || is_linux || is_mac || is_win) { + if (is_android || is_linux || is_mac || is_win || is_fuchsia) { data = [ "$root_out_dir/content_shell.pak", "data/",
diff --git a/content/test/data/accessibility/aria/aria-describedby-expected-android.txt b/content/test/data/accessibility/aria/aria-describedby-expected-android.txt index 0146934..872c371 100644 --- a/content/test/data/accessibility/aria/aria-describedby-expected-android.txt +++ b/content/test/data/accessibility/aria/aria-describedby-expected-android.txt
@@ -1,4 +1,4 @@ android.webkit.WebView focusable focused scrollable -++android.widget.EditText clickable editable_text focusable name='Your username should be your email id' input_type=1 +++android.widget.EditText clickable editable_text focusable hint='Your username should be your email id' input_type=1 ++android.view.View role_description='tooltip' name='Your username should be your email id' -++android.widget.EditText clickable editable_text focusable name='mmddyy' input_type=1 +++android.widget.EditText clickable editable_text focusable hint='mmddyy' input_type=1
diff --git a/content/test/data/accessibility/aria/aria-tooltip-expected-android.txt b/content/test/data/accessibility/aria/aria-tooltip-expected-android.txt index 88ed66f..0f45c6e 100644 --- a/content/test/data/accessibility/aria/aria-tooltip-expected-android.txt +++ b/content/test/data/accessibility/aria/aria-tooltip-expected-android.txt
@@ -1,3 +1,3 @@ android.webkit.WebView focusable focused scrollable -++android.widget.EditText clickable editable_text focusable name='Your username should be your email id' input_type=1 +++android.widget.EditText clickable editable_text focusable hint='Your username should be your email id' input_type=1 ++android.view.View role_description='tooltip' name='Your username should be your email id' \ No newline at end of file
diff --git a/content/test/data/accessibility/aria/input-text-aria-placeholder-expected-android.txt b/content/test/data/accessibility/aria/input-text-aria-placeholder-expected-android.txt index e0a82249..8185855 100644 --- a/content/test/data/accessibility/aria/input-text-aria-placeholder-expected-android.txt +++ b/content/test/data/accessibility/aria/input-text-aria-placeholder-expected-android.txt
@@ -3,6 +3,6 @@ ++android.widget.EditText clickable editable_text focusable name='placeholder2' input_type=1 ++android.widget.EditText clickable editable_text focusable name='aria-label3' input_type=1 ++android.widget.EditText clickable editable_text focusable name='aria-label4' input_type=1 -++android.widget.EditText clickable editable_text focusable name='aria-label5 aria-description5' input_type=1 +++android.widget.EditText clickable editable_text focusable name='aria-label5' hint='aria-description5' input_type=1 ++android.view.View name='aria-description5' -++android.widget.EditText clickable editable_text focusable name='aria-placeholder6 title6' input_type=1 \ No newline at end of file +++android.widget.EditText clickable editable_text focusable name='aria-placeholder6' hint='title6' input_type=1 \ No newline at end of file
diff --git a/content/test/data/accessibility/html/a-name-calc-expected-android.txt b/content/test/data/accessibility/html/a-name-calc-expected-android.txt index 2faf0426..6667beb 100644 --- a/content/test/data/accessibility/html/a-name-calc-expected-android.txt +++ b/content/test/data/accessibility/html/a-name-calc-expected-android.txt
@@ -1,6 +1,6 @@ android.webkit.WebView focusable focused scrollable ++android.view.View role_description='link' clickable focusable link name='InnerText0' -++android.view.View role_description='link' clickable focusable link name='InnerText1 Title1' +++android.view.View role_description='link' clickable focusable link name='InnerText1' hint='Title1' ++android.view.View role_description='link' clickable focusable link name='Title2' ++android.view.View role_description='link' clickable focusable link name='LabelledBy3' ++android.view.View role_description='link' clickable focusable link name='Title4'
diff --git a/content/test/data/accessibility/html/button-name-calc-expected-android.txt b/content/test/data/accessibility/html/button-name-calc-expected-android.txt index 704bf09..ba03d35 100644 --- a/content/test/data/accessibility/html/button-name-calc-expected-android.txt +++ b/content/test/data/accessibility/html/button-name-calc-expected-android.txt
@@ -1,10 +1,10 @@ android.webkit.WebView focusable focused scrollable ++android.widget.Button role_description='button' clickable focusable name='InnerText0' -++android.widget.Button role_description='button' clickable focusable name='InnerText1 Title1' -++android.widget.Button role_description='button' clickable focusable name='AriaLabel2 Title2' -++android.widget.Button role_description='button' clickable focusable name='LabelledBy3 Title3' -++android.widget.Button role_description='button' clickable focusable name='LabelledBy4 DescribedBy4' -++android.widget.Button role_description='button' clickable focusable name='InnerText5 DescribedBy5' +++android.widget.Button role_description='button' clickable focusable name='InnerText1' hint='Title1' +++android.widget.Button role_description='button' clickable focusable name='AriaLabel2' hint='Title2' +++android.widget.Button role_description='button' clickable focusable name='LabelledBy3' hint='Title3' +++android.widget.Button role_description='button' clickable focusable name='LabelledBy4' hint='DescribedBy4' +++android.widget.Button role_description='button' clickable focusable name='InnerText5' hint='DescribedBy5' ++android.widget.Button role_description='button' clickable focusable name='Outer inner' ++android.widget.Button role_description='button' clickable focusable name='Outer inner1' ++android.widget.Button role_description='button' clickable focusable name='Outer grandchild' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/checkbox-name-calc-expected-android.txt b/content/test/data/accessibility/html/checkbox-name-calc-expected-android.txt index 571974f4..4d322c6 100644 --- a/content/test/data/accessibility/html/checkbox-name-calc-expected-android.txt +++ b/content/test/data/accessibility/html/checkbox-name-calc-expected-android.txt
@@ -1,7 +1,7 @@ android.webkit.WebView focusable focused scrollable ++android.widget.CheckBox role_description='checkbox' checkable clickable focusable name='Title0' -++android.widget.CheckBox role_description='checkbox' checkable clickable focusable name='Label1 Title1' -++android.widget.CheckBox role_description='checkbox' checkable clickable focusable name='AriaLabel2 Title2' -++android.widget.CheckBox role_description='checkbox' checkable clickable focusable name='LabelledBy3 Title3' -++android.widget.CheckBox role_description='checkbox' checkable clickable focusable name='LabelledBy4 DescribedBy4' -++android.widget.CheckBox role_description='checkbox' checkable clickable focusable name='DescribedBy5' \ No newline at end of file +++android.widget.CheckBox role_description='checkbox' checkable clickable focusable name='Label1' hint='Title1' +++android.widget.CheckBox role_description='checkbox' checkable clickable focusable name='AriaLabel2' hint='Title2' +++android.widget.CheckBox role_description='checkbox' checkable clickable focusable name='LabelledBy3' hint='Title3' +++android.widget.CheckBox role_description='checkbox' checkable clickable focusable name='LabelledBy4' hint='DescribedBy4' +++android.widget.CheckBox role_description='checkbox' checkable clickable focusable hint='DescribedBy5' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/contenteditable-with-no-descendants-expected-android.txt b/content/test/data/accessibility/html/contenteditable-with-no-descendants-expected-android.txt index 4a866d33..672d9f3 100644 --- a/content/test/data/accessibility/html/contenteditable-with-no-descendants-expected-android.txt +++ b/content/test/data/accessibility/html/contenteditable-with-no-descendants-expected-android.txt
@@ -1,5 +1,5 @@ android.webkit.WebView focusable focused scrollable ++android.view.View clickable focusable multiline name='label' -++android.view.View clickable focusable multiline name='description' +++android.view.View clickable focusable multiline hint='description' ++android.view.View clickable focusable multiline name='title' ++android.view.View name='description' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/input-text-name-calc-expected-android.txt b/content/test/data/accessibility/html/input-text-name-calc-expected-android.txt index 28217d2..41b440e 100644 --- a/content/test/data/accessibility/html/input-text-name-calc-expected-android.txt +++ b/content/test/data/accessibility/html/input-text-name-calc-expected-android.txt
@@ -1,10 +1,10 @@ android.webkit.WebView focusable focused scrollable ++android.widget.EditText clickable editable_text focusable name='Title0' input_type=1 -++android.widget.EditText clickable editable_text focusable name='Label1 Title1' input_type=1 -++android.widget.EditText clickable editable_text focusable name='AriaLabel2 Title2' input_type=1 -++android.widget.EditText clickable editable_text focusable name='LabelledBy3 Title3' input_type=1 +++android.widget.EditText clickable editable_text focusable name='Label1' hint='Title1' input_type=1 +++android.widget.EditText clickable editable_text focusable name='AriaLabel2' hint='Title2' input_type=1 +++android.widget.EditText clickable editable_text focusable name='LabelledBy3' hint='Title3' input_type=1 ++android.widget.EditText clickable editable_text focusable name='Placeholder4' input_type=1 ++android.widget.EditText clickable editable_text focusable name='ARIA Placeholder4a' input_type=1 ++android.widget.EditText clickable editable_text focusable name='Placeholder4b' input_type=1 -++android.widget.EditText clickable editable_text focusable name='Placeholder5 Title5' input_type=1 -++android.widget.EditText clickable editable_text focusable name='LabelledBy6 DescribedBy6' input_type=1 \ No newline at end of file +++android.widget.EditText clickable editable_text focusable name='Placeholder5' hint='Title5' input_type=1 +++android.widget.EditText clickable editable_text focusable name='LabelledBy6' hint='DescribedBy6' input_type=1 \ No newline at end of file
diff --git a/content/test/data/accessibility/html/input-text-value-expected-android.txt b/content/test/data/accessibility/html/input-text-value-expected-android.txt index 3c2a234b..fc067a6 100644 --- a/content/test/data/accessibility/html/input-text-value-expected-android.txt +++ b/content/test/data/accessibility/html/input-text-value-expected-android.txt
@@ -3,12 +3,13 @@ ++++android.view.View name='l1' ++++android.widget.EditText clickable editable_text focusable name='l1' input_type=1 ++++android.view.View name='l2' -++++android.widget.EditText clickable editable_text focusable has_non_empty_value name='value' input_type=1 text_change_added_count=5 +++++android.widget.EditText clickable editable_text focusable has_non_empty_value name='value' hint='l2' input_type=1 text_change_added_count=5 ++++android.widget.EditText clickable editable_text focusable name='l2' input_type=1 -++++android.widget.EditText clickable editable_text focusable has_non_empty_value name='value' input_type=1 text_change_added_count=5 +++++android.widget.EditText clickable editable_text focusable has_non_empty_value name='value' hint='l2' input_type=1 text_change_added_count=5 ++++android.view.View name='Email' ++++android.view.View ++++android.widget.EditText clickable editable_text focusable name='Email' input_type=1 -++++android.widget.EditText clickable editable_text focusable has_non_empty_value name='value' input_type=1 text_change_added_count=5 +++++android.widget.EditText clickable editable_text focusable has_non_empty_value name='value' hint='Email' input_type=1 text_change_added_count=5 ++++android.widget.EditText clickable editable_text focusable multiline name='l5' -++++android.widget.EditText clickable editable_text focusable has_non_empty_value multiline name='Value' text_change_added_count=5 +++++android.widget.EditText clickable editable_text focusable has_non_empty_value multiline name='Value' hint='l6' text_change_added_count=5 +++++android.widget.EditText clickable editable_text focusable has_non_empty_value name='value' hint='Name Description' input_type=1 text_change_added_count=5
diff --git a/content/test/data/accessibility/html/input-text-value-expected-blink.txt b/content/test/data/accessibility/html/input-text-value-expected-blink.txt index 669039a..97dcd2a 100644 --- a/content/test/data/accessibility/html/input-text-value-expected-blink.txt +++ b/content/test/data/accessibility/html/input-text-value-expected-blink.txt
@@ -30,3 +30,7 @@ ++++++genericContainer ++++++++staticText name='Value' ++++++++++inlineTextBox name='Value' +++++textField focusable description='Description' name='Name' descriptionFrom=attribute +++++++genericContainer +++++++++staticText name='value' +++++++++++inlineTextBox name='value'
diff --git a/content/test/data/accessibility/html/input-text-value-expected-win.txt b/content/test/data/accessibility/html/input-text-value-expected-win.txt index 9341528..52e01340 100644 --- a/content/test/data/accessibility/html/input-text-value-expected-win.txt +++ b/content/test/data/accessibility/html/input-text-value-expected-win.txt
@@ -15,3 +15,4 @@ ++++ROLE_SYSTEM_TEXT name='Email' FOCUSABLE ++++ROLE_SYSTEM_TEXT name='l5' FOCUSABLE IA2_STATE_MULTI_LINE ++++ROLE_SYSTEM_TEXT name='l6' FOCUSABLE IA2_STATE_MULTI_LINE +++++ROLE_SYSTEM_TEXT name='Name' FOCUSABLE description='Description'
diff --git a/content/test/data/accessibility/html/input-text-value.html b/content/test/data/accessibility/html/input-text-value.html index 22814a0..aeede0ef 100644 --- a/content/test/data/accessibility/html/input-text-value.html +++ b/content/test/data/accessibility/html/input-text-value.html
@@ -23,5 +23,7 @@ <textarea aria-label="l5"></textarea> <textarea aria-label="l6">Value</textarea> + <input aria-label="Name" title="Description" value="value"> + </body> </html>
diff --git a/device/bluetooth/BUILD.gn b/device/bluetooth/BUILD.gn index c7c407a..e0d141b 100644 --- a/device/bluetooth/BUILD.gn +++ b/device/bluetooth/BUILD.gn
@@ -80,6 +80,8 @@ "bluetooth_adapter_factory_wrapper.h", "bluetooth_adapter_mac.h", "bluetooth_adapter_mac.mm", + "bluetooth_adapter_mac_metrics.h", + "bluetooth_adapter_mac_metrics.mm", "bluetooth_adapter_win.cc", "bluetooth_adapter_win.h", "bluetooth_advertisement.cc",
diff --git a/device/bluetooth/bluetooth_adapter_mac.mm b/device/bluetooth/bluetooth_adapter_mac.mm index c1bf4dd1..e163647a 100644 --- a/device/bluetooth/bluetooth_adapter_mac.mm +++ b/device/bluetooth/bluetooth_adapter_mac.mm
@@ -24,6 +24,7 @@ #include "base/strings/sys_string_conversions.h" #include "base/threading/thread_task_runner_handle.h" #include "base/time/time.h" +#include "device/bluetooth/bluetooth_adapter_mac_metrics.h" #include "device/bluetooth/bluetooth_classic_device_mac.h" #include "device/bluetooth/bluetooth_common.h" #include "device/bluetooth/bluetooth_discovery_session.h" @@ -714,6 +715,7 @@ [low_energy_central_manager_ cancelPeripheralConnection:peripheral]; return; } + RecordDidFailToConnectPeripheralResult(error); BluetoothDevice::ConnectErrorCode error_code = BluetoothDevice::ConnectErrorCode::ERROR_UNKNOWN; if (error) {
diff --git a/device/bluetooth/bluetooth_adapter_mac_metrics.h b/device/bluetooth/bluetooth_adapter_mac_metrics.h new file mode 100644 index 0000000..d4ac2fe1 --- /dev/null +++ b/device/bluetooth/bluetooth_adapter_mac_metrics.h
@@ -0,0 +1,58 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_MAC_METRICS_H_ +#define DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_MAC_METRICS_H_ + +@class NSError; + +enum class MacOSBluetoothOperationsResult : int { + UNKNOWN_ERROR_DOMAIN = -2, + NO_ERROR = -1, + CBATT_ERROR_SUCCESS = 0, + CBATT_ERROR_INVALID_HANDLE = 1, + CBATT_ERROR_READ_NOT_PERMITTED = 2, + CBATT_ERROR_WRITE_NOT_PERMITTED = 3, + CBATT_ERROR_INVALID_PDU = 4, + CBATT_ERROR_INSUFFICIENT_AUTHENTICATION = 5, + CBATT_ERROR_REQUEST_NOT_SUPPORTED = 6, + CBATT_ERROR_INVALID_OFFSET = 7, + CBATT_ERROR_INSUFFICIENT_AUTHORIZATION = 8, + CBATT_ERROR_PREPARE_QUEUE_FULL = 9, + CBATT_ERROR_ATTRIBUTE_NOT_FOUND = 10, + CBATT_ERROR_ATTRIBUTE_NOT_LONG = 11, + CBATT_ERROR_INSUFFICIENT_ENCRYPTION_KEY_SIZE = 12, + CBATT_ERROR_INVALID_ATTRIBUTE_VALUE_LENGTH = 13, + CBATT_ERROR_UNLIKELY_ERROR = 14, + CBATT_ERROR_INSUFFICIENT_ENCRYPTION = 15, + CBATT_ERROR_UNSUPPORTED_GROUP_TYPE = 16, + CBATT_ERROR_INSUFFICIENT_RESOURCES = 17, + CBATT_ERROR_UNKNOWN_ERROR_CODE = 999, + CBERROR_UNKNOWN = 1000, + CBERROR_INVALID_PARAMETERS = 1001, + CBERROR_INVALID_HANDLE = 1002, + CBERROR_NOT_CONNECTED = 1003, + CBERROR_OUT_OF_SPACE = 1004, + CBERROR_OPERATION_CANCELLED = 1005, + CBERROR_CONNECTION_TIMEOUT = 1006, + CBERROR_PERIPHERAL_DISCONNECTED = 1007, + CBERROR_UUID_NOT_ALLOWED = 1008, + CBERROR_ALREADY_ADVERTISING = 1009, + CBERROR_MAX_CONNECTION = 1010, + CBERROR_UNKNOWN_ERROR_CODE = 1999, + MAX, +}; + +void RecordDidFailToConnectPeripheralResult(NSError* error); +void RecordDidDisconnectPeripheralResult(NSError* error); +void RecordDidDiscoverPrimaryServicesResult(NSError* error); +void RecordDidDiscoverCharacteristicsResult(NSError* error); +void RecordDidUpdateValueResult(NSError* error); +void RecordDidWriteValueResult(NSError* error); +void RecordDidUpdateNotificationStateResult(NSError* error); +void RecordDidDiscoverDescriptorsResult(NSError* error); +void RecordDidUpdateValueForDescriptorResult(NSError* error); +void RecordDidWriteValueForDescriptorResult(NSError* error); + +#endif // DEVICE_BLUETOOTH_BLUETOOTH_ADAPTER_MAC_METRICS_H_
diff --git a/device/bluetooth/bluetooth_adapter_mac_metrics.mm b/device/bluetooth/bluetooth_adapter_mac_metrics.mm new file mode 100644 index 0000000..dd63b84 --- /dev/null +++ b/device/bluetooth/bluetooth_adapter_mac_metrics.mm
@@ -0,0 +1,200 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "device/bluetooth/bluetooth_adapter_mac_metrics.h" + +#import <CoreBluetooth/CoreBluetooth.h> +#import <Foundation/Foundation.h> + +#include "base/metrics/histogram_macros.h" + +namespace { + +#if !defined(MAC_OS_X_VERSION_10_11) || \ + MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_11 +const NSInteger CBErrorMaxConnection = 10; +#endif // MAC_OS_X_VERSION_10_11 + +MacOSBluetoothOperationsResult GetMacOSOperationResultFromNSError( + NSError* error) { + if (!error) + return MacOSBluetoothOperationsResult::NO_ERROR; + NSString* error_domain = [error domain]; + NSInteger error_code = [error code]; + if ([error_domain isEqualToString:CBErrorDomain]) { + CBError cb_error_code = static_cast<CBError>(error_code); + switch (cb_error_code) { + case CBErrorUnknown: + return MacOSBluetoothOperationsResult::CBERROR_UNKNOWN; + case CBErrorInvalidParameters: + return MacOSBluetoothOperationsResult::CBERROR_INVALID_PARAMETERS; + case CBErrorInvalidHandle: + return MacOSBluetoothOperationsResult::CBERROR_INVALID_HANDLE; + case CBErrorNotConnected: + return MacOSBluetoothOperationsResult::CBERROR_NOT_CONNECTED; + case CBErrorOutOfSpace: + return MacOSBluetoothOperationsResult::CBERROR_OUT_OF_SPACE; + case CBErrorOperationCancelled: + return MacOSBluetoothOperationsResult::CBERROR_OPERATION_CANCELLED; + case CBErrorConnectionTimeout: + return MacOSBluetoothOperationsResult::CBERROR_CONNECTION_TIMEOUT; + case CBErrorPeripheralDisconnected: + return MacOSBluetoothOperationsResult::CBERROR_PERIPHERAL_DISCONNECTED; + case CBErrorUUIDNotAllowed: + return MacOSBluetoothOperationsResult::CBERROR_UUID_NOT_ALLOWED; + case CBErrorAlreadyAdvertising: + return MacOSBluetoothOperationsResult::CBERROR_ALREADY_ADVERTISING; + default: + if (@available(macOS 10.11, *)) { + if (CBErrorMaxConnection == cb_error_code) + return MacOSBluetoothOperationsResult::CBERROR_MAX_CONNECTION; + } + NOTREACHED(); + } + return MacOSBluetoothOperationsResult::CBATT_ERROR_UNKNOWN_ERROR_CODE; + } else if ([error_domain isEqualToString:CBATTErrorDomain]) { + switch (static_cast<CBATTError>(error_code)) { + case CBATTErrorSuccess: + return MacOSBluetoothOperationsResult::CBATT_ERROR_SUCCESS; + case CBATTErrorInvalidHandle: + return MacOSBluetoothOperationsResult::CBATT_ERROR_INVALID_HANDLE; + case CBATTErrorReadNotPermitted: + return MacOSBluetoothOperationsResult::CBATT_ERROR_READ_NOT_PERMITTED; + case CBATTErrorWriteNotPermitted: + return MacOSBluetoothOperationsResult::CBATT_ERROR_WRITE_NOT_PERMITTED; + case CBATTErrorInvalidPdu: + return MacOSBluetoothOperationsResult::CBATT_ERROR_INVALID_PDU; + case CBATTErrorInsufficientAuthentication: + return MacOSBluetoothOperationsResult:: + CBATT_ERROR_INSUFFICIENT_AUTHENTICATION; + case CBATTErrorRequestNotSupported: + return MacOSBluetoothOperationsResult:: + CBATT_ERROR_REQUEST_NOT_SUPPORTED; + case CBATTErrorInvalidOffset: + return MacOSBluetoothOperationsResult::CBATT_ERROR_INVALID_OFFSET; + case CBATTErrorInsufficientAuthorization: + return MacOSBluetoothOperationsResult:: + CBATT_ERROR_INSUFFICIENT_AUTHORIZATION; + case CBATTErrorPrepareQueueFull: + return MacOSBluetoothOperationsResult::CBATT_ERROR_PREPARE_QUEUE_FULL; + case CBATTErrorAttributeNotFound: + return MacOSBluetoothOperationsResult::CBATT_ERROR_ATTRIBUTE_NOT_FOUND; + case CBATTErrorAttributeNotLong: + return MacOSBluetoothOperationsResult::CBATT_ERROR_ATTRIBUTE_NOT_LONG; + case CBATTErrorInsufficientEncryptionKeySize: + return MacOSBluetoothOperationsResult:: + CBATT_ERROR_INSUFFICIENT_ENCRYPTION_KEY_SIZE; + case CBATTErrorInvalidAttributeValueLength: + return MacOSBluetoothOperationsResult:: + CBATT_ERROR_INVALID_ATTRIBUTE_VALUE_LENGTH; + case CBATTErrorUnlikelyError: + return MacOSBluetoothOperationsResult::CBATT_ERROR_UNLIKELY_ERROR; + case CBATTErrorInsufficientEncryption: + return MacOSBluetoothOperationsResult:: + CBATT_ERROR_INSUFFICIENT_ENCRYPTION; + case CBATTErrorUnsupportedGroupType: + return MacOSBluetoothOperationsResult:: + CBATT_ERROR_UNSUPPORTED_GROUP_TYPE; + case CBATTErrorInsufficientResources: + return MacOSBluetoothOperationsResult:: + CBATT_ERROR_INSUFFICIENT_RESOURCES; + } + return MacOSBluetoothOperationsResult::CBERROR_UNKNOWN_ERROR_CODE; + } + // TODO(crbug.com/755667): Needs to create an histogram to record unknown + // error domains. + return MacOSBluetoothOperationsResult::UNKNOWN_ERROR_DOMAIN; +} + +} // namespace + +void RecordDidFailToConnectPeripheralResult(NSError* error) { + MacOSBluetoothOperationsResult histogram_macos_error = + GetMacOSOperationResultFromNSError(error); + UMA_HISTOGRAM_ENUMERATION( + "Bluetooth.MacOS.Errors.DidFailToConnectToPeripheral", + static_cast<int>(histogram_macos_error), + static_cast<int>(MacOSBluetoothOperationsResult::MAX)); +} + +void RecordDidDisconnectPeripheralResult(NSError* error) { + MacOSBluetoothOperationsResult histogram_macos_error = + GetMacOSOperationResultFromNSError(error); + UMA_HISTOGRAM_ENUMERATION( + "Bluetooth.MacOS.Errors.DidDisconnectPeripheral", + static_cast<int>(histogram_macos_error), + static_cast<int>(MacOSBluetoothOperationsResult::MAX)); +} + +void RecordDidDiscoverPrimaryServicesResult(NSError* error) { + MacOSBluetoothOperationsResult histogram_macos_error = + GetMacOSOperationResultFromNSError(error); + UMA_HISTOGRAM_ENUMERATION( + "Bluetooth.MacOS.Errors.DidDiscoverPrimaryServices", + static_cast<int>(histogram_macos_error), + static_cast<int>(MacOSBluetoothOperationsResult::MAX)); +} + +void RecordDidDiscoverCharacteristicsResult(NSError* error) { + MacOSBluetoothOperationsResult histogram_macos_error = + GetMacOSOperationResultFromNSError(error); + UMA_HISTOGRAM_ENUMERATION( + "Bluetooth.MacOS.Errors.DidDiscoverCharacteristics", + static_cast<int>(histogram_macos_error), + static_cast<int>(MacOSBluetoothOperationsResult::MAX)); +} + +void RecordDidUpdateValueResult(NSError* error) { + MacOSBluetoothOperationsResult histogram_macos_error = + GetMacOSOperationResultFromNSError(error); + UMA_HISTOGRAM_ENUMERATION( + "Bluetooth.MacOS.Errors.DidUpdateValue", + static_cast<int>(histogram_macos_error), + static_cast<int>(MacOSBluetoothOperationsResult::MAX)); +} + +void RecordDidWriteValueResult(NSError* error) { + MacOSBluetoothOperationsResult histogram_macos_error = + GetMacOSOperationResultFromNSError(error); + UMA_HISTOGRAM_ENUMERATION( + "Bluetooth.MacOS.Errors.DidWriteValue", + static_cast<int>(histogram_macos_error), + static_cast<int>(MacOSBluetoothOperationsResult::MAX)); +} + +void RecordDidUpdateNotificationStateResult(NSError* error) { + MacOSBluetoothOperationsResult histogram_macos_error = + GetMacOSOperationResultFromNSError(error); + UMA_HISTOGRAM_ENUMERATION( + "Bluetooth.MacOS.Errors.DidUpdateNotificationState", + static_cast<int>(histogram_macos_error), + static_cast<int>(MacOSBluetoothOperationsResult::MAX)); +} + +void RecordDidDiscoverDescriptorsResult(NSError* error) { + MacOSBluetoothOperationsResult histogram_macos_error = + GetMacOSOperationResultFromNSError(error); + UMA_HISTOGRAM_ENUMERATION( + "Bluetooth.MacOS.Errors.DidDiscoverDescriptors", + static_cast<int>(histogram_macos_error), + static_cast<int>(MacOSBluetoothOperationsResult::MAX)); +} + +void RecordDidUpdateValueForDescriptorResult(NSError* error) { + MacOSBluetoothOperationsResult histogram_macos_error = + GetMacOSOperationResultFromNSError(error); + UMA_HISTOGRAM_ENUMERATION( + "Bluetooth.MacOS.Errors.DidUpdateValueForDescriptor", + static_cast<int>(histogram_macos_error), + static_cast<int>(MacOSBluetoothOperationsResult::MAX)); +} + +void RecordDidWriteValueForDescriptorResult(NSError* error) { + MacOSBluetoothOperationsResult histogram_macos_error = + GetMacOSOperationResultFromNSError(error); + UMA_HISTOGRAM_ENUMERATION( + "Bluetooth.MacOS.Errors.DidWriteValueForDescriptor", + static_cast<int>(histogram_macos_error), + static_cast<int>(MacOSBluetoothOperationsResult::MAX)); +}
diff --git a/device/bluetooth/bluetooth_low_energy_device_mac.mm b/device/bluetooth/bluetooth_low_energy_device_mac.mm index 41dcd06b..187f3c9 100644 --- a/device/bluetooth/bluetooth_low_energy_device_mac.mm +++ b/device/bluetooth/bluetooth_low_energy_device_mac.mm
@@ -14,6 +14,7 @@ #include "base/strings/string_number_conversions.h" #include "base/strings/sys_string_conversions.h" #include "device/bluetooth/bluetooth_adapter_mac.h" +#include "device/bluetooth/bluetooth_adapter_mac_metrics.h" #include "device/bluetooth/bluetooth_device.h" #include "device/bluetooth/bluetooth_low_energy_peripheral_delegate.h" #include "device/bluetooth/bluetooth_remote_gatt_characteristic_mac.h" @@ -222,6 +223,7 @@ discovery_pending_count_ = 0; return; } + RecordDidDiscoverPrimaryServicesResult(error); if (error) { // TODO(http://crbug.com/609320): Need to pass the error. // TODO(http://crbug.com/609844): Decide what to do if discover failed @@ -268,6 +270,7 @@ void BluetoothLowEnergyDeviceMac::DidDiscoverCharacteristics( CBService* cb_service, NSError* error) { + RecordDidDiscoverCharacteristicsResult(error); if (error) { // TODO(http://crbug.com/609320): Need to pass the error. // TODO(http://crbug.com/609844): Decide what to do if discover failed @@ -347,6 +350,7 @@ void BluetoothLowEnergyDeviceMac::DidDiscoverDescriptors( CBCharacteristic* cb_characteristic, NSError* error) { + RecordDidDiscoverDescriptorsResult(error); if (error) { // TODO(http://crbug.com/609320): Need to pass the error. // TODO(http://crbug.com/609844): Decide what to do if discover failed @@ -502,6 +506,7 @@ void BluetoothLowEnergyDeviceMac::DidDisconnectPeripheral(NSError* error) { connected_ = false; VLOG(1) << *this << ": Disconnected from peripheral."; + RecordDidDisconnectPeripheralResult(error); if (error) { VLOG(1) << *this << ": Bluetooth error: " << BluetoothAdapterMac::String(error);
diff --git a/device/bluetooth/bluetooth_remote_gatt_characteristic_mac.mm b/device/bluetooth/bluetooth_remote_gatt_characteristic_mac.mm index 900f3f66..1131a84a 100644 --- a/device/bluetooth/bluetooth_remote_gatt_characteristic_mac.mm +++ b/device/bluetooth/bluetooth_remote_gatt_characteristic_mac.mm
@@ -9,6 +9,7 @@ #include "base/strings/sys_string_conversions.h" #include "base/threading/thread_task_runner_handle.h" #include "device/bluetooth/bluetooth_adapter_mac.h" +#include "device/bluetooth/bluetooth_adapter_mac_metrics.h" #include "device/bluetooth/bluetooth_device_mac.h" #include "device/bluetooth/bluetooth_gatt_notify_session.h" #include "device/bluetooth/bluetooth_remote_gatt_descriptor_mac.h" @@ -251,6 +252,7 @@ CHECK_EQ(GetCBPeripheral().state, CBPeripheralStateConnected); // This method is called when the characteristic is read and when a // notification is received. + RecordDidUpdateValueResult(error); if (HasPendingRead()) { std::pair<ValueCallback, ErrorCallback> callbacks; callbacks.swap(read_characteristic_value_callbacks_); @@ -289,6 +291,7 @@ } void BluetoothRemoteGattCharacteristicMac::DidWriteValue(NSError* error) { + RecordDidWriteValueResult(error); // We could have called cancelPeripheralConnection, which causes // [CBPeripheral state] to be CBPeripheralStateDisconnected, before or during // a write without response callback so we flush all pending writes. @@ -340,6 +343,7 @@ VLOG(1) << *this << ": No pending notification update for characteristic."; return; } + RecordDidUpdateNotificationStateResult(error); if (error) { BluetoothGattService::GattErrorCode error_code = BluetoothDeviceMac::GetGattErrorCodeFromNSError(error);
diff --git a/device/bluetooth/bluetooth_remote_gatt_descriptor_mac.mm b/device/bluetooth/bluetooth_remote_gatt_descriptor_mac.mm index 173adcdf..84eaeb71 100644 --- a/device/bluetooth/bluetooth_remote_gatt_descriptor_mac.mm +++ b/device/bluetooth/bluetooth_remote_gatt_descriptor_mac.mm
@@ -9,6 +9,7 @@ #include "base/strings/sys_string_conversions.h" #include "base/threading/thread_task_runner_handle.h" #import "device/bluetooth/bluetooth_adapter_mac.h" +#include "device/bluetooth/bluetooth_adapter_mac_metrics.h" #import "device/bluetooth/bluetooth_remote_gatt_characteristic_mac.h" using base::mac::ObjCCast; @@ -139,6 +140,7 @@ std::pair<ValueCallback, ErrorCallback> callbacks; callbacks.swap(read_value_callbacks_); value_read_or_write_in_progress_ = false; + RecordDidUpdateValueForDescriptorResult(error); if (error) { BluetoothGattService::GattErrorCode error_code = BluetoothDeviceMac::GetGattErrorCodeFromNSError(error); @@ -162,6 +164,7 @@ std::pair<base::Closure, ErrorCallback> callbacks; callbacks.swap(write_value_callbacks_); value_read_or_write_in_progress_ = false; + RecordDidWriteValueForDescriptorResult(error); if (error) { BluetoothGattService::GattErrorCode error_code = BluetoothDeviceMac::GetGattErrorCodeFromNSError(error);
diff --git a/docs/layout_tests_linux.md b/docs/layout_tests_linux.md index 1dfd168..466a7f9 100644 --- a/docs/layout_tests_linux.md +++ b/docs/layout_tests_linux.md
@@ -26,7 +26,7 @@ ```shell sudo apt-get install apache2 wdiff php5-cgi ttf-indic-fonts \ - msttcorefonts ttf-dejavu-core ttf-kochi-gothic ttf-kochi-mincho \ + msttcorefonts ttf-dejavu-core fonts-ipafont \ ttf-thai-tlwg ```
diff --git a/extensions/browser/api/runtime/runtime_apitest.cc b/extensions/browser/api/runtime/runtime_apitest.cc index 596ffd5d..1e15ff0 100644 --- a/extensions/browser/api/runtime/runtime_apitest.cc +++ b/extensions/browser/api/runtime/runtime_apitest.cc
@@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "base/run_loop.h" #include "chrome/browser/apps/app_browsertest_util.h" #include "chrome/browser/extensions/extension_apitest.h" #include "chrome/browser/extensions/extension_function_test_utils.h"
diff --git a/extensions/browser/extension_function_histogram_value.h b/extensions/browser/extension_function_histogram_value.h index e83baa63..40115fc4 100644 --- a/extensions/browser/extension_function_histogram_value.h +++ b/extensions/browser/extension_function_histogram_value.h
@@ -1251,6 +1251,7 @@ WEBVIEWINTERNAL_GETAUDIOSTATE, FILEMANAGERPRIVATE_GETRECENTFILES, FILEMANAGERPRIVATE_RENAMEVOLUME, + AUTOTESTPRIVATE_SETMOUSEREVERSESCROLL, // Last entry: Add new entries above, then run: // python tools/metrics/histograms/update_extension_histograms.py ENUM_BOUNDARY
diff --git a/extensions/browser/guest_view/web_view/web_view_guest.cc b/extensions/browser/guest_view/web_view/web_view_guest.cc index 512f0e0..6654820 100644 --- a/extensions/browser/guest_view/web_view/web_view_guest.cc +++ b/extensions/browser/guest_view/web_view/web_view_guest.cc
@@ -496,8 +496,9 @@ void WebViewGuest::GuestReady() { // The guest RenderView should always live in an isolated guest process. CHECK(web_contents()->GetRenderProcessHost()->IsForGuestsOnly()); - Send(new ExtensionMsg_SetFrameName( - web_contents()->GetRenderViewHost()->GetRoutingID(), name_)); + content::RenderFrameHost* main_frame = web_contents()->GetMainFrame(); + main_frame->Send( + new ExtensionMsg_SetFrameName(main_frame->GetRoutingID(), name_)); // We don't want to accidentally set the opacity of an interstitial page. // WebContents::GetRenderWidgetHostView will return the RWHV of an @@ -1182,7 +1183,9 @@ return; name_ = name; - Send(new ExtensionMsg_SetFrameName(routing_id(), name_)); + content::RenderFrameHost* main_frame = web_contents()->GetMainFrame(); + main_frame->Send( + new ExtensionMsg_SetFrameName(main_frame->GetRoutingID(), name_)); } void WebViewGuest::SetZoom(double zoom_factor) {
diff --git a/extensions/renderer/api_activity_logger_unittest.cc b/extensions/renderer/api_activity_logger_unittest.cc index 67768b3..a76c5b0 100644 --- a/extensions/renderer/api_activity_logger_unittest.cc +++ b/extensions/renderer/api_activity_logger_unittest.cc
@@ -5,6 +5,7 @@ #include "extensions/renderer/api_activity_logger.h" #include "base/memory/ptr_util.h" +#include "base/run_loop.h" #include "content/public/test/mock_render_thread.h" #include "extensions/common/extension_builder.h" #include "extensions/common/extension_messages.h"
diff --git a/extensions/renderer/async_scripts_run_info.cc b/extensions/renderer/async_scripts_run_info.cc index b267f9e..508518d2 100644 --- a/extensions/renderer/async_scripts_run_info.cc +++ b/extensions/renderer/async_scripts_run_info.cc
@@ -6,6 +6,7 @@ #include "base/metrics/histogram_macros.h" #include "content/public/renderer/render_frame.h" +#include "extensions/renderer/scripts_run_info.h" namespace extensions { @@ -34,8 +35,12 @@ } } -void AsyncScriptsRunInfo::OnCompleted(const base::TimeTicks& timestamp) { +void AsyncScriptsRunInfo::OnCompleted(const base::TimeTicks& timestamp, + base::Optional<base::TimeDelta> elapsed) { last_completed_time_ = timestamp; + if (elapsed) { + ScriptsRunInfo::LogLongInjectionTaskTime(run_location_, *elapsed); + } } } // namespace extensions
diff --git a/extensions/renderer/async_scripts_run_info.h b/extensions/renderer/async_scripts_run_info.h index fcdb6716..d48d42c0 100644 --- a/extensions/renderer/async_scripts_run_info.h +++ b/extensions/renderer/async_scripts_run_info.h
@@ -6,6 +6,7 @@ #define EXTENSIONS_RENDERER_ASYNC_SCRIPTS_RUN_INFO_H_ #include "base/memory/ref_counted.h" +#include "base/optional.h" #include "extensions/common/user_script.h" @@ -17,7 +18,8 @@ public: AsyncScriptsRunInfo(UserScript::RunLocation location); void WillExecute(const base::TimeTicks& timestamp); - void OnCompleted(const base::TimeTicks& timestamp); + void OnCompleted(const base::TimeTicks& timestamp, + base::Optional<base::TimeDelta> elapsed); private: friend class base::RefCounted<AsyncScriptsRunInfo>;
diff --git a/extensions/renderer/extension_frame_helper.cc b/extensions/renderer/extension_frame_helper.cc index 4519797..7057e0a 100644 --- a/extensions/renderer/extension_frame_helper.cc +++ b/extensions/renderer/extension_frame_helper.cc
@@ -256,6 +256,7 @@ OnNotifyRendererViewType) IPC_MESSAGE_HANDLER(ExtensionMsg_Response, OnExtensionResponse) IPC_MESSAGE_HANDLER(ExtensionMsg_MessageInvoke, OnExtensionMessageInvoke) + IPC_MESSAGE_HANDLER(ExtensionMsg_SetFrameName, OnSetFrameName) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() return handled; @@ -332,6 +333,10 @@ render_frame(), extension_id, module_name, function_name, args); } +void ExtensionFrameHelper::OnSetFrameName(const std::string& name) { + render_frame()->GetWebFrame()->SetName(blink::WebString::FromUTF8(name)); +} + void ExtensionFrameHelper::OnDestruct() { delete this; }
diff --git a/extensions/renderer/extension_frame_helper.h b/extensions/renderer/extension_frame_helper.h index ac426fd..815a1d6 100644 --- a/extensions/renderer/extension_frame_helper.h +++ b/extensions/renderer/extension_frame_helper.h
@@ -129,6 +129,7 @@ const std::string& module_name, const std::string& function_name, const base::ListValue& args); + void OnSetFrameName(const std::string& name); // Type of view associated with the RenderFrame. ViewType view_type_;
diff --git a/extensions/renderer/extension_helper.cc b/extensions/renderer/extension_helper.cc index 7c6ee40..fd8c928 100644 --- a/extensions/renderer/extension_helper.cc +++ b/extensions/renderer/extension_helper.cc
@@ -34,7 +34,6 @@ bool ExtensionHelper::OnMessageReceived(const IPC::Message& message) { bool handled = true; IPC_BEGIN_MESSAGE_MAP(ExtensionHelper, message) - IPC_MESSAGE_HANDLER(ExtensionMsg_SetFrameName, OnSetFrameName) IPC_MESSAGE_HANDLER(ExtensionMsg_AppWindowClosed, OnAppWindowClosed) IPC_MESSAGE_UNHANDLED(handled = false) @@ -46,12 +45,6 @@ delete this; } -void ExtensionHelper::OnSetFrameName(const std::string& name) { - blink::WebView* web_view = render_view()->GetWebView(); - if (web_view) - web_view->MainFrame()->SetName(blink::WebString::FromUTF8(name)); -} - void ExtensionHelper::OnAppWindowClosed() { // ExtensionMsg_AppWindowClosed is always sent to the current, non-swapped-out // RenderView where the main frame is a local frame.
diff --git a/extensions/renderer/extension_helper.h b/extensions/renderer/extension_helper.h index 9bcd10a..71d0b370 100644 --- a/extensions/renderer/extension_helper.h +++ b/extensions/renderer/extension_helper.h
@@ -25,7 +25,6 @@ void OnDestruct() override; void OnAppWindowClosed(); - void OnSetFrameName(const std::string& name); Dispatcher* dispatcher_;
diff --git a/extensions/renderer/module_system_test.cc b/extensions/renderer/module_system_test.cc index 92d0adb..198765b 100644 --- a/extensions/renderer/module_system_test.cc +++ b/extensions/renderer/module_system_test.cc
@@ -18,6 +18,7 @@ #include "base/lazy_instance.h" #include "base/memory/ptr_util.h" #include "base/path_service.h" +#include "base/run_loop.h" #include "base/strings/string_piece.h" #include "extensions/common/extension_builder.h" #include "extensions/common/extension_paths.h"
diff --git a/extensions/renderer/mojo/keep_alive_client_unittest.cc b/extensions/renderer/mojo/keep_alive_client_unittest.cc index 5028bba..b6a4166 100644 --- a/extensions/renderer/mojo/keep_alive_client_unittest.cc +++ b/extensions/renderer/mojo/keep_alive_client_unittest.cc
@@ -6,6 +6,7 @@ #include "base/macros.h" #include "base/memory/ptr_util.h" +#include "base/run_loop.h" #include "extensions/common/extension_builder.h" #include "extensions/common/mojo/keep_alive.mojom.h" #include "extensions/common/value_builder.h"
diff --git a/extensions/renderer/script_injection.cc b/extensions/renderer/script_injection.cc index 95de38c4..2c1b00de 100644 --- a/extensions/renderer/script_injection.cc +++ b/extensions/renderer/script_injection.cc
@@ -103,7 +103,7 @@ if (!start_time_.is_null()) { elapsed = timestamp - start_time_; if (async_run_info_) - async_run_info_->OnCompleted(timestamp); + async_run_info_->OnCompleted(timestamp, elapsed); } injection_->OnJsInjectionCompleted(result, elapsed); }
diff --git a/extensions/renderer/scripts_run_info.cc b/extensions/renderer/scripts_run_info.cc index a1681f7..2e7af81 100644 --- a/extensions/renderer/scripts_run_info.cc +++ b/extensions/renderer/scripts_run_info.cc
@@ -34,6 +34,8 @@ routing_id_, executing_scripts, frame_url_)); } + base::TimeDelta elapsed = timer.Elapsed(); + switch (run_location_) { case UserScript::DOCUMENT_START: UMA_HISTOGRAM_COUNTS_100("Extensions.InjectStart_CssCount", num_css); @@ -42,7 +44,8 @@ UMA_HISTOGRAM_COUNTS_100("Extensions.InjectStart_BlockingScriptCount", num_blocking_js); } else if (num_css || num_js) { - UMA_HISTOGRAM_TIMES("Extensions.InjectStart_Time", timer.Elapsed()); + UMA_HISTOGRAM_TIMES("Extensions.InjectStart_Time", elapsed); + LogLongInjectionTaskTime(run_location_, elapsed); } break; case UserScript::DOCUMENT_END: @@ -51,7 +54,8 @@ UMA_HISTOGRAM_COUNTS_100("Extensions.InjectEnd_BlockingScriptCount", num_blocking_js); } else if (num_js) { - UMA_HISTOGRAM_TIMES("Extensions.InjectEnd_Time", timer.Elapsed()); + UMA_HISTOGRAM_TIMES("Extensions.InjectEnd_Time", elapsed); + LogLongInjectionTaskTime(run_location_, elapsed); } break; case UserScript::DOCUMENT_IDLE: @@ -60,7 +64,8 @@ UMA_HISTOGRAM_COUNTS_100("Extensions.InjectIdle_BlockingScriptCount", num_blocking_js); } else if (num_js) { - UMA_HISTOGRAM_TIMES("Extensions.InjectIdle_Time", timer.Elapsed()); + UMA_HISTOGRAM_TIMES("Extensions.InjectIdle_Time", elapsed); + LogLongInjectionTaskTime(run_location_, elapsed); } break; case UserScript::RUN_DEFERRED: @@ -73,4 +78,33 @@ } } +void ScriptsRunInfo::LogLongInjectionTaskTime( + UserScript::RunLocation run_location, + const base::TimeDelta& elapsed) { + // We only record tasks longer than 50 milliseconds. This threshold aligns + // with the definition of "long task" in Long Tasks API + // (https://w3c.github.io/longtasks/). + const base::TimeDelta kLongTaskThreshold = + base::TimeDelta::FromMilliseconds(50); + if (elapsed < kLongTaskThreshold) + return; + + switch (run_location) { + case UserScript::DOCUMENT_START: + UMA_HISTOGRAM_TIMES("Extensions.LongInjectionTaskTime.DocumentStart", + elapsed); + break; + case UserScript::DOCUMENT_END: + UMA_HISTOGRAM_TIMES("Extensions.LongInjectionTaskTime.DocumentEnd", + elapsed); + break; + case UserScript::DOCUMENT_IDLE: + UMA_HISTOGRAM_TIMES("Extensions.LongInjectionTaskTime.DocumentIdle", + elapsed); + break; + default: + break; + } +} + } // namespace extensions
diff --git a/extensions/renderer/scripts_run_info.h b/extensions/renderer/scripts_run_info.h index 6eedac69..2d133fc6 100644 --- a/extensions/renderer/scripts_run_info.h +++ b/extensions/renderer/scripts_run_info.h
@@ -47,6 +47,9 @@ // true, this also informs the browser of the script run. void LogRun(bool send_script_activity); + static void LogLongInjectionTaskTime(UserScript::RunLocation run_location, + const base::TimeDelta& elapsed); + private: // The routinig id to use to notify the browser of any injections. Since the // frame may be deleted in injection, we don't hold on to a reference to it
diff --git a/extensions/test/result_catcher.cc b/extensions/test/result_catcher.cc index f2e9801..3f5f258 100644 --- a/extensions/test/result_catcher.cc +++ b/extensions/test/result_catcher.cc
@@ -4,6 +4,7 @@ #include "extensions/test/result_catcher.h" +#include "base/run_loop.h" #include "content/public/browser/notification_service.h" #include "content/public/test/test_utils.h" #include "extensions/browser/notification_types.h"
diff --git a/gpu/GLES2/gl2chromium_autogen.h b/gpu/GLES2/gl2chromium_autogen.h index 3fcb446..a33d7ba1 100644 --- a/gpu/GLES2/gl2chromium_autogen.h +++ b/gpu/GLES2/gl2chromium_autogen.h
@@ -399,5 +399,8 @@ GLES2_GET_FUN(UnlockDiscardableTextureCHROMIUM) #define glLockDiscardableTextureCHROMIUM \ GLES2_GET_FUN(LockDiscardableTextureCHROMIUM) +#define glBeginRasterCHROMIUM GLES2_GET_FUN(BeginRasterCHROMIUM) +#define glRasterCHROMIUM GLES2_GET_FUN(RasterCHROMIUM) +#define glEndRasterCHROMIUM GLES2_GET_FUN(EndRasterCHROMIUM) #endif // GPU_GLES2_GL2CHROMIUM_AUTOGEN_H_
diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py index 384892e..b97139e3 100755 --- a/gpu/command_buffer/build_gles2_cmd_buffer.py +++ b/gpu/command_buffer/build_gles2_cmd_buffer.py
@@ -4590,6 +4590,30 @@ 'client_test': False, 'extension': True, }, + 'BeginRasterCHROMIUM': { + 'decoder_func': 'DoBeginRasterCHROMIUM', + 'impl_func': True, + 'unit_test': False, + 'extension': 'CHROMIUM_raster_transport', + 'extension_flag': 'chromium_raster_transport', + }, + 'RasterCHROMIUM': { + 'type': 'Custom', + 'decoder_func': 'DoRasterCHROMIUM', + 'impl_func': False, + 'immediate': False, + 'data_transfer_methods': ['shm'], + 'needs_size': True, + 'extension': 'CHROMIUM_raster_transport', + 'extension_flag': 'chromium_raster_transport', + }, + 'EndRasterCHROMIUM': { + 'decoder_func': 'DoEndRasterCHROMIUM', + 'impl_func': True, + 'unit_test': False, + 'extension': 'CHROMIUM_raster_transport', + 'extension_flag': 'chromium_raster_transport', + }, }
diff --git a/gpu/command_buffer/client/BUILD.gn b/gpu/command_buffer/client/BUILD.gn index 98e165d..45919991 100644 --- a/gpu/command_buffer/client/BUILD.gn +++ b/gpu/command_buffer/client/BUILD.gn
@@ -15,6 +15,13 @@ ":client_sources", ] } + + if (!is_nacl) { + deps = [ + "//cc/paint", + "//skia", + ] + } } group("gles2_cmd_helper") {
diff --git a/gpu/command_buffer/client/DEPS b/gpu/command_buffer/client/DEPS index 867a547a..58bc085 100644 --- a/gpu/command_buffer/client/DEPS +++ b/gpu/command_buffer/client/DEPS
@@ -1,3 +1,5 @@ include_rules = [ "+ui/latency", + "+cc/paint", + "+third_party/skia", ]
diff --git a/gpu/command_buffer/client/gles2_c_lib_autogen.h b/gpu/command_buffer/client/gles2_c_lib_autogen.h index b4f08d75..f0d6e36 100644 --- a/gpu/command_buffer/client/gles2_c_lib_autogen.h +++ b/gpu/command_buffer/client/gles2_c_lib_autogen.h
@@ -1777,6 +1777,26 @@ bool GL_APIENTRY GLES2LockDiscardableTextureCHROMIUM(GLuint texture_id) { return gles2::GetGLContext()->LockDiscardableTextureCHROMIUM(texture_id); } +void GL_APIENTRY GLES2BeginRasterCHROMIUM(GLuint texture_id, + GLuint sk_color, + GLuint msaa_sample_count, + GLboolean can_use_lcd_text, + GLboolean use_distance_field_text, + GLint pixel_config) { + gles2::GetGLContext()->BeginRasterCHROMIUM( + texture_id, sk_color, msaa_sample_count, can_use_lcd_text, + use_distance_field_text, pixel_config); +} +void GL_APIENTRY GLES2RasterCHROMIUM(const cc::DisplayItemList* list, + GLint x, + GLint y, + GLint w, + GLint h) { + gles2::GetGLContext()->RasterCHROMIUM(list, x, y, w, h); +} +void GL_APIENTRY GLES2EndRasterCHROMIUM() { + gles2::GetGLContext()->EndRasterCHROMIUM(); +} namespace gles2 { @@ -3122,6 +3142,18 @@ glLockDiscardableTextureCHROMIUM), }, { + "glBeginRasterCHROMIUM", + reinterpret_cast<GLES2FunctionPointer>(glBeginRasterCHROMIUM), + }, + { + "glRasterCHROMIUM", + reinterpret_cast<GLES2FunctionPointer>(glRasterCHROMIUM), + }, + { + "glEndRasterCHROMIUM", + reinterpret_cast<GLES2FunctionPointer>(glEndRasterCHROMIUM), + }, + { NULL, NULL, }, };
diff --git a/gpu/command_buffer/client/gles2_cmd_helper_autogen.h b/gpu/command_buffer/client/gles2_cmd_helper_autogen.h index adf0baa..b4ee0e9e 100644 --- a/gpu/command_buffer/client/gles2_cmd_helper_autogen.h +++ b/gpu/command_buffer/client/gles2_cmd_helper_autogen.h
@@ -3289,4 +3289,39 @@ } } +void BeginRasterCHROMIUM(GLuint texture_id, + GLuint sk_color, + GLuint msaa_sample_count, + GLboolean can_use_lcd_text, + GLboolean use_distance_field_text, + GLint pixel_config) { + gles2::cmds::BeginRasterCHROMIUM* c = + GetCmdSpace<gles2::cmds::BeginRasterCHROMIUM>(); + if (c) { + c->Init(texture_id, sk_color, msaa_sample_count, can_use_lcd_text, + use_distance_field_text, pixel_config); + } +} + +void RasterCHROMIUM(uint32_t list_shm_id, + uint32_t list_shm_offset, + GLint x, + GLint y, + GLint w, + GLint h, + uint32_t data_size) { + gles2::cmds::RasterCHROMIUM* c = GetCmdSpace<gles2::cmds::RasterCHROMIUM>(); + if (c) { + c->Init(list_shm_id, list_shm_offset, x, y, w, h, data_size); + } +} + +void EndRasterCHROMIUM() { + gles2::cmds::EndRasterCHROMIUM* c = + GetCmdSpace<gles2::cmds::EndRasterCHROMIUM>(); + if (c) { + c->Init(); + } +} + #endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_CMD_HELPER_AUTOGEN_H_
diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc index c36dc63e..9d63f5f 100644 --- a/gpu/command_buffer/client/gles2_implementation.cc +++ b/gpu/command_buffer/client/gles2_implementation.cc
@@ -29,6 +29,7 @@ #include "base/trace_event/memory_dump_manager.h" #include "base/trace_event/process_memory_dump.h" #include "base/trace_event/trace_event.h" +#include "build/build_config.h" #include "gpu/command_buffer/client/buffer_tracker.h" #include "gpu/command_buffer/client/gles2_cmd_helper.h" #include "gpu/command_buffer/client/gpu_control.h" @@ -48,6 +49,10 @@ #include "gpu/command_buffer/client/gpu_switches.h" #endif +#if !defined(OS_NACL) +#include "cc/paint/display_item_list.h" // nogncheck +#endif + #if !defined(__native_client__) #include "ui/gfx/color_space.h" #include "ui/gfx/ipc/color/gfx_param_traits.h" @@ -7131,6 +7136,73 @@ CheckGLError(); } +void GLES2Implementation::RasterCHROMIUM(const cc::DisplayItemList* list, + GLint x, + GLint y, + GLint w, + GLint h) { +#if defined(OS_NACL) + NOTREACHED(); +#else + GPU_CLIENT_SINGLE_THREAD_CHECK(); + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glRasterChromium(" << list << ", " + << x << ", " << y << ", " << w << ", " << h << ")"); + + // TODO(enne): tune these numbers + // TODO(enne): convert these types here and in transfer buffer to be size_t. + static constexpr unsigned int kMinAlloc = 16 * 1024; + static constexpr unsigned int kBlockAlloc = 512 * 1024; + + unsigned int free_size = std::max(transfer_buffer_->GetFreeSize(), kMinAlloc); + ScopedTransferBufferPtr buffer(free_size, helper_, transfer_buffer_); + DCHECK(buffer.valid()); + + char* memory = static_cast<char*>(buffer.address()); + size_t written_bytes = 0; + size_t free_bytes = buffer.size(); + + cc::PaintOp::SerializeOptions options; + + // TODO(enne): need to implement alpha folding optimization from POB. + // TODO(enne): don't access private members of DisplayItemList. + gfx::Rect playback_rect(x, y, w, h); + std::vector<size_t> indices = list->rtree_.Search(playback_rect); + for (cc::PaintOpBuffer::FlatteningIterator iter(&list->paint_op_buffer_, + &indices); + iter; ++iter) { + const cc::PaintOp* op = *iter; + size_t size = op->Serialize(memory + written_bytes, free_bytes, options); + if (!size) { + buffer.Shrink(written_bytes); + helper_->RasterCHROMIUM(buffer.shm_id(), buffer.offset(), x, y, w, h, + written_bytes); + buffer.Reset(kBlockAlloc); + memory = static_cast<char*>(buffer.address()); + written_bytes = 0; + free_bytes = buffer.size(); + + size = op->Serialize(memory + written_bytes, free_bytes, options); + } + DCHECK_GE(size, 4u); + DCHECK_EQ(size % cc::PaintOpBuffer::PaintOpAlign, 0u); + DCHECK_LE(size, free_bytes); + DCHECK_EQ(free_bytes + written_bytes, buffer.size()); + + written_bytes += size; + free_bytes -= size; + } + + buffer.Shrink(written_bytes); + + if (!written_bytes) + return; + helper_->RasterCHROMIUM(buffer.shm_id(), buffer.offset(), x, y, w, h, + buffer.size()); + + CheckGLError(); +#endif +} + // Include the auto-generated part of this file. We split this because it means // we can easily edit the non-auto generated parts right here in this file // instead of having to edit some template or the code generator.
diff --git a/gpu/command_buffer/client/gles2_implementation_autogen.h b/gpu/command_buffer/client/gles2_implementation_autogen.h index 220e26d..0540db6 100644 --- a/gpu/command_buffer/client/gles2_implementation_autogen.h +++ b/gpu/command_buffer/client/gles2_implementation_autogen.h
@@ -1244,4 +1244,19 @@ bool LockDiscardableTextureCHROMIUM(GLuint texture_id) override; +void BeginRasterCHROMIUM(GLuint texture_id, + GLuint sk_color, + GLuint msaa_sample_count, + GLboolean can_use_lcd_text, + GLboolean use_distance_field_text, + GLint pixel_config) override; + +void RasterCHROMIUM(const cc::DisplayItemList* list, + GLint x, + GLint y, + GLint w, + GLint h) override; + +void EndRasterCHROMIUM() override; + #endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_AUTOGEN_H_
diff --git a/gpu/command_buffer/client/gles2_implementation_impl_autogen.h b/gpu/command_buffer/client/gles2_implementation_impl_autogen.h index 71a6edb0..e5655de7 100644 --- a/gpu/command_buffer/client/gles2_implementation_impl_autogen.h +++ b/gpu/command_buffer/client/gles2_implementation_impl_autogen.h
@@ -3547,4 +3547,31 @@ CheckGLError(); } +void GLES2Implementation::BeginRasterCHROMIUM(GLuint texture_id, + GLuint sk_color, + GLuint msaa_sample_count, + GLboolean can_use_lcd_text, + GLboolean use_distance_field_text, + GLint pixel_config) { + GPU_CLIENT_SINGLE_THREAD_CHECK(); + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBeginRasterCHROMIUM(" + << texture_id << ", " << sk_color << ", " + << msaa_sample_count << ", " + << GLES2Util::GetStringBool(can_use_lcd_text) << ", " + << GLES2Util::GetStringBool(use_distance_field_text) + << ", " << pixel_config << ")"); + helper_->BeginRasterCHROMIUM(texture_id, sk_color, msaa_sample_count, + can_use_lcd_text, use_distance_field_text, + pixel_config); + CheckGLError(); +} + +void GLES2Implementation::EndRasterCHROMIUM() { + GPU_CLIENT_SINGLE_THREAD_CHECK(); + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glEndRasterCHROMIUM(" + << ")"); + helper_->EndRasterCHROMIUM(); + CheckGLError(); +} + #endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_IMPL_AUTOGEN_H_
diff --git a/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h b/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h index e157a11..95c61b3 100644 --- a/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h +++ b/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h
@@ -3081,4 +3081,26 @@ gl_->SetEnableDCLayersCHROMIUM(true); EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); } + +TEST_F(GLES2ImplementationTest, BeginRasterCHROMIUM) { + struct Cmds { + cmds::BeginRasterCHROMIUM cmd; + }; + Cmds expected; + expected.cmd.Init(1, 2, 3, true, true, 6); + + gl_->BeginRasterCHROMIUM(1, 2, 3, true, true, 6); + EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); +} + +TEST_F(GLES2ImplementationTest, EndRasterCHROMIUM) { + struct Cmds { + cmds::EndRasterCHROMIUM cmd; + }; + Cmds expected; + expected.cmd.Init(); + + gl_->EndRasterCHROMIUM(); + EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); +} #endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_UNITTEST_AUTOGEN_H_
diff --git a/gpu/command_buffer/client/gles2_interface.h b/gpu/command_buffer/client/gles2_interface.h index 2dd040a..030ecdf 100644 --- a/gpu/command_buffer/client/gles2_interface.h +++ b/gpu/command_buffer/client/gles2_interface.h
@@ -9,6 +9,10 @@ #include "base/compiler_specific.h" +namespace cc { +class DisplayItemList; +} + extern "C" typedef struct _ClientBuffer* ClientBuffer; extern "C" typedef struct _GLColorSpace* GLColorSpace;
diff --git a/gpu/command_buffer/client/gles2_interface_autogen.h b/gpu/command_buffer/client/gles2_interface_autogen.h index 6c2a551..2469875 100644 --- a/gpu/command_buffer/client/gles2_interface_autogen.h +++ b/gpu/command_buffer/client/gles2_interface_autogen.h
@@ -922,4 +922,16 @@ virtual void InitializeDiscardableTextureCHROMIUM(GLuint texture_id) = 0; virtual void UnlockDiscardableTextureCHROMIUM(GLuint texture_id) = 0; virtual bool LockDiscardableTextureCHROMIUM(GLuint texture_id) = 0; +virtual void BeginRasterCHROMIUM(GLuint texture_id, + GLuint sk_color, + GLuint msaa_sample_count, + GLboolean can_use_lcd_text, + GLboolean use_distance_field_text, + GLint pixel_config) = 0; +virtual void RasterCHROMIUM(const cc::DisplayItemList* list, + GLint x, + GLint y, + GLint w, + GLint h) = 0; +virtual void EndRasterCHROMIUM() = 0; #endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_INTERFACE_AUTOGEN_H_
diff --git a/gpu/command_buffer/client/gles2_interface_stub_autogen.h b/gpu/command_buffer/client/gles2_interface_stub_autogen.h index dbe13d1..c810f9e3 100644 --- a/gpu/command_buffer/client/gles2_interface_stub_autogen.h +++ b/gpu/command_buffer/client/gles2_interface_stub_autogen.h
@@ -895,4 +895,16 @@ void InitializeDiscardableTextureCHROMIUM(GLuint texture_id) override; void UnlockDiscardableTextureCHROMIUM(GLuint texture_id) override; bool LockDiscardableTextureCHROMIUM(GLuint texture_id) override; +void BeginRasterCHROMIUM(GLuint texture_id, + GLuint sk_color, + GLuint msaa_sample_count, + GLboolean can_use_lcd_text, + GLboolean use_distance_field_text, + GLint pixel_config) override; +void RasterCHROMIUM(const cc::DisplayItemList* list, + GLint x, + GLint y, + GLint w, + GLint h) override; +void EndRasterCHROMIUM() override; #endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_INTERFACE_STUB_AUTOGEN_H_
diff --git a/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h b/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h index abdbd078..ab4e8d0 100644 --- a/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h +++ b/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h
@@ -1207,4 +1207,17 @@ GLuint /* texture_id */) { return 0; } +void GLES2InterfaceStub::BeginRasterCHROMIUM( + GLuint /* texture_id */, + GLuint /* sk_color */, + GLuint /* msaa_sample_count */, + GLboolean /* can_use_lcd_text */, + GLboolean /* use_distance_field_text */, + GLint /* pixel_config */) {} +void GLES2InterfaceStub::RasterCHROMIUM(const cc::DisplayItemList* /* list */, + GLint /* x */, + GLint /* y */, + GLint /* w */, + GLint /* h */) {} +void GLES2InterfaceStub::EndRasterCHROMIUM() {} #endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_INTERFACE_STUB_IMPL_AUTOGEN_H_
diff --git a/gpu/command_buffer/client/gles2_trace_implementation_autogen.h b/gpu/command_buffer/client/gles2_trace_implementation_autogen.h index bdcc2ef..45300bf 100644 --- a/gpu/command_buffer/client/gles2_trace_implementation_autogen.h +++ b/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
@@ -895,4 +895,16 @@ void InitializeDiscardableTextureCHROMIUM(GLuint texture_id) override; void UnlockDiscardableTextureCHROMIUM(GLuint texture_id) override; bool LockDiscardableTextureCHROMIUM(GLuint texture_id) override; +void BeginRasterCHROMIUM(GLuint texture_id, + GLuint sk_color, + GLuint msaa_sample_count, + GLboolean can_use_lcd_text, + GLboolean use_distance_field_text, + GLint pixel_config) override; +void RasterCHROMIUM(const cc::DisplayItemList* list, + GLint x, + GLint y, + GLint w, + GLint h) override; +void EndRasterCHROMIUM() override; #endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_TRACE_IMPLEMENTATION_AUTOGEN_H_
diff --git a/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h b/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h index b0cf7a8b..83bff0b5 100644 --- a/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h +++ b/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h
@@ -2584,4 +2584,31 @@ return gl_->LockDiscardableTextureCHROMIUM(texture_id); } +void GLES2TraceImplementation::BeginRasterCHROMIUM( + GLuint texture_id, + GLuint sk_color, + GLuint msaa_sample_count, + GLboolean can_use_lcd_text, + GLboolean use_distance_field_text, + GLint pixel_config) { + TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::BeginRasterCHROMIUM"); + gl_->BeginRasterCHROMIUM(texture_id, sk_color, msaa_sample_count, + can_use_lcd_text, use_distance_field_text, + pixel_config); +} + +void GLES2TraceImplementation::RasterCHROMIUM(const cc::DisplayItemList* list, + GLint x, + GLint y, + GLint w, + GLint h) { + TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::RasterCHROMIUM"); + gl_->RasterCHROMIUM(list, x, y, w, h); +} + +void GLES2TraceImplementation::EndRasterCHROMIUM() { + TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::EndRasterCHROMIUM"); + gl_->EndRasterCHROMIUM(); +} + #endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_TRACE_IMPLEMENTATION_IMPL_AUTOGEN_H_
diff --git a/gpu/command_buffer/cmd_buffer_functions.txt b/gpu/command_buffer/cmd_buffer_functions.txt index 6b32f39..d8f976f 100644 --- a/gpu/command_buffer/cmd_buffer_functions.txt +++ b/gpu/command_buffer/cmd_buffer_functions.txt
@@ -379,3 +379,7 @@ GL_APICALL void GL_APIENTRY glUnlockDiscardableTextureCHROMIUM (GLuint texture_id); GL_APICALL bool GL_APIENTRY glLockDiscardableTextureCHROMIUM (GLuint texture_id); +// Extension CHROMIUM_raster_transport +GL_APICALL void GL_APIENTRY glBeginRasterCHROMIUM (GLuint texture_id, GLuint sk_color, GLuint msaa_sample_count, GLboolean can_use_lcd_text, GLboolean use_distance_field_text, GLint pixel_config); +GL_APICALL void GL_APIENTRY glRasterCHROMIUM (const cc::DisplayItemList* list, GLint x, GLint y, GLint w, GLint h); +GL_APICALL void GL_APIENTRY glEndRasterCHROMIUM (void);
diff --git a/gpu/command_buffer/common/gles2_cmd_format_autogen.h b/gpu/command_buffer/common/gles2_cmd_format_autogen.h index 8ea10c5..22636d1b 100644 --- a/gpu/command_buffer/common/gles2_cmd_format_autogen.h +++ b/gpu/command_buffer/common/gles2_cmd_format_autogen.h
@@ -16138,4 +16138,169 @@ offsetof(LockDiscardableTextureCHROMIUM, texture_id) == 4, "offset of LockDiscardableTextureCHROMIUM texture_id should be 4"); +struct BeginRasterCHROMIUM { + typedef BeginRasterCHROMIUM ValueType; + static const CommandId kCmdId = kBeginRasterCHROMIUM; + static const cmd::ArgFlags kArgFlags = cmd::kFixed; + static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3); + + static uint32_t ComputeSize() { + return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT + } + + void SetHeader() { header.SetCmd<ValueType>(); } + + void Init(GLuint _texture_id, + GLuint _sk_color, + GLuint _msaa_sample_count, + GLboolean _can_use_lcd_text, + GLboolean _use_distance_field_text, + GLint _pixel_config) { + SetHeader(); + texture_id = _texture_id; + sk_color = _sk_color; + msaa_sample_count = _msaa_sample_count; + can_use_lcd_text = _can_use_lcd_text; + use_distance_field_text = _use_distance_field_text; + pixel_config = _pixel_config; + } + + void* Set(void* cmd, + GLuint _texture_id, + GLuint _sk_color, + GLuint _msaa_sample_count, + GLboolean _can_use_lcd_text, + GLboolean _use_distance_field_text, + GLint _pixel_config) { + static_cast<ValueType*>(cmd)->Init(_texture_id, _sk_color, + _msaa_sample_count, _can_use_lcd_text, + _use_distance_field_text, _pixel_config); + return NextCmdAddress<ValueType>(cmd); + } + + gpu::CommandHeader header; + uint32_t texture_id; + uint32_t sk_color; + uint32_t msaa_sample_count; + uint32_t can_use_lcd_text; + uint32_t use_distance_field_text; + int32_t pixel_config; +}; + +static_assert(sizeof(BeginRasterCHROMIUM) == 28, + "size of BeginRasterCHROMIUM should be 28"); +static_assert(offsetof(BeginRasterCHROMIUM, header) == 0, + "offset of BeginRasterCHROMIUM header should be 0"); +static_assert(offsetof(BeginRasterCHROMIUM, texture_id) == 4, + "offset of BeginRasterCHROMIUM texture_id should be 4"); +static_assert(offsetof(BeginRasterCHROMIUM, sk_color) == 8, + "offset of BeginRasterCHROMIUM sk_color should be 8"); +static_assert(offsetof(BeginRasterCHROMIUM, msaa_sample_count) == 12, + "offset of BeginRasterCHROMIUM msaa_sample_count should be 12"); +static_assert(offsetof(BeginRasterCHROMIUM, can_use_lcd_text) == 16, + "offset of BeginRasterCHROMIUM can_use_lcd_text should be 16"); +static_assert( + offsetof(BeginRasterCHROMIUM, use_distance_field_text) == 20, + "offset of BeginRasterCHROMIUM use_distance_field_text should be 20"); +static_assert(offsetof(BeginRasterCHROMIUM, pixel_config) == 24, + "offset of BeginRasterCHROMIUM pixel_config should be 24"); + +struct RasterCHROMIUM { + typedef RasterCHROMIUM ValueType; + static const CommandId kCmdId = kRasterCHROMIUM; + static const cmd::ArgFlags kArgFlags = cmd::kFixed; + static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3); + + static uint32_t ComputeSize() { + return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT + } + + void SetHeader() { header.SetCmd<ValueType>(); } + + void Init(uint32_t _list_shm_id, + uint32_t _list_shm_offset, + GLint _x, + GLint _y, + GLint _w, + GLint _h, + uint32_t _data_size) { + SetHeader(); + list_shm_id = _list_shm_id; + list_shm_offset = _list_shm_offset; + x = _x; + y = _y; + w = _w; + h = _h; + data_size = _data_size; + } + + void* Set(void* cmd, + uint32_t _list_shm_id, + uint32_t _list_shm_offset, + GLint _x, + GLint _y, + GLint _w, + GLint _h, + uint32_t _data_size) { + static_cast<ValueType*>(cmd)->Init(_list_shm_id, _list_shm_offset, _x, _y, + _w, _h, _data_size); + return NextCmdAddress<ValueType>(cmd); + } + + gpu::CommandHeader header; + uint32_t list_shm_id; + uint32_t list_shm_offset; + int32_t x; + int32_t y; + int32_t w; + int32_t h; + uint32_t data_size; +}; + +static_assert(sizeof(RasterCHROMIUM) == 32, + "size of RasterCHROMIUM should be 32"); +static_assert(offsetof(RasterCHROMIUM, header) == 0, + "offset of RasterCHROMIUM header should be 0"); +static_assert(offsetof(RasterCHROMIUM, list_shm_id) == 4, + "offset of RasterCHROMIUM list_shm_id should be 4"); +static_assert(offsetof(RasterCHROMIUM, list_shm_offset) == 8, + "offset of RasterCHROMIUM list_shm_offset should be 8"); +static_assert(offsetof(RasterCHROMIUM, x) == 12, + "offset of RasterCHROMIUM x should be 12"); +static_assert(offsetof(RasterCHROMIUM, y) == 16, + "offset of RasterCHROMIUM y should be 16"); +static_assert(offsetof(RasterCHROMIUM, w) == 20, + "offset of RasterCHROMIUM w should be 20"); +static_assert(offsetof(RasterCHROMIUM, h) == 24, + "offset of RasterCHROMIUM h should be 24"); +static_assert(offsetof(RasterCHROMIUM, data_size) == 28, + "offset of RasterCHROMIUM data_size should be 28"); + +struct EndRasterCHROMIUM { + typedef EndRasterCHROMIUM ValueType; + static const CommandId kCmdId = kEndRasterCHROMIUM; + static const cmd::ArgFlags kArgFlags = cmd::kFixed; + static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3); + + static uint32_t ComputeSize() { + return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT + } + + void SetHeader() { header.SetCmd<ValueType>(); } + + void Init() { SetHeader(); } + + void* Set(void* cmd) { + static_cast<ValueType*>(cmd)->Init(); + return NextCmdAddress<ValueType>(cmd); + } + + gpu::CommandHeader header; +}; + +static_assert(sizeof(EndRasterCHROMIUM) == 4, + "size of EndRasterCHROMIUM should be 4"); +static_assert(offsetof(EndRasterCHROMIUM, header) == 0, + "offset of EndRasterCHROMIUM header should be 0"); + #endif // GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_FORMAT_AUTOGEN_H_
diff --git a/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h b/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h index 8e1d11c..860ff54 100644 --- a/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h +++ b/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h
@@ -5399,4 +5399,50 @@ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd)); } +TEST_F(GLES2FormatTest, BeginRasterCHROMIUM) { + cmds::BeginRasterCHROMIUM& cmd = *GetBufferAs<cmds::BeginRasterCHROMIUM>(); + void* next_cmd = + cmd.Set(&cmd, static_cast<GLuint>(11), static_cast<GLuint>(12), + static_cast<GLuint>(13), static_cast<GLboolean>(14), + static_cast<GLboolean>(15), static_cast<GLint>(16)); + EXPECT_EQ(static_cast<uint32_t>(cmds::BeginRasterCHROMIUM::kCmdId), + cmd.header.command); + EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u); + EXPECT_EQ(static_cast<GLuint>(11), cmd.texture_id); + EXPECT_EQ(static_cast<GLuint>(12), cmd.sk_color); + EXPECT_EQ(static_cast<GLuint>(13), cmd.msaa_sample_count); + EXPECT_EQ(static_cast<GLboolean>(14), cmd.can_use_lcd_text); + EXPECT_EQ(static_cast<GLboolean>(15), cmd.use_distance_field_text); + EXPECT_EQ(static_cast<GLint>(16), cmd.pixel_config); + CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd)); +} + +TEST_F(GLES2FormatTest, RasterCHROMIUM) { + cmds::RasterCHROMIUM& cmd = *GetBufferAs<cmds::RasterCHROMIUM>(); + void* next_cmd = cmd.Set(&cmd, static_cast<uint32_t>(11), + static_cast<uint32_t>(12), static_cast<GLint>(13), + static_cast<GLint>(14), static_cast<GLint>(15), + static_cast<GLint>(16), static_cast<uint32_t>(17)); + EXPECT_EQ(static_cast<uint32_t>(cmds::RasterCHROMIUM::kCmdId), + cmd.header.command); + EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u); + EXPECT_EQ(static_cast<uint32_t>(11), cmd.list_shm_id); + EXPECT_EQ(static_cast<uint32_t>(12), cmd.list_shm_offset); + EXPECT_EQ(static_cast<GLint>(13), cmd.x); + EXPECT_EQ(static_cast<GLint>(14), cmd.y); + EXPECT_EQ(static_cast<GLint>(15), cmd.w); + EXPECT_EQ(static_cast<GLint>(16), cmd.h); + EXPECT_EQ(static_cast<uint32_t>(17), cmd.data_size); + CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd)); +} + +TEST_F(GLES2FormatTest, EndRasterCHROMIUM) { + cmds::EndRasterCHROMIUM& cmd = *GetBufferAs<cmds::EndRasterCHROMIUM>(); + void* next_cmd = cmd.Set(&cmd); + EXPECT_EQ(static_cast<uint32_t>(cmds::EndRasterCHROMIUM::kCmdId), + cmd.header.command); + EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u); + CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd)); +} + #endif // GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_FORMAT_TEST_AUTOGEN_H_
diff --git a/gpu/command_buffer/common/gles2_cmd_ids_autogen.h b/gpu/command_buffer/common/gles2_cmd_ids_autogen.h index 0ae5f00..c5eb174 100644 --- a/gpu/command_buffer/common/gles2_cmd_ids_autogen.h +++ b/gpu/command_buffer/common/gles2_cmd_ids_autogen.h
@@ -338,7 +338,10 @@ OP(SetEnableDCLayersCHROMIUM) /* 579 */ \ OP(InitializeDiscardableTextureCHROMIUM) /* 580 */ \ OP(UnlockDiscardableTextureCHROMIUM) /* 581 */ \ - OP(LockDiscardableTextureCHROMIUM) /* 582 */ + OP(LockDiscardableTextureCHROMIUM) /* 582 */ \ + OP(BeginRasterCHROMIUM) /* 583 */ \ + OP(RasterCHROMIUM) /* 584 */ \ + OP(EndRasterCHROMIUM) /* 585 */ enum CommandId { kOneBeforeStartPoint =
diff --git a/gpu/command_buffer/common/gles2_cmd_utils.cc b/gpu/command_buffer/common/gles2_cmd_utils.cc index 0a451f6..6a52eca7c 100644 --- a/gpu/command_buffer/common/gles2_cmd_utils.cc +++ b/gpu/command_buffer/common/gles2_cmd_utils.cc
@@ -1896,24 +1896,7 @@ return false; } -ContextCreationAttribHelper::ContextCreationAttribHelper() - : gpu_preference(gl::PreferIntegratedGpu), - alpha_size(-1), - blue_size(-1), - green_size(-1), - red_size(-1), - depth_size(-1), - stencil_size(-1), - samples(-1), - sample_buffers(-1), - buffer_preserved(true), - bind_generates_resource(true), - fail_if_major_perf_caveat(false), - lose_context_when_out_of_memory(false), - should_use_native_gmb_for_backbuffer(false), - own_offscreen_surface(false), - single_buffer(false), - context_type(CONTEXT_TYPE_OPENGLES2) {} +ContextCreationAttribHelper::ContextCreationAttribHelper() = default; ContextCreationAttribHelper::ContextCreationAttribHelper( const ContextCreationAttribHelper& other) = default;
diff --git a/gpu/command_buffer/common/gles2_cmd_utils.h b/gpu/command_buffer/common/gles2_cmd_utils.h index 9ae3f2a..c6230a5 100644 --- a/gpu/command_buffer/common/gles2_cmd_utils.h +++ b/gpu/command_buffer/common/gles2_cmd_utils.h
@@ -326,25 +326,26 @@ bool Parse(const std::vector<int32_t>& attribs); gfx::Size offscreen_framebuffer_size; - gl::GpuPreference gpu_preference; + gl::GpuPreference gpu_preference = gl::PreferIntegratedGpu; // -1 if invalid or unspecified. - int32_t alpha_size; - int32_t blue_size; - int32_t green_size; - int32_t red_size; - int32_t depth_size; - int32_t stencil_size; - int32_t samples; - int32_t sample_buffers; - bool buffer_preserved; - bool bind_generates_resource; - bool fail_if_major_perf_caveat; - bool lose_context_when_out_of_memory; - bool should_use_native_gmb_for_backbuffer; - bool own_offscreen_surface; - bool single_buffer; + int32_t alpha_size = -1; + int32_t blue_size = -1; + int32_t green_size = -1; + int32_t red_size = -1; + int32_t depth_size = -1; + int32_t stencil_size = -1; + int32_t samples = -1; + int32_t sample_buffers = -1; + bool buffer_preserved = true; + bool bind_generates_resource = true; + bool fail_if_major_perf_caveat = false; + bool lose_context_when_out_of_memory = false; + bool should_use_native_gmb_for_backbuffer = false; + bool own_offscreen_surface = false; + bool single_buffer = false; + bool enable_oop_rasterization = false; - ContextType context_type; + ContextType context_type = CONTEXT_TYPE_OPENGLES2; ColorSpace color_space = COLOR_SPACE_UNSPECIFIED; };
diff --git a/gpu/command_buffer/service/BUILD.gn b/gpu/command_buffer/service/BUILD.gn index b4b40b9..c3f63e3 100644 --- a/gpu/command_buffer/service/BUILD.gn +++ b/gpu/command_buffer/service/BUILD.gn
@@ -167,6 +167,7 @@ ":disk_cache_proto", "//base", "//base/third_party/dynamic_annotations", + "//cc/paint", "//crypto", "//gpu/command_buffer/client:client_sources", "//gpu/command_buffer/common:gles2_utils",
diff --git a/gpu/command_buffer/service/DEPS b/gpu/command_buffer/service/DEPS index d1cd8cd..831a3d24 100644 --- a/gpu/command_buffer/service/DEPS +++ b/gpu/command_buffer/service/DEPS
@@ -1,3 +1,5 @@ include_rules = [ + "+cc/paint", "+media/media_features.h", + "+third_party/skia", ]
diff --git a/gpu/command_buffer/service/feature_info.cc b/gpu/command_buffer/service/feature_info.cc index c640145..e94e662 100644 --- a/gpu/command_buffer/service/feature_info.cc +++ b/gpu/command_buffer/service/feature_info.cc
@@ -251,6 +251,9 @@ (command_line->GetSwitchValueASCII(switches::kUseGL) == gl::kGLImplementationSwiftShaderName); + feature_flags_.chromium_raster_transport = + command_line->HasSwitch(switches::kEnableOOPRasterization); + // The shader translator is needed to translate from WebGL-conformant GLES SL // to normal GLES SL, enforce WebGL conformance, translate from GLES SL 1.0 to // target context GLSL, implement emulation of OpenGL ES features on OpenGL,
diff --git a/gpu/command_buffer/service/feature_info.h b/gpu/command_buffer/service/feature_info.h index 6a51ce6..2124d4d 100644 --- a/gpu/command_buffer/service/feature_info.h +++ b/gpu/command_buffer/service/feature_info.h
@@ -84,6 +84,7 @@ bool angle_texture_usage = false; bool ext_texture_storage = false; bool chromium_path_rendering = false; + bool chromium_raster_transport = false; bool chromium_framebuffer_mixed_samples = false; bool blend_equation_advanced = false; bool blend_equation_advanced_coherent = false;
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc index c059361..49eef3a 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -26,6 +26,7 @@ #include "base/strings/stringprintf.h" #include "base/trace_event/trace_event.h" #include "build/build_config.h" +#include "cc/paint/paint_op_buffer.h" #include "gpu/command_buffer/common/debug_marker_manager.h" #include "gpu/command_buffer/common/gles2_cmd_format.h" #include "gpu/command_buffer/common/gles2_cmd_utils.h" @@ -68,6 +69,14 @@ #include "gpu/command_buffer/service/vertex_array_manager.h" #include "gpu/command_buffer/service/vertex_attrib_manager.h" #include "third_party/angle/src/image_util/loadimage.h" +#include "third_party/skia/include/core/SkCanvas.h" +#include "third_party/skia/include/core/SkSurface.h" +#include "third_party/skia/include/core/SkSurfaceProps.h" +#include "third_party/skia/include/core/SkTypeface.h" +#include "third_party/skia/include/gpu/GrBackendSurface.h" +#include "third_party/skia/include/gpu/GrContext.h" +#include "third_party/skia/include/gpu/gl/GrGLAssembleInterface.h" +#include "third_party/skia/include/gpu/gl/GrGLInterface.h" #include "third_party/smhasher/src/City.h" #include "ui/gfx/buffer_types.h" #include "ui/gfx/color_space.h" @@ -101,6 +110,11 @@ namespace { +static GrGLFuncPtr get_gl_proc(void* ctx, const char name[]) { + DCHECK(!ctx); + return static_cast<GrGLFuncPtr>(gl::GetGLProcAddress(name)); +} + const char kOESDerivativeExtension[] = "GL_OES_standard_derivatives"; const char kEXTFragDepthExtension[] = "GL_EXT_frag_depth"; const char kEXTDrawBuffersExtension[] = "GL_EXT_draw_buffers"; @@ -1941,6 +1955,14 @@ GLenum textarget, GLuint texture_unit); + void DoBeginRasterCHROMIUM(GLuint texture_id, + GLuint sk_color, + GLuint msaa_sample_count, + GLboolean can_use_lcd_text, + GLboolean use_distance_field_text, + GLint pixel_config); + void DoEndRasterCHROMIUM(); + // Returns false if textures were replaced. bool PrepareTexturesForRender(); void RestoreStateForTextures(); @@ -2496,6 +2518,10 @@ std::unique_ptr<CALayerSharedState> ca_layer_shared_state_; std::unique_ptr<DCLayerSharedState> dc_layer_shared_state_; + // Raster helpers. + sk_sp<GrContext> gr_context_; + sk_sp<SkSurface> sk_surface_; + base::WeakPtrFactory<GLES2DecoderImpl> weak_ptr_factory_; DISALLOW_COPY_AND_ASSIGN(GLES2DecoderImpl); @@ -3689,6 +3715,33 @@ glHint(GL_TEXTURE_FILTERING_HINT_CHROMIUM, GL_NICEST); } + if (attrib_helper.enable_oop_rasterization) { + if (!features().chromium_raster_transport) + return false; + sk_sp<const GrGLInterface> interface( + GrGLAssembleInterface(nullptr, get_gl_proc)); + // TODO(enne): if this or gr_context creation below fails in practice for + // different reasons than the ones the renderer would fail on for gpu + // raster, expose this in gpu::Capabilities so the renderer can handle it. + if (!interface) + return false; + gr_context_ = sk_sp<GrContext>( + GrContext::Create(kOpenGL_GrBackend, + reinterpret_cast<GrBackendContext>(interface.get()))); + if (!gr_context_) + return false; + + // TODO(enne): this cache is for this decoder only and each decoder has + // its own cache. This is pretty unfortunate. This really needs to be + // rethought before shipping. Most likely a different command buffer + // context for raster-in-gpu, with a shared gl context / gr context + // that different decoders can use. + static const int kMaxGaneshResourceCacheCount = 8196; + static const size_t kMaxGaneshResourceCacheBytes = 96 * 1024 * 1024; + gr_context_->setResourceCacheLimits(kMaxGaneshResourceCacheCount, + kMaxGaneshResourceCacheBytes); + } + return true; } @@ -19910,6 +19963,177 @@ return error::kNoError; } +void GLES2DecoderImpl::DoBeginRasterCHROMIUM(GLuint texture_id, + GLuint sk_color, + GLuint msaa_sample_count, + GLboolean can_use_lcd_text, + GLboolean use_distance_field_text, + GLint pixel_config) { + if (!gr_context_) { + LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glBeginRasterCHROMIUM", + "chromium_raster_transport not enabled via attribs"); + return; + } + if (sk_surface_) { + LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glBeginRasterCHROMIUM", + "BeginRasterCHROMIUM without EndRasterCHROMIUM"); + return; + } + + gr_context_->resetContext(); + + // This function should look identical to + // ResourceProvider::ScopedSkSurfaceProvider. + GrGLTextureInfo texture_info; + auto* texture_ref = GetTexture(texture_id); + if (!texture_ref) { + LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glBeginRasterCHROMIUM", + "unknown texture id"); + return; + } + auto* texture = texture_ref->texture(); + int width; + int height; + int depth; + if (!texture->GetLevelSize(texture->target(), 0, &width, &height, &depth)) { + LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glBeginRasterCHROMIUM", + "missing texture size info"); + return; + } + GLenum type; + GLenum internal_format; + if (!texture->GetLevelType(texture->target(), 0, &type, &internal_format)) { + LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glBeginRasterCHROMIUM", + "missing texture type info"); + return; + } + texture_info.fID = texture_ref->service_id(); + texture_info.fTarget = texture->target(); + + if (texture->target() != GL_TEXTURE_2D && + texture->target() != GL_TEXTURE_RECTANGLE_ARB) { + LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glBeginRasterCHROMIUM", + "invalid texture target"); + return; + } + + switch (pixel_config) { + case kRGBA_4444_GrPixelConfig: + case kRGBA_8888_GrPixelConfig: + case kSRGBA_8888_GrPixelConfig: + if (internal_format != GL_RGBA8_OES && internal_format != GL_RGBA) { + LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glBeginRasterCHROMIUM", + "pixel config mismatch"); + return; + } + break; + case kBGRA_8888_GrPixelConfig: + case kSBGRA_8888_GrPixelConfig: + if (internal_format != GL_BGRA_EXT && internal_format != GL_BGRA8_EXT) { + LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glBeginRasterCHROMIUM", + "pixel config mismatch"); + return; + } + break; + default: + LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glBeginRasterCHROMIUM", + "unsupported pixel config"); + return; + } + + GrBackendTexture gr_texture( + width, height, static_cast<GrPixelConfig>(pixel_config), texture_info); + + uint32_t flags = + use_distance_field_text ? SkSurfaceProps::kUseDistanceFieldFonts_Flag : 0; + // Use unknown pixel geometry to disable LCD text. + SkSurfaceProps surface_props(flags, kUnknown_SkPixelGeometry); + if (can_use_lcd_text) { + // LegacyFontHost will get LCD text and skia figures out what type to use. + surface_props = + SkSurfaceProps(flags, SkSurfaceProps::kLegacyFontHost_InitType); + } + + // Resolve requested msaa samples with GrGpu capabilities. + int final_msaa_count = gr_context_->caps()->getSampleCount( + msaa_sample_count, gr_texture.config()); + sk_surface_ = SkSurface::MakeFromBackendTextureAsRenderTarget( + gr_context_.get(), gr_texture, kTopLeft_GrSurfaceOrigin, final_msaa_count, + nullptr, &surface_props); + + if (!sk_surface_) { + LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glBeginRasterCHROMIUM", + "failed to create surface"); + return; + } + + // All or nothing clearing, as no way to validate the client's input on what + // is the "used" part of the texture. + if (texture->IsLevelCleared(texture->target(), 0)) + return; + + // TODO(enne): this doesn't handle the case where the background color + // changes and so any extra pixels outside the raster area that get + // sampled may be incorrect. + sk_surface_->getCanvas()->drawColor(sk_color); + texture_manager()->SetLevelCleared(texture_ref, texture->target(), 0, true); +} + +error::Error GLES2DecoderImpl::HandleRasterCHROMIUM( + uint32_t immediate_data_size, + const volatile void* cmd_data) { + if (!sk_surface_) { + LOG(ERROR) << "RasterCHROMIUM without BeginRasterCHROMIUM"; + return error::kInvalidArguments; + } + + alignas( + cc::PaintOpBuffer::PaintOpAlign) char data[sizeof(cc::LargestPaintOp)]; + auto& c = *static_cast<const volatile gles2::cmds::RasterCHROMIUM*>(cmd_data); + size_t size = c.data_size; + char* buffer = + GetSharedMemoryAs<char*>(c.list_shm_id, c.list_shm_offset, size); + if (!buffer) + return error::kOutOfBounds; + + SkCanvas* canvas = sk_surface_->getCanvas(); + SkMatrix original_ctm; + cc::PlaybackParams playback_params(nullptr, original_ctm); + + int op_idx = 0; + while (size > 4) { + size_t skip = 0; + cc::PaintOp* deserialized_op = cc::PaintOp::Deserialize( + buffer, size, &data[0], sizeof(cc::LargestPaintOp), &skip); + if (!deserialized_op) { + LOG(ERROR) << "RasterCHROMIUM: bad op: " << op_idx; + return error::kInvalidArguments; + } + + deserialized_op->Raster(canvas, playback_params); + deserialized_op->DestroyThis(); + + size -= skip; + buffer += skip; + op_idx++; + } + + return error::kNoError; +} + +void GLES2DecoderImpl::DoEndRasterCHROMIUM() { + if (!sk_surface_) { + LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glBeginRasterCHROMIUM", + "EndRasterCHROMIUM without BeginRasterCHROMIUM"); + return; + } + + sk_surface_->prepareForExternalIO(); + sk_surface_.reset(); + + RestoreState(nullptr); +} + // Include the auto-generated part of this file. We split this because it means // we can easily edit the non-auto generated parts right here in this file // instead of having to edit some template or the code generator.
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h index 1109545..9bbab23 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h
@@ -5206,6 +5206,39 @@ return error::kNoError; } +error::Error GLES2DecoderImpl::HandleBeginRasterCHROMIUM( + uint32_t immediate_data_size, + const volatile void* cmd_data) { + const volatile gles2::cmds::BeginRasterCHROMIUM& c = + *static_cast<const volatile gles2::cmds::BeginRasterCHROMIUM*>(cmd_data); + if (!features().chromium_raster_transport) { + return error::kUnknownCommand; + } + + GLuint texture_id = static_cast<GLuint>(c.texture_id); + GLuint sk_color = static_cast<GLuint>(c.sk_color); + GLuint msaa_sample_count = static_cast<GLuint>(c.msaa_sample_count); + GLboolean can_use_lcd_text = static_cast<GLboolean>(c.can_use_lcd_text); + GLboolean use_distance_field_text = + static_cast<GLboolean>(c.use_distance_field_text); + GLint pixel_config = static_cast<GLint>(c.pixel_config); + DoBeginRasterCHROMIUM(texture_id, sk_color, msaa_sample_count, + can_use_lcd_text, use_distance_field_text, + pixel_config); + return error::kNoError; +} + +error::Error GLES2DecoderImpl::HandleEndRasterCHROMIUM( + uint32_t immediate_data_size, + const volatile void* cmd_data) { + if (!features().chromium_raster_transport) { + return error::kUnknownCommand; + } + + DoEndRasterCHROMIUM(); + return error::kNoError; +} + bool GLES2DecoderImpl::SetCapabilityState(GLenum cap, bool enabled) { switch (cap) { case GL_BLEND:
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc index 4eadf413..f033ced3 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc
@@ -304,6 +304,11 @@ return false; } + if (attrib_helper.enable_oop_rasterization) { + Destroy(true); + return false; + } + bind_generates_resource_ = group_->bind_generates_resource(); resources_ = group_->passthrough_resources(); @@ -1256,6 +1261,15 @@ } } +error::Error GLES2DecoderPassthroughImpl::HandleRasterCHROMIUM( + uint32_t immediate_data_size, + const volatile void* cmd_data) { + // TODO(enne): Add CHROMIUM_raster_transport extension support to the + // passthrough command buffer. + NOTIMPLEMENTED(); + return error::kNoError; +} + #define GLES2_CMD_OP(name) \ { \ &GLES2DecoderPassthroughImpl::Handle##name, cmds::name::kArgFlags, \
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doer_prototypes.h b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doer_prototypes.h index 9c4d670..a598f902 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doer_prototypes.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doer_prototypes.h
@@ -988,3 +988,10 @@ GLint width, GLint height); error::Error DoSetEnableDCLayersCHROMIUM(GLboolean enable); +error::Error DoBeginRasterCHROMIUM(GLuint texture_id, + GLuint sk_color, + GLuint msaa_sample_count, + GLboolean can_use_lcd_text, + GLboolean use_distance_field_text, + GLint pixel_config); +error::Error DoEndRasterCHROMIUM();
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc index 6863bef..e08bc97 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
@@ -4336,5 +4336,21 @@ return error::kNoError; } +error::Error GLES2DecoderPassthroughImpl::DoBeginRasterCHROMIUM( + GLuint texture_id, + GLuint sk_color, + GLuint msaa_sample_count, + GLboolean can_use_lcd_text, + GLboolean use_distance_field_text, + GLint pixel_config) { + NOTIMPLEMENTED(); + return error::kNoError; +} + +error::Error GLES2DecoderPassthroughImpl::DoEndRasterCHROMIUM() { + NOTIMPLEMENTED(); + return error::kNoError; +} + } // namespace gles2 } // namespace gpu
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers_autogen.cc b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers_autogen.cc index 2256a806..3c805fa 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers_autogen.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers_autogen.cc
@@ -4406,5 +4406,36 @@ return error::kNoError; } +error::Error GLES2DecoderPassthroughImpl::HandleBeginRasterCHROMIUM( + uint32_t immediate_data_size, + const volatile void* cmd_data) { + const volatile gles2::cmds::BeginRasterCHROMIUM& c = + *static_cast<const volatile gles2::cmds::BeginRasterCHROMIUM*>(cmd_data); + GLuint texture_id = static_cast<GLuint>(c.texture_id); + GLuint sk_color = static_cast<GLuint>(c.sk_color); + GLuint msaa_sample_count = static_cast<GLuint>(c.msaa_sample_count); + GLboolean can_use_lcd_text = static_cast<GLboolean>(c.can_use_lcd_text); + GLboolean use_distance_field_text = + static_cast<GLboolean>(c.use_distance_field_text); + GLint pixel_config = static_cast<GLint>(c.pixel_config); + error::Error error = DoBeginRasterCHROMIUM( + texture_id, sk_color, msaa_sample_count, can_use_lcd_text, + use_distance_field_text, pixel_config); + if (error != error::kNoError) { + return error; + } + return error::kNoError; +} + +error::Error GLES2DecoderPassthroughImpl::HandleEndRasterCHROMIUM( + uint32_t immediate_data_size, + const volatile void* cmd_data) { + error::Error error = DoEndRasterCHROMIUM(); + if (error != error::kNoError) { + return error; + } + return error::kNoError; +} + } // namespace gles2 } // namespace gpu
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_extensions.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_extensions.cc index 7e080f1..7812a2d9 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_extensions.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_extensions.cc
@@ -1724,6 +1724,26 @@ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); } +class GLES2DecoderTestWithCHROMIUMRasterTransport : public GLES2DecoderTest { + public: + GLES2DecoderTestWithCHROMIUMRasterTransport() {} + void SetUp() override { + InitState init; + init.gl_version = "opengl es 2.0"; + init.has_alpha = true; + init.has_depth = true; + init.request_alpha = true; + init.request_depth = true; + init.bind_generates_resource = true; + init.extensions = "chromium_raster_transport"; + InitDecoder(init); + } +}; + +INSTANTIATE_TEST_CASE_P(Service, + GLES2DecoderTestWithCHROMIUMRasterTransport, + ::testing::Bool()); + #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_extensions_autogen.h" } // namespace gles2
diff --git a/gpu/config/gpu_info_collector_fuchsia.cc b/gpu/config/gpu_info_collector_fuchsia.cc index ecc9bf1..95dac4c9 100644 --- a/gpu/config/gpu_info_collector_fuchsia.cc +++ b/gpu/config/gpu_info_collector_fuchsia.cc
@@ -25,8 +25,7 @@ } void MergeGPUInfo(GPUInfo* basic_gpu_info, const GPUInfo& context_gpu_info) { - // TODO(crbug.com/707031): Implement this. - NOTIMPLEMENTED(); + MergeGPUInfoGL(basic_gpu_info, context_gpu_info); } } // namespace gpu
diff --git a/gpu/config/gpu_switches.cc b/gpu/config/gpu_switches.cc index 19f4680..fc37290 100644 --- a/gpu/config/gpu_switches.cc +++ b/gpu/config/gpu_switches.cc
@@ -19,6 +19,10 @@ // impl-side painting. const char kEnableGpuRasterization[] = "enable-gpu-rasterization"; +// Turns on out of process raster for the renderer whenever gpu raster +// would have been used. Enables the chromium_raster_transport extension. +const char kEnableOOPRasterization[] = "enable-oop-rasterization"; + // Passes active gpu vendor id from browser process to GPU process. const char kGpuActiveVendorID[] = "gpu-active-vendor-id";
diff --git a/gpu/config/gpu_switches.h b/gpu/config/gpu_switches.h index 9925ad2..69d642b 100644 --- a/gpu/config/gpu_switches.h +++ b/gpu/config/gpu_switches.h
@@ -12,6 +12,7 @@ GPU_EXPORT extern const char kDisableGpuDriverBugWorkarounds[]; GPU_EXPORT extern const char kDisableGpuRasterization[]; GPU_EXPORT extern const char kEnableGpuRasterization[]; +GPU_EXPORT extern const char kEnableOOPRasterization[]; GPU_EXPORT extern const char kGpuActiveVendorID[]; GPU_EXPORT extern const char kGpuActiveDeviceID[]; GPU_EXPORT extern const char kGpuDeviceID[];
diff --git a/gpu/ipc/common/gpu_command_buffer_traits_multi.h b/gpu/ipc/common/gpu_command_buffer_traits_multi.h index fa535af..a7145c0 100644 --- a/gpu/ipc/common/gpu_command_buffer_traits_multi.h +++ b/gpu/ipc/common/gpu_command_buffer_traits_multi.h
@@ -173,4 +173,5 @@ IPC_STRUCT_TRAITS_MEMBER(own_offscreen_surface) IPC_STRUCT_TRAITS_MEMBER(single_buffer) IPC_STRUCT_TRAITS_MEMBER(color_space) + IPC_STRUCT_TRAITS_MEMBER(enable_oop_rasterization) IPC_STRUCT_TRAITS_END()
diff --git a/headless/BUILD.gn b/headless/BUILD.gn index d269402c..82c81044 100644 --- a/headless/BUILD.gn +++ b/headless/BUILD.gn
@@ -7,6 +7,7 @@ import("//headless/headless.gni") import("//mojo/public/tools/bindings/mojom.gni") import("//printing/features/features.gni") +import("//services/service_manager/public/service_manifest.gni") import("//testing/test.gni") import("//third_party/closure_compiler/compile_js.gni") import("//tools/grit/grit_rule.gni") @@ -115,17 +116,30 @@ ] } +service_manifest("headless_browser_manifest_overlay") { + source = "lib/browser/headless_browser_manifest_overlay.json" +} + +service_manifest("headless_packaged_services_manifest_overlay") { + source = "lib/browser/headless_packaged_services_manifest_overlay.json" + packaged_services = + [ "//components/printing/service:pdf_compositor_manifest" ] +} + grit("resources") { source = "lib/resources/headless_lib_resources.grd" outputs = [ "grit/headless_lib_resources.h", "$root_gen_dir/headless/headless_lib_resources.pak", ] + source_is_generated = true grit_flags = [ "-E", "mojom_root=" + rebase_path(root_gen_dir, root_build_dir), ] deps = [ + ":headless_browser_manifest_overlay", + ":headless_packaged_services_manifest_overlay", ":headless_render_frame_controller_js", ":tab_socket_js", ] @@ -393,6 +407,8 @@ "lib/renderer/headless_render_frame_controller_impl.h", "lib/renderer/headless_tab_socket_bindings.cc", "lib/renderer/headless_tab_socket_bindings.h", + "lib/utility/headless_content_utility_client.cc", + "lib/utility/headless_content_utility_client.h", ] deps += [ @@ -414,6 +430,8 @@ deps += [ "//components/printing/browser", "//components/printing/renderer", + "//components/printing/service/public/cpp:factory", + "//components/printing/service/public/interfaces", ] } } @@ -510,6 +528,8 @@ sources += [ "lib/browser/headless_content_browser_client.cc", "lib/browser/headless_content_browser_client.h", + "lib/utility/headless_content_utility_client.cc", + "lib/utility/headless_content_utility_client.h", ] } @@ -535,7 +555,11 @@ if (enable_basic_printing) { sources += [ "lib/browser/headless_printing_unittest.cc" ] - deps += [ "//components/printing/browser" ] + deps += [ + "//components/printing/browser", + "//components/printing/service/public/cpp:factory", + "//third_party/WebKit/public:blink", + ] } } @@ -659,6 +683,8 @@ sources += [ "lib/browser/headless_content_browser_client.cc", "lib/browser/headless_content_browser_client.h", + "lib/utility/headless_content_utility_client.cc", + "lib/utility/headless_content_utility_client.h", ] } @@ -688,6 +714,7 @@ if (enable_basic_printing) { deps += [ "//components/printing/browser", + "//components/printing/service/public/cpp:factory", "//pdf", ] } @@ -761,6 +788,8 @@ "lib/headless_content_main_delegate.cc", "lib/headless_content_main_delegate.h", "lib/headless_content_main_delegate_win.cc", + "lib/utility/headless_content_utility_client.cc", + "lib/utility/headless_content_utility_client.h", ] deps += [ "//third_party/WebKit/public:blink_headers" ] } @@ -781,6 +810,8 @@ "app/shell_navigation_request.h", "lib/browser/headless_content_browser_client.cc", "lib/browser/headless_content_browser_client.h", + "lib/utility/headless_content_utility_client.cc", + "lib/utility/headless_content_utility_client.h", "public/headless_shell.h", ] @@ -801,6 +832,7 @@ deps += [ "//components/printing/browser", "//components/printing/renderer", + "//components/printing/service/public/cpp:factory", ] }
diff --git a/headless/DEPS b/headless/DEPS index 70959d7..343e456a 100644 --- a/headless/DEPS +++ b/headless/DEPS
@@ -1,6 +1,8 @@ include_rules = [ "+components/crash/content/app", "+components/crash/content/browser", + "+components/printing/service/public/cpp", + "+components/printing/service/public/interfaces", "+content/public/app", "+content/public/browser", "+content/public/renderer", @@ -8,6 +10,7 @@ "+content/public/test", "+mojo/public", "+net", + "+printing/features", "+ui/base", "+ui/base/resource", "+ui/display",
diff --git a/headless/lib/browser/OWNERS b/headless/lib/browser/OWNERS index 785be83..d2386d8 100644 --- a/headless/lib/browser/OWNERS +++ b/headless/lib/browser/OWNERS
@@ -1,2 +1,4 @@ -per-file headless_browser_manifest_overlay_template.json=set noparent -per-file headless_browser_manifest_overlay_template.json=file://ipc/SECURITY_OWNERS +per-file headless_browser_manifest_overlay.json=set noparent +per-file headless_browser_manifest_overlay.json=file://ipc/SECURITY_OWNERS +per-file headless_packaged_services_manifest_overlay.json=set noparent +per-file headless_packaged_services_manifest_overlay.json=file://ipc/SECURITY_OWNERS
diff --git a/headless/lib/browser/headless_browser_manifest_overlay.json b/headless/lib/browser/headless_browser_manifest_overlay.json new file mode 100644 index 0000000..6483a30 --- /dev/null +++ b/headless/lib/browser/headless_browser_manifest_overlay.json
@@ -0,0 +1,15 @@ +{ + "name": "content_browser", + "interface_provider_specs": { + "service_manager:connector": { + "requires": { + "pdf_compositor": [ "composite" ] + } + }, + "navigation:frame": { + "provides": { + "renderer": [] + } + } + } +}
diff --git a/headless/lib/browser/headless_browser_manifest_overlay_template.json b/headless/lib/browser/headless_browser_manifest_overlay_template.json deleted file mode 100644 index d5e3e99..0000000 --- a/headless/lib/browser/headless_browser_manifest_overlay_template.json +++ /dev/null
@@ -1,10 +0,0 @@ -{ - "name": "content_browser", - "interface_provider_specs": { - "navigation:frame": { - "provides": { - "renderer": [] - } - } - } -}
diff --git a/headless/lib/browser/headless_content_browser_client.cc b/headless/lib/browser/headless_content_browser_client.cc index f528710..2915b27 100644 --- a/headless/lib/browser/headless_content_browser_client.cc +++ b/headless/lib/browser/headless_content_browser_client.cc
@@ -41,6 +41,11 @@ #include "content/public/common/content_descriptors.h" #endif // defined(HEADLESS_USE_BREAKPAD) +#if BUILDFLAG(ENABLE_BASIC_PRINTING) && !defined(CHROME_MULTIPLE_DLL_CHILD) +#include "base/strings/utf_string_conversions.h" +#include "components/printing/service/public/interfaces/pdf_compositor.mojom.h" +#endif + namespace headless { namespace { @@ -142,20 +147,28 @@ base::StringPiece name) { if (name == content::mojom::kBrowserServiceName) return GetBrowserServiceManifestOverlay(); - else if (name == content::mojom::kRendererServiceName) + if (name == content::mojom::kRendererServiceName) return GetRendererServiceManifestOverlay(); + if (name == content::mojom::kPackagedServicesServiceName) + return GetPackagedServicesServiceManifestOverlay(); return nullptr; } +void HeadlessContentBrowserClient::RegisterOutOfProcessServices( + OutOfProcessServiceMap* services) { +#if BUILDFLAG(ENABLE_BASIC_PRINTING) && !defined(CHROME_MULTIPLE_DLL_CHILD) + (*services)[printing::mojom::kServiceName] = { + base::ASCIIToUTF16("PDF Compositor Service"), + content::SANDBOX_TYPE_UTILITY}; +#endif +} + std::unique_ptr<base::Value> HeadlessContentBrowserClient::GetBrowserServiceManifestOverlay() { - if (browser_->options()->mojo_service_names.empty()) - return nullptr; - base::StringPiece manifest_template = ui::ResourceBundle::GetSharedInstance().GetRawDataResource( - IDR_HEADLESS_BROWSER_MANIFEST_OVERLAY_TEMPLATE); + IDR_HEADLESS_BROWSER_MANIFEST_OVERLAY); std::unique_ptr<base::Value> manifest = base::JSONReader::Read(manifest_template); @@ -181,6 +194,14 @@ return base::JSONReader::Read(manifest_template); } +std::unique_ptr<base::Value> +HeadlessContentBrowserClient::GetPackagedServicesServiceManifestOverlay() { + base::StringPiece manifest_template = + ui::ResourceBundle::GetSharedInstance().GetRawDataResource( + IDR_HEADLESS_PACKAGED_SERVICES_MANIFEST_OVERLAY); + return base::JSONReader::Read(manifest_template); +} + content::QuotaPermissionContext* HeadlessContentBrowserClient::CreateQuotaPermissionContext() { return new HeadlessQuotaPermissionContext();
diff --git a/headless/lib/browser/headless_content_browser_client.h b/headless/lib/browser/headless_content_browser_client.h index a1847251..f018a500 100644 --- a/headless/lib/browser/headless_content_browser_client.h +++ b/headless/lib/browser/headless_content_browser_client.h
@@ -25,6 +25,7 @@ content::DevToolsManagerDelegate* GetDevToolsManagerDelegate() override; std::unique_ptr<base::Value> GetServiceManifestOverlay( base::StringPiece name) override; + void RegisterOutOfProcessServices(OutOfProcessServiceMap* services) override; content::QuotaPermissionContext* CreateQuotaPermissionContext() override; void GetQuotaSettings( content::BrowserContext* context, @@ -58,6 +59,7 @@ private: std::unique_ptr<base::Value> GetBrowserServiceManifestOverlay(); std::unique_ptr<base::Value> GetRendererServiceManifestOverlay(); + std::unique_ptr<base::Value> GetPackagedServicesServiceManifestOverlay(); HeadlessBrowserImpl* browser_; // Not owned.
diff --git a/headless/lib/browser/headless_packaged_services_manifest_overlay.json b/headless/lib/browser/headless_packaged_services_manifest_overlay.json new file mode 100644 index 0000000..2b560d9 --- /dev/null +++ b/headless/lib/browser/headless_packaged_services_manifest_overlay.json
@@ -0,0 +1,4 @@ +{ + "name": "content_packaged_services", + "interface_provider_specs": {} +}
diff --git a/headless/lib/headless_content_main_delegate.cc b/headless/lib/headless_content_main_delegate.cc index b9ae0332..195ee80 100644 --- a/headless/lib/headless_content_main_delegate.cc +++ b/headless/lib/headless_content_main_delegate.cc
@@ -23,6 +23,7 @@ #include "headless/lib/browser/headless_content_browser_client.h" #include "headless/lib/headless_crash_reporter_client.h" #include "headless/lib/headless_macros.h" +#include "headless/lib/utility/headless_content_utility_client.h" #include "ui/base/resource/resource_bundle.h" #include "ui/base/ui_base_switches.h" #include "ui/gfx/switches.h" @@ -343,6 +344,13 @@ renderer_client_ = base::MakeUnique<HeadlessContentRendererClient>(); return renderer_client_.get(); } + +content::ContentUtilityClient* +HeadlessContentMainDelegate::CreateContentUtilityClient() { + utility_client_ = base::MakeUnique<HeadlessContentUtilityClient>( + browser_->options()->user_agent); + return utility_client_.get(); +} #endif // !defined(CHROME_MULTIPLE_DLL_BROWSER) } // namespace headless
diff --git a/headless/lib/headless_content_main_delegate.h b/headless/lib/headless_content_main_delegate.h index 55cd6c97..37d9351 100644 --- a/headless/lib/headless_content_main_delegate.h +++ b/headless/lib/headless_content_main_delegate.h
@@ -41,6 +41,7 @@ const std::string& process_type, const content::MainFunctionParams& main_function_params) override; content::ContentBrowserClient* CreateContentBrowserClient() override; + content::ContentUtilityClient* CreateContentUtilityClient() override; content::ContentRendererClient* CreateContentRendererClient() override; HeadlessBrowserImpl* browser() const { return browser_.get(); } @@ -60,6 +61,7 @@ std::unique_ptr<content::ContentRendererClient> renderer_client_; std::unique_ptr<content::ContentBrowserClient> browser_client_; + std::unique_ptr<content::ContentUtilityClient> utility_client_; HeadlessContentClient content_client_; HeadlessPlatformEventSource platform_event_source_;
diff --git a/headless/lib/headless_content_main_delegate_win.cc b/headless/lib/headless_content_main_delegate_win.cc index 08468320..9046019 100644 --- a/headless/lib/headless_content_main_delegate_win.cc +++ b/headless/lib/headless_content_main_delegate_win.cc
@@ -30,6 +30,11 @@ HeadlessContentMainDelegate::CreateContentRendererClient() { return nullptr; } + +content::ContentUtilityClient* +HeadlessContentMainDelegate::CreateContentUtilityClient() { + return nullptr; +} #endif // defined(CHROME_MULTIPLE_DLL_BROWSER) } // namespace headless
diff --git a/headless/lib/headless_web_contents_browsertest.cc b/headless/lib/headless_web_contents_browsertest.cc index f6eb0db..d852948 100644 --- a/headless/lib/headless_web_contents_browsertest.cc +++ b/headless/lib/headless_web_contents_browsertest.cc
@@ -8,6 +8,8 @@ #include "base/base64.h" #include "base/json/json_writer.h" +#include "base/message_loop/message_loop.h" +#include "base/run_loop.h" #include "base/strings/stringprintf.h" #include "build/build_config.h" #include "content/public/browser/web_contents.h"
diff --git a/headless/lib/resources/headless_lib_resources.grd b/headless/lib/resources/headless_lib_resources.grd index 78f34cd..9322c4c 100644 --- a/headless/lib/resources/headless_lib_resources.grd +++ b/headless/lib/resources/headless_lib_resources.grd
@@ -10,9 +10,11 @@ <release seq="1"> <includes> <include name="IDR_HEADLESS_LIB_DEVTOOLS_DISCOVERY_PAGE" file="devtools_discovery_page.html" type="BINDATA" /> - <include name="IDR_HEADLESS_BROWSER_MANIFEST_OVERLAY_TEMPLATE" file="../browser/headless_browser_manifest_overlay_template.json" type="BINDATA" /> + <include name="IDR_HEADLESS_BROWSER_MANIFEST_OVERLAY" file="${mojom_root}/headless/headless_browser_manifest_overlay.json" use_base_dir="false" type="BINDATA" /> <include name="IDR_HEADLESS_RENDERER_MANIFEST_OVERLAY" file="../renderer/headless_renderer_manifest_overlay.json" type="BINDATA" /> - <include name="IDR_HEADLESS_TAB_SOCKET_MOJOM_JS" file="${mojom_root}\headless\lib\tab_socket.mojom.js" use_base_dir="false" type="BINDATA" /> + <include name="IDR_HEADLESS_PACKAGED_SERVICES_MANIFEST_OVERLAY" file="${mojom_root}/headless/headless_packaged_services_manifest_overlay.json" use_base_dir="false" type="BINDATA" /> + <include name="IDR_HEADLESS_TAB_SOCKET_MOJOM_JS" file="${mojom_root}/headless/lib/tab_socket.mojom.js" use_base_dir="false" type="BINDATA" /> + <include name="IDR_PDF_COMPOSITOR_MANIFEST" file="${mojom_root}/components/printing/service/pdf_compositor_manifest.json" use_base_dir="false" type="BINDATA" /> </includes> </release> </grit>
diff --git a/headless/lib/utility/DEPS b/headless/lib/utility/DEPS new file mode 100644 index 0000000..2d935b53 --- /dev/null +++ b/headless/lib/utility/DEPS
@@ -0,0 +1,4 @@ +include_rules = [ + "+components/printing/service/", + "+content/public/utility", +]
diff --git a/headless/lib/utility/headless_content_utility_client.cc b/headless/lib/utility/headless_content_utility_client.cc new file mode 100644 index 0000000..a2ddaee --- /dev/null +++ b/headless/lib/utility/headless_content_utility_client.cc
@@ -0,0 +1,32 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "headless/lib/utility/headless_content_utility_client.h" + +#include "printing/features/features.h" + +#if BUILDFLAG(ENABLE_BASIC_PRINTING) +#include "components/printing/service/public/cpp/pdf_compositor_service_factory.h" +#include "components/printing/service/public/interfaces/pdf_compositor.mojom.h" +#endif + +namespace headless { + +HeadlessContentUtilityClient::HeadlessContentUtilityClient( + const std::string& user_agent) + : user_agent_(user_agent) {} + +HeadlessContentUtilityClient::~HeadlessContentUtilityClient() {} + +void HeadlessContentUtilityClient::RegisterServices( + HeadlessContentUtilityClient::StaticServiceMap* services) { +#if BUILDFLAG(ENABLE_BASIC_PRINTING) && !defined(CHROME_MULTIPLE_DLL_BROWSER) + service_manager::EmbeddedServiceInfo pdf_compositor_info; + pdf_compositor_info.factory = + base::Bind(&printing::CreatePdfCompositorService, user_agent_); + services->emplace(printing::mojom::kServiceName, pdf_compositor_info); +#endif +} + +} // namespace headless
diff --git a/headless/lib/utility/headless_content_utility_client.h b/headless/lib/utility/headless_content_utility_client.h new file mode 100644 index 0000000..f577dc2 --- /dev/null +++ b/headless/lib/utility/headless_content_utility_client.h
@@ -0,0 +1,30 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef HEADLESS_LIB_HEADLESS_CONTENT_UTILITY_CLIENT_H_ +#define HEADLESS_LIB_HEADLESS_CONTENT_UTILITY_CLIENT_H_ + +#include <string> + +#include "content/public/utility/content_utility_client.h" + +namespace headless { + +class HeadlessContentUtilityClient : public content::ContentUtilityClient { + public: + explicit HeadlessContentUtilityClient(const std::string& user_agent); + ~HeadlessContentUtilityClient() override; + + // content::ContentUtilityClient: + void RegisterServices(StaticServiceMap* services) override; + + private: + const std::string user_agent_; + + DISALLOW_COPY_AND_ASSIGN(HeadlessContentUtilityClient); +}; + +} // namespace headless + +#endif // HEADLESS_LIB_HEADLESS_CONTENT_UTILITY_CLIENT_H_
diff --git a/headless/public/util/generic_url_request_job.cc b/headless/public/util/generic_url_request_job.cc index 55f1daeb9..046499c 100644 --- a/headless/public/util/generic_url_request_job.cc +++ b/headless/public/util/generic_url_request_job.cc
@@ -8,6 +8,8 @@ #include <algorithm> #include "base/logging.h" +#include "base/message_loop/message_loop.h" +#include "base/run_loop.h" #include "content/public/browser/devtools_agent_host.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/resource_request_info.h"
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_kn.xtb index 64f48373..c47ec872 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_kn.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_kn.xtb
@@ -9,7 +9,7 @@ <translation id="1843424232666537147">ನಿಮ್ಮ ಇಂಟರ್ನೆಟ್ ಡೇಟಾವನ್ನು ನಿರ್ವಹಿಸಲು ಮತ್ತು ನೀವು ವೆಬ್ ಪುಟಗಳನ್ನು ಬೇಗನೆ ಲೋಡ್ ಮಾಡಲು ನಿಮಗೆ ಸಹಾಯ ಮಾಡುವ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು Chromium ಹೊಂದಿದೆ. <ph name="BEGIN_LINK" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="END_LINK" /></translation> <translation id="2075400798887076382">ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ನೀವು ತೆರೆದಿರುವ ಟ್ಯಾಬ್ಗಳನ್ನು ಇಲ್ಲಿಯೇ ಪ್ರವೇಶಿಸಿ. ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ Chromium ತೆರೆಯಿರಿ, ಮೆನುಗೆ ಹೋಗಿ ಮತ್ತು “Chromium ಗೆ ಸೈನ್ ಇನ್ ಮಾಡು…” ಆಯ್ಕೆಮಾಡಿ</translation> -<translation id="2168108852149185974">ಕೆಲವು ಆಡ್-ಆನ್ಗಳು Chromium ಕ್ರ್ಯಾಶ್ ಆಗಲು ಕಾರಣವಾಗುತ್ತವೆ. ದಯವಿಟ್ಟು ಇವುಗಳನ್ನು ಅಸ್ಥಾಪಿಸಿ:</translation> +<translation id="2168108852149185974">ಕೆಲವು ಆಡ್-ಆನ್ಗಳು Chromium ಕ್ರ್ಯಾಶ್ ಆಗಲು ಕಾರಣವಾಗುತ್ತವೆ. ದಯವಿಟ್ಟು ಇವುಗಳನ್ನು ಅನ್ಇನ್ಸ್ಟಾಲ್ ಮಾಡಿ:</translation> <translation id="2178608107313874732">ನಿಮ್ಮ ಕ್ಯಾಮರಾವನ್ನು Chromium ಗೆ ಇದೀಗ ಬಳಸಲು ಸಾಧ್ಯವಿಲ್ಲ</translation> <translation id="2195025571279539885">ಮುಂದಿನ ಬಾರಿ ಈ ಸೈಟ್ನಿಂದ <ph name="LANGUAGE_NAME" /> ಪುಟಗಳನ್ನು ಅನುವಾದಿಸಲು Chromium ಗೆ ಅವಕಾಶ ಕಲ್ಪಿಸಲು ನೀವು ಬಯಸುವಿರಾ?</translation> <translation id="2647554856022461007">ನಿಮ್ಮ ಬ್ರೌಸಿಂಗ್ ಅನುಭವವನ್ನು ಉತ್ತಮಗೊಳಿಸಲು ವೆಬ್ ಸೇವೆಗಳನ್ನು Chromium ಬಳಸಬಹುದು. ನೀವು ಐಚ್ಛಿಕವಾಗಿ ಈ ಸೇವೆಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬಹುದು. <ph name="BEGIN_LINK" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_am.xtb b/ios/chrome/app/strings/resources/ios_strings_am.xtb index d4b4735f..520c5800 100644 --- a/ios/chrome/app/strings/resources/ios_strings_am.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_am.xtb
@@ -147,7 +147,6 @@ የፍለጋ ቃልዎን ለማስተካከል ለመምረጥ በረዥሙ ይጫኑ። ፍለጋዎን ይበልጥ ለማጥራት መቃኑን እስከ ላይ ድረስ ያንሸራትቱት እና የፍለጋ ሳጥኑን ይንኩ።</translation> <translation id="3607167657931203000">የራስ-ሙላ ውሂብ</translation> -<translation id="3608436266458100337">የአንባቢ ሁነታ</translation> <translation id="3628119975092896051">የንባብ ዝርዝርዎ ከመስመር ውጭ ይገኛል። አንድ ገጽ ወደ የእርስዎ የንባብ ዝርዝር ለማከል <ph name="SHARE_OPENING_ICON" />ን መታ ያድርጉ።</translation> <translation id="3638472932233958418">ድረ-ገጾችን አስቀድመው ይጫኑ</translation> <translation id="3691593122358196899"><ph name="FOLDER_TITLE" /> ላይ ዕልባት ተደርጓል</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_strings_ar.xtb index 99536d6c..60c8068b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ar.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
@@ -147,7 +147,6 @@ لضبط عبارة البحث، اضغط مع الاستمرار للتحديد. لتحسين البحث، مرّر اللوحة للأعلى والمس مربع البحث.</translation> <translation id="3607167657931203000">ملء البيانات تلقائيًا</translation> -<translation id="3608436266458100337">وضع القارئ</translation> <translation id="3628119975092896051">قائمة القراءة متاحة بلا اتصال بالإنترنت. لإضافة صفحة إلى قائمة القراءة، انقر على <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">تحميل صفحات الويب مسبقًا</translation> <translation id="3691593122358196899">أُضيفَت إشارة مرجعية إلى <ph name="FOLDER_TITLE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bg.xtb b/ios/chrome/app/strings/resources/ios_strings_bg.xtb index 82009a02..c456674 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bg.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bg.xtb
@@ -147,7 +147,6 @@ За да коригирате думата си за търсене, натиснете продължително за избор. За да прецизирате заявката, плъзнете панела нагоре докрай и докоснете полето за търсене.</translation> <translation id="3607167657931203000">Автоматично попълване на данни</translation> -<translation id="3608436266458100337">Режим за четене</translation> <translation id="3628119975092896051">Списъкът ви за четене е налице офлайн. За да добавите страница към него, докоснете „<ph name="SHARE_OPENING_ICON" />“.</translation> <translation id="3638472932233958418">Предв. зареждане на уеб стр.</translation> <translation id="3691593122358196899">Отметката бе запазена в/ъв „<ph name="FOLDER_TITLE" />“</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bn.xtb b/ios/chrome/app/strings/resources/ios_strings_bn.xtb index cfc15529..5f92a2c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bn.xtb
@@ -147,7 +147,6 @@ অনুসন্ধানের শব্দটিকে সামঞ্জস্য করতে, নির্বাচন করতে দীর্ঘক্ষণ টিপে ধরে রাখুন৷ আপনার অনুসন্ধান পরিশোধন করতে, প্যানেলটিকে সোজা উপরের দিকে স্লাইড করুন এবং অনুসন্ধান বক্সে স্পর্শ করুন৷</translation> <translation id="3607167657931203000">ডেটা স্বতঃপূর্ণ করুন</translation> -<translation id="3608436266458100337">পাঠক মোড</translation> <translation id="3628119975092896051">আপনার পড়ার তালিকা অফলাইনে উপলব্ধ। আপনার পড়ার তালিকায় কোনো পৃষ্ঠা যোগ করতে <ph name="SHARE_OPENING_ICON" /> আলতো চাপুন।</translation> <translation id="3638472932233958418">পূর্বলোড ওয়েবপৃষ্ঠা</translation> <translation id="3691593122358196899"><ph name="FOLDER_TITLE" /> এ বুকমার্ক করা হয়েছে</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_strings_ca.xtb index 4f48820..1f6cc8e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ca.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
@@ -147,7 +147,6 @@ Per ajustar el terme de la cerca, manteniu-lo premut per seleccionar-lo. Per definir millor la cerca, feu lliscar el tauler cap amunt tot el que pugueu i toqueu el quadre de cerca.</translation> <translation id="3607167657931203000">Dades d'Emplenament automàtic</translation> -<translation id="3608436266458100337">Mode de lector</translation> <translation id="3628119975092896051">La llista de lectura està disponible sense connexió. Per afegir-hi una pàgina, toca <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Càrrega prèvia de pàgines web</translation> <translation id="3691593122358196899">Adreça d'interès afegida a <ph name="FOLDER_TITLE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_strings_cs.xtb index 74dad24..3d18109 100644 --- a/ios/chrome/app/strings/resources/ios_strings_cs.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
@@ -147,7 +147,6 @@ Chcete-li vyhledávací dotaz upravit, proveďte výběr dlouhým stisknutím. Chcete-li upřesnit vyhledávací dotaz, přejeďte po panelu až nahoru a klepněte na vyhledávací pole.</translation> <translation id="3607167657931203000">Data automatického vyplňování</translation> -<translation id="3608436266458100337">Režim čtečky</translation> <translation id="3628119975092896051">Seznam obsahu k přečtení je k dispozici offline. Chcete-li na něj přidat stránku, klepněte na <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Přednačítat stránky</translation> <translation id="3691593122358196899">Záložka přidána do složky <ph name="FOLDER_TITLE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_da.xtb b/ios/chrome/app/strings/resources/ios_strings_da.xtb index 1b94f88..31a1bdf6 100644 --- a/ios/chrome/app/strings/resources/ios_strings_da.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_da.xtb
@@ -147,7 +147,6 @@ Tryk længe på din søgeterm for at vælge den og tilpasse den. Du kan afgrænse din søgning ved at skyde panelet hele vejen op og trykke i søgefeltet.</translation> <translation id="3607167657931203000">AutoFyld-data</translation> -<translation id="3608436266458100337">Læser-tilstand</translation> <translation id="3628119975092896051">Din læseliste er tilgængelig offline. Du kan føje en side til din læseliste ved at trykke på <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Forudindlæs websider</translation> <translation id="3691593122358196899">Bogmærket er gemt i <ph name="FOLDER_TITLE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_de.xtb b/ios/chrome/app/strings/resources/ios_strings_de.xtb index 8144d18..5b3c925 100644 --- a/ios/chrome/app/strings/resources/ios_strings_de.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_de.xtb
@@ -147,7 +147,6 @@ Zur Anpassung des Suchbegriffs drücken Sie einige Sekunden lang auf den entsprechenden Begriff. Sie können Ihre Suche auch verfeinern, indem Sie das Feld ganz nach oben schieben und auf das Suchfeld tippen.</translation> <translation id="3607167657931203000">AutoFill-Daten</translation> -<translation id="3608436266458100337">Lesemodus</translation> <translation id="3628119975092896051">Ihre Leseliste ist offline verfügbar. Um Ihrer Leseliste eine Seite hinzuzufügen, tippen Sie auf <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Webseiten vorabladen</translation> <translation id="3691593122358196899">Als Lesezeichen in "<ph name="FOLDER_TITLE" />" gespeichert</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_el.xtb b/ios/chrome/app/strings/resources/ios_strings_el.xtb index 99d4bf2..1b88e7a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_el.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_el.xtb
@@ -147,7 +147,6 @@ Για να τροποποιήσετε τον όρο αναζήτησης, πατήστε παρατεταμένα για να τον επιλέξετε. Για να κάνετε την αναζήτησή σας πιο συγκεκριμένη, σύρετε το παράθυρο εντελώς προς τα επάνω και αγγίξτε το πλαίσιο αναζήτησης.</translation> <translation id="3607167657931203000">Δεδομένα Αυτόματης συμπλήρωσης</translation> -<translation id="3608436266458100337">Λειτουργία ανάγνωσης</translation> <translation id="3628119975092896051">Η λίστα ανάγνωσης είναι διαθέσιμη εκτός σύνδεσης. Για να προσθέσετε μια σελίδα στη λίστα ανάγνωσης, πατήστε το εικονίδιο <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Προφόρτ. ιστοσελίδων</translation> <translation id="3691593122358196899">Ο σελιδοδείκτης είναι στο "<ph name="FOLDER_TITLE" />"</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb index 41cb0b8..f26c9fc7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
@@ -18,6 +18,7 @@ <translation id="1209206284964581585">Hide for now</translation> <translation id="1219674500290482172">Unable to connect to the Internet.</translation> <translation id="1254117744268754948">Choose Folder</translation> +<translation id="1265739287306757398">Learn How</translation> <translation id="1272079795634619415">Stop</translation> <translation id="129553762522093515">Recently closed</translation> <translation id="1323735185997015385">Delete</translation> @@ -60,6 +61,7 @@ <translation id="1952728750904661634">Sign in with managed account</translation> <translation id="1974060860693918893">Advanced</translation> <translation id="1989112275319619282">Browse</translation> +<translation id="2015722694326466240">To see passwords, you must first set a passcode on your device.</translation> <translation id="2068952045031577364">Past Week</translation> <translation id="2079545284768500474">Undo</translation> <translation id="209018056901015185">Request Desktop Site</translation> @@ -147,7 +149,6 @@ To adjust your search term, long press to select. To refine your search, slide the panel all the way up and touch the search box.</translation> <translation id="3607167657931203000">Autofill Data</translation> -<translation id="3608436266458100337">Reader mode</translation> <translation id="3628119975092896051">Your reading list is available offline. To add a page to your reading list, tap <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Pre-load Web Pages</translation> <translation id="3691593122358196899">Bookmarked to <ph name="FOLDER_TITLE" /></translation> @@ -183,6 +184,7 @@ <translation id="4508750114462689118">Close sign-in promo</translation> <translation id="4526249700380860531">View and manage saved passwords at <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation> <translation id="4536418791685807335">Try signing in again.</translation> +<translation id="461440297010471931">Searching with Google</translation> <translation id="4620246317052452550">Pages That You've Read</translation> <translation id="4636930964841734540">Info</translation> <translation id="4659667755519643272">Enter Tab Switcher</translation> @@ -191,6 +193,7 @@ Your data is encrypted with your sync passphrase. Enter it to start sync.</translation> <translation id="473775607612524610">Update</translation> <translation id="481968316161811770">Cookies, Site Data</translation> +<translation id="4854345657858711387">Set A Passcode</translation> <translation id="4860895144060829044">Call</translation> <translation id="4875622588773761625">Do you want <ph name="PASSWORD_MANAGER_BRAND" /> to update your password for this site?</translation> <translation id="4881695831933465202">Open</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb index cc32e038..42d8a2e6c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
@@ -147,7 +147,6 @@ Para ajustar el término de búsqueda, mantén presionado el texto y selecciónalo. Para perfeccionar la búsqueda, desliza el panel hacia arriba y toca el cuadro de búsqueda.</translation> <translation id="3607167657931203000">Autocompletar datos</translation> -<translation id="3608436266458100337">Modo de lectura</translation> <translation id="3628119975092896051">Tu lista de lectura está disponible sin conexión. Para agregar una página, presiona <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Precargar pág. web</translation> <translation id="3691593122358196899">Se agregó a favoritos en <ph name="FOLDER_TITLE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es.xtb b/ios/chrome/app/strings/resources/ios_strings_es.xtb index c554dbf..67a70dd 100644 --- a/ios/chrome/app/strings/resources/ios_strings_es.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_es.xtb
@@ -147,7 +147,6 @@ Para ajustar el término de búsqueda, mantén pulsado el texto para seleccionarlo. Para restringir la búsqueda, desliza el panel hacia arriba y toca el cuadro de búsqueda.</translation> <translation id="3607167657931203000">Datos de la función Autocompletar</translation> -<translation id="3608436266458100337">Modo de lectura</translation> <translation id="3628119975092896051">Tu lista de lectura está disponible sin conexión. Para añadir una página a la lista, toca <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Precargar páginas web</translation> <translation id="3691593122358196899">Marcador añadido a <ph name="FOLDER_TITLE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_et.xtb b/ios/chrome/app/strings/resources/ios_strings_et.xtb index dd66546..5fa1a2c1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_et.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_et.xtb
@@ -147,7 +147,6 @@ Otsingutermini korrigeerimiseks vajutage valimiseks pikalt. Otsingu täpsustamiseks libistage paneel täiesti üles ja puudutage otsingukasti.</translation> <translation id="3607167657931203000">Automaattäite andmed</translation> -<translation id="3608436266458100337">Lugejarežiim</translation> <translation id="3628119975092896051">Teie lugemisloend on võrguühenduseta saadaval. Lugemisloendisse lehe lisamiseks puudutage ikooni <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Lehtede eellaadimine</translation> <translation id="3691593122358196899">Lisatud järjehoidjana kausta <ph name="FOLDER_TITLE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_strings_fa.xtb index c0fac9fdd..60d06dd 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fa.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
@@ -148,7 +148,6 @@ برای تنظیم عبارت جستجویتان، به مدت طولانی فشار دهید تا انتخاب شود. برای تصحیح جستجویتان، پانل را بهطور کامل به بالا بلغزانید و کادر جستجو را لمس کنید.</translation> <translation id="3607167657931203000">دادههای تکمیل خودکار</translation> -<translation id="3608436266458100337">حالت خواننده</translation> <translation id="3628119975092896051">فهرست خواندن شما در حالت آفلاین در دسترس است. برای افزودن صفحهای به فهرست خواندنتان، روی <ph name="SHARE_OPENING_ICON" /> ضربه بزنید.</translation> <translation id="3638472932233958418">صفحات وب از پیش بارگیری شده</translation> <translation id="3691593122358196899">نشانک به <ph name="FOLDER_TITLE" /> اضافه شد</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_strings_fi.xtb index 2b8a3a2..ea2d203 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
@@ -147,7 +147,6 @@ Muokkaa hakutermiä valitsemalla se pitkällä painalluksella. Tarkenna hakua liu'uttamalla paneeli yläasentoon ja koskettamalla hakukenttää.</translation> <translation id="3607167657931203000">Automaattisen täytön tiedot</translation> -<translation id="3608436266458100337">Lukijatila</translation> <translation id="3628119975092896051">Lukulistasi on käytettävissä offline-tilassa. Lisää sivu lukulistaasi valitsemalla <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Esilataa verkkosivut</translation> <translation id="3691593122358196899">Lisätty kirjanmerkiksi kansioon <ph name="FOLDER_TITLE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_strings_fil.xtb index c7a48984a..42411e1e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fil.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
@@ -147,7 +147,6 @@ Upang baguhin ang iyong termino para sa paghahanap, pindutin ito nang matagal upang mapili ito. Upang pinuhin ang iyong paghahanap, i-slide ang panel hanggang sa pinakaitaas at pindutin ang box para sa paghahanap.</translation> <translation id="3607167657931203000">Mag-autofill ng Data</translation> -<translation id="3608436266458100337">Reader mode</translation> <translation id="3628119975092896051">Available offline ang iyong listahan ng babasahin. Upang magdagdag ng page sa listahan ng babasahin mo, i-tap ang <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Mag-preload ng Mga Webpage</translation> <translation id="3691593122358196899">Na-bookmark sa <ph name="FOLDER_TITLE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_strings_fr.xtb index 809db90..910db80 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
@@ -147,7 +147,6 @@ Pour modifier le terme de recherche, appuyez sur celui-ci de manière prolongée afin de le sélectionner. Pour affiner la recherche, faites glisser le panneau jusqu'en haut et appuyez sur le champ de recherche.</translation> <translation id="3607167657931203000">Saisie automatique</translation> -<translation id="3608436266458100337">Mode Lecteur</translation> <translation id="3628119975092896051">Votre liste de lecture est disponible hors connexion. Pour ajouter une page à cette liste, appuyez sur <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Précharger pages Web</translation> <translation id="3691593122358196899">Ajouté aux favoris dans "<ph name="FOLDER_TITLE" />"</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_strings_gu.xtb index 01ffa686e..b04a5a6 100644 --- a/ios/chrome/app/strings/resources/ios_strings_gu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
@@ -147,7 +147,6 @@ તમારા શોધ શબ્દને બંધબેસતો કરવા, પસંદ કરવા માટે વધુ વખત દબાવી રાખો. તમારી શોધને રીફાઇન કરવા માટે, પેનલને આખી ઉપર સ્લાઇડ કરો અને શોધ બોક્સને ટચ કરો.</translation> <translation id="3607167657931203000">સ્વતઃભરણ ડેટા</translation> -<translation id="3608436266458100337">રીડર મોડ</translation> <translation id="3628119975092896051">તમારી વાંચન સૂચિ ઑફલાઇન ઉપલબ્ધ છે. તમારી વાંચન સૂચિમાં પૃષ્ઠ ઉમેરવા માટે, <ph name="SHARE_OPENING_ICON" /> ટૅપ કરો.</translation> <translation id="3638472932233958418">વેબપૃષ્ઠો પહેલાથી લોડ કરો</translation> <translation id="3691593122358196899"><ph name="FOLDER_TITLE" /> પર બુકમાર્ક કર્યું</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_strings_hi.xtb index f4c70e6..d74fede 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
@@ -147,7 +147,6 @@ अपने खोज शब्द को एडजस्ट करने के लिए, चुनने हेतु देर तक दबाएं. अपनी खोज को परिष्कृत करने के लिए, फलक को सीधे ऊपर स्लाइड करें और खोज बॉक्स को स्पर्श करें.</translation> <translation id="3607167657931203000">ऑटोमैटिक भरना</translation> -<translation id="3608436266458100337">रीडर मोड</translation> <translation id="3628119975092896051">आपकी पढ़ने की सूची ऑफ़लाइन उपलब्ध है. अपनी पढ़ने की सूची में कोई पेज जोड़ने के लिए, <ph name="SHARE_OPENING_ICON" /> पर टैप करें.</translation> <translation id="3638472932233958418">पहले से लोड वेबपेज</translation> <translation id="3691593122358196899"><ph name="FOLDER_TITLE" /> में बुकमार्क किया गया</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_strings_hr.xtb index e03f402..a2c9fc1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
@@ -147,7 +147,6 @@ Da biste prilagodili pojam za pretraživanje, dugo pritisnite za odabir. Da biste precizirali pretraživanje, kliznite ploču prema gore do vrha i dodirnite okvir za pretraživanje.</translation> <translation id="3607167657931203000">Podaci automatskog popunjavanja</translation> -<translation id="3608436266458100337">Način čitača</translation> <translation id="3628119975092896051">Vaš popis za čitanje dostupan je offline. Da biste dodali stranicu na popis za čitanje, dodirnite <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Već učitane stranice</translation> <translation id="3691593122358196899">Oznaka dodana u mapu <ph name="FOLDER_TITLE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_strings_hu.xtb index 62a2273..745fe02 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
@@ -147,7 +147,6 @@ A keresési kifejezés módosításához hosszú nyomva tartással hajthat végre kiválasztást. A keresés finomításához csúsztassa a panelt teljesen fel, majd érintse meg a keresőmezőt.</translation> <translation id="3607167657931203000">Automatikus kitöltés adatai</translation> -<translation id="3608436266458100337">Olvasási mód</translation> <translation id="3628119975092896051">Olvasási listája hozzáférhető offline módban. Ha szeretne hozzáadni oldalakat a listához, koppintson a következőkre: <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Weboldalak előtöltése</translation> <translation id="3691593122358196899">Könyvjelzők közé téve itt: <ph name="FOLDER_TITLE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_id.xtb b/ios/chrome/app/strings/resources/ios_strings_id.xtb index d4f71f4..d5e5de4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_id.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_id.xtb
@@ -147,7 +147,6 @@ Untuk menyesuaikan istilah penelusuran, tekan lama untuk memilih. Untuk menyaring penelusuran, geser panel ke atas kemudian sentuh kotak telusur.</translation> <translation id="3607167657931203000">Data Isi-Otomatis</translation> -<translation id="3608436266458100337">Mode pembaca</translation> <translation id="3628119975092896051">Daftar bacaan Anda tersedia secara offline. Untuk menambahkan halaman ke daftar bacaan, tap <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Pramuat Halaman Web</translation> <translation id="3691593122358196899">Dibookmark ke <ph name="FOLDER_TITLE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_it.xtb b/ios/chrome/app/strings/resources/ios_strings_it.xtb index bf3bf2a8..d47e56c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_it.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_it.xtb
@@ -147,7 +147,6 @@ Per modificare il termine di ricerca, premi a lungo per selezionarlo. Per perfezionare la ricerca, fai scorrere completamente il riquadro verso l'alto e tocca la casella di ricerca.</translation> <translation id="3607167657931203000">Dati della Compilazione automatica</translation> -<translation id="3608436266458100337">Modalità Reader</translation> <translation id="3628119975092896051">Il tuo elenco di lettura è disponibile offline. Per aggiungere una pagina all'elenco di lettura, tocca <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Precarica pagine web</translation> <translation id="3691593122358196899">Preferito aggiunto in: <ph name="FOLDER_TITLE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_strings_iw.xtb index e544c837..bcef61a0 100644 --- a/ios/chrome/app/strings/resources/ios_strings_iw.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
@@ -147,7 +147,6 @@ כדי לשנות את מונח החיפוש, גע נגיעה ארוכה במונח כדי לבחור בו. כדי לצמצם את החיפוש, הסט את החלונית עד למעלה וגע בתיבת החיפוש.</translation> <translation id="3607167657931203000">נתוני מילוי אוטומטי</translation> -<translation id="3608436266458100337">מצב קורא</translation> <translation id="3628119975092896051">אפשר לגשת לרשימת הקריאה במצב לא מקוון. כדי להוסיף דף לרשימת הקריאה, הקש על <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">טעינה מראש של דפי אינטרנט</translation> <translation id="3691593122358196899">התווסף לסימניות ב-<ph name="FOLDER_TITLE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_strings_ja.xtb index 94e117f..0025e3c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ja.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
@@ -147,7 +147,6 @@ 検索用語を押し続けるとその用語が選択され、選択範囲を調整できます。検索結果を絞り込むには、パネルを上にスライドして検索ボックスをタップします。</translation> <translation id="3607167657931203000">自動入力のデータ</translation> -<translation id="3608436266458100337">リーダーモード</translation> <translation id="3628119975092896051">リーディング リストをオフラインで利用できます。リーディング リストにページを追加するには、<ph name="SHARE_OPENING_ICON" /> をタップします。</translation> <translation id="3638472932233958418">ウェブページのプリロード</translation> <translation id="3691593122358196899">「<ph name="FOLDER_TITLE" />」にブックマークしました</translation> @@ -175,6 +174,7 @@ <translation id="4272631900155121838">QR コードをスキャンするには、設定でカメラを有効にしてください</translation> <translation id="4281844954008187215">利用規約</translation> <translation id="430793432425771671">すべて同期</translation> +<translation id="4342284590510997375">新規</translation> <translation id="4359125752503270327">このページは別のアプリケーションで開かれます。</translation> <translation id="4375040482473363939">QR コード検索</translation> <translation id="4378154925671717803">電話番号</translation> @@ -249,6 +249,7 @@ <translation id="5982717868370722439">既存のデータを <ph name="USER_EMAIL" /> に追加します。</translation> <translation id="6012140227487808125">暗号化しています...</translation> <translation id="6021332621416007159">次で開く...</translation> +<translation id="6039429417015973673"><ph name="TITLE" />、<ph name="PUBLISHER_INFORMATION" />、<ph name="PUBLICATION_DATE" /></translation> <translation id="6039694632319341016"><ph name="PASSWORD_MANAGER_BRAND" /> に保存されているこのサイトの <ph name="USERNAME" /> のパスワードを更新しますか?</translation> <translation id="6040143037577758943">閉じる</translation> <translation id="6042308850641462728">もっと見る</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_strings_kn.xtb index dc488e1..0c748f7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_kn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
@@ -147,7 +147,6 @@ ನಿಮ್ಮ ಹುಡುಕಾಟ ಪದವನ್ನು ಹೊಂದಿಸಲು, ಆಯ್ಕೆಮಾಡಲು ಸ್ವಲ್ಪ ಹೊತ್ತು ಒತ್ತಿ ಹಿಡಿದುಕೊಳ್ಳಿ. ನಿಮ್ಮ ಹುಡುಕಾಟವನ್ನು ಸಂಸ್ಕರಿಸಲು, ಪ್ಯಾನಲ್ ಅನ್ನು ಮೇಲಕ್ಕೆ ಸ್ಲೈಡ್ ಮಾಡಿ ಮತ್ತು ಹುಡುಕಾಟ ಬಾಕ್ಸ್ ಅನ್ನು ಸ್ಪರ್ಶಿಸಿ.</translation> <translation id="3607167657931203000">ಸ್ವಯಂಭರ್ತಿ ಡೇಟಾ</translation> -<translation id="3608436266458100337">ರೀಡರ್ ಮೋಡ್</translation> <translation id="3628119975092896051">ನಿಮ್ಮ ಓದುವ ಪಟ್ಟಿಯು ಆಫ್ಲೈನ್ನಲ್ಲಿ ಲಭ್ಯವಿದೆ. ನಿಮ್ಮ ಓದುವ ಪಟ್ಟಿಗೆ ಪುಟವನ್ನು ಸೇರಿಸಲು, <ph name="SHARE_OPENING_ICON" /> ಟ್ಯಾಪ್ ಮಾಡಿ.</translation> <translation id="3638472932233958418">ವೆಬ್ ಪುಟಗಳನ್ನು ಪೂರ್ವಲೋಡ್ ಮಾಡಿ</translation> <translation id="3691593122358196899"><ph name="FOLDER_TITLE" /> ಗೆ ಬುಕ್ಮಾರ್ಕ್ ಮಾಡಲಾಗಿದೆ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_strings_ko.xtb index df0e98f3..ec1c904f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ko.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
@@ -147,7 +147,6 @@ 검색어를 조정하려면 길게 눌러 선택하세요. 검색을 세분화하려면 패널을 위로 끝까지 슬라이드하여 검색창을 터치합니다.</translation> <translation id="3607167657931203000">데이터 자동완성</translation> -<translation id="3608436266458100337">리더 모드</translation> <translation id="3628119975092896051">읽기 목록을 오프라인에서 사용할 수 있습니다. 읽기 목록에 페이지를 추가하려면 <ph name="SHARE_OPENING_ICON" />을(를) 탭하세요.</translation> <translation id="3638472932233958418">웹페이지 미리 로드하기</translation> <translation id="3691593122358196899">북마크를 <ph name="FOLDER_TITLE" />에 추가함</translation> @@ -175,7 +174,7 @@ <translation id="4272631900155121838">QR 코드를 스캔하려면 설정에서 카메라를 사용하도록 설정하세요.</translation> <translation id="4281844954008187215">서비스 약관</translation> <translation id="430793432425771671">모두 동기화</translation> -<translation id="4342284590510997375">새 항목</translation> +<translation id="4342284590510997375">New</translation> <translation id="4359125752503270327">이 페이지는 다른 애플리케이션에서 열립니다.</translation> <translation id="4375040482473363939">QR 코드 검색</translation> <translation id="4378154925671717803">휴대전화</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_strings_lt.xtb index a4e41827..cd1d573 100644 --- a/ios/chrome/app/strings/resources/ios_strings_lt.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
@@ -147,7 +147,6 @@ Jei norite koreguoti paieškos terminą, paspauskite ir laikykite, kad jį pasirinktumėte. Kad patikslintumėte paiešką, slinkite skydeliu į viršų ir palieskite paieškos laukelį.</translation> <translation id="3607167657931203000">Autom. pild. duom.</translation> -<translation id="3608436266458100337">Skait. režimas</translation> <translation id="3628119975092896051">Skaitymo sąrašas pasiekiamas neprisijungus. Kad pridėtumėte puslapį prie skaitymo sąrašo, palieskite <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Iš anksto įk. tinkl.</translation> <translation id="3691593122358196899">Sukurta „<ph name="FOLDER_TITLE" />“ žymė</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_strings_lv.xtb index d4a9c84..f3df989 100644 --- a/ios/chrome/app/strings/resources/ios_strings_lv.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
@@ -147,7 +147,6 @@ Lai pielāgotu meklēšanas vienumu, nospiediet un turiet to. Lai veiktu precīzāku meklēšanu, velciet paneli augšup līdz galam un pieskarieties meklēšanas lodziņam.</translation> <translation id="3607167657931203000">Aut. aizpildes dati</translation> -<translation id="3608436266458100337">Lasītāja režīms</translation> <translation id="3628119975092896051">Jūsu lasīšanas saraksts ir pieejams bezsaistē. Lai tam pievienotu kādu lapu, pieskarieties ikonai <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Pirmsiel. tīm. lapas</translation> <translation id="3691593122358196899">Grāmatzīme saglabāta mapē <ph name="FOLDER_TITLE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_strings_ml.xtb index f2519ba..4cacf4b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ml.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
@@ -147,7 +147,6 @@ നിങ്ങളുടെ തിരയൽ പദം ക്രമീകരിക്കാൻ, തിരഞ്ഞെടുക്കുന്നതിനായി ദീർഘനേരം അമർത്തിപ്പിടിക്കുക. തിരയൽ പരിഷ്ക്കരിക്കാൻ, എല്ലാ രീതിയിലും പാനൽ മുകളിലേക്ക് നീക്കി തിരയൽ ബോക്സ് സ്പർശിക്കുക.</translation> <translation id="3607167657931203000">ഓട്ടോഫിൽ ഡാറ്റ</translation> -<translation id="3608436266458100337">റീഡർ മോഡ്</translation> <translation id="3628119975092896051">നിങ്ങളുടെ വായന ലിസ്റ്റ് ഓഫ്ലൈനിൽ ലഭ്യമാണ്. വായന ലിസ്റ്റിൽ ഒരു പേജ് ചേർക്കാൻ, <ph name="SHARE_OPENING_ICON" /> ടാപ്പുചെയ്യുക.</translation> <translation id="3638472932233958418">മുമ്പ് ലോഡുചെയ്ത വെബ്പേജുകൾ</translation> <translation id="3691593122358196899"><ph name="FOLDER_TITLE" /> ഫോൾഡറിലേക്ക് ബുക്ക്മാർക്ക് ചെയ്തു</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_strings_mr.xtb index 83c1304..6e2d4f1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_mr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
@@ -147,7 +147,6 @@ आपली शोध संज्ञा समायोजित करण्यासाठी, निवडण्यासाठी जास्त वेळ दाबा. आपला शोध परिष्कृत करण्यासाठी, पॅनल सर्व मार्गाने वर स्लाइड करा आणि शोध बॉक्सला स्पर्श करा.</translation> <translation id="3607167657931203000">स्वयं-भरण डेटा</translation> -<translation id="3608436266458100337">वाचक मोड</translation> <translation id="3628119975092896051">आपली वाचन सूची ऑफलाइन उपलब्ध आहे. आपल्या वाचन सूचीमध्ये एक पृष्ठ जोडण्यासाठी, <ph name="SHARE_OPENING_ICON" /> टॅप करा.</translation> <translation id="3638472932233958418">वेबपृष्ठे प्रीलोड करा</translation> <translation id="3691593122358196899"><ph name="FOLDER_TITLE" /> मध्ये बुकमार्क केले</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_strings_ms.xtb index 95605e5d..fcbea40b0 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ms.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
@@ -147,7 +147,6 @@ Untuk membetulkan istilah carian anda, tekan lama untuk memilih. Untuk memperhalusi carian anda, luncurkan panel ke atas dan sentuh kotak carian.</translation> <translation id="3607167657931203000">Autolengkap Data</translation> -<translation id="3608436266458100337">Mod pembaca</translation> <translation id="3628119975092896051">Senarai bacaan anda tersedia di luar talian. Untuk menambahkan halaman pada senarai bacaan anda, ketik <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Pramuat Halaman Web</translation> <translation id="3691593122358196899">Ditandai halaman ke <ph name="FOLDER_TITLE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_strings_nl.xtb index fe2546cf..9e98058d 100644 --- a/ios/chrome/app/strings/resources/ios_strings_nl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
@@ -147,7 +147,6 @@ Als je de zoekterm wilt aanpassen, houd je deze aangeraakt om de term te selecteren. Als je je zoekopdracht wilt verfijnen, veeg je het deelvenster helemaal naar boven en tik je op het zoekvak.</translation> <translation id="3607167657931203000">Gegevens van Automatisch aanvullen</translation> -<translation id="3608436266458100337">Lezermodus</translation> <translation id="3628119975092896051">Je leeslijst is offline beschikbaar. Als je een pagina aan je leeslijst wilt toevoegen, tik je op <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Webpagina's vooraf laden</translation> <translation id="3691593122358196899">Bladwijzer gemaakt in <ph name="FOLDER_TITLE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_no.xtb b/ios/chrome/app/strings/resources/ios_strings_no.xtb index b96dd5b5..18f61fa42 100644 --- a/ios/chrome/app/strings/resources/ios_strings_no.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_no.xtb
@@ -147,7 +147,6 @@ Hvis du vil endre søkeordet, kan du trykke på det og holde for å merke det. Hvis du vil finstemme søket, kan du dra panelet helt opp til toppen og trykke på søkefeltet.</translation> <translation id="3607167657931203000">Autofylldata</translation> -<translation id="3608436266458100337">Lesermodus</translation> <translation id="3628119975092896051">Leselisten din er tilgjengelig uten nett. Du kan legge til sider i leselisten ved å trykke på <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Last inn nettsider på forhånd</translation> <translation id="3691593122358196899">Satt som bokmerke i <ph name="FOLDER_TITLE" /></translation> @@ -175,6 +174,7 @@ <translation id="4272631900155121838">For å skanne QR-koder, slå på kameraet i innstillingene</translation> <translation id="4281844954008187215">Vilkår for bruk</translation> <translation id="430793432425771671">Synkroniser alt</translation> +<translation id="4342284590510997375">Nytt</translation> <translation id="4359125752503270327">Denne siden åpnes i et annet program.</translation> <translation id="4375040482473363939">QR-kodesøk</translation> <translation id="4378154925671717803">Telefon</translation> @@ -249,6 +249,7 @@ <translation id="5982717868370722439">Legg til eksisterende data i <ph name="USER_EMAIL" />.</translation> <translation id="6012140227487808125">Krypterer …</translation> <translation id="6021332621416007159">Åpne i...</translation> +<translation id="6039429417015973673"><ph name="TITLE" />, <ph name="PUBLISHER_INFORMATION" />, <ph name="PUBLICATION_DATE" /></translation> <translation id="6039694632319341016">Vil du at <ph name="PASSWORD_MANAGER_BRAND" /> skal oppdatere passordet ditt for <ph name="USERNAME" /> for dette nettstedet?</translation> <translation id="6040143037577758943">Lukk</translation> <translation id="6042308850641462728">Mer</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_strings_pl.xtb index cd573e4..1ce9b55 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
@@ -147,7 +147,6 @@ Aby dostosować wyszukiwane hasło, naciśnij je i przytrzymaj, by je zaznaczyć. Aby doprecyzować wyszukiwanie, przesuń panel do samej góry i kliknij pole wyszukiwania.</translation> <translation id="3607167657931203000">Autouzupełnianie</translation> -<translation id="3608436266458100337">Tryb czytnika</translation> <translation id="3628119975092896051">Twoja lista Do przeczytania jest dostępna offline. Aby dodać do niej stronę, kliknij <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Wstępne wczytywanie stron</translation> <translation id="3691593122358196899">Utworzono zakładkę w folderze <ph name="FOLDER_TITLE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb index 416d663..0261a9eb 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -147,7 +147,6 @@ <translation id="360480449234699036">Saiba mais sobre tópicos em websites sem sair da página. Quando você toca em uma palavra em um site e mantém pressionado, o Google faz uma pesquisa em contexto para você. Definições, imagens, resultados de pesquisa e outros detalhes serão mostrados. Para selecionar o termo que quer pesquisar, toque no termo e mantenha-o pressionado. Para refinar a pesquisa, acesse a caixa de pesquisa deslizando o dedo da parte de cima da tela até embaixo.</translation> <translation id="3607167657931203000">Dados de preenchimento automático</translation> -<translation id="3608436266458100337">Modo leitor</translation> <translation id="3628119975092896051">Sua lista de leitura está disponível off-line. Para adicionar uma página à lista, toque em <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Pré-carregar páginas da web</translation> <translation id="3691593122358196899">Adicionado como favorito em <ph name="FOLDER_TITLE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb index 0013a95..51f68b7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
@@ -147,7 +147,6 @@ Para ajustar o termo de pesquisa, prima continuamente para selecionar. Para refinar a sua pesquisa, deslize lentamente o painel totalmente para cima e toque na caixa de pesquisa.</translation> <translation id="3607167657931203000">Dados de preenchimento automático</translation> -<translation id="3608436266458100337">Modo de leitor</translation> <translation id="3628119975092896051">A sua lista de leitura está disponível offline. Para adicionar uma página à mesma, toque em <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Pré-carregar Páginas Web</translation> <translation id="3691593122358196899">Adicionado aos marcadores em <ph name="FOLDER_TITLE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ro.xtb b/ios/chrome/app/strings/resources/ios_strings_ro.xtb index a7b4fd16..0f9624e4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ro.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
@@ -147,7 +147,6 @@ Pentru a ajusta termenii căutării, apasă lung pentru a selecta. Pentru a rafina căutarea, glisează panoul până în partea de sus și atinge caseta de căutare.</translation> <translation id="3607167657931203000">Datele de completare automată</translation> -<translation id="3608436266458100337">Modul Cititor</translation> <translation id="3628119975092896051">Lista de lectură este disponibilă offline. Pentru a adăuga o pagină în lista de lectură, atinge <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Preîncarcă pagini</translation> <translation id="3691593122358196899">Marcaj adăugat în <ph name="FOLDER_TITLE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_strings_ru.xtb index 604699de..1c37489 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ru.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
@@ -147,7 +147,6 @@ Чтобы задать новый поисковый запрос, нажмите на нужное слово и не отпускайте палец. Чтобы уточнить запрос, прокрутите панель вверх и коснитесь поисковой строки.</translation> <translation id="3607167657931203000">Данные автозаполнен.</translation> -<translation id="3608436266458100337">Режим чтения</translation> <translation id="3628119975092896051">Ваш список для чтения доступен без подключения к Интернету. Чтобы добавить в него страницу, нажмите <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Предварительная загрузка</translation> <translation id="3691593122358196899">Закладка добавлена в папку "<ph name="FOLDER_TITLE" />"</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_strings_sk.xtb index 263471bcb..9166248 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
@@ -147,7 +147,6 @@ Ak chcete upraviť hľadaný výraz, vyberte ho dlhým stlačením. Ak chcete vyhľadávanie spresniť, posuňte panel úplne hore a klepnite na vyhľadávacie pole.</translation> <translation id="3607167657931203000">Údaje automatického dopĺňania</translation> -<translation id="3608436266458100337">Režim čítačky</translation> <translation id="3628119975092896051">Váš čitateľský zoznam je k dispozícii offline. Ak chcete pridať stránku do čitateľského zoznamu, klepnite na položku <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Predbežne načítavať webové stránky</translation> <translation id="3691593122358196899">Uložené ako záložka v priečinku <ph name="FOLDER_TITLE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_strings_sl.xtb index 5e26438..9c78946 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
@@ -147,7 +147,6 @@ Če želite prilagoditi iskalno poizvedbo, jo izberite z daljšim dotikom. Če želite podrobneje nastaviti iskanje, potisnite podokno povsem navzgor in se dotaknite iskalnega polja.</translation> <translation id="3607167657931203000">Autofill Data</translation> -<translation id="3608436266458100337">Reader mode</translation> <translation id="3628119975092896051">Bralni seznam je na voljo brez povezave. Če želite dodati stran na bralni seznam, se dotaknite <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Vnaprej naloži spletne strani</translation> <translation id="3691593122358196899">Zaznamek ustvarjen v mapi <ph name="FOLDER_TITLE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_strings_sr.xtb index b4aa7223..39987e7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
@@ -147,7 +147,6 @@ Да бисте прилагодили термин за претрагу, притисните и задржите да бисте га изабрали. Да бисте прецизирали претрагу, превуците таблу нагоре до краја и додирните оквир за претрагу.</translation> <translation id="3607167657931203000">Подаци аутоматског попуњавања</translation> -<translation id="3608436266458100337">Режим читаоца</translation> <translation id="3628119975092896051">Листа за читање је доступна офлајн. Да бисте додали страницу на листу за читање, додирните <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Унап. учитај веб-странице</translation> <translation id="3691593122358196899">Обележивач је додат у <ph name="FOLDER_TITLE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sv.xtb b/ios/chrome/app/strings/resources/ios_strings_sv.xtb index 78b6f80..1c78187 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sv.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sv.xtb
@@ -147,7 +147,6 @@ Om du vill ändra söktermen trycker du länge för att välja. Om du vill förfina sökningen drar du panelen ända upp och trycker på sökrutan.</translation> <translation id="3607167657931203000">Autofyll uppgifter</translation> -<translation id="3608436266458100337">Läsläge</translation> <translation id="3628119975092896051">Läslistan är tillgänglig offline. Om du vill lägga till en sida i läslistan trycker du på <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Läs in webbsidor i förväg</translation> <translation id="3691593122358196899">Bokmärkt i <ph name="FOLDER_TITLE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sw.xtb b/ios/chrome/app/strings/resources/ios_strings_sw.xtb index 7ffafec..6fe19a7d 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sw.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sw.xtb
@@ -147,7 +147,6 @@ Ili kurekebisha hoja yako ya utafutaji, bonyeza kwa muda mrefu ili kuchagua. Ili kuchuja utafutaji wako, telezesha paneli hadi juu na uguse kisanduku cha utafutaji.</translation> <translation id="3607167657931203000">Jaza Data Kiotomatiki</translation> -<translation id="3608436266458100337">Hali ya msomaji</translation> <translation id="3628119975092896051">Orodha yako ya kusoma inapatikana nje ya mtandao. Ili kuongeza ukurasa kwenye orodha yako ya kusoma, gonga <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Pakia Kurasa za wavuti Mapema</translation> <translation id="3691593122358196899">Imetiwa alamisho kwenye <ph name="FOLDER_TITLE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_strings_ta.xtb index 0d54c90..4aad0a1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ta.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
@@ -147,7 +147,6 @@ உங்கள் தேடல் சொல்லைத் திருத்த, நீண்ட நேரம் அழுத்தி, அதைத் தேர்ந்தெடுக்கவும். துல்லியமாகத் தேட, பேனலை மேற்புறம் இழுத்து, தேடல் பெட்டியைத் தொடவும்.</translation> <translation id="3607167657931203000">தன்னிரப்பி தரவு</translation> -<translation id="3608436266458100337">படித்தல் பயன்முறை</translation> <translation id="3628119975092896051">உங்கள் வாசிப்புப் பட்டியலை ஆஃப்லைனில் பயன்படுத்தலாம். வாசிப்புப் பட்டியலில் பக்கத்தைச் சேர்க்க, <ph name="SHARE_OPENING_ICON" /> என்பதைத் தட்டவும்.</translation> <translation id="3638472932233958418">வலைப்பக்கங்களை முன்னதாக ஏற்று</translation> <translation id="3691593122358196899"><ph name="FOLDER_TITLE" /> இல் புத்தகக்குறியைச் சேர்த்தது</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_te.xtb b/ios/chrome/app/strings/resources/ios_strings_te.xtb index e782805f..60cd44f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_te.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_te.xtb
@@ -147,7 +147,6 @@ మీ శోధన పదాన్ని సర్దుబాటు చేయడం కోసం ఎంచుకోవడానికి ఎక్కువసేపు నొక్కి ఉంచండి. మీ శోధనను మెరుగుపరచడానికి, ప్యానెల్ను పూర్తిగా పైకి స్లైడ్ చేసి, శోధన పెట్టెను తాకండి.</translation> <translation id="3607167657931203000">స్వీయపూర్తి డేటా</translation> -<translation id="3608436266458100337">రీడర్ మోడ్</translation> <translation id="3628119975092896051">మీ పఠన జాబితా ఆఫ్లైన్లో అందుబాటులో ఉంది. మీ పఠన జాబితాకు పేజీని జోడించడానికి, <ph name="SHARE_OPENING_ICON" />ని నొక్కండి.</translation> <translation id="3638472932233958418">వెబ్పేజీలను ముందే లోడ్ చేయి</translation> <translation id="3691593122358196899"><ph name="FOLDER_TITLE" />కి బుక్మార్క్ చేయబడింది</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_th.xtb b/ios/chrome/app/strings/resources/ios_strings_th.xtb index d0cd867a..3abfd67e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_th.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_th.xtb
@@ -145,7 +145,6 @@ หากต้องการแก้ไขข้อความค้นหา ให้กดค้างไว้เพื่อเลือก หากต้องการปรับการค้นหา ให้เลื่อนแผงขึ้นและแตะช่องค้นหา</translation> <translation id="3607167657931203000">ป้อนข้อมูลอัตโนมัติ</translation> -<translation id="3608436266458100337">โหมดผู้อ่าน</translation> <translation id="3628119975092896051">เรื่องรออ่านของคุณพร้อมใช้งานในแบบออฟไลน์ หากต้องการเพิ่มหน้าลงในเรื่องรออ่าน ให้แตะ<ph name="SHARE_OPENING_ICON" /></translation> <translation id="3638472932233958418">โหลดหน้าเว็บล่วงหน้า</translation> <translation id="3691593122358196899">เพิ่มบุ๊กมาร์กไปยัง <ph name="FOLDER_TITLE" /> แล้ว</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_strings_tr.xtb index 7e523d81..c24c226 100644 --- a/ios/chrome/app/strings/resources/ios_strings_tr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
@@ -147,7 +147,6 @@ Arama teriminizi düzeltmek için uzun basarak terimi seçin. Aramanızı ayrıntılı hale getirmek için paneli tümüyle yukarı kaydırın ve arama kutusuna dokunun.</translation> <translation id="3607167657931203000">Verileri Otomatik Doldur</translation> -<translation id="3608436266458100337">Okuyucu modu</translation> <translation id="3628119975092896051">Okuma listeniz çevrimdışı olarak kullanılabilir. Okuma listenize sayfa eklemek için <ph name="SHARE_OPENING_ICON" /> simgesine dokunun.</translation> <translation id="3638472932233958418">Web Sayfalarını Önceden Yükle</translation> <translation id="3691593122358196899">Yer işareti <ph name="FOLDER_TITLE" /> klasörüne eklendi</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uk.xtb b/ios/chrome/app/strings/resources/ios_strings_uk.xtb index 9860d17..411a8bd 100644 --- a/ios/chrome/app/strings/resources/ios_strings_uk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_uk.xtb
@@ -147,7 +147,6 @@ Щоб змінити пошуковий термін, натисніть і утримуйте його. Щоб уточнити пошуковий запит, пересуньте панель угору та торкніться вікна пошуку.</translation> <translation id="3607167657931203000">Дані автозаповнення</translation> -<translation id="3608436266458100337">Режим читання</translation> <translation id="3628119975092896051">Ваш список читання доступний офлайн. Щоб додати до нього сторінку, торкніться опції <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Попер.завантаж.стор.</translation> <translation id="3691593122358196899">Закладку збережено в папці "<ph name="FOLDER_TITLE" />"</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_strings_vi.xtb index 57bb069..62773c28 100644 --- a/ios/chrome/app/strings/resources/ios_strings_vi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
@@ -147,7 +147,6 @@ Để điều chỉnh cụm từ tìm kiếm của bạn, nhấn và giữ để chọn. Để tinh chỉnh tìm kiếm của bạn, trượt bảng điều khiển theo mọi hướng lên trên rồi chạm vào hộp tìm kiếm.</translation> <translation id="3607167657931203000">Dữ liệu tự động điền</translation> -<translation id="3608436266458100337">Chế độ đọc</translation> <translation id="3628119975092896051">Danh sách đọc của bạn khả dụng khi ngoại tuyến. Để thêm một trang vào danh sách đọc, nhấn <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Tải trước trang web</translation> <translation id="3691593122358196899">Đã đánh dấu trang vào <ph name="FOLDER_TITLE" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb index 362878cd..9d605ea 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
@@ -147,7 +147,6 @@ 要调整搜索字词,请长按将其选中。要缩小搜索范围,请将面板向上滑动到顶部,然后触摸搜索框。</translation> <translation id="3607167657931203000">自动填充数据</translation> -<translation id="3608436266458100337">阅读器模式</translation> <translation id="3628119975092896051">您的阅读清单可供离线访问。要将某个网页添加到该清单中,请依次点按<ph name="SHARE_OPENING_ICON" />。</translation> <translation id="3638472932233958418">预先加载网页</translation> <translation id="3691593122358196899">已将书签添加到“<ph name="FOLDER_TITLE" />”</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb index 8ce759b..464055e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
@@ -147,7 +147,6 @@ 如要調整搜尋字詞,直接長按即可選取。如要修正搜尋,請將面板滑動到最上方,再輕觸搜尋框。</translation> <translation id="3607167657931203000">自動填入資料</translation> -<translation id="3608436266458100337">閱讀器模式</translation> <translation id="3628119975092896051">閱讀清單可供離線存取。如要將網頁加入閱讀清單,請輕觸 <ph name="SHARE_OPENING_ICON" />。</translation> <translation id="3638472932233958418">預先載入網頁</translation> <translation id="3691593122358196899">已將書籤加入「<ph name="FOLDER_TITLE" />」</translation>
diff --git a/ios/chrome/browser/ui/BUILD.gn b/ios/chrome/browser/ui/BUILD.gn index 4b1ffe5..311943e 100644 --- a/ios/chrome/browser/ui/BUILD.gn +++ b/ios/chrome/browser/ui/BUILD.gn
@@ -151,8 +151,10 @@ # On iOS, the terms of service file need to be loaded from the application # bundle, not from a datapack. As GetTermsOfServicePath() returns path to # those files, they are added to //ios/chrome/browser/ui:resources. + "//components/resources/terms/terms_am.html", "//components/resources/terms/terms_ar.html", "//components/resources/terms/terms_bg.html", + "//components/resources/terms/terms_bn.html", "//components/resources/terms/terms_ca.html", "//components/resources/terms/terms_cs.html", "//components/resources/terms/terms_da.html", @@ -162,9 +164,12 @@ "//components/resources/terms/terms_en.html", "//components/resources/terms/terms_es-419.html", "//components/resources/terms/terms_es.html", + "//components/resources/terms/terms_et.html", "//components/resources/terms/terms_fa.html", "//components/resources/terms/terms_fi.html", + "//components/resources/terms/terms_fil.html", "//components/resources/terms/terms_fr.html", + "//components/resources/terms/terms_gu.html", "//components/resources/terms/terms_he.html", "//components/resources/terms/terms_hi.html", "//components/resources/terms/terms_hr.html", @@ -172,8 +177,12 @@ "//components/resources/terms/terms_id.html", "//components/resources/terms/terms_it.html", "//components/resources/terms/terms_ja.html", + "//components/resources/terms/terms_kn.html", "//components/resources/terms/terms_ko.html", "//components/resources/terms/terms_lt.html", + "//components/resources/terms/terms_lv.html", + "//components/resources/terms/terms_ml.html", + "//components/resources/terms/terms_mr.html", "//components/resources/terms/terms_nb.html", "//components/resources/terms/terms_nl.html", "//components/resources/terms/terms_pl.html", @@ -182,8 +191,12 @@ "//components/resources/terms/terms_ro.html", "//components/resources/terms/terms_ru.html", "//components/resources/terms/terms_sk.html", + "//components/resources/terms/terms_sl.html", "//components/resources/terms/terms_sr.html", "//components/resources/terms/terms_sv.html", + "//components/resources/terms/terms_sw.html", + "//components/resources/terms/terms_ta.html", + "//components/resources/terms/terms_te.html", "//components/resources/terms/terms_th.html", "//components/resources/terms/terms_tr.html", "//components/resources/terms/terms_uk.html",
diff --git a/ios/chrome/browser/ui/file_locations_unittest.mm b/ios/chrome/browser/ui/file_locations_unittest.mm index cb315b7..d983f60 100644 --- a/ios/chrome/browser/ui/file_locations_unittest.mm +++ b/ios/chrome/browser/ui/file_locations_unittest.mm
@@ -64,16 +64,23 @@ // Tests that locale/languages available on iOS are mapped to either a // translated Chrome Terms of Service or to English. TEST_F(FileLocationsTest, TestTermsOfServiceForSupportedLanguages) { - // List of available localized terms_*.html files. Note that this list is - // hardcoded and needs to be manually maintained as new locales are added - // to Chrome. See http://crbug/522638 - NSSet* localizedTermsHtml = - [NSSet setWithObjects:@"ar", @"bg", @"ca", @"cs", @"da", @"de", @"el", - @"en-GB", @"en", @"es-419", @"es", @"fa", @"fi", - @"fr", @"he", @"hi", @"hr", @"hu", @"id", @"it", - @"ja", @"ko", @"lt", @"nb", @"nl", @"pl", @"pt-BR", - @"pt-PT", @"ro", @"ru", @"sk", @"sr", @"sv", @"th", - @"tr", @"uk", @"vi", @"zh-CN", @"zh-TW", nil]; + // TODO(crbug.com/522638): List of available localized terms_*.html files. + // This list is manually maintained as new locales are added to + // components/resources/terms/. + NSSet* localizedTermsHtml = [NSSet + setWithObjects:@"am", @"ar", @"bg", @"bn", @"ca", @"cs", @"da", @"de", + @"el", @"en-GB", @"en", @"es-419", @"es", @"et", @"fa", + @"fi", @"fil", @"fr", @"gu", @"he", @"hi", @"hr", @"hu", + @"id", @"it", @"ja", @"kn", @"ko", @"lt", @"lv", @"ml", + @"mr", @"nb", @"nl", @"pl", @"pt-BR", @"pt-PT", @"ro", + @"ru", @"sk", @"sl", @"sr", @"sv", @"sw", @"ta", @"te", + @"th", @"tr", @"uk", @"vi", @"zh-CN", @"zh-TW", nil]; + // Languages supported by iOS is returned by -availableLocaleIdentifiers. + // This unit test fails when a language available in iOS falls back to + // English (en) even though the terms_*.html file is available (listed in + // |localizedTermsHtml|). Fix this by adding the missing terms_*.html + // to ios/chrome/browser/ui/BUILD.gn + NSMutableSet<NSString*>* incorrectFallback = [NSMutableSet set]; for (NSString* locale in [NSLocale availableLocaleIdentifiers]) { NSString* normalizedLocale = [locale stringByReplacingOccurrencesOfString:@"_" withString:@"-"]; @@ -83,12 +90,19 @@ termsBaseName_, GetIOSLocaleMapping(base::SysNSStringToUTF8(normalizedLocale)), extension_); - if (filename == enFile_ && ![language isEqualToString:@"en"]) { - NSLog(@"OK: Locale %@ using language %@ falls back to use English ToS", - locale, language); - EXPECT_FALSE([localizedTermsHtml containsObject:language]); + if (filename == enFile_ && ![language isEqualToString:@"en"] && + [localizedTermsHtml containsObject:language]) { + [incorrectFallback addObject:language]; } } + NSUInteger numberOfMissingFiles = [incorrectFallback count]; + EXPECT_EQ(numberOfMissingFiles, 0U); + if (numberOfMissingFiles) { + NSLog(@"Add the following file%@ to ios/chrome/browser/ui/BUILD.gn", + numberOfMissingFiles > 1 ? @"s" : @""); + for (NSString* language in incorrectFallback) + NSLog(@" terms_%@.html", language); + } } } // namespace
diff --git a/ios/showcase/payments/sc_payments_editor_egtest.mm b/ios/showcase/payments/sc_payments_editor_egtest.mm index a678628..9d9ae43 100644 --- a/ios/showcase/payments/sc_payments_editor_egtest.mm +++ b/ios/showcase/payments/sc_payments_editor_egtest.mm
@@ -306,6 +306,11 @@ // get focus except for the last textfield in which case causes the focus to go // away from the textfield. - (void)testNavigationByTappingReturn { + // TODO(crbug.com/759904): Reenable on iOS11 iPad when working on iPad iOS 11 + // devices. + if (base::ios::IsRunningOnIOS11OrLater() && IsIPadIdiom()) { + EARL_GREY_TEST_DISABLED(@"Test disabled on iOS 11."); + } // Tap the name textfield. [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"Name_textField")] performAction:grey_tap()];
diff --git a/ios/web/app/web_main_loop.mm b/ios/web/app/web_main_loop.mm index 47984fcb..b13a6ad 100644 --- a/ios/web/app/web_main_loop.mm +++ b/ios/web/app/web_main_loop.mm
@@ -11,6 +11,7 @@ #include "base/bind.h" #include "base/command_line.h" #include "base/logging.h" +#include "base/message_loop/message_loop.h" #include "base/metrics/histogram_macros.h" #include "base/path_service.h" #include "base/power_monitor/power_monitor.h"
diff --git a/media/base/pipeline_status.h b/media/base/pipeline_status.h index 9424b0ab..4610980 100644 --- a/media/base/pipeline_status.h +++ b/media/base/pipeline_status.h
@@ -64,6 +64,7 @@ int64_t audio_memory_usage = 0; int64_t video_memory_usage = 0; base::TimeDelta video_keyframe_distance_average = kNoTimestamp; + // NOTE: frame duration should reflect changes to playback rate. base::TimeDelta video_frame_duration_average = kNoTimestamp; };
diff --git a/media/blink/BUILD.gn b/media/blink/BUILD.gn index 19962c7..b521394 100644 --- a/media/blink/BUILD.gn +++ b/media/blink/BUILD.gn
@@ -38,6 +38,8 @@ "texttrack_impl.h", "url_index.cc", "url_index.h", + "video_decode_stats_reporter.cc", + "video_decode_stats_reporter.h", "video_frame_compositor.cc", "video_frame_compositor.h", "watch_time_reporter.cc", @@ -144,6 +146,7 @@ "test_response_generator.cc", "test_response_generator.h", "url_index_unittest.cc", + "video_decode_stats_reporter_unittest.cc", "video_frame_compositor_unittest.cc", "watch_time_reporter_unittest.cc", "webaudiosourceprovider_impl_unittest.cc",
diff --git a/media/blink/video_decode_stats_reporter.cc b/media/blink/video_decode_stats_reporter.cc new file mode 100644 index 0000000..3da1696 --- /dev/null +++ b/media/blink/video_decode_stats_reporter.cc
@@ -0,0 +1,391 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "media/blink/video_decode_stats_reporter.h" + +#include <cmath> +#include <limits> + +#include "base/logging.h" +#include "base/macros.h" + +namespace media { + +// TODO(chcunningham): Find some authoritative list of frame rates. +const int kFrameRateBuckets[] = {5, 10, 20, 25, 30, 40, 50, 60, 70, + 80, 90, 100, 120, 150, 200, 250, 300}; + +// A mix of width and height dimensions for common and not-so-common resolutions +// spanning 144p -> 12K. +// TODO(chcunningham): Ponder these a bit more. +const int kSizeBuckets[] = { + 50, 100, 144, 240, 256, 280, 360, 426, 480, 640, 720, + 854, 960, 1080, 1280, 1440, 1920, 2160, 2560, 2880, 3160, 3840, + 4128, 4320, 5120, 6144, 7360, 7680, 8000, 9000, 10000, 11000, 11520}; + +VideoDecodeStatsReporter::VideoDecodeStatsReporter( + mojom::VideoDecodeStatsRecorderPtr recorder_ptr, + GetPipelineStatsCB get_pipeline_stats_cb, + const VideoDecoderConfig& video_config, + std::unique_ptr<base::TickClock> tick_clock) + : kRecordingInterval( + base::TimeDelta::FromMilliseconds(kRecordingIntervalMs)), + kTinyFpsWindowDuration( + base::TimeDelta::FromMilliseconds(kTinyFpsWindowMs)), + recorder_ptr_(std::move(recorder_ptr)), + get_pipeline_stats_cb_(std::move(get_pipeline_stats_cb)), + video_config_(video_config), + natural_size_(GetSizeBucket(video_config.natural_size())), + tick_clock_(std::move(tick_clock)), + stats_cb_timer_(tick_clock_.get()) { + DCHECK(recorder_ptr_.is_bound()); + DCHECK(!get_pipeline_stats_cb_.is_null()); + DCHECK(video_config_.IsValidConfig()); +} + +VideoDecodeStatsReporter::~VideoDecodeStatsReporter() {} + +void VideoDecodeStatsReporter::OnPlaying() { + DVLOG(2) << __func__; + + if (is_playing_) + return; + is_playing_ = true; + + DCHECK(!stats_cb_timer_.IsRunning()); + + if (ShouldBeReporting()) { + RunStatsTimerAtInterval(kRecordingInterval); + } +} + +void VideoDecodeStatsReporter::OnPaused() { + DVLOG(2) << __func__; + + if (!is_playing_) + return; + is_playing_ = false; + + // Stop timer until playing resumes. + stats_cb_timer_.AbandonAndStop(); +} + +void VideoDecodeStatsReporter::OnNaturalSizeChanged( + const gfx::Size& natural_size) { + gfx::Size bucketed_size = GetSizeBucket(natural_size); + + DVLOG(2) << __func__ << " " << natural_size.ToString() + << " buckets-to:" << bucketed_size.ToString(); + + if (bucketed_size == natural_size_) + return; + + natural_size_ = bucketed_size; + + // We haven't seen any pipeline stats for this size yet, so it may be that + // the frame rate will change too. Once frame rate stabilized, UpdateStats() + // will call the recorder_ptr_->StartNewRecord() with this latest size. + ResetFrameRateState(); + + // Bucketed size will be empty for tiny sizes. Stop reporting until the size + // is larger. + if (natural_size_.IsEmpty()) { + DCHECK(!ShouldBeReporting()); + stats_cb_timer_.AbandonAndStop(); + + // Consider starting the timer. Natural size may now be large enough to + // begin reporting. Also, resetting frame rate state above may give us + // another chance at frame rate detection if past attempts failed. Avoid + // calling if already running, as this will increase the delay for the next + // UpdateStats() callback. + } else if (ShouldBeReporting() && !stats_cb_timer_.IsRunning()) { + RunStatsTimerAtInterval(kRecordingInterval); + } +} + +void VideoDecodeStatsReporter::OnVideoConfigChanged( + const VideoDecoderConfig& video_config) { + DVLOG(2) << __func__ << " " << video_config.AsHumanReadableString(); + + if (video_config.Matches(video_config_)) + return; + + video_config_ = video_config; + natural_size_ = GetSizeBucket(video_config.natural_size()); + + // Force frame rate detection for the new config. Once frame rate stabilized, + // UpdateStats() will call the recorder_ptr_->StartNewRecord() with this + // latest config. + ResetFrameRateState(); + + // Resetting the frame rate state may allow us to begin reporting again. Also, + // if the timer is already running we still want to reset the timer to give + // the pipeline a chance to stabilize. Config changes may trigger little + // hiccups while the decoder is reset. + if (ShouldBeReporting()) + RunStatsTimerAtInterval(kRecordingInterval); +} + +void VideoDecodeStatsReporter::OnHidden() { + DVLOG(2) << __func__; + + if (is_backgrounded_) + return; + + is_backgrounded_ = true; + + // Stop timer until no longer hidden. + stats_cb_timer_.AbandonAndStop(); +} + +void VideoDecodeStatsReporter::OnShown() { + DVLOG(2) << __func__; + + if (!is_backgrounded_) + return; + + is_backgrounded_ = false; + + // Only start a new record below if stable FPS has been detected. If FPS is + // later detected, a new record will be started at that time. + if (num_stable_fps_samples_ >= kRequiredStableFpsSamples) { + // Dropped frames are not reported during background rendering. Start a new + // record to avoid reporting background stats. + PipelineStatistics stats = get_pipeline_stats_cb_.Run(); + StartNewRecord(stats.video_frames_decoded, stats.video_frames_dropped); + } + + if (ShouldBeReporting()) + RunStatsTimerAtInterval(kRecordingInterval); +} + +void VideoDecodeStatsReporter::RunStatsTimerAtInterval( + base::TimeDelta interval) { + DVLOG(2) << __func__ << " " << interval.InMicroseconds() << " us"; + DCHECK(ShouldBeReporting()); + + // NOTE: Avoid optimizing with early returns if the timer is already running + // at |milliseconds|. Calling Start below resets the timer clock and some + // callers (e.g. OnVideoConfigChanged) rely on that behavior behavior. + stats_cb_timer_.Start(FROM_HERE, interval, this, + &VideoDecodeStatsReporter::UpdateStats); +} + +void VideoDecodeStatsReporter::StartNewRecord(uint32_t frames_decoded_offset, + uint32_t frames_dropped_offset) { + DVLOG(2) << __func__ << " " + << " profile:" << video_config_.profile() + << " fps:" << last_observed_fps_ + << " size:" << natural_size_.ToString(); + + // Size and frame rate should always be bucketed. + DCHECK(natural_size_ == GetSizeBucket(natural_size_)); + DCHECK_EQ(last_observed_fps_, GetFpsBucket(last_observed_fps_)); + + // New records decoded and dropped counts should start at zero. + // These should never move backward. + DCHECK_GE(frames_decoded_offset, frames_decoded_offset_); + DCHECK_GE(frames_dropped_offset, frames_dropped_offset_); + frames_decoded_offset_ = frames_decoded_offset; + frames_dropped_offset_ = frames_dropped_offset; + recorder_ptr_->StartNewRecord(video_config_.profile(), natural_size_, + last_observed_fps_); +} + +void VideoDecodeStatsReporter::ResetFrameRateState() { + // Reinitialize all frame rate state. The next UpdateStats() call will detect + // the frame rate. + last_observed_fps_ = 0; + num_stable_fps_samples_ = 0; + num_unstable_fps_changes_ = 0; + num_consecutive_tiny_fps_windows_ = 0; + fps_stabilization_failed_ = false; + last_fps_stabilized_ticks_ = base::TimeTicks(); +} + +bool VideoDecodeStatsReporter::ShouldBeReporting() const { + return is_playing_ && !is_backgrounded_ && !fps_stabilization_failed_ && + !natural_size_.IsEmpty(); +} + +bool VideoDecodeStatsReporter::UpdateDecodeProgress( + const PipelineStatistics& stats) { + DCHECK_GE(stats.video_frames_decoded, last_frames_decoded_); + DCHECK_GE(stats.video_frames_dropped, last_frames_dropped_); + DCHECK_GE(stats.video_frames_decoded, stats.video_frames_dropped); + + // Check if additional frames decoded since last stats update. + if (stats.video_frames_decoded == last_frames_decoded_) { + // Relax timer if its set to a short interval for frame rate stabilization. + if (stats_cb_timer_.GetCurrentDelay() < kRecordingInterval) { + DVLOG(2) << __func__ << " No decode progress; slowing the timer"; + RunStatsTimerAtInterval(kRecordingInterval); + } + return false; + } + + last_frames_decoded_ = stats.video_frames_decoded; + last_frames_dropped_ = stats.video_frames_dropped; + + return true; +} + +bool VideoDecodeStatsReporter::UpdateFrameRateStability( + const PipelineStatistics& stats) { + // When (re)initializing, the pipeline may momentarily return an average frame + // duration of zero. Ignore it and wait for a real frame rate. + if (stats.video_frame_duration_average.is_zero()) + return false; + + // Bucket frame rate to simplify metrics aggregation. + int frame_rate = + GetFpsBucket(1 / stats.video_frame_duration_average.InSecondsF()); + + if (frame_rate != last_observed_fps_) { + DVLOG(2) << __func__ << " fps changed: " << last_observed_fps_ << " -> " + << frame_rate; + last_observed_fps_ = frame_rate; + bool was_stable = num_stable_fps_samples_ >= kRequiredStableFpsSamples; + num_stable_fps_samples_ = 1; + num_unstable_fps_changes_++; + + // FrameRate just destabilized. Check if last stability window was "tiny". + if (was_stable) { + if (tick_clock_->NowTicks() - last_fps_stabilized_ticks_ < + kTinyFpsWindowDuration) { + num_consecutive_tiny_fps_windows_++; + DVLOG(2) << __func__ << " Last FPS window was 'tiny'. num_tiny:" + << num_consecutive_tiny_fps_windows_; + + // Stop reporting if FPS moves around a lot. Stats may be noisy. + if (num_consecutive_tiny_fps_windows_ >= kMaxTinyFpsWindows) { + DVLOG(2) << __func__ << " Too many tiny fps windows. Stopping timer"; + fps_stabilization_failed_ = true; + stats_cb_timer_.AbandonAndStop(); + return false; + } + } else { + num_consecutive_tiny_fps_windows_ = 0; + } + } + + if (num_unstable_fps_changes_ >= kMaxUnstableFpsChanges) { + // Looks like VFR video. Wait for some stream property (e.g. decoder + // config) to change before trying again. + DVLOG(2) << __func__ << " Unable to stabilize FPS. Stopping timer."; + fps_stabilization_failed_ = true; + stats_cb_timer_.AbandonAndStop(); + return false; + } + + // Increase the timer frequency to quickly stabilize frame rate. 3x the + // frame duration is used as this should be enough for a few more frames to + // be decoded, while also being much faster (for typical frame rates) than + // the regular stats polling interval. + RunStatsTimerAtInterval(3 * stats.video_frame_duration_average); + return false; + } + + // FrameRate matched last observed! + num_unstable_fps_changes_ = 0; + num_stable_fps_samples_++; + + // Wait for steady frame rate to begin recording stats. + if (num_stable_fps_samples_ < kRequiredStableFpsSamples) { + DVLOG(2) << __func__ << " fps held, awaiting stable (" + << num_stable_fps_samples_ << ")"; + return false; + } else if (num_stable_fps_samples_ == kRequiredStableFpsSamples) { + DVLOG(2) << __func__ << " fps stabilized at " << frame_rate; + last_fps_stabilized_ticks_ = tick_clock_->NowTicks(); + + // FPS is locked in. Start a new record, and set timer to reporting + // interval. + StartNewRecord(stats.video_frames_decoded, stats.video_frames_dropped); + RunStatsTimerAtInterval(kRecordingInterval); + } + return true; +} + +void VideoDecodeStatsReporter::UpdateStats() { + DCHECK(ShouldBeReporting()); + + PipelineStatistics stats = get_pipeline_stats_cb_.Run(); + DVLOG(2) << __func__ << " Raw stats -- dropped:" << stats.video_frames_dropped + << "/" << stats.video_frames_decoded + << " dur_avg:" << stats.video_frame_duration_average; + + // Evaluate decode progress and update various internal state. Bail if decode + // is not progressing. + if (!UpdateDecodeProgress(stats)) + return; + + // Check frame rate for changes. Bail if frame rate needs more samples to + // stabilize. + if (!UpdateFrameRateStability(stats)) + return; + + uint32_t frames_decoded = stats.video_frames_decoded - frames_decoded_offset_; + uint32_t frames_dropped = stats.video_frames_dropped - frames_dropped_offset_; + + // Don't bother recording the first record immediately after stabilization. + // Counts of zero don't add value. + if (stats.video_frames_decoded == frames_decoded_offset_) + return; + + DVLOG(2) << __func__ << " Recording -- dropped:" << frames_dropped << "/" + << frames_decoded; + recorder_ptr_->UpdateRecord(frames_decoded, frames_dropped); +} + +gfx::Size VideoDecodeStatsReporter::GetSizeBucket( + const gfx::Size& raw_size) const { + // If either dimension is less than 75% of the min size bucket, return an + // empty size. Empty |natural_size_| will signal ShouldBeReporting() to return + // false. + const double kMinSizeBucketPercent = .75; + if (raw_size.width() < kMinSizeBucketPercent * kSizeBuckets[0] || + raw_size.height() < kMinSizeBucketPercent * kSizeBuckets[0]) { + return gfx::Size(); + } + + // Round width and height to first bucket >= |raw_size| dimensions. See + // explanation in header file. + const int* width_bound = std::lower_bound( + std::begin(kSizeBuckets), std::end(kSizeBuckets), raw_size.width()); + const int* height_bound = std::lower_bound( + std::begin(kSizeBuckets), std::end(kSizeBuckets), raw_size.height()); + + // If no bucket is larger than the raw dimension, just use the last bucket. + if (width_bound == std::end(kSizeBuckets)) + --width_bound; + if (height_bound == std::end(kSizeBuckets)) + --height_bound; + + return gfx::Size(*width_bound, *height_bound); +} + +int VideoDecodeStatsReporter::GetFpsBucket(double raw_fps) const { + int rounded_fps = std::round(raw_fps); + + // Find the first bucket that is strictly > than |rounded_fps|. + const int* upper_bound = + std::upper_bound(std::begin(kFrameRateBuckets), + std::end(kFrameRateBuckets), std::round(rounded_fps)); + + // Return early if its the first bucket. + if (upper_bound == std::begin(kFrameRateBuckets)) + return *upper_bound; + + int higher_bucket = *upper_bound; + int previous_bucket = *(upper_bound - 1); + if (std::abs(previous_bucket - rounded_fps) < + std::abs(higher_bucket - rounded_fps)) { + return previous_bucket; + } + + return higher_bucket; +} + +} // namespace media \ No newline at end of file
diff --git a/media/blink/video_decode_stats_reporter.h b/media/blink/video_decode_stats_reporter.h new file mode 100644 index 0000000..28963b8 --- /dev/null +++ b/media/blink/video_decode_stats_reporter.h
@@ -0,0 +1,224 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef MEDIA_BLINK_MEDIA_CAPABILITIES_REPORTER_H_ +#define MEDIA_BLINK_MEDIA_CAPABILITIES_REPORTER_H_ + +#include "base/macros.h" +#include "base/memory/ptr_util.h" +#include "base/time/default_tick_clock.h" +#include "base/time/tick_clock.h" +#include "base/time/time.h" +#include "base/timer/timer.h" +#include "media/base/pipeline_status.h" +#include "media/base/video_decoder_config.h" +#include "media/blink/media_blink_export.h" +#include "media/mojo/interfaces/video_decode_stats_recorder.mojom.h" + +#include <memory> + +namespace media { + +// Reports on playback smoothness and for a given video codec profile, natural +// size, and fps. When these properties change the current report will be +// finalized and a new report will be started. Ongoing reports are also +// finalized at destruction and process tear-down. +class MEDIA_BLINK_EXPORT VideoDecodeStatsReporter { + public: + using GetPipelineStatsCB = base::Callback<PipelineStatistics(void)>; + + VideoDecodeStatsReporter(mojom::VideoDecodeStatsRecorderPtr recorder_ptr, + GetPipelineStatsCB get_pipeline_stats_cb, + const VideoDecoderConfig& video_config, + std::unique_ptr<base::TickClock> tick_clock = + base::MakeUnique<base::DefaultTickClock>()); + ~VideoDecodeStatsReporter(); + + void OnPlaying(); + void OnPaused(); + void OnHidden(); + void OnShown(); + void OnNaturalSizeChanged(const gfx::Size& natural_size); + void OnVideoConfigChanged(const VideoDecoderConfig& video_config); + + // NOTE: We do not listen for playback rate changes. These implicitly change + // the frame rate and surface via PipelineStatistics' + // video_frame_duration_average. + + private: + // Friends so it can see the static constants and inspect when the timer is + // running / should be running. + friend class VideoDecodeStatsReporterTest; + + // Constants placed in header file for test visibility. + enum : int { + // Timer interval for recording stats when frame rate and other stream + // properties are steady. + kRecordingIntervalMs = 2000, + + // FrameRates must remain stable for a duration greater than this amount to + // avoid being classified as a "tiny fps window". See |kMaxTinyFpsWindows|. + kTinyFpsWindowMs = 5000, + + // Limits the number of consecutive "tiny fps windows", as defined by + // |kTinyFpsWindowMs|. If this limit is met, we will give up until some + // stream property (e.g. decoder config) changes before trying again. We do + // not wish to record stats for variable frame rate content. + kMaxTinyFpsWindows = 5, + + // Number of consecutive samples that must bucket to the same frame rate in + // order for frame rate to be considered "stable" enough to start recording + // stats. + kRequiredStableFpsSamples = 5, + + // Limits the number attempts to detect stable frame rate. When this limit + // is reached, we will give up until some stream property (e.g. decoder + // config) changes before trying again. We do not wish to record stats for + // variable frame rate content. + kMaxUnstableFpsChanges = 10, + }; + + // Main driver of report updates. Queries |get_pipeline_stats_cb_| for the + // latest stats. Detects frame rate changes and playback stalls. Sends stats + // the VideoDecodeStatsRecorder (browser process) for saving. Should only be + // called when ShouldBeReporting() == true. + void UpdateStats(); + + // Round |raw_fps| to the nearest (smaller or larger) "bucket". FrameRates in + // the same bucket should have nearly identical decode performance + // characteristics. Bucketing helps avoid fragmentation of recorded stats. + int GetFpsBucket(double raw_fps) const; + + // Find the nearest "bucket" with dimensions >= |raw_size|. While smaller + // buckets may more closely describe |raw_size|, the next largest bucket is + // chosen to surface cutoff resolutions in HW-accelerated decoders. Exceeding + // the HW cutoff will invoke the software fallback, giving potentially very + // different decode performance at larger resolutions. Will return an empty + // size if |raw_size| is too small to be bucketed. + gfx::Size GetSizeBucket(const gfx::Size& raw_size) const; + + // Run |stats_cb_timer_| at the specified |interval|. If the timer is already + // running, any existing callbacks will be canceled/delayed until + // |interval| has elapsed. + void RunStatsTimerAtInterval(base::TimeDelta interval); + + // Called to begin a new report following changes to stream metadata (e.g. + // natural size). Arguments used to update |freames_decoded_offset_| and + // |frames_dropped_offset_| so that frame counts for this report begin at 0. + void StartNewRecord(uint32_t frames_decoded_offset, + uint32_t frames_dropped_offset); + + // Reset frame rate tracking state to force a fresh attempt at detection. When + // a stable frame rate is successfully detected, UpdateStats() will begin a + // new record will begin with the detected frame rate. Note: callers must + // separately ensure the |stats_cb_timer_| is running for frame rate detection + // to occur. + void ResetFrameRateState(); + + // Called by UpdateStats() to verify decode is progressing and sanity check + // decode/dropped frame counts. Will manage decoded/dropped frame state and + // relax timer when no decode progress is made. Returns true iff decode is + // progressing. + bool UpdateDecodeProgress(const PipelineStatistics& stats); + + // Called by UpdateStats() to do frame rate detection. Will manage frame rate + // state, stats timer, and will start new capabilities records when frame rate + // changes. Returns true iff frame rate is stable. + bool UpdateFrameRateStability(const PipelineStatistics& stats); + + // Returns true if the |stats_timer_cb_| should be running. Should be called + // after any state change (e.g. |is_playing_|) as a check on whether to start + // the the timer. + bool ShouldBeReporting() const; + + // TimeDelta wrappers around |kRecordingIntervalMs| and |kTimyFpsWindowMs|. + // Defined as a class member to avoid static initialization. + // TODO(chcunningham): convert to static constexpr when MSVC support arrives. + const base::TimeDelta kRecordingInterval; + const base::TimeDelta kTinyFpsWindowDuration; + + // Pointer to the remote recorder. The recorder runs in the browser process + // and finalizes the record in the event of fast render process tear down. + mojom::VideoDecodeStatsRecorderPtr recorder_ptr_; + + // Callback for retrieving playback statistics. + GetPipelineStatsCB get_pipeline_stats_cb_; + + // Latest video decoder config, provided at construction or by + // OnVideoConfigChanged(). Used to determine the codec, profile, and natural + // size. Note that |video_config_.natural_size()| may differ slightly from the + // stored |natural_size_| due to size bucketing. See GetSizeBucket() + VideoDecoderConfig video_config_; + + // Last natural size, either from the latest |video_config_|, or from + // OnNaturalSizechanged(). The dimensions of this size will always be rounded + // to the nearest size bucket. If the original size is very small, the + // bucketed size will simply be empty. See GetSizeBucket(). + gfx::Size natural_size_; + + // Clock for |stats_cb_timer_| and getting current tick count (NowTicks()). + // Tests may supply a mock clock via the constructor. + std::unique_ptr<base::TickClock> tick_clock_; + + // Timer for all stats callbacks. Timer interval will be dynamically set based + // on state of reporter. See calls to RunStatsTimerAtIntervalMs(). + base::RepeatingTimer stats_cb_timer_; + + // Latest frame duration bucketed into one of kFrameRateBuckets. + int last_observed_fps_ = 0; + + // Count of consecutive samples with frame duration matching + // |last_observed_fps_|. + int num_stable_fps_samples_ = 0; + + // Count of consecutive samples with frame duration NOT matching + // |last_obseved_fps_|. Used to throttle/limit attempts to stabilize FPS since + // some videos may have variable frame rate. + int num_unstable_fps_changes_ = 0; + + // Count of consecutive stable FPS windows, where stable FPS was detected but + // it lasted for a very short duration before changing again. + int num_consecutive_tiny_fps_windows_ = 0; + + // True whenever we fail to determine a stable FPS, or if windows of stable + // FPS are too tiny to be useful. + bool fps_stabilization_failed_ = false; + + // Tick time of the most recent FPS stabilization. When FPS changes, this time + // is compared to TimeTicks::Now() to approximate the duration of the last + // stable FPS window. + base::TimeTicks last_fps_stabilized_ticks_; + + // Count of frames decoded observed in last pipeline stats update. Used to + // check whether decode/playback has actually advanced. + uint32_t last_frames_decoded_ = 0; + + // Count of frames dropped observed in last pipeline stats update. Used to + // verify that count never decreases. + uint32_t last_frames_dropped_ = 0; + + // Notes the number of frames decoded at the start of the current video + // configuration (profile, resolution, fps). Should be subtracted from + // pipeline frames decoded stats before sending to recorder. + uint32_t frames_decoded_offset_ = 0; + + // Notes the number of frames dropped at the start of the current video + // configuration (profile, resolution, fps). Should be subtracted from + // pipeline frames dropped stats before sending to recorder. + uint32_t frames_dropped_offset_ = 0; + + // Set true by OnPlaying(), false by OnPaused(). We should not run the + // |stats_cb_timer_| when not playing. + bool is_playing_ = false; + + // Set true by OnHidden(), false by OnVisible(). We should not run the + // |stats_cb_timer_| when player is backgrounded. + bool is_backgrounded_ = false; + + DISALLOW_COPY_AND_ASSIGN(VideoDecodeStatsReporter); +}; + +} // namespace media + +#endif // MEDIA_BLINK_MEDIA_CAPABILITIES_REPORTER_H_ \ No newline at end of file
diff --git a/media/blink/video_decode_stats_reporter_unittest.cc b/media/blink/video_decode_stats_reporter_unittest.cc new file mode 100644 index 0000000..c4fd66a --- /dev/null +++ b/media/blink/video_decode_stats_reporter_unittest.cc
@@ -0,0 +1,1037 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "media/blink/video_decode_stats_reporter.h" +#include "base/memory/ptr_util.h" +#include "base/memory/ref_counted.h" +#include "base/message_loop/message_loop.h" +#include "base/test/test_mock_time_task_runner.h" +#include "base/time/time.h" +#include "media/base/media_util.h" +#include "media/base/video_codecs.h" +#include "media/base/video_types.h" +#include "media/mojo/interfaces/video_decode_stats_recorder.mojom.h" +#include "mojo/public/cpp/bindings/strong_binding.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "ui/gfx/geometry/rect.h" + +using ::testing::Invoke; +using ::testing::Return; +using ::testing::_; + +namespace media { + +const VideoCodec kDefaultCodec = kCodecVP9; +const VideoCodecProfile kDefaultProfile = VP9PROFILE_PROFILE0; +const int kDefaultHeight = 480; +const int kDefaultWidth = 640; +const double kDefaultFps = 30; +const int kDecodeCountIncrement = 20; +const int kDroppedCountIncrement = 1; + +VideoDecoderConfig MakeVideoConfig(VideoCodec codec, + VideoCodecProfile profile, + gfx::Size natural_size) { + gfx::Size coded_size = natural_size; + gfx::Rect visible_rect(coded_size.width(), coded_size.height()); + return VideoDecoderConfig(codec, profile, PIXEL_FORMAT_YV12, COLOR_SPACE_JPEG, + coded_size, visible_rect, natural_size, + EmptyExtraData(), Unencrypted()); +} + +VideoDecoderConfig MakeDefaultVideoConfig() { + return MakeVideoConfig(kDefaultCodec, kDefaultProfile, + gfx::Size(kDefaultWidth, kDefaultHeight)); +} + +PipelineStatistics MakeStats(int frames_decoded, + int frames_dropped, + double fps) { + // Will initialize members with reasonable defaults. + PipelineStatistics stats; + stats.video_frames_decoded = frames_decoded; + stats.video_frames_dropped = frames_dropped; + stats.video_frame_duration_average = base::TimeDelta::FromSecondsD(1.0 / fps); + return stats; +} + +// Mock VideoDecodeStatsRecorder to verify reporter/recorder interactions. +class RecordInterceptor : public mojom::VideoDecodeStatsRecorder { + public: + RecordInterceptor() {} + ~RecordInterceptor() override {} + + MOCK_METHOD3(StartNewRecord, + void(VideoCodecProfile profile, + const gfx::Size& natural_size, + int frames_per_sec)); + + MOCK_METHOD2(UpdateRecord, + void(uint32_t frames_decoded, uint32_t frames_dropped)); + MOCK_METHOD0(FinalizeRecord, void()); +}; + +class VideoDecodeStatsReporterTest : public ::testing::Test { + public: + VideoDecodeStatsReporterTest() + : kDefaultSize_(kDefaultWidth, kDefaultHeight) {} + ~VideoDecodeStatsReporterTest() override {} + + void SetUp() override { + // Do this first. Lots of pieces depend on the task runner. + task_runner_ = new base::TestMockTimeTaskRunner(); + message_loop_.SetTaskRunner(task_runner_); + + // Make reporter with default configuration. Connects RecordInterceptor as + // remote mojo VideoDecodeStatsRecorder. + MakeReporter(); + + // Start each test with no decodes, no drops, and steady framerate. + pipeline_decoded_frames_ = 0; + pipeline_dropped_frames_ = 0; + pipeline_framerate_ = kDefaultFps; + } + + void TearDown() override { + // Break the IPC connection if reporter still around. + if (reporter_.get()) { + reporter_.reset(); + } + + // Run task runner to have Mojo cleanup interceptor_. + task_runner_->RunUntilIdle(); + } + + PipelineStatistics MakeAdvancingDecodeStats() { + pipeline_decoded_frames_ += kDecodeCountIncrement; + pipeline_dropped_frames_ += kDroppedCountIncrement; + return MakeStats(pipeline_decoded_frames_, pipeline_dropped_frames_, + pipeline_framerate_); + } + + // Peek at what MakeAdvancingDecodeStats() will return next without advancing + // the tracked counts. + PipelineStatistics PeekNextDecodeStats() const { + return MakeStats(pipeline_decoded_frames_ + kDecodeCountIncrement, + pipeline_dropped_frames_ + kDroppedCountIncrement, + pipeline_framerate_); + } + + protected: + // Indicates expectations about rate of timer firing during FPS stabilization. + enum FpsStabiliaztionSpeed { + // Timer is expected to fire at rate of 3 * last observed average frame + // duration. This is the default for framerate detection. + FAST_STABILIZE_FPS, + // Timer is expected to fire at a rate of kRecordingInterval. This will + // occur + // when decode progress stalls during framerate detection. + SLOW_STABILIZE_FPS, + }; + + // Bind the RecordInterceptor to the request for a VideoDecodeStatsRecorder. + // The interceptor serves as a mock recorder to verify reporter/recorder + // interactions. + void SetupRecordInterceptor(mojom::VideoDecodeStatsRecorderPtr* recorder_ptr, + RecordInterceptor** interceptor) { + // Capture a the interceptor pointer for verifying recorder calls. Lifetime + // will be managed by the |recorder_ptr|. + *interceptor = new RecordInterceptor(); + + // Bind interceptor as the VideoDecodeStatsRecorder. + mojom::VideoDecodeStatsRecorderRequest request = + mojo::MakeRequest(recorder_ptr); + mojo::MakeStrongBinding(base::WrapUnique(*interceptor), + mojo::MakeRequest(recorder_ptr)); + EXPECT_TRUE(recorder_ptr->is_bound()); + } + + // Inject mock objects and create a new |reporter_| to test. + void MakeReporter() { + mojom::VideoDecodeStatsRecorderPtr recorder_ptr; + SetupRecordInterceptor(&recorder_ptr, &interceptor_); + + reporter_ = base::MakeUnique<VideoDecodeStatsReporter>( + std::move(recorder_ptr), + base::Bind(&VideoDecodeStatsReporterTest::GetPipelineStatsCB, + base::Unretained(this)), + MakeDefaultVideoConfig(), task_runner_->GetMockTickClock()); + } + + // Fast forward the task runner (and associated tick clock) by |milliseconds|. + void FastForward(base::TimeDelta delta) { + task_runner_->FastForwardBy(delta); + } + + bool ShouldBeReporting() const { return reporter_->ShouldBeReporting(); } + + const VideoDecoderConfig& CurrentVideoConfig() const { + return reporter_->video_config_; + } + + base::TimeDelta CurrentStatsCbInterval() const { + return reporter_->stats_cb_timer_.GetCurrentDelay(); + } + + int CurrentStableFpsSamples() const { + return reporter_->num_stable_fps_samples_; + } + + gfx::Size GetSizeBucket(gfx::Size raw_size) { + return reporter_->GetSizeBucket(raw_size); + } + + int GetFpsBucket(double raw_fps) { return reporter_->GetFpsBucket(raw_fps); } + + // Call at the start of tests to stabilize framerate. + // Preconditions: + // 1) Reporter should not already be in playing state + // 2) Playing should unblock the reporter to begin reporting (e.g. not in + // hidden state) + // 3) No progress made yet toward stabilizing framerate. + void StartPlayingAndStabilizeFramerate() { + DCHECK(!reporter_->is_playing_); + DCHECK_EQ(reporter_->num_stable_fps_samples_, 0); + + // Setup stats callback to provide steadily advancing decode stats with a + // constant framerate. + ON_CALL(*this, GetPipelineStatsCB()) + .WillByDefault(Invoke( + this, &VideoDecodeStatsReporterTest::MakeAdvancingDecodeStats)); + + // On playing should start timer at recording interval. Expect first stats + // CB when that interval has elapsed. + reporter_->OnPlaying(); + DCHECK(ShouldBeReporting()); + EXPECT_CALL(*this, GetPipelineStatsCB()); + FastForward(kRecordingInterval); + + StabilizeFramerateAndStartNewRecord(kDefaultProfile, kDefaultSize_, + kDefaultFps); + } + + // Call just after detecting a change to framerate. |profile|, |natural_size|, + // and |frames_per_sec| should match the call to StartNewRecord(...) once the + // framerate is stabilized. |fps_timer_speed| indicates the expected timer + // interval to be used during stabilization (see FpsStabiliaztionSpeed + // definition). + // Preconditions: + // 1. Do not call if framerate already stable (know what you're testing). + // 2. Only call with GetPipelineStatsCB configured to return + // progressing decode stats with a steady framerate. + void StabilizeFramerateAndStartNewRecord( + VideoCodecProfile profile, + gfx::Size natural_size, + int frames_per_sec, + FpsStabiliaztionSpeed fps_timer_speed = FAST_STABILIZE_FPS) { + base::TimeDelta last_frame_duration = kNoTimestamp; + uint32_t last_decoded_frames = 0; + + while (CurrentStableFpsSamples() < kRequiredStableFpsSamples) { + PipelineStatistics next_stats = PeekNextDecodeStats(); + + // Sanity check that the stats callback is progressing decode. + DCHECK_GT(next_stats.video_frames_decoded, last_decoded_frames); + last_decoded_frames = next_stats.video_frames_decoded; + + // Sanity check that the stats callback is providing steady fps. + if (last_frame_duration != kNoTimestamp) { + DCHECK_EQ(next_stats.video_frame_duration_average, last_frame_duration); + } + last_frame_duration = next_stats.video_frame_duration_average; + + // The final iteration stabilizes framerate and starts a new record. + if (CurrentStableFpsSamples() == kRequiredStableFpsSamples - 1) { + EXPECT_CALL(*interceptor_, + StartNewRecord(profile, natural_size, frames_per_sec)); + } + + if (fps_timer_speed == FAST_STABILIZE_FPS) { + // Generally FPS is stabilized with a timer of ~3x the average frame + // duration. + base::TimeDelta frame_druation = + base::TimeDelta::FromSecondsD(1.0 / pipeline_framerate_); + EXPECT_EQ(CurrentStatsCbInterval(), frame_druation * 3); + } else { + // If the playback is struggling we will do it more slowly to avoid + // firing high frequency timers indefinitely. Store constant as a local + // to workaround linking confusion. + DCHECK_EQ(fps_timer_speed, SLOW_STABILIZE_FPS); + + // fixme + EXPECT_EQ(CurrentStatsCbInterval(), kRecordingInterval); + } + + EXPECT_CALL(*this, GetPipelineStatsCB()); + FastForward(CurrentStatsCbInterval()); + } + } + + // Advances the task runner by a single recording interval and verifies that + // the record is updated. The values provided to UpdateRecord(...) + // should match values from PeekNextDecodeStates(...), minus the offsets of + // |decoded_frames_offset| and |dropped_frames_offset|. + // Preconditions: + // - Should only be called during regular reporting (framerate stable, + // not in background, not paused). + void AdvanceTimeAndVerifyRecordUpdate(int decoded_frames_offset, + int dropped_frames_offset) { + DCHECK(ShouldBeReporting()); + + // Record updates should always occur at recording interval. Store to local + // variable to workaround linker confusion with test macros. + EXPECT_EQ(kRecordingInterval, CurrentStatsCbInterval()); + + PipelineStatistics next_stats = PeekNextDecodeStats(); + + // Decode stats must be advancing for record updates to be expected. Dropped + // frames should at least not move backward. + EXPECT_GT(next_stats.video_frames_decoded, pipeline_decoded_frames_); + EXPECT_GE(next_stats.video_frames_dropped, pipeline_dropped_frames_); + + // Verify that UpdateRecord calls come at the recording interval with + // correct values. + EXPECT_CALL(*this, GetPipelineStatsCB()); + EXPECT_CALL( + *interceptor_, + UpdateRecord(next_stats.video_frames_decoded - decoded_frames_offset, + next_stats.video_frames_dropped - dropped_frames_offset)); + FastForward(kRecordingInterval); + } + + // Injected callback for fetching statistics. Each test will manage + // expectations and return behavior. + MOCK_METHOD0(GetPipelineStatsCB, PipelineStatistics()); + + // These track the last values returned by MakeAdvancingDecodeStats(). See + // SetUp() for initialization. + uint32_t pipeline_decoded_frames_; + uint32_t pipeline_dropped_frames_; + double pipeline_framerate_; + + // Placed as a class member to avoid static initialization costs. + const gfx::Size kDefaultSize_; + + // Put first so it will be destructed *last*. We must let users of the + // message loop (e.g. reporter_) destruct before destructing the loop itself. + base::MessageLoop message_loop_; + + // Task runner that allows for manual advancing of time. Instantiated and + // used by message_loop_ in Setup(). + scoped_refptr<base::TestMockTimeTaskRunner> task_runner_; + + // Points to the interceptor that acts as a VideoDecodeStatsRecorder. The + // object is owned by VideoDecodeStatsRecorderPtr, which is itself owned by + // |reporter_|. + RecordInterceptor* interceptor_ = nullptr; + + // The VideoDecodeStatsReporter being tested. + std::unique_ptr<VideoDecodeStatsReporter> reporter_; + + // Redefined constants in fixture for easy access from tests. See + // video_decode_stats_reporter.h for documentation. + static const base::TimeDelta kRecordingInterval; + static const base::TimeDelta kTinyFpsWindowDuration; + static const int kRequiredStableFpsSamples = + VideoDecodeStatsReporter::kRequiredStableFpsSamples; + static const int kMaxUnstableFpsChanges = + VideoDecodeStatsReporter::kMaxUnstableFpsChanges; + static const int kMaxTinyFpsWindows = + VideoDecodeStatsReporter::kMaxTinyFpsWindows; +}; + +const base::TimeDelta VideoDecodeStatsReporterTest::kRecordingInterval = + base::TimeDelta::FromMilliseconds( + VideoDecodeStatsReporter::kRecordingIntervalMs); +const base::TimeDelta VideoDecodeStatsReporterTest::kTinyFpsWindowDuration = + base::TimeDelta::FromMilliseconds( + VideoDecodeStatsReporter::kTinyFpsWindowMs); + +TEST_F(VideoDecodeStatsReporterTest, RecordWhilePlaying) { + StartPlayingAndStabilizeFramerate(); + + // Framerate is now stable! Recorded stats should be offset by the values + // last provided to GetPipelineStatsCB. + uint32_t decoded_offset = pipeline_decoded_frames_; + uint32_t dropped_offset = pipeline_dropped_frames_; + + // Verify that UpdateRecord calls come at the recording interval with + // correct values. + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); + + // Once more for good measure. + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); +} + +TEST_F(VideoDecodeStatsReporterTest, RecordingStopsWhenPaused) { + StartPlayingAndStabilizeFramerate(); + + // Framerate is now stable! Recorded stats should be offset by the values + // last provided to GetPipelineStatsCB. + uint32_t decoded_offset = pipeline_decoded_frames_; + uint32_t dropped_offset = pipeline_dropped_frames_; + + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); + + // When paused, expect no stats callbacks and no record updates. + reporter_->OnPaused(); + EXPECT_FALSE(ShouldBeReporting()); + EXPECT_CALL(*this, GetPipelineStatsCB()).Times(0); + EXPECT_CALL(*interceptor_, UpdateRecord(_, _)).Times(0); + // Advance a few recording intervals just to be sure. + FastForward(kRecordingInterval * 3); + + // Verify callbacks and record updates resume when playing again. No changes + // to the stream during pause, so no need to re-stabilize framerate. Offsets + // for stats count are still valid. + reporter_->OnPlaying(); + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); +} + +TEST_F(VideoDecodeStatsReporterTest, RecordingStopsWhenHidden) { + StartPlayingAndStabilizeFramerate(); + + // Framerate is now stable! Recorded stats should be offset by the values + // last provided to GetPipelineStatsCB. + uint32_t decoded_offset = pipeline_decoded_frames_; + uint32_t dropped_offset = pipeline_dropped_frames_; + + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); + + // When hidden, expect no stats callbacks and no record updates. + reporter_->OnHidden(); + EXPECT_FALSE(ShouldBeReporting()); + EXPECT_CALL(*this, GetPipelineStatsCB()).Times(0); + EXPECT_CALL(*interceptor_, UpdateRecord(_, _)).Times(0); + // Advance a few recording intervals just to be sure. + FastForward(kRecordingInterval * 3); + + // Verify updates resume when visible again. Dropped frame stats are not valid + // while hidden, so expect a new record to begin. GetPipelineStatsCB will be + // called to update offsets to ignore stats while hidden. + EXPECT_CALL(*this, GetPipelineStatsCB()); + EXPECT_CALL(*interceptor_, + StartNewRecord(kDefaultProfile, kDefaultSize_, kDefaultFps)); + reporter_->OnShown(); + + // Update offsets for new record and verify updates resume as time advances. + decoded_offset = pipeline_decoded_frames_; + dropped_offset = pipeline_dropped_frames_; + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); +} + +TEST_F(VideoDecodeStatsReporterTest, RecordingStopsWhenNoDecodeProgress) { + StartPlayingAndStabilizeFramerate(); + + // Framerate is now stable! Recorded stats should be offset by the values + // last provided to GetPipelineStatsCB. + uint32_t decoded_offset = pipeline_decoded_frames_; + uint32_t dropped_offset = pipeline_dropped_frames_; + + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); + + // Freeze decode stats at current values, simulating network underflow. + ON_CALL(*this, GetPipelineStatsCB()) + .WillByDefault( + Return(MakeStats(pipeline_decoded_frames_, pipeline_dropped_frames_, + pipeline_framerate_))); + + // Verify record updates stop while decode is not progressing. Fast forward + // through several recording intervals to be sure we never call UpdateRecord. + EXPECT_CALL(*this, GetPipelineStatsCB()).Times(3); + EXPECT_CALL(*interceptor_, UpdateRecord(_, _)).Times(0); + FastForward(kRecordingInterval * 3); + + // Resume progressing decode! + ON_CALL(*this, GetPipelineStatsCB()) + .WillByDefault(Invoke( + this, &VideoDecodeStatsReporterTest::MakeAdvancingDecodeStats)); + + // Verify record updates resume. + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); +} + +TEST_F(VideoDecodeStatsReporterTest, NewRecordStartsForSizeChange) { + StartPlayingAndStabilizeFramerate(); + + // Framerate is now stable! Recorded stats should be offset by the values + // last provided to GetPipelineStatsCB. + uint32_t decoded_offset = pipeline_decoded_frames_; + uint32_t dropped_offset = pipeline_dropped_frames_; + + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); + + // Change the natural size. + const gfx::Size size_720p(1280, 720); + reporter_->OnNaturalSizeChanged(size_720p); + + // Next stats update will not cause a record update. We must first check + // to see if the framerate changes and start a new record. + EXPECT_CALL(*this, GetPipelineStatsCB()); + EXPECT_CALL(*interceptor_, UpdateRecord(_, _)).Times(0); + FastForward(kRecordingInterval); + + // A new record is started with the latest natural size as soon as the + // framerate is confirmed (re-stabilized). + StabilizeFramerateAndStartNewRecord(kDefaultProfile, size_720p, kDefaultFps); + + // Offsets should be adjusted so the new record starts at zero. + decoded_offset = pipeline_decoded_frames_; + dropped_offset = pipeline_dropped_frames_; + + // Stats callbacks and record updates should proceed as usual. + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); +} + +TEST_F(VideoDecodeStatsReporterTest, NewRecordStartsForConfigChange) { + StartPlayingAndStabilizeFramerate(); + + // Framerate is now stable! Recorded stats should be offset by the values + // last provided to GetPipelineStatsCB. + uint32_t decoded_offset = pipeline_decoded_frames_; + uint32_t dropped_offset = pipeline_dropped_frames_; + + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); + + // Change the config to use profile 2. + auto new_config = + MakeVideoConfig(kCodecVP9, VP9PROFILE_PROFILE2, kDefaultSize_); + EXPECT_FALSE(new_config.Matches(CurrentVideoConfig())); + reporter_->OnVideoConfigChanged(new_config); + + // Next stats update will not cause a record update. We must first check + // to see if the framerate changes and start a new record. + EXPECT_CALL(*this, GetPipelineStatsCB()); + EXPECT_CALL(*interceptor_, UpdateRecord(_, _)).Times(0); + FastForward(kRecordingInterval); + + // A new record is started with the latest configuration as soon as the + // framerate is confirmed (re-stabilized). + StabilizeFramerateAndStartNewRecord(VP9PROFILE_PROFILE2, kDefaultSize_, + kDefaultFps); + + // Offsets should be adjusted so the new record starts at zero. + decoded_offset = pipeline_decoded_frames_; + dropped_offset = pipeline_dropped_frames_; + + // Stats callbacks and record updates should proceed as usual. + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); +} + +TEST_F(VideoDecodeStatsReporterTest, NewRecordStartsForFpsChange) { + StartPlayingAndStabilizeFramerate(); + + // Framerate is now stable! Recorded stats should be offset by the values + // last provided to GetPipelineStatsCB. + uint32_t decoded_offset = pipeline_decoded_frames_; + uint32_t dropped_offset = pipeline_dropped_frames_; + + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); + + // Change FPS to 2x current rate. Future calls to GetPipelineStats will + // use this to compute frame duration. + EXPECT_EQ(pipeline_framerate_, static_cast<uint32_t>(kDefaultFps)); + pipeline_framerate_ *= 2; + + // Next stats update will not cause a record update. It will instead begin + // detection of the new framerate. + EXPECT_CALL(*this, GetPipelineStatsCB()); + EXPECT_CALL(*interceptor_, UpdateRecord(_, _)).Times(0); + FastForward(kRecordingInterval); + + // A new record is started with the latest frames per second as soon as the + // framerate is confirmed (re-stabilized). + StabilizeFramerateAndStartNewRecord(kDefaultProfile, kDefaultSize_, + kDefaultFps * 2); + + // Offsets should be adjusted so the new record starts at zero. + decoded_offset = pipeline_decoded_frames_; + dropped_offset = pipeline_dropped_frames_; + + // Stats callbacks and record updates should proceed as usual. + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); +} + +TEST_F(VideoDecodeStatsReporterTest, FpsStabilizationFailed) { + // Setup stats callback to provide steadily advancing decode stats with a + // constant framerate. + ON_CALL(*this, GetPipelineStatsCB()) + .WillByDefault(Invoke( + this, &VideoDecodeStatsReporterTest::MakeAdvancingDecodeStats)); + + // On playing should start timer. + reporter_->OnPlaying(); + EXPECT_TRUE(ShouldBeReporting()); + + // OnPlaying starts the timer at the recording interval. Expect first stats + // CB when that interval has elapsed. This stats callback provides the first + // fps sample. + EXPECT_CALL(*this, GetPipelineStatsCB()); + + // We should not start nor update a record while failing to detect fps. + EXPECT_CALL(*interceptor_, UpdateRecord(_, _)).Times(0); + EXPECT_CALL(*interceptor_, StartNewRecord(_, _, _)).Times(0); + FastForward(kRecordingInterval); + int num_fps_samples = 1; + + // With FPS stabilization in-progress, keep alternating framerate to thwart + // stabilization. + for (; num_fps_samples < kMaxUnstableFpsChanges; num_fps_samples++) { + pipeline_framerate_ = + (pipeline_framerate_ == kDefaultFps) ? 2 * kDefaultFps : kDefaultFps; + EXPECT_CALL(*this, GetPipelineStatsCB()); + FastForward(CurrentStatsCbInterval()); + } + + // Stabilization has now failed, so fast forwarding by any amount will not + // trigger new stats update callbacks. + EXPECT_CALL(*this, GetPipelineStatsCB()).Times(0); + FastForward(kRecordingInterval * 10); + + // Pausing then playing does not kickstart reporting. We assume framerate is + // still variable. + reporter_->OnPaused(); + reporter_->OnPlaying(); + FastForward(kRecordingInterval * 10); + + // Hidden then shown does not kickstart reporting. We assume framerate is + // still variable. + reporter_->OnHidden(); + reporter_->OnShown(); + FastForward(kRecordingInterval * 10); + + // Unlike the above, a config change suggests the stream itself has changed so + // we should make a new attempt at detecting a stable FPS. + VideoDecoderConfig new_config = + MakeVideoConfig(kDefaultCodec, VP9PROFILE_PROFILE2, kDefaultSize_); + EXPECT_FALSE(new_config.Matches(CurrentVideoConfig())); + reporter_->OnVideoConfigChanged(new_config); + EXPECT_CALL(*this, GetPipelineStatsCB()); + FastForward(kRecordingInterval); + + // With |pipeline_framerate_| holding steady, FPS should stabilize. The new + // record should indicate we're using VP9 Profile 2. + StabilizeFramerateAndStartNewRecord(VP9PROFILE_PROFILE2, kDefaultSize_, + pipeline_framerate_); + + // Framerate is now stable! Recorded stats should be offset by the values + // last provided to GetPipelineStatsCB. + uint32_t decoded_offset = pipeline_decoded_frames_; + uint32_t dropped_offset = pipeline_dropped_frames_; + + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); +} + +TEST_F(VideoDecodeStatsReporterTest, FpsStabilizationFailed_TinyWindows) { + uint32_t decoded_offset = 0; + uint32_t dropped_offset = 0; + + // Setup stats callback to provide steadily advancing decode stats. + ON_CALL(*this, GetPipelineStatsCB()) + .WillByDefault(Invoke( + this, &VideoDecodeStatsReporterTest::MakeAdvancingDecodeStats)); + + // On playing should start timer at recording interval. Expect first stats + // CB when that interval has elapsed. + reporter_->OnPlaying(); + DCHECK(ShouldBeReporting()); + EXPECT_CALL(*this, GetPipelineStatsCB()); + FastForward(kRecordingInterval); + + // Repeatedly stabilize, then change the FPS after single record updates to + // create tiny windows. + for (int i = 0; i < kMaxTinyFpsWindows; i++) { + StabilizeFramerateAndStartNewRecord(kDefaultProfile, kDefaultSize_, + pipeline_framerate_); + + // Framerate is now stable! Recorded stats should be offset by the values + // last provided to GetPipelineStatsCB. + decoded_offset = pipeline_decoded_frames_; + dropped_offset = pipeline_dropped_frames_; + + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); + + // Changing the framerate and fast forward to detect the change. + pipeline_framerate_ = + (pipeline_framerate_ == kDefaultFps) ? 2 * kDefaultFps : kDefaultFps; + EXPECT_CALL(*this, GetPipelineStatsCB()); + FastForward(kRecordingInterval); + } + + // Verify no further stats updates are made because we've hit the maximum + // number of tiny framerate windows. + EXPECT_CALL(*this, GetPipelineStatsCB()).Times(0); + EXPECT_CALL(*interceptor_, UpdateRecord(_, _)).Times(0); + FastForward(kRecordingInterval); + + // Pausing then playing does not kickstart reporting. We assume framerate is + // still variable. + reporter_->OnPaused(); + reporter_->OnPlaying(); + FastForward(kRecordingInterval * 10); + + // Hidden then shown does not kickstart reporting. We assume framerate is + // still variable. + reporter_->OnHidden(); + reporter_->OnShown(); + FastForward(kRecordingInterval * 10); + + // Unlike the above, a natural size change suggests the stream itself has + // changed so we should make a new attempt at detecting a stable FPS. + gfx::Size size_720p(1280, 720); + reporter_->OnNaturalSizeChanged(size_720p); + EXPECT_CALL(*this, GetPipelineStatsCB()); + FastForward(kRecordingInterval); + + // With |pipeline_framerate_| holding steady, FPS stabilization should work. + StabilizeFramerateAndStartNewRecord(kDefaultProfile, size_720p, + pipeline_framerate_); + + // Framerate is now stable! Recorded stats should be offset by the values + // last provided to GetPipelineStatsCB. + decoded_offset = pipeline_decoded_frames_; + dropped_offset = pipeline_dropped_frames_; + + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); +} + +TEST_F(VideoDecodeStatsReporterTest, ThrottleFpsTimerIfNoDecodeProgress) { + // Setup stats callback to provide steadily advancing decode stats with a + // constant framerate. + ON_CALL(*this, GetPipelineStatsCB()) + .WillByDefault(Invoke( + this, &VideoDecodeStatsReporterTest::MakeAdvancingDecodeStats)); + + // On playing should start timer at recording interval. + reporter_->OnPlaying(); + EXPECT_TRUE(ShouldBeReporting()); + + // OnPlaying starts the timer at the recording interval. Expect first stats + // CB when that interval has elapsed. This stats callback provides the first + // fps sample. + EXPECT_CALL(*this, GetPipelineStatsCB()); + FastForward(kRecordingInterval); + int stable_fps_samples = 1; + + // Now advance time to make it half way through framerate stabilization. + base::TimeDelta frame_duration = + base::TimeDelta::FromSecondsD(1.0 / pipeline_framerate_); + for (; stable_fps_samples < kRequiredStableFpsSamples / 2; + stable_fps_samples++) { + // The timer runs at 3x the frame duration when detecting framerate to + // quickly stabilize. + EXPECT_CALL(*this, GetPipelineStatsCB()); + FastForward(frame_duration * 3); + } + + // With stabilization still ongoing, freeze decode progress by repeatedly + // returning the same stats from before. + ON_CALL(*this, GetPipelineStatsCB()) + .WillByDefault( + Return(MakeStats(pipeline_decoded_frames_, pipeline_dropped_frames_, + pipeline_framerate_))); + + // Advance another fps detection interval to detect that no progress was made. + // Verify this decreases timer frequency to standard reporting interval. + EXPECT_LT(CurrentStatsCbInterval(), kRecordingInterval); + EXPECT_CALL(*this, GetPipelineStatsCB()); + FastForward(frame_duration * 3); + EXPECT_EQ(CurrentStatsCbInterval(), kRecordingInterval); + + // Verify stats updates continue to come in at recording interval. Verify no + // calls to UpdateRecord because decode progress is still frozen. Fast forward + // through several recording intervals to be sure nothing changes. + EXPECT_CALL(*this, GetPipelineStatsCB()).Times(3); + EXPECT_CALL(*interceptor_, UpdateRecord(_, _)).Times(0); + FastForward(kRecordingInterval * 3); + + // Un-freeze decode stats! + ON_CALL(*this, GetPipelineStatsCB()) + .WillByDefault(Invoke( + this, &VideoDecodeStatsReporterTest::MakeAdvancingDecodeStats)); + + // Finish framerate stabilization with a slower timer frequency. The slower + // timer is used to avoid firing high frequency timers indefinitely for + // machines/networks that are struggling to keep up. + StabilizeFramerateAndStartNewRecord(kDefaultProfile, kDefaultSize_, + kDefaultFps, SLOW_STABILIZE_FPS); + + // Framerate is now stable! Recorded stats should be offset by the values + // last provided to GetPipelineStatsCB. + uint32_t decoded_offset = pipeline_decoded_frames_; + uint32_t dropped_offset = pipeline_dropped_frames_; + + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); +} + +TEST_F(VideoDecodeStatsReporterTest, ConfigChangeStillProcessedWhenHidden) { + StartPlayingAndStabilizeFramerate(); + + // Framerate is now stable! Recorded stats should be offset by the values + // last provided to GetPipelineStatsCB. + uint32_t decoded_offset = pipeline_decoded_frames_; + uint32_t dropped_offset = pipeline_dropped_frames_; + + // Verify that UpdateRecord calls come at the recording interval with + // correct values. + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); + + // When hidden, expect no stats callbacks and no record updates. Advance a few + // recording intervals just to be sure. + reporter_->OnHidden(); + EXPECT_FALSE(ShouldBeReporting()); + EXPECT_CALL(*this, GetPipelineStatsCB()).Times(0); + EXPECT_CALL(*interceptor_, UpdateRecord(_, _)).Times(0); + FastForward(kRecordingInterval * 3); + + // Config changes may still arrive when hidden and should not be dropped. + // Change the config to use VP9 Profile 2. + VideoDecoderConfig new_config = + MakeVideoConfig(kDefaultCodec, VP9PROFILE_PROFILE2, kDefaultSize_); + EXPECT_FALSE(new_config.Matches(CurrentVideoConfig())); + reporter_->OnVideoConfigChanged(new_config); + + // Still, no record updates should be made until the the reporter is shown. + FastForward(kRecordingInterval * 3); + + // When shown, the reporting timer should start running again. + reporter_->OnShown(); + EXPECT_CALL(*this, GetPipelineStatsCB()); + FastForward(kRecordingInterval); + + // Framerate should be re-detected whenever the stream config changes. A new + // record should be started using VP9 Profile 2 from the new config. + StabilizeFramerateAndStartNewRecord(VP9PROFILE_PROFILE2, kDefaultSize_, + kDefaultFps); + + // Update offsets for new record and verify updates resume as time advances. + decoded_offset = pipeline_decoded_frames_; + dropped_offset = pipeline_dropped_frames_; + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); +} + +TEST_F(VideoDecodeStatsReporterTest, ConfigChangeStillProcessedWhenPaused) { + StartPlayingAndStabilizeFramerate(); + + // Framerate is now stable! Recorded stats should be offset by the values + // last provided to GetPipelineStatsCB. + uint32_t decoded_offset = pipeline_decoded_frames_; + uint32_t dropped_offset = pipeline_dropped_frames_; + + // Verify that UpdateRecord calls come at the recording interval with + // correct values. + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); + + // Pause and verify record updates stop. + reporter_->OnPaused(); + EXPECT_FALSE(ShouldBeReporting()); + EXPECT_CALL(*this, GetPipelineStatsCB()).Times(0); + EXPECT_CALL(*interceptor_, UpdateRecord(_, _)).Times(0); + FastForward(kRecordingInterval * 3); + + // Config changes are still possible when paused (e.g. user seeks to a new + // config). Change the config to VP9 Profile 2. + auto new_config = + MakeVideoConfig(kCodecVP9, VP9PROFILE_PROFILE2, kDefaultSize_); + EXPECT_FALSE(new_config.Matches(CurrentVideoConfig())); + reporter_->OnVideoConfigChanged(new_config); + + // Playback is still paused, so reporting should be stopped. + EXPECT_FALSE(ShouldBeReporting()); + EXPECT_CALL(*this, GetPipelineStatsCB()).Times(0); + EXPECT_CALL(*interceptor_, UpdateRecord(_, _)).Times(0); + FastForward(kRecordingInterval * 3); + + // Upon playing, expect the new config to re-trigger framerate detection and + // to begin a new record using VP9 Profile 2. Fast forward an initial + // recording interval to pick up the config change. + reporter_->OnPlaying(); + EXPECT_CALL(*this, GetPipelineStatsCB()); + FastForward(kRecordingInterval); + StabilizeFramerateAndStartNewRecord(VP9PROFILE_PROFILE2, kDefaultSize_, + kDefaultFps); + + // Update offsets for new record and verify record updates. + decoded_offset = pipeline_decoded_frames_; + dropped_offset = pipeline_dropped_frames_; + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); +} + +TEST_F(VideoDecodeStatsReporterTest, FpsBucketing) { + StartPlayingAndStabilizeFramerate(); + EXPECT_EQ(kDefaultFps, pipeline_framerate_); + + // Framerate is now stable! Recorded stats should be offset by the values + // last provided to GetPipelineStatsCB. + uint32_t decoded_offset = pipeline_decoded_frames_; + uint32_t dropped_offset = pipeline_dropped_frames_; + + // Verify that UpdateRecord calls come at the recording interval with + // correct values. + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); + + // Small changes to framerate should not trigger a new record. + pipeline_framerate_ = kDefaultFps + .5; + EXPECT_CALL(*interceptor_, StartNewRecord(_, _, _)).Times(0); + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); + + // Small changes in the other direction should also not trigger a new record. + pipeline_framerate_ = kDefaultFps - .5; + EXPECT_CALL(*interceptor_, StartNewRecord(_, _, _)).Times(0); + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); + + // Big changes in framerate should trigger a new record. + pipeline_framerate_ = kDefaultFps * 2; + + // Fast forward by one interval to detect framerate change. + EXPECT_CALL(*this, GetPipelineStatsCB()); + FastForward(kRecordingInterval); + + // Stabilize new framerate. + StabilizeFramerateAndStartNewRecord(kDefaultProfile, kDefaultSize_, + kDefaultFps * 2); + + // Update offsets for new record and verify recording. + decoded_offset = pipeline_decoded_frames_; + dropped_offset = pipeline_dropped_frames_; + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); + + // Whacky framerates should be bucketed to a more common nearby value. + pipeline_framerate_ = 123.4; + + // Fast forward by one interval to detect framerate change. + EXPECT_CALL(*this, GetPipelineStatsCB()); + FastForward(kRecordingInterval); + + // Verify new record uses bucketed framerate. + int bucketed_fps = GetFpsBucket(pipeline_framerate_); + EXPECT_NE(bucketed_fps, pipeline_framerate_); + StabilizeFramerateAndStartNewRecord(kDefaultProfile, kDefaultSize_, + bucketed_fps); + + // Update offsets for new record and verify recording. + decoded_offset = pipeline_decoded_frames_; + dropped_offset = pipeline_dropped_frames_; + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); +} + +TEST_F(VideoDecodeStatsReporterTest, ResolutionBucketing) { + StartPlayingAndStabilizeFramerate(); + EXPECT_EQ(kDefaultFps, pipeline_framerate_); + + // Framerate is now stable! Recorded stats should be offset by the values + // last provided to GetPipelineStatsCB. + uint32_t decoded_offset = pipeline_decoded_frames_; + uint32_t dropped_offset = pipeline_dropped_frames_; + + // Verify that UpdateRecord calls come at the recording interval with + // correct values. + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); + + // Note that our current size fits perfectly into known buckets... + EXPECT_EQ(GetSizeBucket(kDefaultSize_), kDefaultSize_); + + // A slightly smaller size should fall into the same size bucket as before. + gfx::Size slightly_smaller_size(kDefaultWidth - 2, kDefaultHeight - 2); + EXPECT_EQ(GetSizeBucket(kDefaultSize_), GetSizeBucket(slightly_smaller_size)); + // Using the same bucket means we expect it continues to use the same record. + // Verify recording progresses as if size were unchanged. + reporter_->OnNaturalSizeChanged(slightly_smaller_size); + EXPECT_CALL(*interceptor_, StartNewRecord(_, _, _)).Times(0); + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); + + // Since the original size perfectly fits a known size bucket, any small + // increase should cause the next larger bucket should be chosen. This is done + // to surface cut off resolutions in hardware decoders. HW acceleration can be + // critical to smooth decode at higher resolutions. + gfx::Size slightly_larger_size(kDefaultWidth + 1, kDefaultHeight + 1); + gfx::Size larger_size_bucket = GetSizeBucket(slightly_larger_size); + EXPECT_NE(GetSizeBucket(kDefaultSize_), larger_size_bucket); + // Given that the buckets are different, a new record should be started when + // size changes to the slightly larger value. + reporter_->OnNaturalSizeChanged(slightly_larger_size); + + // Fast forward by one interval to detect resolution change. + EXPECT_CALL(*this, GetPipelineStatsCB()); + FastForward(kRecordingInterval); + + // Stabilize new framerate and verify record updates come with new offsets. + StabilizeFramerateAndStartNewRecord(kDefaultProfile, larger_size_bucket, + kDefaultFps); + decoded_offset = pipeline_decoded_frames_; + dropped_offset = pipeline_dropped_frames_; + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); + + // With |slightly_larger_size| describing the bottom of its bucket, we should + // have of room to increase a little further within this bucket, without + // triggering the start of a new record. + slightly_larger_size = gfx::Size(slightly_larger_size.width() + 1, + slightly_larger_size.height() + 1); + EXPECT_EQ(larger_size_bucket, GetSizeBucket(slightly_larger_size)); + reporter_->OnNaturalSizeChanged(slightly_larger_size); + EXPECT_CALL(*interceptor_, StartNewRecord(_, _, _)).Times(0); + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); + + // Big changes in resolution should always trigger a new record. + gfx::Size big_resolution(kDefaultWidth * 2, kDefaultHeight * 2); + reporter_->OnNaturalSizeChanged(big_resolution); + + // Fast forward by one interval to detect resolution change. + EXPECT_CALL(*this, GetPipelineStatsCB()); + FastForward(kRecordingInterval); + + // Stabilize new framerate and verify record updates come with new offsets. + StabilizeFramerateAndStartNewRecord(kDefaultProfile, big_resolution, + kDefaultFps); + decoded_offset = pipeline_decoded_frames_; + dropped_offset = pipeline_dropped_frames_; + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); +} + +TEST_F(VideoDecodeStatsReporterTest, ResolutionTooSmall) { + StartPlayingAndStabilizeFramerate(); + EXPECT_EQ(kDefaultFps, pipeline_framerate_); + + // Framerate is now stable! Recorded stats should be offset by the values + // last provided to GetPipelineStatsCB. + uint32_t decoded_offset = pipeline_decoded_frames_; + uint32_t dropped_offset = pipeline_dropped_frames_; + + // Verify that UpdateRecord calls come at the recording interval with + // correct values. + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); + + // Change the natural size to something tiny. + const gfx::Size tiny_size(10, 15); + // Tiny size should "bucket" to empty. + EXPECT_TRUE(GetSizeBucket(tiny_size).IsEmpty()); + reporter_->OnNaturalSizeChanged(tiny_size); + + // Verify reporting has stopped because because resolution is so small. Fast + // forward through several intervals to verify no callbacks are made while the + // tiny size is in effect. + EXPECT_FALSE(ShouldBeReporting()); + EXPECT_CALL(*this, GetPipelineStatsCB()).Times(0); + EXPECT_CALL(*interceptor_, UpdateRecord(_, _)).Times(0); + FastForward(kRecordingInterval * 3); + + // Change the size to something small, but reasonable. + const gfx::Size small_size(75, 75); + const gfx::Size bucketed_small_size = GetSizeBucket(small_size); + EXPECT_FALSE(bucketed_small_size.IsEmpty()); + reporter_->OnNaturalSizeChanged(small_size); + + // Fast forward by one interval to detect resolution change. + EXPECT_CALL(*this, GetPipelineStatsCB()); + FastForward(kRecordingInterval); + // Stabilize new framerate and verify record updates come with new offsets. + StabilizeFramerateAndStartNewRecord(kDefaultProfile, bucketed_small_size, + kDefaultFps); + decoded_offset = pipeline_decoded_frames_; + dropped_offset = pipeline_dropped_frames_; + AdvanceTimeAndVerifyRecordUpdate(decoded_offset, dropped_offset); +} + +} // namespace media
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc index 8bdd7ee..637c89d 100644 --- a/media/blink/webmediaplayer_impl.cc +++ b/media/blink/webmediaplayer_impl.cc
@@ -41,6 +41,7 @@ #include "media/base/timestamp_constants.h" #include "media/base/video_frame.h" #include "media/blink/texttrack_impl.h" +#include "media/blink/video_decode_stats_reporter.h" #include "media/blink/watch_time_reporter.h" #include "media/blink/webaudiosourceprovider_impl.h" #include "media/blink/webcontentdecryptionmodule_impl.h" @@ -254,7 +255,9 @@ base::FeatureList::IsEnabled(media::kUseSurfaceLayerForVideo)), request_routing_token_cb_(params->request_routing_token_cb()), overlay_routing_token_(OverlayInfo::RoutingToken()), - watch_time_recorder_provider_(params->watch_time_recorder_provider()) { + watch_time_recorder_provider_(params->watch_time_recorder_provider()), + create_decode_stats_recorder_cb_( + params->create_capabilities_recorder_cb()) { DVLOG(1) << __func__; DCHECK(!adjust_allocated_memory_cb_.is_null()); DCHECK(renderer_factory_selector_); @@ -550,6 +553,9 @@ watch_time_reporter_->OnPlaying(); } + if (video_decode_stats_reporter_) + video_decode_stats_reporter_->OnPlaying(); + media_log_->AddEvent(media_log_->CreateEvent(MediaLogEvent::PLAY)); UpdatePlayState(); } @@ -585,6 +591,10 @@ DCHECK(watch_time_reporter_); watch_time_reporter_->OnPaused(); + + if (video_decode_stats_reporter_) + video_decode_stats_reporter_->OnPaused(); + media_log_->AddEvent(media_log_->CreateEvent(MediaLogEvent::PAUSE)); UpdatePlayState(); @@ -1103,6 +1113,9 @@ if (!was_encrypted && watch_time_reporter_) CreateWatchTimeReporter(); + // For now MediaCapabilities only handles clear content. + video_decode_stats_reporter_.reset(); + SetCdm(cdm); } @@ -1120,6 +1133,9 @@ if (!was_encrypted && watch_time_reporter_) CreateWatchTimeReporter(); + // For now MediaCapabilities only handles clear content. + video_decode_stats_reporter_.reset(); + encrypted_client_->Encrypted( ConvertToWebInitDataType(init_data_type), init_data.data(), base::saturated_cast<unsigned int>(init_data.size())); @@ -1415,9 +1431,44 @@ observer_->OnMetadataChanged(pipeline_metadata_); CreateWatchTimeReporter(); + CreateVideoDecodeStatsReporter(); UpdatePlayState(); } +void WebMediaPlayerImpl::CreateVideoDecodeStatsReporter() { + // TODO(chcunningham): destroy reporter if we initially have video but the + // track gets disabled. Currently not possible in default desktop Chrome. + if (!HasVideo()) + return; + + // Stats reporter requires a valid config. We may not have one for HLS cases + // where URL demuxer doesn't know details of the stream. + if (!pipeline_metadata_.video_decoder_config.IsValidConfig()) + return; + + // For now MediaCapabilities only handles clear content. + // TODO(chcunningham): Report encrypted stats. + if (is_encrypted_) + return; + + // Create capabilities reporter and synchronize its initial state. + video_decode_stats_reporter_.reset(new VideoDecodeStatsReporter( + create_decode_stats_recorder_cb_.Run(), + base::Bind(&WebMediaPlayerImpl::GetPipelineStatistics, + base::Unretained(this)), + pipeline_metadata_.video_decoder_config)); + + if (delegate_->IsFrameHidden()) + video_decode_stats_reporter_->OnHidden(); + else + video_decode_stats_reporter_->OnShown(); + + if (paused_) + video_decode_stats_reporter_->OnPaused(); + else + video_decode_stats_reporter_->OnPlaying(); +} + void WebMediaPlayerImpl::OnProgress() { DVLOG(4) << __func__; if (highest_ready_state_ < ReadyState::kReadyStateHaveFutureData) { @@ -1576,6 +1627,9 @@ if (!watch_time_reporter_->IsSizeLargeEnoughToReportWatchTime()) CreateWatchTimeReporter(); + if (video_decode_stats_reporter_) + video_decode_stats_reporter_->OnNaturalSizeChanged(rotated_size); + if (overlay_enabled_ && surface_manager_ && overlay_mode_ == OverlayMode::kUseContentVideoView) { surface_manager_->NaturalSizeChanged(rotated_size); @@ -1624,6 +1678,9 @@ if (observer_) observer_->OnMetadataChanged(pipeline_metadata_); + + if (video_decode_stats_reporter_) + video_decode_stats_reporter_->OnVideoConfigChanged(config); } void WebMediaPlayerImpl::OnVideoAverageKeyframeDistanceUpdate() { @@ -1643,6 +1700,9 @@ if (watch_time_reporter_) watch_time_reporter_->OnHidden(); + if (video_decode_stats_reporter_) + video_decode_stats_reporter_->OnHidden(); + UpdateBackgroundVideoOptimizationState(); UpdatePlayState(); @@ -1674,6 +1734,9 @@ if (watch_time_reporter_) watch_time_reporter_->OnShown(); + if (video_decode_stats_reporter_) + video_decode_stats_reporter_->OnShown(); + // Only track the time to the first frame if playing or about to play because // of being shown and only for videos we would optimize background playback // for. @@ -1778,6 +1841,9 @@ void WebMediaPlayerImpl::OnDisconnectedFromRemoteDevice(double t) { DoSeek(base::TimeDelta::FromSecondsD(t), false); + // Capabilities reporting can resume now that playback is local. + CreateVideoDecodeStatsReporter(); + // |client_| might destroy us in methods below. UpdatePlayState(); @@ -1787,6 +1853,9 @@ } void WebMediaPlayerImpl::SuspendForRemote() { + // Capabilities reporting should only be performed for local playbacks. + video_decode_stats_reporter_.reset(); + if (pipeline_controller_.IsPipelineSuspended() && !IsNewRemotePlaybackPipelineEnabled()) { scoped_refptr<VideoFrame> frame = cast_impl_.GetCastingBanner(); @@ -1993,6 +2062,10 @@ // TODO(tguilbert/avayvod): Update this flag when removing |cast_impl_|. using_media_player_renderer_ = true; + // MediaPlayerRenderer does not provide pipeline stats, so nuke capabilities + // reporter. + video_decode_stats_reporter_.reset(); + demuxer_.reset(new MediaUrlDemuxer(media_task_runner_, loaded_url_, frame_->GetDocument().SiteForCookies())); pipeline_controller_.Start(demuxer_.get(), this, false, false); @@ -2670,6 +2743,10 @@ const std::string& remote_device_friendly_name) { DCHECK(main_task_runner_->BelongsToCurrentThread()); disable_pipeline_auto_suspend_ = true; + + // Capabilities reporting should only be performed for local playbacks. + video_decode_stats_reporter_.reset(); + // Requests to restart media pipeline. A remote renderer will be created via // the |renderer_factory_selector_|. ScheduleRestart(); @@ -2682,6 +2759,10 @@ void WebMediaPlayerImpl::SwitchToLocalRenderer() { DCHECK(main_task_runner_->BelongsToCurrentThread()); disable_pipeline_auto_suspend_ = false; + + // Capabilities reporting may resume now that playback is local. + CreateVideoDecodeStatsReporter(); + // Requests to restart media pipeline. A local renderer will be created via // the |renderer_factory_selector_|. ScheduleRestart();
diff --git a/media/blink/webmediaplayer_impl.h b/media/blink/webmediaplayer_impl.h index 6087b90..2489630 100644 --- a/media/blink/webmediaplayer_impl.h +++ b/media/blink/webmediaplayer_impl.h
@@ -39,6 +39,7 @@ #include "media/blink/webmediaplayer_params.h" #include "media/blink/webmediaplayer_util.h" #include "media/filters/pipeline_controller.h" +#include "media/mojo/interfaces/video_decode_stats_recorder.mojom.h" #include "media/renderers/skcanvas_video_renderer.h" #include "third_party/WebKit/public/platform/WebAudioSourceProvider.h" #include "third_party/WebKit/public/platform/WebContentDecryptionModuleResult.h" @@ -75,6 +76,7 @@ namespace media { class ChunkDemuxer; class ContentDecryptionModule; +class VideoDecodeStatsReporter; class MediaLog; class UrlIndex; class VideoFrameCompositor; @@ -407,6 +409,8 @@ void CreateWatchTimeReporter(); + void CreateVideoDecodeStatsReporter(); + // Returns true if the player is hidden. bool IsHidden() const; @@ -719,6 +723,9 @@ std::unique_ptr<WatchTimeReporter> watch_time_reporter_; bool is_encrypted_; + // Records pipeline statistics for describing media capabilities. + std::unique_ptr<VideoDecodeStatsReporter> video_decode_stats_reporter_; + // Elapsed time since we've last reached BUFFERING_HAVE_NOTHING. std::unique_ptr<base::ElapsedTimer> underflow_timer_; @@ -812,6 +819,9 @@ mojom::WatchTimeRecorderProvider* watch_time_recorder_provider_; + base::Callback<mojom::VideoDecodeStatsRecorderPtr()> + create_decode_stats_recorder_cb_; + DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImpl); };
diff --git a/media/blink/webmediaplayer_impl_unittest.cc b/media/blink/webmediaplayer_impl_unittest.cc index 0322443..f9fcfac 100644 --- a/media/blink/webmediaplayer_impl_unittest.cc +++ b/media/blink/webmediaplayer_impl_unittest.cc
@@ -25,6 +25,7 @@ #include "media/base/test_helpers.h" #include "media/blink/webmediaplayer_delegate.h" #include "media/blink/webmediaplayer_params.h" +#include "media/mojo/services/video_decode_stats_recorder.h" #include "media/mojo/services/watch_time_recorder.h" #include "media/renderers/default_renderer_factory.h" #include "testing/gmock/include/gmock/gmock.h" @@ -56,6 +57,12 @@ return 0; } +mojom::VideoDecodeStatsRecorderPtr CreateCapabilitiesRecorder() { + mojom::VideoDecodeStatsRecorderPtr recorder; + VideoDecodeStatsRecorder::Create(mojo::MakeRequest(&recorder)); + return recorder; +} + class DummyWebMediaPlayerClient : public blink::WebMediaPlayerClient { public: DummyWebMediaPlayerClient() {} @@ -254,7 +261,7 @@ RequestRoutingTokenCallback(), nullptr, kMaxKeyframeDistanceToDisableBackgroundVideo, kMaxKeyframeDistanceToDisableBackgroundVideoMSE, false, false, - provider_.get())); + provider_.get(), base::Bind(&CreateCapabilitiesRecorder))); } ~WebMediaPlayerImplTest() override { @@ -301,6 +308,14 @@ wmpi_->SetReadyState(blink::WebMediaPlayer::kReadyStateHaveMetadata); wmpi_->pipeline_metadata_.has_audio = has_audio; wmpi_->pipeline_metadata_.has_video = has_video; + + if (has_video) + wmpi_->pipeline_metadata_.video_decoder_config = + TestVideoConfig::Normal(); + + if (has_audio) + wmpi_->pipeline_metadata_.audio_decoder_config = + TestAudioConfig::Normal(); } void OnMetadata(PipelineMetadata metadata) { wmpi_->OnMetadata(metadata); } @@ -774,6 +789,7 @@ InitializeWebMediaPlayerImpl(); PipelineMetadata metadata; metadata.has_video = true; + metadata.video_decoder_config = TestVideoConfig::Normal(); metadata.natural_size = gfx::Size(320, 240); OnMetadata(metadata); @@ -788,6 +804,7 @@ InitializeWebMediaPlayerImpl(); PipelineMetadata metadata; metadata.has_video = true; + metadata.video_decoder_config = TestVideoConfig::Normal(); metadata.natural_size = gfx::Size(320, 240); metadata.video_rotation = VIDEO_ROTATION_90; @@ -805,6 +822,7 @@ // Setting metadata initializes |watch_time_reporter_| used in play(). PipelineMetadata metadata; metadata.has_video = true; + metadata.video_decoder_config = TestVideoConfig::Normal(); OnMetadata(metadata); EXPECT_FALSE(IsVideoLockedWhenPausedWhenHidden()); @@ -865,7 +883,9 @@ // Send metadata so we have a watch time reporter created. PipelineMetadata metadata; metadata.has_video = true; + metadata.video_decoder_config = TestVideoConfig::Normal(); metadata.has_audio = true; + metadata.audio_decoder_config = TestAudioConfig::Normal(); metadata.natural_size = gfx::Size(400, 400); OnMetadata(metadata);
diff --git a/media/blink/webmediaplayer_params.cc b/media/blink/webmediaplayer_params.cc index 7271a21..7ea44802 100644 --- a/media/blink/webmediaplayer_params.cc +++ b/media/blink/webmediaplayer_params.cc
@@ -27,7 +27,8 @@ base::TimeDelta max_keyframe_distance_to_disable_background_video_mse, bool enable_instant_source_buffer_gc, bool embedded_media_experience_enabled, - mojom::WatchTimeRecorderProvider* provider) + mojom::WatchTimeRecorderProvider* provider, + CreateCapabilitiesRecorderCB create_capabilities_recorder_cb) : defer_load_cb_(defer_load_cb), audio_renderer_sink_(audio_renderer_sink), media_log_(std::move(media_log)), @@ -46,7 +47,9 @@ max_keyframe_distance_to_disable_background_video_mse), enable_instant_source_buffer_gc_(enable_instant_source_buffer_gc), embedded_media_experience_enabled_(embedded_media_experience_enabled), - watch_time_recorder_provider_(provider) {} + watch_time_recorder_provider_(provider), + create_capabilities_recorder_cb_( + std::move(create_capabilities_recorder_cb)) {} WebMediaPlayerParams::~WebMediaPlayerParams() {}
diff --git a/media/blink/webmediaplayer_params.h b/media/blink/webmediaplayer_params.h index 3041606..29c0fc08 100644 --- a/media/blink/webmediaplayer_params.h +++ b/media/blink/webmediaplayer_params.h
@@ -17,6 +17,7 @@ #include "media/base/routing_token_callback.h" #include "media/blink/media_blink_export.h" #include "media/filters/context_3d.h" +#include "media/mojo/interfaces/video_decode_stats_recorder.mojom.h" namespace base { class SingleThreadTaskRunner; @@ -42,6 +43,8 @@ public: typedef base::Callback<void(const base::Closure&)> DeferLoadCB; typedef base::Callback<Context3D()> Context3DCB; + typedef base::Callback<mojom::VideoDecodeStatsRecorderPtr()> + CreateCapabilitiesRecorderCB; // Callback to tell V8 about the amount of memory used by the WebMediaPlayer // instance. The input parameter is the delta in bytes since the last call to @@ -69,7 +72,8 @@ base::TimeDelta max_keyframe_distance_to_disable_background_video_mse, bool enable_instant_source_buffer_gc, bool embedded_media_experience_enabled, - mojom::WatchTimeRecorderProvider* provider); + mojom::WatchTimeRecorderProvider* provider, + CreateCapabilitiesRecorderCB create_capabilities_recorder_cb); ~WebMediaPlayerParams(); @@ -136,6 +140,10 @@ return watch_time_recorder_provider_; } + CreateCapabilitiesRecorderCB create_capabilities_recorder_cb() const { + return create_capabilities_recorder_cb_; + } + private: DeferLoadCB defer_load_cb_; scoped_refptr<SwitchableAudioRendererSink> audio_renderer_sink_; @@ -155,6 +163,7 @@ bool enable_instant_source_buffer_gc_; const bool embedded_media_experience_enabled_; mojom::WatchTimeRecorderProvider* watch_time_recorder_provider_; + CreateCapabilitiesRecorderCB create_capabilities_recorder_cb_; DISALLOW_IMPLICIT_CONSTRUCTORS(WebMediaPlayerParams); };
diff --git a/media/capture/video/video_capture_device_unittest.cc b/media/capture/video/video_capture_device_unittest.cc index d29fb21..a4b313f 100644 --- a/media/capture/video/video_capture_device_unittest.cc +++ b/media/capture/video/video_capture_device_unittest.cc
@@ -13,6 +13,7 @@ #include "base/bind.h" #include "base/bind_helpers.h" #include "base/memory/ref_counted.h" +#include "base/message_loop/message_loop.h" #include "base/run_loop.h" #include "base/single_thread_task_runner.h" #include "base/test/scoped_task_environment.h"
diff --git a/media/filters/ffmpeg_demuxer_unittest.cc b/media/filters/ffmpeg_demuxer_unittest.cc index 6c5a862..b97a0d59 100644 --- a/media/filters/ffmpeg_demuxer_unittest.cc +++ b/media/filters/ffmpeg_demuxer_unittest.cc
@@ -1484,18 +1484,18 @@ EXPECT_EQ(media_tracks_->tracks().size(), 2u); - const MediaTrack& audio_track = *(media_tracks_->tracks()[0]); + const MediaTrack& audio_track = *(media_tracks_->tracks()[1]); EXPECT_EQ(audio_track.type(), MediaTrack::Audio); - EXPECT_EQ(audio_track.bytestream_track_id(), 1); + EXPECT_EQ(audio_track.bytestream_track_id(), 2); EXPECT_EQ(audio_track.kind(), "main"); - EXPECT_EQ(audio_track.label(), "GPAC ISO Audio Handler"); + EXPECT_EQ(audio_track.label(), "SoundHandler"); EXPECT_EQ(audio_track.language(), "und"); - const MediaTrack& video_track = *(media_tracks_->tracks()[1]); + const MediaTrack& video_track = *(media_tracks_->tracks()[0]); EXPECT_EQ(video_track.type(), MediaTrack::Video); - EXPECT_EQ(video_track.bytestream_track_id(), 2); + EXPECT_EQ(video_track.bytestream_track_id(), 1); EXPECT_EQ(video_track.kind(), "main"); - EXPECT_EQ(video_track.label(), "GPAC ISO Video Handler"); + EXPECT_EQ(video_track.label(), "VideoHandler"); EXPECT_EQ(video_track.language(), "und"); }
diff --git a/media/gpu/video_decode_accelerator_unittest.cc b/media/gpu/video_decode_accelerator_unittest.cc index 0a7cf6a9..d8c30687 100644 --- a/media/gpu/video_decode_accelerator_unittest.cc +++ b/media/gpu/video_decode_accelerator_unittest.cc
@@ -40,6 +40,7 @@ #include "base/memory/ptr_util.h" #include "base/message_loop/message_loop.h" #include "base/process/process_handle.h" +#include "base/run_loop.h" #include "base/single_thread_task_runner.h" #include "base/stl_util.h" #include "base/strings/string_number_conversions.h"
diff --git a/media/mojo/clients/mojo_video_encode_accelerator_unittest.cc b/media/mojo/clients/mojo_video_encode_accelerator_unittest.cc index b040009..6879823 100644 --- a/media/mojo/clients/mojo_video_encode_accelerator_unittest.cc +++ b/media/mojo/clients/mojo_video_encode_accelerator_unittest.cc
@@ -5,6 +5,7 @@ #include <stddef.h> #include "base/message_loop/message_loop.h" +#include "base/run_loop.h" #include "gpu/config/gpu_info.h" #include "media/mojo/clients/mojo_video_encode_accelerator.h" #include "media/mojo/interfaces/video_encode_accelerator.mojom.h"
diff --git a/media/mojo/interfaces/BUILD.gn b/media/mojo/interfaces/BUILD.gn index b0581c0..9b9bd07 100644 --- a/media/mojo/interfaces/BUILD.gn +++ b/media/mojo/interfaces/BUILD.gn
@@ -19,6 +19,7 @@ "output_protection.mojom", "provision_fetcher.mojom", "renderer.mojom", + "video_decode_stats_recorder.mojom", "video_decoder.mojom", "video_encode_accelerator.mojom", "watch_time_recorder.mojom",
diff --git a/media/mojo/interfaces/media_types.mojom b/media/mojo/interfaces/media_types.mojom index 26bb8fd..8176184 100644 --- a/media/mojo/interfaces/media_types.mojom +++ b/media/mojo/interfaces/media_types.mojom
@@ -6,6 +6,7 @@ import "gpu/ipc/common/mailbox_holder.mojom"; import "mojo/common/time.mojom"; +import "mojo/common/values.mojom"; import "ui/gfx/geometry/mojo/geometry.mojom"; // See media/base/audio_codecs.h for descriptions. @@ -226,6 +227,9 @@ // Contents of the video frame (or EOS marker). VideoFrameData data; + + // Extra properties associated with the VideoFrame. + mojo.common.mojom.DictionaryValue metadata; }; // Possible choices for storing VideoFrame data.
diff --git a/media/mojo/interfaces/video_decode_stats_recorder.mojom b/media/mojo/interfaces/video_decode_stats_recorder.mojom new file mode 100644 index 0000000..27b7e7b --- /dev/null +++ b/media/mojo/interfaces/video_decode_stats_recorder.mojom
@@ -0,0 +1,22 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +module media.mojom; + +import "media/mojo/interfaces/media_types.mojom"; +import "ui/gfx/geometry/mojo/geometry.mojom"; + +// Interface for media players in the renderer to send decode stats to the +// browser process. Each player will have its own recorder instance. +interface VideoDecodeStatsRecorder { + // Will finalize any ongoing record and begin a new record with the given + // properties. + StartNewRecord(VideoCodecProfile profile, gfx.mojom.Size video_size, + int32 frames_per_sec); + + // Update stats values for the current record. Each update overrides the + // previous values. Values should only be considered final when a new + // record is started or upon IPC disconnect. + UpdateRecord(uint32 frames_decoded, uint32 frames_dropped); +};
diff --git a/media/mojo/interfaces/video_frame_struct_traits.cc b/media/mojo/interfaces/video_frame_struct_traits.cc index bd73cde..4546d74 100644 --- a/media/mojo/interfaces/video_frame_struct_traits.cc +++ b/media/mojo/interfaces/video_frame_struct_traits.cc
@@ -99,6 +99,7 @@ if (!input.ReadTimestamp(×tamp)) return false; + scoped_refptr<media::VideoFrame> frame; if (data.is_shared_buffer_data()) { media::mojom::SharedBufferVideoFrameDataDataView shared_buffer_data; data.GetSharedBufferDataDataView(&shared_buffer_data); @@ -106,17 +107,14 @@ // TODO(sandersd): Conversion from uint64_t to size_t could cause // corruption. Platform-dependent types should be removed from the // implementation (limiting to 32-bit offsets is fine). - *output = media::MojoSharedBufferVideoFrame::Create( + frame = media::MojoSharedBufferVideoFrame::Create( format, coded_size, visible_rect, natural_size, shared_buffer_data.TakeFrameData(), shared_buffer_data.frame_data_size(), shared_buffer_data.y_offset(), shared_buffer_data.u_offset(), shared_buffer_data.v_offset(), shared_buffer_data.y_stride(), shared_buffer_data.u_stride(), shared_buffer_data.v_stride(), timestamp); - return !!*output; - } - - if (data.is_mailbox_data()) { + } else if (data.is_mailbox_data()) { media::mojom::MailboxVideoFrameDataDataView mailbox_data; data.GetMailboxDataDataView(&mailbox_data); @@ -128,15 +126,22 @@ for (size_t i = 0; i < media::VideoFrame::kMaxPlanes; i++) mailbox_holder_array[i] = mailbox_holder[i]; - *output = media::VideoFrame::WrapNativeTextures( + frame = media::VideoFrame::WrapNativeTextures( format, mailbox_holder_array, media::VideoFrame::ReleaseMailboxCB(), coded_size, visible_rect, natural_size, timestamp); - return !!*output; + } else { + // TODO(sandersd): Switch on the union tag to avoid this ugliness? + NOTREACHED(); + return false; } - // TODO(sandersd): Switch on the union tag to avoid this ugliness? - NOTREACHED(); - return false; + std::unique_ptr<base::DictionaryValue> metadata; + if (!input.ReadMetadata(&metadata)) + return false; + frame->metadata()->MergeInternalValuesFrom(*metadata); + + *output = std::move(frame); + return true; } } // namespace mojo
diff --git a/media/mojo/interfaces/video_frame_struct_traits.h b/media/mojo/interfaces/video_frame_struct_traits.h index 712a3270..75627e5 100644 --- a/media/mojo/interfaces/video_frame_struct_traits.h +++ b/media/mojo/interfaces/video_frame_struct_traits.h
@@ -11,6 +11,7 @@ #include "media/base/video_frame.h" #include "media/mojo/interfaces/media_types.mojom.h" #include "mojo/common/common_custom_types_struct_traits.h" +#include "mojo/common/values_struct_traits.h" #include "mojo/public/cpp/bindings/struct_traits.h" #include "ui/gfx/geometry/mojo/geometry_struct_traits.h" @@ -55,6 +56,11 @@ static media::mojom::VideoFrameDataPtr data( const scoped_refptr<media::VideoFrame>& input); + static std::unique_ptr<base::DictionaryValue> metadata( + const scoped_refptr<media::VideoFrame>& input) { + return input->metadata()->CopyInternalValues(); + } + static bool Read(media::mojom::VideoFrameDataView input, scoped_refptr<media::VideoFrame>* output); };
diff --git a/media/mojo/interfaces/video_frame_struct_traits_unittest.cc b/media/mojo/interfaces/video_frame_struct_traits_unittest.cc index f0ff93b..bbf2b27 100644 --- a/media/mojo/interfaces/video_frame_struct_traits_unittest.cc +++ b/media/mojo/interfaces/video_frame_struct_traits_unittest.cc
@@ -75,10 +75,15 @@ scoped_refptr<VideoFrame> frame = MojoSharedBufferVideoFrame::CreateDefaultI420( gfx::Size(100, 100), base::TimeDelta::FromSeconds(100)); + frame->metadata()->SetDouble(VideoFrameMetadata::FRAME_RATE, 42.0); ASSERT_TRUE(RoundTrip(&frame)); ASSERT_TRUE(frame); EXPECT_FALSE(frame->metadata()->IsTrue(VideoFrameMetadata::END_OF_STREAM)); + double frame_rate = 0.0; + EXPECT_TRUE(frame->metadata()->GetDouble(VideoFrameMetadata::FRAME_RATE, + &frame_rate)); + EXPECT_EQ(frame_rate, 42.0); EXPECT_EQ(frame->coded_size(), gfx::Size(100, 100)); EXPECT_EQ(frame->timestamp(), base::TimeDelta::FromSeconds(100));
diff --git a/media/mojo/mojo_video_encode_accelerator_integration_test.cc b/media/mojo/mojo_video_encode_accelerator_integration_test.cc index dff820e..a739ffa4 100644 --- a/media/mojo/mojo_video_encode_accelerator_integration_test.cc +++ b/media/mojo/mojo_video_encode_accelerator_integration_test.cc
@@ -5,6 +5,7 @@ #include <stddef.h> #include "base/message_loop/message_loop.h" +#include "base/run_loop.h" #include "base/test/gtest_util.h" #include "gpu/command_buffer/service/gpu_preferences.h" #include "media/base/limits.h"
diff --git a/media/mojo/services/BUILD.gn b/media/mojo/services/BUILD.gn index c460456f..5fa577a 100644 --- a/media/mojo/services/BUILD.gn +++ b/media/mojo/services/BUILD.gn
@@ -57,6 +57,8 @@ "mojo_video_encode_accelerator_service.h", "test_mojo_media_client.cc", "test_mojo_media_client.h", + "video_decode_stats_recorder.cc", + "video_decode_stats_recorder.h", "watch_time_recorder.cc", "watch_time_recorder.h", ]
diff --git a/media/mojo/services/mojo_video_encode_accelerator_service_unittest.cc b/media/mojo/services/mojo_video_encode_accelerator_service_unittest.cc index dff3745b..a566391 100644 --- a/media/mojo/services/mojo_video_encode_accelerator_service_unittest.cc +++ b/media/mojo/services/mojo_video_encode_accelerator_service_unittest.cc
@@ -5,6 +5,7 @@ #include <stddef.h> #include "base/message_loop/message_loop.h" +#include "base/run_loop.h" #include "gpu/command_buffer/service/gpu_preferences.h" #include "media/mojo/interfaces/video_encode_accelerator.mojom.h" #include "media/mojo/services/mojo_video_encode_accelerator_service.h"
diff --git a/media/mojo/services/video_decode_stats_recorder.cc b/media/mojo/services/video_decode_stats_recorder.cc new file mode 100644 index 0000000..79ffce87 --- /dev/null +++ b/media/mojo/services/video_decode_stats_recorder.cc
@@ -0,0 +1,70 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "media/mojo/services/video_decode_stats_recorder.h" +#include "base/memory/ptr_util.h" +#include "mojo/public/cpp/bindings/strong_binding.h" + +#include "base/logging.h" + +namespace media { + +VideoDecodeStatsRecorder::~VideoDecodeStatsRecorder() { + DVLOG(2) << __func__ << " Finalize for IPC disconnect"; + FinalizeRecord(); +} + +// static +void VideoDecodeStatsRecorder::Create( + mojom::VideoDecodeStatsRecorderRequest request) { + mojo::MakeStrongBinding(base::MakeUnique<VideoDecodeStatsRecorder>(), + std::move(request)); +} + +void VideoDecodeStatsRecorder::StartNewRecord(VideoCodecProfile profile, + const gfx::Size& natural_size, + int frames_per_sec) { + DCHECK_NE(profile, VIDEO_CODEC_PROFILE_UNKNOWN); + DCHECK_GT(frames_per_sec, 0); + DCHECK(natural_size.width() > 0 && natural_size.height() > 0); + + FinalizeRecord(); + + DVLOG(2) << __func__ << "profile: " << profile + << " sz:" << natural_size.ToString() << " fps:" << frames_per_sec; + + profile_ = profile; + natural_size_ = natural_size; + frames_per_sec_ = frames_per_sec; + frames_decoded_ = 0; + frames_dropped_ = 0; +} + +void VideoDecodeStatsRecorder::UpdateRecord(uint32_t frames_decoded, + uint32_t frames_dropped) { + DVLOG(3) << __func__ << " decoded:" << frames_decoded + << " dropped:" << frames_dropped; + + // Dropped can never exceed decoded. + DCHECK_LE(frames_dropped, frames_decoded); + // Should never go backwards. + DCHECK_GE(frames_decoded, frames_decoded_); + DCHECK_GE(frames_dropped, frames_dropped_); + + frames_decoded_ = frames_decoded; + frames_dropped_ = frames_dropped; +} + +void VideoDecodeStatsRecorder::FinalizeRecord() { + if (profile_ == VIDEO_CODEC_PROFILE_UNKNOWN || frames_decoded_ == 0) + return; + + DVLOG(2) << __func__ << " profile: " << profile_ + << " size:" << natural_size_.ToString() << " fps:" << frames_per_sec_ + << " decoded:" << frames_decoded_ << " dropped:" << frames_dropped_; + + // TODO(chcunningham): Save everything to DB. +} + +} // namespace media \ No newline at end of file
diff --git a/media/mojo/services/video_decode_stats_recorder.h b/media/mojo/services/video_decode_stats_recorder.h new file mode 100644 index 0000000..a5ff531 --- /dev/null +++ b/media/mojo/services/video_decode_stats_recorder.h
@@ -0,0 +1,50 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef MEDIA_MOJO_SERVICES_VIDEO_DECODE_STATS_RECORDER_H_ +#define MEDIA_MOJO_SERVICES_VIDEO_DECODE_STATS_RECORDER_H_ + +#include <stdint.h> +#include <string> + +#include "base/time/time.h" +#include "media/base/video_codecs.h" +#include "media/mojo/interfaces/video_decode_stats_recorder.mojom.h" +#include "media/mojo/services/media_mojo_export.h" +#include "services/service_manager/public/cpp/bind_source_info.h" + +namespace media { + +// See mojom::VideoDecodeStatsRecorder for documentation. +class MEDIA_MOJO_EXPORT VideoDecodeStatsRecorder + : public mojom::VideoDecodeStatsRecorder { + public: + VideoDecodeStatsRecorder() = default; + ~VideoDecodeStatsRecorder() override; + + static void Create(mojom::VideoDecodeStatsRecorderRequest request); + + // mojom::VideoDecodeStatsRecorder implementation: + void StartNewRecord(VideoCodecProfile profile, + const gfx::Size& natural_size, + int frames_per_sec) override; + void UpdateRecord(uint32_t frames_decoded, uint32_t frames_dropped) override; + + private: + // Save most recent stats values to disk. Called during destruction and upon + // starting a new record. + void FinalizeRecord(); + + VideoCodecProfile profile_ = VIDEO_CODEC_PROFILE_UNKNOWN; + gfx::Size natural_size_; + int frames_per_sec_ = 0; + uint32_t frames_decoded_ = 0; + uint32_t frames_dropped_ = 0; + + DISALLOW_COPY_AND_ASSIGN(VideoDecodeStatsRecorder); +}; + +} // namespace media + +#endif // MEDIA_MOJO_SERVICES_VIDEO_DECODE_STATS_RECORDER_H_ \ No newline at end of file
diff --git a/media/mojo/services/watch_time_recorder_unittest.cc b/media/mojo/services/watch_time_recorder_unittest.cc index efbc9dc..e443a53 100644 --- a/media/mojo/services/watch_time_recorder_unittest.cc +++ b/media/mojo/services/watch_time_recorder_unittest.cc
@@ -8,6 +8,8 @@ #include "base/bind.h" #include "base/bind_helpers.h" +#include "base/message_loop/message_loop.h" +#include "base/run_loop.h" #include "base/test/histogram_tester.h" #include "base/test/test_message_loop.h" #include "base/threading/thread_task_runner_handle.h"
diff --git a/media/renderers/audio_renderer_impl_unittest.cc b/media/renderers/audio_renderer_impl_unittest.cc index 672b65b..2ed20a2a 100644 --- a/media/renderers/audio_renderer_impl_unittest.cc +++ b/media/renderers/audio_renderer_impl_unittest.cc
@@ -1246,6 +1246,10 @@ EXPECT_FALSE(ConsumeBitstreamBufferedData(OutputFrames(1))); base::RunLoop().RunUntilIdle(); EXPECT_TRUE(ended()); + + // Clear the use of |media_client_|, which was set in + // InitializeBitstreamFormat(). + SetMediaClient(nullptr); } } // namespace media
diff --git a/media/test/data/bear.mp4 b/media/test/data/bear.mp4 index 3763b59..476dc2b 100644 --- a/media/test/data/bear.mp4 +++ b/media/test/data/bear.mp4 Binary files differ
diff --git a/mojo/public/cpp/bindings/tests/interface_ptr_unittest.cc b/mojo/public/cpp/bindings/tests/interface_ptr_unittest.cc index 39079be..bba81b9 100644 --- a/mojo/public/cpp/bindings/tests/interface_ptr_unittest.cc +++ b/mojo/public/cpp/bindings/tests/interface_ptr_unittest.cc
@@ -10,6 +10,7 @@ #include "base/callback.h" #include "base/callback_helpers.h" #include "base/memory/ptr_util.h" +#include "base/message_loop/message_loop.h" #include "base/run_loop.h" #include "base/task_scheduler/post_task.h" #include "base/test/scoped_task_environment.h"
diff --git a/net/BUILD.gn b/net/BUILD.gn index fbb0b0da..85c7ea1 100644 --- a/net/BUILD.gn +++ b/net/BUILD.gn
@@ -2661,6 +2661,8 @@ sources += [ "test/spawned_test_server/remote_test_server.cc", "test/spawned_test_server/remote_test_server.h", + "test/spawned_test_server/remote_test_server_config.cc", + "test/spawned_test_server/remote_test_server_config.h", "test/spawned_test_server/spawner_communicator.cc", "test/spawned_test_server/spawner_communicator.h", ]
diff --git a/net/disk_cache/blockfile/backend_impl.cc b/net/disk_cache/blockfile/backend_impl.cc index bae3a41..8aa0367 100644 --- a/net/disk_cache/blockfile/backend_impl.cc +++ b/net/disk_cache/blockfile/backend_impl.cc
@@ -15,6 +15,7 @@ #include "base/hash.h" #include "base/lazy_instance.h" #include "base/location.h" +#include "base/message_loop/message_loop.h" #include "base/metrics/field_trial.h" #include "base/metrics/histogram.h" #include "base/rand_util.h"
diff --git a/net/nqe/socket_watcher_unittest.cc b/net/nqe/socket_watcher_unittest.cc index b321e6f..b5643ce 100644 --- a/net/nqe/socket_watcher_unittest.cc +++ b/net/nqe/socket_watcher_unittest.cc
@@ -5,6 +5,7 @@ #include "net/nqe/socket_watcher.h" #include "base/bind.h" +#include "base/run_loop.h" #include "base/test/scoped_task_environment.h" #include "base/test/simple_test_tick_clock.h" #include "base/threading/thread_task_runner_handle.h"
diff --git a/net/test/spawned_test_server/remote_test_server.cc b/net/test/spawned_test_server/remote_test_server.cc index f432831..9a52f3b 100644 --- a/net/test/spawned_test_server/remote_test_server.cc +++ b/net/test/spawned_test_server/remote_test_server.cc
@@ -13,7 +13,6 @@ #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/json/json_writer.h" -#include "base/lazy_instance.h" #include "base/logging.h" #include "base/memory/ptr_util.h" #include "base/path_service.h" @@ -22,6 +21,7 @@ #include "base/values.h" #include "net/base/host_port_pair.h" #include "net/base/net_errors.h" +#include "net/test/spawned_test_server/remote_test_server_config.h" #include "net/test/spawned_test_server/spawner_communicator.h" #include "url/gurl.h" @@ -29,48 +29,6 @@ namespace { -// Based on how the Android runner sets things up, it is only valid for one -// RemoteTestServer to be active on the device at a time. -class RemoteTestServerTracker { - public: - void StartingServer() { - base::AutoLock lock(lock_); - CHECK_EQ(count_, 0); - count_++; - } - - void StoppingServer() { - base::AutoLock lock(lock_); - CHECK_EQ(count_, 1); - count_--; - } - - private: - // |lock_| protects access to |count_|. - base::Lock lock_; - int count_ = 0; -}; - -base::LazyInstance<RemoteTestServerTracker>::Leaky tracker = - LAZY_INSTANCE_INITIALIZER; - -// To reduce the running time of tests, tests may be sharded across several -// devices. This means that it may be necessary to support multiple instances -// of the test server spawner and the Python test server simultaneously on the -// same host. Each pair of (test server spawner, Python test server) correspond -// to a single testing device. -// The mapping between the test server spawner and the individual Python test -// servers is written to a file on the device prior to executing any tests. -base::FilePath GetTestServerPortInfoFile() { -#if !defined(OS_ANDROID) - return base::FilePath("/tmp/net-test-server-ports"); -#else - base::FilePath test_data_dir; - PathService::Get(base::DIR_ANDROID_EXTERNAL_STORAGE, &test_data_dir); - return test_data_dir.Append("net-test-server-ports"); -#endif -} - // Please keep it sync with dictionary SERVER_TYPES in testserver.py std::string GetServerTypeString(BaseTestServer::Type type) { switch (type) { @@ -96,7 +54,7 @@ RemoteTestServer::RemoteTestServer(Type type, const base::FilePath& document_root) - : BaseTestServer(type), spawner_server_port_(0) { + : BaseTestServer(type) { if (!Init(document_root)) NOTREACHED(); } @@ -104,8 +62,7 @@ RemoteTestServer::RemoteTestServer(Type type, const SSLOptions& ssl_options, const base::FilePath& document_root) - : BaseTestServer(type, ssl_options), - spawner_server_port_(0) { + : BaseTestServer(type, ssl_options) { if (!Init(document_root)) NOTREACHED(); } @@ -118,9 +75,8 @@ if (spawner_communicator_.get()) return true; - tracker.Get().StartingServer(); - - spawner_communicator_.reset(new SpawnerCommunicator(spawner_server_port_)); + spawner_communicator_ = + std::make_unique<SpawnerCommunicator>(RemoteTestServerConfig::Load()); base::DictionaryValue arguments_dict; if (!GenerateArguments(&arguments_dict)) @@ -163,19 +119,18 @@ } bool RemoteTestServer::Stop() { - if (!spawner_communicator_.get()) + if (!spawner_communicator_) return true; - tracker.Get().StoppingServer(); - + uint16_t port = GetPort(); CleanUpWhenStoppingServer(); - bool stopped = spawner_communicator_->StopServer(); + bool stopped = spawner_communicator_->StopServer(port); if (!stopped) LOG(ERROR) << "Failed stopping RemoteTestServer"; // Explicitly reset |spawner_communicator_| to avoid reusing the stopped one. - spawner_communicator_.reset(NULL); + spawner_communicator_.reset(); return stopped; } @@ -193,45 +148,16 @@ if (document_root.IsAbsolute()) return false; - // Gets ports information used by test server spawner and Python test server. - int test_server_port = 0; - - // Parse file to extract the ports information. - std::string port_info; - if (!base::ReadFileToString(GetTestServerPortInfoFile(), &port_info) || - port_info.empty()) { - return false; - } - - std::vector<std::string> ports = base::SplitString( - port_info, ":", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); - if (ports.size() != 2u) - return false; - - // Verify the ports information. - base::StringToInt(ports[0], &spawner_server_port_); - if (!spawner_server_port_ || - static_cast<uint32_t>(spawner_server_port_) >= - std::numeric_limits<uint16_t>::max()) - return false; - - // Allow the test_server_port to be 0, which means the test server spawner - // will pick up a random port to run the test server. - base::StringToInt(ports[1], &test_server_port); - if (static_cast<uint32_t>(test_server_port) >= - std::numeric_limits<uint16_t>::max()) - return false; - SetPort(test_server_port); - // Unlike LocalTestServer, RemoteTestServer passes relative paths to the test // server. The test server fails on empty strings in some configurations. base::FilePath fixed_root = document_root; if (fixed_root.empty()) fixed_root = base::FilePath(base::FilePath::kCurrentDirectory); - SetResourcePath(fixed_root, base::FilePath().AppendASCII("net") - .AppendASCII("data") - .AppendASCII("ssl") - .AppendASCII("certificates")); + SetResourcePath(fixed_root, base::FilePath() + .AppendASCII("net") + .AppendASCII("data") + .AppendASCII("ssl") + .AppendASCII("certificates")); return true; }
diff --git a/net/test/spawned_test_server/remote_test_server.h b/net/test/spawned_test_server/remote_test_server.h index 2633b3f..db76a21 100644 --- a/net/test/spawned_test_server/remote_test_server.h +++ b/net/test/spawned_test_server/remote_test_server.h
@@ -51,12 +51,6 @@ private: bool Init(const base::FilePath& document_root); - // The local port used to communicate with the TestServer spawner. This is - // used to control the startup and shutdown of the Python TestServer running - // on the remote machine. On Android, this port will be redirected to the - // same port on the host machine. - int spawner_server_port_; - // Helper to start and stop instances of the Python test server that runs on // the host machine. std::unique_ptr<SpawnerCommunicator> spawner_communicator_;
diff --git a/net/test/spawned_test_server/remote_test_server_config.cc b/net/test/spawned_test_server/remote_test_server_config.cc new file mode 100644 index 0000000..1e561881 --- /dev/null +++ b/net/test/spawned_test_server/remote_test_server_config.cc
@@ -0,0 +1,95 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "net/test/spawned_test_server/remote_test_server_config.h" + +#include "base/base_paths.h" +#include "base/environment.h" +#include "base/files/file_path.h" +#include "base/files/file_util.h" +#include "base/json/json_reader.h" +#include "base/lazy_instance.h" +#include "base/path_service.h" +#include "base/threading/thread_restrictions.h" +#include "base/values.h" +#include "build/build_config.h" +#include "url/gurl.h" + +namespace net { + +namespace { + +base::FilePath GetTestServerConfigFilePath() { + base::FilePath dir; +#if defined(OS_ANDROID) + PathService::Get(base::DIR_ANDROID_EXTERNAL_STORAGE, &dir); +#elif defined(OS_FUCHSIA) + dir = base::FilePath("/system"); +#else + PathService::Get(base::DIR_TEMP, &dir); +#endif + return dir.AppendASCII("net-test-server-config"); +} + +} // namespace + +RemoteTestServerConfig::RemoteTestServerConfig() = default; +RemoteTestServerConfig::~RemoteTestServerConfig() {} + +RemoteTestServerConfig::RemoteTestServerConfig( + const RemoteTestServerConfig& other) = default; +RemoteTestServerConfig& RemoteTestServerConfig::operator=( + const RemoteTestServerConfig&) = default; + +RemoteTestServerConfig RemoteTestServerConfig::Load() { + base::ThreadRestrictions::ScopedAllowIO allow_io; + + RemoteTestServerConfig result; + + base::FilePath config_path = GetTestServerConfigFilePath(); + + // Use defaults if the file doesn't exists. + if (!base::PathExists(config_path)) + return result; + + std::string config_json; + if (!ReadFileToString(config_path, &config_json)) + LOG(FATAL) << "Failed to read " << config_path.value(); + + std::unique_ptr<base::DictionaryValue> config = + base::DictionaryValue::From(base::JSONReader::Read(config_json)); + if (!config) + LOG(FATAL) << "Failed to parse " << config_path.value(); + + std::string address_str; + if (config->GetString("address", &address_str)) { + if (!result.address_.AssignFromIPLiteral(address_str)) { + LOG(FATAL) << "Invalid address specified in test server config: " + << address_str; + } + } else { + LOG(WARNING) << "address isn't specified in test server config."; + } + + if (config->GetString("spawner_url_base", &result.spawner_url_base_)) { + GURL url(result.spawner_url_base_); + if (!url.is_valid()) { + LOG(FATAL) << "Invalid spawner_url_base specified in test server config: " + << result.spawner_url_base_; + } + } + + return result; +} + +GURL RemoteTestServerConfig::GetSpawnerUrl(const std::string& command) const { + CHECK(!spawner_url_base_.empty()) + << "spawner_url_base is expected, but not set in test server config."; + std::string url = spawner_url_base_ + "/" + command; + GURL result = GURL(url); + CHECK(result.is_valid()) << url; + return result; +} + +} // namespace net
diff --git a/net/test/spawned_test_server/remote_test_server_config.h b/net/test/spawned_test_server/remote_test_server_config.h new file mode 100644 index 0000000..82686e3 --- /dev/null +++ b/net/test/spawned_test_server/remote_test_server_config.h
@@ -0,0 +1,63 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef NET_TEST_SPAWNED_TEST_SERVER_REMOTE_TEST_SERVER_CONFIG_H_ +#define NET_TEST_SPAWNED_TEST_SERVER_REMOTE_TEST_SERVER_CONFIG_H_ + +#include <string> + +#include "base/macros.h" +#include "net/base/ip_address.h" + +class GURL; + +namespace net { + +// RemoteTestServerConfig is responsible for loading test server configuration +// from a file. Expected config location depends on platform: +// - Android: DIR_ANDROID_EXTERNAL_STORAGE/net-test-server-config +// - Fuchsia: /system/net-test-server-config +// - other platforms: DIR_TEMP/net-test-server-config +// +// If the config file doesn't exist then the default configuration is used. By +// default the server is started on 127.0.0.1. +// +// If the config file exists then it must be stored in the following format: +// { +// 'address': '127.0.0.1', +// 'spawner_url_base': 'http://localhost:5000' +// } +// +// 'spawner_url_base' specifies base URL to connect to the test server spawner +// responsible for starting and stopping test server. Currently spawner is used +// only on Android and Fuchsia. 'address' specifies IP address for the test +// server. +class RemoteTestServerConfig { + public: + RemoteTestServerConfig(); + ~RemoteTestServerConfig(); + + RemoteTestServerConfig(const RemoteTestServerConfig& other); + RemoteTestServerConfig& operator=(const RemoteTestServerConfig&); + + // Returns current test server configuration, loading it from a file if the + // file exists. + static RemoteTestServerConfig Load(); + + // IP address to use used to connect to the testserver. + const IPAddress& address() const { return address_; } + + // GURL for the test server spawner. + GURL GetSpawnerUrl(const std::string& command) const; + + private: + // Defaults that can be overridden with a config file. + IPAddress address_ = {127, 0, 0, 1}; + + std::string spawner_url_base_; +}; + +} // namespace net + +#endif // NET_TEST_SPAWNED_TEST_SERVER_REMOTE_TEST_SERVER_CONFIG_H_
diff --git a/net/test/spawned_test_server/spawner_communicator.cc b/net/test/spawned_test_server/spawner_communicator.cc index eb6f328..8968045 100644 --- a/net/test/spawned_test_server/spawner_communicator.cc +++ b/net/test/spawned_test_server/spawner_communicator.cc
@@ -4,6 +4,8 @@ #include "net/test/spawned_test_server/spawner_communicator.h" +#include <inttypes.h> + #include <limits> #include <utility> @@ -32,12 +34,6 @@ namespace { -GURL GenerateSpawnerCommandURL(const std::string& command, uint16_t port) { - // Always performs HTTP request for sending command to the spawner server. - return GURL(base::StringPrintf("%s:%u/%s", "http://127.0.0.1", port, - command.c_str())); -} - int kBufferSize = 2048; // A class to hold all data needed to send a command to spawner server. @@ -98,11 +94,11 @@ } // namespace -SpawnerCommunicator::SpawnerCommunicator(uint16_t port) - : io_thread_("spawner_communicator"), +SpawnerCommunicator::SpawnerCommunicator(const RemoteTestServerConfig& config) + : config_(config), + io_thread_("spawner_communicator"), event_(base::WaitableEvent::ResetPolicy::AUTOMATIC, - base::WaitableEvent::InitialState::NOT_SIGNALED), - port_(port) {} + base::WaitableEvent::InitialState::NOT_SIGNALED) {} SpawnerCommunicator::~SpawnerCommunicator() { DCHECK(!io_thread_.IsRunning()); @@ -119,8 +115,6 @@ if (io_thread_.IsRunning()) return; - allowed_port_.reset(new ScopedPortException(port_)); - bool thread_started = io_thread_.StartWithOptions( base::Thread::Options(base::MessageLoop::TYPE_IO, 0)); DCHECK(thread_started); @@ -171,8 +165,10 @@ // Prepare the URLRequest for sending the command. DCHECK(!cur_request_.get()); context_.reset(new TestURLRequestContext); - cur_request_ = context_->CreateRequest( - GenerateSpawnerCommandURL(command, port_), DEFAULT_PRIORITY, this); + GURL url = config_.GetSpawnerUrl(command); + allowed_port_ = std::make_unique<ScopedPortException>(url.EffectiveIntPort()); + cur_request_ = context_->CreateRequest(url, DEFAULT_PRIORITY, this); + DCHECK(cur_request_); cur_request_->SetUserData( this, std::make_unique<SpawnerRequestData>(result_code, data_received)); @@ -328,7 +324,7 @@ return result == OK; } -bool SpawnerCommunicator::StopServer() { +bool SpawnerCommunicator::StopServer(uint16_t port) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); // It's OK to stop the SpawnerCommunicator without starting it. Some tests // have test server on their test fixture but do not actually use it. @@ -338,7 +334,9 @@ // When the test is done, ask the test server spawner to kill the test server // on the remote machine. std::string server_return_data; - int result = SendCommandAndWaitForResult("kill", "", &server_return_data); + std::string command = base::StringPrintf("kill?port=%" PRIu16, port); + int result = + SendCommandAndWaitForResult(command, std::string(), &server_return_data); Shutdown(); if (result != OK || server_return_data != "killed") return false;
diff --git a/net/test/spawned_test_server/spawner_communicator.h b/net/test/spawned_test_server/spawner_communicator.h index 58efb9b..958cc79 100644 --- a/net/test/spawned_test_server/spawner_communicator.h +++ b/net/test/spawned_test_server/spawner_communicator.h
@@ -14,6 +14,7 @@ #include "base/synchronization/waitable_event.h" #include "base/threading/thread.h" #include "base/threading/thread_checker.h" +#include "net/test/spawned_test_server/remote_test_server_config.h" #include "net/url_request/url_request.h" namespace base { @@ -52,7 +53,7 @@ // (2) Kill Python test server, format is: // Path: "/kill". // Method: "GET". -// Data to server: None. +// Data to server: port=<server_port>. // Data from server: String "killed" returned if success. // // (3) Ping Python test server to see whether it is alive, format is: @@ -66,7 +67,7 @@ // fetched from spawner server or timed-out. class SpawnerCommunicator : public URLRequest::Delegate { public: - explicit SpawnerCommunicator(uint16_t port); + explicit SpawnerCommunicator(const RemoteTestServerConfig& config); ~SpawnerCommunicator() override; // Starts an instance of the Python test server on the host/ machine.If @@ -74,7 +75,7 @@ // data returned by the spawner. bool StartServer(const std::string& arguments, std::string* server_data) WARN_UNUSED_RESULT; - bool StopServer() WARN_UNUSED_RESULT; + bool StopServer(uint16_t port) WARN_UNUSED_RESULT; private: // Starts the IO thread. Called on the user thread. @@ -113,19 +114,16 @@ // Timeout timer task. Runs on IO thread. void OnTimeout(); + const RemoteTestServerConfig config_; + // A thread to communicate with test_spawner server. base::Thread io_thread_; // WaitableEvent to notify whether the communication is done. base::WaitableEvent event_; - // The local port used to communicate with the TestServer spawner. This is - // used to control the startup and shutdown of the Python TestServer running - // on the remote machine. On Android, this port will be redirected to the - // same port on the host machine. - const uint16_t port_; - - // Helper to add |port_| to the list of the globally explicitly allowed ports. + // Helper to add spawner port to the list of the globally explicitly allowed + // ports. std::unique_ptr<ScopedPortException> allowed_port_; // Request context used by |cur_request_|.
diff --git a/remoting/client/audio/BUILD.gn b/remoting/client/audio/BUILD.gn index bbed7dd3..95fea34a 100644 --- a/remoting/client/audio/BUILD.gn +++ b/remoting/client/audio/BUILD.gn
@@ -4,10 +4,13 @@ source_set("audio") { sources = [ + "async_audio_frame_supplier.h", + "audio_frame_supplier.h", "audio_player.cc", "audio_player.h", "audio_player_android.cc", "audio_player_android.h", + "audio_stream_consumer.h", ] configs += [ "//remoting/build/config:version" ]
diff --git a/remoting/client/audio/async_audio_frame_supplier.h b/remoting/client/audio/async_audio_frame_supplier.h new file mode 100644 index 0000000..ce1e2f8 --- /dev/null +++ b/remoting/client/audio/async_audio_frame_supplier.h
@@ -0,0 +1,31 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef REMOTING_CLIENT_AUDIO_ASYNC_AUDIO_FRAME_SUPPLIER_H_ +#define REMOTING_CLIENT_AUDIO_ASYNC_AUDIO_FRAME_SUPPLIER_H_ + +#include <stdint> + +#include "base/callback.h" +#include "remoting/client/audio/audio_frame_supplier.h" + +namespace remoting { + +// This interface extends the AudioFrameSupplier interface adding async support +// for audio frame requests. This allows the audio frame supplier to wait until +// a full frame is buffered before returning the audio frame to the caller. +// Audio Pipeline Context: +// Stream -> Decode -> Stream Consumer -> Buffer -> [Frame Supplier] -> Play +class AsyncAudioFrameSupplier : public AudioFrameSupplier { + public: + // |samples| is the destination of the audio frame data, it should be at least + // |buffer_size|. |done| will be called when |samples| has been filled. + virtual void AsyncGetAudioFrame(uint32_t buffer_size, + void* samples, + const base::Closure& done) = 0; +}; + +} // namespace remoting + +#endif // REMOTING_CLIENT_AUDIO_ASYNC_AUDIO_FRAME_SUPPLIER_H_
diff --git a/remoting/client/audio/audio_frame_supplier.h b/remoting/client/audio/audio_frame_supplier.h new file mode 100644 index 0000000..b992479 --- /dev/null +++ b/remoting/client/audio/audio_frame_supplier.h
@@ -0,0 +1,37 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef REMOTING_CLIENT_AUDIO_AUDIO_FRAME_SUPPLIER_H_ +#define REMOTING_CLIENT_AUDIO_AUDIO_FRAME_SUPPLIER_H_ + +#include <stdint> + +#include "base/macros.h" +#include "remoting/proto/audio.pb.h" + +namespace remoting { + +// This class provides an interface to request audio frames of a given size +// and a way to ask about the currently buffered audio data. +// Audio Pipeline Context: +// Stream -> Decode -> Stream Consumer -> Buffer -> [Frame Supplier] -> Play +class AudioFrameSupplier { + public: + AudioFrameSupplier() = default; + virtual ~AudioFrameSupplier() = default; + virtual uint32_t GetAudioFrame(void* buffer, uint32_t buffer_size) = 0; + + // Methods to describe buffered data. + virtual AudioPacket::SamplingRate buffered_sampling_rate() const = 0; + virtual AudioPacket::Channels buffered_channels() const = 0; + virtual AudioPacket::BytesPerSample buffered_byes_per_sample() const = 0; + virtual uint32_t bytes_per_frame() const = 0; + + private: + DISALLOW_COPY_AND_ASSIGN(AudioFrameSupplier); +}; + +} // namespace remoting + +#endif // REMOTING_CLIENT_AUDIO_AUDIO_FRAME_SUPPLIER_H_
diff --git a/remoting/client/audio/audio_stream_consumer.h b/remoting/client/audio/audio_stream_consumer.h new file mode 100644 index 0000000..cfaaa7c1 --- /dev/null +++ b/remoting/client/audio/audio_stream_consumer.h
@@ -0,0 +1,46 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef REMOTING_CLIENT_AUDIO_AUDIO_STREAM_CONSUMER_H_ +#define REMOTING_CLIENT_AUDIO_AUDIO_STREAM_CONSUMER_H_ + +#include "base/callback.h" +#include "base/macros.h" +#include "base/memory/weak_ptr.h" +#include "remoting/proto/audio.pb.h" +#include "remoting/protocol/audio_stub.h" + +namespace remoting { + +// This is the interface that consumes the audio stream from the decoder. +// The decoder is not guaranteed to produce a constant flow of audio, this +// interface sits between the audio decoder and the |AudioFrameSupplier|. +// Audio Pipeline Context: +// Stream -> Decode -> [Stream Consumer] -> Buffer -> Frame Supplier -> Play +class AudioStreamConsumer : public protocol::AudioStub { + public: + AudioStreamConsumer() = default; + ~AudioStreamConsumer() override {} + + // Adds a audio packet from the audio stream to the audio consumer. + // What happens to the packet is up to implmentation but typically it is + // expected that it will be buffered and then given to the player when + // requested. + virtual void AddAudioPacket(std::unique_ptr<AudioPacket> packet) = 0; + // Get a weak refrence to the audio consumer. + virtual base::WeakPtr<AudioStreamConsumer> AudioConsumerAsWeakPtr() = 0; + + // AudioStub implementation. Delegates to AddAudioPacket. Used for + // integration with |protocol::AudioStub| API users but AddAudioPacket + // is preferred. + void ProcessAudioPacket(std::unique_ptr<AudioPacket> packet, + const base::Closure& done) override; + + private: + DISALLOW_COPY_AND_ASSIGN(AudioStreamConsumer); +}; + +} // namespace remoting + +#endif // REMOTING_CLIENT_AUDIO_AUDIO_STREAM_CONSUMER_H_
diff --git a/remoting/host/BUILD.gn b/remoting/host/BUILD.gn index f796127..06564d7 100644 --- a/remoting/host/BUILD.gn +++ b/remoting/host/BUILD.gn
@@ -464,6 +464,7 @@ "desktop_process_unittest.cc", "desktop_session_agent_unittest.cc", "file_proxy_wrapper_linux_unittest.cc", + "file_transfer_message_handler_unittest.cc", "gcd_rest_client_unittest.cc", "gcd_state_updater_unittest.cc", "heartbeat_sender_unittest.cc",
diff --git a/remoting/host/file_transfer_message_handler.cc b/remoting/host/file_transfer_message_handler.cc index 98ebab3..b83d020 100644 --- a/remoting/host/file_transfer_message_handler.cc +++ b/remoting/host/file_transfer_message_handler.cc
@@ -4,6 +4,10 @@ #include "remoting/host/file_transfer_message_handler.h" +#include "base/bind.h" +#include "base/memory/ptr_util.h" +#include "base/path_service.h" +#include "base/stl_util.h" #include "remoting/base/compound_buffer.h" namespace remoting { @@ -11,22 +15,109 @@ FileTransferMessageHandler::FileTransferMessageHandler( const std::string& name, std::unique_ptr<protocol::MessagePipe> pipe, - std::unique_ptr<FileProxyWrapper> file_proxy) - : protocol::NamedMessagePipeHandler(name, std::move(pipe)) {} + std::unique_ptr<FileProxyWrapper> file_proxy_wrapper) + : protocol::NamedMessagePipeHandler(name, std::move(pipe)), + file_proxy_wrapper_(std::move(file_proxy_wrapper)) { + DCHECK(file_proxy_wrapper_); +} FileTransferMessageHandler::~FileTransferMessageHandler() = default; void FileTransferMessageHandler::OnConnected() { - // TODO(jarhar): Implement open logic. + // base::Unretained is safe here because |file_proxy_wrapper_| is owned by + // this class, so the callback cannot be run after this class is destroyed. + file_proxy_wrapper_->Init(base::BindOnce( + &FileTransferMessageHandler::StatusCallback, base::Unretained(this))); } void FileTransferMessageHandler::OnIncomingMessage( - std::unique_ptr<CompoundBuffer> message) { - // TODO(jarhar): Implement message received logic. + std::unique_ptr<CompoundBuffer> buffer) { + FileProxyWrapper::State proxy_state = file_proxy_wrapper_->state(); + if (proxy_state == FileProxyWrapper::kClosing || + proxy_state == FileProxyWrapper::kClosed || + proxy_state == FileProxyWrapper::kFailed) { + return; + } + + if (request_) { + // File transfer is already in progress, just pass the buffer to + // FileProxyWrapper to be written. + SendToFileProxy(std::move(buffer)); + } else { + // A new file transfer has been started, parse the message into a request + // protobuf. + ParseNewRequest(std::move(buffer)); + } } void FileTransferMessageHandler::OnDisconnecting() { - // TODO(jarhar): Implement close logic. + FileProxyWrapper::State proxy_state = file_proxy_wrapper_->state(); + if (proxy_state != FileProxyWrapper::kClosed && + proxy_state != FileProxyWrapper::kFailed) { + // Channel was closed earlier than expected, cancel the transfer. + file_proxy_wrapper_->Cancel(); + } +} + +void FileTransferMessageHandler::StatusCallback( + FileProxyWrapper::State state, + base::Optional<protocol::FileTransferResponse_ErrorCode> error) { + protocol::FileTransferResponse response; + if (error.has_value()) { + DCHECK_EQ(state, FileProxyWrapper::kFailed); + response.set_error(error.value()); + } else { + DCHECK_EQ(state, FileProxyWrapper::kClosed); + response.set_state(protocol::FileTransferResponse_TransferState_DONE); + response.set_total_bytes_written(request_->filesize()); + } + Send(&response, base::Closure()); +} + +void FileTransferMessageHandler::SendToFileProxy( + std::unique_ptr<CompoundBuffer> buffer) { + DCHECK_EQ(file_proxy_wrapper_->state(), FileProxyWrapper::kFileCreated); + + total_bytes_written_ += buffer->total_bytes(); + file_proxy_wrapper_->WriteChunk(std::move(buffer)); + if (total_bytes_written_ >= request_->filesize()) { + file_proxy_wrapper_->Close(); + } + + if (total_bytes_written_ > request_->filesize()) { + LOG(ERROR) << "File transfer received " << total_bytes_written_ + << " bytes, but request said there would only be " + << request_->filesize() << " bytes."; + } +} + +void FileTransferMessageHandler::ParseNewRequest( + std::unique_ptr<CompoundBuffer> buffer) { + std::string message; + message.resize(buffer->total_bytes()); + buffer->CopyTo(base::string_as_array(&message), message.size()); + + request_ = base::MakeUnique<protocol::FileTransferRequest>(); + if (!request_->ParseFromString(message)) { + CancelAndSendError("Failed to parse request protobuf"); + return; + } + + base::FilePath target_directory; + if (!PathService::Get(base::DIR_USER_DESKTOP, &target_directory)) { + CancelAndSendError("Failed to get DIR_USER_DESKTOP from PathService::Get"); + return; + } + + file_proxy_wrapper_->CreateFile(target_directory, request_->filename()); +} + +void FileTransferMessageHandler::CancelAndSendError(const std::string& error) { + LOG(ERROR) << error; + file_proxy_wrapper_->Cancel(); + protocol::FileTransferResponse response; + response.set_error(protocol::FileTransferResponse_ErrorCode_UNEXPECTED_ERROR); + Send(&response, base::Closure()); } } // namespace remoting
diff --git a/remoting/host/file_transfer_message_handler.h b/remoting/host/file_transfer_message_handler.h index 0a0e47d..543be54 100644 --- a/remoting/host/file_transfer_message_handler.h +++ b/remoting/host/file_transfer_message_handler.h
@@ -5,7 +5,12 @@ #ifndef REMOTING_HOST_FILE_TRANSFER_MESSAGE_HANDLER_H_ #define REMOTING_HOST_FILE_TRANSFER_MESSAGE_HANDLER_H_ +#include <cstdint> +#include <memory> +#include <string> + #include "remoting/host/file_proxy_wrapper.h" +#include "remoting/proto/file_transfer.pb.h" #include "remoting/protocol/named_message_pipe_handler.h" namespace remoting { @@ -23,6 +28,18 @@ void OnConnected() override; void OnIncomingMessage(std::unique_ptr<CompoundBuffer> message) override; void OnDisconnecting() override; + + private: + void StatusCallback( + FileProxyWrapper::State state, + base::Optional<protocol::FileTransferResponse_ErrorCode> error); + void SendToFileProxy(std::unique_ptr<CompoundBuffer> buffer); + void ParseNewRequest(std::unique_ptr<CompoundBuffer> buffer); + void CancelAndSendError(const std::string& error); + + std::unique_ptr<FileProxyWrapper> file_proxy_wrapper_; + std::unique_ptr<protocol::FileTransferRequest> request_; + uint64_t total_bytes_written_ = 0; }; } // namespace remoting
diff --git a/remoting/host/file_transfer_message_handler_unittest.cc b/remoting/host/file_transfer_message_handler_unittest.cc new file mode 100644 index 0000000..be9aa5581 --- /dev/null +++ b/remoting/host/file_transfer_message_handler_unittest.cc
@@ -0,0 +1,233 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "remoting/host/file_transfer_message_handler.h" + +#include <memory> +#include <queue> +#include <string> +#include <utility> +#include <vector> + +#include "base/bind.h" +#include "base/memory/ptr_util.h" +#include "net/base/io_buffer.h" +#include "remoting/base/compound_buffer.h" +#include "remoting/host/file_proxy_wrapper.h" +#include "remoting/protocol/fake_message_pipe.h" +#include "remoting/protocol/fake_message_pipe_wrapper.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace { + +constexpr char kTestDatachannelName[] = "filetransfer-test"; +constexpr char kTestFilename[] = "test-file.txt"; + +std::unique_ptr<remoting::CompoundBuffer> ToBuffer(const std::string& data) { + std::unique_ptr<remoting::CompoundBuffer> buffer = + base::MakeUnique<remoting::CompoundBuffer>(); + buffer->Append(new net::WrappedIOBuffer(data.data()), data.size()); + return buffer; +} + +} // namespace + +namespace remoting { + +class FakeFileProxyWrapper : public FileProxyWrapper { + public: + FakeFileProxyWrapper(); + ~FakeFileProxyWrapper() override; + + // FileProxyWrapper implementation. + void Init(StatusCallback status_callback) override; + void CreateFile(const base::FilePath& directory, + const std::string& filename) override; + void WriteChunk(std::unique_ptr<CompoundBuffer> buffer) override; + void Close() override; + void Cancel() override; + State state() override; + + void RunStatusCallback( + base::Optional<protocol::FileTransferResponse_ErrorCode> error); + const std::string& filename(); + std::queue<std::vector<char>> chunks(); + + private: + State state_ = kUninitialized; + StatusCallback status_callback_; + std::string filename_; + std::queue<std::vector<char>> chunks_; +}; + +class FileTransferMessageHandlerTest : public testing::Test { + public: + FileTransferMessageHandlerTest(); + ~FileTransferMessageHandlerTest() override; + + // testing::Test implementation. + void SetUp() override; + void TearDown() override; + + protected: + const std::string kTestDataOne = "this is the first test string"; + const std::string kTestDataTwo = "this is the second test string"; + + std::unique_ptr<protocol::FakeMessagePipe> fake_pipe_; + protocol::FileTransferRequest fake_request_; + std::string fake_request_string_; +}; + +FakeFileProxyWrapper::FakeFileProxyWrapper() = default; +FakeFileProxyWrapper::~FakeFileProxyWrapper() = default; + +void FakeFileProxyWrapper::Init(StatusCallback status_callback) { + ASSERT_EQ(state_, kUninitialized); + state_ = kInitialized; + + status_callback_ = std::move(status_callback); +} + +void FakeFileProxyWrapper::CreateFile(const base::FilePath& directory, + const std::string& filename) { + ASSERT_EQ(state_, kInitialized); + state_ = kFileCreated; + + filename_ = filename; +} + +void FakeFileProxyWrapper::WriteChunk(std::unique_ptr<CompoundBuffer> buffer) { + ASSERT_EQ(state_, kFileCreated); + + std::vector<char> data; + data.resize(buffer->total_bytes()); + buffer->CopyTo(data.data(), data.size()); + chunks_.push(data); +} + +void FakeFileProxyWrapper::Close() { + ASSERT_EQ(state_, kFileCreated); + state_ = kClosed; +} + +void FakeFileProxyWrapper::Cancel() { + state_ = kFailed; +} + +FileProxyWrapper::State FakeFileProxyWrapper::state() { + return state_; +} + +void FakeFileProxyWrapper::RunStatusCallback( + base::Optional<protocol::FileTransferResponse_ErrorCode> error) { + std::move(status_callback_).Run(state_, error); +} + +const std::string& FakeFileProxyWrapper::filename() { + return filename_; +} + +std::queue<std::vector<char>> FakeFileProxyWrapper::chunks() { + return chunks_; +} + +FileTransferMessageHandlerTest::FileTransferMessageHandlerTest() = default; +FileTransferMessageHandlerTest::~FileTransferMessageHandlerTest() = default; + +void FileTransferMessageHandlerTest::SetUp() { + fake_pipe_ = + base::WrapUnique(new protocol::FakeMessagePipe(false /* asynchronous */)); + + fake_request_ = protocol::FileTransferRequest(); + fake_request_.set_filename(kTestFilename); + fake_request_.set_filesize(kTestDataOne.size() + kTestDataTwo.size()); + fake_request_.SerializeToString(&fake_request_string_); +} + +void FileTransferMessageHandlerTest::TearDown() {} + +// Verify that the message handler creates, writes to, and closes a +// FileProxyWrapper without errors when given valid input. +TEST_F(FileTransferMessageHandlerTest, WriteTwoChunks) { + std::unique_ptr<FakeFileProxyWrapper> file_proxy_wrapper = + base::MakeUnique<FakeFileProxyWrapper>(); + // |file_proxy_wrapper_ptr| is valid until fake_pipe_->ClosePipe() is called. + FakeFileProxyWrapper* file_proxy_wrapper_ptr = file_proxy_wrapper.get(); + + // This will delete itself when fake_pipe_->ClosePipe() is called. + new FileTransferMessageHandler(kTestDatachannelName, fake_pipe_->Wrap(), + std::move(file_proxy_wrapper)); + + fake_pipe_->OpenPipe(); + fake_pipe_->Receive(ToBuffer(fake_request_string_)); + fake_pipe_->Receive(ToBuffer(kTestDataOne)); + fake_pipe_->Receive(ToBuffer(kTestDataTwo)); + + file_proxy_wrapper_ptr->RunStatusCallback( + base::Optional<protocol::FileTransferResponse_ErrorCode>()); + + std::queue<std::vector<char>> actual_chunks = + file_proxy_wrapper_ptr->chunks(); + + fake_pipe_->ClosePipe(); + file_proxy_wrapper_ptr = nullptr; + + std::queue<std::vector<char>> expected_chunks; + expected_chunks.push( + std::vector<char>(kTestDataOne.begin(), kTestDataOne.end())); + expected_chunks.push( + std::vector<char>(kTestDataTwo.begin(), kTestDataTwo.end())); + ASSERT_EQ(expected_chunks, actual_chunks); + + const std::queue<std::string>& actual_sent_messages = + fake_pipe_->sent_messages(); + protocol::FileTransferResponse expected_response; + expected_response.set_state( + protocol::FileTransferResponse_TransferState_DONE); + expected_response.set_total_bytes_written(fake_request_.filesize()); + std::string expected_response_string; + expected_response.SerializeToString(&expected_response_string); + std::queue<std::string> expected_sent_messages; + expected_sent_messages.push(expected_response_string); + ASSERT_EQ(expected_sent_messages, actual_sent_messages); +} + +// Verifies that the message handler sends an error protobuf when +// FileProxyWrapper returns an error. +TEST_F(FileTransferMessageHandlerTest, FileProxyError) { + std::unique_ptr<FakeFileProxyWrapper> file_proxy_wrapper = + base::MakeUnique<FakeFileProxyWrapper>(); + // |file_proxy_wrapper_ptr| is valid until fake_pipe_->ClosePipe() is called. + FakeFileProxyWrapper* file_proxy_wrapper_ptr = file_proxy_wrapper.get(); + + protocol::FileTransferResponse_ErrorCode fake_error = + protocol::FileTransferResponse_ErrorCode_FILE_IO_ERROR; + + // This will delete itself when fake_pipe_->ClosePipe() is called. + new FileTransferMessageHandler(kTestDatachannelName, fake_pipe_->Wrap(), + std::move(file_proxy_wrapper)); + + fake_pipe_->OpenPipe(); + fake_pipe_->Receive(ToBuffer(fake_request_string_)); + fake_pipe_->Receive(ToBuffer(kTestDataOne)); + + file_proxy_wrapper_ptr->Cancel(); + file_proxy_wrapper_ptr->RunStatusCallback( + base::Optional<protocol::FileTransferResponse_ErrorCode>(fake_error)); + + fake_pipe_->ClosePipe(); + file_proxy_wrapper_ptr = nullptr; + + const std::queue<std::string>& actual_sent_messages = + fake_pipe_->sent_messages(); + protocol::FileTransferResponse expected_response; + expected_response.set_error(fake_error); + std::string expected_response_string; + expected_response.SerializeToString(&expected_response_string); + std::queue<std::string> expected_sent_messages; + expected_sent_messages.push(expected_response_string); + ASSERT_EQ(expected_sent_messages, actual_sent_messages); +} + +} // namespace remoting
diff --git a/remoting/protocol/fake_message_pipe.cc b/remoting/protocol/fake_message_pipe.cc index 3829786..421b7f56 100644 --- a/remoting/protocol/fake_message_pipe.cc +++ b/remoting/protocol/fake_message_pipe.cc
@@ -11,6 +11,7 @@ #include "remoting/base/compound_buffer.h" #include "remoting/protocol/fake_message_pipe_wrapper.h" #include "testing/gtest/include/gtest/gtest.h" +#include "third_party/protobuf/src/google/protobuf/message_lite.h" namespace remoting { namespace protocol { @@ -92,6 +93,11 @@ google::protobuf::MessageLite* message, const base::Closure& done) { ASSERT_TRUE(pipe_opened_); + + std::string message_string; + message->SerializeToString(&message_string); + sent_messages_.push(message_string); + if (done) { done.Run(); }
diff --git a/remoting/protocol/fake_message_pipe.h b/remoting/protocol/fake_message_pipe.h index 6be457b..89fbb915 100644 --- a/remoting/protocol/fake_message_pipe.h +++ b/remoting/protocol/fake_message_pipe.h
@@ -6,6 +6,8 @@ #define REMOTING_PROTOCOL_FAKE_MESSAGE_PIPE_H_ #include <memory> +#include <queue> +#include <string> #include "remoting/protocol/message_pipe.h" @@ -48,6 +50,9 @@ // Simulates the operation to close the pipe. void ClosePipe(); + // Returns all messages sent using Send(). + const std::queue<std::string>& sent_messages() { return sent_messages_; } + private: void SendImpl(google::protobuf::MessageLite* message, const base::Closure& done); @@ -58,6 +63,7 @@ const bool asynchronous_; bool pipe_opened_ = false; EventHandler* event_handler_ = nullptr; + std::queue<std::string> sent_messages_; }; } // namespace protocol
diff --git a/remoting/protocol/http_ice_config_request_unittest.cc b/remoting/protocol/http_ice_config_request_unittest.cc index 27f56ac..76bbe18d 100644 --- a/remoting/protocol/http_ice_config_request_unittest.cc +++ b/remoting/protocol/http_ice_config_request_unittest.cc
@@ -8,6 +8,7 @@ #include "base/logging.h" #include "base/memory/ptr_util.h" #include "base/message_loop/message_loop.h" +#include "base/run_loop.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" #include "remoting/base/fake_oauth_token_getter.h" #include "remoting/base/url_request.h"
diff --git a/remoting/resources/remoting_strings.grd b/remoting/resources/remoting_strings.grd index 6217d0f8..2a6f3c77 100644 --- a/remoting/resources/remoting_strings.grd +++ b/remoting/resources/remoting_strings.grd
@@ -668,10 +668,7 @@ For information about privacy, please see the Google Privacy Policy (http://goo.gl/SyrVzj) and the Chrome Privacy Policy (http://goo.gl/0uXE5d). </message> <message name="IDS_PLAY_STORE_CHANGES" desc="List of what's changed in this release of Chrome Remote Desktop for Android. [CHAR-LIMIT=500] [NAME=play_store_changes]"> -• Added Multi-Window support for Android Nougat. -• Improved desktop image quality, responsiveness, and battery consumption. -• Improved responsiveness of click-drag operations. -• Improved several UI animation effects. +• Added support for Android 8.0 Oreo. </message> <!-- iOS App Store metadata text. Won't be bundled into the app. -->
diff --git a/remoting/resources/remoting_strings_en-GB.xtb b/remoting/resources/remoting_strings_en-GB.xtb index 62d6740fe6..8ee04307 100644 --- a/remoting/resources/remoting_strings_en-GB.xtb +++ b/remoting/resources/remoting_strings_en-GB.xtb
@@ -26,6 +26,7 @@ <translation id="1643640058022401035">Leaving this page will end your Chromoting session.</translation> <translation id="1654128982815600832">Enabling remote connections for this computer…</translation> <translation id="170207782578677537">Failed to register this computer.</translation> +<translation id="1727412735341161734">Chrome Remote Desktop</translation> <translation id="174018511426417793">You have no computers registered. To enable remote connections to a computer, install Chrome Remote Desktop there and click “<ph name="BUTTON_NAME" />”.</translation> <translation id="1742469581923031760">Connecting…</translation> <translation id="1770394049404108959">I can't open the application.</translation> @@ -98,8 +99,14 @@ <translation id="3150823315463303127">Host failed to read the policy.</translation> <translation id="3194245623920924351">Chrome Remote Desktop</translation> <translation id="3197730452537982411">Remote Desktop</translation> +<translation id="321944585103975186">• Redesigned user interface. +• Improved performance, responsiveness and reliability. +• Support for playing audio from Windows or Linux computers. +• Enhanced keyboard support.</translation> +<translation id="324272851072175193">Email these instructions</translation> <translation id="3258789396564295715">You may securely access this computer using Chrome Remote Desktop.</translation> <translation id="3286521253923406898">Chromoting Host Controller</translation> +<translation id="3305934114213025800"><ph name="PRODUCT_NAME" /> wants to make changes.</translation> <translation id="332624996707057614">Edit computer name</translation> <translation id="3339299787263251426">Access your computer securely over the Internet</translation> <translation id="3360306038446926262">Windows</translation> @@ -108,6 +115,12 @@ <translation id="3385242214819933234">Invalid host owner.</translation> <translation id="3403830762023901068">Policy settings do not permit sharing this computer as a Chromoting host. Contact your system administrator for assistance.</translation> <translation id="3423542133075182604">Security Key Remoting Process</translation> +<translation id="3426467947138417795">Chrome Remote Desktop +Remote Desktop +Remote PC +Remote Computer +Remote Access +Remote Support</translation> <translation id="3581045510967524389">Could not connect to the network. Please check that your device is on-line.</translation> <translation id="3596628256176442606">This service enables incoming connections from Chromoting clients.</translation> <translation id="3606997049964069799">You are not signed in to Chromium. Please sign in and try again.</translation> @@ -116,6 +129,13 @@ <translation id="3695446226812920698">Find out how</translation> <translation id="3718805989288361841">There is an error with the policy settings for Chrome Remote Desktop. Contact your system administrator for assistance.</translation> <translation id="3776024066357219166">Your Chrome Remote Desktop session has ended.</translation> +<translation id="3788372335219293587">Securely access your computer from your iOS device. Its fast, simple and free. + +• On the computer that you want to access remotely, find the Chrome Remote Desktop app on the Chrome Web Store – https://chrome.google.com/remotedesktop +• Install Chrome Remote Desktop software and follow the instructions to complete setup. +• On your iOS device, open the app and tap on any of your online computers to connect. + +For information about privacy, please see the Google Privacy Policy (http://goo.gl/SyrVzj).</translation> <translation id="3870154837782082782">Google Inc.</translation> <translation id="3884839335308961732">Please confirm your account and PIN below to allow access by Chrome Remote Desktop.</translation> <translation id="3897092660631435901">Menu</translation> @@ -129,6 +149,7 @@ <translation id="405887016757208221">The remote computer has failed to initialise the session. If problem persists please try to configure the host again.</translation> <translation id="4068946408131579958">All connections</translation> <translation id="409800995205263688">NOTE: Policy settings permit connections only between computers within your network.</translation> +<translation id="4145029455188493639">Signed in as <ph name="EMAIL_ADDRESS" />.</translation> <translation id="4155497795971509630">Some required components are missing. Please make sure that you have installed the latest version of the software and try again.</translation> <translation id="4156740505453712750">To protect access to this computer, please choose a PIN of <ph name="BOLD_START" />at least six digits<ph name="BOLD_END" />. This PIN will be required when connecting from another location.</translation> <translation id="4176825807642096119">Access code</translation> @@ -193,6 +214,7 @@ <translation id="5625493749705183369">Access other computers or allow another user to access your computer securely over the Internet.</translation> <translation id="5702987232842159181">Connected:</translation> <translation id="5708869785009007625">Your desktop is currently shared with <ph name="USER" />.</translation> +<translation id="5750083143895808682">Signed in as <ph name="EMAIL_ADDRESS" />.</translation> <translation id="5773590752998175013">Pairing date</translation> <translation id="579702532610384533">Reconnect</translation> <translation id="5810269635982033450">Screen acts like a trackpad</translation> @@ -248,9 +270,13 @@ <translation id="701976023053394610">Remote Assistance</translation> <translation id="7038683108611689168">Help us improve Chromoting by allowing us to collect usage statistics and crash reports.</translation> <translation id="7067321367069083429">Screen acts like a touch screen</translation> +<translation id="7116737094673640201">Welcome to Chrome Remote Desktop</translation> <translation id="7144878232160441200">Retry</translation> <translation id="7149517134817561223">Application to issue commands to Chrome remote desktop host.</translation> <translation id="7215059001581613786">Please enter a PIN consisting of six or more digits.</translation> +<translation id="7237767047212540055">On the computer that you want to access remotely, open Chrome and visit <ph name="INSTALLATION_LINK" /> +Install Chrome Remote Desktop software and follow the instructions to complete setup +After setup is complete, you'll be able to access the computer from this page by entering the PIN or access code</translation> <translation id="7312846573060934304">Host is offline.</translation> <translation id="7319983568955948908">Stop Sharing</translation> <translation id="7401733114166276557">Chrome Remote Desktop</translation>
diff --git a/remoting/resources/remoting_strings_ja.xtb b/remoting/resources/remoting_strings_ja.xtb index 0aefe475..76d41d04 100644 --- a/remoting/resources/remoting_strings_ja.xtb +++ b/remoting/resources/remoting_strings_ja.xtb
@@ -79,6 +79,7 @@ <translation id="2676780859508944670">処理しています...</translation> <translation id="2699970397166997657">Chromoting</translation> <translation id="2747641796667576127">通常、ソフトウェアの更新は自動的に行われますが、まれに失敗することがあります。ソフトウェアの更新にかかる時間は数分以内です。パソコンにリモート接続している場合も更新は可能です。</translation> +<translation id="2758123043070977469">認証中に問題が発生しました。ログインし直してください。</translation> <translation id="2803375539583399270">PIN を入力</translation> <translation id="2841013758207633010">時間</translation> <translation id="2851754573186462851">Chromium App Streaming</translation> @@ -194,6 +195,7 @@ <translation id="5708869785009007625">デスクトップは現在 <ph name="USER" /> と共有されています。</translation> <translation id="5773590752998175013">ペア設定された日付</translation> <translation id="579702532610384533">再接続</translation> +<translation id="5810269635982033450">画面がトラックパッドとして機能します</translation> <translation id="5841343754884244200">表示オプション</translation> <translation id="5843054235973879827">この操作が安全な理由</translation> <translation id="5859141382851488196">新しいウィンドウ...</translation> @@ -245,6 +247,7 @@ <translation id="7019153418965365059">不明なホストエラー: <ph name="HOST_OFFLINE_REASON" />。</translation> <translation id="701976023053394610">リモート サポート</translation> <translation id="7038683108611689168">Chromoting の改善のため、使用統計情報とクラッシュ レポートの収集に協力する</translation> +<translation id="7067321367069083429">画面がタッチ スクリーンとして機能します</translation> <translation id="7144878232160441200">再読み込み</translation> <translation id="7149517134817561223">Chrome リモート デスクトップのホストにコマンドを発行するアプリケーション。</translation> <translation id="7215059001581613786">PIN は 6 桁以上で入力してください。</translation>
diff --git a/remoting/resources/remoting_strings_ko.xtb b/remoting/resources/remoting_strings_ko.xtb index 1d53110..607d9b0 100644 --- a/remoting/resources/remoting_strings_ko.xtb +++ b/remoting/resources/remoting_strings_ko.xtb
@@ -195,7 +195,7 @@ <translation id="5708869785009007625">내 컴퓨터를 <ph name="USER" />님과 공유하고 있습니다.</translation> <translation id="5773590752998175013">페어링 날짜</translation> <translation id="579702532610384533">다시 연결</translation> -<translation id="5810269635982033450">화면이 트랙패드와 같이 작동합니다</translation> +<translation id="5810269635982033450">화면이 트랙패드처럼 작동합니다</translation> <translation id="5841343754884244200">표시 옵션</translation> <translation id="5843054235973879827">안전한 이유</translation> <translation id="5859141382851488196">새 창…</translation> @@ -247,7 +247,7 @@ <translation id="7019153418965365059">알 수 없는 호스트 오류입니다. <ph name="HOST_OFFLINE_REASON" />.</translation> <translation id="701976023053394610">원격 지원</translation> <translation id="7038683108611689168">사용 통계 및 비정상 종료 보고서 수집을 허용하여 Chromoting 개선에 참여하겠습니다.</translation> -<translation id="7067321367069083429">화면이 터치스크린과 같이 작동합니다</translation> +<translation id="7067321367069083429">화면이 터치스크린처럼 작동합니다</translation> <translation id="7144878232160441200">다시 시도</translation> <translation id="7149517134817561223">애플리케이션에서 Chrome 원격 데스크톱 호스트로 명령을 전송합니다.</translation> <translation id="7215059001581613786">6자리 이상의 숫자로 구성된 PIN을 입력하세요.</translation>
diff --git a/remoting/resources/remoting_strings_no.xtb b/remoting/resources/remoting_strings_no.xtb index 0cf7a8f..4a78e89 100644 --- a/remoting/resources/remoting_strings_no.xtb +++ b/remoting/resources/remoting_strings_no.xtb
@@ -79,6 +79,7 @@ <translation id="2676780859508944670">Behandler …</translation> <translation id="2699970397166997657">Chromoting</translation> <translation id="2747641796667576127">Programvareoppdateringer skjer vanligvis automatisk, men kan i noen sjeldne tilfeller mislykkes. Oppdateringen av programvare bør ikke ta mer enn noen få minutter og kan gjøres via ekstern tilgang.</translation> +<translation id="2758123043070977469">Det oppsto en feil under autentiseringen. Logg på igjen.</translation> <translation id="2803375539583399270">Skriv inn PIN-koden</translation> <translation id="2841013758207633010">Klokkeslett</translation> <translation id="2851754573186462851">Chromium-appstrømming</translation> @@ -194,6 +195,7 @@ <translation id="5708869785009007625">Skrivebordet ditt deles for øyeblikket med <ph name="USER" />.</translation> <translation id="5773590752998175013">Tilknytningsdato</translation> <translation id="579702532610384533">Koble til på nytt</translation> +<translation id="5810269635982033450">Skjermen fungerer som en styreflate</translation> <translation id="5841343754884244200">Visningsalternativer</translation> <translation id="5843054235973879827">Hvorfor er dette trygt?</translation> <translation id="5859141382851488196">Nytt vindu</translation> @@ -245,6 +247,7 @@ <translation id="7019153418965365059">Ukjent vertsfeil: <ph name="HOST_OFFLINE_REASON" />.</translation> <translation id="701976023053394610">Fjernhjelp</translation> <translation id="7038683108611689168">Hjelp oss med å gjøre Chromoting bedre ved å samle inn bruksstatistikk og programstopprapporter.</translation> +<translation id="7067321367069083429">Skjermen fungerer som en berøringsskjerm</translation> <translation id="7144878232160441200">Prøv på nytt</translation> <translation id="7149517134817561223">Program som brukes til å sende kommandoer til verten for Chrome Eksternt skriverbord.</translation> <translation id="7215059001581613786">Skriv inn en PIN-kode på seks sifre eller fler.</translation>
diff --git a/services/preferences/pref_service_factory_unittest.cc b/services/preferences/pref_service_factory_unittest.cc index fd09ddb..d144cd28 100644 --- a/services/preferences/pref_service_factory_unittest.cc +++ b/services/preferences/pref_service_factory_unittest.cc
@@ -7,6 +7,7 @@ #include "base/barrier_closure.h" #include "base/files/scoped_temp_dir.h" #include "base/memory/ptr_util.h" +#include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" #include "base/test/sequenced_worker_pool_owner.h" #include "components/prefs/in_memory_pref_store.h"
diff --git a/services/resource_coordinator/tracing/coordinator_unittest.cc b/services/resource_coordinator/tracing/coordinator_unittest.cc index d295e4ef..cd48696 100644 --- a/services/resource_coordinator/tracing/coordinator_unittest.cc +++ b/services/resource_coordinator/tracing/coordinator_unittest.cc
@@ -11,6 +11,7 @@ #include <utility> #include <vector> +#include "base/run_loop.h" #include "base/strings/string_split.h" #include "base/test/scoped_task_environment.h" #include "mojo/common/data_pipe_drainer.h"
diff --git a/services/ui/public/cpp/input_devices/input_device_controller.cc b/services/ui/public/cpp/input_devices/input_device_controller.cc index cea7f9c..88ea547 100644 --- a/services/ui/public/cpp/input_devices/input_device_controller.cc +++ b/services/ui/public/cpp/input_devices/input_device_controller.cc
@@ -96,6 +96,10 @@ GetInputController()->SetPrimaryButtonRight(right); } +void InputDeviceController::SetMouseReverseScroll(bool enabled) { + GetInputController()->SetMouseReverseScroll(enabled); +} + void InputDeviceController::GetTouchDeviceStatus( GetTouchDeviceStatusCallback callback) { GetInputController()->GetTouchDeviceStatus(std::move(callback));
diff --git a/services/ui/public/cpp/input_devices/input_device_controller.h b/services/ui/public/cpp/input_devices/input_device_controller.h index e812f4d..bbeeaab 100644 --- a/services/ui/public/cpp/input_devices/input_device_controller.h +++ b/services/ui/public/cpp/input_devices/input_device_controller.h
@@ -43,6 +43,7 @@ void SetNaturalScroll(bool enabled) override; void SetMouseSensitivity(int32_t value) override; void SetPrimaryButtonRight(bool right) override; + void SetMouseReverseScroll(bool enabled) override; void GetTouchDeviceStatus(GetTouchDeviceStatusCallback callback) override; void GetTouchEventLog(const base::FilePath& out_dir, GetTouchEventLogCallback callback) override;
diff --git a/services/ui/public/cpp/input_devices/input_device_controller_client.cc b/services/ui/public/cpp/input_devices/input_device_controller_client.cc index 2ac09d4..2715bae 100644 --- a/services/ui/public/cpp/input_devices/input_device_controller_client.cc +++ b/services/ui/public/cpp/input_devices/input_device_controller_client.cc
@@ -96,6 +96,10 @@ input_device_controller_->SetPrimaryButtonRight(right); } +void InputDeviceControllerClient::SetMouseReverseScroll(bool enabled) { + input_device_controller_->SetMouseReverseScroll(enabled); +} + void InputDeviceControllerClient::GetTouchDeviceStatus( GetTouchDeviceStatusCallback callback) { input_device_controller_->GetTouchDeviceStatus(std::move(callback));
diff --git a/services/ui/public/cpp/input_devices/input_device_controller_client.h b/services/ui/public/cpp/input_devices/input_device_controller_client.h index 8e710e96..eac33ad 100644 --- a/services/ui/public/cpp/input_devices/input_device_controller_client.h +++ b/services/ui/public/cpp/input_devices/input_device_controller_client.h
@@ -56,6 +56,7 @@ void SetNaturalScroll(bool enabled); void SetMouseSensitivity(int value); void SetPrimaryButtonRight(bool right); + void SetMouseReverseScroll(bool enabled); using GetTouchDeviceStatusCallback = base::OnceCallback<void(const std::string&)>;
diff --git a/services/ui/public/cpp/tests/gpu_unittest.cc b/services/ui/public/cpp/tests/gpu_unittest.cc index 3071d085..3924fee4f 100644 --- a/services/ui/public/cpp/tests/gpu_unittest.cc +++ b/services/ui/public/cpp/tests/gpu_unittest.cc
@@ -5,6 +5,7 @@ #include "services/ui/public/cpp/gpu/gpu.h" #include "base/callback_helpers.h" +#include "base/run_loop.h" #include "base/test/scoped_task_environment.h" #include "gpu/config/gpu_info.h" #include "mojo/public/cpp/bindings/binding_set.h"
diff --git a/services/ui/public/interfaces/input_devices/input_device_controller.mojom b/services/ui/public/interfaces/input_devices/input_device_controller.mojom index 121b330..ab7de1f 100644 --- a/services/ui/public/interfaces/input_devices/input_device_controller.mojom +++ b/services/ui/public/interfaces/input_devices/input_device_controller.mojom
@@ -45,6 +45,7 @@ // Mouse settings. SetMouseSensitivity(int32 value); SetPrimaryButtonRight(bool right); + SetMouseReverseScroll(bool enabled); // Touchscreen log settings. GetTouchDeviceStatus() => (string status);
diff --git a/services/ui/public/interfaces/window_manager.mojom b/services/ui/public/interfaces/window_manager.mojom index 236c705..4f4f7f26 100644 --- a/services/ui/public/interfaces/window_manager.mojom +++ b/services/ui/public/interfaces/window_manager.mojom
@@ -157,7 +157,7 @@ // End long lived properties. ------------------------------------------------ // Called immediately when the WindowManager is obtained. - OnConnect(uint16 client_id); + OnConnect(); // Called when a new display is added. |root| gives the root window specific // to this WindowManager for |display|. |local_surface_id| identifies the ID
diff --git a/services/ui/public/interfaces/window_tree.mojom b/services/ui/public/interfaces/window_tree.mojom index 0e81a13b..7de3fa7 100644 --- a/services/ui/public/interfaces/window_tree.mojom +++ b/services/ui/public/interfaces/window_tree.mojom
@@ -23,7 +23,10 @@ import "ui/platform_window/mojo/text_input_state.mojom"; // Windows are identified by a uint32. The upper 16 bits are the connection id, -// and the lower 16 the id assigned by the client. +// and the lower 16 the id assigned by the client. If it's a window created by +// the client this WindowTree is associated with, the upper 16 bits are 0; +// otherwise the upper 16 bits are the id of the WindowTree associated with the +// other client that created this window. // // The root window is identified with a connection id of 0, and value of 1. // @@ -339,8 +342,7 @@ // drawn, see OnParentDrawnStateChanged() for details. |display_id| identifies // the display this root window is on. If the embedded window has a size, // |local_surface_id| identifies the ID to use to submit CompositorFrames. - OnEmbed(uint16 connection_id, - WindowData root, + OnEmbed(WindowData root, WindowTree? tree, int64 display_id, uint32 focused_window,
diff --git a/services/ui/ws/ids.h b/services/ui/ws/ids.h index b643833..f8910f88f 100644 --- a/services/ui/ws/ids.h +++ b/services/ui/ws/ids.h
@@ -64,6 +64,8 @@ // Used for ids assigned by the client. struct ClientWindowId { explicit ClientWindowId(Id id) : id(id) {} + ClientWindowId(ClientSpecificId client_id, ClientSpecificId window_id) + : ClientWindowId((client_id << 16) | window_id) {} ClientWindowId() : id(0u) {} bool operator==(const ClientWindowId& other) const { return other.id == id; } @@ -80,9 +82,6 @@ inline WindowId WindowIdFromTransportId(Id id) { return WindowId(HiWord(id), LoWord(id)); } -inline Id WindowIdToTransportId(const WindowId& id) { - return (id.client_id << 16) | id.window_id; -} // Returns a WindowId that is reserved to indicate no window. That is, no window // will ever be created with this id. @@ -101,7 +100,7 @@ struct WindowIdHash { size_t operator()(const WindowId& id) const { - return WindowIdToTransportId(id); + return (id.client_id << 16) | id.window_id; } };
diff --git a/services/ui/ws/platform_display_default_unittest.cc b/services/ui/ws/platform_display_default_unittest.cc index 57c0fb7..37497811 100644 --- a/services/ui/ws/platform_display_default_unittest.cc +++ b/services/ui/ws/platform_display_default_unittest.cc
@@ -4,6 +4,7 @@ #include "services/ui/ws/platform_display_default.h" +#include "base/message_loop/message_loop.h" #include "base/time/time.h" #include "services/ui/common/image_cursors_set.h" #include "services/ui/ws/threaded_image_cursors.h"
diff --git a/services/ui/ws/server_window.cc b/services/ui/ws/server_window.cc index c00f068..f8e6006 100644 --- a/services/ui/ws/server_window.cc +++ b/services/ui/ws/server_window.cc
@@ -29,7 +29,7 @@ const Properties& properties) : delegate_(delegate), id_(id), - frame_sink_id_(WindowIdToTransportId(id), 0), + frame_sink_id_((id_.client_id << 16) | id_.window_id, 0), parent_(nullptr), stacking_target_(nullptr), transient_parent_(nullptr),
diff --git a/services/ui/ws/test_change_tracker.cc b/services/ui/ws/test_change_tracker.cc index 626c1bb..b267cc09 100644 --- a/services/ui/ws/test_change_tracker.cc +++ b/services/ui/ws/test_change_tracker.cc
@@ -223,7 +223,6 @@ Change::Change() : type(CHANGE_TYPE_EMBED), - client_id(0), window_id(0), window_id2(0), window_id3(0), @@ -243,12 +242,9 @@ TestChangeTracker::~TestChangeTracker() {} -void TestChangeTracker::OnEmbed(ClientSpecificId client_id, - mojom::WindowDataPtr root, - bool drawn) { +void TestChangeTracker::OnEmbed(mojom::WindowDataPtr root, bool drawn) { Change change; change.type = CHANGE_TYPE_EMBED; - change.client_id = client_id; change.bool_value = drawn; change.windows.push_back(WindowDataToTestWindow(root)); AddChange(change);
diff --git a/services/ui/ws/test_change_tracker.h b/services/ui/ws/test_change_tracker.h index 4b64275..c295167 100644 --- a/services/ui/ws/test_change_tracker.h +++ b/services/ui/ws/test_change_tracker.h
@@ -73,7 +73,6 @@ ~Change(); ChangeType type; - ClientSpecificId client_id; std::vector<TestWindow> windows; Id window_id; Id window_id2; @@ -144,9 +143,7 @@ // Each of these functions generate a Change. There is one per // WindowTreeClient function. - void OnEmbed(ClientSpecificId client_id, - mojom::WindowDataPtr root, - bool drawn); + void OnEmbed(mojom::WindowDataPtr root, bool drawn); void OnEmbeddedAppDisconnected(Id window_id); void OnUnembed(Id window_id); void OnCaptureChanged(Id new_capture_window_id, Id old_capture_window_id);
diff --git a/services/ui/ws/test_utils.cc b/services/ui/ws/test_utils.cc index f6c7835..ee559545 100644 --- a/services/ui/ws/test_utils.cc +++ b/services/ui/ws/test_utils.cc
@@ -34,8 +34,7 @@ ClientWindowId client_id; for (ClientSpecificId id = 1;; ++id) { // Used the id of the client in the upper bits to simplify things. - const ClientWindowId client_id = - ClientWindowId(WindowIdToTransportId(WindowId(tree->id(), id))); + const ClientWindowId client_id = ClientWindowId(tree->id(), id); if (!tree->GetWindowByClientId(client_id)) return client_id; } @@ -208,7 +207,7 @@ TestWindowManager::~TestWindowManager() {} -void TestWindowManager::OnConnect(uint16_t client_id) { +void TestWindowManager::OnConnect() { connect_count_++; } @@ -293,7 +292,6 @@ } void TestWindowTreeClient::OnEmbed( - uint16_t client_id, mojom::WindowDataPtr root, ui::mojom::WindowTreePtr tree, int64_t display_id, @@ -301,7 +299,7 @@ bool drawn, const base::Optional<viz::LocalSurfaceId>& local_surface_id) { // TODO(sky): add test coverage of |focused_window_id|. - tracker_.OnEmbed(client_id, std::move(root), drawn); + tracker_.OnEmbed(std::move(root), drawn); } void TestWindowTreeClient::OnEmbeddedAppDisconnected(uint32_t window) { @@ -579,8 +577,8 @@ const gfx::Rect& root_window_bounds, const gfx::Rect& window_bounds) { WindowTree* wm_tree = window_server()->GetTreeWithId(1); - const ClientWindowId embed_window_id(WindowIdToTransportId( - WindowId(wm_tree->id(), next_primary_tree_window_id_++))); + const ClientWindowId embed_window_id(wm_tree->id(), + next_primary_tree_window_id_++); EXPECT_TRUE(wm_tree->NewWindow(embed_window_id, ServerWindow::Properties())); EXPECT_TRUE(wm_tree->SetWindowVisibility(embed_window_id, true)); EXPECT_TRUE(wm_tree->AddWindow(FirstRootId(wm_tree), embed_window_id)); @@ -611,8 +609,7 @@ ServerWindow** window) { WindowTree* tree1 = window_server()->GetTreeWithRoot(embed_window); ASSERT_TRUE(tree1 != nullptr); - const ClientWindowId child1_id( - WindowIdToTransportId(WindowId(tree1->id(), 1))); + const ClientWindowId child1_id(tree1->id(), 1); ASSERT_TRUE(tree1->NewWindow(child1_id, ServerWindow::Properties())); ServerWindow* child1 = tree1->GetWindowByClientId(child1_id); ASSERT_TRUE(child1);
diff --git a/services/ui/ws/test_utils.h b/services/ui/ws/test_utils.h index da3de838..04dbe58 100644 --- a/services/ui/ws/test_utils.h +++ b/services/ui/ws/test_utils.h
@@ -358,7 +358,7 @@ private: // WindowManager: - void OnConnect(uint16_t client_id) override; + void OnConnect() override; void WmNewDisplayAdded( const display::Display& display, ui::mojom::WindowDataPtr root, @@ -442,7 +442,6 @@ private: // WindowTreeClient: void OnEmbed( - uint16_t client_id, mojom::WindowDataPtr root, ui::mojom::WindowTreePtr tree, int64_t display_id,
diff --git a/services/ui/ws/transient_windows_unittest.cc b/services/ui/ws/transient_windows_unittest.cc index 6d96604..f2d00c8 100644 --- a/services/ui/ws/transient_windows_unittest.cc +++ b/services/ui/ws/transient_windows_unittest.cc
@@ -58,7 +58,8 @@ ++i) { if (!result.empty()) result += " "; - result += base::IntToString(WindowIdToTransportId((*i)->id())); + WindowId id = (*i)->id(); + result += base::IntToString((id.client_id << 16) | id.window_id); } return result; }
diff --git a/services/ui/ws/window_manager_client_unittest.cc b/services/ui/ws/window_manager_client_unittest.cc index dbae220..3d60c07 100644 --- a/services/ui/ws/window_manager_client_unittest.cc +++ b/services/ui/ws/window_manager_client_unittest.cc
@@ -388,7 +388,8 @@ // WindowTreeHost::window() is the single root of the embed. EXPECT_EQ(1u, embed_result->window_tree_client->GetRoots().size()); EXPECT_EQ(embed_root, GetFirstRoot(embed_result->window_tree_client.get())); - EXPECT_EQ(server_id(window), server_id(embed_root)); + EXPECT_EQ(LoWord(server_id(window)), LoWord(server_id(embed_root))); + EXPECT_NE(0u, server_id(embed_root) >> 16); EXPECT_EQ(nullptr, embed_root->parent()); EXPECT_TRUE(embed_root->children().empty()); } @@ -401,7 +402,8 @@ std::unique_ptr<EmbedResult> embed_result = Embed(window_manager(), window); ASSERT_TRUE(embed_result->IsValid()); aura::Window* embed_root = embed_result->window_tree_host->window(); - EXPECT_EQ(server_id(window), server_id(embed_root)); + EXPECT_EQ(LoWord(server_id(window)), LoWord(server_id(embed_root))); + EXPECT_NE(0u, server_id(embed_root) >> 16); EXPECT_EQ(nullptr, embed_root->parent()); EXPECT_TRUE(embed_root->children().empty()); } @@ -505,6 +507,10 @@ aura::Window* window12 = NewVisibleWindow(embed_root, embedded); ASSERT_TRUE(WaitForTreeSizeToMatch(window1, 3u)); + // |embedded|'s WindowTree has an id_ of 2, so window11's client_id part + // should be 2 in the WindowTree for window_manager(). Similar for window12. + Id window11_in_wm = 2 << 16 | LoWord(server_id(window11)); + Id window12_in_wm = 2 << 16 | LoWord(server_id(window12)); { window11->parent()->StackChildAtTop(window11); @@ -516,15 +522,15 @@ // The window_manager() tree is still not updated. EXPECT_EQ(window1->children().back(), - GetChildWindowByServerId(window_manager(), server_id(window12))); + GetChildWindowByServerId(window_manager(), window12_in_wm)); // Wait until window_manager() tree is updated. ASSERT_TRUE(WaitForStackingOrderChange( - GetChildWindowByServerId(window_manager(), server_id(window11)))); + GetChildWindowByServerId(window_manager(), window11_in_wm))); EXPECT_EQ(window1->children().front(), - GetChildWindowByServerId(window_manager(), server_id(window12))); + GetChildWindowByServerId(window_manager(), window12_in_wm)); EXPECT_EQ(window1->children().back(), - GetChildWindowByServerId(window_manager(), server_id(window11))); + GetChildWindowByServerId(window_manager(), window11_in_wm)); } { @@ -537,13 +543,13 @@ // |window_manager()| is also eventually updated. EXPECT_EQ(window1->children().back(), - GetChildWindowByServerId(window_manager(), server_id(window11))); + GetChildWindowByServerId(window_manager(), window11_in_wm)); ASSERT_TRUE(WaitForStackingOrderChange( - GetChildWindowByServerId(window_manager(), server_id(window11)))); + GetChildWindowByServerId(window_manager(), window11_in_wm))); EXPECT_EQ(window1->children().front(), - GetChildWindowByServerId(window_manager(), server_id(window11))); + GetChildWindowByServerId(window_manager(), window11_in_wm)); EXPECT_EQ(window1->children().back(), - GetChildWindowByServerId(window_manager(), server_id(window12))); + GetChildWindowByServerId(window_manager(), window12_in_wm)); } } @@ -770,9 +776,6 @@ window_tree_host_in_second_client.window()->Show(); aura::Window* second_client_child = NewVisibleWindow( window_tree_host_in_second_client.window(), &second_client); - std::unique_ptr<aura::WindowPortMus> window_port_mus = - base::MakeUnique<aura::WindowPortMus>(&second_client, - aura::WindowMusType::LOCAL); // Create the transient without a parent, set transient parent, then add. aura::Window* transient = NewVisibleWindow(nullptr, &second_client); aura::client::TransientWindowClient* transient_window_client =
diff --git a/services/ui/ws/window_manager_state_unittest.cc b/services/ui/ws/window_manager_state_unittest.cc index d22100b7..dc2fbbe60 100644 --- a/services/ui/ws/window_manager_state_unittest.cc +++ b/services/ui/ws/window_manager_state_unittest.cc
@@ -482,7 +482,9 @@ DispatchInputEventToWindow(target, display->GetId(), key, accelerator.get()); TestChangeTracker* tracker = embed_connection->tracker(); ASSERT_EQ(1u, tracker->changes()->size()); - EXPECT_EQ("InputEvent window=2,1 event_action=7", + // clients that created this window is receiving the event, so client_id part + // would be reset to 0 before sending back to clients. + EXPECT_EQ("InputEvent window=0,1 event_action=7", ChangesToDescription1(*tracker->changes())[0]); EXPECT_TRUE(wm_client()->tracker()->changes()->empty()); @@ -542,13 +544,13 @@ TEST_F(WindowManagerStateTest, InterceptingEmbedderReceivesEvents) { WindowTree* embedder_tree = tree(); ServerWindow* embedder_root = window(); - const ClientWindowId embed_window_id( - WindowIdToTransportId(WindowId(embedder_tree->id(), 12))); + const ClientWindowId embed_window_id(embedder_tree->id(), 12); embedder_tree->NewWindow(embed_window_id, ServerWindow::Properties()); ServerWindow* embedder_window = embedder_tree->GetWindowByClientId(embed_window_id); + WindowId embedder_root_id = embedder_root->id(); ASSERT_TRUE(embedder_tree->AddWindow( - ClientWindowId(WindowIdToTransportId(embedder_root->id())), + ClientWindowId(embedder_root_id.client_id, embedder_root_id.window_id), embed_window_id)); TestWindowTreeClient* embedder_client = wm_client(); @@ -604,11 +606,11 @@ embedder_client->tracker()->changes()->clear(); // Embed another tree in the embedded tree. - const ClientWindowId nested_embed_window_id( - WindowIdToTransportId(WindowId(embed_tree->id(), 23))); + const ClientWindowId nested_embed_window_id(embed_tree->id(), 23); embed_tree->NewWindow(nested_embed_window_id, ServerWindow::Properties()); - const ClientWindowId embed_root_id( - WindowIdToTransportId((*embed_tree->roots().begin())->id())); + WindowId embed_root_window_id = (*embed_tree->roots().begin())->id(); + const ClientWindowId embed_root_id(embed_root_window_id.client_id, + embed_root_window_id.window_id); ASSERT_TRUE(embed_tree->AddWindow(embed_root_id, nested_embed_window_id)); WindowTree* nested_embed_tree = nullptr;
diff --git a/services/ui/ws/window_tree.cc b/services/ui/ws/window_tree.cc index 7970153..37ad796 100644 --- a/services/ui/ws/window_tree.cc +++ b/services/ui/ws/window_tree.cc
@@ -170,9 +170,9 @@ IsWindowKnown(focused_window, &focused_window_id); const bool drawn = root->parent() && root->parent()->IsDrawn(); - client()->OnEmbed(id_, WindowToWindowData(to_send.front()), std::move(tree), - display_id, focused_window_id.id, drawn, - root->current_local_surface_id()); + client()->OnEmbed(WindowToWindowData(to_send.front()), std::move(tree), + display_id, ClientWindowIdToTransportId(focused_window_id), + drawn, root->current_local_surface_id()); } void WindowTree::ConfigureWindowManager( @@ -186,7 +186,7 @@ DCHECK(!window_manager_internal_); automatically_create_display_roots_ = automatically_create_display_roots; window_manager_internal_ = binding_->GetWindowManager(); - window_manager_internal_->OnConnect(id_); + window_manager_internal_->OnConnect(); window_manager_state_ = base::MakeUnique<WindowManagerState>(this); } @@ -252,7 +252,7 @@ DCHECK(automatically_create_display_roots_); DCHECK(window_manager_internal_); - const ClientWindowId client_window_id(WindowIdToTransportId(root->id())); + const ClientWindowId client_window_id = MakeClientWindowId(root->id()); DCHECK_EQ(0u, client_id_to_window_id_map_.count(client_window_id)); client_id_to_window_id_map_[client_window_id] = root->id(); window_id_to_client_id_map_[root->id()] = client_window_id; @@ -410,13 +410,13 @@ for (auto& transport_container : transport_all_blocking_containers) { BlockingContainers blocking_containers; blocking_containers.system_modal_container = GetWindowByClientId( - ClientWindowId(transport_container->system_modal_container_id)); + MakeClientWindowId(transport_container->system_modal_container_id)); if (!blocking_containers.system_modal_container) { DVLOG(1) << "SetBlockingContainers called with unknown modal container"; return false; } blocking_containers.min_container = GetWindowByClientId( - ClientWindowId(transport_container->min_container_id)); + MakeClientWindowId(transport_container->min_container_id)); all_containers.push_back(blocking_containers); } window_manager_state_->event_dispatcher() @@ -485,10 +485,9 @@ ServerWindow* child = GetWindowByClientId(child_id); DVLOG(3) << "add window client=" << id_ << " client parent window_id=" << parent_id.id - << " global window_id=" - << (parent ? WindowIdToTransportId(parent->id()) : 0) - << " client child window_id= " << child_id.id << " global window_id=" - << (child ? WindowIdToTransportId(child->id()) : 0); + << " global window_id=" << DebugWindowId(parent) + << " client child window_id= " << child_id.id + << " global window_id=" << DebugWindowId(child); if (!parent) { DVLOG(1) << "AddWindow failed (no parent)"; return false; @@ -529,8 +528,8 @@ bool WindowTree::DeleteWindow(const ClientWindowId& window_id) { ServerWindow* window = GetWindowByClientId(window_id); DVLOG(3) << "removing window from parent client=" << id_ - << " client window_id= " << window_id.id << " global window_id=" - << (window ? WindowIdToTransportId(window->id()) : 0); + << " client window_id= " << window_id.id + << " global window_id=" << DebugWindowId(window); if (!window) return false; @@ -619,8 +618,8 @@ bool visible) { ServerWindow* window = GetWindowByClientId(window_id); DVLOG(3) << "SetWindowVisibility client=" << id_ - << " client window_id= " << window_id.id << " global window_id=" - << (window ? WindowIdToTransportId(window->id()) : 0); + << " client window_id= " << window_id.id + << " global window_id=" << DebugWindowId(window); if (!window) { DVLOG(1) << "SetWindowVisibility failed (no window)"; return false; @@ -793,7 +792,8 @@ const bool is_known = IsWindowKnown(modal_window, &client_window_id); // The window manager knows all windows. DCHECK(is_known); - window_manager_internal_->OnEventBlockedByModalWindow(client_window_id.id); + window_manager_internal_->OnEventBlockedByModalWindow( + ClientWindowIdToTransportId(client_window_id)); } void WindowTree::OnCursorTouchVisibleChanged(bool enabled) { @@ -827,8 +827,8 @@ ClientWindowId client_window_id; if (originated_change || !IsWindowKnown(window, &client_window_id)) return; - client()->OnWindowBoundsChanged(client_window_id.id, old_bounds, new_bounds, - local_surface_id); + client()->OnWindowBoundsChanged(ClientWindowIdToTransportId(client_window_id), + old_bounds, new_bounds, local_surface_id); } void WindowTree::ProcessWindowTransformChanged( @@ -839,8 +839,9 @@ ClientWindowId client_window_id; if (originated_change || !IsWindowKnown(window, &client_window_id)) return; - client()->OnWindowTransformChanged(client_window_id.id, old_transform, - new_transform); + client()->OnWindowTransformChanged( + ClientWindowIdToTransportId(client_window_id), old_transform, + new_transform); } void WindowTree::ProcessClientAreaChanged( @@ -852,7 +853,7 @@ if (originated_change || !IsWindowKnown(window, &client_window_id)) return; client()->OnClientAreaChanged( - client_window_id.id, new_client_area, + ClientWindowIdToTransportId(client_window_id), new_client_area, std::vector<gfx::Rect>(new_additional_client_areas)); } @@ -889,7 +890,8 @@ if (new_data) data.emplace(*new_data); - client()->OnWindowSharedPropertyChanged(client_window_id.id, name, data); + client()->OnWindowSharedPropertyChanged( + ClientWindowIdToTransportId(client_window_id), name, data); } void WindowTree::ProcessWindowHierarchyChanged(const ServerWindow* window, @@ -946,8 +948,9 @@ if (HasRoot(window) || HasRoot(relative_window)) return; - client()->OnWindowReordered(client_window_id.id, relative_client_window_id.id, - direction); + client()->OnWindowReordered( + ClientWindowIdToTransportId(client_window_id), + ClientWindowIdToTransportId(relative_client_window_id), direction); window_server_->OnTreeMessagedClient(id_); } @@ -968,7 +971,7 @@ if (originated_change) return; - client()->OnWindowDeleted(client_window_id.id); + client()->OnWindowDeleted(ClientWindowIdToTransportId(client_window_id)); window_server_->OnTreeMessagedClient(id_); } @@ -979,8 +982,8 @@ ClientWindowId client_window_id; if (IsWindowKnown(window, &client_window_id)) { - client()->OnWindowVisibilityChanged(client_window_id.id, - !window->visible()); + client()->OnWindowVisibilityChanged( + ClientWindowIdToTransportId(client_window_id), !window->visible()); return; } @@ -1005,8 +1008,9 @@ ClientWindowId client_window_id; if (IsWindowKnown(window, &client_window_id)) { - client()->OnWindowOpacityChanged(client_window_id.id, old_opacity, - new_opacity); + client()->OnWindowOpacityChanged( + ClientWindowIdToTransportId(client_window_id), old_opacity, + new_opacity); } } @@ -1019,7 +1023,8 @@ if (!IsWindowKnown(window, &client_window_id)) return; - client()->OnWindowCursorChanged(client_window_id.id, cursor); + client()->OnWindowCursorChanged(ClientWindowIdToTransportId(client_window_id), + cursor); } void WindowTree::ProcessFocusChanged(const ServerWindow* old_focused_window, @@ -1035,7 +1040,7 @@ ClientWindowId client_window_id; // If the window isn't known we'll supply null, which is ok. IsWindowKnown(window, &client_window_id); - client()->OnWindowFocused(client_window_id.id); + client()->OnWindowFocused(ClientWindowIdToTransportId(client_window_id)); } void WindowTree::ProcessTransientWindowAdded( @@ -1050,8 +1055,9 @@ !IsWindowKnown(transient_window, &transient_client_window_id)) { return; } - client()->OnTransientWindowAdded(client_window_id.id, - transient_client_window_id.id); + client()->OnTransientWindowAdded( + ClientWindowIdToTransportId(client_window_id), + ClientWindowIdToTransportId(transient_client_window_id)); } void WindowTree::ProcessTransientWindowRemoved( @@ -1065,8 +1071,9 @@ !IsWindowKnown(transient_window, &transient_client_window_id)) { return; } - client()->OnTransientWindowRemoved(client_window_id.id, - transient_client_window_id.id); + client()->OnTransientWindowRemoved( + ClientWindowIdToTransportId(client_window_id), + ClientWindowIdToTransportId(transient_client_window_id)); } void WindowTree::ProcessWindowSurfaceChanged( @@ -1075,7 +1082,8 @@ ClientWindowId client_window_id; if (!IsWindowKnown(window, &client_window_id)) return; - client()->OnWindowSurfaceChanged(client_window_id.id, surface_info); + client()->OnWindowSurfaceChanged( + ClientWindowIdToTransportId(client_window_id), surface_info); } void WindowTree::SendToPointerWatcher(const ui::Event& event, @@ -1088,8 +1096,9 @@ // Ignore the return value from IsWindowKnown() as in the case of the client // not knowing the window we'll send 0, which corresponds to no window. IsWindowKnown(target_window, &client_window_id); - client()->OnPointerEventObserved(ui::Event::Clone(event), client_window_id.id, - display_id); + client()->OnPointerEventObserved( + ui::Event::Clone(event), ClientWindowIdToTransportId(client_window_id), + display_id); } bool WindowTree::ShouldRouteToWindowManager(const ServerWindow* window) const { @@ -1136,7 +1145,7 @@ const ServerWindow* window) const { auto iter = window_id_to_client_id_map_.find(window->id()); DCHECK(iter != window_id_to_client_id_map_.end()); - return iter->second; + return ClientWindowId(ClientWindowIdToTransportId(iter->second)); } bool WindowTree::IsValidIdForNewWindow(const ClientWindowId& id) const { @@ -1220,7 +1229,7 @@ // only encountered for the WM or embed roots. We assume such clients want // to see the real id of the window and are only created ClientWindowIds // with the client_id. - const ClientWindowId client_window_id(WindowIdToTransportId(window->id())); + const ClientWindowId client_window_id = MakeClientWindowId(window->id()); DCHECK_EQ(0u, client_id_to_window_id_map_.count(client_window_id)); client_id_to_window_id_map_[client_window_id] = window->id(); window_id_to_client_id_map_[window->id()] = client_window_id; @@ -1459,6 +1468,23 @@ event.type() == ui::ET_POINTER_WHEEL_CHANGED; } +ClientWindowId WindowTree::MakeClientWindowId(Id transport_window_id) const { + if (!HiWord(transport_window_id)) + transport_window_id = ((id_ << 16) | transport_window_id); + return ClientWindowId(transport_window_id); +} + +ClientWindowId WindowTree::MakeClientWindowId(const WindowId& id) const { + return MakeClientWindowId((id.client_id << 16) | id.window_id); +} + +Id WindowTree::ClientWindowIdToTransportId( + const ClientWindowId& client_window_id) const { + if (HiWord(client_window_id.id) == id_) + return LoWord(client_window_id.id); + return client_window_id.id; +} + void WindowTree::NewWindow( uint32_t change_id, Id transport_window_id, @@ -1469,7 +1495,8 @@ properties = mojo::UnorderedMapToMap(transport_properties.value()); client()->OnChangeCompleted( - change_id, NewWindow(ClientWindowId(transport_window_id), properties)); + change_id, + NewWindow(MakeClientWindowId(transport_window_id), properties)); } void WindowTree::NewTopLevelWindow( @@ -1480,7 +1507,8 @@ // TODO(sky): rather than DCHECK, have this kill connection. DCHECK(!window_manager_internal_); // Not valid for the windowmanager. DCHECK(!waiting_for_top_level_window_info_); - const ClientWindowId client_window_id(transport_window_id); + const ClientWindowId client_window_id = + MakeClientWindowId(transport_window_id); // TODO(sky): need a way for client to provide context to figure out display. Display* display = display_manager()->displays().empty() ? nullptr @@ -1517,20 +1545,21 @@ void WindowTree::DeleteWindow(uint32_t change_id, Id transport_window_id) { client()->OnChangeCompleted( - change_id, DeleteWindow(ClientWindowId(transport_window_id))); + change_id, DeleteWindow(MakeClientWindowId(transport_window_id))); } void WindowTree::AddWindow(uint32_t change_id, Id parent_id, Id child_id) { - client()->OnChangeCompleted(change_id, AddWindow(ClientWindowId(parent_id), - ClientWindowId(child_id))); + client()->OnChangeCompleted( + change_id, + AddWindow(MakeClientWindowId(parent_id), MakeClientWindowId(child_id))); } void WindowTree::RemoveWindowFromParent(uint32_t change_id, Id window_id) { bool success = false; - ServerWindow* window = GetWindowByClientId(ClientWindowId(window_id)); + ServerWindow* window = GetWindowByClientId(MakeClientWindowId(window_id)); DVLOG(3) << "removing window from parent client=" << id_ - << " client window_id= " << window_id << " global window_id=" - << (window ? WindowIdToTransportId(window->id()) : 0); + << " client window_id= " << window_id + << " global window_id=" << DebugWindowId(window); if (!window) { DVLOG(1) << "RemoveWindowFromParent failed (invalid window id=" << change_id << ")"; @@ -1553,15 +1582,15 @@ Id window, Id transient_window) { client()->OnChangeCompleted( - change_id, AddTransientWindow(ClientWindowId(window), - ClientWindowId(transient_window))); + change_id, AddTransientWindow(MakeClientWindowId(window), + MakeClientWindowId(transient_window))); } void WindowTree::RemoveTransientWindowFromParent(uint32_t change_id, Id transient_window_id) { bool success = false; ServerWindow* transient_window = - GetWindowByClientId(ClientWindowId(transient_window_id)); + GetWindowByClientId(MakeClientWindowId(transient_window_id)); if (transient_window && transient_window->transient_parent() && access_policy_->CanRemoveTransientWindowFromParent(transient_window)) { success = true; @@ -1577,15 +1606,15 @@ Id window_id, ModalType modal_type) { client()->OnChangeCompleted( - change_id, SetModalType(ClientWindowId(window_id), modal_type)); + change_id, SetModalType(MakeClientWindowId(window_id), modal_type)); } void WindowTree::SetChildModalParent(uint32_t change_id, Id window_id, Id parent_window_id) { client()->OnChangeCompleted( - change_id, SetChildModalParent(ClientWindowId(window_id), - ClientWindowId(parent_window_id))); + change_id, SetChildModalParent(MakeClientWindowId(window_id), + MakeClientWindowId(parent_window_id))); } void WindowTree::ReorderWindow(uint32_t change_id, @@ -1596,16 +1625,13 @@ // children of a parent window which the two implementations can't see. There // should be a security check to prevent this. bool success = false; - ServerWindow* window = GetWindowByClientId(ClientWindowId(window_id)); + ServerWindow* window = GetWindowByClientId(MakeClientWindowId(window_id)); ServerWindow* relative_window = - GetWindowByClientId(ClientWindowId(relative_window_id)); + GetWindowByClientId(MakeClientWindowId(relative_window_id)); DVLOG(3) << "reorder client=" << id_ << " client window_id=" << window_id - << " global window_id=" - << (window ? WindowIdToTransportId(window->id()) : 0) + << " global window_id=" << DebugWindowId(window) << " relative client window_id=" << relative_window_id - << " relative global window_id=" - << (relative_window ? WindowIdToTransportId(relative_window->id()) - : 0); + << " relative global window_id=" << DebugWindowId(relative_window); if (CanReorderWindow(window, relative_window, direction)) { success = true; Operation op(this, window_server_, OperationType::REORDER_WINDOW); @@ -1619,17 +1645,18 @@ Id window_id, const base::Callback<void(std::vector<mojom::WindowDataPtr>)>& callback) { std::vector<const ServerWindow*> windows( - GetWindowTree(ClientWindowId(window_id))); + GetWindowTree(MakeClientWindowId(window_id))); callback.Run(WindowsToWindowDatas(windows)); } void WindowTree::SetCapture(uint32_t change_id, Id window_id) { - client()->OnChangeCompleted(change_id, SetCapture(ClientWindowId(window_id))); + client()->OnChangeCompleted(change_id, + SetCapture(MakeClientWindowId(window_id))); } void WindowTree::ReleaseCapture(uint32_t change_id, Id window_id) { client()->OnChangeCompleted(change_id, - ReleaseCapture(ClientWindowId(window_id))); + ReleaseCapture(MakeClientWindowId(window_id))); } void WindowTree::StartPointerWatcher(bool want_moves) { @@ -1647,11 +1674,10 @@ Id window_id, const gfx::Rect& bounds, const base::Optional<viz::LocalSurfaceId>& local_surface_id) { - ServerWindow* window = GetWindowByClientId(ClientWindowId(window_id)); + ServerWindow* window = GetWindowByClientId(MakeClientWindowId(window_id)); if (window && ShouldRouteToWindowManager(window)) { DVLOG(3) << "Redirecting request to change bounds for " - << (window ? WindowIdToTransportId(window->id()) : 0) - << " to window manager..."; + << DebugWindowId(window) << " to window manager..."; const uint32_t wm_change_id = window_server_->GenerateWindowManagerChangeId(this, change_id); // |window_id| may be a client id, use the id from the window to ensure @@ -1665,8 +1691,8 @@ return; } - DVLOG(3) << "SetWindowBounds window_id=" << window_id << " global window_id=" - << (window ? window->id().ToString() : std::string()) + DVLOG(3) << "SetWindowBounds window_id=" << window_id + << " global window_id=" << DebugWindowId(window) << " bounds=" << bounds.ToString() << " local_surface_id=" << (local_surface_id ? local_surface_id->ToString() : "null"); @@ -1693,10 +1719,9 @@ // Clients shouldn't have a need to set the transform of the embed root, so // we don't bother routing it to the window-manager. - ServerWindow* window = GetWindowByClientId(ClientWindowId(window_id)); + ServerWindow* window = GetWindowByClientId(MakeClientWindowId(window_id)); DVLOG(3) << "SetWindowTransform client window_id=" << window_id - << " global window_id=" - << (window ? WindowIdToTransportId(window->id()) : 0) + << " global window_id=" << DebugWindowId(window) << " transform=" << transform.ToString(); if (!window) { @@ -1721,7 +1746,7 @@ bool visible) { client()->OnChangeCompleted( change_id, - SetWindowVisibility(ClientWindowId(transport_window_id), visible)); + SetWindowVisibility(MakeClientWindowId(transport_window_id), visible)); } void WindowTree::SetWindowProperty( @@ -1730,7 +1755,7 @@ const std::string& name, const base::Optional<std::vector<uint8_t>>& value) { ServerWindow* window = - GetWindowByClientId(ClientWindowId(transport_window_id)); + GetWindowByClientId(MakeClientWindowId(transport_window_id)); if (window && ShouldRouteToWindowManager(window)) { const uint32_t wm_change_id = window_server_->GenerateWindowManagerChangeId(this, change_id); @@ -1757,7 +1782,7 @@ Id window_id, float opacity) { client()->OnChangeCompleted( - change_id, SetWindowOpacity(ClientWindowId(window_id), opacity)); + change_id, SetWindowOpacity(MakeClientWindowId(window_id), opacity)); } void WindowTree::AttachCompositorFrameSink( @@ -1765,7 +1790,7 @@ viz::mojom::CompositorFrameSinkRequest compositor_frame_sink, viz::mojom::CompositorFrameSinkClientPtr client) { ServerWindow* window = - GetWindowByClientId(ClientWindowId(transport_window_id)); + GetWindowByClientId(MakeClientWindowId(transport_window_id)); if (!window) { DVLOG(1) << "AttachCompositorFrameSink failed (invalid window id)"; return; @@ -1783,7 +1808,7 @@ void WindowTree::SetWindowTextInputState(Id transport_window_id, mojo::TextInputStatePtr state) { ServerWindow* window = - GetWindowByClientId(ClientWindowId(transport_window_id)); + GetWindowByClientId(MakeClientWindowId(transport_window_id)); bool success = window && access_policy_->CanSetWindowTextInputState(window); if (success) window->SetTextInputState(state.To<ui::TextInputState>()); @@ -1793,7 +1818,7 @@ bool visible, mojo::TextInputStatePtr state) { ServerWindow* window = - GetWindowByClientId(ClientWindowId(transport_window_id)); + GetWindowByClientId(MakeClientWindowId(transport_window_id)); bool success = window && access_policy_->CanSetWindowTextInputState(window); if (success) { if (!state.is_null()) @@ -1848,10 +1873,9 @@ const base::Optional<std::vector<gfx::Rect>>& transport_additional_client_areas) { ServerWindow* window = - GetWindowByClientId(ClientWindowId(transport_window_id)); + GetWindowByClientId(MakeClientWindowId(transport_window_id)); DVLOG(3) << "SetClientArea client window_id=" << transport_window_id - << " global window_id=" - << (window ? WindowIdToTransportId(window->id()) : 0) + << " global window_id=" << DebugWindowId(window) << " insets=" << insets.top() << " " << insets.left() << " " << insets.bottom() << " " << insets.right(); if (!window) { @@ -1871,7 +1895,7 @@ void WindowTree::SetHitTestMask(Id transport_window_id, const base::Optional<gfx::Rect>& mask) { ServerWindow* window = - GetWindowByClientId(ClientWindowId(transport_window_id)); + GetWindowByClientId(MakeClientWindowId(transport_window_id)); if (!window) { DVLOG(1) << "SetHitTestMask failed (invalid window id)"; return; @@ -1889,7 +1913,7 @@ } void WindowTree::SetCanAcceptDrops(Id window_id, bool accepts_drops) { - ServerWindow* window = GetWindowByClientId(ClientWindowId(window_id)); + ServerWindow* window = GetWindowByClientId(MakeClientWindowId(window_id)); if (!window) { DVLOG(1) << "SetCanAcceptDrops failed (invalid window id)"; return; @@ -1908,17 +1932,17 @@ uint32_t flags, const EmbedCallback& callback) { callback.Run( - Embed(ClientWindowId(transport_window_id), std::move(client), flags)); + Embed(MakeClientWindowId(transport_window_id), std::move(client), flags)); } void WindowTree::SetFocus(uint32_t change_id, Id transport_window_id) { - client()->OnChangeCompleted(change_id, - SetFocus(ClientWindowId(transport_window_id))); + client()->OnChangeCompleted( + change_id, SetFocus(MakeClientWindowId(transport_window_id))); } void WindowTree::SetCanFocus(Id transport_window_id, bool can_focus) { ServerWindow* window = - GetWindowByClientId(ClientWindowId(transport_window_id)); + GetWindowByClientId(MakeClientWindowId(transport_window_id)); if (!window) { DVLOG(1) << "SetCanFocus failed (invalid window id)"; return; @@ -1940,7 +1964,7 @@ void WindowTree::SetEventTargetingPolicy(Id transport_window_id, mojom::EventTargetingPolicy policy) { ServerWindow* window = - GetWindowByClientId(ClientWindowId(transport_window_id)); + GetWindowByClientId(MakeClientWindowId(transport_window_id)); // TODO(riajiang): check |event_queue_| is empty for |window|. if (window && access_policy_->CanSetEventTargetingPolicy(window)) window->set_event_targeting_policy(policy); @@ -1950,7 +1974,7 @@ Id transport_window_id, ui::CursorData cursor) { ServerWindow* window = - GetWindowByClientId(ClientWindowId(transport_window_id)); + GetWindowByClientId(MakeClientWindowId(transport_window_id)); if (!window) { DVLOG(1) << "SetCursor failed (invalid id)"; client()->OnChangeCompleted(change_id, false); @@ -1989,8 +2013,7 @@ } void WindowTree::DeactivateWindow(Id window_id) { - ServerWindow* window = - GetWindowByClientId(ClientWindowId(window_id)); + ServerWindow* window = GetWindowByClientId(MakeClientWindowId(window_id)); if (!window) { DVLOG(1) << "DeactivateWindow failed (invalid id)"; return; @@ -2009,14 +2032,14 @@ } void WindowTree::StackAbove(uint32_t change_id, Id above_id, Id below_id) { - ServerWindow* above = GetWindowByClientId(ClientWindowId(above_id)); + ServerWindow* above = GetWindowByClientId(MakeClientWindowId(above_id)); if (!above) { DVLOG(1) << "StackAbove failed (invalid above id)"; client()->OnChangeCompleted(change_id, false); return; } - ServerWindow* below = GetWindowByClientId(ClientWindowId(below_id)); + ServerWindow* below = GetWindowByClientId(MakeClientWindowId(below_id)); if (!below) { DVLOG(1) << "StackAbove failed (invalid below id)"; client()->OnChangeCompleted(change_id, false); @@ -2067,7 +2090,7 @@ } void WindowTree::StackAtTop(uint32_t change_id, Id window_id) { - ServerWindow* window = GetWindowByClientId(ClientWindowId(window_id)); + ServerWindow* window = GetWindowByClientId(MakeClientWindowId(window_id)); if (!window) { DVLOG(1) << "StackAtTop failed (invalid id)"; client()->OnChangeCompleted(change_id, false); @@ -2142,7 +2165,8 @@ // TODO(erg): SkBitmap is the wrong data type for the drag image; we should // be passing ImageSkias once http://crbug.com/655874 is implemented. - ServerWindow* window = GetWindowByClientId(ClientWindowId(source_window_id)); + ServerWindow* window = + GetWindowByClientId(MakeClientWindowId(source_window_id)); bool success = window && access_policy_->CanInitiateDragLoop(window); if (!success || !ShouldRouteToWindowManager(window)) { // We need to fail this move loop change, otherwise the client will just be @@ -2185,7 +2209,7 @@ } void WindowTree::CancelDragDrop(Id window_id) { - ServerWindow* window = GetWindowByClientId(ClientWindowId(window_id)); + ServerWindow* window = GetWindowByClientId(MakeClientWindowId(window_id)); if (!window) { DVLOG(1) << "CancelDragDrop failed (no window)"; return; @@ -2215,7 +2239,7 @@ Id window_id, ui::mojom::MoveLoopSource source, const gfx::Point& cursor) { - ServerWindow* window = GetWindowByClientId(ClientWindowId(window_id)); + ServerWindow* window = GetWindowByClientId(MakeClientWindowId(window_id)); bool success = window && access_policy_->CanInitiateMoveLoop(window); if (!success || !ShouldRouteToWindowManager(window)) { // We need to fail this move loop change, otherwise the client will just be @@ -2258,7 +2282,7 @@ } void WindowTree::CancelWindowMove(Id window_id) { - ServerWindow* window = GetWindowByClientId(ClientWindowId(window_id)); + ServerWindow* window = GetWindowByClientId(MakeClientWindowId(window_id)); if (!window) { DVLOG(1) << "CancelWindowMove failed (invalid window id)"; return; @@ -2310,12 +2334,12 @@ } void WindowTree::AddActivationParent(Id transport_window_id) { - AddActivationParent(ClientWindowId(transport_window_id)); + AddActivationParent(MakeClientWindowId(transport_window_id)); } void WindowTree::RemoveActivationParent(Id transport_window_id) { ServerWindow* window = - GetWindowByClientId(ClientWindowId(transport_window_id)); + GetWindowByClientId(MakeClientWindowId(transport_window_id)); if (!window) { DVLOG(1) << "RemoveActivationParent failed (invalid window id)"; return; @@ -2351,7 +2375,7 @@ Id window_id, const gfx::Insets& mouse_insets, const gfx::Insets& touch_insets) { - ServerWindow* window = GetWindowByClientId(ClientWindowId(window_id)); + ServerWindow* window = GetWindowByClientId(MakeClientWindowId(window_id)); // Extended hit test region should only be set by the owner of the window. if (!window) { DVLOG(1) << "SetExtendedHitRegionForChildren failed (invalid window id)"; @@ -2385,7 +2409,7 @@ const SetDisplayRootCallback& callback) { ServerWindow* display_root = ProcessSetDisplayRoot( display, TransportMetricsToDisplayMetrics(*viewport_metrics), - is_primary_display, ClientWindowId(window_id)); + is_primary_display, MakeClientWindowId(window_id)); if (!display_root) { callback.Run(base::nullopt); return; @@ -2461,7 +2485,7 @@ void WindowTree::WmRequestClose(Id transport_window_id) { ServerWindow* window = - GetWindowByClientId(ClientWindowId(transport_window_id)); + GetWindowByClientId(MakeClientWindowId(transport_window_id)); WindowTree* tree = window_server_->GetTreeWithRoot(window); if (tree && tree != this) { tree->client()->RequestClose(tree->ClientWindowIdForWindow(window).id); @@ -2478,7 +2502,7 @@ void WindowTree::WmSetNonClientCursor(uint32_t window_id, ui::CursorData cursor) { DCHECK(window_manager_state_); - ServerWindow* window = GetWindowByClientId(ClientWindowId(window_id)); + ServerWindow* window = GetWindowByClientId(MakeClientWindowId(window_id)); if (!window) { DVLOG(1) << "WmSetNonClientCursor failed (invalid window id)"; return; @@ -2545,7 +2569,7 @@ void WindowTree::OnWmCreatedTopLevelWindow(uint32_t change_id, Id transport_window_id) { ServerWindow* window = - GetWindowByClientId(ClientWindowId(transport_window_id)); + GetWindowByClientId(MakeClientWindowId(transport_window_id)); if (window && window->id().client_id != id_) { DVLOG(1) << "OnWmCreatedTopLevelWindow failed (invalid window id)"; window_server_->WindowManagerSentBogusMessage(); @@ -2674,8 +2698,8 @@ callback.Run(0); return; } - client()->OnDragEnter(client_window_id.id, event_flags, cursor_offset, - effect_bitmask, callback); + client()->OnDragEnter(ClientWindowIdToTransportId(client_window_id), + event_flags, cursor_offset, effect_bitmask, callback); } void WindowTree::PerformOnDragOver( @@ -2690,8 +2714,8 @@ callback.Run(0); return; } - client()->OnDragOver(client_window_id.id, event_flags, cursor_offset, - effect_bitmask, callback); + client()->OnDragOver(ClientWindowIdToTransportId(client_window_id), + event_flags, cursor_offset, effect_bitmask, callback); } void WindowTree::PerformOnDragLeave(const ServerWindow* window) { @@ -2700,7 +2724,7 @@ NOTREACHED(); return; } - client()->OnDragLeave(client_window_id.id); + client()->OnDragLeave(ClientWindowIdToTransportId(client_window_id)); } void WindowTree::PerformOnCompleteDrop( @@ -2715,8 +2739,9 @@ callback.Run(0); return; } - client()->OnCompleteDrop(client_window_id.id, event_flags, cursor_offset, - effect_bitmask, callback); + client()->OnCompleteDrop(ClientWindowIdToTransportId(client_window_id), + event_flags, cursor_offset, effect_bitmask, + callback); } void WindowTree::PerformOnDragDropDone() {
diff --git a/services/ui/ws/window_tree.h b/services/ui/ws/window_tree.h index 4389b218..fbe60eb 100644 --- a/services/ui/ws/window_tree.h +++ b/services/ui/ws/window_tree.h
@@ -420,6 +420,17 @@ bool ProcessSetBlockingContainers(std::vector<mojom::BlockingContainersPtr> transport_all_blocking_containers); + // Returns the ClientWindowId from a transport id or WindowId. Uses id_ as the + // ClientWindowId::client_id part if it was invalid. These functions do a + // straight mapping, there may not be a window with the returned id. + ClientWindowId MakeClientWindowId(Id transport_window_id) const; + ClientWindowId MakeClientWindowId(const WindowId& id) const; + + // Before the ClientWindowId gets sent back to the client, making sure we + // reset the high 16 bits back to 0 if it's being sent back to the client + // that created the window. + Id ClientWindowIdToTransportId(const ClientWindowId& client_window_id) const; + // WindowTree: void NewWindow(uint32_t change_id, Id transport_window_id,
diff --git a/services/ui/ws/window_tree_client_unittest.cc b/services/ui/ws/window_tree_client_unittest.cc index ea71a2b..334b98d1 100644 --- a/services/ui/ws/window_tree_client_unittest.cc +++ b/services/ui/ws/window_tree_client_unittest.cc
@@ -121,7 +121,6 @@ public: TestWindowTreeClient() : binding_(this), - client_id_(0), root_window_id_(0), // Start with a random large number so tests can use lower ids if they // want. @@ -208,12 +207,11 @@ // to create a bogus window. When we get the response we know all messages // have been processed. bool WaitForAllMessages() { - return NewWindowWithCompleteId(WindowIdToTransportId(InvalidWindowId())) == - 0; + return NewWindowWithCompleteId(kInvalidClientId) == 0; } Id NewWindow(ClientSpecificId window_id) { - return NewWindowWithCompleteId(BuildWindowId(client_id_, window_id)); + return NewWindowWithCompleteId(window_id); } // Generally you want NewWindow(), but use this if you need to test given @@ -274,7 +272,6 @@ // WindowTreeClient: void OnEmbed( - ClientSpecificId client_id, WindowDataPtr root, mojom::WindowTreePtr tree, int64_t display_id, @@ -285,8 +282,7 @@ ASSERT_TRUE(root); root_window_id_ = root->window_id; tree_ = std::move(tree); - client_id_ = client_id; - tracker()->OnEmbed(client_id, std::move(root), drawn); + tracker()->OnEmbed(std::move(root), drawn); if (embed_run_loop_) embed_run_loop_->Quit(); } @@ -450,7 +446,7 @@ } // mojom::WindowManager: - void OnConnect(uint16_t client_id) override {} + void OnConnect() override {} void WmNewDisplayAdded( const display::Display& display, mojom::WindowDataPtr root_data, @@ -533,7 +529,6 @@ std::unique_ptr<WaitState> wait_state_; mojo::Binding<WindowTreeClient> binding_; - Id client_id_; Id root_window_id_; uint32_t next_change_id_; uint32_t waiting_change_id_; @@ -586,8 +581,7 @@ class WindowTreeClientTest : public WindowServerServiceTestBase { public: - WindowTreeClientTest() - : client_id_1_(0), client_id_2_(0), root_window_id_(0) {} + WindowTreeClientTest() : root_window_id_(0) {} ~WindowTreeClientTest() override {} @@ -614,8 +608,7 @@ void EstablishSecondClientWithRoot(Id root_id) { ASSERT_TRUE(wt_client2_.get() == nullptr); - wt_client2_ = - EstablishClientViaEmbed(wt1(), root_id, &client_id_2_); + wt_client2_ = EstablishClientViaEmbed(wt1(), root_id); ASSERT_GT(client_id_2_, 0); ASSERT_TRUE(wt_client2_.get() != nullptr); } @@ -630,14 +623,20 @@ EstablishSecondClientWithRoot(BuildWindowId(client_id_1(), 1))); if (create_initial_window) { - EXPECT_EQ("[" + WindowParentToString(window_1_1, kNullParentId) + "]", + // window_1_1 is created by wt_client1() so its client_id part should be + // client_id_1() in wt_client2. + EXPECT_EQ("[" + + WindowParentToString( + BuildWindowId(client_id_1(), LoWord(window_1_1)), + kNullParentId) + + "]", ChangeWindowDescription(*changes2())); } } void EstablishThirdClient(WindowTree* owner, Id root_id) { ASSERT_TRUE(wt_client3_.get() == nullptr); - wt_client3_ = EstablishClientViaEmbed(owner, root_id, nullptr); + wt_client3_ = EstablishClientViaEmbed(owner, root_id); ASSERT_TRUE(wt_client3_.get() != nullptr); } @@ -648,15 +647,12 @@ // Establishes a new client by way of Embed() on the specified WindowTree. std::unique_ptr<TestWindowTreeClient> EstablishClientViaEmbed( WindowTree* owner, - Id root_id, - int* client_id) { - return EstablishClientViaEmbedWithPolicyBitmask(owner, root_id, client_id); + Id root_id) { + return EstablishClientViaEmbedWithPolicyBitmask(owner, root_id); } std::unique_ptr<TestWindowTreeClient> - EstablishClientViaEmbedWithPolicyBitmask(WindowTree* owner, - Id root_id, - int* client_id) { + EstablishClientViaEmbedWithPolicyBitmask(WindowTree* owner, Id root_id) { if (!EmbedUrl(connector(), owner, test_name(), root_id)) { ADD_FAILURE() << "Embed() failed"; return nullptr; @@ -674,8 +670,6 @@ // fixed. EXPECT_EQ("OnEmbed", SingleChangeToDescription(*client->tracker()->changes())); - if (client_id) - *client_id = (*client->tracker()->changes())[0].client_id; return client; } @@ -709,11 +703,6 @@ ASSERT_EQ(1u, changes1()->size()); EXPECT_EQ(CHANGE_TYPE_EMBED, (*changes1())[0].type); - // All these tests assume 1 for the client id. The only real assertion here - // is the client id is not zero, but adding this as rest of code here - // assumes 1. - ASSERT_GT((*changes1())[0].client_id, 0); - client_id_1_ = (*changes1())[0].client_id; ASSERT_FALSE((*changes1())[0].windows.empty()); root_window_id_ = (*changes1())[0].windows[0].window_id; ASSERT_EQ(root_window_id_, wt_client1_->root_window_id()); @@ -738,8 +727,8 @@ private: std::unique_ptr<WindowTreeClientFactory> client_factory_; - int client_id_1_; - int client_id_2_; + int client_id_1_ = 1; + int client_id_2_ = 2; Id root_window_id_; service_manager::BinderRegistry registry_; @@ -768,7 +757,9 @@ ASSERT_NO_FATAL_FAILURE(EstablishSecondClient(false)); ASSERT_EQ(1u, changes2()->size()); ASSERT_EQ(1u, (*changes2())[0].windows.size()); - EXPECT_EQ("[" + WindowParentToString(window_1_1, kNullParentId) + "]", + // window_1_1 has a client_id part of client_id_1 in wt2. + Id window11_in_wt2 = BuildWindowId(client_id_1(), LoWord(window_1_1)); + EXPECT_EQ("[" + WindowParentToString(window11_in_wt2, kNullParentId) + "]", ChangeWindowDescription(*changes2())); // Embed() removed window 2. @@ -782,8 +773,8 @@ // ws2 should not see window 2. { std::vector<TestWindow> windows; - GetWindowTree(wt2(), window_1_1, &windows); - EXPECT_EQ(WindowParentToString(window_1_1, kNullParentId), + GetWindowTree(wt2(), window11_in_wt2, &windows); + EXPECT_EQ(WindowParentToString(window11_in_wt2, kNullParentId), SingleWindowDescription(windows)); } { @@ -861,12 +852,13 @@ std::vector<TestWindow> windows; GetWindowTree(wt1(), window_1_1, &windows); ASSERT_EQ(3u, windows.size()); - EXPECT_EQ(WindowParentToString(window_1_1, kNullParentId), + // window_1_1 is created by wt1() so client_id part would be 0 in wt1(). + EXPECT_EQ(WindowParentToString(LoWord(window_1_1), kNullParentId), windows[0].ToString()); // NOTE: we expect a match of WindowParentToString(window_2_2, window_1_1), // but the ids are in the id space of client2, which is not the same as // the id space of wt1(). - EXPECT_EQ("window=2,1 parent=1,1", windows[1].ToString()); + EXPECT_EQ("window=2,1 parent=0,1", windows[1].ToString()); // Same thing here, we really want to test for // WindowParentToString(window_3_3, window_2_2). EXPECT_EQ("window=3,1 parent=2,1", windows[2].ToString()); @@ -892,10 +884,13 @@ // Create window 3 in client 3 and add it to window 3. Id window_3_1 = wt_client3()->NewWindow(1); ASSERT_TRUE(window_3_1); - ASSERT_TRUE(wt_client3()->AddWindow(window_2_1, window_3_1)); + // window_2_1 should have a client_id of client_id_2 in wt_client3. + ASSERT_TRUE(wt_client3()->AddWindow( + BuildWindowId(client_id_2(), LoWord(window_2_1)), window_3_1)); // Client 2 shouldn't be able to remove window 3. - ASSERT_FALSE(wt_client2()->RemoveWindowFromParent(window_3_1)); + ASSERT_FALSE(wt_client2()->RemoveWindowFromParent( + BuildWindowId(3, LoWord(window_3_1)))); } // Verifies client gets a valid id. @@ -918,36 +913,36 @@ TEST_F(WindowTreeClientTest, AddWindowWithNoChange) { // Create the embed point now so that the ids line up. ASSERT_TRUE(wt_client1()->NewWindow(1)); - Id window_1_2 = wt_client1()->NewWindow(2); - Id window_1_3 = wt_client1()->NewWindow(3); - ASSERT_TRUE(window_1_2); - ASSERT_TRUE(window_1_3); + Id window_1_21 = wt_client1()->NewWindow(21); + Id window_1_31 = wt_client1()->NewWindow(31); + ASSERT_TRUE(window_1_21); + ASSERT_TRUE(window_1_31); ASSERT_NO_FATAL_FAILURE(EstablishSecondClient(false)); // Make 3 a child of 2. - ASSERT_TRUE(wt_client1()->AddWindow(window_1_2, window_1_3)); + ASSERT_TRUE(wt_client1()->AddWindow(window_1_21, window_1_31)); // Try again, this should fail. - EXPECT_FALSE(wt_client1()->AddWindow(window_1_2, window_1_3)); + EXPECT_FALSE(wt_client1()->AddWindow(window_1_21, window_1_31)); } // Verifies AddWindow fails when window is already in position. TEST_F(WindowTreeClientTest, AddAncestorFails) { // Create the embed point now so that the ids line up. ASSERT_TRUE(wt_client1()->NewWindow(1)); - Id window_1_2 = wt_client1()->NewWindow(2); - Id window_1_3 = wt_client1()->NewWindow(3); - ASSERT_TRUE(window_1_2); - ASSERT_TRUE(window_1_3); + Id window_1_21 = wt_client1()->NewWindow(21); + Id window_1_31 = wt_client1()->NewWindow(31); + ASSERT_TRUE(window_1_21); + ASSERT_TRUE(window_1_31); ASSERT_NO_FATAL_FAILURE(EstablishSecondClient(false)); // Make 3 a child of 2. - ASSERT_TRUE(wt_client1()->AddWindow(window_1_2, window_1_3)); + ASSERT_TRUE(wt_client1()->AddWindow(window_1_21, window_1_31)); // Try to make 2 a child of 3, this should fail since 2 is an ancestor of 3. - EXPECT_FALSE(wt_client1()->AddWindow(window_1_3, window_1_2)); + EXPECT_FALSE(wt_client1()->AddWindow(window_1_31, window_1_21)); } // Verifies adding to root sends right notifications. @@ -956,15 +951,15 @@ Id window_1_1 = wt_client1()->NewWindow(1); ASSERT_TRUE(window_1_1); Id window_1_21 = wt_client1()->NewWindow(21); - Id window_1_3 = wt_client1()->NewWindow(3); + Id window_1_31 = wt_client1()->NewWindow(31); ASSERT_TRUE(window_1_21); - ASSERT_TRUE(window_1_3); + ASSERT_TRUE(window_1_31); ASSERT_NO_FATAL_FAILURE(EstablishSecondClient(false)); changes2()->clear(); // Make 3 a child of 21. - ASSERT_TRUE(wt_client1()->AddWindow(window_1_21, window_1_3)); + ASSERT_TRUE(wt_client1()->AddWindow(window_1_21, window_1_31)); // Make 21 a child of 1. ASSERT_TRUE(wt_client1()->AddWindow(window_1_1, window_1_21)); @@ -995,6 +990,9 @@ ASSERT_TRUE(wt_client2()->WaitForAllMessages()); changes2()->clear(); + // window_1_1 has a client_id part of client_id_1 in wt2. + Id window11_in_wt2 = BuildWindowId(client_id_1(), LoWord(window_1_1)); + // 1,1->1,2->1,11 { // Client 2 should not get anything (1,2 is from another client). @@ -1009,9 +1007,9 @@ // notification. ASSERT_TRUE(wt_client1()->AddWindow(root_window_id(), window_1_1)); wt_client2_->WaitForChangeCount(1u); - EXPECT_EQ( - "DrawnStateChanged window=" + IdToString(window_1_1) + " drawn=true", - SingleChangeToDescription(*changes2())); + EXPECT_EQ("DrawnStateChanged window=" + IdToString(window11_in_wt2) + + " drawn=true", + SingleChangeToDescription(*changes2())); } // 1,1->1,2->1,11. @@ -1021,9 +1019,9 @@ changes2()->clear(); ASSERT_TRUE(wt_client1()->RemoveWindowFromParent(window_1_1)); wt_client2_->WaitForChangeCount(1); - EXPECT_EQ( - "DrawnStateChanged window=" + IdToString(window_1_1) + " drawn=false", - SingleChangeToDescription(*changes2())); + EXPECT_EQ("DrawnStateChanged window=" + IdToString(window11_in_wt2) + + " drawn=false", + SingleChangeToDescription(*changes2())); } // 1,1->1,2->1,11->1,111. @@ -1042,9 +1040,9 @@ changes2()->clear(); ASSERT_TRUE(wt_client1()->AddWindow(root_window_id(), window_1_1)); wt_client2_->WaitForChangeCount(1); - EXPECT_EQ( - "DrawnStateChanged window=" + IdToString(window_1_1) + " drawn=true", - SingleChangeToDescription(*changes2())); + EXPECT_EQ("DrawnStateChanged window=" + IdToString(window11_in_wt2) + + " drawn=true", + SingleChangeToDescription(*changes2())); } } @@ -1060,6 +1058,10 @@ ASSERT_TRUE(window_2_11); ASSERT_TRUE(window_2_2); ASSERT_TRUE(window_2_21); + // window_1_1 has a client_id part of 0 in wt1, while window_2_2 has that of + // client_id_2. + Id window11_in_wt1 = LoWord(window_1_1); + Id window22_in_wt1 = BuildWindowId(client_id_2(), LoWord(window_2_2)); // Set up the hierarchy. ASSERT_TRUE(wt_client1()->AddWindow(root_window_id(), window_1_1)); @@ -1075,7 +1077,7 @@ // 2,1 should be IdToString(window_2_11), but window_2_11 is in the id // space of client2, not client1. EXPECT_EQ("HierarchyChanged window=2,1 old_parent=" + - IdToString(window_1_1) + " new_parent=null", + IdToString(window11_in_wt1) + " new_parent=null", SingleChangeToDescription(*changes1())); } @@ -1084,13 +1086,13 @@ changes1()->clear(); ASSERT_TRUE(wt_client2()->AddWindow(window_1_1, window_2_2)); wt_client1_->WaitForChangeCount(1); - EXPECT_EQ("HierarchyChanged window=" + IdToString(window_2_2) + - " old_parent=null new_parent=" + IdToString(window_1_1), + EXPECT_EQ("HierarchyChanged window=" + IdToString(window22_in_wt1) + + " old_parent=null new_parent=" + IdToString(window11_in_wt1), SingleChangeToDescription(*changes1())); // "window=2,3 parent=2,2]" should be, // WindowParentToString(window_2_21, window_2_2), but isn't because of // differing id spaces. - EXPECT_EQ("[" + WindowParentToString(window_2_2, window_1_1) + + EXPECT_EQ("[" + WindowParentToString(window22_in_wt1, window11_in_wt1) + "],[window=2,3 parent=2,2]", ChangeWindowDescription(*changes1())); } @@ -1124,14 +1126,21 @@ ASSERT_TRUE( wt_client2()->AddWindow(BuildWindowId(client_id_1(), 1), window_2_1)); + // window_2_* has client_id part of client_id_2 in wt1. + Id window22_in_wt1 = BuildWindowId(client_id_2(), LoWord(window_2_2)); + Id window23_in_wt1 = BuildWindowId(client_id_2(), LoWord(window_2_3)); + Id window26_in_wt1 = BuildWindowId(client_id_2(), LoWord(window_2_6)); + Id window27_in_wt1 = BuildWindowId(client_id_2(), LoWord(window_2_7)); + Id window28_in_wt1 = BuildWindowId(client_id_2(), LoWord(window_2_8)); + { changes1()->clear(); ASSERT_TRUE(wt_client2()->ReorderWindow(window_2_2, window_2_3, mojom::OrderDirection::ABOVE)); wt_client1_->WaitForChangeCount(1); - EXPECT_EQ("Reordered window=" + IdToString(window_2_2) + " relative=" + - IdToString(window_2_3) + " direction=above", + EXPECT_EQ("Reordered window=" + IdToString(window22_in_wt1) + " relative=" + + IdToString(window23_in_wt1) + " direction=above", SingleChangeToDescription(*changes1())); } @@ -1141,8 +1150,8 @@ mojom::OrderDirection::BELOW)); wt_client1_->WaitForChangeCount(1); - EXPECT_EQ("Reordered window=" + IdToString(window_2_2) + " relative=" + - IdToString(window_2_3) + " direction=below", + EXPECT_EQ("Reordered window=" + IdToString(window22_in_wt1) + " relative=" + + IdToString(window23_in_wt1) + " direction=below", SingleChangeToDescription(*changes1())); } @@ -1155,7 +1164,7 @@ mojom::OrderDirection::ABOVE)); // view6 & view3 have different parents. - EXPECT_FALSE(wt_client1()->ReorderWindow(window_2_3, window_2_6, + EXPECT_FALSE(wt_client1()->ReorderWindow(window23_in_wt1, window26_in_wt1, mojom::OrderDirection::ABOVE)); // Non-existent window-ids @@ -1164,7 +1173,7 @@ mojom::OrderDirection::ABOVE)); // view7 & view8 are un-parented. - EXPECT_FALSE(wt_client1()->ReorderWindow(window_2_7, window_2_8, + EXPECT_FALSE(wt_client1()->ReorderWindow(window27_in_wt1, window28_in_wt1, mojom::OrderDirection::ABOVE)); } @@ -1174,15 +1183,19 @@ Id window_1_1 = BuildWindowId(client_id_1(), 1); Id window_2_1 = wt_client2()->NewWindow(1); ASSERT_TRUE(window_2_1); + // window_2_1 is not created by wt1 so its client_id part is client_id_2, + // while window_1_1 would have 0 for the client_id part. + Id window21_in_wt1 = BuildWindowId(client_id_2(), LoWord(window_2_1)); // Make 2 a child of 1. { changes1()->clear(); ASSERT_TRUE(wt_client2()->AddWindow(window_1_1, window_2_1)); wt_client1_->WaitForChangeCount(1); - EXPECT_EQ("HierarchyChanged window=" + IdToString(window_2_1) + - " old_parent=null new_parent=" + IdToString(window_1_1), - SingleChangeToDescription(*changes1())); + EXPECT_EQ( + "HierarchyChanged window=" + IdToString(window21_in_wt1) + + " old_parent=null new_parent=" + IdToString(LoWord(window_1_1)), + SingleChangeToDescription(*changes1())); } // Delete 2. @@ -1193,7 +1206,7 @@ EXPECT_TRUE(changes2()->empty()); wt_client1_->WaitForChangeCount(1); - EXPECT_EQ("WindowDeleted window=" + IdToString(window_2_1), + EXPECT_EQ("WindowDeleted window=" + IdToString(window21_in_wt1), SingleChangeToDescription(*changes1())); } } @@ -1205,8 +1218,11 @@ EXPECT_TRUE(wt_client2()->DeleteWindow(window_1_1)); // Client1 should get OnEmbeddedAppDisconnected(). wt_client1_->WaitForChangeCount(1); - EXPECT_EQ("OnEmbeddedAppDisconnected window=" + IdToString(window_1_1), - SingleChangeToDescription(*changes1())); + // window_1_1 should have client_id of 0 in wt_client1 because it's created + // by wt_client1. + EXPECT_EQ( + "OnEmbeddedAppDisconnected window=" + IdToString(LoWord(window_1_1)), + SingleChangeToDescription(*changes1())); // Create a new window and try adding to |window_1_1| from client 2, should // fail as client 2 no longer knows about |window_1_1|. @@ -1248,16 +1264,21 @@ Id window_2_1 = wt_client2()->NewWindow(1); ASSERT_TRUE(window_2_1); + // wt1 created window_1_1 but not window_2_1. + Id window11_in_wt1 = LoWord(window_1_1); + Id window21_in_wt1 = BuildWindowId(client_id_2(), LoWord(window_2_1)); + // Add 2 to 1. { changes1()->clear(); ASSERT_TRUE(wt_client2()->AddWindow(window_1_1, window_2_1)); wt_client1_->WaitForChangeCount(1); - EXPECT_EQ("HierarchyChanged window=" + IdToString(window_2_1) + - " old_parent=null new_parent=" + IdToString(window_1_1), + EXPECT_EQ("HierarchyChanged window=" + IdToString(window21_in_wt1) + + " old_parent=null new_parent=" + IdToString(window11_in_wt1), SingleChangeToDescription(*changes1())); - EXPECT_EQ("[" + WindowParentToString(window_2_1, window_1_1) + "]", - ChangeWindowDescription(*changes1())); + EXPECT_EQ( + "[" + WindowParentToString(window21_in_wt1, window11_in_wt1) + "]", + ChangeWindowDescription(*changes1())); } // Delete 2. @@ -1266,23 +1287,25 @@ ASSERT_TRUE(wt_client2()->DeleteWindow(window_2_1)); wt_client1_->WaitForChangeCount(1); - EXPECT_EQ("WindowDeleted window=" + IdToString(window_2_1), + EXPECT_EQ("WindowDeleted window=" + IdToString(window21_in_wt1), SingleChangeToDescription(*changes1())); } // Create 2 again, and add it back to 1. Should get the same notification. window_2_1 = wt_client2()->NewWindow(2); + window21_in_wt1 = BuildWindowId(HiWord(window21_in_wt1), LoWord(window_2_1)); ASSERT_TRUE(window_2_1); { changes1()->clear(); ASSERT_TRUE(wt_client2()->AddWindow(window_1_1, window_2_1)); wt_client1_->WaitForChangeCount(1); - EXPECT_EQ("HierarchyChanged window=" + IdToString(window_2_1) + - " old_parent=null new_parent=" + IdToString(window_1_1), + EXPECT_EQ("HierarchyChanged window=" + IdToString(window21_in_wt1) + + " old_parent=null new_parent=" + IdToString(window11_in_wt1), SingleChangeToDescription(*changes1())); - EXPECT_EQ("[" + WindowParentToString(window_2_1, window_1_1) + "]", - ChangeWindowDescription(*changes1())); + EXPECT_EQ( + "[" + WindowParentToString(window21_in_wt1, window11_in_wt1) + "]", + ChangeWindowDescription(*changes1())); } } @@ -1305,6 +1328,12 @@ ASSERT_TRUE(wt_client2()->AddWindow(window_1_1, window_2_1)); ASSERT_TRUE(wt_client2()->AddWindow(window_1_1, window_2_2)); + // wt1 created window_1_1 and window_1_11, but not window_2_1 and window_2_2. + Id window11_in_wt1 = LoWord(window_1_1); + Id window111_in_wt1 = LoWord(window_1_11); + Id window21_in_wt1 = BuildWindowId(client_id_2(), LoWord(window_2_1)); + Id window22_in_wt1 = BuildWindowId(client_id_2(), LoWord(window_2_2)); + // Verifies GetWindowTree() on the root. The root client sees all. { std::vector<TestWindow> windows; @@ -1312,13 +1341,13 @@ ASSERT_EQ(5u, windows.size()); EXPECT_EQ(WindowParentToString(root_window_id(), kNullParentId), windows[0].ToString()); - EXPECT_EQ(WindowParentToString(window_1_1, root_window_id()), + EXPECT_EQ(WindowParentToString(window11_in_wt1, root_window_id()), windows[1].ToString()); - EXPECT_EQ(WindowParentToString(window_1_11, window_1_1), + EXPECT_EQ(WindowParentToString(window111_in_wt1, window11_in_wt1), windows[2].ToString()); - EXPECT_EQ(WindowParentToString(window_2_1, window_1_1), + EXPECT_EQ(WindowParentToString(window21_in_wt1, window11_in_wt1), windows[3].ToString()); - EXPECT_EQ(WindowParentToString(window_2_2, window_1_1), + EXPECT_EQ(WindowParentToString(window22_in_wt1, window11_in_wt1), windows[4].ToString()); } @@ -1363,14 +1392,17 @@ ASSERT_TRUE(wt_client1()->WaitForChangeCompleted(10)); wt_client2_->WaitForChangeCount(1); - EXPECT_EQ("BoundsChanged window=" + IdToString(window_1_1) + + // window_1_1 has a client_id part of client_id_1 in wt2. + Id window11_in_wt2 = BuildWindowId(client_id_1(), LoWord(window_1_1)); + EXPECT_EQ("BoundsChanged window=" + IdToString(window11_in_wt2) + " old_bounds=0,0 0x0 new_bounds=0,0 100x100 local_surface_id=" + local_surface_id.ToString(), SingleChangeToDescription(*changes2())); // Should not be possible to change the bounds of a window created by another // client. - wt2()->SetWindowBounds(11, window_1_1, gfx::Rect(0, 0, 0, 0), base::nullopt); + wt2()->SetWindowBounds(11, window11_in_wt2, gfx::Rect(0, 0, 0, 0), + base::nullopt); ASSERT_FALSE(wt_client2()->WaitForChangeCompleted(11)); } @@ -1461,9 +1493,10 @@ ASSERT_TRUE(windows.empty()); // Should get window 1 if asked for. - GetWindowTree(wt2(), window_1_1, &windows); + Id window11_in_wt2 = BuildWindowId(client_id_1(), LoWord(window_1_1)); + GetWindowTree(wt2(), window11_in_wt2, &windows); ASSERT_EQ(1u, windows.size()); - EXPECT_EQ(WindowParentToString(window_1_1, kNullParentId), + EXPECT_EQ(WindowParentToString(window11_in_wt2, kNullParentId), windows[0].ToString()); } @@ -1507,11 +1540,15 @@ ASSERT_TRUE(window_3_1); ASSERT_TRUE(wt_client3()->AddWindow(window_1_1, window_3_1)); + // wt1 created window_1_1 but not window_3_1. + Id window11_in_wt1 = LoWord(window_1_1); + Id window31_in_wt1 = BuildWindowId(3, LoWord(window_3_1)); + // Client 1 should have been told about the add (it owns the window). { wt_client1_->WaitForChangeCount(1); - EXPECT_EQ("HierarchyChanged window=" + IdToString(window_3_1) + - " old_parent=null new_parent=" + IdToString(window_1_1), + EXPECT_EQ("HierarchyChanged window=" + IdToString(window31_in_wt1) + + " old_parent=null new_parent=" + IdToString(window11_in_wt1), SingleChangeToDescription(*changes1())); } @@ -1521,7 +1558,7 @@ // We should get a new client for the new embedding. std::unique_ptr<TestWindowTreeClient> client4( - EstablishClientViaEmbed(wt1(), window_1_1, nullptr)); + EstablishClientViaEmbed(wt1(), window_1_1)); ASSERT_TRUE(client4.get()); EXPECT_EQ("[" + WindowParentToString(window_1_1, kNullParentId) + "]", ChangeWindowDescription(*client4->tracker()->changes())); @@ -1547,7 +1584,7 @@ std::vector<TestWindow> windows; GetWindowTree(wt1(), window_1_1, &windows); ASSERT_EQ(1u, windows.size()); - EXPECT_EQ(WindowParentToString(window_1_1, kNullParentId), + EXPECT_EQ(WindowParentToString(window11_in_wt1, kNullParentId), windows[0].ToString()); } @@ -1672,7 +1709,9 @@ Id window_2_1 = wt_client2()->NewWindow(1); ASSERT_TRUE(window_2_1); ASSERT_TRUE(wt_client2()->SetWindowVisibility(window_2_1, true)); - ASSERT_TRUE(wt_client2()->AddWindow(window_1_2, window_2_1)); + // window_1_2 has a client_id part of client_id_1 in wt2. + Id window12_in_wt2 = BuildWindowId(client_id_1(), LoWord(window_1_2)); + ASSERT_TRUE(wt_client2()->AddWindow(window12_in_wt2, window_2_1)); ASSERT_TRUE(wt_client1()->WaitForAllMessages()); changes2()->clear(); @@ -1680,14 +1719,14 @@ ASSERT_TRUE(wt_client1()->SetWindowVisibility(window_1_2, false)); { wt_client2_->WaitForChangeCount(1); - EXPECT_EQ( - "VisibilityChanged window=" + IdToString(window_1_2) + " visible=false", - SingleChangeToDescription(*changes2())); + EXPECT_EQ("VisibilityChanged window=" + IdToString(window12_in_wt2) + + " visible=false", + SingleChangeToDescription(*changes2())); } changes1()->clear(); // Show 1,2 from client 2, client 1 should be notified. - ASSERT_TRUE(wt_client2()->SetWindowVisibility(window_1_2, true)); + ASSERT_TRUE(wt_client2()->SetWindowVisibility(window12_in_wt2, true)); { wt_client1_->WaitForChangeCount(1); EXPECT_EQ( @@ -1700,9 +1739,9 @@ ASSERT_TRUE(wt_client1()->SetWindowVisibility(window_1_1, false)); { wt_client2_->WaitForChangeCount(1); - EXPECT_EQ( - "DrawnStateChanged window=" + IdToString(window_1_2) + " drawn=false", - SingleChangeToDescription(*changes2())); + EXPECT_EQ("DrawnStateChanged window=" + IdToString(window12_in_wt2) + + " drawn=false", + SingleChangeToDescription(*changes2())); } changes2()->clear(); @@ -1710,9 +1749,9 @@ ASSERT_TRUE(wt_client1()->SetWindowVisibility(window_1_1, true)); { wt_client2_->WaitForChangeCount(1); - EXPECT_EQ( - "DrawnStateChanged window=" + IdToString(window_1_2) + " drawn=true", - SingleChangeToDescription(*changes2())); + EXPECT_EQ("DrawnStateChanged window=" + IdToString(window12_in_wt2) + + " drawn=true", + SingleChangeToDescription(*changes2())); } // Change visibility of 2,3, client 1 should see this. @@ -1720,9 +1759,10 @@ ASSERT_TRUE(wt_client2()->SetWindowVisibility(window_2_1, false)); { wt_client1_->WaitForChangeCount(1); - EXPECT_EQ( - "VisibilityChanged window=" + IdToString(window_2_1) + " visible=false", - SingleChangeToDescription(*changes1())); + EXPECT_EQ("VisibilityChanged window=" + + IdToString(BuildWindowId(client_id_2(), LoWord(window_2_1))) + + " visible=false", + SingleChangeToDescription(*changes1())); } changes2()->clear(); @@ -1730,9 +1770,9 @@ ASSERT_TRUE(wt_client1()->RemoveWindowFromParent(window_1_1)); { wt_client2_->WaitForChangeCount(1); - EXPECT_EQ( - "DrawnStateChanged window=" + IdToString(window_1_2) + " drawn=false", - SingleChangeToDescription(*changes2())); + EXPECT_EQ("DrawnStateChanged window=" + IdToString(window12_in_wt2) + + " drawn=false", + SingleChangeToDescription(*changes2())); } changes2()->clear(); @@ -1740,9 +1780,9 @@ ASSERT_TRUE(wt_client1()->AddWindow(root_window_id(), window_1_1)); { wt_client2_->WaitForChangeCount(1); - EXPECT_EQ( - "DrawnStateChanged window=" + IdToString(window_1_2) + " drawn=true", - SingleChangeToDescription(*changes2())); + EXPECT_EQ("DrawnStateChanged window=" + IdToString(window12_in_wt2) + + " drawn=true", + SingleChangeToDescription(*changes2())); } } @@ -1759,6 +1799,8 @@ // Establish the second client at 1,2. ASSERT_NO_FATAL_FAILURE(EstablishSecondClientWithRoot(window_1_2)); + // window_1_2 has a client_id part of client_id_1 in wt2. + Id window12_in_wt2 = BuildWindowId(client_id_1(), LoWord(window_1_2)); EXPECT_EQ("OnEmbed drawn=true", SingleChangeToDescription2(*changes2())); changes2()->clear(); @@ -1766,9 +1808,9 @@ ASSERT_TRUE(wt_client1()->SetWindowVisibility(window_1_2, true)); { wt_client2_->WaitForChangeCount(1); - EXPECT_EQ( - "VisibilityChanged window=" + IdToString(window_1_2) + " visible=true", - SingleChangeToDescription(*changes2())); + EXPECT_EQ("VisibilityChanged window=" + IdToString(window12_in_wt2) + + " visible=true", + SingleChangeToDescription(*changes2())); } } @@ -1787,6 +1829,8 @@ // window ID. This is likely bad from a security perspective and should be // fixed. ASSERT_NO_FATAL_FAILURE(EstablishSecondClientWithRoot(window_1_2)); + // window_1_2 has a client_id part of client_id_1 in wt2. + Id window12_in_wt2 = BuildWindowId(client_id_1(), LoWord(window_1_2)); EXPECT_EQ("OnEmbed drawn=false", SingleChangeToDescription2(*changes2())); changes2()->clear(); @@ -1794,9 +1838,9 @@ ASSERT_TRUE(wt_client1()->SetWindowVisibility(window_1_1, true)); { wt_client2_->WaitForChangeCount(1); - EXPECT_EQ( - "DrawnStateChanged window=" + IdToString(window_1_2) + " drawn=true", - SingleChangeToDescription(*changes2())); + EXPECT_EQ("DrawnStateChanged window=" + IdToString(window12_in_wt2) + + " drawn=true", + SingleChangeToDescription(*changes2())); } changes2()->clear(); @@ -1804,9 +1848,9 @@ ASSERT_TRUE(wt_client1()->SetWindowVisibility(window_1_2, true)); { wt_client2_->WaitForChangeCount(1); - EXPECT_EQ( - "VisibilityChanged window=" + IdToString(window_1_2) + " visible=true", - SingleChangeToDescription(*changes2())); + EXPECT_EQ("VisibilityChanged window=" + IdToString(window12_in_wt2) + + " visible=true", + SingleChangeToDescription(*changes2())); } } @@ -1820,7 +1864,9 @@ ASSERT_NO_FATAL_FAILURE(EstablishSecondClientWithRoot(window_1_1)); Id window_2_1 = wt_client2()->NewWindow(1); ASSERT_TRUE(window_2_1); - ASSERT_TRUE(wt_client2()->AddWindow(window_1_1, window_2_1)); + // window_1_1 has a client_id part of client_id_1 in wt2. + Id window11_in_wt2 = BuildWindowId(client_id_1(), LoWord(window_1_1)); + ASSERT_TRUE(wt_client2()->AddWindow(window11_in_wt2, window_2_1)); ASSERT_TRUE(wt_client1()->WaitForAllMessages()); changes1()->clear(); @@ -1829,9 +1875,9 @@ ASSERT_TRUE(wt_client1()->SetWindowOpacity(window_1_1, 0.5f)); EXPECT_TRUE(changes1()->empty()); wt_client2()->WaitForChangeCount(1); - EXPECT_EQ( - "OpacityChanged window_id=" + IdToString(window_1_1) + " opacity=0.50", - SingleChangeToDescription(*changes2())); + EXPECT_EQ("OpacityChanged window_id=" + IdToString(window11_in_wt2) + + " opacity=0.50", + SingleChangeToDescription(*changes2())); changes2()->clear(); // Attempting to set the same opacity should succeed, but no notification as @@ -1863,11 +1909,13 @@ changes2()->clear(); std::vector<uint8_t> one(1, '1'); ASSERT_TRUE(wt_client1()->SetWindowProperty(window_1_1, "one", &one)); + // window_1_1 has a client_id part of client_id_1 in wt2. + Id window11_in_wt2 = BuildWindowId(client_id_1(), LoWord(window_1_1)); { wt_client2_->WaitForChangeCount(1); - EXPECT_EQ( - "PropertyChanged window=" + IdToString(window_1_1) + " key=one value=1", - SingleChangeToDescription(*changes2())); + EXPECT_EQ("PropertyChanged window=" + IdToString(window11_in_wt2) + + " key=one value=1", + SingleChangeToDescription(*changes2())); } // Test that our properties exist in the window tree @@ -1884,7 +1932,7 @@ ASSERT_TRUE(wt_client1()->SetWindowProperty(window_1_1, "one", NULL)); { wt_client2_->WaitForChangeCount(1); - EXPECT_EQ("PropertyChanged window=" + IdToString(window_1_1) + + EXPECT_EQ("PropertyChanged window=" + IdToString(window11_in_wt2) + " key=one value=NULL", SingleChangeToDescription(*changes2())); } @@ -1937,7 +1985,9 @@ // Close client 2. Client 3 should get a delete (for its root). wt_client2_.reset(); wt_client3_->WaitForChangeCount(1); - EXPECT_EQ("WindowDeleted window=" + IdToString(window_2_2), + // window_2_2 has a client_id part of client_id_2 in wt3. + EXPECT_EQ("WindowDeleted window=" + + IdToString(BuildWindowId(client_id_2(), LoWord(window_2_2))), SingleChangeToDescription(*changes3())); } @@ -1950,8 +2000,10 @@ changes1()->clear(); wt_client2_.reset(); wt_client1_->WaitForChangeCount(1); - EXPECT_EQ("OnEmbeddedAppDisconnected window=" + IdToString(window_1_1), - SingleChangeToDescription(*changes1())); + // window_1_1 is created by wt1 so client_id part would be 0. + EXPECT_EQ( + "OnEmbeddedAppDisconnected window=" + IdToString(LoWord(window_1_1)), + SingleChangeToDescription(*changes1())); std::vector<TestWindow> windows; GetWindowTree(wt1(), window_1_1, &windows); EXPECT_FALSE(windows.empty()); @@ -1983,7 +2035,9 @@ Id window_3_3 = wt_client3()->NewWindow(3); ASSERT_TRUE(window_3_3); - ASSERT_TRUE(wt_client3()->AddWindow(window_2_1, window_3_3)); + // window_2_1 should have client_id of client_id_2 in wt_client3. + ASSERT_TRUE(wt_client3()->AddWindow( + BuildWindowId(client_id_2(), LoWord(window_2_1)), window_3_3)); // 2 should not be able to embed in window_3_3 as window_3_3 was not created // by @@ -2002,8 +2056,10 @@ changes2()->clear(); - // Establish a third client in window_2_1. - ASSERT_NO_FATAL_FAILURE(EstablishThirdClient(wt1(), window_2_1)); + // Establish a third client in window_2_1. window_2_1 has a client_id of + // client_id_2 for other clients. + ASSERT_NO_FATAL_FAILURE(EstablishThirdClient( + wt1(), BuildWindowId(client_id_2(), LoWord(window_2_1)))); ASSERT_TRUE(wt_client2()->WaitForAllMessages()); EXPECT_EQ(std::string(), SingleChangeToDescription(*changes2())); @@ -2031,8 +2087,7 @@ ASSERT_TRUE( wt_client1()->AddWindow(BuildWindowId(client_id_1(), 1), window_1_2)); ASSERT_TRUE(wt_client3_.get() == nullptr); - wt_client3_ = - EstablishClientViaEmbedWithPolicyBitmask(wt1(), window_1_2, nullptr); + wt_client3_ = EstablishClientViaEmbedWithPolicyBitmask(wt1(), window_1_2); ASSERT_TRUE(wt_client3_.get() != nullptr); // window_1_2 is ws3's root, so even though v3 is an embed root it should not @@ -2049,6 +2104,10 @@ Id window_2_2 = wt_client2()->NewWindow(2); Id window_2_3 = wt_client2()->NewWindow(3); ASSERT_TRUE(window_2_1); + // window_2_* has a client_id part of client_id_2 in wt1. + Id window21_in_wt1 = BuildWindowId(client_id_2(), LoWord(window_2_1)); + Id window22_in_wt1 = BuildWindowId(client_id_2(), LoWord(window_2_2)); + Id window23_in_wt1 = BuildWindowId(client_id_2(), LoWord(window_2_3)); // root -> window_1_1 -> window_2_1 // root -> window_1_1 -> window_2_2 @@ -2063,26 +2122,27 @@ wt2()->AddTransientWindow(10, window_2_1, window_2_2); wt2()->AddTransientWindow(11, window_2_1, window_2_3); wt_client1()->WaitForChangeCount(2); - EXPECT_EQ("AddTransientWindow parent = " + IdToString(window_2_1) + - " child = " + IdToString(window_2_2), + EXPECT_EQ("AddTransientWindow parent = " + IdToString(window21_in_wt1) + + " child = " + IdToString(window22_in_wt1), ChangesToDescription1(*changes1())[0]); - EXPECT_EQ("AddTransientWindow parent = " + IdToString(window_2_1) + - " child = " + IdToString(window_2_3), + EXPECT_EQ("AddTransientWindow parent = " + IdToString(window21_in_wt1) + + " child = " + IdToString(window23_in_wt1), ChangesToDescription1(*changes1())[1]); changes1()->clear(); wt2()->RemoveTransientWindowFromParent(12, window_2_3); wt_client1()->WaitForChangeCount(1); EXPECT_EQ("RemoveTransientWindowFromParent parent = " + - IdToString(window_2_1) + " child = " + IdToString(window_2_3), + IdToString(window21_in_wt1) + + " child = " + IdToString(window23_in_wt1), SingleChangeToDescription(*changes1())); changes1()->clear(); ASSERT_TRUE(wt_client2()->DeleteWindow(window_2_1)); wt_client1()->WaitForChangeCount(2); - EXPECT_EQ("WindowDeleted window=" + IdToString(window_2_2), + EXPECT_EQ("WindowDeleted window=" + IdToString(window22_in_wt1), ChangesToDescription1(*changes1())[0]); - EXPECT_EQ("WindowDeleted window=" + IdToString(window_2_1), + EXPECT_EQ("WindowDeleted window=" + IdToString(window21_in_wt1), ChangesToDescription1(*changes1())[1]); }
diff --git a/services/ui/ws/window_tree_unittest.cc b/services/ui/ws/window_tree_unittest.cc index b3e3bd6..32f5ca91 100644 --- a/services/ui/ws/window_tree_unittest.cc +++ b/services/ui/ws/window_tree_unittest.cc
@@ -57,7 +57,7 @@ ClientWindowId BuildClientWindowId(WindowTree* tree, ClientSpecificId window_id) { - return ClientWindowId(WindowIdToTransportId(WindowId(tree->id(), window_id))); + return ClientWindowId(tree->id(), window_id); } // ----------------------------------------------------------------------------- @@ -282,7 +282,9 @@ DispatchEventAndAckImmediately(CreatePointerDownEvent(21, 22)); ASSERT_EQ(0u, wm_client()->tracker()->changes()->size()); ASSERT_EQ(1u, embed_client->tracker()->changes()->size()); - EXPECT_EQ("InputEvent window=2,1 event_action=16", + // embed_client created this window that is receiving the event, so client_id + // part would be reset to 0 before sending back to clients. + EXPECT_EQ("InputEvent window=0,1 event_action=16", ChangesToDescription1(*embed_client->tracker()->changes())[0]); } @@ -415,7 +417,9 @@ // watcher. DispatchEventAndAckImmediately(pointer_up); ASSERT_EQ(1u, client->tracker()->changes()->size()); - EXPECT_EQ("InputEvent window=2,1 event_action=18 matches_pointer_watcher", + // clients that created this window is receiving the event, so client_id part + // would be reset to 0 before sending back to clients. + EXPECT_EQ("InputEvent window=0,1 event_action=18 matches_pointer_watcher", SingleChangeToDescription(*client->tracker()->changes())); } @@ -449,6 +453,8 @@ ui::KeyEvent key_pressed(ui::ET_KEY_PRESSED, ui::VKEY_A, ui::EF_NONE); DispatchEventAndAckImmediately(key_pressed); EXPECT_EQ(0u, other_binding->client()->tracker()->changes()->size()); + // clients that created this window is receiving the event, so client_id part + // would be reset to 0 before sending back to clients. EXPECT_EQ("InputEvent window=0,3 event_action=7", SingleChangeToDescription(*wm_client()->tracker()->changes())); @@ -461,6 +467,8 @@ TEST_F(WindowTreeTest, KeyEventSentToWindowManagerWhenNothingFocused) { ui::KeyEvent key_pressed(ui::ET_KEY_PRESSED, ui::VKEY_A, ui::EF_NONE); DispatchEventAndAckImmediately(key_pressed); + // clients that created this window is receiving the event, so client_id part + // would be reset to 0 before sending back to clients. EXPECT_EQ("InputEvent window=0,3 event_action=7", SingleChangeToDescription(*wm_client()->tracker()->changes())); } @@ -634,6 +642,8 @@ wm_client()->tracker()->changes()->clear(); DispatchEventWithoutAck(CreateMouseMoveEvent(21, 22)); ASSERT_EQ(1u, wm_client()->tracker()->changes()->size()); + // clients that created this window is receiving the event, so client_id part + // would be reset to 0 before sending back to clients. EXPECT_EQ("InputEvent window=0,3 event_action=17", ChangesToDescription1(*wm_client()->tracker()->changes())[0]); wm_client()->tracker()->changes()->clear(); @@ -834,16 +844,21 @@ // Set capture. mojom::WindowTree* mojom_window_tree = static_cast<mojom::WindowTree*>(tree); uint32_t change_id = 42; - mojom_window_tree->SetCapture(change_id, WindowIdToTransportId(window->id())); + WindowId window_id = window->id(); + mojom_window_tree->SetCapture( + change_id, ClientWindowId(window_id.client_id, window_id.window_id).id); Display* display = tree->GetDisplay(window); EXPECT_EQ(window, GetCaptureWindow(display)); // Only the capture window should be able to release capture - mojom_window_tree->ReleaseCapture(++change_id, - WindowIdToTransportId(root_window->id())); + WindowId root_window_id = root_window->id(); + mojom_window_tree->ReleaseCapture( + ++change_id, + ClientWindowId(root_window_id.client_id, root_window_id.window_id).id); EXPECT_EQ(window, GetCaptureWindow(display)); - mojom_window_tree->ReleaseCapture(++change_id, - WindowIdToTransportId(window->id())); + + mojom_window_tree->ReleaseCapture( + ++change_id, ClientWindowId(window_id.client_id, window_id.window_id).id); EXPECT_EQ(nullptr, GetCaptureWindow(display)); } @@ -1180,7 +1195,7 @@ ASSERT_NE(new_opacity, unknown_window.opacity()); EXPECT_FALSE(tree->SetWindowOpacity( - ClientWindowId(WindowIdToTransportId(window_id)), new_opacity)); + ClientWindowId(window_id.client_id, window_id.window_id), new_opacity)); EXPECT_NE(new_opacity, unknown_window.opacity()); }
diff --git a/storage/browser/blob/blob_impl_unittest.cc b/storage/browser/blob/blob_impl_unittest.cc index 19bdc45..cee7d9c 100644 --- a/storage/browser/blob/blob_impl_unittest.cc +++ b/storage/browser/blob/blob_impl_unittest.cc
@@ -4,6 +4,7 @@ #include "storage/browser/blob/blob_impl.h" +#include "base/run_loop.h" #include "base/task_scheduler/post_task.h" #include "base/test/scoped_task_environment.h" #include "mojo/common/data_pipe_drainer.h"
diff --git a/storage/browser/blob/blob_registry_impl_unittest.cc b/storage/browser/blob/blob_registry_impl_unittest.cc index 0f0e3c8..e695e57 100644 --- a/storage/browser/blob/blob_registry_impl_unittest.cc +++ b/storage/browser/blob/blob_registry_impl_unittest.cc
@@ -7,6 +7,7 @@ #include <limits> #include "base/files/scoped_temp_dir.h" #include "base/rand_util.h" +#include "base/run_loop.h" #include "base/task_scheduler/post_task.h" #include "base/test/scoped_task_environment.h" #include "base/threading/thread_restrictions.h"
diff --git a/testing/android/docs/instrumentation.md b/testing/android/docs/instrumentation.md index cfd9f0c..bfba189 100644 --- a/testing/android/docs/instrumentation.md +++ b/testing/android/docs/instrumentation.md
@@ -186,9 +186,9 @@ allows for conditional test disabling based on whether a device is a phone, a tablet, or a "large tablet" as determined by [org.chromium.ui.base.DeviceFormFactor](https://chromium.googlesource.com/chromium/src/+/master/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java). -Note that this is currently only available to tests in -[//chrome](https://chromium.googlesource.com/chromium/src/+/master/chrome/) -or code that uses //chrome. +This is available to tests in +[//ui](https://chromium.googlesource.com/chromium/src/+/master/ui/) +or code that uses //ui. ```java @DisableIf.Device( @@ -221,14 +221,15 @@ // - ChromeRestriction.RESTRICTION_TYPE_GOOGLE_PLAY_SERVICES // Restricts the test to devices with up-to-date versions of Google Play Services. // - // - ChromeRestriction.RESTRICTION_TYPE_PHONE - // Restricts the test to phones as determined by DeviceFormFactor. - // - // - ChromeRestriction.RESTRICTION_TYPE_TABLET - // Restricts the test to tablets as determined by DeviceFormFactor. - // // - ChromeRestriction.RESTRICTION_TYPE_OFFICIAL_BUILD // Restricts the test to official builds as determined by ChromeVersionInfo.isOfficialBuild(). + // + // ui: + // - UiRestriction.RESTRICTION_TYPE_PHONE + // Restricts the test to phones as determined by DeviceFormFactor. + // + // - UiRestriction.RESTRICTION_TYPE_TABLET + // Restricts the test to tablets as determined by DeviceFormFactor. value = {} ) ```
diff --git a/testing/buildbot/filters/fuchsia.content_unittests.filter b/testing/buildbot/filters/fuchsia.content_unittests.filter index 19d3b20..164d007 100644 --- a/testing/buildbot/filters/fuchsia.content_unittests.filter +++ b/testing/buildbot/filters/fuchsia.content_unittests.filter
@@ -1,10 +1,6 @@ # Being ported, https://crbug.com/754861. -AudioRendererSinkCacheTest.SmokeTest --BaseFileTest.ReadonlyBaseFile --BaseFileTest.RenameWithError --BaseFileTest.RenameWithErrorInProgress --BlobTransportControllerTest.Disk -BrowserThreadTest.PostTask -BrowserThreadTest.PostTaskAndReply -BrowserThreadTest.PostTaskViaTaskRunner @@ -15,36 +11,14 @@ -BrowsingDataRemoverImplTest.MultipleTasks -CacheStorageManagerTest.GetAllOriginsUsageWithOldIndex -ChildMemoryCoordinatorImplTest.MultipleClients --DownloadFile/DownloadFileTestWithRename.RenameError/0 --DownloadFile/DownloadFileTestWithRename.RenameError/1 --DownloadFile/DownloadFileTestWithRename.RenameWithErrorRetry/0 --DownloadFile/DownloadFileTestWithRename.RenameWithErrorRetry/1 --GpuDataManagerImplPrivateTest.BlacklistAllFeatures --GpuDataManagerImplPrivateTest.GpuSideBlacklisting --GpuDataManagerImplPrivateTest.GpuSideBlacklistingWebGL --GpuDataManagerImplPrivateTest.GpuSideExceptions --GpuDataManagerImplPrivateTest.UpdateActiveGpu -LegacyInputRouterImplTest.AckedTouchEventState -MediaStreamManagerTest.MakeAndCancelMultipleRequests -MediaStreamManagerTest.MakeMediaAccessRequest -MediaStreamManagerTest.MakeMultipleRequests --PageStateSerializationTest.BackwardsCompat_v11 --PageStateSerializationTest.BackwardsCompat_v12 --PageStateSerializationTest.BackwardsCompat_v13 --PageStateSerializationTest.BackwardsCompat_v14 --PageStateSerializationTest.BackwardsCompat_v15 --PageStateSerializationTest.BackwardsCompat_v16 --PageStateSerializationTest.BackwardsCompat_v18 --PageStateSerializationTest.BackwardsCompat_v20 --PageStateSerializationTest.BackwardsCompat_v21 --PageStateSerializationTest.BackwardsCompat_v22 --PageStateSerializationTest.BackwardsCompat_v23 --PageStateSerializationTest.BackwardsCompat_v24 -RenderWidgetHostViewAuraCopyRequestTest.DedupeFrameSubscriberRequests -RenderWidgetHostViewAuraCopyRequestTest.DestroyedAfterCopyRequest -RenderWidgetHostViewAuraCopyRequestTest.PresentTime -RendererAudioOutputStreamFactoryIntegrationTest.StreamIntegrationTest --ServiceWorkerContextRecoveryTest/ServiceWorkerContextRecoveryTest.DeleteAndStartOver/0 -ServiceWorkerDatabaseTest.DatabaseVersion_CorruptedSchemaVersion -ServiceWorkerProviderHostTest.ActiveIsNotController -URLLoaderFactoryImplTest/URLLoaderFactoryImplTest.DownloadToFile/0 @@ -64,10 +38,21 @@ -URLLoaderImplTest.SniffMimeType -WebContentsAudioInputStreamTest.MirroringOneStreamAfterTargetChange/0 +# These rely on chmod() for MakeFileUnread/writable(), https://crbug.com/759853. +-BaseFileTest.ReadonlyBaseFile +-BaseFileTest.RenameWithError +-BaseFileTest.RenameWithErrorInProgress +-BlobTransportControllerTest.Disk +-DownloadFile/DownloadFileTestWithRename.RenameError/0 +-DownloadFile/DownloadFileTestWithRename.RenameError/1 +-DownloadFile/DownloadFileTestWithRename.RenameWithErrorRetry/0 +-DownloadFile/DownloadFileTestWithRename.RenameWithErrorRetry/1 + # lstat() errno is incorrect for empty file, https://crbug.com/759691. -BackgroundSyncManagerTest.DeleteAndStartOverServiceWorkerContext -BackgroundSyncManagerTest.DisabledManagerWorksAfterDeleteAndStartOver -BackgroundSyncManagerTest.DisabledPermanently +-ServiceWorkerContextRecoveryTest/ServiceWorkerContextRecoveryTest.DeleteAndStartOver/0 # See https://crbug.com/758634 on advisory file locks. -AppCacheDatabaseTest.ExperimentalFlags
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG index 37c6216..fb51884 100644 --- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG +++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
@@ -4022,6 +4022,7 @@ crbug.com/591099 external/wpt/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-8.htm [ Crash Timeout ] crbug.com/591099 external/wpt/html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-9.htm [ Timeout ] crbug.com/591099 external/wpt/http/basic-auth-cache-test.html [ Crash Timeout ] +crbug.com/591099 external/wpt/imagebitmap/createImageBitmap-invalid-args.html [ Failure ] crbug.com/591099 external/wpt/innerText/getter.html [ Crash Failure ] crbug.com/591099 external/wpt/intersection-observer/edge-inclusive-intersection.html [ Failure ] crbug.com/591099 external/wpt/intersection-observer/remove-element.html [ Failure ] @@ -4548,7 +4549,6 @@ crbug.com/591099 fast/canvas/canvas-createImageBitmap-drawImage.html [ Timeout ] crbug.com/591099 fast/canvas/canvas-createImageBitmap-from-canvas-toBlob.html [ Failure ] crbug.com/591099 fast/canvas/canvas-createImageBitmap-invalid-args-in-workers.html [ Failure ] -crbug.com/591099 fast/canvas/canvas-createImageBitmap-invalid-args.html [ Failure ] crbug.com/591099 fast/canvas/canvas-createImageBitmap-invalid-blob-in-workers.html [ Failure ] crbug.com/591099 fast/canvas/canvas-createImageBitmap-recursive.html [ Failure Timeout ] crbug.com/591099 fast/canvas/canvas-createImageBitmap-svg-no-intrinsic-size.html [ Failure ] @@ -11659,93 +11659,6 @@ crbug.com/591099 http/tests/devtools/sources/debugger-async/async-await/async-callstack-async-await2.js [ Failure Pass ] crbug.com/591099 http/tests/devtools/sources/debugger-async/async-await/async-callstack-async-await3.js [ Crash Failure Pass ] crbug.com/591099 http/tests/devtools/sources/debugger-async/async-await/async-pause-on-exception.js [ Crash Failure Pass ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-events.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-get-as-string.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-in-console.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-indexed-db.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-middle-run.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-mutation-observer.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-post-message.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-promises.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-reload-no-crash.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-scripted-scroll.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-set-interval.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-web-sql.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-xhrs.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/breakpoint-manager-listeners-count.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/breakpoint-manager.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/breakpoints-in-anonymous-script-with-two-targets.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/debugger-breakpoints-not-activated-on-reload.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/debugger-disable-add-breakpoint.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/debugger-reload-breakpoints-with-source-maps.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/debugger-set-breakpoint-regex.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/disable-breakpoints.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/dom-breakpoints-editing-dom-from-inspector.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/dom-breakpoints.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/dynamic-scripts-breakpoints.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints-after-suspension.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints-script-first-stmt.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints-xhr.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/nodejs-set-breakpoint.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/possible-breakpoints.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/set-breakpoint.html [ Failure Timeout ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/set-conditional-breakpoint.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/use-possible-breakpoints-to-resolve-breakpoint.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/xhr-breakpoints.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-console/debug-console-command.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-console/debugger-command-line-api.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-blackbox-by-source-code.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-blackbox-patterns.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-dom-xhr-event-breakpoints.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-jquery.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-skip-break-program.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-skip-exceptions.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-skip-step-in.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-sourcemap.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-step-into-skips-setTimeout.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-steppings.html [ Crash Failure Timeout ] -crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-with-async-callstack.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-with-worker.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debug-inlined-scripts-fragment-id.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-autocontinue-on-syntax-error.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-compile-and-run.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-completions-on-call-frame.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-cyclic-reference.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-disable-enable.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-es6-harmony-scopes.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-minified-variables-evalution.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-proto-property.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-reload-on-pause.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-return-value.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-scope-minified-variables.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-scope-resolve-identifiers.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-scope-resolve-this.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-scripts-reload.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-scripts.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/debugger-suspend-active-dom-objects.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/dont-report-injected-script.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/dynamic-script-tag.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/dynamic-scripts.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/extract-javascript-identifiers.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/js-with-inline-stylesheets.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/live-edit-breakpoints.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/live-edit-no-reveal.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/live-edit-original-content.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/live-edit.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/mutation-observer-suspend-while-paused.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/navigator-view.html [ Failure Timeout ] -crbug.com/591099 http/tests/devtools/sources/debugger/network-uisourcecode-provider.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/open-close-open.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/properties-special.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/resource-script-mapping.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/rethrow-error-from-bindings-crash.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/script-collected.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/script-failed-to-parse.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/source-frame-breakpoint-decorations.html [ Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/source-frame-inline-breakpoint-decorations.html [ Crash Failure ] -crbug.com/591099 http/tests/devtools/sources/debugger/sources-panel-content-scripts.html [ Crash Failure ] crbug.com/591099 http/tests/dom/create-contextual-fragment-from-bodyless-svg-document-range.html [ Failure ] crbug.com/591099 http/tests/dom/create-contextual-fragment-from-svg-document-range.html [ Crash Failure ] crbug.com/591099 http/tests/dom/location-stringify.html [ Crash Failure ] @@ -13332,232 +13245,458 @@ crbug.com/591099 inspector/device-mode/device-mode-switching-devices.html [ Crash Failure Timeout ] crbug.com/591099 inspector/diff-module.html [ Failure ] crbug.com/591099 inspector/domdebugger/domdebugger-getEventListeners.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/editor/php-highlighter.html [ Crash Failure ] -crbug.com/591099 inspector/editor/text-editor-auto-whitespace-removing.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/editor/text-editor-block-indent.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/editor/text-editor-char-to-coordinates.html [ Crash Failure ] -crbug.com/591099 inspector/editor/text-editor-ctrl-d-1.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/editor/text-editor-ctrl-d-2.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/editor/text-editor-enter-behaviour.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/editor/text-editor-formatter.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/editor/text-editor-goto-matching-bracket.html [ Crash Failure ] -crbug.com/591099 inspector/editor/text-editor-home-button.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/editor/text-editor-indent-autodetection.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/editor/text-editor-line-breaks.html [ Crash Failure ] -crbug.com/591099 inspector/editor/text-editor-mark-clean.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/editor/text-editor-reveal-line.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/editor/text-editor-search-replace.html [ Crash Failure ] -crbug.com/591099 inspector/editor/text-editor-selection-to-search.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/editor/text-editor-smart-braces.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/editor/text-editor-token-at-position.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/editor/text-editor-word-jumps.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/accessibility/autocomplete-attribute.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/accessibility/edit-aria-attributes.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/attribute-modified-ns.html [ Crash Failure ] -crbug.com/591099 inspector/elements/bidi-dom-tree.html [ Crash Failure ] -crbug.com/591099 inspector/elements/breadcrumb-updates.html [ Crash Failure ] -crbug.com/591099 inspector/elements/dom-agent-query-selector.html [ Crash Failure ] -crbug.com/591099 inspector/elements/dom-search-crash.html [ Crash Failure ] -crbug.com/591099 inspector/elements/edit/delete-from-document.html [ Crash Failure ] -crbug.com/591099 inspector/elements/edit/edit-dom-actions-1.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/edit/edit-dom-actions-2.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/edit/edit-dom-actions-3.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/edit/edit-dom-actions-4.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/edit/edit-dom-actions-shadow-1.html [ Crash Failure ] -crbug.com/591099 inspector/elements/edit/edit-dom-actions-shadow-2.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/edit/edit-style-attribute.html [ Crash Failure ] -crbug.com/591099 inspector/elements/edit/edit-trimmed-attribute-value.html [ Crash Failure ] -crbug.com/591099 inspector/elements/edit/insert-node-collapsed.html [ Crash Failure ] -crbug.com/591099 inspector/elements/edit/perform-undo-undo.html [ Crash Failure ] -crbug.com/591099 inspector/elements/edit/remove-node.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/edit/set-attribute-non-html.svg [ Crash Failure ] -crbug.com/591099 inspector/elements/edit/set-attribute.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/edit/set-outer-html-2.html [ Crash Failure ] -crbug.com/591099 inspector/elements/edit/set-outer-html-body.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/edit/set-outer-html-for-xhtml.xhtml [ Crash Failure ] -crbug.com/591099 inspector/elements/edit/set-outer-html.html [ Crash Failure ] -crbug.com/591099 inspector/elements/edit/shadow-dom-modify-chardata.html [ Crash Failure ] -crbug.com/591099 inspector/elements/edit/switch-panels-while-editing-as-html.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/edit/undo-dom-edits-2.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/edit/undo-dom-edits.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/edit/undo-set-outer-html-2.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/edit/undo-set-outer-html.html [ Crash Failure ] -crbug.com/591099 inspector/elements/elements-css-path.html [ Crash Failure ] -crbug.com/591099 inspector/elements/elements-delete-inline-style.html [ Crash Failure ] -crbug.com/591099 inspector/elements/elements-img-tooltip.html [ Crash Failure ] -crbug.com/591099 inspector/elements/elements-inspect-iframe-from-different-domain.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/elements-panel-correct-case.html [ Crash Failure ] -crbug.com/591099 inspector/elements/elements-panel-limited-children.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/elements-panel-reload-assert.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/elements-panel-restore-selection-when-node-comes-later.html [ Crash Failure ] -crbug.com/591099 inspector/elements/elements-panel-rewrite-href.html [ Crash Failure ] -crbug.com/591099 inspector/elements/elements-panel-search.html [ Crash Failure ] -crbug.com/591099 inspector/elements/elements-panel-selection-after-delete.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/elements-panel-selection-on-refresh.html [ Crash Failure ] -crbug.com/591099 inspector/elements/elements-panel-structure.html [ Crash Failure ] -crbug.com/591099 inspector/elements/elements-tab-stops.html [ Crash Failure ] -crbug.com/591099 inspector/elements/elements-treeoutline-copy.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/event-listener-sidebar-custom-framework.html [ Crash Failure ] -crbug.com/591099 inspector/elements/event-listener-sidebar-jquery1.html [ Crash Failure ] -crbug.com/591099 inspector/elements/event-listener-sidebar-jquery2.html [ Crash Failure ] -crbug.com/591099 inspector/elements/event-listener-sidebar-remove.html [ Crash Failure ] -crbug.com/591099 inspector/elements/event-listener-sidebar.html [ Crash Failure ] -crbug.com/591099 inspector/elements/event-listeners-about-blank.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/expand-recursively.html [ Crash Failure ] -crbug.com/591099 inspector/elements/hide-shortcut.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/highlight/highlight-css-grid.html [ Failure ] -crbug.com/591099 inspector/elements/highlight/highlight-css-shapes-outside-scroll.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/highlight/highlight-css-shapes-outside.html [ Crash Failure ] -crbug.com/591099 inspector/elements/highlight/highlight-dom-updates.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/highlight/highlight-node-scroll.html [ Crash Failure ] -crbug.com/591099 inspector/elements/highlight/highlight-node.html [ Crash Failure ] -crbug.com/591099 inspector/elements/highlight/highlight-svg-root-zoomed.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/highlight/highlight-svg-root.html [ Crash Failure ] -crbug.com/591099 inspector/elements/iframe-load-event.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/inline-style-title.html [ Crash Failure ] -crbug.com/591099 inspector/elements/insert-node.html [ Crash Failure ] -crbug.com/591099 inspector/elements/inspect-mode-after-profiling.html [ Crash Failure ] -crbug.com/591099 inspector/elements/inspect-mode-shadow-text.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/inspect-pointer-events-none.html [ Crash Timeout ] -crbug.com/591099 inspector/elements/modify-chardata.html [ Crash Failure ] -crbug.com/591099 inspector/elements/move-node.html [ Crash Failure ] -crbug.com/591099 inspector/elements/node-reselect-on-append-child.html [ Crash Failure ] -crbug.com/591099 inspector/elements/node-xpath.xhtml [ Crash Failure ] -crbug.com/591099 inspector/elements/resolve-alien-node.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/resolve-node-blocked.html [ Crash Failure ] -crbug.com/591099 inspector/elements/reveal-whitespace-text-node.html [ Crash Failure ] -crbug.com/591099 inspector/elements/selected-element-changes-execution-context.html [ Crash Failure ] -crbug.com/591099 inspector/elements/shadow/breadcrumb-shadow-roots.html [ Crash Failure ] -crbug.com/591099 inspector/elements/shadow/create-shadow-root.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/shadow/elements-panel-shadow-selection-on-refresh-1.html [ Crash Failure ] -crbug.com/591099 inspector/elements/shadow/elements-panel-shadow-selection-on-refresh-2.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/shadow/elements-panel-shadow-selection-on-refresh-3.html [ Crash Failure ] -crbug.com/591099 inspector/elements/shadow/inspect-deep-shadow-element.html [ Crash Failure ] -crbug.com/591099 inspector/elements/shadow/reveal-shadow-dom-node.html [ Crash Failure ] -crbug.com/591099 inspector/elements/shadow/shadow-distribution.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/shadow/shadow-host-display-modes.html [ Crash Failure ] -crbug.com/591099 inspector/elements/shadow/shadow-root.html [ Crash Failure ] -crbug.com/591099 inspector/elements/shadow/update-shadowdom.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-1/add-new-rule-inline-style-csp.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-1/add-new-rule-invalid-selector.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-1/add-new-rule-with-style-after-body.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-1/cached-sync-computed-styles.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-1/case-sensitive-suggestions.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/styles-1/color-aware-property-value-edit.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-1/color-nicknames-lowercase.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-1/color-swatch.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-1/commit-selector-mark-matching.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-1/commit-selector.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-1/css-live-edit.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-1/css-outline.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-1/disable-property-workingcopy-update.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/styles-1/dynamic-style-tag.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-1/edit-inspector-stylesheet.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-1/edit-media-text.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/styles-1/edit-name-with-trimmed-value.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-1/edit-resource-referred-by-multiple-styletags.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-1/edit-value-inside-property.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-1/edit-value-url-with-color.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-1/edit-value-with-trimmed-url.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/styles-1/empty-background-url.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/styles-1/filter-matched-styles.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-2/cssom-shorthand-important.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-2/filter-matched-styles-hides-separators.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-2/force-pseudo-state.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-2/get-set-stylesheet-text.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-2/import-pseudoclass-crash.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-2/inactive-properties.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-2/inherited-mixed-case-properties.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-2/inject-stylesheet.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-2/keyframes-rules.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-2/lazy-computed-style.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-2/media-emulation.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-2/media-queries.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-2/media-using-same-url.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-2/mixed-case-color-aware-properties.html [ Failure Timeout ] -crbug.com/591099 inspector/elements/styles-2/multiple-imports-edit-crash.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-2/page-reload-update-sidebar.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-2/parse-comments.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/styles-2/parse-declaration-unterminated-comment.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-2/parse-declaration-with-quote.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-2/parse-utf8-bom.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-2/paste-property.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-2/perform-undo-perform-of-mergable-action.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-2/property-ui-location.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-2/pseudo-elements.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/styles-2/region-style-crash.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-3/computed-properties-retain-expanded.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-3/selector-list.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-3/selector-source-data.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-3/shadow-dom-rules.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-3/simple-selector.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-3/spectrum.html [ Failure ] -crbug.com/591099 inspector/elements/styles-3/style-autocomplete.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-3/style-rule-from-imported-stylesheet.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-3/styles-add-blank-property.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-3/styles-add-invalid-property.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-3/styles-add-new-rule-colon.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-3/styles-add-new-rule-tab.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-3/styles-add-new-rule-to-stylesheet.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-3/styles-add-new-rule.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-3/styles-cancel-editing.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-3/styles-change-node-while-editing.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-3/styles-commit-editing.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-3/styles-computed-trace.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-3/styles-disable-inherited.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-3/styles-disable-property-after-selector-edit.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-3/styles-disable-then-change.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-3/styles-disable-then-delete.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-3/styles-disable-then-enable-overriden-ua.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-3/styles-disable-then-enable.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-3/styles-variables.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/disable-last-property-without-semicolon.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/do-not-rebuild-styles-on-every-change.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/inline-style-sourcemap.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/keyframes-source-offsets.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/style-update-during-selector-edit.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/styles-do-not-detach-sourcemap-on-edits.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/styles-edit-property-after-invalid-rule.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/styles-formatting.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/styles-history.html [ Crash ] -crbug.com/591099 inspector/elements/styles-4/styles-iframe.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/styles-inline-element-style-changes-should-not-force-style-recalc.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/styles-invalid-color-values.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/styles-keyframes.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/styles-live-locations-leak.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/styles-new-API.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/styles-overriden-properties.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/styles-properties-overload.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/styles-rerequest-sourcemap-on-watchdog.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/styles-should-not-force-sync-style-recalc.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/styles-source-lines-inline.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/styles-source-lines-recovery.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/styles-source-lines.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/styles-source-offsets.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/styles-update-from-js.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/styles-update-links-1.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/styles-4/styles-update-links-2.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/styles-update-links-3.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/styles-update-links-4.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/styles-url-linkify.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/styles-with-spaces-in-sourceURL.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/stylesheet-source-url-comment.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/svg-style.xhtml [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/undo-add-new-rule.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/undo-add-property.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles-4/undo-add-rule-crash.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles/cancel-upon-invalid-property.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles/original-content-provider.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles/undo-after-cancelled-editing.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles/undo-change-property.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles/undo-property-toggle.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles/undo-set-selector-text.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/styles/up-down-numerics-and-colors.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles/updates-during-dom-traversal.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles/updates-throttled.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles/url-color-swatch.html [ Crash Failure ] -crbug.com/591099 inspector/elements/styles/url-multiple-collapsing.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/elements/user-properties.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/editor/php-highlighter.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/php-highlighter.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/editor/text-editor-auto-whitespace-removing.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-auto-whitespace-removing.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/editor/text-editor-block-indent.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-block-indent.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/editor/text-editor-char-to-coordinates.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-char-to-coordinates.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/editor/text-editor-ctrl-d-1.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-ctrl-d-1.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/editor/text-editor-ctrl-d-2.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-ctrl-d-2.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/editor/text-editor-enter-behaviour.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-enter-behaviour.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/editor/text-editor-formatter.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-formatter.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/editor/text-editor-goto-matching-bracket.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-goto-matching-bracket.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/editor/text-editor-home-button.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-home-button.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/editor/text-editor-indent-autodetection.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-indent-autodetection.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/editor/text-editor-line-breaks.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-line-breaks.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/editor/text-editor-mark-clean.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-mark-clean.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/editor/text-editor-reveal-line.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-reveal-line.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/editor/text-editor-search-replace.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-search-replace.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/editor/text-editor-selection-to-search.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-selection-to-search.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/editor/text-editor-smart-braces.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-smart-braces.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/editor/text-editor-token-at-position.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-token-at-position.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/editor/text-editor-word-jumps.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-word-jumps.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/accessibility/autocomplete-attribute.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/accessibility/autocomplete-attribute.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/accessibility/edit-aria-attributes.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/accessibility/edit-aria-attributes.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/attribute-modified-ns.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/attribute-modified-ns.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/bidi-dom-tree.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/bidi-dom-tree.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/breadcrumb-updates.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/breadcrumb-updates.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/dom-agent-query-selector.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/dom-agent-query-selector.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/dom-search-crash.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/dom-search-crash.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/edit/delete-from-document.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/delete-from-document.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/edit/edit-dom-actions-1.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/edit-dom-actions-1.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/edit/edit-dom-actions-2.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/edit-dom-actions-2.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/edit/edit-dom-actions-3.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/edit-dom-actions-3.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/edit/edit-dom-actions-4.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/edit-dom-actions-4.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/edit/edit-dom-actions-shadow-1.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/edit-dom-actions-shadow-1.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/edit/edit-dom-actions-shadow-2.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/edit-dom-actions-shadow-2.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/edit/edit-style-attribute.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/edit-style-attribute.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/edit/edit-trimmed-attribute-value.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/edit-trimmed-attribute-value.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/edit/insert-node-collapsed.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/insert-node-collapsed.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/edit/perform-undo-undo.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/perform-undo-undo.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/edit/remove-node.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/remove-node.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/edit/set-attribute-non-html.svg [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/set-attribute-non-html.svg [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/edit/set-attribute.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/set-attribute.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/edit/set-outer-html-2.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/set-outer-html-2.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/edit/set-outer-html-body.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/set-outer-html-body.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/edit/set-outer-html-for-xhtml.xhtml [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/set-outer-html-for-xhtml.xhtml [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/edit/set-outer-html.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/set-outer-html.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/edit/shadow-dom-modify-chardata.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/shadow-dom-modify-chardata.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/edit/switch-panels-while-editing-as-html.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/switch-panels-while-editing-as-html.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/edit/undo-dom-edits-2.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/undo-dom-edits-2.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/edit/undo-dom-edits.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/undo-dom-edits.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/edit/undo-set-outer-html-2.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/undo-set-outer-html-2.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/edit/undo-set-outer-html.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/edit/undo-set-outer-html.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/elements-css-path.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-css-path.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/elements-delete-inline-style.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-delete-inline-style.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/elements-img-tooltip.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-img-tooltip.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/elements-inspect-iframe-from-different-domain.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-inspect-iframe-from-different-domain.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/elements-panel-correct-case.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-panel-correct-case.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/elements-panel-limited-children.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-panel-limited-children.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/elements-panel-reload-assert.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-panel-reload-assert.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/elements-panel-restore-selection-when-node-comes-later.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-panel-restore-selection-when-node-comes-later.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/elements-panel-rewrite-href.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-panel-rewrite-href.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/elements-panel-search.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-panel-search.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/elements-panel-selection-after-delete.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-panel-selection-after-delete.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/elements-panel-selection-on-refresh.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-panel-selection-on-refresh.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/elements-panel-structure.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-panel-structure.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/elements-tab-stops.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-tab-stops.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/elements-treeoutline-copy.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-treeoutline-copy.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/event-listener-sidebar-custom-framework.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/event-listener-sidebar-custom-framework.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/event-listener-sidebar-jquery1.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/event-listener-sidebar-jquery1.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/event-listener-sidebar-jquery2.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/event-listener-sidebar-jquery2.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/event-listener-sidebar-remove.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/event-listener-sidebar-remove.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/event-listener-sidebar.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/event-listener-sidebar.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/event-listeners-about-blank.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/event-listeners-about-blank.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/expand-recursively.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/expand-recursively.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/hide-shortcut.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/hide-shortcut.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/highlight/highlight-css-grid.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/highlight/highlight-css-grid.html [ Failure ] +crbug.com/591099 http/tests/devtools/elements/highlight/highlight-css-shapes-outside-scroll.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/highlight/highlight-css-shapes-outside-scroll.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/highlight/highlight-css-shapes-outside.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/highlight/highlight-css-shapes-outside.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/highlight/highlight-dom-updates.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/highlight/highlight-dom-updates.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/highlight/highlight-node-scroll.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/highlight/highlight-node-scroll.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/highlight/highlight-node.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/highlight/highlight-node.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/highlight/highlight-svg-root-zoomed.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/highlight/highlight-svg-root-zoomed.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/highlight/highlight-svg-root.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/highlight/highlight-svg-root.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/iframe-load-event.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/iframe-load-event.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/inline-style-title.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/inline-style-title.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/insert-node.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/insert-node.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/inspect-mode-after-profiling.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/inspect-mode-after-profiling.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/inspect-mode-shadow-text.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/inspect-mode-shadow-text.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/inspect-pointer-events-none.html [ Crash Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/inspect-pointer-events-none.html [ Crash Timeout ] +crbug.com/591099 http/tests/devtools/elements/modify-chardata.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/modify-chardata.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/move-node.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/move-node.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/node-reselect-on-append-child.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/node-reselect-on-append-child.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/node-xpath.xhtml [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/node-xpath.xhtml [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/resolve-alien-node.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/resolve-alien-node.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/resolve-node-blocked.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/resolve-node-blocked.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/reveal-whitespace-text-node.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/reveal-whitespace-text-node.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/selected-element-changes-execution-context.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/selected-element-changes-execution-context.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/shadow/breadcrumb-shadow-roots.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/breadcrumb-shadow-roots.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/shadow/create-shadow-root.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/create-shadow-root.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-1.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-1.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-2.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-2.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-3.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-3.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/shadow/inspect-deep-shadow-element.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/inspect-deep-shadow-element.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/shadow/reveal-shadow-dom-node.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/reveal-shadow-dom-node.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/shadow/shadow-distribution.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/shadow-distribution.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/shadow/shadow-host-display-modes.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/shadow-host-display-modes.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/shadow/shadow-root.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/shadow-root.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/shadow/update-shadowdom.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/shadow/update-shadowdom.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/add-new-rule-inline-style-csp.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/add-new-rule-inline-style-csp.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/add-new-rule-invalid-selector.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/add-new-rule-invalid-selector.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/add-new-rule-with-style-after-body.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/add-new-rule-with-style-after-body.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/cached-sync-computed-styles.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/cached-sync-computed-styles.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/case-sensitive-suggestions.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/case-sensitive-suggestions.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/styles-1/color-aware-property-value-edit.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/color-aware-property-value-edit.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/color-nicknames-lowercase.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/color-nicknames-lowercase.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/color-swatch.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/color-swatch.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/commit-selector-mark-matching.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/commit-selector-mark-matching.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/commit-selector.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/commit-selector.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/css-live-edit.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/css-live-edit.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/css-outline.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/css-outline.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/disable-property-workingcopy-update.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/disable-property-workingcopy-update.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/styles-1/dynamic-style-tag.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/dynamic-style-tag.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/edit-inspector-stylesheet.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/edit-inspector-stylesheet.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/edit-media-text.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/edit-media-text.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/styles-1/edit-name-with-trimmed-value.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/edit-name-with-trimmed-value.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/edit-resource-referred-by-multiple-styletags.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/edit-resource-referred-by-multiple-styletags.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/edit-value-inside-property.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/edit-value-inside-property.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/edit-value-url-with-color.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/edit-value-url-with-color.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-1/edit-value-with-trimmed-url.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/edit-value-with-trimmed-url.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/styles-1/empty-background-url.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/empty-background-url.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/styles-1/filter-matched-styles.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/filter-matched-styles.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/cssom-shorthand-important.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/cssom-shorthand-important.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/filter-matched-styles-hides-separators.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/filter-matched-styles-hides-separators.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/force-pseudo-state.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/force-pseudo-state.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/get-set-stylesheet-text.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/get-set-stylesheet-text.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/import-pseudoclass-crash.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/import-pseudoclass-crash.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/inactive-properties.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/inactive-properties.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/inherited-mixed-case-properties.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/inherited-mixed-case-properties.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/inject-stylesheet.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/inject-stylesheet.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/keyframes-rules.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/keyframes-rules.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/lazy-computed-style.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/lazy-computed-style.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/media-emulation.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/media-emulation.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/media-queries.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/media-queries.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/media-using-same-url.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/media-using-same-url.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/mixed-case-color-aware-properties.html [ Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/mixed-case-color-aware-properties.html [ Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/styles-2/multiple-imports-edit-crash.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/multiple-imports-edit-crash.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/page-reload-update-sidebar.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/page-reload-update-sidebar.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/parse-comments.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/parse-comments.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/styles-2/parse-declaration-unterminated-comment.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/parse-declaration-unterminated-comment.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/parse-declaration-with-quote.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/parse-declaration-with-quote.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/parse-utf8-bom.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/parse-utf8-bom.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/paste-property.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/paste-property.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/perform-undo-perform-of-mergable-action.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/perform-undo-perform-of-mergable-action.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/property-ui-location.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/property-ui-location.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-2/pseudo-elements.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/pseudo-elements.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/styles-2/region-style-crash.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/region-style-crash.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/computed-properties-retain-expanded.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/computed-properties-retain-expanded.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/selector-list.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/selector-list.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/selector-source-data.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/selector-source-data.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/shadow-dom-rules.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/shadow-dom-rules.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/simple-selector.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/simple-selector.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/spectrum.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/spectrum.html [ Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/style-autocomplete.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/style-autocomplete.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/style-rule-from-imported-stylesheet.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/style-rule-from-imported-stylesheet.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-add-blank-property.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-add-blank-property.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-add-invalid-property.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-add-invalid-property.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-add-new-rule-colon.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-add-new-rule-colon.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-add-new-rule-tab.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-add-new-rule-tab.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-add-new-rule-to-stylesheet.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-add-new-rule-to-stylesheet.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-add-new-rule.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-add-new-rule.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-cancel-editing.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-cancel-editing.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-change-node-while-editing.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-change-node-while-editing.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-commit-editing.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-commit-editing.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-computed-trace.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-computed-trace.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-disable-inherited.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-disable-inherited.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-disable-property-after-selector-edit.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-disable-property-after-selector-edit.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-disable-then-change.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-disable-then-change.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-disable-then-delete.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-disable-then-delete.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-disable-then-enable-overriden-ua.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-disable-then-enable-overriden-ua.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-disable-then-enable.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-disable-then-enable.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-variables.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-3/styles-variables.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/disable-last-property-without-semicolon.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/disable-last-property-without-semicolon.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/do-not-rebuild-styles-on-every-change.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/do-not-rebuild-styles-on-every-change.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/inline-style-sourcemap.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/inline-style-sourcemap.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/keyframes-source-offsets.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/keyframes-source-offsets.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/style-update-during-selector-edit.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/style-update-during-selector-edit.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-do-not-detach-sourcemap-on-edits.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-do-not-detach-sourcemap-on-edits.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-edit-property-after-invalid-rule.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-edit-property-after-invalid-rule.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-formatting.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-formatting.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-history.html [ Crash ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-history.html [ Crash ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-iframe.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-iframe.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-inline-element-style-changes-should-not-force-style-recalc.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-inline-element-style-changes-should-not-force-style-recalc.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-invalid-color-values.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-invalid-color-values.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-keyframes.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-keyframes.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-live-locations-leak.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-live-locations-leak.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-new-API.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-new-API.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-overriden-properties.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-overriden-properties.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-properties-overload.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-properties-overload.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-rerequest-sourcemap-on-watchdog.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-rerequest-sourcemap-on-watchdog.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-should-not-force-sync-style-recalc.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-should-not-force-sync-style-recalc.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-source-lines-inline.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-source-lines-inline.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-source-lines-recovery.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-source-lines-recovery.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-source-lines.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-source-lines.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-source-offsets.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-source-offsets.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-update-from-js.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-update-from-js.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-update-links-1.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-update-links-1.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-update-links-2.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-update-links-2.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-update-links-3.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-update-links-3.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-update-links-4.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-update-links-4.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-url-linkify.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-url-linkify.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/styles-with-spaces-in-sourceURL.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-with-spaces-in-sourceURL.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/stylesheet-source-url-comment.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/stylesheet-source-url-comment.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/svg-style.xhtml [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/svg-style.xhtml [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/undo-add-new-rule.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/undo-add-new-rule.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/undo-add-property.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/undo-add-property.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles-4/undo-add-rule-crash.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/undo-add-rule-crash.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles/cancel-upon-invalid-property.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/cancel-upon-invalid-property.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles/original-content-provider.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/original-content-provider.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles/undo-after-cancelled-editing.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/undo-after-cancelled-editing.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles/undo-change-property.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/undo-change-property.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles/undo-property-toggle.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/undo-property-toggle.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles/undo-set-selector-text.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/undo-set-selector-text.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/styles/up-down-numerics-and-colors.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/up-down-numerics-and-colors.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles/updates-during-dom-traversal.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/updates-during-dom-traversal.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles/updates-throttled.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/updates-throttled.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles/url-color-swatch.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/url-color-swatch.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/elements/styles/url-multiple-collapsing.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles/url-multiple-collapsing.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/elements/user-properties.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/user-properties.html [ Crash Failure ] crbug.com/591099 inspector/evaluate-in-page.html [ Failure ] crbug.com/591099 inspector/file-reader-with-network-panel.html [ Failure ] crbug.com/591099 inspector/file-system-mapping.html [ Failure ] @@ -13666,127 +13805,422 @@ crbug.com/591099 inspector/sass/test-ssp-editing.html [ Crash Failure ] crbug.com/591099 inspector/sass/test-ssp-incremental-edit-invalid-value.html [ Crash Failure ] crbug.com/591099 inspector/schema-get-domains-matches-agents.html [ Failure ] -crbug.com/591099 inspector/sources/autocomplete-css.html [ Crash Failure ] -crbug.com/591099 inspector/sources/autocomplete-general.html [ Crash Failure ] -crbug.com/591099 inspector/sources/autocomplete-hide-on-smart-brace.html [ Crash Failure ] -crbug.com/591099 inspector/sources/autocomplete-scss.html [ Crash Failure ] -crbug.com/591099 inspector/sources/bezier-swatch-position.html [ Failure ] -crbug.com/591099 inspector/sources/color-swatch-position.html [ Crash Failure ] -crbug.com/591099 inspector/sources/compile-javascript.html [ Crash Failure ] -crbug.com/591099 inspector/sources/css-inline-sourcemap.html [ Failure ] -crbug.com/591099 inspector/sources/css-outline-dialog.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-pause/debugger-change-variable.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-pause/debugger-eval-on-call-frame-inside-iframe.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-pause/debugger-eval-on-call-frame.html [ Failure ] -crbug.com/591099 inspector/sources/debugger-pause/debugger-eval-while-paused-throws.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-pause/debugger-eval-while-paused.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-pause/debugger-mute-exception.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-pause/debugger-no-nested-pause.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-pause/debugger-pause-in-eval-script.html [ Failure ] -crbug.com/591099 inspector/sources/debugger-pause/debugger-pause-in-internal.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-pause/debugger-pause-on-debugger-statement.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-pause/debugger-pause-on-exception.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-pause/debugger-pause-on-failed-assertion.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-pause/debugger-pause-on-promise-rejection.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-pause/debugger-pause-with-overrides.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-pause/debugger-resume-button-in-overlay.html [ Failure ] -crbug.com/591099 inspector/sources/debugger-pause/eval-on-pause-blocked.html [ Failure ] -crbug.com/591099 inspector/sources/debugger-pause/function-name-in-callstack.html [ Failure ] -crbug.com/591099 inspector/sources/debugger-pause/pause-in-inline-script.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-pause/pause-in-internal-script.html [ Failure ] -crbug.com/591099 inspector/sources/debugger-pause/pause-on-elements-panel.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/sources/debugger-pause/skip-pauses-until-reload.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-step/debugger-step-in-ignore-injected-script.html [ Failure ] -crbug.com/591099 inspector/sources/debugger-step/debugger-step-in.html [ Failure ] -crbug.com/591099 inspector/sources/debugger-step/debugger-step-into-across-timeouts.html [ Failure ] -crbug.com/591099 inspector/sources/debugger-step/debugger-step-into-custom-element-callbacks.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/sources/debugger-step/debugger-step-into-document-write.html [ Failure ] -crbug.com/591099 inspector/sources/debugger-step/debugger-step-into-event-listener.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-step/debugger-step-into-inlined-scripts.html [ Failure ] -crbug.com/591099 inspector/sources/debugger-step/debugger-step-out-across-timeouts.html [ Failure ] -crbug.com/591099 inspector/sources/debugger-step/debugger-step-out-custom-element-callbacks.html [ Failure ] -crbug.com/591099 inspector/sources/debugger-step/debugger-step-out-document-write.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-step/debugger-step-out-event-listener.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-step/debugger-step-out.html [ Failure Timeout ] -crbug.com/591099 inspector/sources/debugger-step/debugger-step-over-across-timeouts.html [ Failure ] -crbug.com/591099 inspector/sources/debugger-step/debugger-step-over-document-write.html [ Failure ] -crbug.com/591099 inspector/sources/debugger-step/debugger-step-over-inlined-scripts.html [ Failure ] -crbug.com/591099 inspector/sources/debugger-step/debugger-step-over.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-step/debugger-step-through-promises.html [ Failure ] -crbug.com/591099 inspector/sources/debugger-step/step-through-event-listeners.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/async-call-stack-async-function.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/async-call-stack-url.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/break-on-empty-event-listener.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/break-on-set-timeout-with-syntax-error.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/callstack-placards-discarded.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/click-gutter-breakpoint.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/continue-to-location-markers.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/copy-stack-trace.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/custom-element-lifecycle-events.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/debugger-expand-scope.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/debugger-inline-values.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/debugger-save-to-temp-var.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/error-in-watch-expressions.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/execution-context-sorted.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/function-details.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/function-display-name-call-stack.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/function-generator-details.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/inline-scope-variables.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/last-execution-context.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/monitor-console-command.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/reveal-execution-line.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/reveal-not-skipped.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/script-formatter-breakpoints-2.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/script-formatter-breakpoints-3.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/script-formatter-search.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/script-snippet-model.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/scripts-panel.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/scripts-sorting.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/scripts-with-same-source-url.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/selected-call-frame-after-formatting-source.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/show-function-definition.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/show-generator-location.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/source-frame-count.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/source-frame.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/source-url-comment.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/switch-file.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/ui-source-code-display-name.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/ui-source-code.html [ Crash Failure ] -crbug.com/591099 inspector/sources/debugger-ui/watch-expressions-panel-switch.html [ Crash Failure Timeout ] -crbug.com/591099 inspector/sources/debugger-ui/watch-expressions-preserve-expansion.html [ Crash Failure ] -crbug.com/591099 inspector/sources/formatter-css.html [ Crash Failure ] -crbug.com/591099 inspector/sources/formatter-js.html [ Failure ] -crbug.com/591099 inspector/sources/inspect-function.html [ Crash Failure ] -crbug.com/591099 inspector/sources/javascript-outline-dialog.html [ Crash Failure ] -crbug.com/591099 inspector/sources/outline-javascript-1.html [ Crash Failure ] -crbug.com/591099 inspector/sources/outline-javascript-2.html [ Failure ] -crbug.com/591099 inspector/sources/outline-javascript-3.html [ Failure ] -crbug.com/591099 inspector/sources/outline-javascript-4.html [ Failure ] -crbug.com/591099 inspector/sources/outline-javascript-5.html [ Failure ] -crbug.com/591099 inspector/sources/outline-javascript-6.html [ Failure ] -crbug.com/591099 inspector/sources/pretty-print-css-1.html [ Failure ] -crbug.com/591099 inspector/sources/pretty-print-css-2.html [ Failure ] -crbug.com/591099 inspector/sources/pretty-print-css-3.html [ Failure ] -crbug.com/591099 inspector/sources/pretty-print-html-1.html [ Crash Failure ] -crbug.com/591099 inspector/sources/pretty-print-html-2.html [ Failure ] -crbug.com/591099 inspector/sources/pretty-print-html-3.html [ Failure ] -crbug.com/591099 inspector/sources/pretty-print-javascript-1.html [ Failure ] -crbug.com/591099 inspector/sources/pretty-print-javascript-2.html [ Crash Failure ] -crbug.com/591099 inspector/sources/pretty-print-javascript-3.html [ Failure ] -crbug.com/591099 inspector/sources/pretty-print-javascript-4.html [ Failure ] -crbug.com/591099 inspector/sources/pretty-print-javascript-5.html [ Failure ] -crbug.com/591099 inspector/sources/pretty-print-javascript-6.html [ Failure ] -crbug.com/591099 inspector/sources/pretty-print-javascript-7.html [ Crash Failure ] -crbug.com/591099 inspector/sources/pretty-print-javascript-8.html [ Crash Failure ] -crbug.com/591099 inspector/sources/pretty-print-javascript-9.html [ Failure ] -crbug.com/591099 inspector/sources/pretty-print-javascript-classes.html [ Failure ] -crbug.com/591099 inspector/sources/pretty-print-javascript-template-literals.html [ Failure ] -crbug.com/591099 inspector/sources/sass-highlighter.html [ Failure ] -crbug.com/591099 inspector/sources/search-config.html [ Crash Failure ] -crbug.com/591099 inspector/sources/snippet-storage.html [ Failure ] -crbug.com/591099 inspector/sources/source-code-diff.html [ Failure ] -crbug.com/591099 inspector/sources/sources-panel-extension-names.html [ Failure ] -crbug.com/591099 inspector/sources/sources-panel-focus-editor-on-select.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/autocomplete-css.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/autocomplete-css.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/autocomplete-general.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/autocomplete-general.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/autocomplete-hide-on-smart-brace.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/autocomplete-hide-on-smart-brace.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/autocomplete-scss.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/autocomplete-scss.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/bezier-swatch-position.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/bezier-swatch-position.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/color-swatch-position.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/color-swatch-position.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/compile-javascript.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/compile-javascript.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/css-inline-sourcemap.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/css-inline-sourcemap.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/css-outline-dialog.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/css-outline-dialog.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-events.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-events.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-get-as-string.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-get-as-string.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-in-console.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-in-console.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-indexed-db.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-indexed-db.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-middle-run.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-middle-run.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-mutation-observer.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-mutation-observer.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-post-message.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-post-message.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-promises.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-promises.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-reload-no-crash.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-reload-no-crash.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-scripted-scroll.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-scripted-scroll.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-set-interval.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-set-interval.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-web-sql.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-web-sql.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack-xhrs.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-xhrs.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-async/async-callstack.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/breakpoint-manager-listeners-count.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/breakpoint-manager-listeners-count.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/breakpoint-manager.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/breakpoint-manager.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/breakpoints-in-anonymous-script-with-two-targets.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/breakpoints-in-anonymous-script-with-two-targets.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/debugger-breakpoints-not-activated-on-reload.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/debugger-breakpoints-not-activated-on-reload.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/debugger-disable-add-breakpoint.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/debugger-disable-add-breakpoint.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/debugger-reload-breakpoints-with-source-maps.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/debugger-reload-breakpoints-with-source-maps.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/debugger-set-breakpoint-regex.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/debugger-set-breakpoint-regex.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/disable-breakpoints.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/disable-breakpoints.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/dom-breakpoints-editing-dom-from-inspector.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/dom-breakpoints-editing-dom-from-inspector.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/dom-breakpoints.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/dom-breakpoints.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/dynamic-scripts-breakpoints.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/dynamic-scripts-breakpoints.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints-after-suspension.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints-after-suspension.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints-script-first-stmt.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints-script-first-stmt.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints-xhr.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints-xhr.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/nodejs-set-breakpoint.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/nodejs-set-breakpoint.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/possible-breakpoints.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/possible-breakpoints.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/set-breakpoint.html [ Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/set-breakpoint.html [ Failure Timeout ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/set-conditional-breakpoint.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/set-conditional-breakpoint.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/use-possible-breakpoints-to-resolve-breakpoint.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/use-possible-breakpoints-to-resolve-breakpoint.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-breakpoints/xhr-breakpoints.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/xhr-breakpoints.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-console/debug-console-command.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-console/debug-console-command.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-console/debugger-command-line-api.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-console/debugger-command-line-api.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-blackbox-by-source-code.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-blackbox-by-source-code.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-blackbox-patterns.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-blackbox-patterns.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-dom-xhr-event-breakpoints.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-dom-xhr-event-breakpoints.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-jquery.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-jquery.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-skip-break-program.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-skip-break-program.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-skip-exceptions.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-skip-exceptions.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-skip-step-in.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-skip-step-in.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-sourcemap.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-sourcemap.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-step-into-skips-setTimeout.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-step-into-skips-setTimeout.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-steppings.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-steppings.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-with-async-callstack.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-with-async-callstack.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-frameworks/frameworks-with-worker.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-with-worker.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-change-variable.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-change-variable.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-eval-on-call-frame-inside-iframe.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-eval-on-call-frame-inside-iframe.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-eval-on-call-frame.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-eval-on-call-frame.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-eval-while-paused-throws.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-eval-while-paused-throws.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-eval-while-paused.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-eval-while-paused.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-mute-exception.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-mute-exception.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-no-nested-pause.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-no-nested-pause.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-pause-in-eval-script.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-pause-in-eval-script.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-pause-in-internal.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-pause-in-internal.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-pause-on-debugger-statement.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-pause-on-debugger-statement.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-pause-on-exception.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-pause-on-exception.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-pause-on-failed-assertion.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-pause-on-failed-assertion.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-pause-on-promise-rejection.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-pause-on-promise-rejection.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-pause-with-overrides.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-pause-with-overrides.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/debugger-resume-button-in-overlay.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-resume-button-in-overlay.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/eval-on-pause-blocked.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/eval-on-pause-blocked.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/function-name-in-callstack.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/function-name-in-callstack.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/pause-in-inline-script.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/pause-in-inline-script.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/pause-in-internal-script.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/pause-in-internal-script.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/pause-on-elements-panel.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/pause-on-elements-panel.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/sources/debugger-pause/skip-pauses-until-reload.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/skip-pauses-until-reload.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-in-ignore-injected-script.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-in-ignore-injected-script.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-in.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-in.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-into-across-timeouts.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-into-across-timeouts.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-into-custom-element-callbacks.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-into-custom-element-callbacks.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-into-document-write.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-into-document-write.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-into-event-listener.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-into-event-listener.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-into-inlined-scripts.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-into-inlined-scripts.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-out-across-timeouts.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-out-across-timeouts.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-out-custom-element-callbacks.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-out-custom-element-callbacks.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-out-document-write.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-out-document-write.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-out-event-listener.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-out-event-listener.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-out.html [ Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-out.html [ Failure Timeout ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-over-across-timeouts.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-over-across-timeouts.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-over-document-write.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-over-document-write.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-over-inlined-scripts.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-over-inlined-scripts.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-over.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-over.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/debugger-step-through-promises.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/debugger-step-through-promises.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-step/step-through-event-listeners.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-step/step-through-event-listeners.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/async-call-stack-async-function.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/async-call-stack-async-function.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/async-call-stack-url.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/async-call-stack-url.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/break-on-empty-event-listener.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/break-on-empty-event-listener.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/break-on-set-timeout-with-syntax-error.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/break-on-set-timeout-with-syntax-error.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/callstack-placards-discarded.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/callstack-placards-discarded.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/click-gutter-breakpoint.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/click-gutter-breakpoint.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/continue-to-location-markers.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/continue-to-location-markers.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/copy-stack-trace.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/copy-stack-trace.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/custom-element-lifecycle-events.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/custom-element-lifecycle-events.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/debugger-expand-scope.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/debugger-expand-scope.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/debugger-inline-values.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/debugger-inline-values.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/debugger-save-to-temp-var.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/debugger-save-to-temp-var.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/error-in-watch-expressions.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/error-in-watch-expressions.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/execution-context-sorted.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/execution-context-sorted.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/function-details.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/function-details.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/function-display-name-call-stack.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/function-display-name-call-stack.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/function-generator-details.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/function-generator-details.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/inline-scope-variables.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/inline-scope-variables.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/last-execution-context.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/last-execution-context.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/monitor-console-command.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/monitor-console-command.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/reveal-execution-line.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/reveal-execution-line.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/reveal-not-skipped.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/reveal-not-skipped.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/script-formatter-breakpoints-2.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/script-formatter-breakpoints-2.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/script-formatter-breakpoints-3.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/script-formatter-breakpoints-3.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/script-formatter-search.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/script-formatter-search.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/script-snippet-model.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/script-snippet-model.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/scripts-panel.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/scripts-panel.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/scripts-sorting.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/scripts-sorting.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/scripts-with-same-source-url.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/scripts-with-same-source-url.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/selected-call-frame-after-formatting-source.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/selected-call-frame-after-formatting-source.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/show-function-definition.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/show-function-definition.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/show-generator-location.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/show-generator-location.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/source-frame-count.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/source-frame-count.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/source-frame.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/source-frame.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/source-url-comment.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/source-url-comment.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/switch-file.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/switch-file.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/ui-source-code-display-name.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/ui-source-code-display-name.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/ui-source-code.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/ui-source-code.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/watch-expressions-panel-switch.html [ Crash Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/watch-expressions-panel-switch.html [ Crash Failure Timeout ] +crbug.com/591099 http/tests/devtools/sources/debugger-ui/watch-expressions-preserve-expansion.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/watch-expressions-preserve-expansion.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debug-inlined-scripts-fragment-id.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debug-inlined-scripts-fragment-id.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-autocontinue-on-syntax-error.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-autocontinue-on-syntax-error.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-compile-and-run.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-compile-and-run.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-completions-on-call-frame.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-completions-on-call-frame.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-cyclic-reference.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-cyclic-reference.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-disable-enable.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-disable-enable.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-es6-harmony-scopes.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-es6-harmony-scopes.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-minified-variables-evalution.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-minified-variables-evalution.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-proto-property.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-proto-property.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-reload-on-pause.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-reload-on-pause.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-return-value.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-return-value.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-scope-minified-variables.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-scope-minified-variables.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-scope-resolve-identifiers.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-scope-resolve-identifiers.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-scope-resolve-this.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-scope-resolve-this.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-scripts-reload.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-scripts-reload.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-scripts.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-scripts.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/debugger-suspend-active-dom-objects.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-suspend-active-dom-objects.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/dont-report-injected-script.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/dont-report-injected-script.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/dynamic-script-tag.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/dynamic-script-tag.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/dynamic-scripts.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/dynamic-scripts.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/extract-javascript-identifiers.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/extract-javascript-identifiers.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/js-with-inline-stylesheets.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/js-with-inline-stylesheets.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/live-edit-breakpoints.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/live-edit-breakpoints.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/live-edit-no-reveal.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/live-edit-no-reveal.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/live-edit-original-content.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/live-edit-original-content.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/live-edit.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/live-edit.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/mutation-observer-suspend-while-paused.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/mutation-observer-suspend-while-paused.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/navigator-view.html [ Failure Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/navigator-view.html [ Failure Timeout ] +crbug.com/591099 http/tests/devtools/sources/debugger/network-uisourcecode-provider.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/network-uisourcecode-provider.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/open-close-open.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/open-close-open.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/properties-special.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/properties-special.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/resource-script-mapping.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/resource-script-mapping.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/rethrow-error-from-bindings-crash.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/rethrow-error-from-bindings-crash.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/script-collected.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/script-collected.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/script-failed-to-parse.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/script-failed-to-parse.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/source-frame-breakpoint-decorations.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/source-frame-breakpoint-decorations.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/source-frame-inline-breakpoint-decorations.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/source-frame-inline-breakpoint-decorations.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/debugger/sources-panel-content-scripts.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/sources-panel-content-scripts.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/formatter-css.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/formatter-css.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/formatter-js.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/formatter-js.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/inspect-function.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/inspect-function.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/javascript-outline-dialog.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/javascript-outline-dialog.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/outline-javascript-1.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/outline-javascript-1.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/outline-javascript-2.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/outline-javascript-2.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/outline-javascript-3.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/outline-javascript-3.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/outline-javascript-4.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/outline-javascript-4.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/outline-javascript-5.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/outline-javascript-5.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/outline-javascript-6.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/outline-javascript-6.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-css-1.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-css-1.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-css-2.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-css-2.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-css-3.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-css-3.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-html-1.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-html-1.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-html-2.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-html-2.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-html-3.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-html-3.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-1.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-1.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-2.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-2.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-3.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-3.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-4.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-4.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-5.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-5.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-6.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-6.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-7.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-7.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-8.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-8.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-9.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-9.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-classes.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-classes.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/pretty-print-javascript-template-literals.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/pretty-print-javascript-template-literals.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/sass-highlighter.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/sass-highlighter.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/search-config.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/search-config.html [ Crash Failure ] +crbug.com/591099 http/tests/devtools/sources/snippet-storage.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/snippet-storage.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/source-code-diff.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/source-code-diff.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/sources-panel-extension-names.html [ Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/sources-panel-extension-names.html [ Failure ] +crbug.com/591099 http/tests/devtools/sources/sources-panel-focus-editor-on-select.html [ Crash Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/sources-panel-focus-editor-on-select.html [ Crash Failure ] crbug.com/591099 inspector/storage-panel-dom-storage-update.html [ Failure ] crbug.com/591099 inspector/storage-panel-dom-storage.html [ Failure ] crbug.com/591099 inspector/syntax-highlight-css.html [ Failure ] @@ -16360,7 +16794,6 @@ crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-drawImage.html [ Timeout ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-from-canvas-toBlob.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-invalid-args-in-workers.html [ Failure ] -crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-invalid-args.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-invalid-blob-in-workers.html [ Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-recursive.html [ Crash Failure ] crbug.com/591099 virtual/display_list_2d_canvas/fast/canvas/canvas-createImageBitmap-svg-no-intrinsic-size.html [ Crash Failure ] @@ -16646,7 +17079,6 @@ crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-drawImage.html [ Crash Timeout ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-from-canvas-toBlob.html [ Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-invalid-args-in-workers.html [ Failure ] -crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-invalid-args.html [ Crash Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-invalid-blob-in-workers.html [ Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-recursive.html [ Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-createImageBitmap-svg-no-intrinsic-size.html [ Failure ] @@ -17183,93 +17615,6 @@ crbug.com/591099 virtual/mojo-loading/http/tests/devtools/console/paintworklet-console-selector.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/devtools/console/shadow-element.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/devtools/console/worker-eval-contains-stack.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-events.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-get-as-string.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-in-console.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-indexed-db.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-middle-run.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-mutation-observer.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-post-message.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-promises.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-reload-no-crash.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-scripted-scroll.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-set-interval.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-web-sql.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack-xhrs.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-async/async-callstack.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/breakpoint-manager-listeners-count.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/breakpoint-manager.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/breakpoints-in-anonymous-script-with-two-targets.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/debugger-breakpoints-not-activated-on-reload.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/debugger-disable-add-breakpoint.html [ Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/debugger-reload-breakpoints-with-source-maps.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/debugger-set-breakpoint-regex.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/disable-breakpoints.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/dom-breakpoints-editing-dom-from-inspector.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/dom-breakpoints.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/dynamic-scripts-breakpoints.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints-after-suspension.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints-script-first-stmt.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints-xhr.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/event-listener-breakpoints.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/nodejs-set-breakpoint.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/possible-breakpoints.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/set-breakpoint.html [ Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/set-conditional-breakpoint.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/use-possible-breakpoints-to-resolve-breakpoint.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-breakpoints/xhr-breakpoints.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-console/debug-console-command.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-console/debugger-command-line-api.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-blackbox-by-source-code.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-blackbox-patterns.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-dom-xhr-event-breakpoints.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-jquery.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-skip-break-program.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-skip-exceptions.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-skip-step-in.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-sourcemap.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-step-into-skips-setTimeout.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-steppings.html [ Crash Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-with-async-callstack.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-with-worker.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debug-inlined-scripts-fragment-id.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-autocontinue-on-syntax-error.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-compile-and-run.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-completions-on-call-frame.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-cyclic-reference.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-disable-enable.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-es6-harmony-scopes.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-minified-variables-evalution.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-proto-property.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-reload-on-pause.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-return-value.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-scope-minified-variables.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-scope-resolve-identifiers.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-scope-resolve-this.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-scripts-reload.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-scripts.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/debugger-suspend-active-dom-objects.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/dont-report-injected-script.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/dynamic-script-tag.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/dynamic-scripts.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/extract-javascript-identifiers.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/js-with-inline-stylesheets.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/live-edit-breakpoints.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/live-edit-no-reveal.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/live-edit-original-content.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/live-edit.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/mutation-observer-suspend-while-paused.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/navigator-view.html [ Failure Timeout ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/network-uisourcecode-provider.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/open-close-open.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/properties-special.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/resource-script-mapping.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/rethrow-error-from-bindings-crash.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/script-collected.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/script-failed-to-parse.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/source-frame-breakpoint-decorations.html [ Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/source-frame-inline-breakpoint-decorations.html [ Crash Failure ] -crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger/sources-panel-content-scripts.html [ Crash Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/dom/create-contextual-fragment-from-bodyless-svg-document-range.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/dom/create-contextual-fragment-from-svg-document-range.html [ Failure ] crbug.com/591099 virtual/mojo-loading/http/tests/dom/location-stringify.html [ Failure ]
diff --git a/third_party/WebKit/LayoutTests/MSANExpectations b/third_party/WebKit/LayoutTests/MSANExpectations index c89dcdc..5908c92 100644 --- a/third_party/WebKit/LayoutTests/MSANExpectations +++ b/third_party/WebKit/LayoutTests/MSANExpectations
@@ -60,7 +60,8 @@ crbug.com/729136 [ Linux ] http/tests/inspector/forced-layout-in-microtask.html [ Timeout ] crbug.com/729136 [ Linux ] http/tests/inspector/tracing/timeline-xhr-response-type-blob-event.html [ Timeout ] crbug.com/729136 [ Linux ] inspector/components/file-path-scoring.html [ Timeout ] -crbug.com/729136 [ Linux ] inspector/elements/styles-4/styles-should-not-force-sync-style-recalc.html [ Timeout ] +crbug.com/729136 [ Linux ] http/tests/devtools/elements/styles-4/styles-should-not-force-sync-style-recalc.html [ Timeout ] +crbug.com/667560 [ Linux ] virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-should-not-force-sync-style-recalc.html [ Timeout ] crbug.com/729136 [ Linux ] webaudio/mixing.html [ Timeout ] crbug.com/739365 [ Linux ] virtual/layout_ng/fast/block/float/assert-when-moving-float.html [ Skip ]
diff --git a/third_party/WebKit/LayoutTests/SlowTests b/third_party/WebKit/LayoutTests/SlowTests index 660d361..c31ad498 100644 --- a/third_party/WebKit/LayoutTests/SlowTests +++ b/third_party/WebKit/LayoutTests/SlowTests
@@ -128,7 +128,6 @@ crbug.com/679833 virtual/mojo-loading/http/tests/inspector/network/network-datareceived.html [ Slow ] # Debugger and profiler tests are slow in Release as well. -crbug.com/450493 inspector/sources/ [ Slow ] crbug.com/450493 inspector-enabled/sources/ [ Slow ] crbug.com/450493 http/tests/inspector/sources/ [ Slow ] crbug.com/450493 virtual/mojo-loading/http/tests/inspector/sources/ [ Slow ] @@ -149,10 +148,12 @@ crbug.com/243492 virtual/mojo-loading/http/tests/inspector-enabled/injected-script-discard.html [ Slow ] crbug.com/327078 http/tests/inspector/network/long-script-content.html [ Slow ] crbug.com/327078 virtual/mojo-loading/http/tests/inspector/network/long-script-content.html [ Slow ] -crbug.com/420008 [ Release ] inspector/editor/text-editor-word-jumps.html [ Slow ] +crbug.com/420008 [ Release ] http/tests/devtools/editor/text-editor-word-jumps.html [ Slow ] +crbug.com/667560 [ Release ] virtual/mojo-loading/http/tests/devtools/editor/text-editor-word-jumps.html [ Slow ] crbug.com/420008 [ Release ] http/tests/inspector/console-xhr-logging.html [ Slow ] crbug.com/420008 [ Release ] virtual/mojo-loading/http/tests/inspector/console-xhr-logging.html [ Slow ] -crbug.com/596486 [ Linux ] inspector/elements/insert-node.html [ Slow ] +crbug.com/596486 [ Linux ] http/tests/devtools/elements/insert-node.html [ Slow ] +crbug.com/667560 [ Linux ] virtual/mojo-loading/http/tests/devtools/elements/insert-node.html [ Slow ] webkit.org/b/84735 [ Win ] http/tests/inspector/change-iframe-src.html [ Slow ] webkit.org/b/84735 [ Win ] virtual/mojo-loading/http/tests/inspector/change-iframe-src.html [ Slow ] crbug.com/504565 [ Mac ] http/tests/inspector/search/sources-search-scope.html [ Slow ] @@ -163,7 +164,8 @@ crbug.com/451577 virtual/mojo-loading/http/tests/inspector/resource-tree/resource-tree-frame-in-crafted-frame.html [ Slow ] crbug.com/510337 cssom/cssvalue-comparison.html [ Slow ] -crbug.com/510337 inspector/elements/styles-1/edit-value-url-with-color.html [ Slow ] +crbug.com/510337 http/tests/devtools/elements/styles-1/edit-value-url-with-color.html [ Slow ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/edit-value-url-with-color.html [ Slow ] # This test is intentionally SLOW as we're waiting for a connection timeout. crbug.com/73609 http/tests/media/video-play-stall.html [ Slow ] @@ -302,8 +304,10 @@ crbug.com/24182 [ Debug ] animations/interpolation/transform-interpolation.html [ Slow ] crbug.com/24182 [ Debug ] animations/interpolation/webkit-transform-interpolation.html [ Slow ] -crbug.com/528419 [ Linux ] inspector/elements/shadow/shadow-host-display-modes.html [ Slow ] -crbug.com/528419 inspector/elements/styles-2/pseudo-elements.html [ Slow ] +crbug.com/528419 [ Linux ] http/tests/devtools/elements/shadow/shadow-host-display-modes.html [ Slow ] +crbug.com/667560 [ Linux ] virtual/mojo-loading/http/tests/devtools/elements/shadow/shadow-host-display-modes.html [ Slow ] +crbug.com/528419 http/tests/devtools/elements/styles-2/pseudo-elements.html [ Slow ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/pseudo-elements.html [ Slow ] crbug.com/529345 [ Win10 ] paint/masks/fieldset-mask.html [ Slow ] crbug.com/552556 [ Win Linux ] virtual/threaded/fast/scroll-behavior/overflow-scroll-root-frame-animates.html [ Slow ] @@ -466,7 +470,8 @@ crbug.com/741259 editing/selection/select-bidi-run.html [ Slow ] # These tests were previously marked Slow in ASANExpectations. -crbug.com/451577 [ Linux ] inspector/elements/user-properties.html [ Slow ] +crbug.com/451577 [ Linux ] http/tests/devtools/elements/user-properties.html [ Slow ] +crbug.com/667560 [ Linux ] virtual/mojo-loading/http/tests/devtools/elements/user-properties.html [ Slow ] crbug.com/451577 [ Linux ] inspector/layers/layer-canvas-log.html [ Slow ] # These imported tests exercise tens of thousands of code points and generate large results.
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations index 174c289..5a897e19 100644 --- a/third_party/WebKit/LayoutTests/TestExpectations +++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -720,9 +720,11 @@ crbug.com/498539 virtual/threaded/inspector/tracing/timeline-misc/timeline-bound-function.html [ Pass Failure ] crbug.com/498539 [ Mac ] http/tests/devtools/sources/debugger/live-edit-no-reveal.html [ Crash Pass Timeout ] crbug.com/667560 [ Mac ] virtual/mojo-loading/http/tests/devtools/sources/debugger/live-edit-no-reveal.html [ Crash Pass Timeout ] -crbug.com/498539 [ Win7 ] inspector/sources/debugger-pause/debugger-eval-on-call-frame-inside-iframe.html [ Failure Pass ] +crbug.com/498539 [ Win7 ] http/tests/devtools/sources/debugger-pause/debugger-eval-on-call-frame-inside-iframe.html [ Failure Pass ] +crbug.com/667560 [ Win7 ] virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/debugger-eval-on-call-frame-inside-iframe.html [ Failure Pass ] -crbug.com/498539 [ Win7 ] inspector/elements/styles-4/styles-update-from-js.html [ Crash Pass ] +crbug.com/498539 [ Win7 ] http/tests/devtools/elements/styles-4/styles-update-from-js.html [ Crash Pass ] +crbug.com/667560 [ Win7 ] virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-update-from-js.html [ Crash Pass ] crbug.com/487281 [ Mac ] fast/forms/select/menulist-narrow-width.html [ Failure ] @@ -1362,7 +1364,8 @@ # Fails with leak detector. crbug.com/622915 [ Linux ] ietestcenter/css3/grid/grid-column-003.htm [ Skip ] crbug.com/733494 [ Linux ] media/autoplay/document-user-activation.html [ Skip ] -crbug.com/733495 [ Linux ] inspector/elements/styles-4/styles-history.html [ Skip ] +crbug.com/733495 [ Linux ] http/tests/devtools/elements/styles-4/styles-history.html [ Skip ] +crbug.com/667560 [ Linux ] virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-history.html [ Skip ] # Temporarily disabled after chromium change crbug.com/492511 [ Mac ] fast/text/atsui-negative-spacing-features.html [ Failure ] @@ -1469,7 +1472,8 @@ crbug.com/747758 [ Mac Win ] virtual/rootlayerscrolls/fast/scrolling/scrollbar-prevent-default.html [ Failure ] -crbug.com/567419 inspector/elements/styles-2/metrics-box-sizing.html [ Skip ] +crbug.com/567419 http/tests/devtools/elements/styles-2/metrics-box-sizing.html [ Skip ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-2/metrics-box-sizing.html [ Skip ] crbug.com/457273 [ Mac ] http/tests/websocket/close.html [ Pass Timeout ] crbug.com/457273 [ Mac ] virtual/mojo-loading/http/tests/websocket/close.html [ Pass Timeout ] @@ -1581,7 +1585,8 @@ crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-frameworks/frameworks-dom-xhr-event-breakpoints.html [ NeedsManualRebaseline Timeout ] crbug.com/636424 [ Win7 Debug ] editing/selection/modify_move/move-by-word-visually-crash-test-5.html [ Pass Timeout ] -crbug.com/638618 inspector/editor/text-editor-search-switch-editor.html [ Skip ] +crbug.com/638618 http/tests/devtools/editor/text-editor-search-switch-editor.html [ Skip ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/editor/text-editor-search-switch-editor.html [ Skip ] # These tests have test harness errors and PASS lines that have a # non-deterministic order. @@ -1742,10 +1747,12 @@ crbug.com/761952 virtual/service-worker-script-streaming/external/wpt/service-workers/service-worker/link-element-register-script.https.html [ Failure Pass ] crbug.com/761952 virtual/service-worker-script-streaming/external/wpt/service-workers/service-worker/link-element-register-script-url.https.html [ Failure Pass ] crbug.com/761952 virtual/service-worker-script-streaming/external/wpt/service-workers/service-worker/link-element-register-security-error.https.html [ Failure Pass ] +crbug.com/761952 external/wpt/beacon/headers/header-content-type.html [ Failure Pass Timeout ] crbug.com/761952 virtual/service-worker-script-streaming/external/wpt/service-workers/service-worker/registration-mime-types.https.html [ Failure Pass ] crbug.com/761952 fast/text/international/complex-text-rectangle.html [ Timeout Pass ] # ====== New tests from wpt-importer added here ====== +crbug.com/626703 external/wpt/audio-output/setSinkId-manual.https.html [ Skip ] crbug.com/626703 external/wpt/payment-request/payment-response/complete-method-manual.https.html [ Skip ] crbug.com/626703 external/wpt/payment-request/payment-response/methodName-attribute-manual.https.html [ Skip ] crbug.com/626703 external/wpt/payment-request/payment-response/payerEmail-attribute-manual.https.html [ Skip ] @@ -1830,7 +1837,6 @@ crbug.com/626703 external/wpt/css/css-fonts-3/font-weight-normal-001.xht [ Skip ] crbug.com/626703 external/wpt/css/css-fonts-3/test-synthetic-bold.xht [ Skip ] crbug.com/626703 external/wpt/css/css-fonts-3/test-synthetic-italic.xht [ Skip ] -crbug.com/626703 external/wpt/beacon/headers/header-content-type.html [ Pass Timeout ] crbug.com/626703 [ Win ] external/wpt/css/css-ui-3/outline-004.html [ Failure ] crbug.com/626703 [ Win ] external/wpt/css/css-ui-3/text-overflow-001.html [ Pass Failure ] crbug.com/626703 [ Win ] external/wpt/css/css-ui-3/text-overflow-002.html [ Pass Failure ] @@ -2338,7 +2344,8 @@ crbug.com/664873 http/tests/xmlhttprequest/small-chunks-response-text.html [ Failure Pass ] crbug.com/664873 virtual/mojo-loading/http/tests/xmlhttprequest/small-chunks-response-text.html [ Failure Pass ] -crbug.com/660295 inspector/elements/elements-panel-restore-selection-when-node-comes-later.html [ Pass Failure ] +crbug.com/660295 http/tests/devtools/elements/elements-panel-restore-selection-when-node-comes-later.html [ Pass Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/elements-panel-restore-selection-when-node-comes-later.html [ Pass Failure ] crbug.com/735245 http/tests/inspector/application-panel/storage-view-reports-quota.html [ Pass Timeout ] crbug.com/735245 virtual/mojo-loading/http/tests/inspector/application-panel/storage-view-reports-quota.html [ Pass Timeout Failure ] @@ -2437,7 +2444,8 @@ crbug.com/619427 [ Mac Linux ] fast/overflow/overflow-height-float-not-removed-crash3.html [ Pass Failure ] -crbug.com/667371 inspector/elements/styles-1/color-aware-property-value-edit.html [ Pass Failure ] +crbug.com/667371 http/tests/devtools/elements/styles-1/color-aware-property-value-edit.html [ Pass Failure ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-1/color-aware-property-value-edit.html [ Pass Failure ] # [css-ui] Imported tests from W3C suite. crbug.com/669473 external/wpt/css/css-ui-3/box-sizing-014.html [ Failure ] @@ -2495,7 +2503,8 @@ crbug.com/664819 virtual/mojo-loading/http/tests/security/isolatedWorld/events.html [ Pass Failure ] # Possible duplicate of crbug.com/498539 -# crbug.com/664843 inspector/elements/styles-4/styles-update-from-js.html [ Pass Failure ] +# crbug.com/664843 http/tests/devtools/elements/styles-4/styles-update-from-js.html [ Pass Failure ] +# crbug.com/667560 virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-update-from-js.html [ Pass Failure ] crbug.com/664844 media/track/track-cue-rendering-tree-is-removed-properly.html [ Pass Failure ] crbug.com/664844 media/track/track-default-attribute.html [ Pass Failure ] @@ -2726,7 +2735,8 @@ crbug.com/678499 http/tests/security/contentSecurityPolicy/require-sri-for/require-sri-for-script-preload-allowed.php [ Failure Pass ] crbug.com/678499 virtual/mojo-loading/http/tests/security/contentSecurityPolicy/require-sri-for/require-sri-for-script-preload-allowed.php [ Failure Pass ] -crbug.com/680050 inspector/sources/debugger-ui/watch-expressions-panel-switch.html [ Pass Timeout ] +crbug.com/680050 http/tests/devtools/sources/debugger-ui/watch-expressions-panel-switch.html [ Pass Timeout ] +crbug.com/667560 virtual/mojo-loading/http/tests/devtools/sources/debugger-ui/watch-expressions-panel-switch.html [ Pass Timeout ] crbug.com/747751 http/tests/inspector/application-panel/resources-panel-resource-preview.html [ Failure Pass ] @@ -2902,7 +2912,8 @@ crbug.com/732103 [ Mac ] virtual/mojo-loading/http/tests/shapedetection/shapedetection-cross-origin.html [ Failure Pass Timeout ] # Sheriff failures 2017-06-14 -crbug.com/733357 [ Win Mac ] inspector/elements/styles-4/styles-history.html [ Failure Pass ] +crbug.com/733357 [ Win Mac ] http/tests/devtools/elements/styles-4/styles-history.html [ Failure Pass ] +crbug.com/667560 [ Win Mac ] virtual/mojo-loading/http/tests/devtools/elements/styles-4/styles-history.html [ Failure Pass ] crbug.com/733448 virtual/mojo-loading/http/tests/inspector/extensions/extensions-network.html [ Failure Pass ] crbug.com/733448 http/tests/inspector/extensions/extensions-network.html [ Failure Pass ] crbug.com/733524 [ Mac ] virtual/mojo-loading/http/tests/security/contentSecurityPolicy/report-cross-origin-no-cookies.php [ Timeout Pass ] @@ -3028,7 +3039,8 @@ crbug.com/736177 [ Mac10.9 ] external/wpt/css/css-writing-modes-3/bidi-isolate-override-007.html [ Skip ] crbug.com/736177 [ Mac10.9 ] fast/text/international/bidi-LDB-2-formatting-characters.html [ Skip ] crbug.com/736177 [ Mac10.9 ] fast/text/international/bidi-neutral-run.html [ Skip ] -crbug.com/736177 [ Mac10.9 ] inspector/elements/bidi-dom-tree.html [ Skip ] +crbug.com/736177 [ Mac10.9 ] http/tests/devtools/elements/bidi-dom-tree.html [ Skip ] +crbug.com/667560 [ Mac10.9 ] virtual/mojo-loading/http/tests/devtools/elements/bidi-dom-tree.html [ Skip ] # fast/css/text-overflow-input.html test is flaky on all Mac platforms crbug.com/736177 [ Mac ] fast/css/text-overflow-input.html [ Failure Pass ] @@ -3071,7 +3083,8 @@ crbug.com/747163 [ Linux ] imagecapture/MediaStreamTrack-getSettings.html [ Pass Crash ] crbug.com/749738 [ Win7 Debug ] http/tests/devtools/console/console-format-es6.js [ Timeout ] -crbug.com/749738 [ Win7 Debug ] inspector/editor/text-editor-word-jumps.html [ Timeout ] +crbug.com/749738 [ Win7 Debug ] http/tests/devtools/editor/text-editor-word-jumps.html [ Timeout ] +crbug.com/667560 [ Win7 Debug ] virtual/mojo-loading/http/tests/devtools/editor/text-editor-word-jumps.html [ Timeout ] crbug.com/749738 [ Win7 Debug ] virtual/mojo-loading/http/tests/devtools/console/console-format-es6.js [ Timeout ] # Sheriff failures 2017-07-28 @@ -3589,7 +3602,8 @@ # Tests occasionaly timing out (flaky) on WebKit Win7 dbg builder crbug.com/757955 [ Win7 Debug ] animations/interpolation/svg-d-interpolation.html [ Pass Timeout ] -crbug.com/757955 [ Win7 Debug ] inspector/sources/debugger-pause/pause-on-elements-panel.html [ Pass Timeout ] +crbug.com/757955 [ Win7 Debug ] http/tests/devtools/sources/debugger-pause/pause-on-elements-panel.html [ Pass Timeout ] +crbug.com/667560 [ Win7 Debug ] virtual/mojo-loading/http/tests/devtools/sources/debugger-pause/pause-on-elements-panel.html [ Pass Timeout ] crbug.com/757955 [ Win7 Debug ] media/color-profile-video-seek-filter.html [ Pass Timeout ] crbug.com/757955 [ Win7 Debug ] virtual/threaded/animations/composited-animations-rotate-zero-degrees.html [ Pass Timeout ] crbug.com/757955 [ Win7 Debug ] external/wpt/encoding/legacy-mb-japanese/shift_jis/sjis-encode-form-errors-han.html [ Pass Timeout ]
diff --git a/third_party/WebKit/LayoutTests/accessibility/aom-actions.html b/third_party/WebKit/LayoutTests/accessibility/aom-actions.html index 743465c..d22de17 100644 --- a/third_party/WebKit/LayoutTests/accessibility/aom-actions.html +++ b/third_party/WebKit/LayoutTests/accessibility/aom-actions.html
@@ -2,7 +2,6 @@ <script src="../resources/gc.js"></script> <script src="../resources/testharness.js"></script> <script src="../resources/testharnessreport.js"></script> -<script src="../http/tests/resources/permissions-helper.js"></script> <!-- @@ -20,53 +19,34 @@ <button id="target1">Target</button> <script> -function enableAccessibilityEventsPermission() { - return new Promise(function(resolve, reject) { - PermissionsHelper.setPermission( - 'accessibility-events', 'granted').then(function() { - // Make sure AXObjectCacheImpl gets the notification too, its - // listener may fire after this one. - window.setTimeout(function() { - resolve(); - }, 0); - }); - }); -} +test(function(t) { + var target1 = document.getElementById("target1"); + var axTarget1 = accessibilityController.accessibleElementById("target1"); -async_test(function(t) { - enableAccessibilityEventsPermission().then(function() { - var target1 = document.getElementById("target1"); - var axTarget1 = accessibilityController.accessibleElementById("target1"); + var success = false; + target1.accessibleNode.onaccessibleclick = function() { + success = true; + }; + axTarget1.press(); - var success = false; - target1.accessibleNode.onaccessibleclick = function() { - success = true; - }; - axTarget1.press(); - - assert_true(success); - t.done(); - }); + assert_true(success); }, "AccessibleNode.onaccessibleclick"); </script> <button id="target2">Target</button> <script> -async_test(function(t) { - enableAccessibilityEventsPermission().then(function() { - var target2 = document.getElementById("target2"); - var axTarget2 = accessibilityController.accessibleElementById("target2"); +test(function(t) { + var target2 = document.getElementById("target2"); + var axTarget2 = accessibilityController.accessibleElementById("target2"); - var success = false; - target2.accessibleNode.addEventListener("accessibleclick", function() { - success = true; - }, false); - axTarget2.press(); + var success = false; + target2.accessibleNode.addEventListener("accessibleclick", function() { + success = true; + }, false); + axTarget2.press(); - assert_true(success); - t.done(); - }); + assert_true(success); }, "AccessibleNode.addEventListener('accessibleclick')"); </script> @@ -74,44 +54,41 @@ <button id="target3b">Target with preventDefault</button> <script> -async_test(function(t) { - enableAccessibilityEventsPermission().then(function() { - var target3a = document.getElementById("target3a"); - var target3b = document.getElementById("target3b"); - var axTarget3a = accessibilityController.accessibleElementById("target3a"); - var axTarget3b = accessibilityController.accessibleElementById("target3b"); +test(function(t) { + var target3a = document.getElementById("target3a"); + var target3b = document.getElementById("target3b"); + var axTarget3a = accessibilityController.accessibleElementById("target3a"); + var axTarget3b = accessibilityController.accessibleElementById("target3b"); - // Without preventDefault, the AOM event listener gets called - // first, and then the DOM event listener. - var calledAOMForTargetA = false; - target3a.accessibleNode.onaccessibleclick = function() { - calledAOMForTargetA = true; - }; - var calledDOMForTargetA = false; - target3a.addEventListener("click", function() { - calledDOMForTargetA = true; - }, false); - axTarget3a.press(); + // Without preventDefault, the AOM event listener gets called + // first, and then the DOM event listener. + var calledAOMForTargetA = false; + target3a.accessibleNode.onaccessibleclick = function() { + calledAOMForTargetA = true; + }; + var calledDOMForTargetA = false; + target3a.addEventListener("click", function() { + calledDOMForTargetA = true; + }, false); + axTarget3a.press(); - assert_true(calledAOMForTargetA, "called AOM for target A"); - assert_true(calledDOMForTargetA, "called DOM for target A"); + assert_true(calledAOMForTargetA, "called AOM for target A"); + assert_true(calledDOMForTargetA, "called DOM for target A"); - // With preventDefault, the AOM event listener gets called only. - var calledAOMForTargetB = false; - target3b.accessibleNode.onaccessibleclick = function(evt) { - calledAOMForTargetB = true; - evt.preventDefault(); - }; - var calledDOMForTargetB = false; - target3b.addEventListener("click", function() { - calledDOMForTargetB = true; - }, false); - axTarget3b.press(); + // With preventDefault, the AOM event listener gets called only. + var calledAOMForTargetB = false; + target3b.accessibleNode.onaccessibleclick = function(evt) { + calledAOMForTargetB = true; + evt.preventDefault(); + }; + var calledDOMForTargetB = false; + target3b.addEventListener("click", function() { + calledDOMForTargetB = true; + }, false); + axTarget3b.press(); - assert_true(calledAOMForTargetB, "called AOM for target B"); - assert_false(calledDOMForTargetB, "called DOM for target B"); - t.done(); - }); + assert_true(calledAOMForTargetB, "called AOM for target B"); + assert_false(calledDOMForTargetB, "called DOM for target B"); }, "AOM events preventDefault"); </script> @@ -120,20 +97,17 @@ </p> <script> -async_test(function(t) { - enableAccessibilityEventsPermission().then(function() { - var p4 = document.getElementById("p4"); - var axTarget4 = accessibilityController.accessibleElementById("target4"); +test(function(t) { + var p4 = document.getElementById("p4"); + var axTarget4 = accessibilityController.accessibleElementById("target4"); - var success = false; - p4.accessibleNode.onaccessibleclick = function() { - success = true; - }; - axTarget4.press(); + var success = false; + p4.accessibleNode.onaccessibleclick = function() { + success = true; + }; + axTarget4.press(); - assert_true(success); - t.done(); - }); + assert_true(success); }, "AOM events bubble"); </script> @@ -146,63 +120,61 @@ </section> <script> -async_test(function(t) { - enableAccessibilityEventsPermission().then(function() { - var section5 = document.getElementById("section5"); - var ul5 = document.getElementById("ul5"); - var li5 = document.getElementById("li5"); - var target5 = document.getElementById("target5"); +test(function(t) { + var section5 = document.getElementById("section5"); + var ul5 = document.getElementById("ul5"); + var li5 = document.getElementById("li5"); + var target5 = document.getElementById("target5"); - var axTarget5 = accessibilityController.accessibleElementById("target5"); + var axTarget5 = accessibilityController.accessibleElementById("target5"); - var seq = []; + var seq = []; - section5.accessibleNode.addEventListener("accessibleclick", function() { - seq.push("AOM capture SECTION"); - }, true); - section5.accessibleNode.addEventListener("accessibleclick", function() { - seq.push("AOM bubble SECTION"); - }, false); - section5.addEventListener("click", function() { - seq.push("DOM capture SECTION"); - }, true); - section5.addEventListener("click", function() { - seq.push("DOM bubble SECTION"); - }, false); - ul5.accessibleNode.addEventListener("accessibleclick", function() { - seq.push("AOM capture UL"); - }, true); - ul5.accessibleNode.addEventListener("accessibleclick", function() { - seq.push("AOM bubble UL"); - }, false); - li5.accessibleNode.addEventListener("accessibleclick", function() { - seq.push("AOM capture LI"); - }, true); - li5.accessibleNode.addEventListener("accessibleclick", function() { - seq.push("AOM bubble LI"); - }, false); - target5.accessibleNode.addEventListener("accessibleclick", function() { - seq.push("AOM main event listener BUTTON"); - }, false); - target5.addEventListener("click", function() { - seq.push("DOM main event listener BUTTON"); - }, false); + section5.accessibleNode.addEventListener("accessibleclick", function() { + seq.push("AOM capture SECTION"); + }, true); + section5.accessibleNode.addEventListener("accessibleclick", function() { + seq.push("AOM bubble SECTION"); + }, false); + section5.addEventListener("click", function() { + seq.push("DOM capture SECTION"); + }, true); + section5.addEventListener("click", function() { + seq.push("DOM bubble SECTION"); + }, false); + ul5.accessibleNode.addEventListener("accessibleclick", function() { + seq.push("AOM capture UL"); + }, true); + ul5.accessibleNode.addEventListener("accessibleclick", function() { + seq.push("AOM bubble UL"); + }, false); + li5.accessibleNode.addEventListener("accessibleclick", function() { + seq.push("AOM capture LI"); + }, true); + li5.accessibleNode.addEventListener("accessibleclick", function() { + seq.push("AOM bubble LI"); + }, false); + target5.accessibleNode.addEventListener("accessibleclick", function() { + seq.push("AOM main event listener BUTTON"); + }, false); + target5.addEventListener("click", function() { + seq.push("DOM main event listener BUTTON"); + }, false); - axTarget5.press(); + axTarget5.press(); - assert_equals(seq.join(", "), - "AOM capture SECTION, " + - "AOM capture UL, " + - "AOM capture LI, " + - "AOM main event listener BUTTON, " + - "AOM bubble LI, " + - "AOM bubble UL, " + - "AOM bubble SECTION, " + - "DOM capture SECTION, " + - "DOM main event listener BUTTON, " + - "DOM bubble SECTION"); - t.done(); - }); + assert_equals(seq.join(", "), + "AOM capture SECTION, " + + "AOM capture UL, " + + "AOM capture LI, " + + "AOM main event listener BUTTON, " + + "AOM bubble LI, " + + "AOM bubble UL, " + + "AOM bubble SECTION, " + + "DOM capture SECTION, " + + "DOM main event listener BUTTON, " + + "DOM bubble SECTION"); +2 }, "AOM event capturing and bubbling"); </script> @@ -215,28 +187,25 @@ </section> <script> -async_test(function(t) { - enableAccessibilityEventsPermission().then(function() { - var ul6a = document.getElementById("ul6a"); - var ul6b = document.getElementById("ul6b"); - var li6b = document.getElementById("li6b"); +test(function(t) { + var ul6a = document.getElementById("ul6a"); + var ul6b = document.getElementById("ul6b"); + var li6b = document.getElementById("li6b"); - var axLI6B = accessibilityController.accessibleElementById("li6b"); + var axLI6B = accessibilityController.accessibleElementById("li6b"); - var ul6a_got_event = false; - var ul6b_got_event = false; + var ul6a_got_event = false; + var ul6b_got_event = false; - ul6a.accessibleNode.addEventListener("accessibleclick", function() { - ul6a_got_event = true; - }, false); - ul6b.accessibleNode.addEventListener("accessibleclick", function() { - ul6b_got_event = true; - }, false); + ul6a.accessibleNode.addEventListener("accessibleclick", function() { + ul6a_got_event = true; + }, false); + ul6b.accessibleNode.addEventListener("accessibleclick", function() { + ul6b_got_event = true; + }, false); - axLI6B.press(); - assert_true(ul6a_got_event); - assert_false(ul6b_got_event); - t.done(); - }); + axLI6B.press(); + assert_true(ul6a_got_event); + assert_false(ul6b_got_event); }, "AOM event bubbling respects aria-owns over DOM parent chain"); </script>
diff --git a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json index 3788e47..3c00f41 100644 --- a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json +++ b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
@@ -85,6 +85,12 @@ {} ] ], + "audio-output/setSinkId-manual.https.html": [ + [ + "/audio-output/setSinkId-manual.https.html", + {} + ] + ], "battery-status/battery-charging-manual.https.html": [ [ "/battery-status/battery-charging-manual.https.html", @@ -6003,6 +6009,18 @@ {} ] ], + "css-scoping/slotted-with-pseudo-element.html": [ + [ + "/css-scoping/slotted-with-pseudo-element.html", + [ + [ + "/css-scoping/slotted-with-pseudo-element-ref.html", + "==" + ] + ], + {} + ] + ], "css/CSS2/abspos/abspos-containing-block-initial-001.xht": [ [ "/css/CSS2/abspos/abspos-containing-block-initial-001.xht", @@ -68013,11 +68031,6 @@ {} ] ], - "2dcontext/imagebitmap/createImageBitmap-drawImage-expected.txt": [ - [ - {} - ] - ], "2dcontext/line-styles/.gitkeep": [ [ {} @@ -68343,11 +68356,6 @@ {} ] ], - "FileAPI/blob/Blob-constructor-expected.txt": [ - [ - {} - ] - ], "FileAPI/file/File-constructor-expected.txt": [ [ {} @@ -69453,6 +69461,11 @@ {} ] ], + "audio-output/setSinkId.https-expected.txt": [ + [ + {} + ] + ], "background-fetch/interfaces-expected.txt": [ [ {} @@ -71988,6 +72001,11 @@ {} ] ], + "css-scoping/slotted-with-pseudo-element-ref.html": [ + [ + {} + ] + ], "css-timing/cubic-bezier-timing-functions-output-expected.txt": [ [ {} @@ -95378,6 +95396,11 @@ {} ] ], + "cssom/getComputedStyle-pseudo-expected.txt": [ + [ + {} + ] + ], "cssom/index-002-expected.txt": [ [ {} @@ -107383,6 +107406,11 @@ {} ] ], + "html/semantics/embedded-content/media-elements/track/track-element/track-data-url-expected.txt": [ + [ + {} + ] + ], "html/semantics/embedded-content/resources/should-load.html": [ [ {} @@ -112453,11 +112481,6 @@ {} ] ], - "offscreen-canvas/the-offscreen-canvas/offscreencanvas.getcontext-expected.txt": [ - [ - {} - ] - ], "offscreen-canvas/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap-expected.txt": [ [ {} @@ -112638,6 +112661,11 @@ {} ] ], + "payment-request/historical.https-expected.txt": [ + [ + {} + ] + ], "payment-request/interfaces.https-expected.txt": [ [ {} @@ -112668,11 +112696,6 @@ {} ] ], - "payment-request/payment-request-ctor-currency-code-checks.https-expected.txt": [ - [ - {} - ] - ], "payment-request/payment-request-ctor-pmi-handling.https-expected.txt": [ [ {} @@ -116283,6 +116306,31 @@ {} ] ], + "service-workers/service-worker/link-element-register-mime-types.https-expected.txt": [ + [ + {} + ] + ], + "service-workers/service-worker/link-element-register-scope.https-expected.txt": [ + [ + {} + ] + ], + "service-workers/service-worker/link-element-register-script-url.https-expected.txt": [ + [ + {} + ] + ], + "service-workers/service-worker/link-element-register-script.https-expected.txt": [ + [ + {} + ] + ], + "service-workers/service-worker/link-element-register-security-error.https-expected.txt": [ + [ + {} + ] + ], "service-workers/service-worker/multi-globals/current/current.https.html": [ [ {} @@ -116403,7 +116451,7 @@ {} ] ], - "service-workers/service-worker/register-link-element.https-expected.txt": [ + "service-workers/service-worker/registration-mime-types.https-expected.txt": [ [ {} ] @@ -116413,11 +116461,6 @@ {} ] ], - "service-workers/service-worker/registration.https-expected.txt": [ - [ - {} - ] - ], "service-workers/service-worker/resources/404.py": [ [ {} @@ -117283,6 +117326,36 @@ {} ] ], + "service-workers/service-worker/resources/registration-tests-basic.js": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/registration-tests-mime-types.js": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/registration-tests-scope.js": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/registration-tests-script-url.js": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/registration-tests-script.js": [ + [ + {} + ] + ], + "service-workers/service-worker/resources/registration-tests-security-error.js": [ + [ + {} + ] + ], "service-workers/service-worker/resources/registration-tests.js": [ [ {} @@ -131874,6 +131947,18 @@ {} ] ], + "audio-output/HTMLMediaElement-sinkId-idl.html": [ + [ + "/audio-output/HTMLMediaElement-sinkId-idl.html", + {} + ] + ], + "audio-output/setSinkId.https.html": [ + [ + "/audio-output/setSinkId.https.html", + {} + ] + ], "background-fetch/interfaces-worker.https.html": [ [ "/background-fetch/interfaces-worker.https.html", @@ -134266,6 +134351,12 @@ {} ] ], + "css-scoping/slotted-parsing.html": [ + [ + "/css-scoping/slotted-parsing.html", + {} + ] + ], "css-timing/cubic-bezier-timing-functions-output.html": [ [ "/css-timing/cubic-bezier-timing-functions-output.html", @@ -144214,6 +144305,12 @@ {} ] ], + "html/browsers/history/the-history-interface/history_properties_only_fully_active.html": [ + [ + "/html/browsers/history/the-history-interface/history_properties_only_fully_active.html", + {} + ] + ], "html/browsers/history/the-history-interface/history_pushstate.html": [ [ "/html/browsers/history/the-history-interface/history_pushstate.html", @@ -147604,6 +147701,12 @@ {} ] ], + "html/semantics/embedded-content/media-elements/track/track-element/track-data-url.html": [ + [ + "/html/semantics/embedded-content/media-elements/track/track-element/track-data-url.html", + {} + ] + ], "html/semantics/embedded-content/media-elements/video_008.htm": [ [ "/html/semantics/embedded-content/media-elements/video_008.htm", @@ -152158,6 +152261,12 @@ {} ] ], + "imagebitmap/createImageBitmap-invalid-args.html": [ + [ + "/imagebitmap/createImageBitmap-invalid-args.html", + {} + ] + ], "infrastructure/failing-test.html": [ [ "/infrastructure/failing-test.html", @@ -164424,6 +164533,12 @@ {} ] ], + "referrer-policy/generic/link-rel-prefetch.html": [ + [ + "/referrer-policy/generic/link-rel-prefetch.html", + {} + ] + ], "referrer-policy/generic/sandboxed-iframe-with-opaque-origin.html": [ [ "/referrer-policy/generic/sandboxed-iframe-with-opaque-origin.html", @@ -173808,6 +173923,42 @@ {} ] ], + "service-workers/service-worker/link-element-register-basic.https.html": [ + [ + "/service-workers/service-worker/link-element-register-basic.https.html", + {} + ] + ], + "service-workers/service-worker/link-element-register-mime-types.https.html": [ + [ + "/service-workers/service-worker/link-element-register-mime-types.https.html", + {} + ] + ], + "service-workers/service-worker/link-element-register-scope.https.html": [ + [ + "/service-workers/service-worker/link-element-register-scope.https.html", + {} + ] + ], + "service-workers/service-worker/link-element-register-script-url.https.html": [ + [ + "/service-workers/service-worker/link-element-register-script-url.https.html", + {} + ] + ], + "service-workers/service-worker/link-element-register-script.https.html": [ + [ + "/service-workers/service-worker/link-element-register-script.https.html", + {} + ] + ], + "service-workers/service-worker/link-element-register-security-error.https.html": [ + [ + "/service-workers/service-worker/link-element-register-security-error.https.html", + {} + ] + ], "service-workers/service-worker/multi-globals/url-parsing.https.html": [ [ "/service-workers/service-worker/multi-globals/url-parsing.https.html", @@ -173990,12 +174141,6 @@ {} ] ], - "service-workers/service-worker/register-link-element.https.html": [ - [ - "/service-workers/service-worker/register-link-element.https.html", - {} - ] - ], "service-workers/service-worker/register-link-header.https.html": [ [ "/service-workers/service-worker/register-link-header.https.html", @@ -174014,6 +174159,12 @@ {} ] ], + "service-workers/service-worker/registration-basic.https.html": [ + [ + "/service-workers/service-worker/registration-basic.https.html", + {} + ] + ], "service-workers/service-worker/registration-end-to-end.https.html": [ [ "/service-workers/service-worker/registration-end-to-end.https.html", @@ -174032,6 +174183,36 @@ {} ] ], + "service-workers/service-worker/registration-mime-types.https.html": [ + [ + "/service-workers/service-worker/registration-mime-types.https.html", + {} + ] + ], + "service-workers/service-worker/registration-scope.https.html": [ + [ + "/service-workers/service-worker/registration-scope.https.html", + {} + ] + ], + "service-workers/service-worker/registration-script-url.https.html": [ + [ + "/service-workers/service-worker/registration-script-url.https.html", + {} + ] + ], + "service-workers/service-worker/registration-script.https.html": [ + [ + "/service-workers/service-worker/registration-script.https.html", + {} + ] + ], + "service-workers/service-worker/registration-security-error.https.html": [ + [ + "/service-workers/service-worker/registration-security-error.https.html", + {} + ] + ], "service-workers/service-worker/registration-service-worker-attributes.https.html": [ [ "/service-workers/service-worker/registration-service-worker-attributes.https.html", @@ -174044,12 +174225,6 @@ {} ] ], - "service-workers/service-worker/registration.https.html": [ - [ - "/service-workers/service-worker/registration.https.html", - {} - ] - ], "service-workers/service-worker/rejections.https.html": [ [ "/service-workers/service-worker/rejections.https.html", @@ -180144,6 +180319,12 @@ {} ] ], + "webvtt/api/historical.html": [ + [ + "/webvtt/api/historical.html", + {} + ] + ], "webvtt/api/interfaces.html": [ [ "/webvtt/api/interfaces.html", @@ -186384,7 +186565,7 @@ "testharness" ], "2dcontext/drawing-images-to-the-canvas/2d.drawImage.animated.poster-expected.txt": [ - "cf364e7e34de19739048e7a3cfd64f1742afe3f8", + "bef343b1fa35c1e8ecb3e3b90c55abb9173c8739", "support" ], "2dcontext/drawing-images-to-the-canvas/2d.drawImage.animated.poster.html": [ @@ -186488,7 +186669,7 @@ "testharness" ], "2dcontext/drawing-images-to-the-canvas/2d.drawImage.zerosource.image-expected.txt": [ - "05fc596d6534b2a9ab87f3a02bfab28d9b3c243b", + "d27728269c466d6e6bea3b41ef3c56662de84849", "support" ], "2dcontext/drawing-images-to-the-canvas/2d.drawImage.zerosource.image.html": [ @@ -186772,7 +186953,7 @@ "testharness" ], "2dcontext/drawing-paths-to-the-canvas/canvas_focus_drawCustomFocusRing_001-expected.txt": [ - "043c65d27437f4afba19863aa52cbd2e0e1d8139", + "1c6ecc264ffd54dcc2322a29a06254898dda15bb", "support" ], "2dcontext/drawing-paths-to-the-canvas/canvas_focus_drawCustomFocusRing_001.html": [ @@ -187032,7 +187213,7 @@ "testharness" ], "2dcontext/drawing-text-to-the-canvas/2d.text.draw.fontface.notinpage-expected.txt": [ - "655f5d2c165d53d289d839abf9ff5353a2052918", + "82da4c3808368fe46b68b67a3563d87c014e3a93", "support" ], "2dcontext/drawing-text-to-the-canvas/2d.text.draw.fontface.notinpage.html": [ @@ -187112,7 +187293,7 @@ "testharness" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1-expected.txt": [ - "94ce9a0ee85f03eaf89f148610de8a23f63ff979", + "31670923b276dc3240a9e5f8d5819c850b5e6a9d", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1.html": [ @@ -187124,7 +187305,7 @@ "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2-expected.txt": [ - "467b8fb964f7fe8d250dc5177422e039c97f4704", + "ad8b3af235c6f008dcd50f92ace4fe88050c924f", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2.html": [ @@ -187136,7 +187317,7 @@ "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3-expected.txt": [ - "f96645be965c90b00b190fc9ab8d692564b66553", + "9633a98541b82b6888d570472b00462206eaee13", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3.html": [ @@ -187148,7 +187329,7 @@ "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4-expected.txt": [ - "99d65a4975c3e1043b3b2f8761d90eba389066a8", + "8a3392d582b099e1c45cce049efba5378e550f9c", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4.html": [ @@ -187160,7 +187341,7 @@ "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5-expected.txt": [ - "6528a74e81971e6a9230040509d95ca26c2ec132", + "b3c7b02e7c9aeb441d485ab74db98d583d2feec1", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5.html": [ @@ -187172,7 +187353,7 @@ "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6-expected.txt": [ - "416068ecb395d303453d03bc6a2476ff968c1fad", + "c38b1527c97f1b5c5a3c51f3ef51e6bd7189557d", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6.html": [ @@ -187184,7 +187365,7 @@ "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7-expected.txt": [ - "b41fa02ae7a36c8f46738c19181cacfdb18f8a81", + "b02f9243b15a7ccd41677595145db6eb93c74dd4", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7.html": [ @@ -187196,7 +187377,7 @@ "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8-expected.txt": [ - "850dd701e0cadb4a8a01755d7c9e3757c58ace3d", + "c0d399288f0dcaf85aeba355ec8bf0fe1e5d7c30", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8.html": [ @@ -187208,7 +187389,7 @@ "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9-expected.txt": [ - "7b0179a14705165dfa797ab6772705f30ff73946", + "00bd4828f1db0d00e8a2ad5a55969ab6a84ba9e5", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9.html": [ @@ -187220,7 +187401,7 @@ "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1-expected.txt": [ - "99e212b4b48085a079a0b734847af784f46b9e6d", + "d36e7e2e748646b2212627d39794213d6fbc4a00", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1.html": [ @@ -187232,7 +187413,7 @@ "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2-expected.txt": [ - "0ef39049c06f72422589c4d1ee4404812e1757aa", + "37ac1ed390aeb4c1fb38c6f1ec34de68172b1232", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2.html": [ @@ -187244,7 +187425,7 @@ "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3-expected.txt": [ - "127a221c4090ad268424a8c3435a057ae4106072", + "548d3064710bacb55df26422f7d6b8fca62381ee", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3.html": [ @@ -187256,7 +187437,7 @@ "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4-expected.txt": [ - "b7eeda621692ba3cc04278721c1e6e0c610f74a1", + "66fdd3e4a53cf98280642cd5a16555113ff7a3cc", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4.html": [ @@ -187268,7 +187449,7 @@ "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5-expected.txt": [ - "41e456cb410bc565f2fd345e40f4c2056dac05a8", + "0aab1678660967bdd0356d0d552bda4b7a4e5332", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5.html": [ @@ -187280,7 +187461,7 @@ "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6-expected.txt": [ - "1fdb63d188e2704e3b9663029fb66110c7ec2605", + "79ca640b99e725395fe8db9e94fe9e4619fd06ac", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6.html": [ @@ -187292,7 +187473,7 @@ "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7-expected.txt": [ - "40e86b03502bd8bbcca54d87ee6ed879eace51f8", + "7ef658817efed0b0d70d2fc2f54645faec404a96", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7.html": [ @@ -187304,7 +187485,7 @@ "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8-expected.txt": [ - "45521b59af4acbdfe9bf12222134bef8116e2c2d", + "f9cf414a7db6f35a00d3a7267fca62bd93d8b7dc", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8.html": [ @@ -187316,7 +187497,7 @@ "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9-expected.txt": [ - "fb524b12e8b69e5ef678b72ccd98f63e41c20f46", + "e6567b44a096960c3a86082447f246417f9f0b03", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9.html": [ @@ -187328,7 +187509,7 @@ "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1-expected.txt": [ - "bf41c98ac3e701fe69343405cf54014be6fa7bef", + "c5f0cad2c856c7a74563b4c1a457b20f3d17c402", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1.html": [ @@ -187340,7 +187521,7 @@ "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2-expected.txt": [ - "b76966bb3e7f6a1ec24967d157edb9808e5b9b7e", + "90572274cbe1be19bb631e68c6af469275995407", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2.html": [ @@ -187352,7 +187533,7 @@ "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3-expected.txt": [ - "2c275047341e79bcd0b8086b610031805e07b3b4", + "26c8136edd3c565dba520234d16fcc2dd62a839c", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3.html": [ @@ -187364,7 +187545,7 @@ "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4-expected.txt": [ - "5519d05899fdd3a61e488a0632b5287db00f9115", + "d1c08594e32030f6380e6ed7a1229f2ea7423541", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4.html": [ @@ -187376,7 +187557,7 @@ "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5-expected.txt": [ - "3e0bd64540ceb832a3891b8200fbd91c9e07aab3", + "a51088016b0bdbb4e43df04fc01995b24117bd45", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5.html": [ @@ -187388,7 +187569,7 @@ "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6-expected.txt": [ - "8addacece7424e46b39eabc5d74a744ff82ce6c0", + "633fbb9ea1c72f675c6e09c90a965986917f9458", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6.html": [ @@ -187400,7 +187581,7 @@ "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1-expected.txt": [ - "ef27df1a3e74aadb3f429761353416960b7b6d5c", + "743f9e31ed81ae1e201b52d9d225f980a7d61806", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1.html": [ @@ -187420,7 +187601,7 @@ "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3-expected.txt": [ - "dce4674d84b6c8af7aa4b760b877d8c271bcf885", + "a5cf03d13cf3c85bc933280c236e55d7556b731a", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3.html": [ @@ -187432,7 +187613,7 @@ "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4-expected.txt": [ - "08d813c044970d6272c07d33f8e1a08f797cfd55", + "01be7f8d92bd20cc9a91b96ba371e8a2efc5291a", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4.html": [ @@ -187444,7 +187625,7 @@ "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5-expected.txt": [ - "1b3ae55d10f6f0776d453d2595e382247544c324", + "2c702e18cfe61b3a7ec3d1fff5a9e917e925d529", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5.html": [ @@ -187456,7 +187637,7 @@ "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6-expected.txt": [ - "2bdec3fe6ed352974929c696bc51855cb04b1fd9", + "5188ad8188c6b2459b59b5a893d0ff3d7ade5962", "support" ], "2dcontext/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6.html": [ @@ -188296,7 +188477,7 @@ "testharness" ], "2dcontext/fill-and-stroke-styles/2d.pattern.image.broken-expected.txt": [ - "f23e40370c7f0a09266efa4bd7a136dab578c4e0", + "9fa99f0c82cf726dc3a8667d616c2036ec8ffef5", "support" ], "2dcontext/fill-and-stroke-styles/2d.pattern.image.broken.html": [ @@ -188483,12 +188664,8 @@ "77a2b4d43407bad6e5d9eafb71180bd84190218f", "support" ], - "2dcontext/imagebitmap/createImageBitmap-drawImage-expected.txt": [ - "9e6a00813a8715fce1607e3c2e281dce5ed2420e", - "support" - ], "2dcontext/imagebitmap/createImageBitmap-drawImage.html": [ - "78a4df712927cfdf78c27490e3186e77da403511", + "56ebe218b07fe534ded2c5734c0ecbd1b4c30d49", "testharness" ], "2dcontext/imagebitmap/createImageBitmap-sizeOverflow.html": [ @@ -189132,7 +189309,7 @@ "support" ], "2dcontext/path-objects/2d.path.stroke.prune.arc-expected.txt": [ - "73270e1c7dafdd7791edab4852329d8cd69d8cdb", + "07ccf9b7e4fd440eaf1ffe2d2dca10566afee0a4", "support" ], "2dcontext/path-objects/2d.path.stroke.prune.arc.html": [ @@ -189140,7 +189317,7 @@ "testharness" ], "2dcontext/path-objects/2d.path.stroke.prune.closed-expected.txt": [ - "af16d21cac7455f424b7ee2cc449a71c6eb56362", + "2825218048080962ab833f9d2729bb8dc7edf212", "support" ], "2dcontext/path-objects/2d.path.stroke.prune.closed.html": [ @@ -189152,7 +189329,7 @@ "testharness" ], "2dcontext/path-objects/2d.path.stroke.prune.curve-expected.txt": [ - "3cabe136099a10a24b7e1abb1d0e555d5e2dcabd", + "b07266340fa1e4c607bc7fae07782bf419762dc0", "support" ], "2dcontext/path-objects/2d.path.stroke.prune.curve.html": [ @@ -189160,7 +189337,7 @@ "testharness" ], "2dcontext/path-objects/2d.path.stroke.prune.line-expected.txt": [ - "e8fb9e2eb7386bc5a494a238a6f2fcb8efc6a7cc", + "522d789edc04e41bf04083c04d5e0eb8a045c947", "support" ], "2dcontext/path-objects/2d.path.stroke.prune.line.html": [ @@ -189168,7 +189345,7 @@ "testharness" ], "2dcontext/path-objects/2d.path.stroke.prune.rect-expected.txt": [ - "87e654eb9270daa123d83be935ac7e11bc75be7b", + "3c57ea5971b80297130e5154a8de36dd4efc9b7d", "support" ], "2dcontext/path-objects/2d.path.stroke.prune.rect.html": [ @@ -189252,7 +189429,7 @@ "testharness" ], "2dcontext/pixel-manipulation/2d.imageData.create2.nonfinite-expected.txt": [ - "0f1d12b5b09d53acab60f61a613ba6d189b65301", + "d3326c51ba3acdf4b7d6b369d908a3de3278bd2d", "support" ], "2dcontext/pixel-manipulation/2d.imageData.create2.nonfinite.html": [ @@ -189288,7 +189465,7 @@ "testharness" ], "2dcontext/pixel-manipulation/2d.imageData.get.nonfinite-expected.txt": [ - "e5a5f047ae82b6b4ab7dbfd11de379743568c8bc", + "f08b4562cbed01eb23853dc875a6705c288b97f5", "support" ], "2dcontext/pixel-manipulation/2d.imageData.get.nonfinite.html": [ @@ -189348,7 +189525,7 @@ "testharness" ], "2dcontext/pixel-manipulation/2d.imageData.object.ctor.array.bounds-expected.txt": [ - "057218f179a6a849bde7822d754986a54a3db35d", + "716b69a502807e522ab13c91ada410e971e89cb7", "support" ], "2dcontext/pixel-manipulation/2d.imageData.object.ctor.array.bounds.html": [ @@ -189444,7 +189621,7 @@ "testharness" ], "2dcontext/pixel-manipulation/2d.imageData.put.nonfinite-expected.txt": [ - "e8d32d96231d0347ba88ff3df3afeb71b55046ca", + "a23ee9bf788697ad31b3490537d7cd3cf4311c41", "support" ], "2dcontext/pixel-manipulation/2d.imageData.put.nonfinite.html": [ @@ -189788,7 +189965,7 @@ "testharness" ], "2dcontext/text-styles/2d.text.draw.baseline.bottom-expected.txt": [ - "1333c8d2bdd1d5ffc8657133d731842adbdc6baf", + "21d33ac102c106ee21df4bcede965dae0965e1da", "support" ], "2dcontext/text-styles/2d.text.draw.baseline.bottom.html": [ @@ -189796,7 +189973,7 @@ "testharness" ], "2dcontext/text-styles/2d.text.draw.baseline.hanging-expected.txt": [ - "07ac51f66ff84d1bede6c8c7328224d56de3f0f7", + "3eeff7f74d664c91df2e45410580dab985048ff4", "support" ], "2dcontext/text-styles/2d.text.draw.baseline.hanging.html": [ @@ -189804,7 +189981,7 @@ "testharness" ], "2dcontext/text-styles/2d.text.draw.baseline.ideographic-expected.txt": [ - "15a9f41871b5e6d7204ce04cd0196ef73364235a", + "c0d32d1b0cc09350e6168b21f933829a860bd886", "support" ], "2dcontext/text-styles/2d.text.draw.baseline.ideographic.html": [ @@ -189812,7 +189989,7 @@ "testharness" ], "2dcontext/text-styles/2d.text.draw.baseline.middle-expected.txt": [ - "1880167da9f5a76f54da7a60ff4e46cb0d615bf4", + "f47a4ae5c805e20dda15b70cbf357e6425cc89d8", "support" ], "2dcontext/text-styles/2d.text.draw.baseline.middle.html": [ @@ -189820,7 +189997,7 @@ "testharness" ], "2dcontext/text-styles/2d.text.draw.baseline.top-expected.txt": [ - "699867086b747e17808fb3b57c1dad1e623df267", + "863995981666c3eb76b98fcb34272486761829e1", "support" ], "2dcontext/text-styles/2d.text.draw.baseline.top.html": [ @@ -189828,7 +190005,7 @@ "testharness" ], "2dcontext/text-styles/2d.text.draw.space.collapse.end-expected.txt": [ - "f360d72f35b95311321299364223fe91d6f0dd48", + "325c5f36d8c7fa50dbc8a7ac05106b021dfd24f7", "support" ], "2dcontext/text-styles/2d.text.draw.space.collapse.end.html": [ @@ -189836,7 +190013,7 @@ "testharness" ], "2dcontext/text-styles/2d.text.draw.space.collapse.other-expected.txt": [ - "09cf813ccc5c5953c83e6c32a1bfee59f3b3f60c", + "33a6e8ab58ae91672b2567aea87fe07f2bf2b468", "support" ], "2dcontext/text-styles/2d.text.draw.space.collapse.other.html": [ @@ -189844,7 +190021,7 @@ "testharness" ], "2dcontext/text-styles/2d.text.draw.space.collapse.space-expected.txt": [ - "09cf813ccc5c5953c83e6c32a1bfee59f3b3f60c", + "33a6e8ab58ae91672b2567aea87fe07f2bf2b468", "support" ], "2dcontext/text-styles/2d.text.draw.space.collapse.space.html": [ @@ -189852,7 +190029,7 @@ "testharness" ], "2dcontext/text-styles/2d.text.draw.space.collapse.start-expected.txt": [ - "2c28886b544c14242e45433853e956f874ce3482", + "8bc842dbe8dc406c36d57f464efacd094848201f", "support" ], "2dcontext/text-styles/2d.text.draw.space.collapse.start.html": [ @@ -189892,7 +190069,7 @@ "testharness" ], "2dcontext/text-styles/2d.text.measure.width.space-expected.txt": [ - "ce8cb218276267fc95fdc686fe6b6c97f85aabeb", + "bc1460b0a91fcf8b41581e7272b7071e63328534", "support" ], "2dcontext/text-styles/2d.text.measure.width.space.html": [ @@ -190204,17 +190381,13 @@ "support" ], "FileAPI/blob/Blob-XHR-revoke-expected.txt": [ - "787131c00ad00d2365cdd58bc29f30a9fb1f0a87", + "d3d914e35011a4085438f256b79dc3f50f17678f", "support" ], "FileAPI/blob/Blob-XHR-revoke.html": [ "5858a79442dcad6325b3ab4bb6a20fc302fcf64c", "testharness" ], - "FileAPI/blob/Blob-constructor-expected.txt": [ - "f05c2375c382db6a12ce8ff2748b9084119ecdec", - "support" - ], "FileAPI/blob/Blob-constructor.html": [ "fc5f5ef1deff60ceb2e2db86b511cdc03f19072f", "testharness" @@ -190232,7 +190405,7 @@ "testharness" ], "FileAPI/file/File-constructor-expected.txt": [ - "94fd9c8b5a0bffa2b4684d1155c2f985ecd39ae7", + "35a622c40836ff51ec831307a3f04b061265984c", "support" ], "FileAPI/file/File-constructor.html": [ @@ -190260,7 +190433,7 @@ "support" ], "FileAPI/historical.https-expected.txt": [ - "160e60497907426c529865a9a4e4939a1758859f", + "c3051878b9ef68d9b54f23c84bb56da82a462ff2", "support" ], "FileAPI/historical.https.html": [ @@ -191312,7 +191485,7 @@ "testharness" ], "IndexedDB/idbobjectstore_createIndex15-autoincrement-expected.txt": [ - "5df768893c4e8901d1c3b5b757cef62f353fe1f9", + "40662bce6724d3de05f88bfec23574c2b36d24ec", "support" ], "IndexedDB/idbobjectstore_createIndex15-autoincrement.htm": [ @@ -191820,7 +191993,7 @@ "support" ], "WebCryptoAPI/derive_bits_keys/test_ecdh_bits.https-expected.txt": [ - "100a1b87707f2a09b37a9b181c3edbd25d09c54e", + "2fdf4416e74f095aae24745864d4460d393e5f9b", "support" ], "WebCryptoAPI/derive_bits_keys/test_ecdh_bits.https.html": [ @@ -191832,7 +192005,7 @@ "testharness" ], "WebCryptoAPI/derive_bits_keys/test_hkdf.https-expected.txt": [ - "edc28137c9a06c7d49779924f76f045a44b2b5c3", + "b755b739a918f504e5feb2c46d60c434e0e07287", "support" ], "WebCryptoAPI/derive_bits_keys/test_hkdf.https.html": [ @@ -191840,7 +192013,7 @@ "testharness" ], "WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_empty.https-expected.txt": [ - "b42b43febc9c18e2848733a4bd76297c5dcc4316", + "ee74d044f74a823c43671753768c009b46731c4c", "support" ], "WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_empty.https.html": [ @@ -191848,7 +192021,7 @@ "testharness" ], "WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_long.https-expected.txt": [ - "0262965e5a7c6d60eaadff2742a39e42f1c277e6", + "78593678c9597ebc59422e5aedfa0c76d99e5d85", "support" ], "WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_long.https.html": [ @@ -191856,7 +192029,7 @@ "testharness" ], "WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_short.https-expected.txt": [ - "45a0466d751321961c29a0e9c7b7ca46024293da", + "60bd6d5e744e8ad038322ff3c5a217edf629119f", "support" ], "WebCryptoAPI/derive_bits_keys/test_pbkdf2_empty_short.https.html": [ @@ -191864,7 +192037,7 @@ "testharness" ], "WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_empty.https-expected.txt": [ - "fa45cf10aaeea5c396e5ce8e29063111dd8c5345", + "cc29259d7f89394105364299f946d2f3901b949b", "support" ], "WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_empty.https.html": [ @@ -191872,7 +192045,7 @@ "testharness" ], "WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_long.https-expected.txt": [ - "666e2ac4d8152eda73cb3d1ec137a773402f8845", + "5932c947dfc6b1024c8c72498d2def24c5250649", "support" ], "WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_long.https.html": [ @@ -191880,7 +192053,7 @@ "testharness" ], "WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_short.https-expected.txt": [ - "aa0d1b76914045dcfef311297b7ddfc607cc6db6", + "cbd7d0dd517240d36b0a742b112b5991d52aa2b6", "support" ], "WebCryptoAPI/derive_bits_keys/test_pbkdf2_long_short.https.html": [ @@ -191888,7 +192061,7 @@ "testharness" ], "WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_empty.https-expected.txt": [ - "815034c959f90c5cb618b7410b15b253f99dec7f", + "2fa8c60de0e0c574edcbf69dccb83a4c87c7fd47", "support" ], "WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_empty.https.html": [ @@ -191896,7 +192069,7 @@ "testharness" ], "WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_long.https-expected.txt": [ - "f322762354d71d0d256174d9019354eff9f4f4e1", + "775b0bf59743b80a7627497400e5840cf3636b09", "support" ], "WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_long.https.html": [ @@ -191904,7 +192077,7 @@ "testharness" ], "WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_short.https-expected.txt": [ - "75a3f16670790cb668ec331998fdd49fb137eea4", + "3843f2033fbd39e13a55c58b30611c348de09945", "support" ], "WebCryptoAPI/derive_bits_keys/test_pbkdf2_short_short.https.html": [ @@ -191964,7 +192137,7 @@ "support" ], "WebCryptoAPI/encrypt_decrypt/test_aes_cbc.https-expected.txt": [ - "76aafbc704366d08a1b335007b0a4e07df5b1920", + "9db971b133602a8d78cbd68f9db1eba2b193cd32", "support" ], "WebCryptoAPI/encrypt_decrypt/test_aes_cbc.https.html": [ @@ -191972,7 +192145,7 @@ "testharness" ], "WebCryptoAPI/encrypt_decrypt/test_aes_ctr.https-expected.txt": [ - "316ccb51d5f6539c0d2c0ac85a43820eb6bfacfc", + "81403d8b3b673934cdf282655de8d535489572a6", "support" ], "WebCryptoAPI/encrypt_decrypt/test_aes_ctr.https.html": [ @@ -191980,7 +192153,7 @@ "testharness" ], "WebCryptoAPI/encrypt_decrypt/test_aes_gcm.https-expected.txt": [ - "915c20a778d96ed0850ebbac75f5f4ca7ed8a689", + "7399742b27da04a983e27bcf65101ac09d74cf0a", "support" ], "WebCryptoAPI/encrypt_decrypt/test_aes_gcm.https.html": [ @@ -192088,7 +192261,7 @@ "testharness" ], "WebCryptoAPI/generateKey/test_aes-cbc.https-expected.txt": [ - "da492efdf628d9478810bfbc7e09bbbb31f9e218", + "ba22cf18660cff967db43957cfca0168223f40be", "support" ], "WebCryptoAPI/generateKey/test_aes-cbc.https.html": [ @@ -192096,7 +192269,7 @@ "testharness" ], "WebCryptoAPI/generateKey/test_aes-ctr.https-expected.txt": [ - "c1001239ecb567665c702bfae0da2e11a356cf34", + "56f3838cfce06706fe0953caa16b6ac8be1bbcbd", "support" ], "WebCryptoAPI/generateKey/test_aes-ctr.https.html": [ @@ -192104,7 +192277,7 @@ "testharness" ], "WebCryptoAPI/generateKey/test_failures.https-expected.txt": [ - "99d43635e3d26100877db3f4c50d9326a6d2c4f5", + "fcd700eff9eaa5bc0152c57ec3683154c05be759", "support" ], "WebCryptoAPI/generateKey/test_failures.https.html": [ @@ -192112,7 +192285,7 @@ "testharness" ], "WebCryptoAPI/generateKey/test_failures_AES-CBC.https-expected.txt": [ - "392935784a5ea47edc59f5699e8fe03ed9417c53", + "0393848c209111e18c9cd6bcacd55df2094c04e5", "support" ], "WebCryptoAPI/generateKey/test_failures_AES-CBC.https.html": [ @@ -192120,7 +192293,7 @@ "testharness" ], "WebCryptoAPI/generateKey/test_failures_AES-CTR.https-expected.txt": [ - "d73ad12a0a977c6b71caa7f50d5fd76746da6724", + "3c706ea6bf8491b1902e14e29cdcc42849991021", "support" ], "WebCryptoAPI/generateKey/test_failures_AES-CTR.https.html": [ @@ -192128,7 +192301,7 @@ "testharness" ], "WebCryptoAPI/generateKey/test_failures_AES-GCM.https-expected.txt": [ - "396f431edcefd6dd3858f656977cdfd0568be544", + "e4d6d3883ff7649dc7e69b3141ebd37bd6973de1", "support" ], "WebCryptoAPI/generateKey/test_failures_AES-GCM.https.html": [ @@ -192136,7 +192309,7 @@ "testharness" ], "WebCryptoAPI/generateKey/test_failures_AES-KW.https-expected.txt": [ - "cb599c3d2e1cb8ecaeaf3ab1a631e597adf128c3", + "77534e07fa01a6ba470901c9a85157ac1a1874fe", "support" ], "WebCryptoAPI/generateKey/test_failures_AES-KW.https.html": [ @@ -192168,7 +192341,7 @@ "testharness" ], "WebCryptoAPI/generateKey/test_successes_AES-CBC.https-expected.txt": [ - "da492efdf628d9478810bfbc7e09bbbb31f9e218", + "ba22cf18660cff967db43957cfca0168223f40be", "support" ], "WebCryptoAPI/generateKey/test_successes_AES-CBC.https.html": [ @@ -192176,7 +192349,7 @@ "testharness" ], "WebCryptoAPI/generateKey/test_successes_AES-CTR.https-expected.txt": [ - "c1001239ecb567665c702bfae0da2e11a356cf34", + "56f3838cfce06706fe0953caa16b6ac8be1bbcbd", "support" ], "WebCryptoAPI/generateKey/test_successes_AES-CTR.https.html": [ @@ -192184,7 +192357,7 @@ "testharness" ], "WebCryptoAPI/generateKey/test_successes_AES-GCM.https-expected.txt": [ - "25be4f6625f0fa8d8cb456b407ccbfc82c42bf90", + "e40432eccc3486b713ac6a789ab17a262e09707b", "support" ], "WebCryptoAPI/generateKey/test_successes_AES-GCM.https.html": [ @@ -192192,7 +192365,7 @@ "testharness" ], "WebCryptoAPI/generateKey/test_successes_AES-KW.https-expected.txt": [ - "2d9dced7a71cb12dedfee33cce272d4b5e561d00", + "ee0e84b29bbcdae2f681f6722acb24dec96588fe", "support" ], "WebCryptoAPI/generateKey/test_successes_AES-KW.https.html": [ @@ -192228,7 +192401,7 @@ "testharness" ], "WebCryptoAPI/idlharness-expected.txt": [ - "e3e08607ab60bc4067b9b5441f22a04595025803", + "30f4bb482cf42bf763989902b9b93546332c3b3c", "support" ], "WebCryptoAPI/idlharness.html": [ @@ -192236,7 +192409,7 @@ "testharness" ], "WebCryptoAPI/idlharness.https-expected.txt": [ - "368ac7b721dc832d0c21925f95b4a0501d6963b7", + "b25c08025f11894649ab17de5becaf060acafd35", "support" ], "WebCryptoAPI/idlharness.https.html": [ @@ -192280,7 +192453,7 @@ "testharness" ], "WebCryptoAPI/import_export/test_symmetric_importKey.https-expected.txt": [ - "970c6567ab8edb203428f5e26a7a36e0556fb650", + "efbb89553dec2530fcfe6a4ebb555c11e5e28381", "support" ], "WebCryptoAPI/import_export/test_symmetric_importKey.https.html": [ @@ -192368,7 +192541,7 @@ "support" ], "WebCryptoAPI/wrapKey_unwrapKey/test_wrapKey_unwrapKey.https-expected.txt": [ - "fc77e7c8d71ecfe49cc5a54a83fc746a100b59f9", + "6859ac533fc015ef9757316bc52b3dbd4d6987d1", "support" ], "WebCryptoAPI/wrapKey_unwrapKey/test_wrapKey_unwrapKey.https.html": [ @@ -192388,7 +192561,7 @@ "support" ], "WebIDL/current-realm-expected.txt": [ - "887ab7129ca196755565a06dca68854bac9b71a0", + "efa911bbb5402d6c4db133b3324ba6a1c508c772", "support" ], "WebIDL/current-realm.html": [ @@ -192408,7 +192581,7 @@ "testharness" ], "WebIDL/ecmascript-binding/es-exceptions/DOMException-custom-bindings.any-expected.txt": [ - "26433aefad55e9b4cbb7b7b66635fac1fd85bf26", + "5f3d1865ce2ac9b8c808d76f58892fe5847c54a2", "support" ], "WebIDL/ecmascript-binding/es-exceptions/DOMException-custom-bindings.any.js": [ @@ -192416,7 +192589,7 @@ "testharness" ], "WebIDL/ecmascript-binding/es-exceptions/DOMException-custom-bindings.any.worker-expected.txt": [ - "26433aefad55e9b4cbb7b7b66635fac1fd85bf26", + "5f3d1865ce2ac9b8c808d76f58892fe5847c54a2", "support" ], "WebIDL/ecmascript-binding/es-exceptions/exceptions.html": [ @@ -192432,7 +192605,7 @@ "testharness" ], "WebIDL/ecmascript-binding/interface-prototype-object-expected.txt": [ - "f9611911af3554b8ecb907aaddc29cbd1da20ed1", + "102032561519abd473e60cfb9424b593e60a3302", "support" ], "WebIDL/ecmascript-binding/interface-prototype-object.html": [ @@ -192444,7 +192617,7 @@ "testharness" ], "WebIDL/ecmascript-binding/legacy-platform-object-expected.txt": [ - "2ba186c48cb0c419ac3d0c7935e85b9c109af688", + "18fda69933eb52b757d1296c86b0b1e3796e350d", "support" ], "WebIDL/ecmascript-binding/legacy-platform-object.html": [ @@ -192456,7 +192629,7 @@ "testharness" ], "WebIDL/ecmascript-binding/sequence-conversion-expected.txt": [ - "e56a7a691f494bab0ed4a83c7899c5cd56c77af5", + "772598cd80bf073e951d710bfa390e6134cac97d", "support" ], "WebIDL/ecmascript-binding/sequence-conversion.html": [ @@ -192488,7 +192661,7 @@ "testharness" ], "XMLHttpRequest/abort-after-send-expected.txt": [ - "558ee8511dccc712821d5e4b794a791c10207e87", + "1b4675361c8437a53ce0c284b99a67fb9d241b25", "support" ], "XMLHttpRequest/abort-after-send.htm": [ @@ -192524,7 +192697,7 @@ "testharness" ], "XMLHttpRequest/abort-during-upload-expected.txt": [ - "301387199ed0f883262b2d046185946c6e49dd42", + "4bb6bea09d71cf0b56f2fe408d712e556f6853d4", "support" ], "XMLHttpRequest/abort-during-upload.htm": [ @@ -192544,7 +192717,7 @@ "testharness" ], "XMLHttpRequest/abort-event-order-expected.txt": [ - "139b2f2e87f535af116089c330ee231fc0bb75fe", + "85de8dd90bfcbf8ddcbc28c19af713e784029665", "support" ], "XMLHttpRequest/abort-event-order.htm": [ @@ -192568,7 +192741,7 @@ "testharness" ], "XMLHttpRequest/access-control-and-redirects-expected.txt": [ - "0a2280fdec8252e0c5ab06601403cc98a875730b", + "f98124c8c4cd32d4f23c115e84b15dfb02c5318b", "support" ], "XMLHttpRequest/access-control-and-redirects.htm": [ @@ -192644,7 +192817,7 @@ "testharness" ], "XMLHttpRequest/data-uri-expected.txt": [ - "e4aa1facd69082208cbc7f31fb58ed79561636c7", + "428621117c25a25369a80ade459f99cff97de522", "support" ], "XMLHttpRequest/data-uri.htm": [ @@ -192656,7 +192829,7 @@ "testharness" ], "XMLHttpRequest/event-error-order.sub-expected.txt": [ - "e67f6e1bddb9d2b31408dbf7a502f636925089c0", + "2d473dfdaa97dfc66fe871056b354c2c7187cf0a", "support" ], "XMLHttpRequest/event-error-order.sub.html": [ @@ -192676,7 +192849,7 @@ "testharness" ], "XMLHttpRequest/event-loadstart-upload-expected.txt": [ - "f3b9d8795f37f7357c819c1927eb1b6b17b944fd", + "e95e230421fa0329fd9f2e6817f57b2f0e467882", "support" ], "XMLHttpRequest/event-loadstart-upload.htm": [ @@ -192700,7 +192873,7 @@ "testharness" ], "XMLHttpRequest/event-timeout-order-expected.txt": [ - "9e3345180f93c4f5bda1e07a683229a0c31ff837", + "020a37d9fe92ee80be0dd687a1f7936219f43f83", "support" ], "XMLHttpRequest/event-timeout-order.htm": [ @@ -192712,7 +192885,7 @@ "testharness" ], "XMLHttpRequest/event-upload-progress-crossorigin-expected.txt": [ - "3bee101fdfec96f11684473d6f8a1903cf07793a", + "d7b1e40dbbf2e8988bd6eb225b126dd30c739bf1", "support" ], "XMLHttpRequest/event-upload-progress-crossorigin.htm": [ @@ -192764,7 +192937,7 @@ "testharness" ], "XMLHttpRequest/getallresponseheaders-expected.txt": [ - "11aa926d6321f8cd4b93f5707a4172243fa2c1db", + "df63becc7478231953953632fb8cf955af1051b6", "support" ], "XMLHttpRequest/getallresponseheaders-status.htm": [ @@ -192804,7 +192977,7 @@ "testharness" ], "XMLHttpRequest/headers-normalize-response-expected.txt": [ - "8598a728ef36bf24d06b0848f5d028bdff0ce1f1", + "9b717432b5fc35117923c98bbb3818a675e4c4cd", "support" ], "XMLHttpRequest/headers-normalize-response.htm": [ @@ -192904,7 +193077,7 @@ "testharness" ], "XMLHttpRequest/open-url-encoding-expected.txt": [ - "92037f70853525e7c9d31a60ce8fc1ca45bbdc49", + "3a0200b15f9a72e45f9bbaa3a1d10cf94708c9c6", "support" ], "XMLHttpRequest/open-url-encoding.htm": [ @@ -192924,7 +193097,7 @@ "testharness" ], "XMLHttpRequest/open-url-multi-window-2-expected.txt": [ - "bdbe55dd1beb597db28fbefe1c1e009113b3e2ce", + "f1e341b311e6e9aede8e967f2a4005c53345ebbc", "support" ], "XMLHttpRequest/open-url-multi-window-2.htm": [ @@ -192932,7 +193105,7 @@ "testharness" ], "XMLHttpRequest/open-url-multi-window-3-expected.txt": [ - "63e97749918d17b4c65d7c1d69cb7fa19fcc0760", + "be0491511e7519ddb8eb4cd473cca45553976432", "support" ], "XMLHttpRequest/open-url-multi-window-3.htm": [ @@ -192940,7 +193113,7 @@ "testharness" ], "XMLHttpRequest/open-url-multi-window-4-expected.txt": [ - "f87235baa12ea85152ac9a4a28d6f2f5e015c8c8", + "1565a35a430c60c8c1d3e8eb360acdc00a51bec8", "support" ], "XMLHttpRequest/open-url-multi-window-4.htm": [ @@ -192948,7 +193121,7 @@ "testharness" ], "XMLHttpRequest/open-url-multi-window-5-expected.txt": [ - "437da3b34abf3fdd4b7c99085b5e7b1770612140", + "7a8ce7f58c0209932c43b0d02d9728d224f0b89e", "support" ], "XMLHttpRequest/open-url-multi-window-5.htm": [ @@ -192956,7 +193129,7 @@ "testharness" ], "XMLHttpRequest/open-url-multi-window-6-expected.txt": [ - "dc8d9fbe1e0dc7c015743fa851ef756f945b1794", + "db6ec25afa0072b1cd6ef184f6e77add21d21ef4", "support" ], "XMLHttpRequest/open-url-multi-window-6.htm": [ @@ -193368,7 +193541,7 @@ "testharness" ], "XMLHttpRequest/response-data-progress-expected.txt": [ - "558ae097bdeb4e0ce9620529883c5338ab48ed77", + "820360ffc4151b7098748378c397fb15651209cf", "support" ], "XMLHttpRequest/response-data-progress.htm": [ @@ -193380,7 +193553,7 @@ "testharness" ], "XMLHttpRequest/response-json-expected.txt": [ - "bed7889010d8b42e36ae725a500e7cdae0835b8e", + "36a3f0ee9fe5a38b03f73c5aa100c4fb223dbeaf", "support" ], "XMLHttpRequest/response-json.htm": [ @@ -193396,7 +193569,7 @@ "testharness" ], "XMLHttpRequest/responsetext-decoding-expected.txt": [ - "48e25a6f86ddfee6b80290e7e51bffb52cdd9555", + "34a669ab51171b99e63ae3160442b8dc5e6ece51", "support" ], "XMLHttpRequest/responsetext-decoding.htm": [ @@ -193424,7 +193597,7 @@ "testharness" ], "XMLHttpRequest/responsexml-media-type-expected.txt": [ - "4a2275b265bc1b35a547436590b4c4aa85735e89", + "789957c25e891d161a9b05ae55d60c769370155b", "support" ], "XMLHttpRequest/responsexml-media-type.htm": [ @@ -193440,7 +193613,7 @@ "testharness" ], "XMLHttpRequest/security-consideration.sub-expected.txt": [ - "d20c805eb6d30da809dd952a16aba897f574741d", + "bec4719fa37a5371ec8cc15e7a5e7f4b366db187", "support" ], "XMLHttpRequest/security-consideration.sub.html": [ @@ -193488,7 +193661,7 @@ "testharness" ], "XMLHttpRequest/send-authentication-competing-names-passwords-expected.txt": [ - "615c5949f480ba797c47dbbc5e93018919ba723e", + "f490919f4a80bcbcf741b3d57a61535a612647aa", "support" ], "XMLHttpRequest/send-authentication-competing-names-passwords.htm": [ @@ -193496,7 +193669,7 @@ "testharness" ], "XMLHttpRequest/send-authentication-cors-basic-setrequestheader-expected.txt": [ - "28f36367f4be3a672b14700bdaf29ce6da8cce28", + "430714f71ab5436be48d4868cb30ddc330906b1a", "support" ], "XMLHttpRequest/send-authentication-cors-basic-setrequestheader.htm": [ @@ -193504,7 +193677,7 @@ "testharness" ], "XMLHttpRequest/send-authentication-cors-setrequestheader-no-cred-expected.txt": [ - "bc010c6baf857a6ab15645015573c8dd86477f57", + "33b7d3454b8a7a79a67e738cccc5111650aaa13a", "support" ], "XMLHttpRequest/send-authentication-cors-setrequestheader-no-cred.htm": [ @@ -193520,7 +193693,7 @@ "manual" ], "XMLHttpRequest/send-authentication-prompt-manual-expected.txt": [ - "443eb3875afd8493cb62b6b2ab705ff0d4e2e170", + "139009648a4c4636695a16fc97eab5bb9201be79", "support" ], "XMLHttpRequest/send-authentication-prompt-manual.htm": [ @@ -193540,7 +193713,7 @@ "testharness" ], "XMLHttpRequest/send-content-type-charset-expected.txt": [ - "c1332c0f710b764083e78b07ffae09fb3a21d04f", + "94e8f413beaf12be929d9b4a101b8085daf80acb", "support" ], "XMLHttpRequest/send-content-type-charset.htm": [ @@ -193548,7 +193721,7 @@ "testharness" ], "XMLHttpRequest/send-content-type-string-expected.txt": [ - "61bde08ab3f8ddb129383ce13ee82219698ff2f0", + "150e99fb4e90c56763c8d9b9ecf1a9802ed9a0b7", "support" ], "XMLHttpRequest/send-content-type-string.htm": [ @@ -193624,7 +193797,7 @@ "testharness" ], "XMLHttpRequest/send-no-response-event-order-expected.txt": [ - "3dd2b74f51a96c75796383e5fabd1653aa3c4cbb", + "b06dab21cd654fb8196fe1415e05eae84cb3b576", "support" ], "XMLHttpRequest/send-no-response-event-order.htm": [ @@ -193676,7 +193849,7 @@ "testharness" ], "XMLHttpRequest/send-response-event-order-expected.txt": [ - "7de2c65764c3227cf2e8b5d27509f0139c856769", + "5a165bf5933d67798987b06197d5682d9519982c", "support" ], "XMLHttpRequest/send-response-event-order.htm": [ @@ -193724,7 +193897,7 @@ "testharness" ], "XMLHttpRequest/send-sync-response-event-order-expected.txt": [ - "70c00c61fbfff76b3f6042dac646624464ccb3f0", + "2e1b0d0d3243f4ff217fda7774e2ad04db10e17f", "support" ], "XMLHttpRequest/send-sync-response-event-order.htm": [ @@ -193760,7 +193933,7 @@ "testharness" ], "XMLHttpRequest/setrequestheader-bogus-name-expected.txt": [ - "8aa3dcd06dc02e8a3445769fb069e80fd85b4a30", + "54133e76bee5faba0948e050fb53215e403337ba", "support" ], "XMLHttpRequest/setrequestheader-bogus-name.htm": [ @@ -193768,7 +193941,7 @@ "testharness" ], "XMLHttpRequest/setrequestheader-bogus-value-expected.txt": [ - "4ee9dc481f8fee1405b051d1e1535ef52f9370b3", + "2af3c8d0b3848616d18e2239e32600a165c60526", "support" ], "XMLHttpRequest/setrequestheader-bogus-value.htm": [ @@ -193780,7 +193953,7 @@ "testharness" ], "XMLHttpRequest/setrequestheader-content-type-expected.txt": [ - "ed48f75a8856e4564c11530bce0196bba04ea6ec", + "4af92d59302dd12d7bfaba287b1feafe7387df54", "support" ], "XMLHttpRequest/setrequestheader-content-type.htm": [ @@ -194003,12 +194176,28 @@ "e7549e915a809b48cac816dacdd7a9bbf476b596", "support" ], + "audio-output/HTMLMediaElement-sinkId-idl.html": [ + "8f37d8d2fc1cb9b5ad0d85234f733f534f4f0db8", + "testharness" + ], + "audio-output/setSinkId-manual.https.html": [ + "6743b9f6843a1c6134ac9cc627375b0368986e55", + "manual" + ], + "audio-output/setSinkId.https-expected.txt": [ + "04606b4d7bb21009c8dd3d200c50d8188f2bd75b", + "support" + ], + "audio-output/setSinkId.https.html": [ + "556ab735b0461aab4dbbb02d277da6ea07106469", + "testharness" + ], "background-fetch/interfaces-expected.txt": [ - "e1917d1f86972afa30445d34ab2666a1b30b7f6c", + "f7ad56c1281d8483293c3cfa19e51f4ee528250a", "support" ], "background-fetch/interfaces-worker.https-expected.txt": [ - "c0afe335a3e598594ab8779028b02548687db44e", + "a2a28c91a0e935e889f9c554b3028d89a7f5d959", "support" ], "background-fetch/interfaces-worker.https.html": [ @@ -194024,7 +194213,7 @@ "support" ], "background-fetch/interfaces.worker-expected.txt": [ - "6d0f72fd0b1a601f7d29eb2c9f709494d8fbceb1", + "edafe94c822bd71b8129bf12fb598fde26775375", "support" ], "background-fetch/interfaces.worker.js": [ @@ -194040,7 +194229,7 @@ "manual" ], "battery-status/battery-discharging-manual.https-expected.txt": [ - "51d6107258f7a2e023319482dc87cacce0f541ea", + "cbc5110f141bc48118af5408a90b455c34f7a3fb", "support" ], "battery-status/battery-discharging-manual.https.html": [ @@ -194052,7 +194241,7 @@ "manual" ], "battery-status/battery-iframe.https-expected.txt": [ - "eb6453b6d1c328ffc20afdbb96fe5d7602a7c1d1", + "0b71bb83ca4155605e2cfa25a8ef3125067df743", "support" ], "battery-status/battery-iframe.https.html": [ @@ -194060,7 +194249,7 @@ "testharness" ], "battery-status/battery-insecure-context-expected.txt": [ - "6be1447d61155d2656c958a00674ea311031b8eb", + "b3cb4cb139313b29c13ecf1652ac1583159d088c", "support" ], "battery-status/battery-insecure-context.html": [ @@ -194096,7 +194285,7 @@ "support" ], "beacon/beacon-basic-blob-expected.txt": [ - "54002e53a22f33ab12765a0342590d2ab557cc6c", + "d78eb8a55905b438166a3446389ffa2f26fca6c3", "support" ], "beacon/beacon-basic-blob.html": [ @@ -194104,7 +194293,7 @@ "testharness" ], "beacon/beacon-basic-blobMax-expected.txt": [ - "7252dd8292fdb2d5c3aa0e97c59e1a25661a70fd", + "8b499f7bc8c800eeeda1240b72fd93a2b28cb1de", "support" ], "beacon/beacon-basic-blobMax.html": [ @@ -194156,7 +194345,7 @@ "testharness" ], "beacon/headers/header-content-type-expected.txt": [ - "cfce1555852fb39dee45de50c96d2510d7c99267", + "07a5245011a7ece77ffe6e980b3456ba2213babf", "support" ], "beacon/headers/header-content-type.html": [ @@ -194164,7 +194353,7 @@ "testharness" ], "beacon/headers/header-referrer-no-referrer-when-downgrade.https-expected.txt": [ - "d7120d5fd0d4f1a0503339bb4a86345a64fd3cbb", + "92dd5007729894c30691bdf6d4cb7760070bfe3a", "support" ], "beacon/headers/header-referrer-no-referrer-when-downgrade.https.html": [ @@ -194188,7 +194377,7 @@ "testharness" ], "beacon/headers/header-referrer-strict-origin-when-cross-origin.https-expected.txt": [ - "d7120d5fd0d4f1a0503339bb4a86345a64fd3cbb", + "92dd5007729894c30691bdf6d4cb7760070bfe3a", "support" ], "beacon/headers/header-referrer-strict-origin-when-cross-origin.https.html": [ @@ -194196,7 +194385,7 @@ "testharness" ], "beacon/headers/header-referrer-strict-origin.https-expected.txt": [ - "d7120d5fd0d4f1a0503339bb4a86345a64fd3cbb", + "92dd5007729894c30691bdf6d4cb7760070bfe3a", "support" ], "beacon/headers/header-referrer-strict-origin.https.html": [ @@ -194204,7 +194393,7 @@ "testharness" ], "beacon/headers/header-referrer-unsafe-url.https-expected.txt": [ - "cd3cfb43cf8a6c7e1fafaa4262f0fd7df7633872", + "75d7309f03c5851902d85098b47889a6b6539ca7", "support" ], "beacon/headers/header-referrer-unsafe-url.https.html": [ @@ -194428,7 +194617,7 @@ "support" ], "common/performance-timeline-utils.js": [ - "0616ad8871126af7a74ff6937f3f7c623adcbd3e", + "cf06f5a0e00f29d862753144634b4e1d0f074fb8", "support" ], "common/performance-timeline-utils.js.headers": [ @@ -194492,7 +194681,7 @@ "support" ], "compat/historical-expected.txt": [ - "2be8fc5a7e553fbae99a70c7050cb99dca9102ab", + "76441cdce3463a9c11685dcb6f93b47f20f9eb5a", "support" ], "compat/historical.html": [ @@ -195984,7 +196173,7 @@ "testharness" ], "content-security-policy/frame-ancestors/frame-ancestors-nested-cross-in-cross-none-block-expected.txt": [ - "3111314ca9589e553a81bceb340dda251e3bc3a5", + "7313801edaefa8b31062a8d43d015d991143229f", "support" ], "content-security-policy/frame-ancestors/frame-ancestors-nested-cross-in-cross-none-block.html": [ @@ -195992,7 +196181,7 @@ "testharness" ], "content-security-policy/frame-ancestors/frame-ancestors-nested-cross-in-cross-self-block-expected.txt": [ - "998121ac3b7aa1650765732ce60997c89da8aa09", + "792807ee6943ef665867e57eb8af2f6ab88a33db", "support" ], "content-security-policy/frame-ancestors/frame-ancestors-nested-cross-in-cross-self-block.html": [ @@ -196008,7 +196197,7 @@ "testharness" ], "content-security-policy/frame-ancestors/frame-ancestors-nested-cross-in-cross-url-block-expected.txt": [ - "215913ff317ebac84ce6d2dbc7f60b68fb85a641", + "643247b29a833674b7b1abe82c9ff8e1122486b1", "support" ], "content-security-policy/frame-ancestors/frame-ancestors-nested-cross-in-cross-url-block.html": [ @@ -196016,7 +196205,7 @@ "testharness" ], "content-security-policy/frame-ancestors/frame-ancestors-nested-cross-in-same-none-block-expected.txt": [ - "3111314ca9589e553a81bceb340dda251e3bc3a5", + "7313801edaefa8b31062a8d43d015d991143229f", "support" ], "content-security-policy/frame-ancestors/frame-ancestors-nested-cross-in-same-none-block.html": [ @@ -196024,7 +196213,7 @@ "testharness" ], "content-security-policy/frame-ancestors/frame-ancestors-nested-cross-in-same-self-block-expected.txt": [ - "998121ac3b7aa1650765732ce60997c89da8aa09", + "792807ee6943ef665867e57eb8af2f6ab88a33db", "support" ], "content-security-policy/frame-ancestors/frame-ancestors-nested-cross-in-same-self-block.html": [ @@ -196032,7 +196221,7 @@ "testharness" ], "content-security-policy/frame-ancestors/frame-ancestors-nested-cross-in-same-star-allow-expected.txt": [ - "4d1561c84798d85eac541e1ae872b0d290f12590", + "a9be40d9b59e1cb51274df7bf526d89b65c41276", "support" ], "content-security-policy/frame-ancestors/frame-ancestors-nested-cross-in-same-star-allow.html": [ @@ -196040,7 +196229,7 @@ "testharness" ], "content-security-policy/frame-ancestors/frame-ancestors-nested-cross-in-same-url-allow-expected.txt": [ - "215913ff317ebac84ce6d2dbc7f60b68fb85a641", + "643247b29a833674b7b1abe82c9ff8e1122486b1", "support" ], "content-security-policy/frame-ancestors/frame-ancestors-nested-cross-in-same-url-allow.html": [ @@ -196048,7 +196237,7 @@ "testharness" ], "content-security-policy/frame-ancestors/frame-ancestors-nested-cross-in-same-url-block-expected.txt": [ - "215913ff317ebac84ce6d2dbc7f60b68fb85a641", + "643247b29a833674b7b1abe82c9ff8e1122486b1", "support" ], "content-security-policy/frame-ancestors/frame-ancestors-nested-cross-in-same-url-block.html": [ @@ -196056,7 +196245,7 @@ "testharness" ], "content-security-policy/frame-ancestors/frame-ancestors-nested-cross-in-sandboxed-cross-url-block-expected.txt": [ - "4b282eae4435842fa3777ceff7d78d538385711a", + "6acdacf55c529674764868560250538ebe92cf09", "support" ], "content-security-policy/frame-ancestors/frame-ancestors-nested-cross-in-sandboxed-cross-url-block.html": [ @@ -196064,7 +196253,7 @@ "testharness" ], "content-security-policy/frame-ancestors/frame-ancestors-nested-same-in-cross-none-block-expected.txt": [ - "3111314ca9589e553a81bceb340dda251e3bc3a5", + "7313801edaefa8b31062a8d43d015d991143229f", "support" ], "content-security-policy/frame-ancestors/frame-ancestors-nested-same-in-cross-none-block.html": [ @@ -196072,7 +196261,7 @@ "testharness" ], "content-security-policy/frame-ancestors/frame-ancestors-nested-same-in-cross-self-block-expected.txt": [ - "998121ac3b7aa1650765732ce60997c89da8aa09", + "792807ee6943ef665867e57eb8af2f6ab88a33db", "support" ], "content-security-policy/frame-ancestors/frame-ancestors-nested-same-in-cross-self-block.html": [ @@ -196088,7 +196277,7 @@ "testharness" ], "content-security-policy/frame-ancestors/frame-ancestors-nested-same-in-cross-url-block-expected.txt": [ - "215913ff317ebac84ce6d2dbc7f60b68fb85a641", + "643247b29a833674b7b1abe82c9ff8e1122486b1", "support" ], "content-security-policy/frame-ancestors/frame-ancestors-nested-same-in-cross-url-block.html": [ @@ -196096,7 +196285,7 @@ "testharness" ], "content-security-policy/frame-ancestors/frame-ancestors-nested-same-in-same-none-block-expected.txt": [ - "3111314ca9589e553a81bceb340dda251e3bc3a5", + "7313801edaefa8b31062a8d43d015d991143229f", "support" ], "content-security-policy/frame-ancestors/frame-ancestors-nested-same-in-same-none-block.html": [ @@ -196116,7 +196305,7 @@ "testharness" ], "content-security-policy/frame-ancestors/frame-ancestors-nested-same-in-same-url-block-expected.txt": [ - "215913ff317ebac84ce6d2dbc7f60b68fb85a641", + "643247b29a833674b7b1abe82c9ff8e1122486b1", "support" ], "content-security-policy/frame-ancestors/frame-ancestors-nested-same-in-same-url-block.html": [ @@ -196124,7 +196313,7 @@ "testharness" ], "content-security-policy/frame-ancestors/frame-ancestors-none-block-expected.txt": [ - "45414ef3eda575ddab318619c29eb32f2f53ef52", + "d186e0189465673e9897471ddd8bea0bdcd26dd2", "support" ], "content-security-policy/frame-ancestors/frame-ancestors-none-block.html": [ @@ -196140,7 +196329,7 @@ "testharness" ], "content-security-policy/frame-ancestors/frame-ancestors-self-block-expected.txt": [ - "ac2b4ae241595d763fd07b270e4324cb734e3518", + "2bbf41956f0593a01884a59c76ca9fc4c8eeeef4", "support" ], "content-security-policy/frame-ancestors/frame-ancestors-self-block.html": [ @@ -196148,7 +196337,7 @@ "testharness" ], "content-security-policy/frame-ancestors/frame-ancestors-star-allow-crossorigin-expected.txt": [ - "2f5ef349f841bdcd8820c9b57e44c7553327869b", + "860c780d78636b3703730365b384bdda82c9826a", "support" ], "content-security-policy/frame-ancestors/frame-ancestors-star-allow-crossorigin.html": [ @@ -196164,7 +196353,7 @@ "testharness" ], "content-security-policy/frame-ancestors/frame-ancestors-url-block-expected.txt": [ - "8088d89859ba7cd7bfe43acf8d893472e7f7a0f9", + "86d1bde291913e0390c0395135992ab1dff3b146", "support" ], "content-security-policy/frame-ancestors/frame-ancestors-url-block.html": [ @@ -196856,7 +197045,7 @@ "testharness" ], "content-security-policy/securitypolicyviolation/idl-expected.txt": [ - "375bdc2a72d96d28608acab81a57240d16a300e7", + "0b6dee66180a3f693669b3701fea143cfa005962", "support" ], "content-security-policy/securitypolicyviolation/idl.html": [ @@ -197256,7 +197445,7 @@ "support" ], "cookies/path/match-expected.txt": [ - "50a6d500bd8340a69575d13a8aa0b21132e9fdd7", + "8b8ed700e19fa2b402830251ce9fbc715e887ed0", "support" ], "cookies/path/match.html": [ @@ -197292,7 +197481,7 @@ "support" ], "cookies/secure/set-from-ws.https.sub-expected.txt": [ - "d0c2bd6e046fd7c98bae2d692c80afb66b6020a2", + "9f814c91aebbad3ea9b6b6d603bca9a3372661da", "support" ], "cookies/secure/set-from-ws.https.sub.html": [ @@ -197320,7 +197509,7 @@ "testharness" ], "cors/allow-headers-expected.txt": [ - "2b3dbc564e08536e7e613e053e7a8513fc255d32", + "8f66780344f5f9ccdea95193f985ae388b20d805", "support" ], "cors/allow-headers.htm": [ @@ -197340,7 +197529,7 @@ "testharness" ], "cors/origin-expected.txt": [ - "9a2c0b44cb10781666f12e85f6b42df9449d8043", + "50c48651fa12e8cc5d554e653c2ff4126350c0c9", "support" ], "cors/origin.htm": [ @@ -197348,7 +197537,7 @@ "testharness" ], "cors/preflight-cache-expected.txt": [ - "bf5cc2850ec6c3aedc96c0f6c7a8010057614f55", + "64e9c0bb93fba26d4ec167facbd79966b53e6425", "support" ], "cors/preflight-cache.htm": [ @@ -197376,7 +197565,7 @@ "testharness" ], "cors/remote-origin-expected.txt": [ - "6c62a3ad9c03452f5909448593e1273163165ccb", + "6a569b08bcfbccdcadc0d1a4fa173bc617bf7cda", "support" ], "cors/remote-origin.htm": [ @@ -197456,7 +197645,7 @@ "support" ], "credential-management/credentialscontainer-create-basics.https-expected.txt": [ - "fa508f3a6325200e4c908f30725c7ccd3791660b", + "4c3280de2e3660d1e6868edcbd5c95d549dc3d27", "support" ], "credential-management/credentialscontainer-create-basics.https.html": [ @@ -197939,8 +198128,20 @@ "44266556969c01b5c6c65ade643141bbb1364658", "reftest" ], + "css-scoping/slotted-parsing.html": [ + "6bac5b15011d7177a40f7ca3e3c5f7e410643920", + "testharness" + ], + "css-scoping/slotted-with-pseudo-element-ref.html": [ + "48561a3dff973b7ad1bfa9702461e50fd4a67c2d", + "support" + ], + "css-scoping/slotted-with-pseudo-element.html": [ + "27d36ba54623bbee2cdd09b7a9322873d5ab0011", + "reftest" + ], "css-timing/cubic-bezier-timing-functions-output-expected.txt": [ - "55d3fc7b0d318a2cbf418f5b386b0fac8eae0023", + "5396b6e8071be91928a1f85ad632d1233f14df15", "support" ], "css-timing/cubic-bezier-timing-functions-output.html": [ @@ -197964,7 +198165,7 @@ "support" ], "css-typed-om/CSSMatrixComponent-DOMMatrix-mutable-expected.txt": [ - "b382ae164d95402e1b19a9199e647316cb41ba4c", + "c1b498ac25a92f793d955a0b74a5ebe28aa9d4b4", "support" ], "css-typed-om/CSSMatrixComponent-DOMMatrix-mutable.html": [ @@ -197976,7 +198177,7 @@ "testharness" ], "css-typed-om/styleMap-update-function-expected.txt": [ - "bbcf689bd0b536339ec537f888d3e91bb8ec09ff", + "f111d0c8c763b489e26219a38652540dcfc85f2c", "support" ], "css-typed-om/styleMap-update-function.html": [ @@ -221208,7 +221409,7 @@ "manual" ], "css/css-fonts-3/test_font_family_parsing-expected.txt": [ - "c1dbd5633e13d63510d184c1b2c7260d060d36e9", + "30d9e6ba64f90fdaeb438e7790dbaa6dc319c9ec", "support" ], "css/css-fonts-3/test_font_family_parsing.html": [ @@ -221216,7 +221417,7 @@ "testharness" ], "css/css-fonts-3/test_font_feature_values_parsing-expected.txt": [ - "0e35dd8e5f13ded1232a55a0d0605346ee585eee", + "da5ea3621352295f248dda01e3362d451afe8e7d", "support" ], "css/css-fonts-3/test_font_feature_values_parsing.html": [ @@ -223600,7 +223801,7 @@ "testharness" ], "css/css-shapes-1/shape-outside/values/shape-image-threshold-003-expected.txt": [ - "b6aa762094b3e323f67c13f7a0f6b31116f00935", + "d0cbafa9d9cd7497d272701241a1d7f9cd719c79", "support" ], "css/css-shapes-1/shape-outside/values/shape-image-threshold-003.html": [ @@ -223616,7 +223817,7 @@ "testharness" ], "css/css-shapes-1/shape-outside/values/shape-margin-002-expected.txt": [ - "23af433663a63e634effa69b4d0023f30ac728c3", + "0a582866b85b8541c0ef7bec5bb8dc0b983195ab", "support" ], "css/css-shapes-1/shape-outside/values/shape-margin-002.html": [ @@ -223632,7 +223833,7 @@ "testharness" ], "css/css-shapes-1/shape-outside/values/shape-margin-005-expected.txt": [ - "10cec52f3f35b572b9e356e4497e8156251afaba", + "93518c7e32111d9d86196d7c945f5968f49ffeb3", "support" ], "css/css-shapes-1/shape-outside/values/shape-margin-005.html": [ @@ -223752,7 +223953,7 @@ "testharness" ], "css/css-shapes-1/shape-outside/values/shape-outside-inset-001-expected.txt": [ - "eff69df3a09150531caa34671e6f4bc3576f1ff6", + "9a1feada1ec187e9b2fcb4e3910802cd850d5f50", "support" ], "css/css-shapes-1/shape-outside/values/shape-outside-inset-001.html": [ @@ -224348,7 +224549,7 @@ "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-026-expected.txt": [ - "68be0aa3f1661af9bbb46418a892ed4244cd39fc", + "8828ffc5631ca67e5244d3c743e0fe0a7620ac34", "support" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-026.html": [ @@ -224536,7 +224737,7 @@ "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-083-expected.txt": [ - "68be0aa3f1661af9bbb46418a892ed4244cd39fc", + "8828ffc5631ca67e5244d3c743e0fe0a7620ac34", "support" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-083.html": [ @@ -224572,7 +224773,7 @@ "testharness" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-094-expected.txt": [ - "68be0aa3f1661af9bbb46418a892ed4244cd39fc", + "8828ffc5631ca67e5244d3c743e0fe0a7620ac34", "support" ], "css/css-text-3/i18n/css3-text-line-break-baspglwj-094.html": [ @@ -238292,7 +238493,7 @@ "testharness" ], "css/geometry-1/DOMPoint-001-expected.txt": [ - "1d1653e3a532efe9ecd8fb474e7bd3e51a7a3467", + "136578954854d9c085ee0db67869594d9876d7ab", "support" ], "css/geometry-1/DOMPoint-001.html": [ @@ -238304,7 +238505,7 @@ "testharness" ], "css/geometry-1/DOMQuad-001-expected.txt": [ - "ece00d8625a4d1e70573027ffdf829676bb39418", + "25e0a3d3c85897d17aaea83e56a54a7de52d81ac", "support" ], "css/geometry-1/DOMQuad-001.html": [ @@ -238320,7 +238521,7 @@ "testharness" ], "css/geometry-1/DOMRectList-expected.txt": [ - "186cf2fa37abcfb38caaf29e25b1f84eeec53554", + "29fe97f8e219afd6e45e7c62bb1bd0a63ba12c85", "support" ], "css/geometry-1/DOMRectList.html": [ @@ -238344,7 +238545,7 @@ "testharness" ], "css/geometry-1/interfaces-expected.txt": [ - "52cba59f4b0eb6de5e3f4bbb42c7b0c4547b7de7", + "9cd8b412e0a8fe75fd279ac8bfe24d55babb47b6", "support" ], "css/geometry-1/interfaces.html": [ @@ -238444,7 +238645,7 @@ "testharness" ], "css/motion-1/parsing/offset-path-parsing-valid-expected.txt": [ - "388ad89c30d8ab6d09a719a17dfffe02896fea92", + "cce987ea00020ef289c2841b9fe25b133b519d09", "support" ], "css/motion-1/parsing/offset-path-parsing-valid.html": [ @@ -241076,7 +241277,7 @@ "testharness" ], "cssom-view/cssom-getClientRects-002-expected.txt": [ - "9a34de1b85869d6354083854633b2b2c800dd784", + "bd57678fa8c7715f3833bec06f1b4a52dffa9d0c", "support" ], "cssom-view/cssom-getClientRects-002.html": [ @@ -241100,7 +241301,7 @@ "testharness" ], "cssom-view/cssom-view/window-interface-expected.txt": [ - "f9c91ee81e61bbe5168efcfb6c710abcbdf265a0", + "4924f52541d9b60cfc8155af4804e946d271cbaa", "support" ], "cssom-view/cssom-view/window-interface.xht": [ @@ -241116,7 +241317,7 @@ "testharness" ], "cssom-view/elementFromPosition-expected.txt": [ - "40e5741bd552d42fd81b876f74332b8c281454fd", + "0a4de2fc7fea78f0ae11f910b4214d9dc611b811", "support" ], "cssom-view/elementFromPosition.html": [ @@ -241452,7 +241653,7 @@ "testharness" ], "cssom/CSSKeyframeRule-expected.txt": [ - "b684ea5a7e1e5be378931134cd64cdf39d862a64", + "3e19964419e7cce953cb58b5703656dc0b731ac5", "support" ], "cssom/CSSKeyframeRule.html": [ @@ -241460,7 +241661,7 @@ "testharness" ], "cssom/CSSKeyframesRule-expected.txt": [ - "9d4a0e70fbf9e2a937eb1b9085d2151b6bf78e16", + "fb6b20b5476d609aadc4d85ac6588e3578de903d", "support" ], "cssom/CSSKeyframesRule.html": [ @@ -241532,7 +241733,7 @@ "testharness" ], "cssom/cssom-fontfacerule-expected.txt": [ - "05cbaaccfc39fad2c6ecb579d66f9df02c7521ff", + "832f328c409ba0c9faa64dede5b03d2c217dc980", "support" ], "cssom/cssom-fontfacerule.html": [ @@ -241559,8 +241760,12 @@ "c9ed57c7ef7a035c25feff4ea60547a57d727f31", "testharness" ], + "cssom/getComputedStyle-pseudo-expected.txt": [ + "01c75c0d5819c8501bcdfe6b83eee51d58aefea7", + "support" + ], "cssom/getComputedStyle-pseudo.html": [ - "1eead8a132a035788c5d5584b41024e42975bd9c", + "559c54b37d42757391e1e7ad0739cf293caac271", "testharness" ], "cssom/historical.html": [ @@ -241572,7 +241777,7 @@ "testharness" ], "cssom/index-002-expected.txt": [ - "ff8799530548cd7dd1ab3c497f507aa6e62d8b17", + "3414c391218bb2194ecb8fc717796a18c0798757", "support" ], "cssom/index-002.html": [ @@ -241580,7 +241785,7 @@ "testharness" ], "cssom/inline-style-001-expected.txt": [ - "854f4a7f81962431f6132acf5ff6b42ff3819c53", + "027a895d5ef937507e0265bad4c2d28af16d7471", "support" ], "cssom/inline-style-001.html": [ @@ -241604,7 +241809,7 @@ "testharness" ], "cssom/interfaces-expected.txt": [ - "a42310bfdde44ca58b0070f39d8d1394e0dbbfab", + "a4a55454d043bea60317549cf8f39ed3032bcce0", "support" ], "cssom/interfaces.html": [ @@ -241612,7 +241817,7 @@ "testharness" ], "cssom/medialist-interfaces-001-expected.txt": [ - "5b28fc21421358f35fe030552a13d3a44ebfcb3a", + "8b1bfde2130adbd68e6d0c9f74f88f87519dd608", "support" ], "cssom/medialist-interfaces-001.html": [ @@ -241620,7 +241825,7 @@ "testharness" ], "cssom/medialist-interfaces-002-expected.txt": [ - "0e120d75caedff5879b4da464f4fe38333efe875", + "6dccef0fd6207468880af499bbeeb847bbc203bd", "support" ], "cssom/medialist-interfaces-002.html": [ @@ -241632,7 +241837,7 @@ "testharness" ], "cssom/medialist-interfaces-004-expected.txt": [ - "435495326a27ba1596e043d89df62e6f66458ff6", + "6bb4a4cab61bb5ad8abaab7dcf3d000aabe7aa82", "support" ], "cssom/medialist-interfaces-004.html": [ @@ -241644,7 +241849,7 @@ "testharness" ], "cssom/selectorSerialize-expected.txt": [ - "be841dc5ad7bb520ef21e922b0781d0e393bcb71", + "5ea43b76b32c379ae6171f66b5cc523f62d66f3d", "support" ], "cssom/selectorSerialize.html": [ @@ -241660,7 +241865,7 @@ "testharness" ], "cssom/serialize-values-expected.txt": [ - "1c3e011fdc2e365fb047d95a2489096d650ba0b4", + "8058353de247fc339d1ea4b09dc1cd222705f876", "support" ], "cssom/serialize-values.html": [ @@ -241668,7 +241873,7 @@ "testharness" ], "cssom/serialize-variable-reference-expected.txt": [ - "0a3934554c62b90ae4fd0d8976da28ac7bcb005c", + "775d0e62c85f229f707f5ad49755102a1ebb2b83", "support" ], "cssom/serialize-variable-reference.html": [ @@ -241676,7 +241881,7 @@ "testharness" ], "cssom/shorthand-serialization-expected.txt": [ - "343b41f87fc8e418b70a2ba51ca7ce329769e8f9", + "47e94003c8a7a1b413c19a97736e92f7c17ce63d", "support" ], "cssom/shorthand-serialization.html": [ @@ -241684,7 +241889,7 @@ "testharness" ], "cssom/style-sheet-interfaces-001-expected.txt": [ - "766e9c1b8a8daa003076511584bb695b1e1b5d66", + "25d235d66de4f66d64b59f987d67e27fa13c77ca", "support" ], "cssom/style-sheet-interfaces-001.html": [ @@ -241700,7 +241905,7 @@ "support" ], "cssom/stylesheet-same-origin.sub-expected.txt": [ - "80225aa5a0a6c3f45168e11e1f84159ef5ad34da", + "697b60574b91a48a7e17bc7552117190d320c399", "support" ], "cssom/stylesheet-same-origin.sub.html": [ @@ -241888,7 +242093,7 @@ "support" ], "cssom/ttwf-cssom-doc-ext-load-count-expected.txt": [ - "8f765460a64800bc2ccc6d0067a3b9b65cc4d1b2", + "11513b9024a1be53834045a9911e825006cd4519", "support" ], "cssom/ttwf-cssom-doc-ext-load-count.html": [ @@ -241904,7 +242109,7 @@ "testharness" ], "cssom/variable-names-expected.txt": [ - "326857ef59e6d6fe47944c7d1af6f1f4873eefee", + "e117b6bfc8b8f3bd68a199a6f0c949f8803046a8", "support" ], "cssom/variable-names.html": [ @@ -241948,7 +242153,7 @@ "testharness" ], "custom-elements/custom-element-registry/per-global-expected.txt": [ - "267597a1d8ff22309a802ccebd4f4955ae93d27f", + "2d4fd6a17b2ddb838d293c20d245ee77e7630742", "support" ], "custom-elements/custom-element-registry/per-global.html": [ @@ -241960,7 +242165,7 @@ "testharness" ], "custom-elements/htmlconstructor/newtarget-expected.txt": [ - "59387c7590232900e2588f081f0de8a896af8ed5", + "bb90c9b2aada86084cbdbe0358b6073ec60c80be", "support" ], "custom-elements/htmlconstructor/newtarget.html": [ @@ -242008,7 +242213,7 @@ "testharness" ], "custom-elements/reactions/CSSStyleDeclaration-expected.txt": [ - "c7c21bce3b41d543281f0dcb46af41659429812a", + "83202a62a05671a680a10800cf8f69d52b4d7cba", "support" ], "custom-elements/reactions/CSSStyleDeclaration.html": [ @@ -242044,7 +242249,7 @@ "testharness" ], "custom-elements/reactions/HTMLElement-expected.txt": [ - "fd027b233d354d933eb260def242be36ea6bccf8", + "4fe1bcede8e52ca58ae3fec362076901109fd896", "support" ], "custom-elements/reactions/HTMLElement.html": [ @@ -242140,7 +242345,7 @@ "support" ], "dom/abort/event.any-expected.txt": [ - "2c1f397ea7914de183f9fa09bf608244e75e4cb2", + "6f2cea5bf5e7c1f5c0a71361bcb3543fd91b0a4e", "support" ], "dom/abort/event.any.js": [ @@ -242148,7 +242353,7 @@ "testharness" ], "dom/abort/event.any.worker-expected.txt": [ - "2c1f397ea7914de183f9fa09bf608244e75e4cb2", + "6f2cea5bf5e7c1f5c0a71361bcb3543fd91b0a4e", "support" ], "dom/collections/HTMLCollection-as-proto-length-get-throws.html": [ @@ -242160,7 +242365,7 @@ "testharness" ], "dom/collections/HTMLCollection-supported-property-indices-expected.txt": [ - "a3d50214432879702375925f5a3f15945cf067c2", + "b903ea02c826fab7ef4b261f5039442837232294", "support" ], "dom/collections/HTMLCollection-supported-property-indices.html": [ @@ -242168,7 +242373,7 @@ "testharness" ], "dom/collections/HTMLCollection-supported-property-names-expected.txt": [ - "e9cf5896fc4b014f3e388d01453a730892709776", + "141580d1066cdb8aeeca208e7fc5b6b029ec6fa8", "support" ], "dom/collections/HTMLCollection-supported-property-names.html": [ @@ -242180,7 +242385,7 @@ "testharness" ], "dom/collections/namednodemap-supported-property-names-expected.txt": [ - "d57ed72ceb234cf2d40479eb151505c5cf44e372", + "28d95e030cefa4782040d4b90f310a803db353de", "support" ], "dom/collections/namednodemap-supported-property-names.html": [ @@ -242308,7 +242513,7 @@ "testharness" ], "dom/events/Event-subclasses-constructors-expected.txt": [ - "7f182fb36ee7ec61a74726c3823ef85107c8f883", + "ea2687f348860f945bf85981b09b83f1a44851e8", "support" ], "dom/events/Event-subclasses-constructors.html": [ @@ -242340,7 +242545,7 @@ "testharness" ], "dom/events/EventListener-incumbent-global-2.sub-expected.txt": [ - "f6ecdf668b8447f01466cdac4d588df41bbc39b9", + "ec0040ef3cf13a9c7d60b4b9f19056e34549d4a2", "support" ], "dom/events/EventListener-incumbent-global-2.sub.html": [ @@ -242372,7 +242577,7 @@ "testharness" ], "dom/events/EventTarget-constructible.any-expected.txt": [ - "8f311fac545add37b2f179f2b3d2dd3b4e26e772", + "3e14512f0df23cfb7b2ade164c883883e5bff348", "support" ], "dom/events/EventTarget-constructible.any.js": [ @@ -242380,7 +242585,7 @@ "testharness" ], "dom/events/EventTarget-constructible.any.worker-expected.txt": [ - "8f311fac545add37b2f179f2b3d2dd3b4e26e772", + "3e14512f0df23cfb7b2ade164c883883e5bff348", "support" ], "dom/events/EventTarget-dispatchEvent-returnvalue.html": [ @@ -242396,7 +242601,7 @@ "testharness" ], "dom/historical-expected.txt": [ - "ec80273cbf8b488a8122aacd98dc85946a903d6f", + "387b119e3cccf403c5627b5d88c1f974ae3e22fb", "support" ], "dom/historical.html": [ @@ -242404,7 +242609,7 @@ "testharness" ], "dom/interface-objects-expected.txt": [ - "1c64a67ab25917c522888904b85a444e7eb92a7c", + "a5755948900b9df58e96c3ea8c23c67d7c05f62c", "support" ], "dom/interface-objects.html": [ @@ -242412,7 +242617,7 @@ "testharness" ], "dom/interfaces-expected.txt": [ - "077850253a4dbaab9b562bf3f435c192ba3bc223", + "2e4a788463863b471c85db0f591ce1509af9b449", "support" ], "dom/interfaces.html": [ @@ -242424,7 +242629,7 @@ "testharness" ], "dom/lists/DOMTokenList-coverage-for-attributes-expected.txt": [ - "a096b5214f37d82c928a8a1698914602b8534e8d", + "f409fe830f1e0af7f8f509dce38eca8f32b648d0", "support" ], "dom/lists/DOMTokenList-coverage-for-attributes.html": [ @@ -242548,7 +242753,7 @@ "testharness" ], "dom/nodes/Document-constructor-expected.txt": [ - "ab7573889ec3d2dbc67ac89a21e7f6c0264ba069", + "5547a7aa5c802c3968aa0db3f73ab0812903c02b", "support" ], "dom/nodes/Document-constructor-svg.svg": [ @@ -242584,7 +242789,7 @@ "testharness" ], "dom/nodes/Document-contentType/contentType/contenttype_javascripturi-expected.txt": [ - "ce1d56364af976ab426a6fceae9f08d9e9eae1a3", + "a30b185286cf014ea147856a9eb4a80250c23995", "support" ], "dom/nodes/Document-contentType/contentType/contenttype_javascripturi.html": [ @@ -242860,7 +243065,7 @@ "support" ], "dom/nodes/Document-createEvent-expected.txt": [ - "7a791e90bb1dc2cda4666387c021f226f4012b44", + "7fdfcbbf234d0128d11ab46a39b90958da44b3a9", "support" ], "dom/nodes/Document-createEvent.html": [ @@ -242900,7 +243105,7 @@ "testharness" ], "dom/nodes/Document-getElementsByTagName-expected.txt": [ - "6807440953b20589b9ea619a50a508941c130327", + "ed83a4654dd1267c08f35569409af432cddc4af6", "support" ], "dom/nodes/Document-getElementsByTagName-xhtml.xhtml": [ @@ -242996,7 +243201,7 @@ "testharness" ], "dom/nodes/Element-children-expected.txt": [ - "4d00e3417ce271ce94fe5a0aa4732f84ad74851d", + "2874d4cc770a2d8778d8c09047f5dbf73225013f", "support" ], "dom/nodes/Element-children.html": [ @@ -243008,7 +243213,7 @@ "testharness" ], "dom/nodes/Element-closest-expected.txt": [ - "806629fe1db1f2c4aeeeadc7696e504deeaee585", + "c35944de61d28000d5481c1aaa6995763184c1b7", "support" ], "dom/nodes/Element-closest.html": [ @@ -243060,7 +243265,7 @@ "testharness" ], "dom/nodes/Element-getElementsByTagName-expected.txt": [ - "66c6f9a627ea902c5ea3b6cded8cbf3fe7e557c6", + "02dfb5251988fad0b5235cae48a72323e30b1bb9", "support" ], "dom/nodes/Element-getElementsByTagName.html": [ @@ -243104,7 +243309,7 @@ "testharness" ], "dom/nodes/Element-matches-expected.txt": [ - "e29049359c5fbfbb62dc503b27025aaf1f3158c8", + "8329d73c8c29b4426e6d6566779665732100d54f", "support" ], "dom/nodes/Element-matches-init.js": [ @@ -243168,7 +243373,7 @@ "testharness" ], "dom/nodes/Element-webkitMatchesSelector-expected.txt": [ - "acffaeaa2381ef19831e6e20ddf153fb9dfb4813", + "d7e58104dfeef6b1cf8b7a82f9a86bb9d529c226", "support" ], "dom/nodes/Element-webkitMatchesSelector.html": [ @@ -243216,7 +243421,7 @@ "testharness" ], "dom/nodes/Node-cloneNode-expected.txt": [ - "862708872f00abc7b0ba88374fbd43a3005da539", + "70d095dbc4d0cafdce6436272939a0a3fea08c65", "support" ], "dom/nodes/Node-cloneNode.html": [ @@ -243340,11 +243545,11 @@ "support" ], "dom/nodes/ParentNode-querySelector-All-expected.txt": [ - "bebf063d1dbbaaa93eee8bac6b3df3a01404145a", + "5c56058946b9a67c2cfea9218e02ad2fe545f0e4", "support" ], "dom/nodes/ParentNode-querySelector-All-xht-expected.txt": [ - "6c543c2a07995c83050243fcb8515da4b37ef807", + "3b919aefa7aeb3325eaadbf83796ced23c340822", "support" ], "dom/nodes/ParentNode-querySelector-All-xht.xht": [ @@ -243384,7 +243589,7 @@ "testharness" ], "dom/nodes/attributes-expected.txt": [ - "c33ab772e782137e97852f61b3dafebc482457a0", + "2ced5ce8a01c667de70eaf4746a3e952330cbc3a", "support" ], "dom/nodes/attributes.html": [ @@ -243704,7 +243909,7 @@ "testharness" ], "dom/traversal/NodeIterator-expected.txt": [ - "9e52e8f0cf916dc8968e30c08d067d751ccdb40a", + "252e51110e0c6d48792149e88c22bfa8a5e34933", "support" ], "dom/traversal/NodeIterator-removal.html": [ @@ -243728,7 +243933,7 @@ "testharness" ], "dom/traversal/TreeWalker-expected.txt": [ - "5ccf190d92fe62eaa8c12cbda8a82c8da12b0f08", + "9f14832667edbca523c1a06ab5decd32aacfbc43", "support" ], "dom/traversal/TreeWalker-previousNodeLastChildReject.html": [ @@ -243816,7 +244021,7 @@ "testharness" ], "domparsing/DOMParser-parseFromString-xml-expected.txt": [ - "23bba3f0f3342feefe7fd3447b55ca7150f50aef", + "230d8bf8ae7190f284dc877837369b34be8a9943", "support" ], "domparsing/DOMParser-parseFromString-xml-internal-subset.html": [ @@ -243840,7 +244045,7 @@ "testharness" ], "domparsing/innerhtml-01-expected.txt": [ - "3932429de1f3718737d3be52085a51050ef1584a", + "9c75e3b66e48d7f90dcec2675e6613fcbc4cf3bf", "support" ], "domparsing/innerhtml-01.xhtml": [ @@ -243856,7 +244061,7 @@ "testharness" ], "domparsing/innerhtml-05-expected.txt": [ - "11b3f513b7cc424896e5854ccfd6950d7da6940f", + "b8c7333c4f8487d8b0302c09e40bb3e993cf968b", "support" ], "domparsing/innerhtml-05.xhtml": [ @@ -243880,7 +244085,7 @@ "testharness" ], "domparsing/insert_adjacent_html-expected.txt": [ - "ba15098d2c5ae19312eb52cb7bfb670d761390a4", + "fc130058ca4c4e68bc360bf0f2e910982e9727aa", "support" ], "domparsing/insert_adjacent_html-xhtml.xhtml": [ @@ -243916,7 +244121,7 @@ "testharness" ], "domxpath/002-expected.txt": [ - "aba3c2786237660cce6081d4b47efe007a670ea4", + "fb76cf37dc868a8770e648dc43aca02ae493ace8", "support" ], "domxpath/002.html": [ @@ -244096,7 +244301,7 @@ "support" ], "editing/event-expected.txt": [ - "f99f6085ec29df4e94a71275915ef0eef4fa5875", + "ad63eee86757d8b1d4d8030568be0e5e2315c931", "support" ], "editing/event.html": [ @@ -244148,7 +244353,7 @@ "support" ], "editing/other/delete-expected.txt": [ - "c095b49ca535a2e22d1ebdabb081d9828ed622f8", + "8f0b26d0e30f648c3e7f11d1d29fe698dd07284c", "support" ], "editing/other/delete.html": [ @@ -244156,7 +244361,7 @@ "testharness" ], "editing/other/extra-text-nodes-expected.txt": [ - "094beeb7e3a2276c1bd6e8d8f8da0dda491bee83", + "b2f4a9b2fffb17d8266d9a7397641b2deb692cf0", "support" ], "editing/other/extra-text-nodes.html": [ @@ -244164,7 +244369,7 @@ "testharness" ], "editing/other/restoration-expected.txt": [ - "44e469414a6a79011ef935a70af52aeee7b3689d", + "af563e6b9a92030b6c172939e6e9810828a0edc4", "support" ], "editing/other/restoration.html": [ @@ -244172,7 +244377,7 @@ "testharness" ], "editing/run/backcolor-expected.txt": [ - "bb8888c8c50844dd4a54f5cd03ed519c5b2ed864", + "a1466cacba858c6b789fdd8a1175e69c3e63df6d", "support" ], "editing/run/backcolor.html": [ @@ -244184,7 +244389,7 @@ "testharness" ], "editing/run/createlink-expected.txt": [ - "363e100149b3786029418ca216c878e875a4032e", + "f5cb232b1fb1f3987edb4eeade97542e8eca85ac", "support" ], "editing/run/createlink.html": [ @@ -244204,7 +244409,7 @@ "testharness" ], "editing/run/fontname-expected.txt": [ - "13c09d23afe68f9ac08240bf0a469eea1a35fb69", + "3b40634acb84e243bbe2d570331d0fd5d24c1bc2", "support" ], "editing/run/fontname.html": [ @@ -244212,7 +244417,7 @@ "testharness" ], "editing/run/fontsize-expected.txt": [ - "9448a3dcb19b8f6c9736822235eb5356fd93c6c4", + "52b8c54f8c79e9ddb977053e1baecce70056b902", "support" ], "editing/run/fontsize.html": [ @@ -244220,7 +244425,7 @@ "testharness" ], "editing/run/forecolor-expected.txt": [ - "d9e0dbb1ece5e99bf6daeae163d848dab4f422dd", + "644f8686e4a3e82b861a2e34bbf8aae49d1bab7a", "support" ], "editing/run/forecolor.html": [ @@ -244228,7 +244433,7 @@ "testharness" ], "editing/run/formatblock-expected.txt": [ - "2676955c52ae6709bf285ad1e50fcc55a89f6e8f", + "d64b79ef42109bf7a5356366193156856903b462", "support" ], "editing/run/formatblock.html": [ @@ -244236,7 +244441,7 @@ "testharness" ], "editing/run/forwarddelete-expected.txt": [ - "6925482953d8f3b990eaf1077cba4c32c6ade205", + "d21c05ef89a742392fa7e13489a590ec09b32d2f", "support" ], "editing/run/forwarddelete.html": [ @@ -244244,7 +244449,7 @@ "testharness" ], "editing/run/hilitecolor-expected.txt": [ - "3d5c6f433c10b06fa53f996aa8634fe63ef7cda4", + "b2c63c6b0fb02a5a2b75bd9c6f76775be5101d94", "support" ], "editing/run/hilitecolor.html": [ @@ -244252,7 +244457,7 @@ "testharness" ], "editing/run/indent-expected.txt": [ - "1b43c0d32118d8f16f5ad29c35f1a6e741f7847a", + "855a2f9df5287f5257431e902f1a52d987810b92", "support" ], "editing/run/indent.html": [ @@ -244264,7 +244469,7 @@ "testharness" ], "editing/run/inserthorizontalrule-expected.txt": [ - "6535eed7f208b2eca892bdec4e712c240db6a9f5", + "624f30e6b4064736bc64faea6892414673b14da1", "support" ], "editing/run/inserthorizontalrule.html": [ @@ -244272,7 +244477,7 @@ "testharness" ], "editing/run/inserthtml-expected.txt": [ - "39705a5d19e186229398407b1824c8e36216c8d4", + "427027ee925cb158cd00528c12a7bb6c6585f1b0", "support" ], "editing/run/inserthtml.html": [ @@ -244280,7 +244485,7 @@ "testharness" ], "editing/run/insertimage-expected.txt": [ - "5a9b457b241357df320ba6c734be5ea2a5de7f0d", + "cdadb6f625ece3b80d3e58743bf0e43085362a3f", "support" ], "editing/run/insertimage.html": [ @@ -244288,7 +244493,7 @@ "testharness" ], "editing/run/insertlinebreak-expected.txt": [ - "f3fdc4e7955f1718aaba71d4c4254fc361aadc95", + "822e59d717814d9a0d2c0a0c08682b4aa0132179", "support" ], "editing/run/insertlinebreak.html": [ @@ -244296,7 +244501,7 @@ "testharness" ], "editing/run/insertorderedlist-expected.txt": [ - "9b8dec2c03857b51a58608bacea796818949f614", + "ef0ccd3ab22d5bd4bec765949bc7228c87318a6c", "support" ], "editing/run/insertorderedlist.html": [ @@ -244304,7 +244509,7 @@ "testharness" ], "editing/run/insertparagraph-expected.txt": [ - "e0510a5bfecd1f87ca1497f58942b7b3f99bb0a4", + "f005820d90f9e4dd75d0b6b42749d1f324cb7e59", "support" ], "editing/run/insertparagraph.html": [ @@ -244312,7 +244517,7 @@ "testharness" ], "editing/run/inserttext-expected.txt": [ - "d8a4dd9c00fd873e58ee78eeed3a4d294e19a923", + "d96b1eeb71669acf3692e77b9b7bdf74ffd45aee", "support" ], "editing/run/inserttext.html": [ @@ -244320,7 +244525,7 @@ "testharness" ], "editing/run/insertunorderedlist-expected.txt": [ - "c0833090093422f85da0fb1a098a1e4f15057386", + "099d0d4f1d891355290cac8f0658d8566c0afd7e", "support" ], "editing/run/insertunorderedlist.html": [ @@ -244340,7 +244545,7 @@ "testharness" ], "editing/run/justifyleft-expected.txt": [ - "90068f2fc7fdf72f659c7a20c93e8dab47626ec7", + "c406bee3c710804e15f45f05d1a04349a580a66b", "support" ], "editing/run/justifyleft.html": [ @@ -244352,7 +244557,7 @@ "testharness" ], "editing/run/misc-expected.txt": [ - "c0c7ed1cc0f9cec3a47d95114247a3db2edc5253", + "a902da8e3f064832ef8bac8ff0bab28bf441b9a1", "support" ], "editing/run/misc.html": [ @@ -244360,7 +244565,7 @@ "testharness" ], "editing/run/multitest-expected.txt": [ - "82b8c1837438fc699c0e87e6b2354c96836252bf", + "ca514ca83e00c45aaf525f2b2d744c0a5317a539", "support" ], "editing/run/multitest.html": [ @@ -244368,7 +244573,7 @@ "testharness" ], "editing/run/outdent-expected.txt": [ - "24f540e109e5a9c4de1c5b95cded6f7c68789de8", + "ecd42e609ea39de9480932b55400a31f773de46e", "support" ], "editing/run/outdent.html": [ @@ -244376,7 +244581,7 @@ "testharness" ], "editing/run/removeformat-expected.txt": [ - "db6a9aef56a586417aeecef1f73e70278dda31f7", + "3463d94cee1213af4b8d69bd6e58e28dc52b2e6d", "support" ], "editing/run/removeformat.html": [ @@ -244400,7 +244605,7 @@ "testharness" ], "editing/run/unlink-expected.txt": [ - "430f6b6c0fb8c5979c342ca8c2055bfc4c721d0c", + "f74be7dc1369ad4de88c836b2acb8055591d3c2d", "support" ], "editing/run/unlink.html": [ @@ -244476,7 +244681,7 @@ "testharness" ], "encoding/iso-2022-jp-decoder-expected.txt": [ - "0b5cf594d9b2a56a4f613c9a02cb683302360713", + "1a58dcea317277dd57c1eee813fb5cf85d103352", "support" ], "encoding/iso-2022-jp-decoder.html": [ @@ -245032,7 +245237,7 @@ "support" ], "encoding/legacy-mb-tchinese/big5/big5-enc-ascii-expected.txt": [ - "4de10207efe04b64e15201709872e3fffa45f259", + "913f20ef156239e7b06e4346f863e8c2e47eae8d", "support" ], "encoding/legacy-mb-tchinese/big5/big5-enc-ascii.html": [ @@ -246024,7 +246229,7 @@ "testharness" ], "eventsource/dedicated-worker/eventsource-constructor-non-same-origin-expected.txt": [ - "d5e7f1a96b65db3655a45041457c1598a196c054", + "0a9804df72514d08642ad189d1f24ab140511321", "support" ], "eventsource/dedicated-worker/eventsource-constructor-non-same-origin.htm": [ @@ -246032,7 +246237,7 @@ "testharness" ], "eventsource/dedicated-worker/eventsource-constructor-url-bogus-expected.txt": [ - "9d37ad8e944f7f08a48c45662c92d0f55a6d72a4", + "df4a0bfdaa2e3ea81aac3248f606705a7944f99b", "support" ], "eventsource/dedicated-worker/eventsource-constructor-url-bogus.htm": [ @@ -246072,7 +246277,7 @@ "testharness" ], "eventsource/eventsource-constructor-non-same-origin-expected.txt": [ - "b683fcce5e02be6999cb6689ce039aa0aa53a37e", + "c6d9a2a6f1b4ec53be2526e2cd3275ff827f3108", "support" ], "eventsource/eventsource-constructor-non-same-origin.htm": [ @@ -246084,7 +246289,7 @@ "testharness" ], "eventsource/eventsource-constructor-url-bogus-expected.txt": [ - "88518a210aabe94fd5bb5501d469e54f69b8a24e", + "23f19bf28a4a236aed541f2bf504709a04b64a8a", "support" ], "eventsource/eventsource-constructor-url-bogus.htm": [ @@ -246172,7 +246377,7 @@ "testharness" ], "eventsource/format-field-id-null-expected.txt": [ - "0c08eb216fdd5ba0504b5a7d0a0aa733d953f66c", + "ce1cd7b67ca821e88eebaaa13d4589a391c5f806", "support" ], "eventsource/format-field-id-null.htm": [ @@ -246304,7 +246509,7 @@ "testharness" ], "eventsource/shared-worker/eventsource-constructor-non-same-origin-expected.txt": [ - "90a69f03b952e627635a9c0747d0d084337d8f7b", + "d73f425b80f8be0ed8a5a248967b15f972d356be", "support" ], "eventsource/shared-worker/eventsource-constructor-non-same-origin.htm": [ @@ -246312,7 +246517,7 @@ "testharness" ], "eventsource/shared-worker/eventsource-constructor-url-bogus-expected.txt": [ - "f63bc31924bc17bc7fa7b7f0c75d8c29e7dd7cb9", + "532da9098daf02f7c84d392743515708702aee20", "support" ], "eventsource/shared-worker/eventsource-constructor-url-bogus.htm": [ @@ -246340,7 +246545,7 @@ "testharness" ], "feature-policy/README.md": [ - "1436174282bd7aec83aa61dd679f25c488235c3f", + "b74968d23db1beb35015cb6d8934f92d60cd3a5b", "support" ], "feature-policy/resources/feature-policy-payment.html": [ @@ -246368,7 +246573,7 @@ "support" ], "fetch/api/abort/cache.https-expected.txt": [ - "0c7a68aa002376b2144febd768ecdefb45ccd153", + "80a3d8b2361b125c46941c0ac9e8bd036b22fe65", "support" ], "fetch/api/abort/cache.https.html": [ @@ -246376,7 +246581,7 @@ "testharness" ], "fetch/api/abort/general-serviceworker.https-expected.txt": [ - "cddf57d551be890ab3f27755e15ebedf77874f30", + "af54a41dd905cbccdea41fe9f85ea976299ba9ad", "support" ], "fetch/api/abort/general-serviceworker.https.html": [ @@ -246384,7 +246589,7 @@ "testharness" ], "fetch/api/abort/general-sharedworker-expected.txt": [ - "a46979591ba7c4632cebef4c904a48db5cec41f1", + "300b6270f8cd90a5ef37430e5236a51efcb632e9", "support" ], "fetch/api/abort/general-sharedworker.html": [ @@ -246392,7 +246597,7 @@ "testharness" ], "fetch/api/abort/general.any-expected.txt": [ - "a46979591ba7c4632cebef4c904a48db5cec41f1", + "300b6270f8cd90a5ef37430e5236a51efcb632e9", "support" ], "fetch/api/abort/general.any.js": [ @@ -246400,11 +246605,11 @@ "testharness" ], "fetch/api/abort/general.any.worker-expected.txt": [ - "a46979591ba7c4632cebef4c904a48db5cec41f1", + "300b6270f8cd90a5ef37430e5236a51efcb632e9", "support" ], "fetch/api/abort/serviceworker-intercepted.https-expected.txt": [ - "f56b49fefa27542bfe17da26464c3378f4c23e39", + "e1a8b1e4ee396ddd17f7f81d77c58b0cede3987f", "support" ], "fetch/api/abort/serviceworker-intercepted.https.html": [ @@ -246484,7 +246689,7 @@ "testharness" ], "fetch/api/basic/request-upload.any-expected.txt": [ - "f11e8ca2a7b3e34ed158d66c550b7f347690aa94", + "0331e2884ed536183afff233eb278196ee995d54", "support" ], "fetch/api/basic/request-upload.any.js": [ @@ -246492,7 +246697,7 @@ "testharness" ], "fetch/api/basic/request-upload.any.worker-expected.txt": [ - "f11e8ca2a7b3e34ed158d66c550b7f347690aa94", + "0331e2884ed536183afff233eb278196ee995d54", "support" ], "fetch/api/basic/response-url-worker.html": [ @@ -246508,7 +246713,7 @@ "support" ], "fetch/api/basic/scheme-about.any-expected.txt": [ - "2fc1205a803cd6894b54ad04ea2d51997f0af629", + "1fb68544ec3dbf7f8cf01557727bd62e439d36a1", "support" ], "fetch/api/basic/scheme-about.any.js": [ @@ -246516,7 +246721,7 @@ "testharness" ], "fetch/api/basic/scheme-about.any.worker-expected.txt": [ - "2fc1205a803cd6894b54ad04ea2d51997f0af629", + "1fb68544ec3dbf7f8cf01557727bd62e439d36a1", "support" ], "fetch/api/basic/scheme-blob-worker.html": [ @@ -246564,11 +246769,11 @@ "testharness" ], "fetch/api/cors/cors-expose-star-expected.txt": [ - "c865cc29164edd34514b6242684c9ace019bccfc", + "d04c2bb87e174307b23d10c15d652104267c0899", "support" ], "fetch/api/cors/cors-expose-star-worker-expected.txt": [ - "c865cc29164edd34514b6242684c9ace019bccfc", + "d04c2bb87e174307b23d10c15d652104267c0899", "support" ], "fetch/api/cors/cors-expose-star-worker.html": [ @@ -246596,11 +246801,11 @@ "support" ], "fetch/api/cors/cors-multiple-origins-expected.txt": [ - "4d15765e27f421595231e2a34d8f229016f39808", + "5bae90d9df5583ec62f5c5a8094f6b6c4274ba1f", "support" ], "fetch/api/cors/cors-multiple-origins-worker-expected.txt": [ - "4d15765e27f421595231e2a34d8f229016f39808", + "5bae90d9df5583ec62f5c5a8094f6b6c4274ba1f", "support" ], "fetch/api/cors/cors-multiple-origins-worker.html": [ @@ -246624,7 +246829,7 @@ "testharness" ], "fetch/api/cors/cors-preflight-redirect.any-expected.txt": [ - "39f0dcb975cfe373ad38ba28f8fddaa9510e30d4", + "e18236c8763e88642a60f74aa5c8ba6dede10db7", "support" ], "fetch/api/cors/cors-preflight-redirect.any.js": [ @@ -246632,7 +246837,7 @@ "testharness" ], "fetch/api/cors/cors-preflight-redirect.any.worker-expected.txt": [ - "39f0dcb975cfe373ad38ba28f8fddaa9510e30d4", + "e18236c8763e88642a60f74aa5c8ba6dede10db7", "support" ], "fetch/api/cors/cors-preflight-referrer.any.js": [ @@ -246640,7 +246845,7 @@ "testharness" ], "fetch/api/cors/cors-preflight-star.any-expected.txt": [ - "097b7ca3261d5e0b44e7e022f343914d4b921c5b", + "e9addcd66c644dba3ecdc0033d4776a5d6dfac7f", "support" ], "fetch/api/cors/cors-preflight-star.any.js": [ @@ -246648,7 +246853,7 @@ "testharness" ], "fetch/api/cors/cors-preflight-star.any.worker-expected.txt": [ - "097b7ca3261d5e0b44e7e022f343914d4b921c5b", + "e9addcd66c644dba3ecdc0033d4776a5d6dfac7f", "support" ], "fetch/api/cors/cors-preflight-status.any.js": [ @@ -246724,7 +246929,7 @@ "testharness" ], "fetch/api/policies/csp-blocked-worker-expected.txt": [ - "1e850647152e8e6dcd2c14852ee0ea0ee572768d", + "050c57024657a947b48219fa083e0a57392bb810", "support" ], "fetch/api/policies/csp-blocked-worker.html": [ @@ -246780,11 +246985,11 @@ "support" ], "fetch/api/policies/referrer-origin-expected.txt": [ - "96b4805afcb947306ce31395e61aa71faba4a3a3", + "b8e6eb48dba50396d234efd0e23c2674043cd34a", "support" ], "fetch/api/policies/referrer-origin-service-worker.https-expected.txt": [ - "0ecc172b2019052456a7abca169538ce24e9cc0b", + "c3661fa72525a20943d8e9dd0fb2b1c21d295801", "support" ], "fetch/api/policies/referrer-origin-service-worker.https.html": [ @@ -246816,7 +247021,7 @@ "support" ], "fetch/api/policies/referrer-origin-worker-expected.txt": [ - "40a033b3713cd0113a30c4071f1088534867a135", + "1e0faa2d92ccf051f691f5f2e187cd716d78412c", "support" ], "fetch/api/policies/referrer-origin-worker.html": [ @@ -246876,11 +247081,11 @@ "support" ], "fetch/api/redirect/redirect-location-expected.txt": [ - "29d1e2d1ae898fcf90d4083075efbc14b7c1a309", + "5743c986848c6397c979ad3a4356fe5c1c2131a9", "support" ], "fetch/api/redirect/redirect-location-worker-expected.txt": [ - "29d1e2d1ae898fcf90d4083075efbc14b7c1a309", + "5743c986848c6397c979ad3a4356fe5c1c2131a9", "support" ], "fetch/api/redirect/redirect-location-worker.html": [ @@ -246984,7 +247189,7 @@ "testharness" ], "fetch/api/request/request-cache-force-cache-expected.txt": [ - "ab45335e6a2e61c95a45186f09721e27aee3418e", + "6995cbf9a2081250dcf4b3b791683b61a0095fba", "support" ], "fetch/api/request/request-cache-force-cache.html": [ @@ -246992,7 +247197,7 @@ "testharness" ], "fetch/api/request/request-cache-no-cache-expected.txt": [ - "b3b2908bd15b0ad78cbe75888d963af277928ed6", + "db2c3fb2744f6b54a23a0f718d22270a8d011792", "support" ], "fetch/api/request/request-cache-no-cache.html": [ @@ -247008,7 +247213,7 @@ "testharness" ], "fetch/api/request/request-cache-only-if-cached-expected.txt": [ - "5f53e1c3d64840a0b7bae6796968d7c9521d7150", + "d97b510781890eb543418142ef2bf3b3c30eea5e", "support" ], "fetch/api/request/request-cache-only-if-cached.html": [ @@ -247016,7 +247221,7 @@ "testharness" ], "fetch/api/request/request-cache-reload-expected.txt": [ - "f6bce2a6f7a13fd50d4e433f5cf5bc614508bb1f", + "2480301a20c18171d4b41a708c77d14b40daa91b", "support" ], "fetch/api/request/request-cache-reload.html": [ @@ -247032,7 +247237,7 @@ "testharness" ], "fetch/api/request/request-consume-empty-expected.txt": [ - "51eeca3c59ad2d09ad0b9a3bac41af8a81b8bf6d", + "c72201245284ad402bfe8ec0c0c87ab99330d213", "support" ], "fetch/api/request/request-consume-empty.html": [ @@ -247044,7 +247249,7 @@ "testharness" ], "fetch/api/request/request-disturbed-expected.txt": [ - "91e1c23b4bed8cdc58b9cb177bdd2d34bb3fa29c", + "e120d8131ccbcf9568705876ed9f8cec26f95f9f", "support" ], "fetch/api/request/request-disturbed.html": [ @@ -247052,7 +247257,7 @@ "testharness" ], "fetch/api/request/request-error-expected.txt": [ - "2953657949847b572bc2b030de3ee9f58b3cab98", + "be5a296d28028f68aacbf4dfa8956ec33ba0ed19", "support" ], "fetch/api/request/request-error.html": [ @@ -247068,7 +247273,7 @@ "testharness" ], "fetch/api/request/request-idl-expected.txt": [ - "1492a19999f400ce9c84780ef4c5025585cf47fc", + "9a1af43d55664b9c43eef15f5aa2431ddac1eac0", "support" ], "fetch/api/request/request-idl.html": [ @@ -247076,7 +247281,7 @@ "testharness" ], "fetch/api/request/request-init-001.sub-expected.txt": [ - "fc507ba58725a3bcfb5b6031a9c5fa4d517bc736", + "ed1d4cc1f1916cf865afd439a8d30c5ebfed6020", "support" ], "fetch/api/request/request-init-001.sub.html": [ @@ -247092,7 +247297,7 @@ "testharness" ], "fetch/api/request/request-keepalive-quota-expected.txt": [ - "62a8f017a6b379c16c6c8ce83f5ccf965c5f2748", + "476648fc517e3738cd06cd554a9e8abb9d439bfa", "support" ], "fetch/api/request/request-keepalive-quota.html": [ @@ -247100,7 +247305,7 @@ "testharness" ], "fetch/api/request/request-structure-expected.txt": [ - "0cab055ba9f294ad151508c60f64ff3bacb64b81", + "cb216fa88bd33c96972eaa98c8ff75a21c9bc53f", "support" ], "fetch/api/request/request-structure.html": [ @@ -247216,7 +247421,7 @@ "testharness" ], "fetch/api/response/response-clone-expected.txt": [ - "fcde0384d772850a5931b5a19fd34662f1ba70b0", + "73a0cd66c3e0a80414ab8fd97ba41c41d684a24e", "support" ], "fetch/api/response/response-clone.html": [ @@ -247224,7 +247429,7 @@ "testharness" ], "fetch/api/response/response-consume-empty-expected.txt": [ - "a36bb8cc4a8cc9b82a39ede93cd614cfd34f4935", + "768e7d7cf5f0a4b93ad00fa192b01da3642b3380", "support" ], "fetch/api/response/response-consume-empty.html": [ @@ -247232,7 +247437,7 @@ "testharness" ], "fetch/api/response/response-consume-stream-expected.txt": [ - "b4dedb930d46db8e590b9b7421770e4cd388417b", + "66f1608c008e7852dfe762a7d040fa7c69f31bec", "support" ], "fetch/api/response/response-consume-stream.html": [ @@ -247248,7 +247453,7 @@ "testharness" ], "fetch/api/response/response-idl-expected.txt": [ - "dbdf2f1d39394760cba0b90b3d0e5609bd53a87b", + "f27d2f621819ed4e95e7f54709dc8e6f39cb2076", "support" ], "fetch/api/response/response-idl.html": [ @@ -247292,7 +247497,7 @@ "testharness" ], "fetch/api/response/response-trailer-expected.txt": [ - "00a57410caece85093be37dca2ac91acda07d38f", + "1e8c578711297bc16972169be9ed6b60f8376d78", "support" ], "fetch/api/response/response-trailer.html": [ @@ -247308,7 +247513,7 @@ "support" ], "fetch/http-cache/cc-request-expected.txt": [ - "ec847d02745076024fea2ba2f06355963ca4c4b3", + "8a34919ad267f4c1fc5826edae94e6f46d1ad8a3", "support" ], "fetch/http-cache/cc-request.html": [ @@ -247320,7 +247525,7 @@ "testharness" ], "fetch/http-cache/heuristic-expected.txt": [ - "9fb559e2568127cb99509bf702afa0a0dc6e82c5", + "ef3c9cf394383025a9e1b1b6a66e49904b1ef7ba", "support" ], "fetch/http-cache/heuristic.html": [ @@ -247332,7 +247537,7 @@ "support" ], "fetch/http-cache/invalidate-expected.txt": [ - "c238df8a06f8855b9c88a2303d058bbcca47aa11", + "52bbcf62e0907f0556984f7ec17b6e7b4c0b1349", "support" ], "fetch/http-cache/invalidate.html": [ @@ -247340,7 +247545,7 @@ "testharness" ], "fetch/http-cache/partial-expected.txt": [ - "67533e199d09d884aba57040b5f43cecf4329ec6", + "c530c41bed440f613f565bbabb6aea5b2cd3e227", "support" ], "fetch/http-cache/partial.html": [ @@ -247356,7 +247561,7 @@ "testharness" ], "fetch/http-cache/vary-expected.txt": [ - "0a1cf4fd674f196fd3ac8b5df49f03e33575ecb2", + "1042ee205af023c850fd3268db6876798d34283b", "support" ], "fetch/http-cache/vary.html": [ @@ -247376,7 +247581,7 @@ "support" ], "fetch/nosniff/parsing-nosniff-expected.txt": [ - "cfb0f78591b3854559f6a0f53d3933f06400eb1a", + "012d44960a3f13165038595a86da7ad9bb6a472a", "support" ], "fetch/nosniff/parsing-nosniff.html": [ @@ -247428,7 +247633,7 @@ "testharness" ], "fetch/nosniff/stylesheet-expected.txt": [ - "7f17b136a42732cd9f69e46e5af04caf4541a32f", + "427a0cccd525fd9bd7aa7e07fc598c8075d20bf6", "support" ], "fetch/nosniff/stylesheet.html": [ @@ -247472,7 +247677,7 @@ "support" ], "fullscreen/api/document-exit-fullscreen-active-document-expected.txt": [ - "0fe00e0f1b873cef51a3c142190ce821a76549ed", + "7e2760209a5328bdd5a1d009fea825789c7d1cc3", "support" ], "fullscreen/api/document-exit-fullscreen-active-document.html": [ @@ -247492,7 +247697,7 @@ "manual" ], "fullscreen/api/document-exit-fullscreen-timing-manual-expected.txt": [ - "bb2508e35e8e52593e6fc4282f17c186f31e6bd3", + "44018c05afd420501aed0b12ec483cca7b39575a", "support" ], "fullscreen/api/document-exit-fullscreen-timing-manual.html": [ @@ -247512,7 +247717,7 @@ "testharness" ], "fullscreen/api/document-fullscreen-enabled-cross-origin.sub-expected.txt": [ - "cba52d6bac61da883fb07603f47140cb3f2f4183", + "8854bc2a19dda44de3bad4227629648a51cc7099", "support" ], "fullscreen/api/document-fullscreen-enabled-cross-origin.sub.html": [ @@ -247520,7 +247725,7 @@ "testharness" ], "fullscreen/api/document-fullscreen-enabled-expected.txt": [ - "cb90983860ccdaa827c4ff33baca05e6ee47be01", + "b3417c3be399c4ed2f38f79ea98b88d777d6c687", "support" ], "fullscreen/api/document-fullscreen-enabled.html": [ @@ -247548,7 +247753,7 @@ "manual" ], "fullscreen/api/element-ready-check-fullscreen-iframe-child-manual-expected.txt": [ - "b923e33f22886bdeacfcdb8c1f399c248c13a287", + "dfdfb636c43f1e7236d07b505d93a81c6066e2b6", "support" ], "fullscreen/api/element-ready-check-fullscreen-iframe-child-manual.html": [ @@ -247556,7 +247761,7 @@ "manual" ], "fullscreen/api/element-ready-check-iframe-child-manual-expected.txt": [ - "6658f211701c625acbd35e457f9c9769fce7c6ce", + "33e443936eeecd7de035c757b38c638bf73b46fe", "support" ], "fullscreen/api/element-ready-check-iframe-child-manual.html": [ @@ -247568,7 +247773,7 @@ "manual" ], "fullscreen/api/element-ready-check-not-allowed-manual-expected.txt": [ - "97bb937898ba23357248f328afdb55ef6ccec02d", + "ed59fb70e6ffcb652f8bd44ca98469355fc75821", "support" ], "fullscreen/api/element-ready-check-not-allowed-manual.html": [ @@ -247628,7 +247833,7 @@ "manual" ], "fullscreen/api/element-request-fullscreen-timing-manual-expected.txt": [ - "611ed88a56f69715d0c4fcd988e401256b19ff47", + "c0787274376c056a0d7ee123dad4d3df6d5bc468", "support" ], "fullscreen/api/element-request-fullscreen-timing-manual.html": [ @@ -247644,7 +247849,7 @@ "manual" ], "fullscreen/api/element-request-fullscreen-two-elements-manual-expected.txt": [ - "9302f6e5549b931f4163e6b2152a145f50164986", + "c29f105ecdf79aac2c6546af6d9fda1304266292", "support" ], "fullscreen/api/element-request-fullscreen-two-elements-manual.html": [ @@ -247656,7 +247861,7 @@ "manual" ], "fullscreen/api/historical-expected.txt": [ - "9f89466378e691fccd85f53e5b00a5b66d3afcb2", + "1988a1076098cb00c36f9bfcf8a1afd634805a8b", "support" ], "fullscreen/api/historical.html": [ @@ -247672,7 +247877,7 @@ "support" ], "fullscreen/interfaces-expected.txt": [ - "dcf3f5ed6afbeec88d53490c67c9d3d3d71bd4aa", + "429e29c9f7258d2378e4e6a31579574ffe29cd51", "support" ], "fullscreen/interfaces.html": [ @@ -247748,7 +247953,7 @@ "testharness" ], "geolocation-API/getCurrentPosition_IDL.https-expected.txt": [ - "6e1ec6c048e4be4186ab7741d801cbde196604f5", + "24ba510d5536bdad61fcffed965410e84d6337d3", "support" ], "geolocation-API/getCurrentPosition_IDL.https.html": [ @@ -247768,7 +247973,7 @@ "manual" ], "geolocation-API/getCurrentPosition_permission_allow.https-expected.txt": [ - "cca9aaf20aeffef448ce9d4963065990a3d1ad6a", + "66cd37cac19ed26934f59e3bcec47e0dc7ed5b5a", "support" ], "geolocation-API/getCurrentPosition_permission_allow.https.html": [ @@ -247832,7 +248037,7 @@ "testharness" ], "hr-time/idlharness-expected.txt": [ - "9b54045e82c2ae9fedf0612db7dc963b14acdbaa", + "7f93ccd0ef5cbe3aa64cf2ee19b0c544ebe782ee", "support" ], "hr-time/idlharness.html": [ @@ -247972,7 +248177,7 @@ "manual" ], "html-media-capture/capture_reflect-expected.txt": [ - "0cff3dfa8811bfafd066ee4e0194aa1aa4108cc4", + "e2808b919e89e30b5cfaebc9c6196a64f61e7c87", "support" ], "html-media-capture/capture_reflect.html": [ @@ -248000,7 +248205,7 @@ "manual" ], "html-media-capture/idlharness-expected.txt": [ - "f581be5efe31ddca7a4bb3405c18a751dae21fe3", + "c9313338378f881330eca2ab51c36f5da23def83", "support" ], "html-media-capture/idlharness.html": [ @@ -248072,7 +248277,7 @@ "support" ], "html/browsers/browsing-the-web/history-traversal/browsing_context_name-expected.txt": [ - "0c19b464438b309f5d793493d134beb4b9a90a69", + "52b10d4b28963ef552b64d9a97137495685c3086", "support" ], "html/browsers/browsing-the-web/history-traversal/browsing_context_name.html": [ @@ -248084,7 +248289,7 @@ "support" ], "html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin-expected.txt": [ - "4b15b4ee5d7c705987e1ac9570d950b79df5f508", + "ea03cf43a9bd378ee27b24d0904b6ebd5d5b4b50", "support" ], "html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin.html": [ @@ -248092,7 +248297,7 @@ "testharness" ], "html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin_2-expected.txt": [ - "fea1e4bfc25dc99160e4b56d8c09930f67f0d097", + "ead867f1763ff8abeb365871ff399ef716415a46", "support" ], "html/browsers/browsing-the-web/history-traversal/browsing_context_name_cross_origin_2.html": [ @@ -248172,7 +248377,7 @@ "support" ], "html/browsers/browsing-the-web/history-traversal/same-url-expected.txt": [ - "fb49ecbfbad5f97bea5a62303e19656c4c72d152", + "cf6a955208b77bbf77864ba69c274cc3256e5f6a", "support" ], "html/browsers/browsing-the-web/history-traversal/same-url.html": [ @@ -248280,7 +248485,7 @@ "testharness" ], "html/browsers/browsing-the-web/navigating-across-documents/012-expected.txt": [ - "0f8a56e660ec489ff575347d46f44f3fbdb641d2", + "082fa259f82461f894c125820e9f6d04e9d476ea", "support" ], "html/browsers/browsing-the-web/navigating-across-documents/012.html": [ @@ -248288,7 +248493,7 @@ "testharness" ], "html/browsers/browsing-the-web/navigating-across-documents/013-expected.txt": [ - "98c42fd477baff3eec477f69d918d0d7f12e0955", + "3c8ab40e94b1ecef86ec9872a89e6b61b659061e", "support" ], "html/browsers/browsing-the-web/navigating-across-documents/013.html": [ @@ -248296,7 +248501,7 @@ "testharness" ], "html/browsers/browsing-the-web/navigating-across-documents/014-expected.txt": [ - "cba02e1d687fec368b846492a6bf02608a0ff515", + "93a9ff93afdceb56a0aa1d9fdf33d5cd53a0c9ad", "support" ], "html/browsers/browsing-the-web/navigating-across-documents/014.html": [ @@ -248304,7 +248509,7 @@ "testharness" ], "html/browsers/browsing-the-web/navigating-across-documents/015-expected.txt": [ - "5e1e889a8fd852a28be1bab8043ec43f3587decf", + "0d1f98c147d70e1a7798562c20327b139f5c37bd", "support" ], "html/browsers/browsing-the-web/navigating-across-documents/015.html": [ @@ -248492,7 +248697,7 @@ "testharness" ], "html/browsers/browsing-the-web/scroll-to-fragid/003-expected.txt": [ - "a0683b5c9265e41fa468653880c18112f3b9581b", + "993a7b21fc676f0463dadf9c2b76a70c7d31e1c8", "support" ], "html/browsers/browsing-the-web/scroll-to-fragid/003.html": [ @@ -248500,7 +248705,7 @@ "testharness" ], "html/browsers/browsing-the-web/scroll-to-fragid/004-expected.txt": [ - "ed5ad4236ec4b373be2969959e5dae67e891501c", + "f00f8af4bb3e07055857892e2ef9692c2fb40932", "support" ], "html/browsers/browsing-the-web/scroll-to-fragid/004.html": [ @@ -248552,7 +248757,7 @@ "support" ], "html/browsers/browsing-the-web/unloading-documents/001-expected.txt": [ - "db9cd4d0327b6f6d7dac8d6e4312afb6b98c62a0", + "18a4358b4f12310cdac9daffa5f315406bae6533", "support" ], "html/browsers/browsing-the-web/unloading-documents/001.html": [ @@ -248560,7 +248765,7 @@ "testharness" ], "html/browsers/browsing-the-web/unloading-documents/002-expected.txt": [ - "30511857075fb06d77f5cdd88fef6c8158665e4f", + "231c3114d8ce90a83f729403f71beddab833f544", "support" ], "html/browsers/browsing-the-web/unloading-documents/002.html": [ @@ -248568,7 +248773,7 @@ "testharness" ], "html/browsers/browsing-the-web/unloading-documents/003-expected.txt": [ - "676df6681865113040f61f1ad2c499b475e22284", + "216510f08b3a9067e77c1d5bd52974f03779cead", "support" ], "html/browsers/browsing-the-web/unloading-documents/003.html": [ @@ -248576,7 +248781,7 @@ "testharness" ], "html/browsers/browsing-the-web/unloading-documents/004-expected.txt": [ - "acc7f9925a13d12a4e907b3bd33961271bb3b3c3", + "5a336b67afb55189911e3340709236e82ec5aa4b", "support" ], "html/browsers/browsing-the-web/unloading-documents/004.html": [ @@ -248584,7 +248789,7 @@ "testharness" ], "html/browsers/browsing-the-web/unloading-documents/005-expected.txt": [ - "b8d742dd3559a0cf4895b3b268df095c7c046745", + "f73077132538b0a25aa1cc70ff17488d2f3aafe9", "support" ], "html/browsers/browsing-the-web/unloading-documents/005.html": [ @@ -248600,7 +248805,7 @@ "support" ], "html/browsers/browsing-the-web/unloading-documents/beforeunload-canceling-expected.txt": [ - "28f2d40e3f7450b7d5ffefccb7be8dd0bf135587", + "6692f3d168c0bfd5d9ca6d49ea43432b241fa151", "support" ], "html/browsers/browsing-the-web/unloading-documents/beforeunload-canceling.html": [ @@ -248640,7 +248845,7 @@ "support" ], "html/browsers/browsing-the-web/unloading-documents/navigation-within-beforeunload-expected.txt": [ - "33f879b3e4da7ad90e0447f2193c8ddcdd66221b", + "a86e3b5778b42668bed4610d92bb3cbc098cdf6a", "support" ], "html/browsers/browsing-the-web/unloading-documents/navigation-within-beforeunload.html": [ @@ -248664,7 +248869,7 @@ "support" ], "html/browsers/browsing-the-web/unloading-documents/prompt/001-expected.txt": [ - "df3fc79ae81f1b7d995cf956b5ff13c7d12dd4ab", + "aaff27b08297f605099a241d7f04ce7e67c57cab", "support" ], "html/browsers/browsing-the-web/unloading-documents/prompt/001.html": [ @@ -248896,7 +249101,7 @@ "testharness" ], "html/browsers/history/the-history-interface/007-expected.txt": [ - "167f73ffecc15158715dc27c07d4f9bb8886a810", + "4e8553d5bc7c2dfe6e0dcff0f88963618a00f671", "support" ], "html/browsers/history/the-history-interface/007.html": [ @@ -249056,7 +249261,7 @@ "support" ], "html/browsers/history/the-history-interface/history_go_undefined-expected.txt": [ - "4377ffa5bb9b9fb17dab5a6b096bec8a94901394", + "444b85a10d7f49633587785a5bf993de0a65c3c4", "support" ], "html/browsers/history/the-history-interface/history_go_undefined.html": [ @@ -249071,6 +249276,10 @@ "e8adb6c9e141f07fef45d815a082fffdaed76f49", "testharness" ], + "html/browsers/history/the-history-interface/history_properties_only_fully_active.html": [ + "9e7b6ac657bca8ec1ecf009a5049f1cbd914fec8", + "testharness" + ], "html/browsers/history/the-history-interface/history_pushstate.html": [ "841c9f9cbe19892f9981932ceef07dc30985cf8a", "testharness" @@ -249128,7 +249337,7 @@ "support" ], "html/browsers/history/the-history-interface/non-automated/traverse_the_history_unload_prompt_1-manual-expected.txt": [ - "edee849756550a2abfa490dfc992cc111a714a22", + "2f6ebc8621e53e05956a3a6e1702c82d379f09e7", "support" ], "html/browsers/history/the-history-interface/non-automated/traverse_the_history_unload_prompt_1-manual.html": [ @@ -249148,7 +249357,7 @@ "support" ], "html/browsers/history/the-history-interface/non-automated/traverse_the_session_history_unload_prompt_1-manual-expected.txt": [ - "d35dbc5688e61d2a4a604d838cfcb589f44f6056", + "1f05cbc3b0ebdc5d6bb45458ad38a592516fae02", "support" ], "html/browsers/history/the-history-interface/non-automated/traverse_the_session_history_unload_prompt_1-manual.html": [ @@ -249164,7 +249373,7 @@ "support" ], "html/browsers/history/the-history-interface/traverse_the_history_2-expected.txt": [ - "098e53a797a4ba21e240e0a0d191baf5dad4850b", + "e5dd63bf9ccefc9e476f6ff30eaf8bc6e9f04da8", "support" ], "html/browsers/history/the-history-interface/traverse_the_history_2.html": [ @@ -249176,7 +249385,7 @@ "support" ], "html/browsers/history/the-history-interface/traverse_the_history_3-expected.txt": [ - "098e53a797a4ba21e240e0a0d191baf5dad4850b", + "e5dd63bf9ccefc9e476f6ff30eaf8bc6e9f04da8", "support" ], "html/browsers/history/the-history-interface/traverse_the_history_3.html": [ @@ -249188,7 +249397,7 @@ "support" ], "html/browsers/history/the-history-interface/traverse_the_history_4-expected.txt": [ - "7e819debd5bfc7709633f70fd59008e433455ff0", + "d08779732be096e462a67fb76835637a837d5f29", "support" ], "html/browsers/history/the-history-interface/traverse_the_history_4.html": [ @@ -249200,7 +249409,7 @@ "support" ], "html/browsers/history/the-history-interface/traverse_the_history_5-expected.txt": [ - "7e819debd5bfc7709633f70fd59008e433455ff0", + "d08779732be096e462a67fb76835637a837d5f29", "support" ], "html/browsers/history/the-history-interface/traverse_the_history_5.html": [ @@ -249248,7 +249457,7 @@ "support" ], "html/browsers/history/the-location-interface/allow_prototype_cycle_through_location.sub-expected.txt": [ - "e616fac38d90ab248493ba719c5f545c9fae04c9", + "c7f27ff6d050a7d647de33f19f33cfba2ad656a3", "support" ], "html/browsers/history/the-location-interface/allow_prototype_cycle_through_location.sub.html": [ @@ -249264,7 +249473,7 @@ "support" ], "html/browsers/history/the-location-interface/assign_after_load-expected.txt": [ - "2d1044eac705eb3ef68410be5e9ab83d710a4f01", + "899820dd235e6c85f7dd1d8696ada6830dfc339a", "support" ], "html/browsers/history/the-location-interface/assign_after_load.html": [ @@ -249280,7 +249489,7 @@ "support" ], "html/browsers/history/the-location-interface/assign_before_load-expected.txt": [ - "e7b3f850d4cbf85c562329b61d764b18fa7e14df", + "abb96daaa34025a1ab2112ea08fe6b3e1f412cc1", "support" ], "html/browsers/history/the-location-interface/assign_before_load.html": [ @@ -249308,11 +249517,11 @@ "testharness" ], "html/browsers/history/the-location-interface/location-protocol-setter-non-broken-expected.txt": [ - "22e5b88ac6cbfda7b09b6d7a92284609e1a070c0", + "54d79c6d8c56bbd54dd74b88cafddb91d575ba79", "support" ], "html/browsers/history/the-location-interface/location-protocol-setter-non-broken-weird-expected.txt": [ - "60f2755719f6074c3f6e67e4fe140358acf6093c", + "8e03d8e4a3b2c67ca95fc34fc735a5a38c52cc96", "support" ], "html/browsers/history/the-location-interface/location-protocol-setter-non-broken-weird.html": [ @@ -249332,7 +249541,7 @@ "testharness" ], "html/browsers/history/the-location-interface/location-prototype-setting-cross-origin-domain.sub-expected.txt": [ - "0d2b685897e84b98155e58f972cec69ab3d3c323", + "a79c146aa6220c9460357dca475736ead891170f", "support" ], "html/browsers/history/the-location-interface/location-prototype-setting-cross-origin-domain.sub.html": [ @@ -249340,7 +249549,7 @@ "testharness" ], "html/browsers/history/the-location-interface/location-prototype-setting-cross-origin.sub-expected.txt": [ - "65d844244ed332b554c21c6dff6aa1eb9d080cdc", + "656e9004cf1bfbb104cefd580cead7028f8a9541", "support" ], "html/browsers/history/the-location-interface/location-prototype-setting-cross-origin.sub.html": [ @@ -249348,7 +249557,7 @@ "testharness" ], "html/browsers/history/the-location-interface/location-prototype-setting-goes-cross-origin-domain.sub-expected.txt": [ - "29f6569022f978c5001f9aab802f9516dd981645", + "bf3a87c840ef185342fd515764c4d8691ec67486", "support" ], "html/browsers/history/the-location-interface/location-prototype-setting-goes-cross-origin-domain.sub.html": [ @@ -249356,7 +249565,7 @@ "testharness" ], "html/browsers/history/the-location-interface/location-prototype-setting-same-origin-domain.sub-expected.txt": [ - "6db053b1c6d0e061bef6851b56589ba87d66a8cc", + "010074fb11fa79594540147c7b0e54c5ebd33af3", "support" ], "html/browsers/history/the-location-interface/location-prototype-setting-same-origin-domain.sub.html": [ @@ -249364,7 +249573,7 @@ "testharness" ], "html/browsers/history/the-location-interface/location-prototype-setting-same-origin-expected.txt": [ - "9fc7f348f7b60e9c6c2da21402ce28498019fc31", + "3061f11de605d711df7d049bead1b630dc6d097e", "support" ], "html/browsers/history/the-location-interface/location-prototype-setting-same-origin.html": [ @@ -249372,7 +249581,7 @@ "testharness" ], "html/browsers/history/the-location-interface/location-stringifier-expected.txt": [ - "934560f680fb031cae2d9e4455888f125ca083fd", + "c4abfe683de66fa8f7c142b9b9f04cda47dc6c81", "support" ], "html/browsers/history/the-location-interface/location-stringifier.html": [ @@ -249388,7 +249597,7 @@ "testharness" ], "html/browsers/history/the-location-interface/location-valueof-expected.txt": [ - "751ddd4ac1ba02ad00497019c8a166423bb61a0d", + "feee3ea0bfef5ca325abbaeaffaff241bd88a20a", "support" ], "html/browsers/history/the-location-interface/location-valueof.html": [ @@ -249464,7 +249673,7 @@ "support" ], "html/browsers/history/the-location-interface/reload_document_open_write-expected.txt": [ - "be9578fa98024b44b2d00927e8efda9a43dc4ad5", + "9622c33ab92e336ca455440645232163f33cdfda", "support" ], "html/browsers/history/the-location-interface/reload_document_open_write.html": [ @@ -249484,7 +249693,7 @@ "support" ], "html/browsers/history/the-location-interface/reload_document_write_onload-expected.txt": [ - "21b45b840b320577898847e98c38e6abf9a8fab9", + "ae13c44c8048f1604b586f8304c9b0a432a033e4", "support" ], "html/browsers/history/the-location-interface/reload_document_write_onload.html": [ @@ -249532,7 +249741,7 @@ "support" ], "html/browsers/history/the-location-interface/scripted_click_location_assign_during_load-expected.txt": [ - "2305ad2b8a6bdfa599e77a7edc30fd238c1c841d", + "afdab7de3bcfa76d73bd8bab98e4f036bfc627f6", "support" ], "html/browsers/history/the-location-interface/scripted_click_location_assign_during_load.html": [ @@ -249772,7 +249981,7 @@ "support" ], "html/browsers/origin/cross-origin-objects/cross-origin-objects-expected.txt": [ - "649e2d121634522b5623b1451f5fdfd2aba1f81b", + "956fca935e7c7836852d8b250480eb7021b4bf3d", "support" ], "html/browsers/origin/cross-origin-objects/cross-origin-objects-on-new-window.html": [ @@ -249800,7 +250009,7 @@ "support" ], "html/browsers/origin/relaxing-the-same-origin-restriction/document_domain-expected.txt": [ - "9fa31e3961c00c170fcb8028ba3004ee6995ed38", + "5fa1307ee18031623794a1bfd31af7e74d64348c", "support" ], "html/browsers/origin/relaxing-the-same-origin-restriction/document_domain.html": [ @@ -249808,7 +250017,7 @@ "testharness" ], "html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter-expected.txt": [ - "5490279a15fb86fd4a7409575a22d26ab2993ef0", + "619189980195212ae32c9fd321ba49c2241a1330", "support" ], "html/browsers/origin/relaxing-the-same-origin-restriction/document_domain_setter.html": [ @@ -249876,7 +250085,7 @@ "testharness" ], "html/browsers/the-window-object/accessing-other-browsing-contexts/indexed-browsing-contexts-02-expected.txt": [ - "d1460adbc45d072d3676c4f6ceb3d53ec241ab73", + "1092b4fca915eae99aac10911aae3f0bbdc1b093", "support" ], "html/browsers/the-window-object/accessing-other-browsing-contexts/indexed-browsing-contexts-02.html": [ @@ -249884,7 +250093,7 @@ "testharness" ], "html/browsers/the-window-object/accessing-other-browsing-contexts/indexed-browsing-contexts-03-expected.txt": [ - "c823c594105c51b38cb0eb86629fe7055c66d339", + "fe6e255da8d3c0b607774379d54061082254f123", "support" ], "html/browsers/the-window-object/accessing-other-browsing-contexts/indexed-browsing-contexts-03.html": [ @@ -249932,7 +250141,7 @@ "support" ], "html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_script_defer-expected.txt": [ - "02119f16d21b3bd9cf321d66c2643ba0e80f5457", + "a6b081912e2b9a49174a6b249345351f308ef881", "support" ], "html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/close_script_defer.html": [ @@ -250004,7 +250213,7 @@ "testharness" ], "html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-left-expected.txt": [ - "6d98a5144ab88468b6ff6a86eb2706b764e16243", + "5027dae02883bf7807e9a2c5d26b4a3b45f1a1da", "support" ], "html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-left.html": [ @@ -250012,7 +250221,7 @@ "testharness" ], "html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screenx-expected.txt": [ - "e61a82095c06b8dbf533a7dd2dfb8bb972e0a9a3", + "c0a2ad1091241ecf2e302b7509a55ae34ce1085a", "support" ], "html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screenx.html": [ @@ -250020,7 +250229,7 @@ "testharness" ], "html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screeny-expected.txt": [ - "f29c66a650f928428755f32b00396a0700a4dac5", + "47c47dadb0575ec338df8595075d97990d946716", "support" ], "html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screeny.html": [ @@ -250028,7 +250237,7 @@ "testharness" ], "html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-top-expected.txt": [ - "a26bee338cbc84d52076bb66ca4f74a6a02cfbbf", + "8921042a9f7065b9ca70f4c4cb4a5af488485874", "support" ], "html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-top.html": [ @@ -250044,7 +250253,7 @@ "testharness" ], "html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-noopener-expected.txt": [ - "49897f58e260ac5506a869ff0547130c0c103d43", + "10fede9bd30ebebe3873836bdd90c82455dc8bd3", "support" ], "html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-noopener.html": [ @@ -250052,7 +250261,7 @@ "testharness" ], "html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-screenx-screeny-expected.txt": [ - "171cfa0a4e83a2a9d1370d862435943f7cfb3e8b", + "0f06a1dc89c8d7d03833bc189be6c5ca2d0d4d2c", "support" ], "html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-screenx-screeny.html": [ @@ -250060,7 +250269,7 @@ "testharness" ], "html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-top-left-expected.txt": [ - "6d054f6558e73a64efa9450c6c96b1afce078c53", + "71284ef68e3d25f370452c84e77dae1c54b66bf6", "support" ], "html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-top-left.html": [ @@ -250100,7 +250309,7 @@ "support" ], "html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_1-expected.txt": [ - "5bc7034c40531b1b25bbd69877dfc1e11e1f9bb3", + "e1a4b29e63da91dbf0db9c7e40c8a35bdc806aad", "support" ], "html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_1.html": [ @@ -250112,7 +250321,7 @@ "support" ], "html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_2-expected.txt": [ - "6862260862bc827fe50fc9c7cebc7b82a1c5f3a4", + "999eed719690e895153e089c50a863ef5bbf5eae", "support" ], "html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_2.html": [ @@ -250132,7 +250341,7 @@ "support" ], "html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_3-expected.txt": [ - "00849ed77cd0a58145f961d425802a6429f476ef", + "7b692d464e81a068610ca813d188cdcf66a07bc5", "support" ], "html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_3.html": [ @@ -250152,7 +250361,7 @@ "support" ], "html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_4-expected.txt": [ - "00849ed77cd0a58145f961d425802a6429f476ef", + "7b692d464e81a068610ca813d188cdcf66a07bc5", "support" ], "html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_4.html": [ @@ -250168,7 +250377,7 @@ "support" ], "html/browsers/the-window-object/named-access-on-the-window-object/named-objects-expected.txt": [ - "82dda4f2846594768335c1bdddebc8b361171a4d", + "6fe733c4806f146302addc2497598f09aa5de9d9", "support" ], "html/browsers/the-window-object/named-access-on-the-window-object/named-objects.html": [ @@ -250188,7 +250397,7 @@ "support" ], "html/browsers/the-window-object/security-window/window-security-expected.txt": [ - "fec84c250f6c86e711d39e9df28724555a7fc6c9", + "7ba322fa261796fab5fab2f9002caf35acd33c29", "support" ], "html/browsers/the-window-object/security-window/window-security.html": [ @@ -250232,11 +250441,11 @@ "testharness" ], "html/browsers/the-window-object/window-indexed-properties-expected.txt": [ - "3b9bfa74aad2abdae3c5eeb7f66ff72133d74cd5", + "aeca763d7d3089d342146114689264c3532d7cf6", "support" ], "html/browsers/the-window-object/window-indexed-properties-strict-expected.txt": [ - "afb98a47953d8fec2b1fe4e11647cd826192ec9a", + "13f74c91231082ddbfd3209f000fcb1db7abb440", "support" ], "html/browsers/the-window-object/window-indexed-properties-strict.html": [ @@ -250248,7 +250457,7 @@ "testharness" ], "html/browsers/the-window-object/window-named-properties-expected.txt": [ - "69d7277e89d99a74a6ed29c627733280c1470185", + "919729a6979fdc65fafa81f074fc2f747e4683c4", "support" ], "html/browsers/the-window-object/window-named-properties.html": [ @@ -250260,7 +250469,7 @@ "testharness" ], "html/browsers/the-window-object/window-properties-expected.txt": [ - "3ea08cfb98786f716a6d642f612cec562ca6a141", + "032987389631a2e4f98e084133cb81d6fd0d45bf", "support" ], "html/browsers/the-window-object/window-properties.html": [ @@ -250268,7 +250477,7 @@ "testharness" ], "html/browsers/the-window-object/window-prototype-chain-expected.txt": [ - "e487fdd60c6dcbf39c08e7d3f72c76b1352609ea", + "75d01a3ffc8a1593e72d2599611f704c0f588953", "support" ], "html/browsers/the-window-object/window-prototype-chain.html": [ @@ -250276,7 +250485,7 @@ "testharness" ], "html/browsers/the-windowproxy-exotic-object/windowproxy-prototype-setting-cross-origin-domain.sub-expected.txt": [ - "0d2b685897e84b98155e58f972cec69ab3d3c323", + "a79c146aa6220c9460357dca475736ead891170f", "support" ], "html/browsers/the-windowproxy-exotic-object/windowproxy-prototype-setting-cross-origin-domain.sub.html": [ @@ -250284,7 +250493,7 @@ "testharness" ], "html/browsers/the-windowproxy-exotic-object/windowproxy-prototype-setting-cross-origin.sub-expected.txt": [ - "65d844244ed332b554c21c6dff6aa1eb9d080cdc", + "656e9004cf1bfbb104cefd580cead7028f8a9541", "support" ], "html/browsers/the-windowproxy-exotic-object/windowproxy-prototype-setting-cross-origin.sub.html": [ @@ -250292,7 +250501,7 @@ "testharness" ], "html/browsers/the-windowproxy-exotic-object/windowproxy-prototype-setting-goes-cross-origin-domain.sub-expected.txt": [ - "29f6569022f978c5001f9aab802f9516dd981645", + "bf3a87c840ef185342fd515764c4d8691ec67486", "support" ], "html/browsers/the-windowproxy-exotic-object/windowproxy-prototype-setting-goes-cross-origin-domain.sub.html": [ @@ -250360,7 +250569,7 @@ "support" ], "html/browsers/windows/browsing-context-expected.txt": [ - "1c8adae8b27e8310be0ac7a26cd586b685df001e", + "7792e0d73060b6fb38f352bcab211fd459c298fb", "support" ], "html/browsers/windows/browsing-context-names/.gitkeep": [ @@ -250684,7 +250893,7 @@ "testharness" ], "html/dom/documents/dom-tree-accessors/document.forms-expected.txt": [ - "f05961d98958f0126a29f0acc14f292ae465e35e", + "506fc9bef38c38f634cf1a840fb188affb6776ba", "support" ], "html/dom/documents/dom-tree-accessors/document.forms.html": [ @@ -250716,11 +250925,11 @@ "testharness" ], "html/dom/documents/dom-tree-accessors/document.getElementsByName/document.getElementsByName-namespace-expected.txt": [ - "aced75faa7604d2123fe7d212217045ad74c435c", + "7d1fea072f3eb6e20859f59f17dbc36ae98b8f62", "support" ], "html/dom/documents/dom-tree-accessors/document.getElementsByName/document.getElementsByName-namespace-xhtml-expected.txt": [ - "aced75faa7604d2123fe7d212217045ad74c435c", + "7d1fea072f3eb6e20859f59f17dbc36ae98b8f62", "support" ], "html/dom/documents/dom-tree-accessors/document.getElementsByName/document.getElementsByName-namespace-xhtml.xhtml": [ @@ -250816,7 +251025,7 @@ "testharness" ], "html/dom/documents/dom-tree-accessors/nameditem-03-expected.txt": [ - "a56be8099ef0df8e9cb5678f460f300304b3733a", + "a3533aa267259b1743b4146ae1365c5c30307a3c", "support" ], "html/dom/documents/dom-tree-accessors/nameditem-03.html": [ @@ -250840,7 +251049,7 @@ "testharness" ], "html/dom/documents/dom-tree-accessors/nameditem-08-expected.txt": [ - "2443b696b4332e1811b328bb573b18cd51369288", + "9b2d8283fefd077789629564660fc7a43bc8bba3", "support" ], "html/dom/documents/dom-tree-accessors/nameditem-08.html": [ @@ -251304,7 +251513,7 @@ "testharness" ], "html/dom/dynamic-markup-insertion/document-write/write-active-document-expected.txt": [ - "4a0a7a7c2c9826da0d42c938abf4ba95499c31b9", + "02d3bc2222bb9492835a1c86ca8d0a4ea28442bf", "support" ], "html/dom/dynamic-markup-insertion/document-write/write-active-document.html": [ @@ -251340,7 +251549,7 @@ "support" ], "html/dom/dynamic-markup-insertion/opening-the-input-stream/001-expected.txt": [ - "d62cf0e7da5d5bd68e6b2fba048e01ba5e90094a", + "667ce9ddcc41b15ef9138e2d16b81adfa43e0aec", "support" ], "html/dom/dynamic-markup-insertion/opening-the-input-stream/001.html": [ @@ -251360,7 +251569,7 @@ "testharness" ], "html/dom/dynamic-markup-insertion/opening-the-input-stream/005-expected.txt": [ - "5172e81331c674b29188fb37ca2ac46b9b503564", + "15085d675bd9c7857d0da93433ffb443ab6cc61d", "support" ], "html/dom/dynamic-markup-insertion/opening-the-input-stream/005.html": [ @@ -251376,7 +251585,7 @@ "testharness" ], "html/dom/dynamic-markup-insertion/opening-the-input-stream/008-expected.txt": [ - "87950e080e06ff90f5923983c97a32093bd091b3", + "3356604b5f1c679671fab1b2887f2d534421409f", "support" ], "html/dom/dynamic-markup-insertion/opening-the-input-stream/008.html": [ @@ -251384,7 +251593,7 @@ "testharness" ], "html/dom/dynamic-markup-insertion/opening-the-input-stream/009-expected.txt": [ - "37c7df8f30a22219c493917e16ddea0405088e27", + "4fd50a70fea0180bbd88e752fe3a117169f649d9", "support" ], "html/dom/dynamic-markup-insertion/opening-the-input-stream/009.html": [ @@ -251400,7 +251609,7 @@ "support" ], "html/dom/dynamic-markup-insertion/opening-the-input-stream/010-expected.txt": [ - "25fa80e1c9f388afb26af6d3251b492ae8d46aa5", + "d6f5202e4690417f450c5f23c4148753da8f33b7", "support" ], "html/dom/dynamic-markup-insertion/opening-the-input-stream/010.html": [ @@ -251444,7 +251653,7 @@ "support" ], "html/dom/dynamic-markup-insertion/opening-the-input-stream/015-expected.txt": [ - "26428db22fb6471866700fb99915802f6fc40d27", + "02fa4a4d85c02f12155d3fdde03e3f1c507269cf", "support" ], "html/dom/dynamic-markup-insertion/opening-the-input-stream/015.html": [ @@ -251456,7 +251665,7 @@ "support" ], "html/dom/dynamic-markup-insertion/opening-the-input-stream/016-expected.txt": [ - "6707aa109ef2afb6ec8cc36ddfd01c2c7af131dc", + "3d3c1d3a5ae8aacad95b7302bc222a301549f85a", "support" ], "html/dom/dynamic-markup-insertion/opening-the-input-stream/016.html": [ @@ -251472,7 +251681,7 @@ "testharness" ], "html/dom/dynamic-markup-insertion/opening-the-input-stream/document.open-02-expected.txt": [ - "9a1dbb6eabde77706218d92d66c7bf50e5d135ec", + "bc23869270a28358be6572f84e533dde4244618d", "support" ], "html/dom/dynamic-markup-insertion/opening-the-input-stream/document.open-02.html": [ @@ -251480,7 +251689,7 @@ "testharness" ], "html/dom/dynamic-markup-insertion/opening-the-input-stream/document.open-03-expected.txt": [ - "f9279c0eba4cb306ff433e841d73cb884dc54031", + "6827371bd10a98bcdc37aaa9a0c09d21624035df", "support" ], "html/dom/dynamic-markup-insertion/opening-the-input-stream/document.open-03-frame.html": [ @@ -251584,7 +251793,7 @@ "support" ], "html/dom/elements/global-attributes/custom-attrs-expected.txt": [ - "957bf504a884ff53982abd51a183c0cc12399838", + "6b45e9a66b099602b2e94dd5ebde9deefefc92ce", "support" ], "html/dom/elements/global-attributes/custom-attrs.html": [ @@ -252336,7 +252545,7 @@ "support" ], "html/dom/interfaces-expected.txt": [ - "b374b40edab710c459dd4ebf4124bfe0292347d3", + "4d31296c6127b0017501fe2d7d49009cba249d45", "support" ], "html/dom/interfaces.html": [ @@ -252344,7 +252553,7 @@ "testharness" ], "html/dom/interfaces.worker-expected.txt": [ - "a24a8a102888593d0d3650f4ce3def44bcbe4c94", + "f66bcb4ac6b073b7bdaaabfe3ce2512a81383a97", "support" ], "html/dom/interfaces.worker.js": [ @@ -252360,7 +252569,7 @@ "support" ], "html/dom/reflection-embedded-expected.txt": [ - "62607d7a1d0ffe40d38243ca3038920ff877430e", + "cfe18f85b043f74fa702a51f8f09f6f25fc90fb3", "support" ], "html/dom/reflection-embedded.html": [ @@ -252368,7 +252577,7 @@ "testharness" ], "html/dom/reflection-forms-expected.txt": [ - "561c4d8c0975c579a0d7c57250189772a146f7c1", + "ecdc3c345a30e0f86b01d9ee946b6134b09a1ff1", "support" ], "html/dom/reflection-forms.html": [ @@ -252380,7 +252589,7 @@ "testharness" ], "html/dom/reflection-metadata-expected.txt": [ - "150c65a33ea85a1be446722ee2cadf6a8aea20c3", + "e77aed4946bea51f46d28793fdf167410257168a", "support" ], "html/dom/reflection-metadata.html": [ @@ -252388,7 +252597,7 @@ "testharness" ], "html/dom/reflection-misc-expected.txt": [ - "59727e969d2a5d135a76c14fe58623a4491d125e", + "a30e4a4f10a7834208ba1036232e9b05385333c8", "support" ], "html/dom/reflection-misc.html": [ @@ -252396,7 +252605,7 @@ "testharness" ], "html/dom/reflection-obsolete-expected.txt": [ - "36aef23d45ec3af7abff305a2cdda766d353da6c", + "b7ed62d4d1dbb705b04c5f8ce2a752e8807ce195", "support" ], "html/dom/reflection-obsolete.html": [ @@ -252412,7 +252621,7 @@ "testharness" ], "html/dom/reflection-tabular-expected.txt": [ - "b3c6f0d8c06f316265c6a9159fd5dfad53e5e06c", + "5134550aa08accb16dd39790ce4c2c7c4380833c", "support" ], "html/dom/reflection-tabular.html": [ @@ -252420,7 +252629,7 @@ "testharness" ], "html/dom/reflection-text-expected.txt": [ - "d31d713f1a47a93c96a9ec12f7b4c916de824de4", + "80ce87c20b960596ac575775dea0b86d40848e5d", "support" ], "html/dom/reflection-text.html": [ @@ -255608,7 +255817,7 @@ "support" ], "html/editing/dnd/synthetic/001-expected.txt": [ - "cb1faa41faf88de8e6ca80902b6a218d1d4786d9", + "3d89af9e7923da23e42f9cf208f8cbb68f8dd192", "support" ], "html/editing/dnd/synthetic/001.html": [ @@ -255780,7 +255989,7 @@ "manual" ], "html/editing/dnd/target-origin/202-expected.txt": [ - "07bdd966169a58835d9d4cea77156fc0dbb5f00c", + "d324565ddf812801d0e5b3da40cd77d6dd39a71a", "support" ], "html/editing/dnd/target-origin/202.html": [ @@ -255804,7 +256013,7 @@ "testharness" ], "html/editing/dnd/the-dropzone-attribute/dropzone_attribute-expected.txt": [ - "e4f958011237dff992b995e865c162d1c114c3ae", + "9afc721ccb3475d5f0fd4a008fb3ece80fa8eb31", "support" ], "html/editing/dnd/the-dropzone-attribute/dropzone_attribute.html": [ @@ -256120,7 +256329,7 @@ "testharness" ], "html/infrastructure/common-dom-interfaces/collections/htmlallcollection-expected.txt": [ - "0ace269803935f790d92f8893375f898e5026b41", + "618b3182b1aeb3979bfe8872db6d88912b78318c", "support" ], "html/infrastructure/common-dom-interfaces/collections/htmlallcollection.html": [ @@ -256132,7 +256341,7 @@ "testharness" ], "html/infrastructure/common-dom-interfaces/collections/htmloptionscollection-expected.txt": [ - "13a2fb8be5d8eab0f66d6fa86c9048adc890d913", + "53bb3358e7a206b4cdeec6615c0092736cdc19fe", "support" ], "html/infrastructure/common-dom-interfaces/collections/htmloptionscollection.html": [ @@ -256288,7 +256497,7 @@ "testharness" ], "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success-dedicatedworker-expected.txt": [ - "dca7776baefe8e2c5758475769c3e28f265171bb", + "526dc8872bc809c114ae1d7cc180494749206df1", "support" ], "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success-dedicatedworker.html": [ @@ -256296,7 +256505,7 @@ "testharness" ], "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success-sharedworker-expected.txt": [ - "dca7776baefe8e2c5758475769c3e28f265171bb", + "526dc8872bc809c114ae1d7cc180494749206df1", "support" ], "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success-sharedworker.html": [ @@ -256408,7 +256617,7 @@ "testharness" ], "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-serviceworker-failure.https-expected.txt": [ - "f182ceb43f1830901670ebb4e496b1703c526765", + "3dc3c14c6f84d8244a95fa75a3d77b172c371b6e", "support" ], "html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-serviceworker-failure.https.html": [ @@ -256484,7 +256693,7 @@ "support" ], "html/infrastructure/urls/dynamic-changes-to-base-urls/dynamic-urls.sub-expected.txt": [ - "8862b9460b11b6afbd81d9382ff79375d4f69f70", + "bb261b91f3d707d161a88dbb5aee79a4db5fc2bb", "support" ], "html/infrastructure/urls/dynamic-changes-to-base-urls/dynamic-urls.sub.xhtml": [ @@ -257288,7 +257497,7 @@ "testharness" ], "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-expected.txt": [ - "7bb8d4cb803182e1c32244abfe91a62e0b6c682a", + "e68445be20cddeb1f13b93a70433cb79fddf49ab", "support" ], "html/rendering/non-replaced-elements/the-fieldset-element-0/legend.html": [ @@ -257328,7 +257537,7 @@ "reftest" ], "html/rendering/non-replaced-elements/the-hr-element-0/hr-expected.txt": [ - "c22053799889445f87c836449ad2193397d01d3e", + "6d6f2a7120206339c9bd00e28412b0c7888920d2", "support" ], "html/rendering/non-replaced-elements/the-hr-element-0/hr.html": [ @@ -257364,7 +257573,7 @@ "reftest" ], "html/rendering/non-replaced-elements/the-page/iframe-body-margin-attributes-expected.txt": [ - "9766efdfb114461d84439266c13050c754f6f138", + "e2e87bc85c38cce6df4c458142095789c2933560", "support" ], "html/rendering/non-replaced-elements/the-page/iframe-body-margin-attributes.html": [ @@ -257372,7 +257581,7 @@ "testharness" ], "html/rendering/non-replaced-elements/the-page/iframe-marginwidth-marginheight-expected.txt": [ - "c2273f5968d5e30c8846117dfb955dc31c2ac3ab", + "c10e706b3703bf9ff83ec63091965c4cdad7c2ee", "support" ], "html/rendering/non-replaced-elements/the-page/iframe-marginwidth-marginheight.html": [ @@ -257628,7 +257837,7 @@ "testharness" ], "html/semantics/document-metadata/the-base-element/base_href_invalid-expected.txt": [ - "0bd2cdd013f4cdc7b1e6dc0e499318a02f88ce51", + "a9f3fe1f06dfa3161816e8005b16bb88f6a11088", "support" ], "html/semantics/document-metadata/the-base-element/base_href_invalid.html": [ @@ -257760,7 +257969,7 @@ "support" ], "html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/allow-scripts-flag-changing-1-expected.txt": [ - "f51e417064b95f4587e82ce921b067ff14b6f8d0", + "1a5b2d3619ff271c612b2bb15f85dc03e3ff1663", "support" ], "html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/allow-scripts-flag-changing-1.html": [ @@ -257936,7 +258145,7 @@ "support" ], "html/semantics/embedded-content/image-maps/image-map-processing-model/hash-name-reference-expected.txt": [ - "75cfb46c2d2bea4cb17c652715a4345f88e74494", + "5cbc67fe6bba96766ee6acf0b9b28cd1eb7c4d5d", "support" ], "html/semantics/embedded-content/image-maps/image-map-processing-model/hash-name-reference-test-data.html": [ @@ -258016,7 +258225,7 @@ "testharness" ], "html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/src-expected.txt": [ - "01119598353d258a1b1d74c87b074bd2bcd8bfaa", + "395356e2df35a75c3661fb4863005d2030cf5292", "support" ], "html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/src.html": [ @@ -258076,7 +258285,7 @@ "testharness" ], "html/semantics/embedded-content/media-elements/interfaces/TextTrackCue/onenter-expected.txt": [ - "9907e58352428cdf73776eab61fc8f3cbb6b96b3", + "3b70ade5a5ba3fab8c3a1e04f269a6627a8b14bb", "support" ], "html/semantics/embedded-content/media-elements/interfaces/TextTrackCue/onenter.html": [ @@ -258084,7 +258293,7 @@ "testharness" ], "html/semantics/embedded-content/media-elements/interfaces/TextTrackCue/onexit-expected.txt": [ - "060e8fe1de6850bf2e3f8c117fdcc97a280a9f96", + "977088a9c5319a4614b7b04618c237db86c7143d", "support" ], "html/semantics/embedded-content/media-elements/interfaces/TextTrackCue/onexit.html": [ @@ -258140,7 +258349,7 @@ "testharness" ], "html/semantics/embedded-content/media-elements/interfaces/TrackEvent/createEvent-expected.txt": [ - "5cfbc0d4f1e88974f74794306a7ec14212f61831", + "d69e5da1ef126c92e42c420add4f0a3049e8eadc", "support" ], "html/semantics/embedded-content/media-elements/interfaces/TrackEvent/createEvent.html": [ @@ -258148,7 +258357,7 @@ "testharness" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/load-removes-queued-error-event-expected.txt": [ - "aeefa91505329614858797ea756d385444259f68", + "bcccd3311a620f38cfac24e55b86cc24947c8c0a", "support" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/load-removes-queued-error-event.html": [ @@ -258156,7 +258365,7 @@ "testharness" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-insert-before-expected.txt": [ - "1a3a49bfa2e0e5cbb305b5570458011ec23c68b9", + "fc721383b0559a8e8726bc1ee8a3e687691fadd2", "support" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-candidate-insert-before.html": [ @@ -258172,7 +258381,7 @@ "testharness" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-in-sync-event-expected.txt": [ - "39b4678b4f7e60515f878537b2299d7009422cff", + "ff9940c94dfefe68a8337b58f550e2ccba91fc97", "support" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-in-sync-event.html": [ @@ -258188,7 +258397,7 @@ "testharness" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-into-iframe-expected.txt": [ - "78c3334f5bd65b0072bcaddc58bec876f8364207", + "f6015305fb2d39d66061a1475e3f247a8d70f123", "support" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-into-iframe.html": [ @@ -258208,7 +258417,7 @@ "testharness" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-networkState-expected.txt": [ - "955753cfadaa82b8ccf6521e879fdec9aefb1c6e", + "d2e00a8855eff024ef5f09b1118cbf7c046ef0f7", "support" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-insert-source-networkState.html": [ @@ -258224,7 +258433,7 @@ "testharness" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-load-expected.txt": [ - "dbf38fc23c5b4b5491e7eaafff00e38732ef054f", + "f78588e1846282cb7cff7bc0b22785d8fd7abb6d", "support" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-load.html": [ @@ -258232,7 +258441,7 @@ "testharness" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-pause-expected.txt": [ - "826fa956f5b2c13f0339ee053127cce0857ea187", + "a24f39f4d31277fac8405682cd92d111821f69d8", "support" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-pause-networkState.html": [ @@ -258244,7 +258453,7 @@ "testharness" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-play-expected.txt": [ - "a9d4e6bc3b1059f7bbcae68792cd286990877394", + "e4ec2f04ba3da8619c2e7e27f7a883b1120c8808", "support" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-play.html": [ @@ -258260,7 +258469,7 @@ "testharness" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-src-expected.txt": [ - "8b70247d0df653f8c4f30dc1c52c97f580cb6d18", + "b72ead95d66d5d6068d45c3564086956e7d15f3c", "support" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-remove-src.html": [ @@ -258272,7 +258481,7 @@ "testharness" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-networkState-expected.txt": [ - "b5c39e347696ec31b30f3da988068403ac055a10", + "aa891a08f112c2dab342f3a9d0e66de5dbbf2a83", "support" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-invoke-set-src-networkState.html": [ @@ -258288,7 +258497,7 @@ "testharness" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-control-expected.txt": [ - "c863b82b054f1662a49cbc04cbe257611905a703", + "b54af136ca8b834483e7ffe9d4ffaa1ef030c4b0", "support" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-control.html": [ @@ -258296,7 +258505,7 @@ "testharness" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-insert-br-expected.txt": [ - "942b65004b00fd84b91dcd36f13804b982c9d65d", + "a43391984e7eebae54daa46bc6f126319823c513", "support" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-insert-br.html": [ @@ -258304,7 +258513,7 @@ "testharness" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-insert-source-expected.txt": [ - "917d9ea08cd2ecd40c09b51857f1b3d39ca07304", + "dab93152d5aebb4abbe5fea2eb56700e2abc142d", "support" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-insert-source.html": [ @@ -258312,7 +258521,7 @@ "testharness" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-insert-text-expected.txt": [ - "205809430647cbc5a00f9da465535fbedb28177b", + "586bb36636b3cd5549b902ad6d9cfd171935473a", "support" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-insert-text.html": [ @@ -258320,7 +258529,7 @@ "testharness" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-remove-source-after-expected.txt": [ - "b336ec3decb591e7565b52edde20d076dbd51595", + "e63c733123c609bbfff6af0ab90791de069c5c3e", "support" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-remove-source-after.html": [ @@ -258328,7 +258537,7 @@ "testharness" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-remove-source-expected.txt": [ - "5b6fc10ec23d0a83aea60758f6fa1a7ded3c932a", + "c81531678358812d8f41312f641b5175ee740f45", "support" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-remove-source.html": [ @@ -258336,7 +258545,7 @@ "testharness" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-remove-text-expected.txt": [ - "e1a4d071dfbdd7d7a73c89458e4c0712b4244030", + "576fac0b1be8de0b1a0178388ec97930c4dea140", "support" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-pointer-remove-text.html": [ @@ -258344,7 +258553,7 @@ "testharness" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-remove-source-expected.txt": [ - "c1105de550c82590b5f1c6c80ed0c9f9e8b65924", + "3e64169bb6c38550a669ea575710ed6f5556b9ed", "support" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-remove-source.html": [ @@ -258352,7 +258561,7 @@ "testharness" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-remove-src-expected.txt": [ - "7d3c73f700ef6b661845e010d1f92c6f35d38ebc", + "7cd083e53f8857b2bdc3ecb857e035a1ffdae06e", "support" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-remove-src.html": [ @@ -258360,7 +258569,7 @@ "testharness" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media-expected.txt": [ - "b47c8e61b3e370ed676125aeec4876357427f5bc", + "5cc661d7eb7f304228b424e4fb58f02867425dc5", "support" ], "html/semantics/embedded-content/media-elements/loading-the-media-resource/resource-selection-source-media.html": [ @@ -258376,7 +258585,7 @@ "manual" ], "html/semantics/embedded-content/media-elements/location-of-the-media-resource/currentSrc-expected.txt": [ - "9909dfe148240fde78b84cc58e72c445c793b9b1", + "e0254e84ff223736624a456d7a6c442a5fb83bca", "support" ], "html/semantics/embedded-content/media-elements/location-of-the-media-resource/currentSrc.html": [ @@ -258384,7 +258593,7 @@ "testharness" ], "html/semantics/embedded-content/media-elements/mime-types/canPlayType-expected.txt": [ - "8ea8ac79d6298d090f2c54ec7d6d637701706c50", + "219ecfe56fc50b24f02440733c8f76eb7c218a71", "support" ], "html/semantics/embedded-content/media-elements/mime-types/canPlayType.html": [ @@ -258444,13 +258653,21 @@ "support" ], "html/semantics/embedded-content/media-elements/track/track-element/src-clear-cues-expected.txt": [ - "1a3e0aa2f3550c3f6fbb823693781d9ecda911e9", + "7362d90b40c5e536eff3e51ab9a8bec797d8aa6d", "support" ], "html/semantics/embedded-content/media-elements/track/track-element/src-clear-cues.html": [ "9e5b2fa642544c20e04d542d9a8f701d1fa2d165", "testharness" ], + "html/semantics/embedded-content/media-elements/track/track-element/track-data-url-expected.txt": [ + "a748e18b762d3b177dc6590b79fc65e8db597d97", + "support" + ], + "html/semantics/embedded-content/media-elements/track/track-element/track-data-url.html": [ + "e9c8849350512b1247543939ee0e529947e47c2d", + "testharness" + ], "html/semantics/embedded-content/media-elements/video_008.htm": [ "087f17d5f7a75ac1990ef7ecb413fc4eaf312be5", "testharness" @@ -258560,7 +258777,7 @@ "testharness" ], "html/semantics/embedded-content/the-embed-element/embed-in-object-fallback-2-expected.txt": [ - "4507f2ce29b8eaedbc194287091c55a3441e834e", + "597bf362aabe72df6d497c7e248adb9ae1fbf07d", "support" ], "html/semantics/embedded-content/the-embed-element/embed-in-object-fallback-2.html": [ @@ -258628,7 +258845,7 @@ "testharness" ], "html/semantics/embedded-content/the-iframe-element/iframe-load-event-expected.txt": [ - "2f79c5e2fa888e3a7fe46b719924e40091db6ed0", + "663fb86b0a9a5d99c09ebdec4660e98b4fcf1f77", "support" ], "html/semantics/embedded-content/the-iframe-element/iframe-load-event.html": [ @@ -258856,7 +259073,7 @@ "support" ], "html/semantics/embedded-content/the-img-element/img.complete-expected.txt": [ - "738a438e68e442de5acc3e8e9dc03464b47152ef", + "886911fbe0c0b5eb41f54f256676fa1e92f3b447", "support" ], "html/semantics/embedded-content/the-img-element/img.complete.html": [ @@ -258900,7 +259117,7 @@ "support" ], "html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute-expected.txt": [ - "8cf488186fd0aba0919d636c39102505fa7c6f26", + "3e5ed1b68e7ab7d2c5aa131a9e4b3fe7b50f279b", "support" ], "html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute.html": [ @@ -258940,7 +259157,7 @@ "testharness" ], "html/semantics/embedded-content/the-img-element/usemap-casing-expected.txt": [ - "ea5151cf6e1d2ca4d704afd73e3060a8d1875b84", + "a29d78208541837e3483f3adff4e1eed75cf402d", "support" ], "html/semantics/embedded-content/the-img-element/usemap-casing.html": [ @@ -258960,7 +259177,7 @@ "testharness" ], "html/semantics/embedded-content/the-object-element/object-attributes-expected.txt": [ - "ec830c03d6014ff85d04cb925b69af99fcbc869b", + "9e098475e332f96d7af74bfed22d8a6066bffa36", "support" ], "html/semantics/embedded-content/the-object-element/object-attributes.html": [ @@ -258976,7 +259193,7 @@ "testharness" ], "html/semantics/embedded-content/the-object-element/object-in-object-fallback-2-expected.txt": [ - "e7a7496f56154ca3bccaae866af05937790bcb1d", + "69faf821e156a14a8ca50776c3473f76c914bf54", "support" ], "html/semantics/embedded-content/the-object-element/object-in-object-fallback-2.html": [ @@ -258996,7 +259213,7 @@ "support" ], "html/semantics/embedded-content/the-object-element/usemap-casing-expected.txt": [ - "cd0108a9bbd5db32e34d9e7e07d7e3455b63ac83", + "8d3e7555145af87d51f1e7e9e982bfc165badaa5", "support" ], "html/semantics/embedded-content/the-object-element/usemap-casing.html": [ @@ -259144,7 +259361,7 @@ "testharness" ], "html/semantics/forms/constraints/form-validation-validity-valueMissing-expected.txt": [ - "97bc800e0436db62b5124ea2ed137c21752b611d", + "4603144b5c45e4518937bc3e49fc2d462a45f27f", "support" ], "html/semantics/forms/constraints/form-validation-validity-valueMissing.html": [ @@ -259244,7 +259461,7 @@ "support" ], "html/semantics/forms/form-submission-0/getactionurl-expected.txt": [ - "1aca651822365c35925bd45af00c14ffc37842fb", + "c1d138d32d29743dc8af7db210882811231fd25d", "support" ], "html/semantics/forms/form-submission-0/getactionurl.html": [ @@ -259280,7 +259497,7 @@ "testharness" ], "html/semantics/forms/resetting-a-form/reset-form-event-realm-expected.txt": [ - "728bc460329a1570ada84e2802bc0ccb8a618cc1", + "f82caaecfe239c801fab1b0cdd517d17344f90f1", "support" ], "html/semantics/forms/resetting-a-form/reset-form-event-realm-support.html": [ @@ -259356,7 +259573,7 @@ "testharness" ], "html/semantics/forms/the-button-element/button-events-expected.txt": [ - "8f129d33d958ec2ecee6ee562849a8115da8cdcc", + "0e7e33dc728f6d63373811e0e2e20e6bc39f24de", "support" ], "html/semantics/forms/the-button-element/button-events.html": [ @@ -259372,7 +259589,7 @@ "testharness" ], "html/semantics/forms/the-button-element/button-validation-expected.txt": [ - "45e65d75b7ee8eb57c21bb89c27c999b88e9c377", + "d3b70e6f1f717432edb41a1d5854a7fad03a63a2", "support" ], "html/semantics/forms/the-button-element/button-validation.html": [ @@ -259408,11 +259625,11 @@ "support" ], "html/semantics/forms/the-form-element/form-action-reflection-expected.txt": [ - "224d20e73b53c8de8d950351fe971b6d7382853f", + "9c5c43c49ca36ad471ef6b9844ca9fc0f9c22ea0", "support" ], "html/semantics/forms/the-form-element/form-action-reflection-with-base-url-expected.txt": [ - "9059eb09340f01de9ab5fe7b44fe495224490450", + "7a765f458c0c2929031ac8a162d34cd6fd6e9efc", "support" ], "html/semantics/forms/the-form-element/form-action-reflection-with-base-url.html": [ @@ -259432,7 +259649,7 @@ "testharness" ], "html/semantics/forms/the-form-element/form-autocomplete-expected.txt": [ - "a54ce3703f2efd9c4279e20ddde659e7a11cc85d", + "630e0a014c465d2fff51401111e9b396fe914ef4", "support" ], "html/semantics/forms/the-form-element/form-autocomplete.html": [ @@ -259464,7 +259681,7 @@ "testharness" ], "html/semantics/forms/the-form-element/form-indexed-element-expected.txt": [ - "c7750f38444c4b0247991edac021cfd0e0435800", + "3871b5af47b71a9af3f1f4502434f2b604ed90bc", "support" ], "html/semantics/forms/the-form-element/form-indexed-element.html": [ @@ -259472,7 +259689,7 @@ "testharness" ], "html/semantics/forms/the-form-element/form-nameditem-expected.txt": [ - "b92a40c0da71f0458955b54cf3c40f5eb03aa04c", + "fc5b140bb5f2bcf7bf8149dc78f7cc201e7a5c10", "support" ], "html/semantics/forms/the-form-element/form-nameditem.html": [ @@ -259508,7 +259725,7 @@ "testharness" ], "html/semantics/forms/the-input-element/checkbox-click-events-expected.txt": [ - "742af4a02e9b69db7ceb9be24e7dcd12473d85e2", + "a0f570938dfa49879bf36b1c3b154620ec771ae2", "support" ], "html/semantics/forms/the-input-element/checkbox-click-events.html": [ @@ -259516,7 +259733,7 @@ "testharness" ], "html/semantics/forms/the-input-element/checkbox-expected.txt": [ - "cd31ef6989ac9a384db7b12b82274e4f6d025fee", + "f879cfa3ab9c6bc793d7c9955bc04aec92456946", "support" ], "html/semantics/forms/the-input-element/checkbox.html": [ @@ -259548,7 +259765,7 @@ "testharness" ], "html/semantics/forms/the-input-element/datetime-local-expected.txt": [ - "290fed25ec5d7c5e0c439e76526582c2b2939ae4", + "6d281d7803b18dad58050906a6a9059ba4c90794", "support" ], "html/semantics/forms/the-input-element/datetime-local.html": [ @@ -259612,7 +259829,7 @@ "testharness" ], "html/semantics/forms/the-input-element/radio-expected.txt": [ - "1a585b7af62c96a6cca4e80edd2139bb8d28a77d", + "484a8104bd3a1c3ecdb327241d561e5a4f1cd035", "support" ], "html/semantics/forms/the-input-element/radio-groupname-case.html": [ @@ -259632,7 +259849,7 @@ "testharness" ], "html/semantics/forms/the-input-element/range-expected.txt": [ - "f61ea2bf823f760ea776be16347ae03cc0cd34df", + "3afb51729d843482a31d5e5942ecc788b009b46b", "support" ], "html/semantics/forms/the-input-element/range.html": [ @@ -259668,7 +259885,7 @@ "testharness" ], "html/semantics/forms/the-input-element/time-expected.txt": [ - "cb71268f9bb4870786ece914dbfc3a31e89f02fc", + "18d43ee233e865cfa526623b77f434b89581f44b", "support" ], "html/semantics/forms/the-input-element/time.html": [ @@ -259676,7 +259893,7 @@ "testharness" ], "html/semantics/forms/the-input-element/type-change-state-expected.txt": [ - "993798cca042a75407b4e0ad6a8b4e80de018674", + "c675f5c5585e8fc87d468b4d9a7032a52162b214", "support" ], "html/semantics/forms/the-input-element/type-change-state.html": [ @@ -259704,7 +259921,7 @@ "support" ], "html/semantics/forms/the-label-element/label-attributes-expected.txt": [ - "9e89204ec2f306cad312af21568787a111048593", + "24d17fdbfb69130d51180af86ca6a8b612ad1bdb", "support" ], "html/semantics/forms/the-label-element/label-attributes.html": [ @@ -259712,7 +259929,7 @@ "testharness" ], "html/semantics/forms/the-label-element/labelable-elements-expected.txt": [ - "f8aadae28686ace4bf98e51ef282e5c671bbf670", + "adfb75353f90eb0ae98c9d1f95de6d1a66190796", "support" ], "html/semantics/forms/the-label-element/labelable-elements.html": [ @@ -259896,7 +260113,7 @@ "testharness" ], "html/semantics/forms/the-textarea-element/value-defaultValue-textContent-expected.txt": [ - "4b67f78e43f749b7e9ad5bff993a68909c3ae28f", + "a1547b68fcdf603147f07702dd0bb7aae4f1121e", "support" ], "html/semantics/forms/the-textarea-element/value-defaultValue-textContent-xhtml.xhtml": [ @@ -260228,7 +260445,7 @@ "testharness" ], "html/semantics/interactive-elements/the-details-element/toggleEvent-expected.txt": [ - "cffe4a1ed0d34b5577be179bdd310b28fddfc756", + "d75b50aca4c2bbca58d020f5d7cb3726cfb05ede", "support" ], "html/semantics/interactive-elements/the-details-element/toggleEvent.html": [ @@ -260236,7 +260453,7 @@ "testharness" ], "html/semantics/interactive-elements/the-dialog-element/centering-expected.txt": [ - "373064f49f852497395a81c026dcc171acceb0df", + "50aa8cef93d8d4da11f9bfd808739ea193f7d796", "support" ], "html/semantics/interactive-elements/the-dialog-element/centering-iframe.sub.html": [ @@ -260252,7 +260469,7 @@ "support" ], "html/semantics/interactive-elements/the-dialog-element/dialog-close-expected.txt": [ - "37a9a8ee17f2ed88c992dd4b9bf978a83602b094", + "c6a026c2f1f48f8be93a821ad7cad31f680997f5", "support" ], "html/semantics/interactive-elements/the-dialog-element/dialog-close.html": [ @@ -260264,7 +260481,7 @@ "testharness" ], "html/semantics/interactive-elements/the-dialog-element/dialog-showModal-expected.txt": [ - "70c90a8814c002360fe802863b91ce6c4d175178", + "e72eb76307a3e366e608f8299ec3a21dd46ebd91", "support" ], "html/semantics/interactive-elements/the-dialog-element/dialog-showModal.html": [ @@ -260284,7 +260501,7 @@ "testharness" ], "html/semantics/interfaces-expected.txt": [ - "2fd7b15b1041a31ca83df44f9da54310c5c00468", + "2a9d92cdcfbbedfa2f6bca104ac560ce1d40156e", "support" ], "html/semantics/interfaces.html": [ @@ -260332,7 +260549,7 @@ "testharness" ], "html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener-expected.txt": [ - "a348f1527ac1fe3a9bf275eeb1f1af785e3d88fa", + "880ce0db2a949f992b53a7d81519112f840e6934", "support" ], "html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html": [ @@ -260468,11 +260685,11 @@ "support" ], "html/semantics/scripting-1/the-script-element/fetch-src/empty-expected.txt": [ - "ad10f3879c92734f1d5e9619b71ddfdcfeb51cae", + "f71b81871cfeff782b2076c76aff1af84e27727e", "support" ], "html/semantics/scripting-1/the-script-element/fetch-src/empty-with-base-expected.txt": [ - "ad10f3879c92734f1d5e9619b71ddfdcfeb51cae", + "f71b81871cfeff782b2076c76aff1af84e27727e", "support" ], "html/semantics/scripting-1/the-script-element/fetch-src/empty-with-base.html": [ @@ -260484,7 +260701,7 @@ "testharness" ], "html/semantics/scripting-1/the-script-element/fetch-src/failure-expected.txt": [ - "77372721827057872f8068bb982498541fdf7b77", + "f297f268745401a6c6f3c578f343ca89c1b7f47e", "support" ], "html/semantics/scripting-1/the-script-element/fetch-src/failure.html": [ @@ -261084,7 +261301,7 @@ "support" ], "html/semantics/scripting-1/the-script-element/script-charset-01-expected.txt": [ - "89ed2800022ff8f95d94bd1f5035de488b8c75f1", + "473aba23e0fec3c6bba100a336c5152ca1b00ef6", "support" ], "html/semantics/scripting-1/the-script-element/script-charset-01.html": [ @@ -261092,7 +261309,7 @@ "testharness" ], "html/semantics/scripting-1/the-script-element/script-charset-02-expected.txt": [ - "3d1ed7e6a47ccb794c77944b8faa3971272d3470", + "3cdc66c5a9f506ac0ca69c899db93fb9eedd114a", "support" ], "html/semantics/scripting-1/the-script-element/script-charset-02.html": [ @@ -261120,7 +261337,7 @@ "testharness" ], "html/semantics/scripting-1/the-script-element/script-language-type-expected.txt": [ - "9dfcfb65a3b9d930a5faad2050c1cdad19307bfe", + "14fee19cbec95966903afe3dd0311953c674e7af", "support" ], "html/semantics/scripting-1/the-script-element/script-language-type.html": [ @@ -261168,7 +261385,7 @@ "testharness" ], "html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2-expected.txt": [ - "f15e1720865412af2908e0d97fb9b9242f5ed310", + "c256f80ff6efe14d674f9c76489389d7c1b73835", "support" ], "html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html": [ @@ -261252,7 +261469,7 @@ "testharness" ], "html/semantics/scripting-1/the-template-element/definitions/template-contents-owner-document-type-expected.txt": [ - "55fe845c0af66fba92c474817ced03968fd3fca8", + "5aa521ff65c45629a76d1f768eedbb00025dc370", "support" ], "html/semantics/scripting-1/the-template-element/definitions/template-contents-owner-document-type.html": [ @@ -261380,7 +261597,7 @@ "testharness" ], "html/semantics/scripting-1/the-template-element/template-element/template-as-a-descendant-expected.txt": [ - "c06d7bc3eeb4515852a63016030db6670270e707", + "94b39468a2f2b8f4c5c5a7c7eb02da7aafe82b5d", "support" ], "html/semantics/scripting-1/the-template-element/template-element/template-as-a-descendant.html": [ @@ -261400,7 +261617,7 @@ "testharness" ], "html/semantics/scripting-1/the-template-element/template-element/template-descendant-frameset-expected.txt": [ - "9e5fc514cc830707cd15e5beaf36168a108faf6b", + "5525a891401f4430a60cd6b2edaed1b59ba91db9", "support" ], "html/semantics/scripting-1/the-template-element/template-element/template-descendant-frameset.html": [ @@ -261492,7 +261709,7 @@ "testharness" ], "html/semantics/selectors/pseudo-classes/dir-expected.txt": [ - "3e679770ee48b3f0217aafeacd2332c970d30553", + "f23c1b185fbbaa5a52ecc812fd49f6b704d7a898", "support" ], "html/semantics/selectors/pseudo-classes/dir.html": [ @@ -261500,7 +261717,7 @@ "testharness" ], "html/semantics/selectors/pseudo-classes/dir01-expected.txt": [ - "6833e46062f02137ec0e9188af71982d639bd50f", + "c3fe0e93ebf464a9d804b7b0293b26f7464799f3", "support" ], "html/semantics/selectors/pseudo-classes/dir01.html": [ @@ -261512,7 +261729,7 @@ "testharness" ], "html/semantics/selectors/pseudo-classes/enabled-expected.txt": [ - "38caa8e9f8ed6f7fd958634634a64a447f2318b0", + "d13601a40e5bf269a6d13f20d5eb45fcbb45cddd", "support" ], "html/semantics/selectors/pseudo-classes/enabled.html": [ @@ -261544,7 +261761,7 @@ "testharness" ], "html/semantics/selectors/pseudo-classes/link-expected.txt": [ - "7d4645642042a3e24820d3edb85b0ceb7f8ed118", + "2ae1b3e11e9092ef184db9cc40a627b3d2a6aaff", "support" ], "html/semantics/selectors/pseudo-classes/link.html": [ @@ -261556,7 +261773,7 @@ "testharness" ], "html/semantics/selectors/pseudo-classes/readwrite-readonly-expected.txt": [ - "f8d75cdabe9e2520735cf56476def3ce49500b7f", + "8b7c70b043adf25c09afe379a9cb74e0422fd920", "support" ], "html/semantics/selectors/pseudo-classes/readwrite-readonly-type-change.html": [ @@ -261684,7 +261901,7 @@ "testharness" ], "html/semantics/tabular-data/the-table-element/tHead-expected.txt": [ - "3f818b83fcb2f2b6335dc6d9e19feebe38ed7de8", + "085922b968d75c3ea298024fff31d93d6d40261b", "support" ], "html/semantics/tabular-data/the-table-element/tHead.html": [ @@ -262208,7 +262425,7 @@ "support" ], "html/syntax/parsing/DOMContentLoaded-defer-expected.txt": [ - "0728897722cf0236799bbffd2489386d037a6045", + "48ff9028bfa71e7611c7ed2df3e6f402108774f5", "support" ], "html/syntax/parsing/DOMContentLoaded-defer-support.js": [ @@ -262220,7 +262437,7 @@ "testharness" ], "html/syntax/parsing/Document.getElementsByTagName-foreign-01-expected.txt": [ - "fe82944cd3772e01e66bfa57f4209dead8b62e5e", + "0ff657333da50ec0da22e5182207eb1e22f6bb82", "support" ], "html/syntax/parsing/Document.getElementsByTagName-foreign-01.html": [ @@ -262332,7 +262549,7 @@ "testharness" ], "html/syntax/parsing/html5lib_innerHTML_adoption01-expected.txt": [ - "2c9fd3e91fb7fb396958e46b41e9da60ce17b686", + "f774cdfc54504a00ed8b9498a5b660d2fdb48930", "support" ], "html/syntax/parsing/html5lib_innerHTML_adoption01.html": [ @@ -262340,7 +262557,7 @@ "testharness" ], "html/syntax/parsing/html5lib_innerHTML_foreign-fragment-expected.txt": [ - "bdf00ec8004e7ca3a84e14534c9c4a51739077bb", + "f36cf8574e5e23b0a9622c3a7ded7b81c955180b", "support" ], "html/syntax/parsing/html5lib_innerHTML_foreign-fragment.html": [ @@ -262368,7 +262585,7 @@ "testharness" ], "html/syntax/parsing/html5lib_innerHTML_webkit02-expected.txt": [ - "2edd0f778f3b61b1337eabd80e4906a5840078f6", + "4380565c99874ac0edd9789cf23be02fa46f5fcb", "support" ], "html/syntax/parsing/html5lib_innerHTML_webkit02.html": [ @@ -262432,7 +262649,7 @@ "testharness" ], "html/syntax/parsing/html5lib_template-expected.txt": [ - "816bea108508a9560084fb450cd3c1e486842843", + "a03db5bfa74df986a705ba2a81db7ce23119522f", "support" ], "html/syntax/parsing/html5lib_template.html": [ @@ -262448,7 +262665,7 @@ "testharness" ], "html/syntax/parsing/html5lib_tests11-expected.txt": [ - "c6d36593f970af1ce5f71bbee631f288ceda8c20", + "a42bed5c77a0eaf86cc4e4d48e2e9947fdf3c8dd", "support" ], "html/syntax/parsing/html5lib_tests11.html": [ @@ -262480,7 +262697,7 @@ "testharness" ], "html/syntax/parsing/html5lib_tests19-expected.txt": [ - "92287b6ba6f0f567d56f73bb6d787cbf162e49a9", + "fedbdc1196f3c65b4a4e82c6f0655f2d92093096", "support" ], "html/syntax/parsing/html5lib_tests19.html": [ @@ -262488,7 +262705,7 @@ "testharness" ], "html/syntax/parsing/html5lib_tests2-expected.txt": [ - "713c503cbe8f7a460aff3a69f17643a2f57d80d8", + "bd65a85f8c248d8d64de055633d9e1d548bf86b5", "support" ], "html/syntax/parsing/html5lib_tests2.html": [ @@ -262516,7 +262733,7 @@ "testharness" ], "html/syntax/parsing/html5lib_tests25-expected.txt": [ - "f3cd36fbec6990414e2c397061ae57039472ddd5", + "f8f4dc045ffe804a9b6b7bf3566957916236f1bb", "support" ], "html/syntax/parsing/html5lib_tests25.html": [ @@ -262624,7 +262841,7 @@ "testharness" ], "html/syntax/parsing/template/additions-to-the-in-frameset-insertion-mode/end-tag-frameset-expected.txt": [ - "149750460e75ef8ad8b84e3a8c1ac4a35ea36860", + "c97e9ab5c1a9a7c995c777a903c7afc6080435a8", "support" ], "html/syntax/parsing/template/additions-to-the-in-frameset-insertion-mode/end-tag-frameset.html": [ @@ -262688,7 +262905,7 @@ "testharness" ], "html/syntax/serializing-html-fragments/serializing-expected.txt": [ - "26218ac46992ac5a2c31d3709f190652ee95f6c2", + "916dd27e466f2f41b42e0093f736c688ce56e246", "support" ], "html/syntax/serializing-html-fragments/serializing.html": [ @@ -262748,7 +262965,7 @@ "support" ], "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-1-expected.txt": [ - "a6aab74562d9115ad24d5ac8ad45d392dc0f50f4", + "ef2db12c0272961d014a2377aa292ef2214e3fa6", "support" ], "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-1.htm": [ @@ -262760,7 +262977,7 @@ "testharness" ], "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-2-expected.txt": [ - "ef42721af4fbef134f2db2fe66321ccab317c654", + "b9dc40e66f4fa09b71c912dc489019b62c52a51a", "support" ], "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-2.htm": [ @@ -262768,7 +262985,7 @@ "testharness" ], "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-3-expected.txt": [ - "446d87e615f28f10723b6da0483638c42592a76b", + "0fee546b3d175cb97e774ca9bbb552541069bc8e", "support" ], "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-3.htm": [ @@ -262776,7 +262993,7 @@ "testharness" ], "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-4-expected.txt": [ - "132944c25f303b0bcb3f9999a65c8f79320eef8e", + "c1a671030fc1f1c7ef6ce0d8d76913610f2c186c", "support" ], "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-4.htm": [ @@ -262784,7 +263001,7 @@ "testharness" ], "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-5-expected.txt": [ - "1b0c5632d51b2733d2c010b3dfa5def8aca99e67", + "7e40b9d5713f0495b4ce26390d2948c354ece39d", "support" ], "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-5.htm": [ @@ -262792,7 +263009,7 @@ "testharness" ], "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-6-expected.txt": [ - "e75f59104d9aa49f6cf5f4d113656fa38f968fab", + "469313f6d68a5328ec83335f69a5bd1cac926823", "support" ], "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-6.htm": [ @@ -262800,7 +263017,7 @@ "testharness" ], "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-7-expected.txt": [ - "d0610865822ccd7d21b19e2e21e04978feae6595", + "6af6fe3135fab7aa299f830268e1bacedeb019f0", "support" ], "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-7.htm": [ @@ -262808,7 +263025,7 @@ "testharness" ], "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-8-expected.txt": [ - "4580bea6fc0c86ba43680bb7fc984d47515b4457", + "e1b7af1e44bf22319ee29569fda4f6d45bd1f372", "support" ], "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-8.htm": [ @@ -262816,7 +263033,7 @@ "testharness" ], "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-9-expected.txt": [ - "2fc114b5581130eeaba6d9d5268d53ca2d4f761f", + "ce64db03dbfa90951fe93d656f81e9d29211d8fe", "support" ], "html/the-xhtml-syntax/parsing-xhtml-documents/xhtml-mathml-dtd-entity-9.htm": [ @@ -262936,7 +263153,7 @@ "testharness" ], "html/webappapis/idle-callbacks/callback-suspended-expected.txt": [ - "cc31200fbead20c404cf4a4eee28488be9c76e44", + "2bb7d18f4702830fa5ce951d7435474b2036aa52", "support" ], "html/webappapis/idle-callbacks/callback-suspended.html": [ @@ -263012,7 +263229,7 @@ "support" ], "html/webappapis/scripting/events/body-exposed-window-event-handlers-expected.txt": [ - "62de930b52f9cf25df82f295504cfdd3bd1f6118", + "afc0bee2409291e022491026454b663a9bd14b79", "support" ], "html/webappapis/scripting/events/body-exposed-window-event-handlers.html": [ @@ -263024,7 +263241,7 @@ "testharness" ], "html/webappapis/scripting/events/compile-event-handler-settings-objects-expected.txt": [ - "13a1074c8a857731e0c1a18814f2d27413f156b5", + "0b8e2609b2d3f5d8333b388f654cfa311e87a54d", "support" ], "html/webappapis/scripting/events/compile-event-handler-settings-objects.html": [ @@ -263040,7 +263257,7 @@ "manual" ], "html/webappapis/scripting/events/event-handler-all-global-events-expected.txt": [ - "cf1a1ea3cb36e64e26c986df9b3affd8dcb3ed88", + "888310c16254480d1300da99eb553237102dfb77", "support" ], "html/webappapis/scripting/events/event-handler-all-global-events.html": [ @@ -263048,7 +263265,7 @@ "testharness" ], "html/webappapis/scripting/events/event-handler-attributes-body-window-expected.txt": [ - "020a492dab6307d5fc62119650b797a17b5aa4b7", + "84ae2265f7cbab1b77ab1638a8313cd631d19277", "support" ], "html/webappapis/scripting/events/event-handler-attributes-body-window.html": [ @@ -263100,7 +263317,7 @@ "testharness" ], "html/webappapis/scripting/events/event-handler-processing-algorithm-error/window-synthetic-event-expected.txt": [ - "f28915679bf718c5e71d2f36cb0de26c04275564", + "cbd8d98612016e914932442be8f5ed8ca4775d62", "support" ], "html/webappapis/scripting/events/event-handler-processing-algorithm-error/window-synthetic-event.html": [ @@ -263132,7 +263349,7 @@ "testharness" ], "html/webappapis/scripting/events/event-handler-spec-example-expected.txt": [ - "3103a0e8e8ddc6143ba9c91aeabb63b4b2eedaad", + "5c80fc1039a0d358de9ff19abee53653fe00a818", "support" ], "html/webappapis/scripting/events/event-handler-spec-example.html": [ @@ -263144,7 +263361,7 @@ "testharness" ], "html/webappapis/scripting/events/inline-event-handler-ordering-expected.txt": [ - "07d43bac679645d8540e3d56e1d4a49c9a4cb1cf", + "84320a65ea1b3f90d90fefc12fb86c9f1e137e75", "support" ], "html/webappapis/scripting/events/inline-event-handler-ordering.html": [ @@ -263160,7 +263377,7 @@ "testharness" ], "html/webappapis/scripting/events/messageevent-constructor.https-expected.txt": [ - "366f77614a40444dafc4a50e3338d302e47177e1", + "716afef223119c82f9c61ff767c2f744a752b6ca", "support" ], "html/webappapis/scripting/events/messageevent-constructor.https.html": [ @@ -263168,7 +263385,7 @@ "testharness" ], "html/webappapis/scripting/events/onerroreventhandler-expected.txt": [ - "8dc4481e72c3ac5d57b5c9958abc0bb2cff586f6", + "a630e8cf118ae4c9e90401ab2054e060afcf873b", "support" ], "html/webappapis/scripting/events/onerroreventhandler-frame.html": [ @@ -263212,7 +263429,7 @@ "testharness" ], "html/webappapis/scripting/processing-model-2/body-onerror-compile-error-data-url-expected.txt": [ - "450e671b42c0c0f7a58e8441a0bc54341f23a23f", + "c591630d3ed31b166e1104e275238cf15081a101", "support" ], "html/webappapis/scripting/processing-model-2/body-onerror-compile-error-data-url.html": [ @@ -263220,7 +263437,7 @@ "testharness" ], "html/webappapis/scripting/processing-model-2/body-onerror-compile-error-expected.txt": [ - "76cb354f35ccc669c2bb0b84a6f54b51c26f0acf", + "03498c05ce14da3c9b5757fad632d93091c28b85", "support" ], "html/webappapis/scripting/processing-model-2/body-onerror-compile-error.html": [ @@ -263228,7 +263445,7 @@ "testharness" ], "html/webappapis/scripting/processing-model-2/body-onerror-runtime-error-expected.txt": [ - "9a2a7379bc6be1e5df2610b747975e2283ac2bb8", + "eef3c16cc03d9f86103a2e50769b802fbd6af9b0", "support" ], "html/webappapis/scripting/processing-model-2/body-onerror-runtime-error.html": [ @@ -263236,7 +263453,7 @@ "testharness" ], "html/webappapis/scripting/processing-model-2/compile-error-cross-origin-setInterval-expected.txt": [ - "5d14878304d2d9bb3fec867385762b123d58310e", + "24778b4bcc4c50494ad2b8c6ff068bc63b6bfc2f", "support" ], "html/webappapis/scripting/processing-model-2/compile-error-cross-origin-setInterval.html": [ @@ -263244,7 +263461,7 @@ "testharness" ], "html/webappapis/scripting/processing-model-2/compile-error-cross-origin-setTimeout-expected.txt": [ - "e0d7524e8d27f6619398b7eda27811d52de0e94f", + "8f0a99aa720e148c0ac805814838ea19361fc4d4", "support" ], "html/webappapis/scripting/processing-model-2/compile-error-cross-origin-setTimeout.html": [ @@ -263268,7 +263485,7 @@ "testharness" ], "html/webappapis/scripting/processing-model-2/compile-error-in-setInterval-expected.txt": [ - "0bd793a66719c6c3c288439a404b7580e192d32b", + "2c97d9997e0ccd470ea87e24f916de193397464b", "support" ], "html/webappapis/scripting/processing-model-2/compile-error-in-setInterval.html": [ @@ -263276,7 +263493,7 @@ "testharness" ], "html/webappapis/scripting/processing-model-2/compile-error-in-setTimeout-expected.txt": [ - "2b0b12fd8674fde2a0f8f6bf6371cc19b670663b", + "c8db58df073aacb2aec69fef7558d2bd4af0fcbe", "support" ], "html/webappapis/scripting/processing-model-2/compile-error-in-setTimeout.html": [ @@ -263284,7 +263501,7 @@ "testharness" ], "html/webappapis/scripting/processing-model-2/compile-error-same-origin-with-hash-expected.txt": [ - "ec0b36e05bc82195598edfb479eb9bdb2468f0db", + "e2e3abdc4b29a011fe552a491ebc2581b82c3624", "support" ], "html/webappapis/scripting/processing-model-2/compile-error-same-origin-with-hash.html": [ @@ -263328,7 +263545,7 @@ "support" ], "html/webappapis/scripting/processing-model-2/runtime-error-cross-origin-setInterval-expected.txt": [ - "88ea880dc12cf373e596195ba2ec7f43f39965c1", + "d39967dc90305357855e56786c582ffcf9a0686b", "support" ], "html/webappapis/scripting/processing-model-2/runtime-error-cross-origin-setInterval.html": [ @@ -263336,7 +263553,7 @@ "testharness" ], "html/webappapis/scripting/processing-model-2/runtime-error-cross-origin-setTimeout-expected.txt": [ - "6fafca5acb7fa2987e9056ed79e4be2103315f94", + "7cdbdf10d896cf520aacae0c4d77084a813de9f8", "support" ], "html/webappapis/scripting/processing-model-2/runtime-error-cross-origin-setTimeout.html": [ @@ -263360,7 +263577,7 @@ "testharness" ], "html/webappapis/scripting/processing-model-2/runtime-error-in-setInterval-expected.txt": [ - "1299074e49a8643dfcdf3c2e8b54c00045ae0a88", + "af0f52983a511628c96a39dbc9aa5cc4453ec0ef", "support" ], "html/webappapis/scripting/processing-model-2/runtime-error-in-setInterval.html": [ @@ -263368,7 +263585,7 @@ "testharness" ], "html/webappapis/scripting/processing-model-2/runtime-error-in-setTimeout-expected.txt": [ - "be303818b4c2e24b30fb023cdad1c7d0a3eb3591", + "c8a8b58cd4f06278a202934f61038f64c96bef67", "support" ], "html/webappapis/scripting/processing-model-2/runtime-error-in-setTimeout.html": [ @@ -263380,7 +263597,7 @@ "testharness" ], "html/webappapis/scripting/processing-model-2/runtime-error-same-origin-with-hash-expected.txt": [ - "66ef05eefeb5cb3facf4240a2342695ddfb27957", + "e6e52c56297fe7783da4aa6e36d27ddba147eb85", "support" ], "html/webappapis/scripting/processing-model-2/runtime-error-same-origin-with-hash.html": [ @@ -263476,7 +263693,7 @@ "testharness" ], "html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-1-expected.txt": [ - "a54f8c539455a54dc10b28bfee52b03394a2e3f7", + "3af8f1b853fd76f0515da10293a5dd0d9835afc0", "support" ], "html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-1.html": [ @@ -263484,7 +263701,7 @@ "testharness" ], "html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-2-expected.txt": [ - "a54f8c539455a54dc10b28bfee52b03394a2e3f7", + "3af8f1b853fd76f0515da10293a5dd0d9835afc0", "support" ], "html/webappapis/scripting/processing-model-2/window-onerror-with-cross-frame-event-listeners-2.html": [ @@ -263516,7 +263733,7 @@ "support" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/content-expected.txt": [ - "5d928a37e94c6960b94a2fe129a9c5c0fa441035", + "031f6e2a9a1ff214a514ff1d4abe7f24985d72dd", "support" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/content.html": [ @@ -263524,7 +263741,7 @@ "testharness" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/content/001-expected.txt": [ - "d7934021f179507aa05bd64ceba4610dfb8ae701", + "f935e8627e6241133ac02a4f1ec8681f34285fd8", "support" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/content/001.xhtml": [ @@ -263532,7 +263749,7 @@ "testharness" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/content/002-expected.txt": [ - "1dec2b245190a8172bf39a506215e0e7652e3f9d", + "5df701454a5859121795ad38da375512ce129ad4", "support" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/content/002.xhtml": [ @@ -263540,7 +263757,7 @@ "testharness" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/content/003-expected.txt": [ - "3e74648174456b7d46036a0763c465ac18500425", + "89cb9d46addf92d1e8651c642957ad5dc0c6a6a4", "support" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/content/003.xhtml": [ @@ -263548,7 +263765,7 @@ "testharness" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/content/004-expected.txt": [ - "0ba70bddd07849560f3a0dced7a47c4211dae88d", + "c0121eab89f4667b87f492c7914cd4aee4aab162", "support" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/content/004.xhtml": [ @@ -263556,7 +263773,7 @@ "testharness" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/content/005-expected.txt": [ - "253da8247d4cf6718effba8cc7bab1805d6d57a7", + "cdaed3596a0d6c1aa2c5c1cbd7eda6ad056ceb57", "support" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/content/005.xhtml": [ @@ -263564,7 +263781,7 @@ "testharness" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/content/006-expected.txt": [ - "d1b47ad5e9e1bc5086e8db590a5701165e533294", + "a0e47b2eae57ff9ca7fb130d044f0b6a30d485c8", "support" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/content/006.xhtml": [ @@ -263572,7 +263789,7 @@ "testharness" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/get-navigatorlanguage-manual-expected.txt": [ - "eb448e11e1d86001c7efe78cda1d1dc7aa38bdf7", + "2c82960b52d43829bbdadbd345e44e0c3e3bd694", "support" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/get-navigatorlanguage-manual.html": [ @@ -263592,7 +263809,7 @@ "testharness" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/navigatorlanguage-expected.txt": [ - "81791d48321a452679d5ec985991d5bf6c3b03b5", + "cbfee51f4f4a3faccea076f2d42c39ddb3fdfa0d", "support" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/navigatorlanguage.html": [ @@ -263608,7 +263825,7 @@ "testharness" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/002-expected.txt": [ - "9a5008e6da0ad3978183834d831a478d1585c6d9", + "15120770e530828a16af3e903ad05b8c214af303", "support" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/002.xhtml": [ @@ -263616,7 +263833,7 @@ "testharness" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/003-expected.txt": [ - "373568324a8a5af000dc2e261e3af49655005483", + "3445be723552b2a48f96979d0de0e944bdfb0b07", "support" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/003.xhtml": [ @@ -263628,7 +263845,7 @@ "testharness" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/005-expected.txt": [ - "419bc56980164a7f8967c478989562bc9cc4ecab", + "9acd7b7457b38d412548f18671e9bc249dd6d323", "support" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/005.xhtml": [ @@ -263636,7 +263853,7 @@ "testharness" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/006-expected.txt": [ - "e219a8f563294a761b133f43481f2ea601cd4b39", + "6429184ae338662d0df3b16fb5998d273f7164ae", "support" ], "html/webappapis/system-state-and-capabilities/the-navigator-object/protocol/006.xhtml": [ @@ -263752,7 +263969,7 @@ "testharness" ], "imagebitmap-renderingcontext/context-creation-with-alpha-expected.txt": [ - "9966ae33f5d4b9b52bfc6a3357e62a492075006d", + "18ced33fc4d542001ac5f058b6fc8a2defb1b0cd", "support" ], "imagebitmap-renderingcontext/context-creation-with-alpha.html": [ @@ -263775,6 +263992,10 @@ "72ad817fc93645a5d507fb6ce7b4892d9ee903e3", "testharness" ], + "imagebitmap/createImageBitmap-invalid-args.html": [ + "e839d537057d03f55108b871d2d32272cac7bc7f", + "testharness" + ], "images/OWNERS": [ "bdefdf4bd84d02d2bff2eb4f48f0d54e6155d248", "support" @@ -263940,7 +264161,7 @@ "support" ], "infrastructure/failing-test-expected.txt": [ - "936079eb1760f752fca0b0af39eecaf59d233c90", + "f37b9550e32efa55158f0598356054c0a9d0b012", "support" ], "infrastructure/failing-test.html": [ @@ -263960,7 +264181,7 @@ "support" ], "innerText/getter-expected.txt": [ - "c883b27659b61e660800dae75921f7c83332d766", + "d1d69bf4dee3976a04c2c990ddcd0d481d0ca038", "support" ], "innerText/getter-tests.js": [ @@ -263972,7 +264193,7 @@ "testharness" ], "innerText/setter-expected.txt": [ - "d7fd30966899ec3f477c34e25d7cc236eacd5c35", + "59cbbacf56a8b10ed71657a828b2722b17bcb576", "support" ], "innerText/setter-tests.js": [ @@ -264172,7 +264393,7 @@ "support" ], "keyboard-lock/idlharness.https-expected.txt": [ - "47d938943455f98a229a6b3b66f81abc35eb6dc0", + "3a14dd8adfa374d5b0b6e3bf14bc645296cf14ad", "support" ], "keyboard-lock/idlharness.https.html": [ @@ -264184,7 +264405,7 @@ "testharness" ], "keyboard-lock/navigator-requestKeyboardLock-two-parallel-requests.https-expected.txt": [ - "723e8f552f3dd5279429b9b9c7114d77901886e2", + "35c40ad5b0699976d56fee1ae34c5b0d8577acde", "support" ], "keyboard-lock/navigator-requestKeyboardLock-two-parallel-requests.https.html": [ @@ -264280,7 +264501,7 @@ "testharness" ], "media-capabilities/idlharness-expected.txt": [ - "27f2c3b9e1a399f723ac51b9f81401ca66a8a389", + "6df04b9ea8224deefce2b1fe6d24740c102fae30", "support" ], "media-capabilities/idlharness.html": [ @@ -264292,11 +264513,11 @@ "support" ], "media-source/SourceBuffer-abort-expected.txt": [ - "19f836bf97435cd08a67cb3e4030cf74a5737945", + "9475c94eff40a5e88b1554b95e9b0e1f21583fad", "support" ], "media-source/SourceBuffer-abort-readyState-expected.txt": [ - "7be56bdd4541c4e8132b034101d0e21409dd3c50", + "d7ef59213bd963c8cd6796032c3a06e6315515ad", "support" ], "media-source/SourceBuffer-abort-readyState.html": [ @@ -264304,7 +264525,7 @@ "testharness" ], "media-source/SourceBuffer-abort-removed-expected.txt": [ - "6a6bd77c4bf2d2b8d7f752e48e1260c377860ed5", + "e5d5b5efaa0f53afba3c75ac24da0f1d67878e28", "support" ], "media-source/SourceBuffer-abort-removed.html": [ @@ -264312,7 +264533,7 @@ "testharness" ], "media-source/SourceBuffer-abort-updating-expected.txt": [ - "26004885be4326d37f93cab398fb89c8691aa337", + "d41c32ba043cc9657c0e0be2644ca214d6d0e9ab", "support" ], "media-source/SourceBuffer-abort-updating.html": [ @@ -264328,7 +264549,7 @@ "testharness" ], "media-source/URL-createObjectURL-revoke-expected.txt": [ - "6d0ae28180dc0836175582bd078edff28a1b1ccd", + "e7d29218cf92109136728975724482f39c0176a5", "support" ], "media-source/URL-createObjectURL-revoke.html": [ @@ -264344,7 +264565,7 @@ "support" ], "media-source/interfaces-expected.txt": [ - "40b07412dc1a50737ed9d1887e7ada88d321b39d", + "733ddd418ea91cbfa7e52e32cb080c5845e7f1a8", "support" ], "media-source/interfaces.html": [ @@ -264360,11 +264581,11 @@ "testharness" ], "media-source/mediasource-addsourcebuffer-expected.txt": [ - "b2d8b229a4618c0939e33e51eea00e44998856bc", + "28282b577b0f619918f17f6789d2f5b5f3886be1", "support" ], "media-source/mediasource-addsourcebuffer-mode-expected.txt": [ - "0576997a0a4c25e76e015715ad5d1842cfa2e0f0", + "394c07a4b452cba40571a630423ca12c47072591", "support" ], "media-source/mediasource-addsourcebuffer-mode.html": [ @@ -264376,7 +264597,7 @@ "testharness" ], "media-source/mediasource-append-buffer-expected.txt": [ - "526c827aa5e5d8985048836ba785db4e7e2cf499", + "80eb8386f19088bf93693c3bef7b6c5ffb28dae1", "support" ], "media-source/mediasource-append-buffer.html": [ @@ -264400,7 +264621,7 @@ "testharness" ], "media-source/mediasource-buffered-expected.txt": [ - "6d5d3c16e4bd9b383e3c6fdc873984a5e8f6f664", + "c0570d17c28647df6710472a3ec761537f534b1a", "support" ], "media-source/mediasource-buffered.html": [ @@ -264412,7 +264633,7 @@ "testharness" ], "media-source/mediasource-config-change-mp4-a-bitrate-expected.txt": [ - "49f778ae86d00a4fd4216eaa9f5e393dd7dc54f2", + "6a01602c4ac334b57849d8952e0c3f850db9d50b", "support" ], "media-source/mediasource-config-change-mp4-a-bitrate.html": [ @@ -264420,7 +264641,7 @@ "testharness" ], "media-source/mediasource-config-change-mp4-av-audio-bitrate-expected.txt": [ - "970ddfd3e489861c0aae7ebf2ac77e8a57d36bbe", + "f6061639a19664423519b3ea624bbf2c18eb7fff", "support" ], "media-source/mediasource-config-change-mp4-av-audio-bitrate.html": [ @@ -264428,7 +264649,7 @@ "testharness" ], "media-source/mediasource-config-change-mp4-av-framesize-expected.txt": [ - "3ddbb9883f685321fa14469183f95931bc8b949a", + "1bfa418d6763ce5f38671a4c42025600e49d0605", "support" ], "media-source/mediasource-config-change-mp4-av-framesize.html": [ @@ -264436,7 +264657,7 @@ "testharness" ], "media-source/mediasource-config-change-mp4-av-video-bitrate-expected.txt": [ - "2add43cfe603a87969725898afe5391ee4ea6f7f", + "6d8014a07fbc9d17ad58bc92f98972b16f1d1b89", "support" ], "media-source/mediasource-config-change-mp4-av-video-bitrate.html": [ @@ -264444,7 +264665,7 @@ "testharness" ], "media-source/mediasource-config-change-mp4-v-bitrate-expected.txt": [ - "a19328a41217d37cfe39fea604156a5cda57210e", + "b646c2b47845b2ebb60a61ba37e2ddadcd0c5822", "support" ], "media-source/mediasource-config-change-mp4-v-bitrate.html": [ @@ -264452,7 +264673,7 @@ "testharness" ], "media-source/mediasource-config-change-mp4-v-framerate-expected.txt": [ - "a6ee6cade8a34cb619a0ccc0a189c14df7fd6311", + "92eacb362072def5690655fbbf4dcdfa662f9236", "support" ], "media-source/mediasource-config-change-mp4-v-framerate.html": [ @@ -264460,7 +264681,7 @@ "testharness" ], "media-source/mediasource-config-change-mp4-v-framesize-expected.txt": [ - "e7bfa32da11daf66277a675051cdb76a68ce2efd", + "a1e70909322127fed25b59a4ec16e73c30e9182e", "support" ], "media-source/mediasource-config-change-mp4-v-framesize.html": [ @@ -264508,7 +264729,7 @@ "testharness" ], "media-source/mediasource-duration-expected.txt": [ - "9f34496d80275e10163a949b12780a8c6e0f9b2d", + "2916301ec4c3d186da3b82bf9b1e51afe9f62f0e", "support" ], "media-source/mediasource-duration.html": [ @@ -264516,7 +264737,7 @@ "testharness" ], "media-source/mediasource-endofstream-expected.txt": [ - "17f5e8fd6fd377b5130af0823090f3e8800fb7c7", + "1ae24ec860a420533d8791ecf298de09fdcff4cd", "support" ], "media-source/mediasource-endofstream-invaliderror.html": [ @@ -264528,7 +264749,7 @@ "testharness" ], "media-source/mediasource-errors-expected.txt": [ - "36daf478f3f99a99df24f6a3c6c0aeb78a54c29e", + "0862c23dd297aca78ebcf2b5523115c3d0aaab8f", "support" ], "media-source/mediasource-errors.html": [ @@ -264540,7 +264761,7 @@ "testharness" ], "media-source/mediasource-is-type-supported-expected.txt": [ - "3af57d553004b6e9730d770c5ec289094a580534", + "95e09b8505e95d9fd2e7473cdb87e90cdb21044a", "support" ], "media-source/mediasource-is-type-supported.html": [ @@ -264572,7 +264793,7 @@ "testharness" ], "media-source/mediasource-remove-expected.txt": [ - "fe36082dab84cbe785f1089c1af4b26dc7f1b7a5", + "d77ce457c3ec22c6a32e75cf3b5f29d310f8e5fc", "support" ], "media-source/mediasource-remove.html": [ @@ -264596,7 +264817,7 @@ "testharness" ], "media-source/mediasource-sequencemode-append-buffer-expected.txt": [ - "2217cec6f15ef2a97d9132d534059956cae1844e", + "8c68ef37f9bb4466bedff43c3f32898ddf5f5e2e", "support" ], "media-source/mediasource-sequencemode-append-buffer.html": [ @@ -264604,7 +264825,7 @@ "testharness" ], "media-source/mediasource-sourcebuffer-mode-timestamps-expected.txt": [ - "230f91538fdcc4f31fa4247acf9602f503788819", + "93f0fbb6b390cec6ee74bdf318cf34f10c44457b", "support" ], "media-source/mediasource-sourcebuffer-mode-timestamps.html": [ @@ -264900,7 +265121,7 @@ "testharness" ], "mediacapture-fromelement/idlharness-expected.txt": [ - "c40a2b1d040d63881489b806dbc05fd69d8b970f", + "4c0709d303413cf199cb48033d9b74ea576b6d03", "support" ], "mediacapture-fromelement/idlharness.html": [ @@ -264908,7 +265129,7 @@ "testharness" ], "mediacapture-image/idlharness-expected.txt": [ - "7eaa5e273426a8d9b3472cb228091ed90f11a77e", + "7e12f1328b97f124aafb2944ea846bc6fc9007bb", "support" ], "mediacapture-image/idlharness.html": [ @@ -264924,7 +265145,7 @@ "support" ], "mediacapture-record/idlharness-expected.txt": [ - "a81911676e4584e569303a050b4474288836f588", + "19ff93101c10e158fe41da3ce25af2d902c552b5", "support" ], "mediacapture-record/idlharness.html": [ @@ -264936,7 +265157,7 @@ "testharness" ], "mediacapture-streams/GUM-deny.https-expected.txt": [ - "a139d610439c4e0bb551e8b045841b33d6301126", + "9fbc9a28c4ae86d46ae5b86af058de01415986b4", "support" ], "mediacapture-streams/GUM-deny.https.html": [ @@ -264944,7 +265165,7 @@ "testharness" ], "mediacapture-streams/GUM-empty-option-param.https-expected.txt": [ - "8f79868c0b4c44940c4cc094ba09dd30d0b6db64", + "42dc0cc93adaf6f61f3f017b56a95f4e26d3dc3d", "support" ], "mediacapture-streams/GUM-empty-option-param.https.html": [ @@ -264952,7 +265173,7 @@ "testharness" ], "mediacapture-streams/GUM-impossible-constraint.https-expected.txt": [ - "83ef33025b6b7776852d8501718b670185056542", + "67a17825cd8f9e4fe90009f4b9c2a0ee2e1e80e0", "support" ], "mediacapture-streams/GUM-impossible-constraint.https.html": [ @@ -264968,7 +265189,7 @@ "testharness" ], "mediacapture-streams/GUM-unknownkey-option-param.https-expected.txt": [ - "9a5065e1618f5d521471588f2c663964fcc4eb7c", + "68600831ba150bbd234d9c49bf7595c0f6735661", "support" ], "mediacapture-streams/GUM-unknownkey-option-param.https.html": [ @@ -264976,7 +265197,7 @@ "testharness" ], "mediacapture-streams/MediaDevices-IDL-all-expected.txt": [ - "1cdc2218b94bba210533b4b4bc4821691fb7818b", + "17dbe29cb43a391c8d254c4a21788fb292b5e3b5", "support" ], "mediacapture-streams/MediaDevices-IDL-all.html": [ @@ -264984,7 +265205,7 @@ "testharness" ], "mediacapture-streams/MediaDevices-IDL-enumerateDevices-expected.txt": [ - "4ab4fb05ead702f828be7eb05b144f6ef917437f", + "5ab748f27a30f4609178cf5f0b9a26ae202aba3d", "support" ], "mediacapture-streams/MediaDevices-IDL-enumerateDevices.html": [ @@ -265000,7 +265221,7 @@ "testharness" ], "mediacapture-streams/MediaStream-MediaElement-preload-none.https-expected.txt": [ - "14e91f187214e8302a40719cb4ef2f69e1b1f59d", + "5d04297c55b716367991e445f2af1c655b7d1ba1", "support" ], "mediacapture-streams/MediaStream-MediaElement-preload-none.https.html": [ @@ -265008,7 +265229,7 @@ "testharness" ], "mediacapture-streams/MediaStream-MediaElement-srcObject.https-expected.txt": [ - "06ea90d42bbf5737624f3582a8726301e938540b", + "80484039ffd2e92f197549eb9f2e68cb4fafe396", "support" ], "mediacapture-streams/MediaStream-MediaElement-srcObject.https.html": [ @@ -265056,7 +265277,7 @@ "testharness" ], "mediacapture-streams/MediaStreamTrack-MediaElement-disabled-video-is-black.https-expected.txt": [ - "4034d28ea06d606101c2f0be58bcc312075da025", + "29e4d22a58c6bb03990269d41a8e8d5309ba956f", "support" ], "mediacapture-streams/MediaStreamTrack-MediaElement-disabled-video-is-black.https.html": [ @@ -265076,7 +265297,7 @@ "testharness" ], "mediacapture-streams/MediaStreamTrack-init.https-expected.txt": [ - "13316326e8513f117457b3be5c383e2f01df9c2e", + "c0c1e42abfcb3a0d12339a723fca40c24e93d4a2", "support" ], "mediacapture-streams/MediaStreamTrack-init.https.html": [ @@ -265100,7 +265321,7 @@ "support" ], "mediasession/idlharness-expected.txt": [ - "b10b66066037ac11bcae9dfb437a5d25b167f9ac", + "8ecfa8ac1128a2baec739088d1a65fab5e36b33f", "support" ], "mediasession/idlharness.html": [ @@ -265124,7 +265345,7 @@ "support" ], "mixed-content/allowed/http-csp/same-host-https/audio-tag/top-level/keep-scheme-redirect/allowed.https-expected.txt": [ - "90380d95ffc250f2bcb86a71825a532f9ea3b40a", + "d1176cd755ef3a39650dabc42a30a9f094bdbf7f", "support" ], "mixed-content/allowed/http-csp/same-host-https/audio-tag/top-level/keep-scheme-redirect/allowed.https.html": [ @@ -265136,7 +265357,7 @@ "support" ], "mixed-content/allowed/http-csp/same-host-https/audio-tag/top-level/no-redirect/allowed.https-expected.txt": [ - "0da07dc88c186b2f3a970e63af82f8f3caeb5e3c", + "9573c8c5c288d40f495076204c1fb0155815fcb7", "support" ], "mixed-content/allowed/http-csp/same-host-https/audio-tag/top-level/no-redirect/allowed.https.html": [ @@ -265292,7 +265513,7 @@ "support" ], "mixed-content/allowed/http-csp/same-host-https/video-tag/top-level/keep-scheme-redirect/allowed.https-expected.txt": [ - "8c5eb00f4e83bcfd2c1cc9ff31e022f2db38be6e", + "b644bd8c138dc432a06f438164b832a3bb37f324", "support" ], "mixed-content/allowed/http-csp/same-host-https/video-tag/top-level/keep-scheme-redirect/allowed.https.html": [ @@ -265304,7 +265525,7 @@ "support" ], "mixed-content/allowed/http-csp/same-host-https/video-tag/top-level/no-redirect/allowed.https-expected.txt": [ - "1a6028563007684c78190ddc8481ca2898923723", + "abe62f3e43de93ad4f21a043703c2ba861e3e163", "support" ], "mixed-content/allowed/http-csp/same-host-https/video-tag/top-level/no-redirect/allowed.https.html": [ @@ -265364,7 +265585,7 @@ "support" ], "mixed-content/allowed/meta-csp/same-host-https/audio-tag/top-level/no-redirect/allowed.https-expected.txt": [ - "c8bbd81706e37d501c775412c9a152136138389c", + "7052a746b9baa6d03acbf1096bc5549826731492", "support" ], "mixed-content/allowed/meta-csp/same-host-https/audio-tag/top-level/no-redirect/allowed.https.html": [ @@ -265408,7 +265629,7 @@ "testharness" ], "mixed-content/allowed/meta-csp/same-host-https/video-tag/top-level/no-redirect/allowed.https-expected.txt": [ - "3af9b65bfe40a18917f506bd97740bef6fe4112b", + "07f181f996cb192a8f8e0cacb57a314f2401a6ee", "support" ], "mixed-content/allowed/meta-csp/same-host-https/video-tag/top-level/no-redirect/allowed.https.html": [ @@ -265428,7 +265649,7 @@ "testharness" ], "mixed-content/allowed/no-opt-in/same-host-https/audio-tag/top-level/keep-scheme-redirect/allowed.https-expected.txt": [ - "1519271db01831f1d6d026b26e8d486243588479", + "201fa50df8fa05a5123b67e4e3ea92638c45eed1", "support" ], "mixed-content/allowed/no-opt-in/same-host-https/audio-tag/top-level/keep-scheme-redirect/allowed.https.html": [ @@ -265436,7 +265657,7 @@ "testharness" ], "mixed-content/allowed/no-opt-in/same-host-https/audio-tag/top-level/no-redirect/allowed.https-expected.txt": [ - "2d20686592f6a6c7ebe1b22ce85135e85054d7e9", + "b31fceab46bfb7cee01763f9e1b1b2b54e20e39e", "support" ], "mixed-content/allowed/no-opt-in/same-host-https/audio-tag/top-level/no-redirect/allowed.https.html": [ @@ -265516,7 +265737,7 @@ "testharness" ], "mixed-content/allowed/no-opt-in/same-host-https/video-tag/top-level/keep-scheme-redirect/allowed.https-expected.txt": [ - "e02952e8c0326b7c9969ad0b88b8e857859616ea", + "3cd9f9ad5bf90af3b098fe76b0cf984ce4306135", "support" ], "mixed-content/allowed/no-opt-in/same-host-https/video-tag/top-level/keep-scheme-redirect/allowed.https.html": [ @@ -265524,7 +265745,7 @@ "testharness" ], "mixed-content/allowed/no-opt-in/same-host-https/video-tag/top-level/no-redirect/allowed.https-expected.txt": [ - "06c4336dfa0266bcf24b50f9af7764a699800414", + "afaf28af4e03fb64a81fa50fd9e3b3b9fe0bd041", "support" ], "mixed-content/allowed/no-opt-in/same-host-https/video-tag/top-level/no-redirect/allowed.https.html": [ @@ -266424,7 +266645,7 @@ "support" ], "mixed-content/imageset.https.sub-expected.txt": [ - "2f7ce080c9a4cff851f8ebaa425805fb83652a06", + "8950550dcaba25170957290e529a97bda64aa2ac", "support" ], "mixed-content/imageset.https.sub.html": [ @@ -266656,7 +266877,7 @@ "testharness" ], "mixed-content/optionally-blockable/no-opt-in/cross-origin-http/audio-tag/top-level/keep-scheme-redirect/no-opt-in-allows.https-expected.txt": [ - "5982f747849b2a9e65e8eac2c1920f6b86e52806", + "6d24a2b0415b90e8d460c6300167a93107e1642d", "support" ], "mixed-content/optionally-blockable/no-opt-in/cross-origin-http/audio-tag/top-level/keep-scheme-redirect/no-opt-in-allows.https.html": [ @@ -266664,7 +266885,7 @@ "testharness" ], "mixed-content/optionally-blockable/no-opt-in/cross-origin-http/audio-tag/top-level/no-redirect/no-opt-in-allows.https-expected.txt": [ - "1960c3625fd0aa1e5a9dfb9df00d5f250931c7bf", + "8003a3844b3305d0692777e7b6f7fe2e3db49a4f", "support" ], "mixed-content/optionally-blockable/no-opt-in/cross-origin-http/audio-tag/top-level/no-redirect/no-opt-in-allows.https.html": [ @@ -266672,7 +266893,7 @@ "testharness" ], "mixed-content/optionally-blockable/no-opt-in/cross-origin-http/audio-tag/top-level/swap-scheme-redirect/no-opt-in-allows.https-expected.txt": [ - "ae2066d3f479d87f6a3883fca50c62741c80880c", + "2eed55e14b912310e07c860d45928e8de590b78c", "support" ], "mixed-content/optionally-blockable/no-opt-in/cross-origin-http/audio-tag/top-level/swap-scheme-redirect/no-opt-in-allows.https.html": [ @@ -266704,7 +266925,7 @@ "testharness" ], "mixed-content/optionally-blockable/no-opt-in/cross-origin-http/video-tag/top-level/keep-scheme-redirect/no-opt-in-allows.https-expected.txt": [ - "90be3eed734c8d08d0b88270473cd8249dfef3ff", + "b7e378c4ce5b3ac3d478dc071d86c3d6f7799197", "support" ], "mixed-content/optionally-blockable/no-opt-in/cross-origin-http/video-tag/top-level/keep-scheme-redirect/no-opt-in-allows.https.html": [ @@ -266712,7 +266933,7 @@ "testharness" ], "mixed-content/optionally-blockable/no-opt-in/cross-origin-http/video-tag/top-level/no-redirect/no-opt-in-allows.https-expected.txt": [ - "ed3520fd8f5382e538408fb020cc4a5b6319b005", + "1f2f84a6c686ef548c963112545042ddc478e065", "support" ], "mixed-content/optionally-blockable/no-opt-in/cross-origin-http/video-tag/top-level/no-redirect/no-opt-in-allows.https.html": [ @@ -266720,7 +266941,7 @@ "testharness" ], "mixed-content/optionally-blockable/no-opt-in/cross-origin-http/video-tag/top-level/swap-scheme-redirect/no-opt-in-allows.https-expected.txt": [ - "4f3dd5bfc7ff73c75c4cce54eb3aa81892deb6c3", + "c19056bb71621b635f68ba0b5723764b69beb84f", "support" ], "mixed-content/optionally-blockable/no-opt-in/cross-origin-http/video-tag/top-level/swap-scheme-redirect/no-opt-in-allows.https.html": [ @@ -266728,7 +266949,7 @@ "testharness" ], "mixed-content/optionally-blockable/no-opt-in/same-host-http/audio-tag/top-level/keep-scheme-redirect/no-opt-in-allows.https-expected.txt": [ - "c0a9ccb24883f298b0c20dd4ffc680739c9b7dec", + "d6acdaad488f5ef37365a4e93b5c11390ba1106a", "support" ], "mixed-content/optionally-blockable/no-opt-in/same-host-http/audio-tag/top-level/keep-scheme-redirect/no-opt-in-allows.https.html": [ @@ -266736,7 +266957,7 @@ "testharness" ], "mixed-content/optionally-blockable/no-opt-in/same-host-http/audio-tag/top-level/no-redirect/no-opt-in-allows.https-expected.txt": [ - "b0e86c22beb7578dacb8134c29d2f5e778e5f005", + "b4581ee03417916d21bcf14a091702b733b8ca9d", "support" ], "mixed-content/optionally-blockable/no-opt-in/same-host-http/audio-tag/top-level/no-redirect/no-opt-in-allows.https.html": [ @@ -266744,7 +266965,7 @@ "testharness" ], "mixed-content/optionally-blockable/no-opt-in/same-host-http/audio-tag/top-level/swap-scheme-redirect/no-opt-in-allows.https-expected.txt": [ - "d26609e0895dfc921af2a897999acd35153a0166", + "38a10d6a5c9722329722954de70d5b30e3e1c77d", "support" ], "mixed-content/optionally-blockable/no-opt-in/same-host-http/audio-tag/top-level/swap-scheme-redirect/no-opt-in-allows.https.html": [ @@ -266776,7 +266997,7 @@ "testharness" ], "mixed-content/optionally-blockable/no-opt-in/same-host-http/video-tag/top-level/keep-scheme-redirect/no-opt-in-allows.https-expected.txt": [ - "dd79d44bf5bf864deadf1dd19cced198d269b3af", + "6752605a52bec9d60ba0b992f59a3f04b040c078", "support" ], "mixed-content/optionally-blockable/no-opt-in/same-host-http/video-tag/top-level/keep-scheme-redirect/no-opt-in-allows.https.html": [ @@ -266784,7 +267005,7 @@ "testharness" ], "mixed-content/optionally-blockable/no-opt-in/same-host-http/video-tag/top-level/no-redirect/no-opt-in-allows.https-expected.txt": [ - "5005b70fa14d38cb1ada1239eca1f5859cc4aa1c", + "6007a23abfb16b37f44dda3eaf38a4d5a6196004", "support" ], "mixed-content/optionally-blockable/no-opt-in/same-host-http/video-tag/top-level/no-redirect/no-opt-in-allows.https.html": [ @@ -266792,7 +267013,7 @@ "testharness" ], "mixed-content/optionally-blockable/no-opt-in/same-host-http/video-tag/top-level/swap-scheme-redirect/no-opt-in-allows.https-expected.txt": [ - "4f6fb0a77a62395baa757bcf1a4bf694e4d61ac0", + "f22e5c89267f8ff434e906236fedb56ab3815a1c", "support" ], "mixed-content/optionally-blockable/no-opt-in/same-host-http/video-tag/top-level/swap-scheme-redirect/no-opt-in-allows.https.html": [ @@ -266820,7 +267041,7 @@ "support" ], "navigation-timing/nav2_idlharness-expected.txt": [ - "e917f77c64518a9fe633590941e455b3ae2b1437", + "70c62accc03cb20b01ec3630e211c365afc67bab", "support" ], "navigation-timing/nav2_idlharness.html": [ @@ -267100,7 +267321,7 @@ "support" ], "notifications/shownotification-resolve-manual.https-expected.txt": [ - "c7b02742b160c04be19e89fe7bdba5cffce60a7b", + "cbb291c16dc828c2815ed99674cec35e6a560363", "support" ], "notifications/shownotification-resolve-manual.https.html": [ @@ -268424,7 +268645,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1-expected.txt": [ - "9df648165732ee90e18c2001f120c23fbe7d0ff6", + "600f22a4fe4ec4f048ea2846639f5b96299fa583", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1.html": [ @@ -268436,7 +268657,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2-expected.txt": [ - "89a87f6d62afa0850b4a6db73d53db457f9064e0", + "2b1174c4e77cbf9ab13045819d0823c325cab3cb", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2.html": [ @@ -268448,7 +268669,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3-expected.txt": [ - "496344f555dda971d7c50a345b14191604e3af0c", + "ac5f7b022fba4f528c72d285e312164e98ce15c3", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3.html": [ @@ -268460,7 +268681,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4-expected.txt": [ - "4ce4af0272e248d545b29dcdd11a23986cc37440", + "1f9ab3bea0878d9ba22d1e39fce6d9189fea9f56", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4.html": [ @@ -268472,7 +268693,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5-expected.txt": [ - "68015fa95a93bc4c7f47b7f4b9551a6425c71000", + "4a49c4c22a3825f2f480313d6f436aa9852f787f", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5.html": [ @@ -268484,7 +268705,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6-expected.txt": [ - "a90d4da37e17bcaf36e22c3cc7b5322ebbe52aa3", + "787601a502dc19d020cc6517cfd36f73bdb4a8f3", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6.html": [ @@ -268496,7 +268717,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7-expected.txt": [ - "2c306c92d2d8cc1a157b91bbaddf59bbcfed1989", + "b8da758b32285b032a19d296fdd572daa6c4ef12", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7.html": [ @@ -268508,7 +268729,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8-expected.txt": [ - "91ce078c6a4c5305072c0a14846ddf9652ea6a7f", + "5b03d18c50bc5e67b05518312e0dbeeaa3176c8b", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8.html": [ @@ -268520,7 +268741,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9-expected.txt": [ - "1e335cf98e1f8352c484bd2bb713ab7d70e8f55b", + "2d988d6a43d4b78294e0ae2f8e4d52aec5539d97", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9.html": [ @@ -268532,7 +268753,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1-expected.txt": [ - "25708b1915e46a5e3eefbbd9c173f863cd18fc38", + "0d95d3ffb8a291f38b6119294c9cf0c0cbd572f0", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1.html": [ @@ -268544,7 +268765,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2-expected.txt": [ - "9489084759c895334b4959c6c87acdd79b757fdd", + "21c08b1ae0336b659bfc2e5c0b49db2e4d67658b", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2.html": [ @@ -268556,7 +268777,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3-expected.txt": [ - "d1e579dce277bc417fc7c621f78499cabfd8c2aa", + "f8ea3f899dc9b79c656d0f52846da9c5ea4e0e60", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3.html": [ @@ -268568,7 +268789,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4-expected.txt": [ - "c74a7eb214361f75a420f4787bee7f594658f279", + "c05c37787b332b2b8693580d54abdab38dec843a", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4.html": [ @@ -268580,7 +268801,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5-expected.txt": [ - "69e9cc4a7e778271d92de8b90b494cca909b49b6", + "5c41536d83e45f6c4cdc27011b7172636e5bb541", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5.html": [ @@ -268592,7 +268813,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6-expected.txt": [ - "3d7cda88150129b7d1fe1ac79957f927da0ca215", + "720a25957d0ccf99c7869b1ad060bcf274f7deb9", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6.html": [ @@ -268604,7 +268825,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7-expected.txt": [ - "f2985c2877539dbb5b2d43cc170fef1da746df75", + "59f09ea7ee8fffbe8b25a05e70b989e4f0b8a697", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7.html": [ @@ -268616,7 +268837,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8-expected.txt": [ - "6f9816f8ad0b911ce076004baef70c9cf87a8b2d", + "0fdbb3dd241a41d189f34cc956048b4f5fefbba6", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8.html": [ @@ -268628,7 +268849,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9-expected.txt": [ - "fc44c860dea8f879118853848085d515a3abd45e", + "f1ba865182b7bdf88ddbaa5de25307ddba4dca4c", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9.html": [ @@ -268640,7 +268861,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1-expected.txt": [ - "cc2e16c5d181546fa2a4c61425c57113e4732e7d", + "0e083c58b1a0088e37b496c9f5e063241ef02b4a", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1.html": [ @@ -268652,7 +268873,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2-expected.txt": [ - "8f28b29b5613ab0aee905395ccca88438349de6d", + "9555262b4295281c9b915a911ed1720447525223", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2.html": [ @@ -268664,7 +268885,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3-expected.txt": [ - "fe6d3dd0c88a2ce5e48706af06d3611feb7ac879", + "cf336ad3f51202b4892fda442dc8729f4717e6ea", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3.html": [ @@ -268676,7 +268897,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4-expected.txt": [ - "acd20faf3fbb8619b46722ead12b43126e631c78", + "ba31fd624d7443a002f270096620a40f046d757e", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4.html": [ @@ -268688,7 +268909,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5-expected.txt": [ - "8b1c1abbba25658afb0f45c253d01b44cc8b2fb9", + "8309c86374c8c72ae1312335d18a7edd8e118741", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5.html": [ @@ -268700,7 +268921,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6-expected.txt": [ - "4cd5bc9debf8e769f5534df3d14c8950b9021594", + "364b511afd8119243295d4b036af6d0cc3504a4b", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6.html": [ @@ -268712,7 +268933,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1-expected.txt": [ - "7a2084e0470057cacca6785f0cc851fb455c4511", + "6257c6e741292deef81b83422842b02b181afa02", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1.html": [ @@ -268732,7 +268953,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3-expected.txt": [ - "d056e3152339f2f5efa7589ed8803eabc24fc424", + "78e8632e7195ccb003fd1b8e2961375fc8e577ef", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3.html": [ @@ -268744,7 +268965,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4-expected.txt": [ - "f177029d84183f83aaa8250f59da194c7e6a4d30", + "2fe462e69ada03d1895076deacac8545c280b95b", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4.html": [ @@ -268756,7 +268977,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5-expected.txt": [ - "293a35b75ef4448549d76c23256676796768e11c", + "449bb848c67e22bce0054205cad3a5705854151e", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5.html": [ @@ -268768,7 +268989,7 @@ "testharness" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6-expected.txt": [ - "c4370bf78861b37027b2de85b17f08d2d05cf1dc", + "1152cc34f0bae1c91be450cf18fb1959320e87ed", "support" ], "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6.html": [ @@ -271392,7 +271613,7 @@ "testharness" ], "offscreen-canvas/path-objects/2d.path.stroke.prune.arc-expected.txt": [ - "73270e1c7dafdd7791edab4852329d8cd69d8cdb", + "07ccf9b7e4fd440eaf1ffe2d2dca10566afee0a4", "support" ], "offscreen-canvas/path-objects/2d.path.stroke.prune.arc.html": [ @@ -271404,7 +271625,7 @@ "testharness" ], "offscreen-canvas/path-objects/2d.path.stroke.prune.closed-expected.txt": [ - "af16d21cac7455f424b7ee2cc449a71c6eb56362", + "2825218048080962ab833f9d2729bb8dc7edf212", "support" ], "offscreen-canvas/path-objects/2d.path.stroke.prune.closed.html": [ @@ -271424,7 +271645,7 @@ "testharness" ], "offscreen-canvas/path-objects/2d.path.stroke.prune.curve-expected.txt": [ - "3cabe136099a10a24b7e1abb1d0e555d5e2dcabd", + "b07266340fa1e4c607bc7fae07782bf419762dc0", "support" ], "offscreen-canvas/path-objects/2d.path.stroke.prune.curve.html": [ @@ -271436,7 +271657,7 @@ "testharness" ], "offscreen-canvas/path-objects/2d.path.stroke.prune.line-expected.txt": [ - "e8fb9e2eb7386bc5a494a238a6f2fcb8efc6a7cc", + "522d789edc04e41bf04083c04d5e0eb8a045c947", "support" ], "offscreen-canvas/path-objects/2d.path.stroke.prune.line.html": [ @@ -271448,7 +271669,7 @@ "testharness" ], "offscreen-canvas/path-objects/2d.path.stroke.prune.rect-expected.txt": [ - "87e654eb9270daa123d83be935ac7e11bc75be7b", + "3c57ea5971b80297130e5154a8de36dd4efc9b7d", "support" ], "offscreen-canvas/path-objects/2d.path.stroke.prune.rect.html": [ @@ -271580,7 +271801,7 @@ "testharness" ], "offscreen-canvas/pixel-manipulation/2d.imageData.create2.nonfinite-expected.txt": [ - "d34a41f92e79be55b110472a264dada6d184b757", + "0ebe256cd85e22c2b2ed08634ad5f174198230cb", "support" ], "offscreen-canvas/pixel-manipulation/2d.imageData.create2.nonfinite.html": [ @@ -271632,7 +271853,7 @@ "testharness" ], "offscreen-canvas/pixel-manipulation/2d.imageData.get.nonfinite-expected.txt": [ - "e5a5f047ae82b6b4ab7dbfd11de379743568c8bc", + "f08b4562cbed01eb23853dc875a6705c288b97f5", "support" ], "offscreen-canvas/pixel-manipulation/2d.imageData.get.nonfinite.html": [ @@ -271716,7 +271937,7 @@ "testharness" ], "offscreen-canvas/pixel-manipulation/2d.imageData.get.tiny-expected.txt": [ - "85e16c702cf19813e5d114bb64cbd448278f83ee", + "2abe6ad47a84d536f7c80652dd97af6766ad5cde", "support" ], "offscreen-canvas/pixel-manipulation/2d.imageData.get.tiny.html": [ @@ -271896,7 +272117,7 @@ "testharness" ], "offscreen-canvas/pixel-manipulation/2d.imageData.put.nonfinite-expected.txt": [ - "e8d32d96231d0347ba88ff3df3afeb71b55046ca", + "a23ee9bf788697ad31b3490537d7cd3cf4311c41", "support" ], "offscreen-canvas/pixel-manipulation/2d.imageData.put.nonfinite.html": [ @@ -272572,7 +272793,7 @@ "testharness" ], "offscreen-canvas/the-offscreen-canvas/2d.getcontext.extraargs-expected.txt": [ - "e387ab8693e974894c6cdbfe9ed09cd7a4d5d971", + "f6421aa7a68136f98c92dd8e5dc678258e71b9b8", "support" ], "offscreen-canvas/the-offscreen-canvas/2d.getcontext.extraargs.html": [ @@ -272728,7 +272949,7 @@ "testharness" ], "offscreen-canvas/the-offscreen-canvas/offscreencanvas.commit-expected.txt": [ - "f90f04442bee07b0bac06945833106f70d84b1e3", + "be7f7475651d7ce25438bfdbde2ed26df0e093d5", "support" ], "offscreen-canvas/the-offscreen-canvas/offscreencanvas.commit.html": [ @@ -272736,7 +272957,7 @@ "testharness" ], "offscreen-canvas/the-offscreen-canvas/offscreencanvas.commit.w-expected.txt": [ - "ff9badb0af9e97ec8025b489acaeb0aff0a2fa1e", + "3dd9da611e1a1bafd41e4c2372c617ee92208afc", "support" ], "offscreen-canvas/the-offscreen-canvas/offscreencanvas.commit.w.html": [ @@ -272759,10 +272980,6 @@ "8466fb824c584d343ca20a52fd8d316fc2cd0d1c", "testharness" ], - "offscreen-canvas/the-offscreen-canvas/offscreencanvas.getcontext-expected.txt": [ - "39ca5a1e68e01cab1e35ca19d633c14e026d454e", - "support" - ], "offscreen-canvas/the-offscreen-canvas/offscreencanvas.getcontext.html": [ "2961422d4081a0fc55cb8bde62e6d33cb2877832", "testharness" @@ -272776,7 +272993,7 @@ "testharness" ], "offscreen-canvas/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap-expected.txt": [ - "ac9743518178adca75e302b4e6ea51eaa9ef5ccf", + "614be08f1401a32a2bd1166bddb14991756ec452", "support" ], "offscreen-canvas/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.html": [ @@ -272784,7 +273001,7 @@ "testharness" ], "offscreen-canvas/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.w-expected.txt": [ - "5d43c5f0b5a31e0274a4e0ee41148b57123c2c50", + "cdc2b45001e8c27a8a203fd8f33b06e729db501e", "support" ], "offscreen-canvas/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.w.html": [ @@ -272800,7 +273017,7 @@ "testharness" ], "offscreen-canvas/the-offscreen-canvas/offscreencanvas.transferrable-expected.txt": [ - "304b10b0786a88afca0ba5cefb3fb1013890ca44", + "1c0921e695c8d7b05b2a082e7ceb0e58e7ab50b0", "support" ], "offscreen-canvas/the-offscreen-canvas/offscreencanvas.transferrable.html": [ @@ -272808,7 +273025,7 @@ "testharness" ], "offscreen-canvas/the-offscreen-canvas/offscreencanvas.transferrable.w-expected.txt": [ - "2aa9d3adc41bc86aa40bb71b866ab23effbf0646", + "f27a7d3d1042e47027a5e8fd9914e2b64ae9229e", "support" ], "offscreen-canvas/the-offscreen-canvas/offscreencanvas.transferrable.w.html": [ @@ -272824,7 +273041,7 @@ "testharness" ], "offscreen-canvas/the-offscreen-canvas/size.attributes.idl-expected.txt": [ - "19baba8ee5436bd51ec767eef742a8fa555ec3ef", + "1d6bf82a14a7a5e6f58bd5479cde00591b26e28a", "support" ], "offscreen-canvas/the-offscreen-canvas/size.attributes.idl.html": [ @@ -272852,7 +273069,7 @@ "testharness" ], "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.em-expected.txt": [ - "18f1d4a592bc19dcfafe68d3bdb58fcce6ecbb1f", + "21bfc178ee40db6ab47a6bb934e80e5dbd4e6686", "support" ], "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.em.html": [ @@ -272864,7 +273081,7 @@ "testharness" ], "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.empty-expected.txt": [ - "818bbc105a20e0c1ec8bf4ea46ec887e5deb50fd", + "afa91e86dd23eb159e8959168f70bbbbdd847be1", "support" ], "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.empty.html": [ @@ -272892,7 +273109,7 @@ "testharness" ], "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.junk-expected.txt": [ - "18f1d4a592bc19dcfafe68d3bdb58fcce6ecbb1f", + "21bfc178ee40db6ab47a6bb934e80e5dbd4e6686", "support" ], "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.junk.html": [ @@ -272904,7 +273121,7 @@ "testharness" ], "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.minus-expected.txt": [ - "1c60269ff2d6dd83501fe6a6dd61ea8ea37e2713", + "c909bbc82576c2124bb153e77b368e05ccd46306", "support" ], "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.minus.html": [ @@ -272924,7 +273141,7 @@ "testharness" ], "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.onlyspace-expected.txt": [ - "818bbc105a20e0c1ec8bf4ea46ec887e5deb50fd", + "afa91e86dd23eb159e8959168f70bbbbdd847be1", "support" ], "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.onlyspace.html": [ @@ -272936,7 +273153,7 @@ "testharness" ], "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.percent-expected.txt": [ - "18f1d4a592bc19dcfafe68d3bdb58fcce6ecbb1f", + "21bfc178ee40db6ab47a6bb934e80e5dbd4e6686", "support" ], "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.percent.html": [ @@ -272964,7 +273181,7 @@ "testharness" ], "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.trailingjunk-expected.txt": [ - "18f1d4a592bc19dcfafe68d3bdb58fcce6ecbb1f", + "21bfc178ee40db6ab47a6bb934e80e5dbd4e6686", "support" ], "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.trailingjunk.html": [ @@ -273232,7 +273449,7 @@ "manual" ], "orientation-event/horizontal-surface-manual-expected.txt": [ - "fe79c9395f6423d0263cd4bc45b7ac18cdf38413", + "91a8e3cbd2cfd7208d9b4c0e9981427d01007c2d", "support" ], "orientation-event/horizontal-surface-manual.html": [ @@ -273240,7 +273457,7 @@ "manual" ], "orientation-event/idlharness-expected.txt": [ - "8a114868522547b2080271312b1950d57d5da3d9", + "09f2c3ac004a1cab22bd1e541cc508b95ee717bf", "support" ], "orientation-event/idlharness.html": [ @@ -273304,7 +273521,7 @@ "manual" ], "orientation-sensor/OrientationSensor.https-expected.txt": [ - "edbb43576664f2fd425256b8fe7bc3ae42e2066e", + "f04766a1076eed8ee47bc5721a84e9e766604e33", "support" ], "orientation-sensor/OrientationSensor.https.html": [ @@ -273344,7 +273561,7 @@ "testharness" ], "page-visibility/prerender_call-expected.txt": [ - "f84a7ba1555b622760bfc8622fb7a458bb3b167b", + "886e1ab4649db0a904906e033cc9818f7b31604a", "support" ], "page-visibility/prerender_call.html": [ @@ -273448,7 +273665,7 @@ "testharness" ], "payment-request/allowpaymentrequest/removing-allowpaymentrequest.https.sub-expected.txt": [ - "7a03ccde67f470aa9cddc2d51c8e4a2eb9561b37", + "24cfbab0000433e5da9e30056a7e8efc27f815fc", "support" ], "payment-request/allowpaymentrequest/removing-allowpaymentrequest.https.sub.html": [ @@ -273460,19 +273677,23 @@ "testharness" ], "payment-request/allowpaymentrequest/setting-allowpaymentrequest.https.sub-expected.txt": [ - "4454910deefcb86191abb62940d4ee619b48476f", + "98e2f23957307a7695b8f6c66785afee006366cb", "support" ], "payment-request/allowpaymentrequest/setting-allowpaymentrequest.https.sub.html": [ "e5be539c1b0ca1c571df1fc979fde5bf6482b43d", "testharness" ], + "payment-request/historical.https-expected.txt": [ + "5ad9976f93b209d121dc8e345c7de1efdaeb56b5", + "support" + ], "payment-request/historical.https.html": [ - "c0c611a34326ac2eba18e48d640aa358deaae551", + "6695acdcd1647fdd37702a7f63658dcd50f25596", "testharness" ], "payment-request/interfaces.https-expected.txt": [ - "7a439d59ee06052bfaab3c6a216a682c74dbe139", + "75f6a5b171d5e9ba7267ba821e6572bbcf54fc57", "support" ], "payment-request/interfaces.https.html": [ @@ -273508,7 +273729,7 @@ "support" ], "payment-request/payment-request-abort-method.https-expected.txt": [ - "a216c871066ec60f37e5df581541972132ae50b0", + "2ae8659429947969a41c77b6be11057c86cc35bc", "support" ], "payment-request/payment-request-abort-method.https.html": [ @@ -273516,7 +273737,7 @@ "testharness" ], "payment-request/payment-request-canmakepayment-method.https-expected.txt": [ - "cda9317c2a64330a0a72eb8cf233e9bebce21edb", + "fb1fa19bf1c38daea18f8d71d56f187c76118771", "support" ], "payment-request/payment-request-canmakepayment-method.https.html": [ @@ -273528,23 +273749,19 @@ "testharness" ], "payment-request/payment-request-constructor.https-expected.txt": [ - "4a48ea7aaaa9bba01659069b36f2c09ac99708f9", + "515266c66dc432d6f6b90a88d91e1a0048aec7f1", "support" ], "payment-request/payment-request-constructor.https.html": [ "7690d1931eac63274286fee76a993522bf6ad717", "testharness" ], - "payment-request/payment-request-ctor-currency-code-checks.https-expected.txt": [ - "087151b81a1cc1b63afaa0ebc174d212854bbc5a", - "support" - ], "payment-request/payment-request-ctor-currency-code-checks.https.html": [ "29a226caa4f91f0b92f4ed8bd99d40e241884107", "testharness" ], "payment-request/payment-request-ctor-pmi-handling.https-expected.txt": [ - "8be59852aafdd4d3e90e4d4f19955f114780ce61", + "fe83c4b266297a7104553a402b177daa4f8c11bd", "support" ], "payment-request/payment-request-ctor-pmi-handling.https.html": [ @@ -273632,7 +273849,7 @@ "testharness" ], "performance-timeline/idlharness-expected.txt": [ - "9143dd9c7542a602bc42e62da34577b97f99d4c5", + "9e416d6ef3852af70f15b49a0d4fa199144d8968", "support" ], "performance-timeline/idlharness.html": [ @@ -273664,7 +273881,7 @@ "testharness" ], "performance-timeline/po-navigation-expected.txt": [ - "2df8fbb6b5a366d81c13219dd049f29786432194", + "b83c08d736d6d84d1723a67868b2f7244ab35a62", "support" ], "performance-timeline/po-navigation.html": [ @@ -273712,7 +273929,7 @@ "testharness" ], "pointerevents/extension/pointerevent_coalesced_events_attributes-manual-expected.txt": [ - "88f44acc371e3fcaa9f111048dd53050c8ef8481", + "95381eb36253da005027c787822a08d2a287a828", "support" ], "pointerevents/extension/pointerevent_coalesced_events_attributes-manual.html": [ @@ -273880,7 +274097,7 @@ "support" ], "pointerevents/pointerevent_support.js": [ - "2b8c7b6d0917b9cc624735b7dc1105a732f9b3f4", + "f2ab5ea976ffd62c669fda2db1484a4733ce5b28", "support" ], "pointerevents/pointerevent_suppress_compat_events_on_click-manual.html": [ @@ -274024,7 +274241,7 @@ "testharness" ], "pointerlock/idlharness-expected.txt": [ - "3c5ec9228841fd321af3f928116b66a1ebcb54f1", + "99459c6d3ffb8ffb5df5b02f5491e09a3d9ff9a7", "support" ], "pointerlock/idlharness.html": [ @@ -274587,6 +274804,10 @@ "00233e7d4513c8e3c4b7f7fa60f313ef1b6dbddd", "support" ], + "referrer-policy/generic/link-rel-prefetch.html": [ + "96461340190f20f47a50b7fa4e6cdf9d2a7e09de", + "testharness" + ], "referrer-policy/generic/referrer-policy-test-case.js": [ "20c8273fd2a2cad07d3a607717d69d6ae94cf27e", "support" @@ -282024,7 +282245,7 @@ "support" ], "resource-timing/idlharness-expected.txt": [ - "87d2343b126a54f9400a0815e2056c1477ce1b1b", + "5ef5394763889d464fbeddb301f05f2d5683f61b", "support" ], "resource-timing/idlharness.html": [ @@ -282044,7 +282265,7 @@ "support" ], "resource-timing/resource_TAO_match_origin-expected.txt": [ - "1056c37f0a3b456fd90f8b0af4dbd664d75d9664", + "a49c71fd99ad9fdf7d479812a37bb7666dc42ef0", "support" ], "resource-timing/resource_TAO_match_origin.htm": [ @@ -282052,7 +282273,7 @@ "testharness" ], "resource-timing/resource_TAO_match_wildcard-expected.txt": [ - "5a00fdedbdc947c78f306a1849413c17c4b92aed", + "720681f115d0dfd26d1399521969e6225ed4e07b", "support" ], "resource-timing/resource_TAO_match_wildcard.htm": [ @@ -282060,7 +282281,7 @@ "testharness" ], "resource-timing/resource_TAO_multi-expected.txt": [ - "490af85a0edd0e593fc93886a2657c797e7fc005", + "89837e381547674509d8bdd33270b92b99eefd2c", "support" ], "resource-timing/resource_TAO_multi.htm": [ @@ -282196,7 +282417,7 @@ "testharness" ], "resource-timing/test_resource_timing-expected.txt": [ - "66cb6b2e80040b036b7923a3e7389f6f7016eadd", + "0126af043a4861056e9f13179026ca3daa8266de", "support" ], "resource-timing/test_resource_timing.html": [ @@ -282212,7 +282433,7 @@ "support" ], "screen-orientation/lock-bad-argument-expected.txt": [ - "a27f6264d5dce06d487ff4f8bf06766b96082dfa", + "606f01aeb1d9d55bac64783a647337b3c06ee5a9", "support" ], "screen-orientation/lock-bad-argument.html": [ @@ -282240,7 +282461,7 @@ "testharness" ], "screen-orientation/orientation-reading-expected.txt": [ - "6abb770e054ce31bda0979ced11484c02d326b51", + "31788697213b976519861bd166bea9fdf2bde1e0", "support" ], "screen-orientation/orientation-reading.html": [ @@ -282564,7 +282785,7 @@ "testharness" ], "selection/removeRange-expected.txt": [ - "97ec1164fdadc8db7737ad502dc2c9ed5ef7594a", + "f870348d667c6364731824773581cf614330cf8a", "support" ], "selection/removeRange.html": [ @@ -282576,7 +282797,7 @@ "testharness" ], "selection/setBaseAndExtent-expected.txt": [ - "17bba3ba99f70766e768be445217405eb4e4a148", + "c5f937a8c4f8d2d11d0591f8b1cedffb920f6171", "support" ], "selection/setBaseAndExtent.html": [ @@ -282632,7 +282853,7 @@ "support" ], "server-timing/resources/blue.png.sub.headers": [ - "d14ff7ce6dce67417c14192a89f4fe2d31c099a7", + "7ae842dc0c2e6a26e68aea5867214eb2dbd2b08b", "support" ], "server-timing/resources/green.png": [ @@ -282640,15 +282861,15 @@ "support" ], "server-timing/resources/green.png.sub.headers": [ - "e2fca01ea5a9c31731a1d5c4199849bf728da892", + "827dfe4dedd1d3854048b1b13e336200a05cc0da", "support" ], "server-timing/test_server_timing.html": [ - "bd80353850b822d6ee4a6b32ffae0e6e2120c61f", + "2c8420d5bc6ac45923f0c5cbc43c6bd88caa877c", "testharness" ], "server-timing/test_server_timing.html.sub.headers": [ - "c49030e9c6dabb55bff24b633b6660212bd2ecca", + "ffca8e9271c6760a63ca331c541799a537411994", "support" ], "service-workers/OWNERS": [ @@ -282732,7 +282953,7 @@ "support" ], "service-workers/cache-storage/serviceworker/cache-add.https-expected.txt": [ - "4ff0ad47d20edcf6372d35f88a22a62a7c4e6ce4", + "18294d1489b34860963407542bea0bf325e4f718", "support" ], "service-workers/cache-storage/serviceworker/cache-add.https.html": [ @@ -282752,7 +282973,7 @@ "testharness" ], "service-workers/cache-storage/serviceworker/cache-matchAll.https-expected.txt": [ - "66e9b97e7e7fdfa48be808fbfe5e5ab73f30d992", + "6ac19af7101bc0c176d22ab9d71e26a2e5011319", "support" ], "service-workers/cache-storage/serviceworker/cache-matchAll.https.html": [ @@ -282772,7 +282993,7 @@ "testharness" ], "service-workers/cache-storage/serviceworker/cache-storage.https-expected.txt": [ - "43b7d2821f2754d1ff47f27ff7ebfae44f59b355", + "b7400ce591127e1b0e2aed8cf2a490a9bc86b577", "support" ], "service-workers/cache-storage/serviceworker/cache-storage.https.html": [ @@ -282784,7 +283005,7 @@ "testharness" ], "service-workers/cache-storage/window/cache-add.https-expected.txt": [ - "ca6275929bb2b6b41101e60624c09612b80fd519", + "e961d788895828ce7b541bb05cd2a9ad55503e43", "support" ], "service-workers/cache-storage/window/cache-add.https.html": [ @@ -282804,7 +283025,7 @@ "testharness" ], "service-workers/cache-storage/window/cache-matchAll.https-expected.txt": [ - "f13b9e7c054609b797f36827bf3a086286b3956c", + "d82e386a53d9233653e458709a17d3655fe0bf47", "support" ], "service-workers/cache-storage/window/cache-matchAll.https.html": [ @@ -282824,7 +283045,7 @@ "testharness" ], "service-workers/cache-storage/window/cache-storage.https-expected.txt": [ - "32a7a37626e39abf01d98ff9a96c23b5c16acd6d", + "0e640dc9c6cd0b2d3e7baaddbf10f60ec57ce9d4", "support" ], "service-workers/cache-storage/window/cache-storage.https.html": [ @@ -282832,7 +283053,7 @@ "testharness" ], "service-workers/cache-storage/window/sandboxed-iframes.https-expected.txt": [ - "f105ed3337e3c0f569892522b0cc48aaa72b0f77", + "cd387a7c0711964e666141524b4f54fecc5e2fcc", "support" ], "service-workers/cache-storage/window/sandboxed-iframes.https.html": [ @@ -282840,7 +283061,7 @@ "testharness" ], "service-workers/cache-storage/worker/cache-add.https-expected.txt": [ - "ca6275929bb2b6b41101e60624c09612b80fd519", + "e961d788895828ce7b541bb05cd2a9ad55503e43", "support" ], "service-workers/cache-storage/worker/cache-add.https.html": [ @@ -282860,7 +283081,7 @@ "testharness" ], "service-workers/cache-storage/worker/cache-matchAll.https-expected.txt": [ - "f13b9e7c054609b797f36827bf3a086286b3956c", + "d82e386a53d9233653e458709a17d3655fe0bf47", "support" ], "service-workers/cache-storage/worker/cache-matchAll.https.html": [ @@ -282880,7 +283101,7 @@ "testharness" ], "service-workers/cache-storage/worker/cache-storage.https-expected.txt": [ - "32a7a37626e39abf01d98ff9a96c23b5c16acd6d", + "0e640dc9c6cd0b2d3e7baaddbf10f60ec57ce9d4", "support" ], "service-workers/cache-storage/worker/cache-storage.https.html": [ @@ -283040,7 +283261,7 @@ "testharness" ], "service-workers/service-worker/clients-get-client-types.https-expected.txt": [ - "3d4f5a8df36e90688f09df0b9a0a10994a605bfe", + "07803045ced6a8c7181aaf9d1fc2cfec02560e73", "support" ], "service-workers/service-worker/clients-get-client-types.https.html": [ @@ -283056,7 +283277,7 @@ "testharness" ], "service-workers/service-worker/clients-matchall-client-types.https-expected.txt": [ - "ba6d5d7fd4cf39fb70f80b8a5e56f9b0fcd8d369", + "f263e1840a1d094318a3e23cd44d416a83ad1c21", "support" ], "service-workers/service-worker/clients-matchall-client-types.https.html": [ @@ -283076,7 +283297,7 @@ "testharness" ], "service-workers/service-worker/clients-matchall-order.https-expected.txt": [ - "07ddecdb2465c1dab486fabd2a43f71346b2ae0e", + "1514227492ca15841eb810054cf56f4787cb8d6a", "support" ], "service-workers/service-worker/clients-matchall-order.https.html": [ @@ -283136,7 +283357,7 @@ "testharness" ], "service-workers/service-worker/fetch-event-redirect.https-expected.txt": [ - "ddce0493064736ce95c0d901e7b79894bc527852", + "076631e5c5cb9a1c5248f7100858e95566af01d2", "support" ], "service-workers/service-worker/fetch-event-redirect.https.html": [ @@ -283144,7 +283365,7 @@ "testharness" ], "service-workers/service-worker/fetch-event-referrer-policy.https-expected.txt": [ - "3141b8d0a19e90a7b25f35cb416f4d96d000c8eb", + "fc9e82ef1ea5879a330b3687acbe658a9b3c4871", "support" ], "service-workers/service-worker/fetch-event-referrer-policy.https.html": [ @@ -283172,7 +283393,7 @@ "testharness" ], "service-workers/service-worker/fetch-event-within-sw-manual.https-expected.txt": [ - "3aedda99e8e2af542cd84a73386e11938555e326", + "feec5608afadfdbbcff58aa539883bbedd723ff3", "support" ], "service-workers/service-worker/fetch-event-within-sw-manual.https.html": [ @@ -283184,7 +283405,7 @@ "testharness" ], "service-workers/service-worker/fetch-event.https-expected.txt": [ - "f40f5929b30da4fc816dc4c305555c577d6d6768", + "5ddc634df32a06102680190f5ef830158b51e22e", "support" ], "service-workers/service-worker/fetch-event.https.html": [ @@ -283240,7 +283461,7 @@ "testharness" ], "service-workers/service-worker/fetch-request-xhr-sync.https-expected.txt": [ - "74ec4922419ee10d8f6edda48ac860fab5cfa0e3", + "16a61ed4d2aac147d06787ef88742d2dc6b8e802", "support" ], "service-workers/service-worker/fetch-request-xhr-sync.https.html": [ @@ -283248,7 +283469,7 @@ "testharness" ], "service-workers/service-worker/fetch-request-xhr.https-expected.txt": [ - "d8d842f9a0e9478b8f41059da15810b86fb6a319", + "2d5bd76e25796e84a285b10ff35f865d456b561b", "support" ], "service-workers/service-worker/fetch-request-xhr.https.html": [ @@ -283308,7 +283529,7 @@ "testharness" ], "service-workers/service-worker/import-scripts-updated-flag.https-expected.txt": [ - "ad2763c9ca9eff1c4bd462256a63282e13ea378f", + "fe2f4e8f6ed54ce8dbd76c66837a48692502e821", "support" ], "service-workers/service-worker/import-scripts-updated-flag.https.html": [ @@ -283328,7 +283549,7 @@ "testharness" ], "service-workers/service-worker/interfaces-sw.https-expected.txt": [ - "e67da250e73a7372d6bb00ec94ccb064d1781032", + "99a1dff5f35a86223078c3cfb58e6e669ec956a3", "support" ], "service-workers/service-worker/interfaces-sw.https.html": [ @@ -283336,7 +283557,7 @@ "testharness" ], "service-workers/service-worker/interfaces-window.https-expected.txt": [ - "5db8d214dc2b46707cedd5ef5082a8e557c8ea69", + "44befaac858ea6c43ac6736c4e2633f162bfbe8f", "support" ], "service-workers/service-worker/interfaces-window.https.html": [ @@ -283355,6 +283576,50 @@ "3c75caa66d3906602d10b07ff22e7d0f210cfee9", "testharness" ], + "service-workers/service-worker/link-element-register-basic.https.html": [ + "c38709eafae1c43fb6de9c90ad41634bfb749d14", + "testharness" + ], + "service-workers/service-worker/link-element-register-mime-types.https-expected.txt": [ + "a9e4c718a505876062a8c786fb34b1f08a2a4a6b", + "support" + ], + "service-workers/service-worker/link-element-register-mime-types.https.html": [ + "7f09c63104e39c76638e9193ac07e383ac0435ad", + "testharness" + ], + "service-workers/service-worker/link-element-register-scope.https-expected.txt": [ + "89971c2af1b104ba8b96d959f8f04ed1befe1070", + "support" + ], + "service-workers/service-worker/link-element-register-scope.https.html": [ + "c29407cfdce522c6a576d866ece6fffe831c85ac", + "testharness" + ], + "service-workers/service-worker/link-element-register-script-url.https-expected.txt": [ + "df29684c75ed2b71eb5f594ecf6088963851e064", + "support" + ], + "service-workers/service-worker/link-element-register-script-url.https.html": [ + "f3920a47686a1e4792f097f52cf51531dccd58a8", + "testharness" + ], + "service-workers/service-worker/link-element-register-script.https-expected.txt": [ + "25a99b0034c6844b4a0c91206d867c082ad9f8c5", + "support" + ], + "service-workers/service-worker/link-element-register-script.https.html": [ + "9751dfe02dff339124352311115e61b19e7edf66", + "testharness" + ], + "service-workers/service-worker/link-element-register-security-error.https-expected.txt": [ + "4d32a8b5a3a95d0a26c9ba315bfa37572cadeebc", + "support" + ], + "service-workers/service-worker/link-element-register-security-error.https.html": [ + "026a444eb0ff60e7885f70c7a4c3fa03a2510de3", + "testharness" + ], "service-workers/service-worker/multi-globals/current/current.https.html": [ "2f7a23c1a4dfa7feb121e55d13ff8a0980165b37", "support" @@ -283396,7 +283661,7 @@ "testharness" ], "service-workers/service-worker/navigate-window.https-expected.txt": [ - "577a4fb4ab8695806f19dd72c6683cd1b3f04c0b", + "3adb5599218cd09c626496fe3ac6987601ebf927", "support" ], "service-workers/service-worker/navigate-window.https.html": [ @@ -283571,14 +283836,6 @@ "785f0ea662160a5b7b3fe6a7580e62f793e100cf", "testharness" ], - "service-workers/service-worker/register-link-element.https-expected.txt": [ - "152d3ae8b4f626a565347c37c98afb379d3ee008", - "support" - ], - "service-workers/service-worker/register-link-element.https.html": [ - "fcd2a244ad1f12c954c231c479f89beaa3c145e6", - "testharness" - ], "service-workers/service-worker/register-link-header.https.html": [ "fa97635d3a16a0f2a0a0bae8e4b81c8b5100d9cd", "testharness" @@ -283591,6 +283848,10 @@ "c729f05001dc2f4d2958010bab806e474507c934", "testharness" ], + "service-workers/service-worker/registration-basic.https.html": [ + "23c73f4e971d567cc62a3b9f3e478e87bb065691", + "testharness" + ], "service-workers/service-worker/registration-end-to-end.https.html": [ "b7840bdb1c3ee304996942465b52644919f11422", "testharness" @@ -283603,26 +283864,42 @@ "6d11b9ecf339e6e476fe594d5cb4e0873b0845d1", "testharness" ], + "service-workers/service-worker/registration-mime-types.https-expected.txt": [ + "1c7be26639414e632e8953e02a5134511f1f78a8", + "support" + ], + "service-workers/service-worker/registration-mime-types.https.html": [ + "f96e0103bef5163690b4bc837b5fc6adf6163527", + "testharness" + ], + "service-workers/service-worker/registration-scope.https.html": [ + "8e509079ae4fc3ba0e3fcf60f4a5d3efd137c7f0", + "testharness" + ], + "service-workers/service-worker/registration-script-url.https.html": [ + "5bb7d7fce7eb1e6e96975c7b657ee5a463f8d9df", + "testharness" + ], + "service-workers/service-worker/registration-script.https.html": [ + "afd8bfc2343053af9d424fc25af012cfc9de46f1", + "testharness" + ], + "service-workers/service-worker/registration-security-error.https.html": [ + "c0d8abc53c14cefb1e58e8a3e7149b8bdae062a0", + "testharness" + ], "service-workers/service-worker/registration-service-worker-attributes.https.html": [ "04a6fd8d3ff62fa4d969b629eb5f541c6447ae12", "testharness" ], "service-workers/service-worker/registration-updateviacache.https-expected.txt": [ - "84d7baad9a2812b0a0c57503c840a8393b3bc38e", + "977d13002f428dd44ce63500b4bb09964a9c8433", "support" ], "service-workers/service-worker/registration-updateviacache.https.html": [ "90c97975a11fc639e775d26e9d0354d514ae7a9b", "testharness" ], - "service-workers/service-worker/registration.https-expected.txt": [ - "36309067df5ff56185b6618affe450f7c298daaf", - "support" - ], - "service-workers/service-worker/registration.https.html": [ - "0a06c368a14c008c385c9df3cde35f090d96d58b", - "testharness" - ], "service-workers/service-worker/rejections.https.html": [ "785a18ac3c8001034f583a8e97195aa47093bd0d", "testharness" @@ -284331,6 +284608,30 @@ "b137bd995f0ca7b0ecc6ee6f5dc87a3a4e524364", "support" ], + "service-workers/service-worker/resources/registration-tests-basic.js": [ + "c20d86c2cc5de592c60524689411ec1db0b0c9ab", + "support" + ], + "service-workers/service-worker/resources/registration-tests-mime-types.js": [ + "6b0eb1390ec3b00a6625c4a74feb2cd68c6b0e72", + "support" + ], + "service-workers/service-worker/resources/registration-tests-scope.js": [ + "370f57a2cd56d39a2f1f60b61c9b6c54b3f512ed", + "support" + ], + "service-workers/service-worker/resources/registration-tests-script-url.js": [ + "88678c58dcfa4e5355d8f96607f92c81d7d3c5d4", + "support" + ], + "service-workers/service-worker/resources/registration-tests-script.js": [ + "3f153749950ea228d110e0bfcab51c339e734e38", + "support" + ], + "service-workers/service-worker/resources/registration-tests-security-error.js": [ + "9bd12c8a1819a2d2c00e49df61972307b63a1a73", + "support" + ], "service-workers/service-worker/resources/registration-tests.js": [ "bdb31335f8d15de455108e0186183f1acdaef41e", "support" @@ -284420,7 +284721,7 @@ "support" ], "service-workers/service-worker/resources/test-helpers.sub.js": [ - "113528ec940b15e9d7b6b982b6301c762a22b345", + "d1fae09808cce3b97e13ac73e7b781c5b51592a6", "support" ], "service-workers/service-worker/resources/testharness-helpers.js": [ @@ -284512,7 +284813,7 @@ "testharness" ], "service-workers/service-worker/skip-waiting-installed.https-expected.txt": [ - "844a6398c8af53bf34da514d6de2ddb8c43947c8", + "e05e2dd2ba5f533bb0370da051c46bdff3cc80f1", "support" ], "service-workers/service-worker/skip-waiting-installed.https.html": [ @@ -284580,7 +284881,7 @@ "testharness" ], "service-workers/service-worker/update-recovery.https-expected.txt": [ - "081ec815f2846d54a46061ea0c50c68469ccaeb0", + "1bd4cf8358c90853db70cea30b8420a36b62e11c", "support" ], "service-workers/service-worker/update-recovery.https.html": [ @@ -284604,7 +284905,7 @@ "testharness" ], "service-workers/service-worker/worker-interception.https-expected.txt": [ - "899c85a404d425d1d21ac0688130d233303a9609", + "c393d6c536c2000a2fc66b9a0a257649a81e6116", "support" ], "service-workers/service-worker/worker-interception.https.html": [ @@ -284828,7 +285129,7 @@ "testharness" ], "shadow-dom/Document-prototype-currentScript-expected.txt": [ - "5927db680d128100c42e9d24ead87feb8087e620", + "8c0078df4e132968a6f6061875032fa0789b4df4", "support" ], "shadow-dom/Document-prototype-currentScript.html": [ @@ -284872,7 +285173,7 @@ "testharness" ], "shadow-dom/ShadowRoot-interface-expected.txt": [ - "53ebffd3d7f16acb54c7c938cdff08a765555e45", + "36c535e6c39a094484f1f8a722dfebfb84721343", "support" ], "shadow-dom/ShadowRoot-interface.html": [ @@ -285284,7 +285585,7 @@ "testharness" ], "storage/persist-permission-manual.https-expected.txt": [ - "03110c8884b3899f3c68dadf179ed6c9beba4e93", + "f57865ee939ebba77e503f929665afa8056cb2c2", "support" ], "storage/persist-permission-manual.https.html": [ @@ -285408,11 +285709,11 @@ "testharness" ], "streams/piping/close-propagation-forward-expected.txt": [ - "2137ce5181a06dadd8f3f05a39730312ae18490e", + "501c14945293b2c16df9d593ad6a8667b889ab1e", "support" ], "streams/piping/close-propagation-forward.dedicatedworker-expected.txt": [ - "2137ce5181a06dadd8f3f05a39730312ae18490e", + "501c14945293b2c16df9d593ad6a8667b889ab1e", "support" ], "streams/piping/close-propagation-forward.dedicatedworker.html": [ @@ -285428,7 +285729,7 @@ "support" ], "streams/piping/close-propagation-forward.serviceworker.https-expected.txt": [ - "cf0510f91c9dffb00a20f442b9bcbf173dd59e00", + "becba93de4aaf6fef695f9441ab21e11442c920d", "support" ], "streams/piping/close-propagation-forward.serviceworker.https.html": [ @@ -285436,7 +285737,7 @@ "testharness" ], "streams/piping/close-propagation-forward.sharedworker-expected.txt": [ - "2137ce5181a06dadd8f3f05a39730312ae18490e", + "501c14945293b2c16df9d593ad6a8667b889ab1e", "support" ], "streams/piping/close-propagation-forward.sharedworker.html": [ @@ -285564,11 +285865,11 @@ "testharness" ], "streams/piping/transform-streams-expected.txt": [ - "bf4796f48fee73c9f766ab40e9c498db7d8a8af2", + "1c275a3aac999da8be4c2df0b246a5c0582f9252", "support" ], "streams/piping/transform-streams.dedicatedworker-expected.txt": [ - "bf4796f48fee73c9f766ab40e9c498db7d8a8af2", + "1c275a3aac999da8be4c2df0b246a5c0582f9252", "support" ], "streams/piping/transform-streams.dedicatedworker.html": [ @@ -285584,7 +285885,7 @@ "support" ], "streams/piping/transform-streams.serviceworker.https-expected.txt": [ - "20a2b0f7db575a01a6695b64878eb1b65d5bde94", + "f3cd96462a08f437925cb6cbd430a4785c190416", "support" ], "streams/piping/transform-streams.serviceworker.https.html": [ @@ -285592,7 +285893,7 @@ "testharness" ], "streams/piping/transform-streams.sharedworker-expected.txt": [ - "bf4796f48fee73c9f766ab40e9c498db7d8a8af2", + "1c275a3aac999da8be4c2df0b246a5c0582f9252", "support" ], "streams/piping/transform-streams.sharedworker.html": [ @@ -285600,11 +285901,11 @@ "testharness" ], "streams/readable-byte-streams/general-expected.txt": [ - "1d2af49ada9205cd1162a9a8c04aeb70127f11c6", + "249b2342d07dbc4c1361e982ad74ca18bd964a20", "support" ], "streams/readable-byte-streams/general.dedicatedworker-expected.txt": [ - "1d2af49ada9205cd1162a9a8c04aeb70127f11c6", + "249b2342d07dbc4c1361e982ad74ca18bd964a20", "support" ], "streams/readable-byte-streams/general.dedicatedworker.html": [ @@ -285620,7 +285921,7 @@ "support" ], "streams/readable-byte-streams/general.serviceworker.https-expected.txt": [ - "276e2026256c6006a5cbef0e27d1e4874a247044", + "781a2d1405c4588defd1eaf79b36dcb376287aa4", "support" ], "streams/readable-byte-streams/general.serviceworker.https.html": [ @@ -285628,7 +285929,7 @@ "testharness" ], "streams/readable-byte-streams/general.sharedworker-expected.txt": [ - "1d2af49ada9205cd1162a9a8c04aeb70127f11c6", + "249b2342d07dbc4c1361e982ad74ca18bd964a20", "support" ], "streams/readable-byte-streams/general.sharedworker.html": [ @@ -285796,7 +286097,7 @@ "testharness" ], "streams/readable-streams/general.dedicatedworker-expected.txt": [ - "785f72de2ed9a640b64953802f03a36594760b73", + "fcf8a8638780a9fdf246148d8394a0f88b0fc8e4", "support" ], "streams/readable-streams/general.dedicatedworker.html": [ @@ -285812,7 +286113,7 @@ "support" ], "streams/readable-streams/general.serviceworker.https-expected.txt": [ - "02319b32d6e48eebb708d524e77b3579a661352d", + "8f232cd3e21443c2023a618c42a62ea7a0ec701c", "support" ], "streams/readable-streams/general.serviceworker.https.html": [ @@ -285820,7 +286121,7 @@ "testharness" ], "streams/readable-streams/general.sharedworker-expected.txt": [ - "785f72de2ed9a640b64953802f03a36594760b73", + "fcf8a8638780a9fdf246148d8394a0f88b0fc8e4", "support" ], "streams/readable-streams/general.sharedworker.html": [ @@ -286380,7 +286681,7 @@ "testharness" ], "svg/interfaces-expected.txt": [ - "f01d8dc33b73924291a857bfcf54382df51459eb", + "f42524082c65e0dc2501c82c8de6f284de642894", "support" ], "svg/interfaces.html": [ @@ -286520,7 +286821,7 @@ "support" ], "uievents/auxclick/auxclick_event-manual-expected.txt": [ - "651040d4305d81e111c8026da8c3222232f4defb", + "0713ff4a6e4bf7e6945309c8eb816b3b01be97e0", "support" ], "uievents/auxclick/auxclick_event-manual.html": [ @@ -286944,7 +287245,7 @@ "testharness" ], "url/historical.any-expected.txt": [ - "3ce0ac6c0c251eaa4130ae50a5e85666a3f08799", + "1a83a0f63875200da4dcd3c4f45293bc3fc3f7b8", "support" ], "url/historical.any.js": [ @@ -286952,11 +287253,11 @@ "testharness" ], "url/historical.any.worker-expected.txt": [ - "d787e2d09b03790dcac80eecb856477cba36f355", + "82e4b2de6697f783cb753c8ab416b16d4786f4fd", "support" ], "url/interfaces.any-expected.txt": [ - "91b54f60c8f56dbf3e256385b483b3d563f7153f", + "e9eaad59d3aa6a6dbc3839b6eb641cbb9d2febd5", "support" ], "url/interfaces.any.js": [ @@ -286964,7 +287265,7 @@ "testharness" ], "url/interfaces.any.worker-expected.txt": [ - "91b54f60c8f56dbf3e256385b483b3d563f7153f", + "e9eaad59d3aa6a6dbc3839b6eb641cbb9d2febd5", "support" ], "url/setters_tests.json": [ @@ -286976,7 +287277,7 @@ "support" ], "url/toascii.window-expected.txt": [ - "b93667d3d42cc724db88ca4d9f074631f2288379", + "e123f25cddfd27bf38a6d92a10d9d3f6b841aaef", "support" ], "url/toascii.window.js": [ @@ -286996,7 +287297,7 @@ "testharness" ], "url/url-tojson-expected.txt": [ - "c5fd3011bd764eaa1e555d39bc155231b3c7e56b", + "6e3cb791ec250b3ad8ffa3670098547175a112ef", "support" ], "url/url-tojson.html": [ @@ -287004,7 +287305,7 @@ "testharness" ], "url/urlencoded-parser-expected.txt": [ - "c3e292bea3a749727d7c0ccedf97929c3fbc62d3", + "f6380ae6a0f28bf258bd6cdbbfb09de53e4be4f1", "support" ], "url/urlencoded-parser.html": [ @@ -287024,7 +287325,7 @@ "testharness" ], "url/urlsearchparams-foreach-expected.txt": [ - "ae2d8bfe7a22f5d7dfa1f83365187b9881212691", + "d10e811568996d276c25c189bcc696d21ab97cd4", "support" ], "url/urlsearchparams-foreach.html": [ @@ -287096,7 +287397,7 @@ "testharness" ], "user-timing/invoke_with_timing_attributes-expected.txt": [ - "0f4d539e37caa2aeff07fff2eea3029bb5acb1e5", + "a0190157a33b411cd3bb0a6049e506d421159205", "support" ], "user-timing/invoke_with_timing_attributes.html": [ @@ -287196,7 +287497,7 @@ "manual" ], "vibration/silent-ignore-expected.txt": [ - "47fe7f6cb1addc4643f93b4d55d478e755e68197", + "43ddb657a3fa6c8055dfe707cc8aeaae94d3c609", "support" ], "vibration/silent-ignore.html": [ @@ -287392,7 +287693,7 @@ "support" ], "web-animations/animation-model/combining-effects/effect-composition-expected.txt": [ - "81b8e29ad1ee04ce1f5958dfaca07d73a31112ca", + "61e48d8b66216bf9f6d008a536ae4d1b5bfd56d9", "support" ], "web-animations/animation-model/combining-effects/effect-composition.html": [ @@ -287400,7 +287701,7 @@ "testharness" ], "web-animations/animation-model/keyframe-effects/effect-value-context-expected.txt": [ - "456f89b590004614578bf6b6156535f9ab6862f3", + "e23a38f08397757faa25518b3a6b34ff848e0e0b", "support" ], "web-animations/animation-model/keyframe-effects/effect-value-context.html": [ @@ -287420,11 +287721,11 @@ "testharness" ], "web-animations/interfaces/Animatable/animate-expected.txt": [ - "49ecf5fa20817e35b3dad88bebd86ee76bf82b84", + "44f1a353542f41f48f600d8d55d7c33124a6a063", "support" ], "web-animations/interfaces/Animatable/animate-no-browsing-context-expected.txt": [ - "afda61060af826f282104803eb361dd2067a75a9", + "57a00d5fe6b3936912b805da8cb71c8b07d42668", "support" ], "web-animations/interfaces/Animatable/animate-no-browsing-context.html": [ @@ -287444,7 +287745,7 @@ "testharness" ], "web-animations/interfaces/Animation/constructor-expected.txt": [ - "d1d4a384fef71dca3e5d85a7b270c4f65689adb3", + "bfaf0b2a370455e842b7001bbe426412eefdc7a8", "support" ], "web-animations/interfaces/Animation/constructor.html": [ @@ -287460,7 +287761,7 @@ "testharness" ], "web-animations/interfaces/Animation/finished-expected.txt": [ - "2c5e81b245ae87739804d6194b1fe84e46fa6668", + "bd4cc2aa86133b2e7cc4713953d2b45fb3f59831", "support" ], "web-animations/interfaces/Animation/finished.html": [ @@ -287472,7 +287773,7 @@ "testharness" ], "web-animations/interfaces/Animation/idlharness-expected.txt": [ - "112b0ebc2d142e9f5480eac54e872b2cefe9b711", + "c73d777367515b83446840d7a764b868d8535e9f", "support" ], "web-animations/interfaces/Animation/idlharness.html": [ @@ -287540,7 +287841,7 @@ "testharness" ], "web-animations/interfaces/AnimationEffectTiming/getComputedStyle-expected.txt": [ - "c1e5bd1b6e0c10fe5142fae08114511c7bc0b03d", + "982681851b923adc985b418eadf6fc7e45d4c0cb", "support" ], "web-animations/interfaces/AnimationEffectTiming/getComputedStyle.html": [ @@ -287548,7 +287849,7 @@ "testharness" ], "web-animations/interfaces/AnimationEffectTiming/iterationStart-expected.txt": [ - "013cbd10904b6320d62f086ac5c37d4c4fba66ef", + "f34a5ff49dc69812a33b525d048b3ef66d2d1c9c", "support" ], "web-animations/interfaces/AnimationEffectTiming/iterationStart.html": [ @@ -287568,7 +287869,7 @@ "testharness" ], "web-animations/interfaces/Document/getAnimations-expected.txt": [ - "6c83f6c96d17c800765ffee1ef0739f2955b6cad", + "4e6131d8dbbb6afa9438c30f8b673efaf3724f68", "support" ], "web-animations/interfaces/Document/getAnimations.html": [ @@ -287580,7 +287881,7 @@ "testharness" ], "web-animations/interfaces/KeyframeEffect/composite-expected.txt": [ - "8b091c93bb0c13e0935d3b09980f9e905619be7c", + "fdcb6481962ae1d3d5a235c0a6785e9ed5b9cb29", "support" ], "web-animations/interfaces/KeyframeEffect/composite.html": [ @@ -287588,7 +287889,7 @@ "testharness" ], "web-animations/interfaces/KeyframeEffect/constructor-expected.txt": [ - "59e26dd949e2988c8b29067ff8443554f497f09f", + "23e2ee1ef1f5671d16779e9d39476b29b3f2b672", "support" ], "web-animations/interfaces/KeyframeEffect/constructor.html": [ @@ -287596,7 +287897,7 @@ "testharness" ], "web-animations/interfaces/KeyframeEffect/copy-contructor-expected.txt": [ - "a8964b5d29840b1a09c4adc16495650891b0cd99", + "6fe6516f05214a03bc69543f59837efcd8cea1eb", "support" ], "web-animations/interfaces/KeyframeEffect/copy-contructor.html": [ @@ -287604,7 +287905,7 @@ "testharness" ], "web-animations/interfaces/KeyframeEffect/getComputedTiming-expected.txt": [ - "be87c6f1d49ad765a40568a25bedd977542e727c", + "0e5f336ceed08f2dcb79a6e716eee84b96af949b", "support" ], "web-animations/interfaces/KeyframeEffect/getComputedTiming.html": [ @@ -287612,7 +287913,7 @@ "testharness" ], "web-animations/interfaces/KeyframeEffect/iterationComposite-expected.txt": [ - "1a5a2e42f7cd123bc37e09f5463fc908d333d13a", + "4ebb38dad8c879013d06937aab31652c297c9b75", "support" ], "web-animations/interfaces/KeyframeEffect/iterationComposite.html": [ @@ -287620,7 +287921,7 @@ "testharness" ], "web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument-expected.txt": [ - "30cabebc85771a9822dd8c55018ac2c6dce05049", + "9caf8cdff443aaf5e38d5cc7d8f45b190165474f", "support" ], "web-animations/interfaces/KeyframeEffect/processing-a-keyframes-argument.html": [ @@ -287628,7 +287929,7 @@ "testharness" ], "web-animations/interfaces/KeyframeEffect/setKeyframes-expected.txt": [ - "a6f93561b284c95d612ad66890929f90bd251244", + "52f1f0e383d37efd9213639658b793335ab3e1ca", "support" ], "web-animations/interfaces/KeyframeEffect/setKeyframes.html": [ @@ -287636,7 +287937,7 @@ "testharness" ], "web-animations/interfaces/KeyframeEffect/setTarget-expected.txt": [ - "91c873ec0a32dddd793b479d2e0e91e59cf39ef2", + "85cac68419ff77a9a28fef421fd24de4c69af817", "support" ], "web-animations/interfaces/KeyframeEffect/setTarget.html": [ @@ -287644,7 +287945,7 @@ "testharness" ], "web-animations/interfaces/KeyframeEffectReadOnly/copy-contructor-expected.txt": [ - "d6ea5e7b84c29247c588cb7582233525e21c5248", + "498c019373d1241b952efd5ed817b907ba5216ad", "support" ], "web-animations/interfaces/KeyframeEffectReadOnly/copy-contructor.html": [ @@ -287672,7 +287973,7 @@ "testharness" ], "web-animations/timing-model/animation-effects/current-iteration-expected.txt": [ - "b194781e0e13d73d0111b8cfeba43e5ad8d1a2dd", + "d5d160edb71cd06845c278aa5c7633571a14d4bf", "support" ], "web-animations/timing-model/animation-effects/current-iteration.html": [ @@ -287680,7 +287981,7 @@ "testharness" ], "web-animations/timing-model/animation-effects/local-time-expected.txt": [ - "a84af3e2e735115ace5b0667c966e2d71dae1600", + "ccf5cb47e709a33e07109edc513ec40343ccccc9", "support" ], "web-animations/timing-model/animation-effects/local-time.html": [ @@ -287688,7 +287989,7 @@ "testharness" ], "web-animations/timing-model/animation-effects/phases-and-states-expected.txt": [ - "502697f5bcde3a851b4fd5eb441f62974cd103da", + "ca49c92004c2514693c207d63f4cacd32e1b8254", "support" ], "web-animations/timing-model/animation-effects/phases-and-states.html": [ @@ -287696,7 +287997,7 @@ "testharness" ], "web-animations/timing-model/animation-effects/simple-iteration-progress-expected.txt": [ - "a7fea11c5ada80aec900d41f2c0213ecebd3745c", + "bdba3e330f166e5f9d11e06ab28932f99834a59f", "support" ], "web-animations/timing-model/animation-effects/simple-iteration-progress.html": [ @@ -287704,7 +288005,7 @@ "testharness" ], "web-animations/timing-model/animations/canceling-an-animation-expected.txt": [ - "2229a550b963fe0025e40431220695b04e0e9cf4", + "17e878b21fb3f3d66b0d02da67471dea1acdb0ba", "support" ], "web-animations/timing-model/animations/canceling-an-animation.html": [ @@ -287728,7 +288029,7 @@ "testharness" ], "web-animations/timing-model/animations/reversing-an-animation-expected.txt": [ - "e2f13194df3bd695e36daec171941a01cebe104a", + "cfbcec684ff3bcef12d0e935bc2ce153cfc9756f", "support" ], "web-animations/timing-model/animations/reversing-an-animation.html": [ @@ -287740,7 +288041,7 @@ "testharness" ], "web-animations/timing-model/animations/set-the-target-effect-of-an-animation-expected.txt": [ - "7c39205cf4c0817be1d1280ea31055be34601c9b", + "9c6f5b08822c066fb088425f12d08616ce0d025c", "support" ], "web-animations/timing-model/animations/set-the-target-effect-of-an-animation.html": [ @@ -287748,7 +288049,7 @@ "testharness" ], "web-animations/timing-model/animations/set-the-timeline-of-an-animation-expected.txt": [ - "2b9c1d6d8b662302c74dbe0e9eac9ac2f2cfc371", + "0fbd3992437bdf97c3f06a36677d628fd0e551f6", "support" ], "web-animations/timing-model/animations/set-the-timeline-of-an-animation.html": [ @@ -287760,7 +288061,7 @@ "testharness" ], "web-animations/timing-model/time-transformations/transformed-progress-expected.txt": [ - "68dceee1b821f40681564036377150e53188a59e", + "06027d044af50e7019d0258786ffb79e68e18f74", "support" ], "web-animations/timing-model/time-transformations/transformed-progress.html": [ @@ -287784,7 +288085,7 @@ "testharness" ], "web-nfc/nfc_push.https-expected.txt": [ - "557a8397bb1ac891f3b921be25febfba25d61586", + "6968363f3a8ae0cf88d27fb4165b70c6399e02f6", "support" ], "web-nfc/nfc_push.https.html": [ @@ -287792,7 +288093,7 @@ "testharness" ], "web-nfc/nfc_push_ArrayBuffer-manual.https-expected.txt": [ - "a820b54479f2f4178f554e4d58fff11fe0c6a54d", + "d53eb324ae1352ca99a71e26c9264d1990fb5e32", "support" ], "web-nfc/nfc_push_ArrayBuffer-manual.https.html": [ @@ -287800,7 +288101,7 @@ "manual" ], "web-nfc/nfc_push_DOMString-manual.https-expected.txt": [ - "c952966357ccf83d46328eb1ed45ac4dfdd528fc", + "39a94f480d0d591f8eb63f69843aba6828e3a80d", "support" ], "web-nfc/nfc_push_DOMString-manual.https.html": [ @@ -287808,7 +288109,7 @@ "manual" ], "web-nfc/nfc_recordType_empty-manual.https-expected.txt": [ - "096ce9b4f53d1883c30e638fefe434b795065704", + "b34a9f87d1e0bd7bb38d4de91731aece80562b7a", "support" ], "web-nfc/nfc_recordType_empty-manual.https.html": [ @@ -287816,7 +288117,7 @@ "manual" ], "web-nfc/nfc_recordType_json-manual.https-expected.txt": [ - "48ade0efa25e2d8576d0d70394f539be5e50fb6a", + "b95092c14c2c6249c0c3fe839a50c3b5746a044f", "support" ], "web-nfc/nfc_recordType_json-manual.https.html": [ @@ -287824,7 +288125,7 @@ "manual" ], "web-nfc/nfc_recordType_opaque-manual.https-expected.txt": [ - "1d825d15a860eb5a562f8b5ab9f39eea09634a52", + "dc0c92c5a6452ec071ce2751e9fe5c4f41d0aaa8", "support" ], "web-nfc/nfc_recordType_opaque-manual.https.html": [ @@ -287832,7 +288133,7 @@ "manual" ], "web-nfc/nfc_recordType_text-manual.https-expected.txt": [ - "a1f8fe57ca4f57ca13ab59c2e590e6bdeed00806", + "71b43b1a506dae9ab8183f2c3d5421772ab1cd8c", "support" ], "web-nfc/nfc_recordType_text-manual.https.html": [ @@ -287840,7 +288141,7 @@ "manual" ], "web-nfc/nfc_recordType_url-manual.https-expected.txt": [ - "f508056b597e49a5ae3c9ee72b37291c0f57f656", + "e7d866f744ffd9b33d59e989083fdb4429dec079", "support" ], "web-nfc/nfc_recordType_url-manual.https.html": [ @@ -287848,7 +288149,7 @@ "manual" ], "web-nfc/nfc_watch.https-expected.txt": [ - "97bdffaf68f153c2f74349b8fa867f8dcb7e0aeb", + "1dc2c451b6e88faec0d2e2aa978239ccb6452fcd", "support" ], "web-nfc/nfc_watch.https.html": [ @@ -288632,7 +288933,7 @@ "support" ], "webrtc/RTCCertificate-expected.txt": [ - "8e0f583c43a6ea5f4af02c5cbccd3a6b290d269c", + "3451b63beffd0a2c8327d4988ce41c40b07d0567", "support" ], "webrtc/RTCCertificate.html": [ @@ -288640,7 +288941,7 @@ "testharness" ], "webrtc/RTCConfiguration-bundlePolicy-expected.txt": [ - "34cbb507ce8aa07161931367cfbd47af6a0d6096", + "0e11e90a2b0c5b99710122354fea2a91b52a9477", "support" ], "webrtc/RTCConfiguration-bundlePolicy.html": [ @@ -288652,7 +288953,7 @@ "support" ], "webrtc/RTCConfiguration-iceCandidatePoolSize-expected.txt": [ - "a3c6a87b158deb84be0f56e8467b1f9bf16aba71", + "9767e62e1f45c63ddefa21b30f8081e85c98c599", "support" ], "webrtc/RTCConfiguration-iceCandidatePoolSize.html": [ @@ -288660,7 +288961,7 @@ "testharness" ], "webrtc/RTCConfiguration-iceServers-expected.txt": [ - "1879e996f75ef8e54b82ccff67375c5bb8d20464", + "3a7d0d8dc0372707f63a0664b54df48c0df822dd", "support" ], "webrtc/RTCConfiguration-iceServers.html": [ @@ -288668,7 +288969,7 @@ "testharness" ], "webrtc/RTCConfiguration-iceTransportPolicy-expected.txt": [ - "32a88606a9f89c7ccf38d2ad0f5e12e14d039632", + "0d001b921d20554174a95457a8732c5f4013560f", "support" ], "webrtc/RTCConfiguration-iceTransportPolicy.html": [ @@ -288676,7 +288977,7 @@ "testharness" ], "webrtc/RTCConfiguration-rtcpMuxPolicy-expected.txt": [ - "d4362e53d3b15963a9b3e0c394c3789a8291fd8c", + "2c7f6e41de52c09fa3a77dc05a06addbc51ac7f7", "support" ], "webrtc/RTCConfiguration-rtcpMuxPolicy.html": [ @@ -288688,7 +288989,7 @@ "support" ], "webrtc/RTCDTMFSender-insertDTMF-expected.txt": [ - "091c75215367314a7a8459c613e6c45c4248d53e", + "4fea16558c8fc2fcf13694e6b8c58ded568bc8fa", "support" ], "webrtc/RTCDTMFSender-insertDTMF.html": [ @@ -288696,11 +288997,11 @@ "testharness" ], "webrtc/RTCDTMFSender-ontonechange-expected.txt": [ - "24922ea724426cecce994e0cad61412ecd824b65", + "78a968f76da3ff9ae7ae801b9308568471bf4a8e", "support" ], "webrtc/RTCDTMFSender-ontonechange-long-expected.txt": [ - "41357ef6328d661b813c3d504b1ac51d6c31714f", + "7f332254389eb191f89a988451749ab0919ea8d0", "support" ], "webrtc/RTCDTMFSender-ontonechange-long.html": [ @@ -288716,7 +289017,7 @@ "testharness" ], "webrtc/RTCDataChannel-id-expected.txt": [ - "11feb0f3998424ebced390b8026455a91e9eceed", + "3173e9ab87ca8156d3a0c6b3f4c4024d7936ebd0", "support" ], "webrtc/RTCDataChannel-id.html": [ @@ -288736,7 +289037,7 @@ "testharness" ], "webrtc/RTCIceCandidate-constructor-expected.txt": [ - "f313c2ac3b85c15a6d9ea25fc8231ffcc34f22e2", + "8fd4c4331befaa6ab314cbb76dcf85cca9201017", "support" ], "webrtc/RTCIceCandidate-constructor.html": [ @@ -288748,7 +289049,7 @@ "testharness" ], "webrtc/RTCPeerConnection-addIceCandidate-expected.txt": [ - "983767c4ad87f9920a2962a3b2474f38f1661a3d", + "e86ba9792d9f45bdc6c8510f3786708d1ce6c282", "support" ], "webrtc/RTCPeerConnection-addIceCandidate.html": [ @@ -288756,7 +289057,7 @@ "testharness" ], "webrtc/RTCPeerConnection-addTrack-expected.txt": [ - "e480b5f8182c603363d6cbc714531f73874125ee", + "d6d4ee65930dfa569c038f0508a5bffd1d10ce8b", "support" ], "webrtc/RTCPeerConnection-addTrack.html": [ @@ -288764,7 +289065,7 @@ "testharness" ], "webrtc/RTCPeerConnection-addTransceiver-expected.txt": [ - "96f621b10b54b8fc676e63bb65ca8592f53a863f", + "7e6810c3e729ac3e4dfbe8e77b011ed5e4367f67", "support" ], "webrtc/RTCPeerConnection-addTransceiver.html": [ @@ -288772,7 +289073,7 @@ "testharness" ], "webrtc/RTCPeerConnection-canTrickleIceCandidates-expected.txt": [ - "2ac075fe0ee3b4c0da551ad770db34192b426e8a", + "45a9c9e3daa90cb0550afacb5f920645c5e51e7b", "support" ], "webrtc/RTCPeerConnection-canTrickleIceCandidates.html": [ @@ -288780,7 +289081,7 @@ "testharness" ], "webrtc/RTCPeerConnection-connectionState-expected.txt": [ - "6935d8e8c76b13f9953f95873ca127336ce694c0", + "82cd5767e5bae83da74d9c34287dc23c0f156a0d", "support" ], "webrtc/RTCPeerConnection-connectionState.html": [ @@ -288788,7 +289089,7 @@ "testharness" ], "webrtc/RTCPeerConnection-constructor-expected.txt": [ - "00b7db3c1627ec4a15dce0f7c069d85046ffd630", + "5e36859151d544352d9330045f4389ab78c3a8b0", "support" ], "webrtc/RTCPeerConnection-constructor.html": [ @@ -288796,7 +289097,7 @@ "testharness" ], "webrtc/RTCPeerConnection-createAnswer-expected.txt": [ - "4932eaf08f2259673c0908b682348fc6221ab5dc", + "5f2a318f1d6aa6e3bbed317793d43f92cde88c7b", "support" ], "webrtc/RTCPeerConnection-createAnswer.html": [ @@ -288804,7 +289105,7 @@ "testharness" ], "webrtc/RTCPeerConnection-createDataChannel-expected.txt": [ - "9c35fda70285b2a5f331f093a837731f4320012f", + "a7148917687cfe136c2ed4a1f54751ae89034db5", "support" ], "webrtc/RTCPeerConnection-createDataChannel.html": [ @@ -288816,7 +289117,7 @@ "testharness" ], "webrtc/RTCPeerConnection-generateCertificate-expected.txt": [ - "2a4ef86c32933083a41c7762bcf10243369f8109", + "b5e921bf7c6c679e7b6747a28fda7eca84b137ec", "support" ], "webrtc/RTCPeerConnection-generateCertificate.html": [ @@ -288824,7 +289125,7 @@ "testharness" ], "webrtc/RTCPeerConnection-getDefaultIceServers-expected.txt": [ - "205284bf038768053c6e6367319fceb41560c565", + "6208058cfb5ca30ff0968a798a317517a94f1c73", "support" ], "webrtc/RTCPeerConnection-getDefaultIceServers.html": [ @@ -288832,7 +289133,7 @@ "testharness" ], "webrtc/RTCPeerConnection-getIdentityAssertion-expected.txt": [ - "bbec752149fd44442dd57083f408896b23935eb5", + "e2f8e0700a912f1a84824494127e1d6e772ff772", "support" ], "webrtc/RTCPeerConnection-getIdentityAssertion.html": [ @@ -288840,7 +289141,7 @@ "testharness" ], "webrtc/RTCPeerConnection-getStats-expected.txt": [ - "a9bf2023b0f17747ab331113640fe189551a947c", + "ac12962c419928578363c3dfdcb5460ae0c4f074", "support" ], "webrtc/RTCPeerConnection-getStats.html": [ @@ -288848,7 +289149,7 @@ "testharness" ], "webrtc/RTCPeerConnection-getTransceivers-expected.txt": [ - "3e82583213727df78f6ad7842628faac97a30ac7", + "c70579739b89d50b2a73c023ceceb0134b2dcc85", "support" ], "webrtc/RTCPeerConnection-getTransceivers.html": [ @@ -288860,7 +289161,7 @@ "support" ], "webrtc/RTCPeerConnection-iceConnectionState-expected.txt": [ - "b424c205b6e99dae17e37ea44a1d3b9b9e30e389", + "3b23be2575b7f01ef0bd6a7d7625f3e03018516e", "support" ], "webrtc/RTCPeerConnection-iceConnectionState.html": [ @@ -288868,7 +289169,7 @@ "testharness" ], "webrtc/RTCPeerConnection-iceGatheringState-expected.txt": [ - "2cb68e387063cba06af0326f1e4e591152915c53", + "7f301d69ec9549895d6f3b7c072641ca274a7fb1", "support" ], "webrtc/RTCPeerConnection-iceGatheringState.html": [ @@ -288876,7 +289177,7 @@ "testharness" ], "webrtc/RTCPeerConnection-idl-expected.txt": [ - "2ee045492d8ba412565462c624a9906a6e4e9e69", + "99ea6c23845d41ecd19ddf43adac9d71aa69c84b", "support" ], "webrtc/RTCPeerConnection-idl.html": [ @@ -288892,7 +289193,7 @@ "testharness" ], "webrtc/RTCPeerConnection-ontrack-expected.txt": [ - "670d6d60d5e1278ec59cf1e36207768a69c654ac", + "33a4cb967597c76b5a720e8bf038a36484be79d1", "support" ], "webrtc/RTCPeerConnection-ontrack.html": [ @@ -288900,7 +289201,7 @@ "testharness" ], "webrtc/RTCPeerConnection-peerIdentity-expected.txt": [ - "1584862ce28446e8ec60c517cae48e920382be61", + "8ccb809867580d45bfbfe4ae8fbda2f7d3db4885", "support" ], "webrtc/RTCPeerConnection-peerIdentity.html": [ @@ -288908,7 +289209,7 @@ "testharness" ], "webrtc/RTCPeerConnection-removeTrack-expected.txt": [ - "656d90c4c5058bf757eb50a97c254607a908e456", + "223d97bd1f1888eb5d06f734dd4b02b512378886", "support" ], "webrtc/RTCPeerConnection-removeTrack.html": [ @@ -288916,7 +289217,7 @@ "testharness" ], "webrtc/RTCPeerConnection-setDescription-transceiver-expected.txt": [ - "7b041be1aa700a20e0e3904541f3f56011fd26b6", + "dfa174da13e792909ca7ab635e7889916a0eae4e", "support" ], "webrtc/RTCPeerConnection-setDescription-transceiver.html": [ @@ -288948,7 +289249,7 @@ "testharness" ], "webrtc/RTCPeerConnection-setRemoteDescription-expected.txt": [ - "e48c21dca1fce4f9959bdde0bd302112146088ff", + "21ff01b3c64e3645fbc129e2d51c4112911dbbf8", "support" ], "webrtc/RTCPeerConnection-setRemoteDescription-offer.html": [ @@ -288968,7 +289269,7 @@ "testharness" ], "webrtc/RTCPeerConnectionIceEvent-constructor-expected.txt": [ - "0a3133f813a8fee13aef6344c63c140db693f125", + "fc7c32a8b213a53cab5c3872eaf516ad74c43d17", "support" ], "webrtc/RTCPeerConnectionIceEvent-constructor.html": [ @@ -288980,7 +289281,7 @@ "support" ], "webrtc/RTCRtpParameters-codecs-expected.txt": [ - "c10abdd0f7e5180cd52307b8d514267c3cb665ad", + "9a8c2a6dea5941c03d76e15fd25842af28d9cd7d", "support" ], "webrtc/RTCRtpParameters-codecs.html": [ @@ -288988,7 +289289,7 @@ "testharness" ], "webrtc/RTCRtpParameters-degradationPreference-expected.txt": [ - "cef821b6e5eddb9af9c76bf8aca3119861e240f2", + "0589a35c3e709785811ea48d7092cf1d7a216a21", "support" ], "webrtc/RTCRtpParameters-degradationPreference.html": [ @@ -288996,7 +289297,7 @@ "testharness" ], "webrtc/RTCRtpParameters-encodings-expected.txt": [ - "1eb3707d88f0da62c7a9a25a2276495d741207d5", + "d01dabeb07a0b30750d389a6fb3ccf1b5c7b2a7d", "support" ], "webrtc/RTCRtpParameters-encodings.html": [ @@ -289004,7 +289305,7 @@ "testharness" ], "webrtc/RTCRtpParameters-headerExtensions-expected.txt": [ - "b237cecc6d8b2cfa6bc1330f7ab8aaf391be880e", + "bd2515ece9f6473d653014caf8c677235ffb61e5", "support" ], "webrtc/RTCRtpParameters-headerExtensions.html": [ @@ -289016,7 +289317,7 @@ "support" ], "webrtc/RTCRtpParameters-rtcp-expected.txt": [ - "62790bf5e1a64c52ee00752656ba5514ada17138", + "4ddb2524d4ec48d2825528621cde572f981d8187", "support" ], "webrtc/RTCRtpParameters-rtcp.html": [ @@ -289024,7 +289325,7 @@ "testharness" ], "webrtc/RTCRtpParameters-transactionId-expected.txt": [ - "8fdb46f4177eaf008712e258a4a476fb6c4f1509", + "27af45c3f23c099a7a4230e66a14a8949a153cb7", "support" ], "webrtc/RTCRtpParameters-transactionId.html": [ @@ -289032,7 +289333,7 @@ "testharness" ], "webrtc/RTCRtpReceiver-getCapabilities-expected.txt": [ - "1cd122a2c55815f85ba2a5c0a89d7d47fcdbd4bd", + "9561b22b7512ab985ac0e80dcee87436a799fd6b", "support" ], "webrtc/RTCRtpReceiver-getCapabilities.html": [ @@ -289040,7 +289341,7 @@ "testharness" ], "webrtc/RTCRtpReceiver-getContributingSources-expected.txt": [ - "8eac58d1194a8ecb4d1350053617a44279a2e685", + "550b18da2d524cc406ba6ff365f55267e9b273f5", "support" ], "webrtc/RTCRtpReceiver-getContributingSources.html": [ @@ -289048,7 +289349,7 @@ "testharness" ], "webrtc/RTCRtpReceiver-getParameters-expected.txt": [ - "35dc13cb626b75667ae1e0a50b7e36c26a90d018", + "4c0d0b1bf99950a55d41819b615cee6649b25721", "support" ], "webrtc/RTCRtpReceiver-getParameters.html": [ @@ -289056,7 +289357,7 @@ "testharness" ], "webrtc/RTCRtpReceiver-getStats-expected.txt": [ - "b8677b6ab1d9821d7d8a6a9e7faac7dc2f2c2cfa", + "c3bbc19e8207f3df833681c8347fcdcaa7409d54", "support" ], "webrtc/RTCRtpReceiver-getStats.html": [ @@ -289064,7 +289365,7 @@ "testharness" ], "webrtc/RTCRtpReceiver-getSynchronizationSources-expected.txt": [ - "8eac58d1194a8ecb4d1350053617a44279a2e685", + "550b18da2d524cc406ba6ff365f55267e9b273f5", "support" ], "webrtc/RTCRtpReceiver-getSynchronizationSources.html": [ @@ -289072,7 +289373,7 @@ "testharness" ], "webrtc/RTCRtpSender-getCapabilities-expected.txt": [ - "bf775f6571e7befc67f7f903691d66c250c34671", + "8da952413a37cff97b11edf8ec454855dc2201b8", "support" ], "webrtc/RTCRtpSender-getCapabilities.html": [ @@ -289080,7 +289381,7 @@ "testharness" ], "webrtc/RTCRtpSender-getStats-expected.txt": [ - "33a4eae3594e766da3bdf10a6a7f3cac8496d368", + "fdde59308f44c729b249d9d5659fb8d29ff93704", "support" ], "webrtc/RTCRtpSender-getStats.html": [ @@ -289088,7 +289389,7 @@ "testharness" ], "webrtc/RTCRtpSender-replaceTrack-expected.txt": [ - "5cc966da1ef624e5766cbf231ee67b5451ebd976", + "65f608abc3dfcdb8792035b91dec3e949254eb0c", "support" ], "webrtc/RTCRtpSender-replaceTrack.html": [ @@ -289096,7 +289397,7 @@ "testharness" ], "webrtc/RTCRtpSender-setParameters-expected.txt": [ - "67b1fe5b9245c28de02a0c4433772965663c6e4e", + "a004e5da888eeaf78c2030397e5c1ab0d171ee99", "support" ], "webrtc/RTCRtpSender-setParameters.html": [ @@ -289104,7 +289405,7 @@ "testharness" ], "webrtc/RTCRtpTransceiver-setCodecPreferences-expected.txt": [ - "4dc85a6d4b4e1101a474855af05cb3e91f4a3659", + "deba6601020edf87a518603148ab06c4d5eb378a", "support" ], "webrtc/RTCRtpTransceiver-setCodecPreferences.html": [ @@ -289112,7 +289413,7 @@ "testharness" ], "webrtc/RTCRtpTransceiver-setDirection-expected.txt": [ - "ef8e1a07245c4387dcb2f15217b0fb2c3e8801a2", + "82193e020f52a549c1cf2bc1f92b5fa3325bf923", "support" ], "webrtc/RTCRtpTransceiver-setDirection.html": [ @@ -289120,7 +289421,7 @@ "testharness" ], "webrtc/RTCSctpTransport-constructor-expected.txt": [ - "b3ab3dc6b944a3273263ffb739fbb0b7c37ce8d2", + "7d31a51e1046bc8e028fb9828b031d0d33f84040", "support" ], "webrtc/RTCSctpTransport-constructor.html": [ @@ -289132,7 +289433,7 @@ "support" ], "webrtc/RTCTrackEvent-constructor-expected.txt": [ - "f8a6e385de501fba2b96fb72c4c4c15cc1e62c05", + "60c4e3acbcdb99f1b28184727dbd3736d769d77b", "support" ], "webrtc/RTCTrackEvent-constructor.html": [ @@ -289152,7 +289453,7 @@ "support" ], "webrtc/datachannel-emptystring-expected.txt": [ - "fe26a16716e99fd3ff9fef057a6de46b3439d1bf", + "9fcf4aa567ec3c3312908fd9121a45d56d6a29af", "support" ], "webrtc/datachannel-emptystring.html": [ @@ -289160,7 +289461,7 @@ "testharness" ], "webrtc/datachannel-idlharness-expected.txt": [ - "70161bca80811ddfbc6349f1b04cb2ad8b4e0f35", + "314b46d829ac5666b7e03a49ced7b8d1ed171ac3", "support" ], "webrtc/datachannel-idlharness.html": [ @@ -289172,7 +289473,7 @@ "support" ], "webrtc/getstats-expected.txt": [ - "2ee9ce522b2b7ab95a38abfc3394c7c503caf589", + "1e3f1dae5dee32cc86534a64d70ce7633d36b1d4", "support" ], "webrtc/getstats.html": [ @@ -289180,7 +289481,7 @@ "testharness" ], "webrtc/historical-expected.txt": [ - "8a6bd8685d27f0da478cfe112c530c900bcfb7f7", + "3105bb55f2acc386b5968d7ced4ea90c0ee26183", "support" ], "webrtc/historical.html": [ @@ -289192,7 +289493,7 @@ "support" ], "webrtc/interfaces-expected.txt": [ - "47fc365a27af2182533bbd554f6b24e6dc74e4c4", + "a3b5eaadea459d973dc15878f4a8719ddfd8d95f", "support" ], "webrtc/interfaces.html": [ @@ -289200,7 +289501,7 @@ "testharness" ], "webrtc/no-media-call-expected.txt": [ - "d38f866ce4a9b8f3410903cd7c1497006d93933b", + "e1dca32e8ee397db5d4ffc189be7bb92034dad61", "support" ], "webrtc/no-media-call.html": [ @@ -289208,7 +289509,7 @@ "testharness" ], "webrtc/promises-call-expected.txt": [ - "d8c557210aca854a31b69d7d57788db359d84f3f", + "242d1ea0343fe2b51db9d506e1ef1ffffd94230a", "support" ], "webrtc/promises-call.html": [ @@ -289216,7 +289517,7 @@ "testharness" ], "webrtc/simplecall-expected.txt": [ - "73c0717ad63503c6ea9c14c71a62a2984a46125b", + "8df6dad8e1adc598716e6c14b0a4dd61e097672c", "support" ], "webrtc/simplecall.html": [ @@ -289248,7 +289549,7 @@ "testharness" ], "websockets/Create-Secure-url-with-space-expected.txt": [ - "212012d32e644e0c2acdab195af159e9cb9cf313", + "23529ef43ba73e6f6d52f1dfeb022ae70e49e289", "support" ], "websockets/Create-Secure-url-with-space.htm": [ @@ -289284,7 +289585,7 @@ "testharness" ], "websockets/Create-blocked-port-expected.txt": [ - "d0f6c6eebe02d02ae05b9364f93927214632579b", + "445a71ddcca941b8e76fa2702d992bc33d6876d8", "support" ], "websockets/Create-blocked-port.htm": [ @@ -289308,7 +289609,7 @@ "testharness" ], "websockets/Create-protocols-repeated-case-insensitive-expected.txt": [ - "7c1310532fa4bb427a461181dff73d8b944560cc", + "1be35fa8112ceeb8fed71b1c8d10d78187e50be2", "support" ], "websockets/Create-protocols-repeated-case-insensitive.htm": [ @@ -290148,7 +290449,7 @@ "testharness" ], "websockets/unload-a-document/004-expected.txt": [ - "26bff38e3eccc0d2151b026c8199a9ca60aed7cf", + "eea1fa88c6bb42e39065c6d8acd1dc6ea26b42b3", "support" ], "websockets/unload-a-document/004.html": [ @@ -290288,7 +290589,7 @@ "support" ], "webstorage/idlharness-expected.txt": [ - "5f6de914348f8340db088f5c8877e92902227f7f", + "06a66fbfe5cab8c3de51c6230b6477a6e852cad0", "support" ], "webstorage/idlharness.html": [ @@ -290348,7 +290649,7 @@ "support" ], "webstorage/storage_builtins-expected.txt": [ - "3a515ac8b0d5010b829896ecb85b6db295145a18", + "730fa1dbc8c9128dbf0bff0f39c610f1e4581e9d", "support" ], "webstorage/storage_builtins.html": [ @@ -290428,7 +290729,7 @@ "testharness" ], "webstorage/storage_string_conversion-expected.txt": [ - "c0b3a51a27cbd52e962ef1dcdb905433f844a45f", + "9a84c6a772b3b74f168dcc10b8e9b449a1a0359d", "support" ], "webstorage/storage_string_conversion.html": [ @@ -290536,7 +290837,7 @@ "support" ], "webvr/idlharness-expected.txt": [ - "57556d1b78db42d2bfd8582376d4c200b1c9ebe4", + "7be19ec91c6fb7035f29432a0760e3f09b6886fe", "support" ], "webvr/idlharness.html": [ @@ -290564,7 +290865,7 @@ "support" ], "webvtt/api/VTTCue/constructor-expected.txt": [ - "4ff0d66c5acf66b7e45082fc0ce0a26bc24a84e4", + "ebda94e70c66fd07e85a5745e9b7a596694fed5b", "support" ], "webvtt/api/VTTCue/constructor.html": [ @@ -290572,7 +290873,7 @@ "testharness" ], "webvtt/api/VTTCue/getCueAsHTML-expected.txt": [ - "4adc8860251f5e0afe9d7778c1bcb4578101f3ee", + "0486dd4a6d8ae0d25ae7e925dedf50e16bf7bd3b", "support" ], "webvtt/api/VTTCue/getCueAsHTML.html": [ @@ -290584,7 +290885,7 @@ "testharness" ], "webvtt/api/VTTCue/lineAlign-expected.txt": [ - "c7f81b0d309b52f40f4dc85822d267e593f45501", + "b71b483123174d02c99f0e8aa2c53fff6e2f4513", "support" ], "webvtt/api/VTTCue/lineAlign.html": [ @@ -290596,7 +290897,7 @@ "testharness" ], "webvtt/api/VTTCue/positionAlign-expected.txt": [ - "5adb7397284eab9a5fdb42053298ef71602b24b3", + "5638b1f4c4676ae80bea4fe81cf97f82372a29e5", "support" ], "webvtt/api/VTTCue/positionAlign.html": [ @@ -290604,7 +290905,7 @@ "testharness" ], "webvtt/api/VTTCue/region-expected.txt": [ - "44e6b7eaa3ba5c2f13afec8993f57bf6ee86d4cf", + "19cff1ac1c813986372ee86c33832a8f0d3226ad", "support" ], "webvtt/api/VTTCue/region.html": [ @@ -290616,7 +290917,7 @@ "testharness" ], "webvtt/api/VTTCue/snapToLines-expected.txt": [ - "a86f9434e1e68fdc9be7fdc7bcc088c7567e5009", + "34ad9c496ee446581d020f86bbcdaa5822224470", "support" ], "webvtt/api/VTTCue/snapToLines.html": [ @@ -290636,7 +290937,7 @@ "testharness" ], "webvtt/api/VTTRegion/id-expected.txt": [ - "7c1be1c906610e403d14fcc6ba17cd46fd9fe517", + "4c86ea904b3b882c9c34015696238e909247e464", "support" ], "webvtt/api/VTTRegion/id.html": [ @@ -290675,8 +290976,12 @@ "0e4808b113d2ff6fc4963ff0e5803ad6616288d2", "support" ], + "webvtt/api/historical.html": [ + "9a45972a29621122da23404a7adc4d237fd7c093", + "testharness" + ], "webvtt/api/interfaces-expected.txt": [ - "80bbd29064be0867a2e0c43372b15466644d3f06", + "a2f2f5460c94a13aa5d158e24cda598bede1b4f6", "support" ], "webvtt/api/interfaces.html": [ @@ -290724,7 +291029,7 @@ "support" ], "webvtt/parsing/cue-text-parsing/tests/entities-expected.txt": [ - "4e72ebd4760265c6ac9db55058882ca32bbd4b5d", + "a6d8983f92604333d5ccf1bd0b18a3262646794a", "support" ], "webvtt/parsing/cue-text-parsing/tests/entities.html": [ @@ -290740,7 +291045,7 @@ "testharness" ], "webvtt/parsing/cue-text-parsing/tests/timestamps-expected.txt": [ - "b11630927d58579f1a161633d44a9578370b552a", + "063b54e70ba755b3d018df1fe318e01da1fd17f7", "support" ], "webvtt/parsing/cue-text-parsing/tests/timestamps.html": [ @@ -290760,7 +291065,7 @@ "support" ], "webvtt/parsing/file-parsing/signature-invalid-expected.txt": [ - "1cf0b96af7c8910c13cc7b2bfa56f405072cf13d", + "ec6e433683e802b9ad0fa3f27294ba682b201b8e", "support" ], "webvtt/parsing/file-parsing/signature-invalid.html": [ @@ -290996,7 +291301,7 @@ "testharness" ], "webvtt/parsing/file-parsing/tests/regions-id-expected.txt": [ - "027df7cb647f415e284a59901f4d0ad4fca8910e", + "57eca6d76181045ce65f4f54b84ea14ef7dd14a4", "support" ], "webvtt/parsing/file-parsing/tests/regions-id.html": [ @@ -291004,7 +291309,7 @@ "testharness" ], "webvtt/parsing/file-parsing/tests/regions-lines-expected.txt": [ - "707e4f90710d6128571945bd650ccf54c62f3ffb", + "2a2a86be765cd59bbc634d4e7326ffc0902a7e44", "support" ], "webvtt/parsing/file-parsing/tests/regions-lines.html": [ @@ -291012,7 +291317,7 @@ "testharness" ], "webvtt/parsing/file-parsing/tests/regions-old-expected.txt": [ - "8f75c254de6224e8d8009ab55c8d6913b75d2fac", + "846fb6d0ecd2f4d6d3a754b0c4d1cb5a927ca46a", "support" ], "webvtt/parsing/file-parsing/tests/regions-old.html": [ @@ -291020,7 +291325,7 @@ "testharness" ], "webvtt/parsing/file-parsing/tests/regions-regionanchor-expected.txt": [ - "e5f6cbc3394bda0e9c27f66e071e0bc1c0e0c212", + "cd79c344977fdd407e70cace1a2b6ae28b18ef4d", "support" ], "webvtt/parsing/file-parsing/tests/regions-regionanchor.html": [ @@ -291028,7 +291333,7 @@ "testharness" ], "webvtt/parsing/file-parsing/tests/regions-scroll-expected.txt": [ - "d4e5bce16810cf613e9538d59920335bbb4bd41e", + "f42405da47a03f808579afa00a5b97ea31788462", "support" ], "webvtt/parsing/file-parsing/tests/regions-scroll.html": [ @@ -291036,7 +291341,7 @@ "testharness" ], "webvtt/parsing/file-parsing/tests/regions-viewportanchor-expected.txt": [ - "a36a55def93772d21c792d1e3901deb1df63bfb5", + "4a41e2f63f127a697654fc61ce72089c92346552", "support" ], "webvtt/parsing/file-parsing/tests/regions-viewportanchor.html": [ @@ -291048,7 +291353,7 @@ "testharness" ], "webvtt/parsing/file-parsing/tests/settings-line-expected.txt": [ - "20049badd319d08af248d757b25cd27125f5ff6d", + "105ae7f12081679e142e210d0a727cbe1794aa25", "support" ], "webvtt/parsing/file-parsing/tests/settings-line.html": [ @@ -291060,7 +291365,7 @@ "testharness" ], "webvtt/parsing/file-parsing/tests/settings-position-expected.txt": [ - "bc8f6b67652a73c6ff2eb3d40184e7d034f457f1", + "f58e097bed567404a78ee7a1a3bfc8c6f5b74957", "support" ], "webvtt/parsing/file-parsing/tests/settings-position.html": [ @@ -291068,7 +291373,7 @@ "testharness" ], "webvtt/parsing/file-parsing/tests/settings-region-expected.txt": [ - "90b5389035ecf6ba6780c6e8d81c471584251ad2", + "1e386932457547bffcbb80b470095432102c774b", "support" ], "webvtt/parsing/file-parsing/tests/settings-region.html": [ @@ -293700,7 +294005,7 @@ "support" ], "workers/constructors/SharedWorker/null-arguments-expected.txt": [ - "cd16014c428b2c54b2349b541a29f9d0d0da5f4f", + "591a606a0084f5d0c456eeba13400d143ffaec5d", "support" ], "workers/constructors/SharedWorker/null-arguments.html": [ @@ -293764,7 +294069,7 @@ "testharness" ], "workers/constructors/Worker/DedicatedWorkerGlobalScope-members.worker-expected.txt": [ - "7ba5cdfe31f5d1745745098690fa2fc1911cccbb", + "c04f292248eb46f0c5720acfa4ef08abe110beb2", "support" ], "workers/constructors/Worker/DedicatedWorkerGlobalScope-members.worker.js": [ @@ -293784,7 +294089,7 @@ "testharness" ], "workers/constructors/Worker/expected-self-properties.worker-expected.txt": [ - "48a31f61d909912f0bdcc033e7c80345bd1074f3", + "4e5427c2b8048f0892045a083c8239d20838532e", "support" ], "workers/constructors/Worker/expected-self-properties.worker.js": [ @@ -293840,7 +294145,7 @@ "testharness" ], "workers/interfaces.worker-expected.txt": [ - "4ae85cb913879ed9b1605223bc476aa763d4450a", + "7f2bac7dac8c4884656ec13da940ce031170b58b", "support" ], "workers/interfaces.worker.js": [ @@ -293996,7 +294301,7 @@ "testharness" ], "workers/interfaces/WorkerUtils/importScripts/002.worker-expected.txt": [ - "1deca0f6f12464c79e8741736f9cf0b4fda1f105", + "31cc4d05045254fabd148fc63ba85a4a729da22a", "support" ], "workers/interfaces/WorkerUtils/importScripts/002.worker.js": [ @@ -294168,7 +294473,7 @@ "testharness" ], "workers/semantics/encodings/001-expected.txt": [ - "a46c328e32ad5121ec78e91f7d40ede7506659da", + "63e5759b4d47df37e67a2033d4b904c94c725b38", "support" ], "workers/semantics/encodings/001.html": [ @@ -294180,7 +294485,7 @@ "support" ], "workers/semantics/encodings/002-expected.txt": [ - "b04ed9fa88d879870c30e9693c27af54b2e71779", + "181eb0c491349baba75f288d988baebbe5369158", "support" ], "workers/semantics/encodings/002.html": [ @@ -294208,7 +294513,7 @@ "testharness" ], "workers/semantics/interface-objects/001.worker-expected.txt": [ - "db347813f4b32bf859a9104ca361c6d44a7c330d", + "1666a52757b8941747ade89baa346768cc99ada3", "support" ], "workers/semantics/interface-objects/001.worker.js": [ @@ -294216,7 +294521,7 @@ "testharness" ], "workers/semantics/interface-objects/002.worker-expected.txt": [ - "a85dc592d3688af3ea9d4df8d93f699da34d8188", + "b721de8426005a7bc4c202349a2900aed52bc561", "support" ], "workers/semantics/interface-objects/002.worker.js": [ @@ -294388,7 +294693,7 @@ "support" ], "workers/shared-worker-name-via-options-expected.txt": [ - "980e614565a7e6894a5f096ea92ad47f6b904e22", + "fb6a34294390c9d79bcaa1d6ddeaf1f59d95904f", "support" ], "workers/shared-worker-name-via-options.html": [
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/imagebitmap/createImageBitmap-drawImage-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/imagebitmap/createImageBitmap-drawImage-expected.txt deleted file mode 100644 index 0c1c01c..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/imagebitmap/createImageBitmap-drawImage-expected.txt +++ /dev/null
@@ -1,9 +0,0 @@ -This is a testharness.js-based test. -PASS createImageBitmap from a HTMLImageElement, and drawImage on the created ImageBitmap -PASS createImageBitmap from a Blob, and drawImage on the created ImageBitmap -FAIL createImageBitmap from a HTMLCanvasElement, and drawImage on the created ImageBitmapassert_not_equals: got disallowed value undefined -PASS createImageBitmap from an ImageBitmap, and drawImage on the created ImageBitmap -PASS createImageBitmap from an ImageData, and drawImage on the created ImageBitmap -PASS createImageBitmap from a HTMLVideoElement, and drawImage on the created ImageBitmap -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/imagebitmap/createImageBitmap-drawImage.html b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/imagebitmap/createImageBitmap-drawImage.html index 5c69041..39c5ac1c 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/2dcontext/imagebitmap/createImageBitmap-drawImage.html +++ b/third_party/WebKit/LayoutTests/external/wpt/2dcontext/imagebitmap/createImageBitmap-drawImage.html
@@ -37,7 +37,7 @@ promise_test(function() { var testCanvas = document.createElement("canvas"); initializeTestCanvas(testCanvas); - testDrawImageBitmap(testCanvas); + return testDrawImageBitmap(testCanvas); }, "createImageBitmap from a HTMLCanvasElement, and drawImage on the created ImageBitmap"); promise_test(function() {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/audio-output/HTMLMediaElement-sinkId-idl.html b/third_party/WebKit/LayoutTests/external/wpt/audio-output/HTMLMediaElement-sinkId-idl.html new file mode 100644 index 0000000..4260672 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/audio-output/HTMLMediaElement-sinkId-idl.html
@@ -0,0 +1,50 @@ +<!doctype html> +<html> +<head> +<meta charset=utf-8> +<title>IDL check of sinkId on HTMLMediaElement</title> +<link rel="author" title="Dominique Hazael-Massieux" href="mailto:dom@w3.org"/> +<link rel="help" href="https://www.w3.org/TR/audio-output/#htmlmediaelement-extensions"> +</head> +<body> + +<h1 class="instructions">Description</h1> +<p class="instructions">This test verifies the availability of <code>sinkId</code>/<code>setSinkId</code> on the HTMLMediaElement interface.</p> +<div id='log'></div> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src=/resources/WebIDLParser.js></script> +<script src=/resources/idlharness.js></script> + +<!-- --> +<script type="text/plain" id='untested_idl'> + +interface HTMLMediaElement { +}; + +interface HTMLAudioElement : HTMLMediaElement { +}; + +interface HTMLVideoElement : HTMLMediaElement { +}; +</script> +<script type="text/plain" id="idl"> +// The IDL is copied from the 15 December 2016 draft. +partial interface HTMLMediaElement { + readonly attribute DOMString sinkId; + Promise<void> setSinkId(DOMString sinkId); +};</script> +<script> +(function() { + var idl_array = new IdlArray(); + idl_array.add_untested_idls(document.getElementById('untested_idl').textContent); + idl_array.add_idls(document.getElementById('idl').textContent); + window.audio = document.createElement("audio"); + window.video = document.createElement("video"); + idl_array.add_objects({"HTMLAudioElement": ["audio"], "HTMLVideoElement": ["video"]}); + idl_array.test(); + done(); +})(); +</script> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/audio-output/setSinkId-manual.https.html b/third_party/WebKit/LayoutTests/external/wpt/audio-output/setSinkId-manual.https.html new file mode 100644 index 0000000..a083cdf0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/audio-output/setSinkId-manual.https.html
@@ -0,0 +1,132 @@ +<!doctype html> +<html> +<head> +<title>Test setSinkId behavior with permissions / device changes</title> +<link rel="author" title="Dominique Hazael-Massieux" href="mailto:dom@w3.org"/> +<link rel="help" href="https://www.w3.org/TR/audio-output/#dom-htmlmediaelement-setsinkid"> +<meta name="timeout" content="long"> + +</head> +<body> +<h1 class="instructions">Description</h1> +<p class="instructions">This test checks that <code>setSinkId</code> follows the algorithm, this includes manually checking the proper rendering on new output devices.</p> +<p class="instructions">When prompted to access microphones, please accept as this is the only current way to get permissions for associated output devices.</p> +<p class="instructions">For each authorized output device, check that selecting it makes the audio beat rendered on the corresponding device.</p> +<p>Available but unauthorized devices (only those for which we can gain permission can be selected):</p> +<ul id="available"></ul> +<p>Authorized devices:</p> +<ul id="authorized"></ul> +<audio controls id="beat" src="/media/sound_5.mp3" loop></audio> + +<div id='log'></div> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script> +"use strict"; + +const is_output = d => d.kind === "audiooutput"; +const by_id = (id) => d => d.groupId === id; +const is_input = d => d.kind === "audioinput"; +const audio = document.getElementById("beat"); +const available = document.getElementById("available"); +const authorized = document.getElementById("authorized"); + +let outputList; + +const selectDeviceTester = (t) => (e) => { + const groupId = e.target.dataset["groupid"]; + const device = outputList.find(by_id(groupId)); + if (audio.paused) audio.play(); + promise_test(pt => audio.setSinkId(device.deviceId).then(() => { + assert_equals(device.deviceId, audio.sinkId); + + const pass = document.createElement("button"); + const fail = document.createElement("button"); + + const result = (bool) => () => { + assert_true(bool, "Sound rendered on right device"); + fail.remove(); + pass.remove(); + audio.pause(); + e.target.checked = false; + e.target.disabled = true; + t.done(); + }; + + pass.style.backgroundColor = "#0f0"; + pass.textContent = "\u2713 Sound plays on " + device.label; + pass.addEventListener("click", result(true)); + + fail.style.backgroundColor = "#f00"; + fail.textContent = "\u274C Sound doesn't play on " + device.label; + fail.addEventListener("click", result(true)); + + const container = e.target.parentNode.parentNode; + container.appendChild(pass); + container.appendChild(fail); + }), "setSinkId for " + device.label + " resolves"); +}; + +const addAuthorizedDevice = (groupId) => { + const device = outputList.find(by_id(groupId)); + const async_t = async_test("Selecting output device " + device.label + " makes the audio rendered on the proper device"); + const li = document.createElement("li"); + const label = document.createElement("label"); + const input = document.createElement("input"); + input.type = "radio"; + input.name = "device"; + input.dataset["groupid"] = device.groupId; + input.addEventListener("change", selectDeviceTester(async_t)); + const span = document.createElement("span"); + span.textContent = device.label; + label.appendChild(input); + label.appendChild(span); + li.appendChild(label); + authorized.appendChild(li); +}; + +const authorizeDeviceTester = (t) => (e) => { + const groupId = e.target.dataset["groupid"]; + navigator.mediaDevices.getUserMedia({audio: {groupId}}) + .then( () => { + addAuthorizedDevice(groupId); + t.done(); + }); +}; + +promise_test(gum => + navigator.mediaDevices.getUserMedia({audio: true}).then( + () => { + promise_test(t => + navigator.mediaDevices.enumerateDevices().then(list => { + assert_not_equals(list.find(is_output), undefined, "media device list includes at least one audio output device"); + outputList = list.filter(is_output); + outputList.forEach(d => { + const li = document.createElement("li"); + assert_not_equals(d.label, "", "Audio Output Device Labels are available after permission grant"); + li.textContent = d.label; + // Check permission + promise_test(perm => navigator.permissions.query({name: "speaker", deviceId: d.deviceId}).then(({state}) => { + if (state === "granted") { + addAuthorizedDevice(d.groupId); + } else if (state === "prompt") { + const inp = list.find(inp => inp.kind === "audioinput" && inp.groupId === d.groupId); + if (inp || true) { + const async_t = async_test("Authorizing output devices via permission requests for microphones works"); + const button = document.createElement("button"); + button.textContent = "Authorize access"; + button.dataset["groupid"] = d.groupId; + button.addEventListener("click", async_t.step_func_done(authorizeDeviceTester(async_t))); + li.appendChild(button); + } + available.appendChild(li); + } + }, () => { + // if we can't query the permission, we assume it's granted :/ + addAuthorizedDevice(d.groupId); + }) + , "Query permission to use " + d.label); + }); + }), "List media devices"); + }), "Authorize mike access"); +</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/audio-output/setSinkId.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/audio-output/setSinkId.https-expected.txt new file mode 100644 index 0000000..9c40114 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/audio-output/setSinkId.https-expected.txt
@@ -0,0 +1,7 @@ +This is a testharness.js-based test. +PASS setSinkId on default audio output should always work +PASS setSinkId fails with NotFoundError on made up deviceid +PASS List media devices +FAIL Correctly reacts to setting known deviceid as sinkid 0assert_equals: On known devices, the only possible failure of setSinkId is a securityerror expected "SecurityError" but got "NotFoundError" +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/audio-output/setSinkId.https.html b/third_party/WebKit/LayoutTests/external/wpt/audio-output/setSinkId.https.html new file mode 100644 index 0000000..2ce0b48 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/audio-output/setSinkId.https.html
@@ -0,0 +1,45 @@ +<!doctype html> +<html> +<head> +<title>Test setSinkId behavior </title> +<link rel="author" title="Dominique Hazael-Massieux" href="mailto:dom@w3.org"/> +<link rel="help" href="https://www.w3.org/TR/audio-output/#dom-htmlmediaelement-setsinkid"> +</head> +<body> +<h1 class="instructions">Description</h1> +<p class="instructions">This test checks that <code>setSinkId</code> follows the algorithm (but does not consider actual rendering of the audio which needs to be manual).</p> +<div id='log'></div> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script> +"use strict"; + +const is_output = d => d.kind === "audiooutput"; +const audio = new Audio(); + +promise_test(t => audio.setSinkId(""), "setSinkId on default audio output should always work"); + +promise_test(t => promise_rejects(t, "NotFoundError", audio.setSinkId("inexistent_device_id")), "setSinkId fails with NotFoundError on made up deviceid"); + +promise_test(t => + navigator.mediaDevices.enumerateDevices().then(list => { + assert_not_equals(list.find(is_output), undefined, "media device list includes at least one audio output device"); + // since we haven't gained any specific permission, + // for all listed audio output devices, calling setSinkId with device id can + // either create a security exception or work and thus reflect the deviceId + let acceptedDevice = 0; + list.filter(is_output).forEach((d,i) => promise_test(td => audio.setSinkId(d.deviceId).then(r => { + assert_equals(r, undefined, "setSinkId resolves with undefined"); + assert_equals(audio.sinkId, d.deviceId, "when it resolves, setSinkId updates sinkId to the requested deviceId"); + assert_equals(acceptedDevice, 0, "only one output device can be set without permission"); + acceptedDevice++; + promise_test(t => audio.setSinkId(d.deviceId), "resetting sinkid on same current value should always work"); + promise_test(t => audio.setSinkId(""), "resetting sinkid on default audio output should always work"); + }, e => { + assert_equals(e.name, "SecurityError", "On known devices, the only possible failure of setSinkId is a securityerror"); // assuming AbortError can't happen in the test environment by default + }), "Correctly reacts to setting known deviceid as sinkid " + i)); + }), "List media devices"); + +</script> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/cssom/getComputedStyle-pseudo.html b/third_party/WebKit/LayoutTests/external/wpt/cssom/getComputedStyle-pseudo.html index fa2a03c..c8a4506e 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/cssom/getComputedStyle-pseudo.html +++ b/third_party/WebKit/LayoutTests/external/wpt/cssom/getComputedStyle-pseudo.html
@@ -55,6 +55,9 @@ assert_equals(getComputedStyle(has_no_pseudos, pseudo).position, "static", "Nonexistent " + pseudo + " pseudo-element shouldn't claim to have " + "the same style as the originating element"); + assert_equals(getComputedStyle(has_no_pseudos, pseudo).width, "auto", + "Nonexistent " + pseudo + " pseudo-element shouldn't claim to have " + + "definite size"); }); }, "Resolution of nonexistent pseudo-element styles"); test(function() {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-data-url-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-data-url-expected.txt new file mode 100644 index 0000000..3ac6255b --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-data-url-expected.txt
@@ -0,0 +1,6 @@ +This is a testharness.js-based test. +FAIL track element data: URL No CORSassert_unreached: got error event Reached unreachable code +PASS track element data: URL anonymous +PASS track element data: URL use-credentials +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-data-url.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-data-url.html new file mode 100644 index 0000000..26ff90d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/embedded-content/media-elements/track/track-element/track-data-url.html
@@ -0,0 +1,30 @@ +<!doctype html> +<title>track element data: URL</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div id=log></div> +<script> +[null, "anonymous", "use-credentials"].forEach(function(crossOriginValue) { + async_test(function() { + var video = document.createElement('video'); + if (crossOriginValue !== null) { + video.setAttribute('crossorigin', crossOriginValue); + } + document.body.appendChild(video); + var t = document.createElement('track'); + t.onload = this.step_func_done(function() { + assert_equals(t.track.cues.length, 1); + assert_equals(t.track.cues[0].startTime, 1); + assert_equals(t.track.cues[0].endTime, 2); + assert_equals(t.track.cues[0].id, 'x'); + assert_equals(t.track.cues[0].text, 'test'); + }); + t.onerror = this.step_func(function() { + assert_unreached('got error event'); + }); + t.src = 'data:text/vtt,'+encodeURIComponent('WEBVTT\n\nx\n00:00:01.000 --> 00:00:02.000\ntest\n\n'); + t.track.mode = 'showing'; + video.appendChild(t); + }, document.title + ' ' + (crossOriginValue ? crossOriginValue : 'No CORS')); +}); +</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/imagebitmap/createImageBitmap-invalid-args.html b/third_party/WebKit/LayoutTests/external/wpt/imagebitmap/createImageBitmap-invalid-args.html new file mode 100644 index 0000000..a0bcf48 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/imagebitmap/createImageBitmap-invalid-args.html
@@ -0,0 +1,187 @@ +<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> +<html> +<head> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +</head> +<body> +<script> + +function makeCanvas() { + return new Promise(resolve => { + let canvas = document.createElement('canvas'); + canvas.setAttribute('width', '10'); + canvas.setAttribute('height', '10'); + resolve(canvas); + }); +} + +function makeOffscreenCanvas() { + return new Promise(resolve => { + let canvas = new OffscreenCanvas(10, 10); + resolve(canvas); + }); +} + +function makeOversizedCanvas() { + + return new Promise(resolve => { + let canvas = document.createElement('canvas'); + canvas.setAttribute('width', '100000000'); + canvas.setAttribute('height', '100000000'); + resolve(canvas); + }); +} + +function makeOversizedOffscreenCanvas() { + return new Promise(resolve =>{ + let canvas = new OffscreenCanvas(100000000, 100000000); + resolve(canvas); + }); +} + +function makeVideo() { + return new Promise(resolve => { + let video = document.createElement('video'); + video.addEventListener('canplaythrough', resolve.bind(undefined, video), false); + video.src = '/media/A4.ogv'; + }); +} + +function makeImage() { + return makeCanvas().then(canvas => { + let image = new Image(); + image.src = canvas.toDataURL(); + return new Promise(resolve => { + image.onload = resolve.bind(undefined, image); + }); + }); +} + +function makeImageData() { + return makeCanvas().then(canvas => { + return new Promise(function(resolve, reject) { + resolve(canvas.getContext('2d').getImageData(0, 0, 10, 10)); + }); + }); +} + +function makeImageBitmap() { + return makeCanvas().then(canvas => { + return createImageBitmap(canvas); + }); +} + +function makeBlob() { + return makeCanvas().then(canvas => { + return new Promise(resolve => { + canvas.toBlob(resolve); + }); + }); +} + +function makeInvalidBlob() { + return new Promise(resolve => { + resolve(new Blob()); // Blob with no data cannot be decoded. + }); +} + +imageSourceTypes = [ + { name: 'HTMLImageElement', factory: makeImage }, + { name: 'HTMLVideoElement', factory: makeVideo }, + { name: 'HTMLCanvasElement', factory: makeCanvas }, + { name: 'OffscreenCanvas', factory: makeOffscreenCanvas }, + { name: 'ImageData', factory: makeImageData }, + { name: 'ImageBitmap', factory: makeImageBitmap }, + { name: 'Blob', factory: makeBlob }, +]; + +testCases = [ + { + description: 'createImageBitmap with a <sourceType> source and sw set to ' + + '0 rejects with a RangeError.', + promiseTestFunction: + (source, t) => { + return promise_rejects(t, new RangeError(), + createImageBitmap(source, 0, 0, 0, 10)); + } + }, + { + description: 'createImageBitmap with a <sourceType> source and sh set to ' + + '0 rejects with a RangeError.', + promiseTestFunction: + (source, t) => { + return promise_rejects(t, new RangeError(), + createImageBitmap(source, 0, 0, 10, 0)); + } + }, + { + // This case is not explicitly documented in the specification for + // createImageBitmap, but it is expected that internal failures cause + // + description: 'createImageBitmap with a <sourceType> source and oversized ' + + '(unallocatable) crop region rejects with an InvalidStateError ' + + 'DOMException.', + promiseTestFunction: + (source, t) => { + return promise_rejects(t, new DOMException('', 'InvalidStateError'), + createImageBitmap(source, 0, 0, 100000000, 100000000)); + } + }, +]; + +// Generate the test matrix for each sourceType + testCase combo. +imageSourceTypes.forEach(imageSourceType => { + testCases.forEach(testCase => { + let description = testCase.description.replace('<sourceType>', + imageSourceType.name); + promise_test( t => { + return imageSourceType.factory().then(source => { + return testCase.promiseTestFunction(source, t); + }); + }, description); + }); +}); + +promise_test( t => { + return promise_rejects(t, new TypeError(), createImageBitmap(undefined)); +}, "createImageBitmap with undefined image source rejects with a TypeError."); + +promise_test( t => { + return promise_rejects(t, new TypeError(), createImageBitmap(null)); +}, "createImageBitmap with null image source rejects with a TypeError."); + +promise_test( t => { + return promise_rejects(t, new DOMException('', 'InvalidStateError'), + createImageBitmap(new Image())); +}, "createImageBitmap with empty image source rejects with a InvalidStateError."); + +promise_test( t => { + return promise_rejects(t, new DOMException('', 'InvalidStateError'), + createImageBitmap(document.createElement('video'))); +}, "createImageBitmap with empty video source rejects with a InvalidStateError."); + +promise_test( t => { + return makeOversizedCanvas().then(canvas => { + return promise_rejects(t, new DOMException('', 'InvalidStateError'), + createImageBitmap(canvas)); + }); +}, "createImageBitmap with an oversized canvas source rejects with a RangeError."); + +promise_test( t => { + return makeOversizedOffscreenCanvas().then(offscreenCanvas => { + return promise_rejects(t, new DOMException('', 'InvalidStateError'), + createImageBitmap(offscreenCanvas)); + }); +}, "createImageBitmap with an invalid OffscreenCanvas source rejects with a RangeError."); + +promise_test( t => { + return makeInvalidBlob().then(blob => { + return promise_rejects(t, new DOMException('', 'InvalidStateError'), + createImageBitmap(blob)); + }); +}, "createImageBitmap with an undecodable blob source rejects with an InvalidStateError."); + +</script> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/payment-request/historical.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/payment-request/historical.https-expected.txt new file mode 100644 index 0000000..e6077d6c2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/payment-request/historical.https-expected.txt
@@ -0,0 +1,12 @@ +This is a testharness.js-based test. +PASS paymentRequestID in PaymentRequest +PASS paymentRequestID in PaymentResponse +PASS careOf in PaymentAddress +PASS totalAmount in PaymentResponse +PASS paymentRequestId in PaymentRequest +PASS paymentRequestId in PaymentResponse +FAIL supportedMethods must not support sequence<DOMString>assert_throws: function "() => { + new PaymentRequest([{supportedMethods: methods}], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}); + }" threw object "[object Object]" ("sequence<DOMString> conversion is not allowed") expected object "[object Object]" ("toString should be called") +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/payment-request/historical.https.html b/third_party/WebKit/LayoutTests/external/wpt/payment-request/historical.https.html index ba518f4..b7880a2 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/payment-request/historical.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/payment-request/historical.https.html
@@ -24,4 +24,16 @@ assert_false(member in window[interf].prototype); }, member + ' in ' + interf); }); + +// https://github.com/w3c/payment-request/pull/551 +test(() => { + const methods = []; + const expectedError = {name: 'toString should be called'}; + const unexpectedError = {name: 'sequence<DOMString> conversion is not allowed'}; + methods.toString = () => { throw expectedError; }; + Object.defineProperty(methods, '0', { get: () => { throw unexpectedError; } }); + assert_throws(expectedError, () => { + new PaymentRequest([{supportedMethods: methods}], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}); + }); +}, 'supportedMethods must not support sequence<DOMString>'); </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/register-link-element.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/register-link-element.https-expected.txt deleted file mode 100644 index 9d670b7d..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/register-link-element.https-expected.txt +++ /dev/null
@@ -1,73 +0,0 @@ -This is a testharness.js-based test. -PASS Registering normal scope -PASS Registering scope with fragment -PASS Registering same scope as the script directory -FAIL Registering same scope as the script directory without the last slashTest bug: need to pass exception to assert_throws() -FAIL Registration scope outside the script directoryTest bug: need to pass exception to assert_throws() -FAIL Registering scope outside domainTest bug: need to pass exception to assert_throws() -FAIL Registering script outside domainTest bug: need to pass exception to assert_throws() -FAIL Registering non-existent scriptTest bug: need to pass exception to assert_throws() -FAIL Registering invalid chunked encoding scriptTest bug: need to pass exception to assert_throws() -FAIL Registering invalid chunked encoding script with flushTest bug: need to pass exception to assert_throws() -FAIL Registering script with no MIME typeTest bug: need to pass exception to assert_throws() -FAIL Registering script with bad MIME typeTest bug: need to pass exception to assert_throws() -FAIL Registering script with good MIME type application/ecmascriptpromise_test: Unhandled rejection with value: object "[object Event]" -PASS Registering script that imports script with good MIME type application/ecmascript -PASS Registering script with good MIME type application/javascript -PASS Registering script that imports script with good MIME type application/javascript -FAIL Registering script with good MIME type application/x-ecmascriptpromise_test: Unhandled rejection with value: object "[object Event]" -PASS Registering script that imports script with good MIME type application/x-ecmascript -PASS Registering script with good MIME type application/x-javascript -PASS Registering script that imports script with good MIME type application/x-javascript -FAIL Registering script with good MIME type text/ecmascriptpromise_test: Unhandled rejection with value: object "[object Event]" -PASS Registering script that imports script with good MIME type text/ecmascript -PASS Registering script with good MIME type text/javascript -PASS Registering script that imports script with good MIME type text/javascript -FAIL Registering script with good MIME type text/javascript1.0promise_test: Unhandled rejection with value: object "[object Event]" -PASS Registering script that imports script with good MIME type text/javascript1.0 -FAIL Registering script with good MIME type text/javascript1.1promise_test: Unhandled rejection with value: object "[object Event]" -PASS Registering script that imports script with good MIME type text/javascript1.1 -FAIL Registering script with good MIME type text/javascript1.2promise_test: Unhandled rejection with value: object "[object Event]" -PASS Registering script that imports script with good MIME type text/javascript1.2 -FAIL Registering script with good MIME type text/javascript1.3promise_test: Unhandled rejection with value: object "[object Event]" -PASS Registering script that imports script with good MIME type text/javascript1.3 -FAIL Registering script with good MIME type text/javascript1.4promise_test: Unhandled rejection with value: object "[object Event]" -PASS Registering script that imports script with good MIME type text/javascript1.4 -FAIL Registering script with good MIME type text/javascript1.5promise_test: Unhandled rejection with value: object "[object Event]" -PASS Registering script that imports script with good MIME type text/javascript1.5 -FAIL Registering script with good MIME type text/jscriptpromise_test: Unhandled rejection with value: object "[object Event]" -PASS Registering script that imports script with good MIME type text/jscript -FAIL Registering script with good MIME type text/livescriptpromise_test: Unhandled rejection with value: object "[object Event]" -PASS Registering script that imports script with good MIME type text/livescript -FAIL Registering script with good MIME type text/x-ecmascriptpromise_test: Unhandled rejection with value: object "[object Event]" -PASS Registering script that imports script with good MIME type text/x-ecmascript -FAIL Registering script with good MIME type text/x-javascriptpromise_test: Unhandled rejection with value: object "[object Event]" -PASS Registering script that imports script with good MIME type text/x-javascript -FAIL Registering script that imports script with no MIME typeassert_unreached: Should have rejected: Registration of no MIME type imported script should fail. Reached unreachable code -FAIL Registering script that imports script with bad MIME typeassert_unreached: Should have rejected: Registration of plain text imported script should fail. Reached unreachable code -FAIL Registering redirected scriptTest bug: need to pass exception to assert_throws() -FAIL Registering script including parse errorTest bug: need to pass exception to assert_throws() -FAIL Registering script including undefined errorTest bug: need to pass exception to assert_throws() -FAIL Registering script including uncaught exceptionTest bug: need to pass exception to assert_throws() -PASS Registering script including caught exception -FAIL Registering script importing malformed scriptTest bug: need to pass exception to assert_throws() -FAIL Registering script importing non-existent scriptTest bug: need to pass exception to assert_throws() -PASS Scope including URL-encoded multibyte characters -PASS Scope including non-escaped multibyte characters -FAIL Script URL including URL-encoded slashTest bug: need to pass exception to assert_throws() -FAIL Script URL including uppercase URL-encoded slashTest bug: need to pass exception to assert_throws() -FAIL Scope including URL-encoded slashTest bug: need to pass exception to assert_throws() -FAIL Script URL including URL-encoded backslashTest bug: need to pass exception to assert_throws() -FAIL Script URL including uppercase URL-encoded backslashTest bug: need to pass exception to assert_throws() -FAIL Scope including URL-encoded backslashTest bug: need to pass exception to assert_throws() -PASS Script URL including self-reference -PASS Scope including self-reference -PASS Script URL including parent-reference -PASS Scope including parent-reference -FAIL Scope including parent-reference and not under the script directoryTest bug: need to pass exception to assert_throws() -FAIL Script URL including consecutive slashesTest bug: need to pass exception to assert_throws() -PASS Scope including consecutive slashes -FAIL Script URL is same-origin filesystem: URLTest bug: need to pass exception to assert_throws() -FAIL Scope URL is same-origin filesystem: URLTest bug: need to pass exception to assert_throws() -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/registration.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/registration.https-expected.txt deleted file mode 100644 index 4e95e0f..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/registration.https-expected.txt +++ /dev/null
@@ -1,73 +0,0 @@ -This is a testharness.js-based test. -PASS Registering normal scope -PASS Registering scope with fragment -PASS Registering same scope as the script directory -PASS Registering same scope as the script directory without the last slash -PASS Registration scope outside the script directory -PASS Registering scope outside domain -PASS Registering script outside domain -PASS Registering non-existent script -PASS Registering invalid chunked encoding script -PASS Registering invalid chunked encoding script with flush -PASS Registering script with no MIME type -PASS Registering script with bad MIME type -FAIL Registering script with good MIME type application/ecmascriptpromise_test: Unhandled rejection with value: object "SecurityError: Failed to register a ServiceWorker: The script has an unsupported MIME type ('application/ecmascript')." -PASS Registering script that imports script with good MIME type application/ecmascript -PASS Registering script with good MIME type application/javascript -PASS Registering script that imports script with good MIME type application/javascript -FAIL Registering script with good MIME type application/x-ecmascriptpromise_test: Unhandled rejection with value: object "SecurityError: Failed to register a ServiceWorker: The script has an unsupported MIME type ('application/x-ecmascript')." -PASS Registering script that imports script with good MIME type application/x-ecmascript -PASS Registering script with good MIME type application/x-javascript -PASS Registering script that imports script with good MIME type application/x-javascript -FAIL Registering script with good MIME type text/ecmascriptpromise_test: Unhandled rejection with value: object "SecurityError: Failed to register a ServiceWorker: The script has an unsupported MIME type ('text/ecmascript')." -PASS Registering script that imports script with good MIME type text/ecmascript -PASS Registering script with good MIME type text/javascript -PASS Registering script that imports script with good MIME type text/javascript -FAIL Registering script with good MIME type text/javascript1.0promise_test: Unhandled rejection with value: object "SecurityError: Failed to register a ServiceWorker: The script has an unsupported MIME type ('text/javascript1.0')." -PASS Registering script that imports script with good MIME type text/javascript1.0 -FAIL Registering script with good MIME type text/javascript1.1promise_test: Unhandled rejection with value: object "SecurityError: Failed to register a ServiceWorker: The script has an unsupported MIME type ('text/javascript1.1')." -PASS Registering script that imports script with good MIME type text/javascript1.1 -FAIL Registering script with good MIME type text/javascript1.2promise_test: Unhandled rejection with value: object "SecurityError: Failed to register a ServiceWorker: The script has an unsupported MIME type ('text/javascript1.2')." -PASS Registering script that imports script with good MIME type text/javascript1.2 -FAIL Registering script with good MIME type text/javascript1.3promise_test: Unhandled rejection with value: object "SecurityError: Failed to register a ServiceWorker: The script has an unsupported MIME type ('text/javascript1.3')." -PASS Registering script that imports script with good MIME type text/javascript1.3 -FAIL Registering script with good MIME type text/javascript1.4promise_test: Unhandled rejection with value: object "SecurityError: Failed to register a ServiceWorker: The script has an unsupported MIME type ('text/javascript1.4')." -PASS Registering script that imports script with good MIME type text/javascript1.4 -FAIL Registering script with good MIME type text/javascript1.5promise_test: Unhandled rejection with value: object "SecurityError: Failed to register a ServiceWorker: The script has an unsupported MIME type ('text/javascript1.5')." -PASS Registering script that imports script with good MIME type text/javascript1.5 -FAIL Registering script with good MIME type text/jscriptpromise_test: Unhandled rejection with value: object "SecurityError: Failed to register a ServiceWorker: The script has an unsupported MIME type ('text/jscript')." -PASS Registering script that imports script with good MIME type text/jscript -FAIL Registering script with good MIME type text/livescriptpromise_test: Unhandled rejection with value: object "SecurityError: Failed to register a ServiceWorker: The script has an unsupported MIME type ('text/livescript')." -PASS Registering script that imports script with good MIME type text/livescript -FAIL Registering script with good MIME type text/x-ecmascriptpromise_test: Unhandled rejection with value: object "SecurityError: Failed to register a ServiceWorker: The script has an unsupported MIME type ('text/x-ecmascript')." -PASS Registering script that imports script with good MIME type text/x-ecmascript -FAIL Registering script with good MIME type text/x-javascriptpromise_test: Unhandled rejection with value: object "SecurityError: Failed to register a ServiceWorker: The script has an unsupported MIME type ('text/x-javascript')." -PASS Registering script that imports script with good MIME type text/x-javascript -FAIL Registering script that imports script with no MIME typeassert_unreached: Should have rejected: Registration of no MIME type imported script should fail. Reached unreachable code -FAIL Registering script that imports script with bad MIME typeassert_unreached: Should have rejected: Registration of plain text imported script should fail. Reached unreachable code -PASS Registering redirected script -PASS Registering script including parse error -PASS Registering script including undefined error -PASS Registering script including uncaught exception -PASS Registering script including caught exception -PASS Registering script importing malformed script -PASS Registering script importing non-existent script -PASS Scope including URL-encoded multibyte characters -PASS Scope including non-escaped multibyte characters -PASS Script URL including URL-encoded slash -PASS Script URL including uppercase URL-encoded slash -PASS Scope including URL-encoded slash -PASS Script URL including URL-encoded backslash -PASS Script URL including uppercase URL-encoded backslash -PASS Scope including URL-encoded backslash -PASS Script URL including self-reference -PASS Scope including self-reference -PASS Script URL including parent-reference -PASS Scope including parent-reference -PASS Scope including parent-reference and not under the script directory -PASS Script URL including consecutive slashes -PASS Scope including consecutive slashes -PASS Script URL is same-origin filesystem: URL -PASS Scope URL is same-origin filesystem: URL -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webvtt/api/historical.html b/third_party/WebKit/LayoutTests/external/wpt/webvtt/api/historical.html new file mode 100644 index 0000000..8f6c09b --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/webvtt/api/historical.html
@@ -0,0 +1,35 @@ +<!doctype html> +<title>Historical WebVTT APIs must not be supported</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script> +// Also see /html/semantics/embedded-content/media-elements/historical.html + +[ + // https://github.com/w3c/webvtt/pull/31 + ['VTTCue', 'regionId'], + ['TextTrack', 'regions'], + ['TextTrack', 'addRegion'], + ['TextTrack', 'removeRegion'], + ['VTTRegion', 'track'], + // id re-introduced in https://github.com/w3c/webvtt/pull/349/files + +].forEach(function(feature) { + var interf = feature[0]; + var member = feature[1]; + test(function() { + assert_true(interf in window, interf + ' is not supported'); + assert_false(member in window[interf].prototype); + }, interf + ' ' + member + ' member must be nuked'); +}); + +[ + // https://github.com/w3c/webvtt/pull/31 + 'VTTRegionList', + +].forEach(function(interf) { + test(function() { + assert_false(interf in window); + }, interf + ' interface must be nuked'); +}); +</script>
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/canvas-ImageBitmap-close-expected.txt b/third_party/WebKit/LayoutTests/fast/canvas/canvas-ImageBitmap-close-expected.txt index a11f08f..753c0c8 100644 --- a/third_party/WebKit/LayoutTests/fast/canvas/canvas-ImageBitmap-close-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/canvas/canvas-ImageBitmap-close-expected.txt
@@ -12,7 +12,7 @@ PASS ctx.drawImage(bitmap, 0, 0) threw exception InvalidStateError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The image source is detached. PASS Apply structured clone to an already closed bitmap is rejected as expected: DataCloneError: Failed to execute 'postMessage' on 'Worker': An ImageBitmap is detached and could not be cloned. PASS Apply transferring to an already closed bitmap is rejected as expected: DataCloneError: Failed to execute 'postMessage' on 'Worker': An ImageBitmap is detached and could not be cloned. -PASS createImageBitmap from a closed ImageBitmap was rejected. IndexSizeError: Failed to execute 'createImageBitmap' on 'Window': The source width provided is 0. +PASS createImageBitmap from a closed ImageBitmap was rejected. InvalidStateError: The source image width is 0. PASS bitmap.width is 0 PASS bitmap.height is 0 PASS bitmap.width is imgWidth
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/canvas-ImageData-neutered-source-expected.txt b/third_party/WebKit/LayoutTests/fast/canvas/canvas-ImageData-neutered-source-expected.txt index b6d96bc..ebdeb01 100644 --- a/third_party/WebKit/LayoutTests/fast/canvas/canvas-ImageData-neutered-source-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/canvas/canvas-ImageData-neutered-source-expected.txt
@@ -18,7 +18,7 @@ PASS image.data[2] is undefined PASS image.data[3] is undefined PASS context.putImageData(image, 0, 0) threw exception InvalidStateError: Failed to execute 'putImageData' on 'CanvasRenderingContext2D': The source data has been neutered.. -PASS Promise rejected as expected: InvalidStateError: Failed to execute 'createImageBitmap' on 'Window': The source data has been neutered. +PASS Promise rejected as expected: InvalidStateError: The source data has been detached. PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-invalid-args-in-workers-expected.txt b/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-invalid-args-in-workers-expected.txt index dcf97bd7..3b052a9 100644 --- a/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-invalid-args-in-workers-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-invalid-args-in-workers-expected.txt
@@ -9,10 +9,10 @@ [Worker] TypeError: Failed to execute 'createImageBitmap' on 'WorkerGlobalScope': The provided value is not of type '(HTMLImageElement or SVGImageElement or HTMLVideoElement or HTMLCanvasElement or Blob or ImageData or ImageBitmap or OffscreenCanvas)' PASS [Worker] Rejected as expected: invalid area PASS [Worker] reason instanceof Error is true -[Worker] IndexSizeError: Failed to execute 'createImageBitmap' on 'WorkerGlobalScope': The source height provided is 0. +[Worker] RangeError: The crop rect height is 0. PASS [Worker] Rejected as expected: invalid area PASS [Worker] reason instanceof Error is true -[Worker] IndexSizeError: Failed to execute 'createImageBitmap' on 'WorkerGlobalScope': The source width provided is 0. +[Worker] RangeError: The crop rect width is 0. PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-invalid-args.html b/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-invalid-args.html deleted file mode 100644 index f920b73..0000000 --- a/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-invalid-args.html +++ /dev/null
@@ -1,137 +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 createImageBitmap for invalid inputs."); -window.jsTestIsAsync = true; - -var reason; - -function shouldBeRejected(promise, message, isReasonError) { - return promise.then(function() { - testFailed('Resolved unexpectedly: ' + message); - }, function(e) { - reason = e; - testPassed('Rejected as expected: ' + message); - if (isReasonError) - shouldBeTrue('reason instanceof Error'); - debug(e); - }); -} - -function checkInvalidRange(source, message) { - return Promise.resolve().then(function() { - return shouldBeRejected(createImageBitmap(source, 0, 0, 10, 0), message + ' / invalid range', true); - }).then(function() { - return shouldBeRejected(createImageBitmap(source, 0, 0, 0, 10), message + ' / invalid range', true); - }); -} - -function createCanvas() { - return new Promise(function(resolve, reject) { - var canvas = document.createElement('canvas'); - canvas.setAttribute('width', '200'); - canvas.setAttribute('height', '200'); - resolve(canvas); - }); -} - -function createInvalidCanvas() { - // Create a terapixel canvas to generate an invalid canvas through - // allocation failure - return new Promise(function(resolve, reject) { - var canvas = document.createElement('canvas'); - canvas.setAttribute('width', '100000000'); - canvas.setAttribute('height', '100000000'); - resolve(canvas); - }); -} - -function createVideo() { - return new Promise(function(resolve, reject) { - var video = document.createElement('video'); - video.addEventListener('canplaythrough', resolve.bind(undefined, video), false); - video.src = '../../compositing/resources/video.ogv'; - }); -} - -function createImage() { - return createCanvas().then(function(canvas) { - var image = new Image(); - var promise = new Promise(function(resolve, reject) { - image.onload = resolve.bind(undefined, image); - }); - image.src = canvas.toDataURL(); - return promise; - }); -} - -function createBlob(url) { - return new Promise(function(resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open('GET', url); - xhr.responseType = 'blob'; - xhr.onload = function() { - resolve(xhr.response); - }; - xhr.onerror = reject; - xhr.send(); - }); -} - -Promise.resolve().then(function() { - return shouldBeRejected(createImageBitmap(undefined), 'undefined', true); -}).then(function() { - return shouldBeRejected(createImageBitmap(null), 'null', true); -}).then(function() { - return shouldBeRejected(createImageBitmap(new Image), 'empty image', true); -}).then(function() { - return shouldBeRejected(createImageBitmap(document.createElement('video')), 'empty video', true); -}).then(function() { - return createImage().then(function(image) { - return checkInvalidRange(image, 'image'); - }); -}).then(function() { - return createVideo().then(function(video) { - return checkInvalidRange(video, 'video'); - }); -}).then(function() { - return createCanvas().then(function(canvas) { - return checkInvalidRange(canvas, 'canvas'); - }); -}).then(function() { - return createCanvas().then(function(canvas) { - var imagedata = canvas.getContext('2d').getImageData(0, 0, canvas.width, canvas.height); - return checkInvalidRange(imagedata, 'canvas imagedata') - }); -}).then(function() { - return createImage().then(function(image) { - return createImageBitmap(image); - }).then(function(bitmap) { - return checkInvalidRange(bitmap, 'image bitmap'); - }); -}).then(function() { - return createBlob('resources/pattern.png').then(function(blob) { - return checkInvalidRange(blob, 'blob'); - }); -}).then(function() { - return createBlob('resources/shadow-offset.js').then(function(blob) { - return shouldBeRejected(createImageBitmap(blob), 'invalid blob', true); - }); -}).then(function() { - return createInvalidCanvas().then(function(invalidCanvas) { - return shouldBeRejected(createImageBitmap(invalidCanvas), 'invalid canvas', false); - }); -}).then(function() { - var imageData = new ImageData(10, 10); - return shouldBeRejected(createImageBitmap(imageData, 0, 0, 0x10004, 0x10004, {premultiplyAlpha:"none"}), 'cropRect too big', false); -}).catch(function(e) { - testFailed('Unexpected rejection: ' + e); -}).then(finishJSTest, finishJSTest); - -</script> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-invalid-blob-in-workers-expected.txt b/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-invalid-blob-in-workers-expected.txt index e07cf5d..9ec1d962 100644 --- a/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-invalid-blob-in-workers-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-invalid-blob-in-workers-expected.txt
@@ -4,7 +4,7 @@ Starting worker: ./resources/canvas-createImageBitmap-invalid-blob-in-workers.js -PASS [Worker] Promise rejected: InvalidStateError: The source image cannot be decoded. +PASS [Worker] Promise rejected: InvalidStateError: The source image could not be decoded. PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-svg-no-intrinsic-size-expected.txt b/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-svg-no-intrinsic-size-expected.txt index fc6b4741..343ad0a 100644 --- a/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-svg-no-intrinsic-size-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-svg-no-intrinsic-size-expected.txt
@@ -3,8 +3,8 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -PASS createImageBitmap from a SVG without intrinsic size rejected: InvalidStateError: Failed to execute 'createImageBitmap' on 'Window': The image element contains an SVG image without intrinsic dimensions, and no resize options or crop region are specified. -PASS createImageBitmap from a SVG with zero size rejected: InvalidStateError: Failed to execute 'createImageBitmap' on 'Window': The image element contains an SVG image without intrinsic dimensions, and no resize options or crop region are specified. +PASS createImageBitmap from a SVG without intrinsic size rejected: InvalidStateError: The image element contains an SVG image without intrinsic dimensions, and no resize options or crop region are specified. +PASS createImageBitmap from a SVG with zero size rejected: InvalidStateError: The image element contains an SVG image without intrinsic dimensions, and no resize options or crop region are specified. PASS createImageBitmap from a zero size SVG with cropRect succeed PASS d[0] is 0 PASS d[1] is 0
diff --git a/third_party/WebKit/LayoutTests/fast/css/getComputedStyle/getComputedStyle-with-pseudo-element-expected.txt b/third_party/WebKit/LayoutTests/fast/css/getComputedStyle/getComputedStyle-with-pseudo-element-expected.txt index 0802b8c1..012c6bbf 100644 --- a/third_party/WebKit/LayoutTests/fast/css/getComputedStyle/getComputedStyle-with-pseudo-element-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/css/getComputedStyle/getComputedStyle-with-pseudo-element-expected.txt
@@ -63,6 +63,6 @@ PASS Expected 'rgb(165, 42, 42)' for color in the computed style for element with id testNoPseudoElement and pseudo-element :garbage and got 'rgb(165, 42, 42)' PASS Expected '100px' for height in the computed style for element with id testNoPseudoElement and pseudo-element null and got '100px' PASS Expected '100px' for width in the computed style for element with id testNoPseudoElement and pseudo-element null and got '100px' -PASS Expected '100px' for height in the computed style for element with id testNoPseudoElement and pseudo-element :after and got '100px' -PASS Expected '100px' for width in the computed style for element with id testNoPseudoElement and pseudo-element :after and got '100px' +PASS Expected 'auto' for height in the computed style for element with id testNoPseudoElement and pseudo-element :after and got 'auto' +PASS Expected 'auto' for width in the computed style for element with id testNoPseudoElement and pseudo-element :after and got 'auto' PASS Expected '0.5' for opacity in the computed style for element with id testHardwareAcceleratedCompositing and pseudo-element :before and got '0.5'
diff --git a/third_party/WebKit/LayoutTests/fast/css/getComputedStyle/getComputedStyle-with-pseudo-element.html b/third_party/WebKit/LayoutTests/fast/css/getComputedStyle/getComputedStyle-with-pseudo-element.html index a011565..26788a2 100644 --- a/third_party/WebKit/LayoutTests/fast/css/getComputedStyle/getComputedStyle-with-pseudo-element.html +++ b/third_party/WebKit/LayoutTests/fast/css/getComputedStyle/getComputedStyle-with-pseudo-element.html
@@ -180,8 +180,8 @@ { 'elementId' : 'testNoPseudoElement', 'pseudoElement' : ':garbage', 'property' : 'color', 'expectedValue' : 'rgb(165, 42, 42)' }, { 'elementId' : 'testNoPseudoElement', 'pseudoElement' : null, 'property' : 'height', 'expectedValue' : '100px' }, { 'elementId' : 'testNoPseudoElement', 'pseudoElement' : null, 'property' : 'width', 'expectedValue' : '100px' }, - { 'elementId' : 'testNoPseudoElement', 'pseudoElement' : ':after', 'property' : 'height', 'expectedValue' : '100px' }, - { 'elementId' : 'testNoPseudoElement', 'pseudoElement' : ':after', 'property' : 'width', 'expectedValue' : '100px' }, + { 'elementId' : 'testNoPseudoElement', 'pseudoElement' : ':after', 'property' : 'height', 'expectedValue' : 'auto' }, + { 'elementId' : 'testNoPseudoElement', 'pseudoElement' : ':after', 'property' : 'width', 'expectedValue' : 'auto' }, { 'elementId' : 'testHardwareAcceleratedCompositing', 'pseudoElement' : ':before', 'property' : 'opacity', 'expectedValue' : '0.5' } ];
diff --git a/third_party/WebKit/LayoutTests/hdr/OWNERS b/third_party/WebKit/LayoutTests/hdr/OWNERS new file mode 100644 index 0000000..1a10728 --- /dev/null +++ b/third_party/WebKit/LayoutTests/hdr/OWNERS
@@ -0,0 +1,2 @@ +hubbe@chromium.org +ccameron@chromium.org
diff --git a/third_party/WebKit/LayoutTests/hdr/README.md b/third_party/WebKit/LayoutTests/hdr/README.md new file mode 100644 index 0000000..abbc265 --- /dev/null +++ b/third_party/WebKit/LayoutTests/hdr/README.md
@@ -0,0 +1,6 @@ +# HDR + +This directory contains tests that run in HDR mode. +All tests in this directory run with the flag --force-color-profile=scrgb-linear +Note that test output is NOT HDR yet, so actual HDR rendering cannot be tested +properly. We only test that non-HDR content works correctly in HDR mode.
diff --git a/third_party/WebKit/LayoutTests/hdr/color-jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/hdr/color-jpeg-with-color-profile-expected.png new file mode 100644 index 0000000..010e16b5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/hdr/color-jpeg-with-color-profile-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/hdr/color-jpeg-with-color-profile-expected.txt b/third_party/WebKit/LayoutTests/hdr/color-jpeg-with-color-profile-expected.txt new file mode 100644 index 0000000..ce9a7db --- /dev/null +++ b/third_party/WebKit/LayoutTests/hdr/color-jpeg-with-color-profile-expected.txt
@@ -0,0 +1,7 @@ +layer at (0,0) size 800x600 + 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 784x584 + LayoutImage {IMG} at (0,0) size 275x207 + LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/hdr/color-jpeg-with-color-profile.html b/third_party/WebKit/LayoutTests/hdr/color-jpeg-with-color-profile.html new file mode 100644 index 0000000..47b00fd --- /dev/null +++ b/third_party/WebKit/LayoutTests/hdr/color-jpeg-with-color-profile.html
@@ -0,0 +1 @@ +<img src="../images/resources/icc-v2-gbr.jpg">
diff --git a/third_party/WebKit/LayoutTests/hdr/color-profile-video-expected.png b/third_party/WebKit/LayoutTests/hdr/color-profile-video-expected.png new file mode 100644 index 0000000..c0e37a6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/hdr/color-profile-video-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/hdr/color-profile-video-expected.txt b/third_party/WebKit/LayoutTests/hdr/color-profile-video-expected.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/third_party/WebKit/LayoutTests/hdr/color-profile-video-expected.txt
@@ -0,0 +1 @@ +
diff --git a/third_party/WebKit/LayoutTests/hdr/color-profile-video.html b/third_party/WebKit/LayoutTests/hdr/color-profile-video.html new file mode 100644 index 0000000..6058fc33 --- /dev/null +++ b/third_party/WebKit/LayoutTests/hdr/color-profile-video.html
@@ -0,0 +1,41 @@ +<!DOCTYPE html> +<html> +<head> +<script src="../media/media-file.js"></script> +<style> + video { + outline: 15px solid blue; + border: 15px solid green; + background: orange; + padding: 15px; + margin: 20px; + width: 300px; + } +</style> +</head> + +<body> + <!-- This test passes if: + 1) the final colored blocks in the series of colored blocks in the + video content box area are respectively: cyan, blue, green + 2) the video seek point is near 00:000:00.00 --> + <video/> +</body> + +<script> +if (window.testRunner) { + testRunner.dumpAsTextWithPixelResults(); + testRunner.waitUntilDone(); +} + +window.onload = function() { + if (window.testRunner) { + document.querySelector('video').oncanplaythrough = function() { + setTimeout(function() { testRunner.notifyDone() }, 0); + }; + } + + setSrcByTagName('video', findMediaFile('video', '../media/content/test')); +}; +</script> +</html>
diff --git a/third_party/WebKit/LayoutTests/hdr/video-canvas-alpha-expected.png b/third_party/WebKit/LayoutTests/hdr/video-canvas-alpha-expected.png new file mode 100644 index 0000000..82d2988 --- /dev/null +++ b/third_party/WebKit/LayoutTests/hdr/video-canvas-alpha-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/hdr/video-canvas-alpha-expected.txt b/third_party/WebKit/LayoutTests/hdr/video-canvas-alpha-expected.txt new file mode 100644 index 0000000..7cf0df2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/hdr/video-canvas-alpha-expected.txt
@@ -0,0 +1,15 @@ +layer at (0,0) size 800x600 + 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 784x584 + LayoutText {#text} at (0,0) size 0x0 +layer at (8,8) size 320x240 + LayoutVideo {VIDEO} at (0,0) size 320x240 +layer at (8,8) size 320x240 + LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x240 + LayoutBlockFlow {DIV} at (0,208) size 320x32 +layer at (8,8) size 320x198 + LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x198 +layer at (228,8) size 320x240 + LayoutHTMLCanvas (relative positioned) {CANVAS} at (320,0) size 320x240
diff --git a/third_party/WebKit/LayoutTests/hdr/video-canvas-alpha.html b/third_party/WebKit/LayoutTests/hdr/video-canvas-alpha.html new file mode 100644 index 0000000..b6376bf --- /dev/null +++ b/third_party/WebKit/LayoutTests/hdr/video-canvas-alpha.html
@@ -0,0 +1,32 @@ +<html> + <head> + <script src="../media/media-file.js"></script> + + <script> + if (window.testRunner) { + testRunner.waitUntilDone(); + } + + function onLoad() { + video = document.getElementsByTagName('video')[0]; + video.src = findMediaFile("video", "../media/content/test"); + + canvas = document.getElementsByTagName('canvas')[0]; + ctx = canvas.getContext('2d'); + + video.load(); + video.addEventListener("canplay", function (e) { + ctx.globalAlpha = 0.5; + ctx.drawImage(video, 0, 0); + + if (window.testRunner) { + testRunner.notifyDone(); + } + }); + } + </script> + </head> + <body onload="onLoad();"> + <video></video><canvas width="320px" height="240px" style="position:relative;left:-100px;"> </canvas> + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/php-highlighter-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/php-highlighter-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/editor/php-highlighter-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/editor/php-highlighter-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/editor/php-highlighter.html b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/php-highlighter.html new file mode 100644 index 0000000..e1acd47 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/php-highlighter.html
@@ -0,0 +1,25 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../resources/editor-test.js"></script> +<script> +function test() { + var mimeType = 'text/x-php'; + var textEditor = SourcesTestRunner.createTestEditor(); + TestRunner.addSnifferPromise(SourceFrame.SourcesTextEditor.prototype, 'rewriteMimeType').then(onModesLoaded); + textEditor.setMimeType(mimeType); + function onModesLoaded() { + TestRunner.addResult('Mode loaded: ' + !!CodeMirror.mimeModes[mimeType]); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that php highlighter loads successfully. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/resources/search-me.js b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/resources/search-me.js similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/editor/resources/search-me.js rename to third_party/WebKit/LayoutTests/http/tests/devtools/editor/resources/search-me.js
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-auto-whitespace-removing-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-auto-whitespace-removing-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/editor/text-editor-auto-whitespace-removing-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-auto-whitespace-removing-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-auto-whitespace-removing.html b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-auto-whitespace-removing.html new file mode 100644 index 0000000..dc9827ce --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-auto-whitespace-removing.html
@@ -0,0 +1,94 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../resources/editor-test.js"></script> +<script> +function codeSnippet() { + return document.getElementById("codeSnippet").textContent; +} + +function test() { + var textEditor = SourcesTestRunner.createTestEditor(); + textEditor.setMimeType('text/javascript'); + textEditor.setReadOnly(false); + textEditor.element.focus(); + TestRunner.evaluateInPage('codeSnippet();', onCodeSnippet); + var codeSnippetText; + + function onCodeSnippet(result) { + codeSnippetText = result.value; + TestRunner.runTestSuite(testSuite); + } + + function dumpAndNext(next) { + function innerDumpAndNext() { + SourcesTestRunner.dumpTextWithSelection(textEditor, true); + next(); + } + return innerDumpAndNext; + } + + function doubleEnter(next) { + function onFirstEnter() { + SourcesTestRunner.fakeKeyEvent(textEditor, 'Enter', [], dumpAndNext(next)); + } + + SourcesTestRunner.fakeKeyEvent(textEditor, 'Enter', [], onFirstEnter); + } + + var testSuite = [ + function testCollapsedBlock(next) { + textEditor.setText(codeSnippetText); + SourcesTestRunner.setLineSelections(textEditor, [{line: 0, column: 12}]); + doubleEnter(next); + }, + + function testOpenCurlyBrace(next) { + textEditor.setText(codeSnippetText); + SourcesTestRunner.setLineSelections(textEditor, [{line: 1, column: 17}]); + doubleEnter(next); + }, + + function testSmartIndent(next) { + textEditor.setText(codeSnippetText); + SourcesTestRunner.setLineSelections(textEditor, [{line: 1, column: 2}]); + doubleEnter(next); + }, + + function testMultiCursorSelection(next) { + textEditor.setText(codeSnippetText); + SourcesTestRunner.setLineSelections(textEditor, [{line: 1, column: 2}, {line: 1, column: 4}]); + doubleEnter(next); + }, + + function testEditedAutoIndent(next) { + textEditor.setText(codeSnippetText); + SourcesTestRunner.setLineSelections(textEditor, [{line: 1, column: 17}]); + SourcesTestRunner.fakeKeyEvent(textEditor, 'Enter', [], onEnter); + + function onEnter() { + SourcesTestRunner.fakeKeyEvent(textEditor, 'W', [], onEditedText); + } + + function onEditedText() { + SourcesTestRunner.fakeKeyEvent(textEditor, 'Enter', [], dumpAndNext(next)); + } + }, + ]; +} + +</script> +</head> + +<body onload="runTest();"> +<p> +This test verifies that auto-appended spaces are removed on consequent enters. +</p> + +<pre id="codeSnippet"> +function (){} + if (a == b) { +</pre> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-block-indent-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-block-indent-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/editor/text-editor-block-indent-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-block-indent-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-block-indent.html b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-block-indent.html new file mode 100644 index 0000000..c9c40c7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-block-indent.html
@@ -0,0 +1,89 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../resources/editor-test.js"></script> +<script> +function codeSnippet() { + return document.getElementById("codeSnippet").textContent; +} + +function test() { + var textEditor = SourcesTestRunner.createTestEditor(); + textEditor.setMimeType('text/javascript'); + textEditor.setReadOnly(false); + textEditor.element.focus(); + TestRunner.evaluateInPage('codeSnippet();', onCodeSnippet); + var codeSnippetText; + + function onCodeSnippet(result) { + codeSnippetText = result.value; + TestRunner.runTestSuite(testSuite); + } + + function dumpAndNext(next) { + function innerDumpAndNext() { + SourcesTestRunner.dumpTextWithSelection(textEditor, true); + next(); + } + return innerDumpAndNext; + } + + var testSuite = [ + function testSimpleCollapsedBlockExpanding(next) { + textEditor.setText(codeSnippetText); + SourcesTestRunner.setLineSelections(textEditor, [{line: 0, column: 1}]); + SourcesTestRunner.fakeKeyEvent(textEditor, 'Enter', [], dumpAndNext(next)); + }, + + function testMulticursorCollapsedBlockExpanding(next) { + textEditor.setText(codeSnippetText); + SourcesTestRunner.setLineSelections( + textEditor, [{line: 0, column: 1}, {line: 0, column: 4}, {line: 1, column: 3}]); + SourcesTestRunner.fakeKeyEvent(textEditor, 'Enter', [], dumpAndNext(next)); + }, + + function testMulticursorCollapsedBlockNotExpanding(next) { + textEditor.setText(codeSnippetText); + SourcesTestRunner.setLineSelections(textEditor, [{line: 0, column: 1}, {line: 1, column: 2}]); + SourcesTestRunner.fakeKeyEvent(textEditor, 'Enter', [], dumpAndNext(next)); + }, + + function testSingleCursorClosingBracketIndent(next) { + textEditor.setText(codeSnippetText); + SourcesTestRunner.setLineSelections(textEditor, [{line: 3, column: 0}]); + SourcesTestRunner.fakeKeyEvent(textEditor, '}', [], dumpAndNext(next)); + }, + + function testMulticursorClosingBracketIndent(next) { + textEditor.setText(codeSnippetText); + SourcesTestRunner.setLineSelections(textEditor, [{line: 3, column: 5}, {line: 5, column: 9}]); + SourcesTestRunner.fakeKeyEvent(textEditor, '}', [], dumpAndNext(next)); + }, + + function testMulticursorClosingBracketIndentNotExecuted(next) { + textEditor.setText(codeSnippetText); + SourcesTestRunner.setLineSelections(textEditor, [{line: 3, column: 5}, {line: 4, column: 5}]); + SourcesTestRunner.fakeKeyEvent(textEditor, '}', [], dumpAndNext(next)); + } + ]; +} + +</script> +</head> + +<body onload="runTest();"> +<p> +This test verifies applied indentation whenever you hit enter in "{|}" or type in "}" while inside opened block. +</p> + +<pre id="codeSnippet"> +{} {} + {} + { + + { + +</pre> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-char-to-coordinates-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-char-to-coordinates-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/editor/text-editor-char-to-coordinates-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-char-to-coordinates-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-char-to-coordinates.html b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-char-to-coordinates.html new file mode 100644 index 0000000..120693d --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-char-to-coordinates.html
@@ -0,0 +1,57 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../resources/editor-test.js"></script> +<script> + +function test() { + var text = ['function foo(a, b) {', ' var f = /*.[a]/.test(a);', ' return f;']; + var textEditor = SourcesTestRunner.createTestEditor(); + textEditor.setText(text.join('\n')); + + TestRunner.runTestSuite([ + function testCoordinatesToCursorPositionOuter(next) { + TestRunner.addResult('Request char at (-1000, -1000)'); + TestRunner.addResult('Result:' + JSON.stringify(textEditor.coordinatesToCursorPosition(-1000, -1000))); + next(); + }, + + function testTextToCoordinatesCornerCases(next) { + TestRunner.addResult('Request (-1, 0):' + JSON.stringify(textEditor.cursorPositionToCoordinates(-1, 0))); + TestRunner.addResult('Request (100, 0):' + JSON.stringify(textEditor.cursorPositionToCoordinates(100, 0))); + TestRunner.addResult('Request (0, -1):' + JSON.stringify(textEditor.cursorPositionToCoordinates(0, -1))); + TestRunner.addResult('Request (0, 100):' + JSON.stringify(textEditor.cursorPositionToCoordinates(0, 100))); + TestRunner.addResult('Request (-100, -1100):' + JSON.stringify(textEditor.cursorPositionToCoordinates(0, 100))); + next(); + }, + + function testInverseRelationTextToCoordinates(next) { + for (var i = 0; i < textEditor.linesCount; ++i) { + var line = textEditor.line(i); + TestRunner.addResult('Testing line \'' + line + '\''); + for (var j = 0; j < textEditor.length; ++j) { + var xy = textEditor.cursorPositionToCoordinates(i, j); + if (!xy) { + TestRunner.addResult('Failed inversion for line=' + i + ' column=' + j); + continue; + } + + var range = textEditor.coordinatesToCursorPosition(xy.x, xy.y); + if (range.startLine !== i || range.startColumn !== j) + TestRunner.addResult('Failed inversion for line=' + i + ' column=' + j); + } + } + next(); + }, + ]); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Test editor cursorPositionToCoordinates and coordinatesToCursorPosition API +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-ctrl-d-1-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-ctrl-d-1-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/editor/text-editor-ctrl-d-1-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-ctrl-d-1-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-ctrl-d-1.html b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-ctrl-d-1.html new file mode 100644 index 0000000..9ef83f8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-ctrl-d-1.html
@@ -0,0 +1,136 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../resources/editor-test.js"></script> +<script> +function codeSnippet() { + return document.getElementById("codeSnippet").textContent; +} + +function test() { + var textEditor = SourcesTestRunner.createTestEditor(); + textEditor.setMimeType('text/javascript'); + textEditor.setReadOnly(false); + textEditor.element.focus(); + TestRunner.evaluateInPage('codeSnippet();', onCodeSnippet); + + function onCodeSnippet(result) { + var codeLines = result.value; + textEditor.setText(codeLines); + TestRunner.runTestSuite(testSuite); + } + + function nextOccurrence(times) { + for (var i = 0; i < times; ++i) + textEditor._selectNextOccurrenceController.selectNextOccurrence(); + } + + function undoLastSelection() { + textEditor._selectNextOccurrenceController.undoLastSelection(); + } + + function lineSelection(line, from, to) { + if (typeof to !== 'number') + to = from; + SourcesTestRunner.setLineSelections(textEditor, [{line: line, from: from, to: to}]); + } + + var testSuite = [ + function testNextFullWord(next) { + lineSelection(0, 3); + nextOccurrence(3); + SourcesTestRunner.dumpSelectionStats(textEditor); + next(); + }, + + function testCaseSensitive(next) { + lineSelection(0, 9, 13); + nextOccurrence(3); + SourcesTestRunner.dumpSelectionStats(textEditor); + next(); + }, + + function testOccurrencesOnTheSameLine(next) { + lineSelection(2, 13); + nextOccurrence(3); + SourcesTestRunner.dumpSelectionStats(textEditor); + next(); + }, + + function testUndoLastAddedSelection(next) { + lineSelection(2, 13); + nextOccurrence(3); + undoLastSelection(); + SourcesTestRunner.dumpSelectionStats(textEditor); + next(); + }, + + function testUndoSelectionPreservesFullWordState(next) { + lineSelection(2, 51); + nextOccurrence(3); + undoLastSelection(); + nextOccurrence(1); + SourcesTestRunner.dumpSelectionStats(textEditor); + var lastSelection = textEditor.selections().pop(); + TestRunner.addResult('Last selection: ' + lastSelection.toString()); + next(); + }, + + function testUndoSelectionPreservesPartialSelection(next) { + lineSelection(2, 48, 52); + nextOccurrence(2); + undoLastSelection(); + nextOccurrence(1); + SourcesTestRunner.dumpSelectionStats(textEditor); + var lastSelection = textEditor.selections().pop(); + TestRunner.addResult('Last selection: ' + lastSelection.toString()); + next(); + }, + + function testTwoCloseWords(next) { + lineSelection(17, 45); + nextOccurrence(5); + SourcesTestRunner.dumpSelectionStats(textEditor); + next(); + }, + ]; +} + +</script> +</head> + +<body onload="runTest();"> +<p> +This test verifies Ctrl-D functionality, which selects next occurrence of word. +</p> + +<pre id="codeSnippet"> +function wordData() { + return { + original: $(".entry.original > .input").text(), + translation: $(".entry.translation > .input").text(), + tags: $(".active-tags > .tagcloud > .tag").toArray().map(function(value) { return value.textContent; }) + }; +} + +function submitWord(url) { + var stub = new App.Stub($(".content")); + $.post(url, wordData()) + .done(function() { + var callback = $("meta[data-callback]").attr("data-callback"); + if (callback) { + window.location = callback; + } else { + stub.success(); + $(".entry.original > .input").text("").focus(); + $(".entry.translation > .input").text(""); + } + }) + .fail(function(obj, err, errDescr) { + stub.failure("Error: " + errDescr); + }) +} +</pre> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-ctrl-d-2-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-ctrl-d-2-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/editor/text-editor-ctrl-d-2-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-ctrl-d-2-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-ctrl-d-2.html b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-ctrl-d-2.html new file mode 100644 index 0000000..4987829 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-ctrl-d-2.html
@@ -0,0 +1,137 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../resources/editor-test.js"></script> +<script> +function codeSnippet() { + return document.getElementById("codeSnippet").textContent; +} + +function test() { + var textEditor = SourcesTestRunner.createTestEditor(); + textEditor.setMimeType('text/javascript'); + textEditor.setReadOnly(false); + textEditor.element.focus(); + TestRunner.evaluateInPage('codeSnippet();', onCodeSnippet); + + function onCodeSnippet(result) { + var codeLines = result.value; + textEditor.setText(codeLines); + TestRunner.runTestSuite(testSuite); + } + + function nextOccurrence(times) { + for (var i = 0; i < times; ++i) + textEditor._selectNextOccurrenceController.selectNextOccurrence(); + } + + function undoLastSelection() { + textEditor._selectNextOccurrenceController.undoLastSelection(); + } + + function lineSelection(line, from, to) { + if (typeof to !== 'number') + to = from; + SourcesTestRunner.setLineSelections(textEditor, [{line: line, from: from, to: to}]); + } + + var testSuite = [ + function testCursorInTheWordStart(next) { + lineSelection(8, 0); + nextOccurrence(1); + SourcesTestRunner.dumpSelectionStats(textEditor); + next(); + }, + + function testCursorInTheWordEnd(next) { + lineSelection(8, 8); + nextOccurrence(1); + SourcesTestRunner.dumpSelectionStats(textEditor); + next(); + }, + + function testNonWordSelection(next) { + lineSelection(18, 12, 14); + nextOccurrence(8); + SourcesTestRunner.dumpSelectionStats(textEditor); + next(); + }, + + function testNonWordSelection2(next) { + lineSelection(17, 30, 33); + nextOccurrence(8); + SourcesTestRunner.dumpSelectionStats(textEditor); + next(); + }, + + function testNonWordSelection3(next) { + SourcesTestRunner.setLineSelections(textEditor, [ + {line: 14, from: 15, to: 25}, + {line: 16, column: 21}, + {line: 17, from: 42, to: 47}, + ]); + var selections = textEditor.selections(); + nextOccurrence(3); + SourcesTestRunner.dumpSelectionStats(textEditor); + next(); + }, + + function testNonWordSelection4(next) { + SourcesTestRunner.setLineSelections(textEditor, [ + {line: 14, from: 15, to: 25}, + {line: 16, from: 21, to: 23}, + {line: 17, from: 42, to: 47}, + ]); + var selections = textEditor.selections(); + nextOccurrence(3); + SourcesTestRunner.dumpSelectionStats(textEditor); + next(); + }, + + function testTriggerWordSearchInMixedCase(next) { + SourcesTestRunner.setLineSelections(textEditor, [{line: 9, from: 10, to: 25}, {line: 14, column: 33}]); + nextOccurrence(5); + SourcesTestRunner.dumpSelectionStats(textEditor); + next(); + }, + ]; +} + +</script> +</head> + +<body onload="runTest();"> +<p> +This test verifies Ctrl-D functionality, which selects next occurrence of word. +</p> + +<pre id="codeSnippet"> +function wordData() { + return { + original: $(".entry.original > .input").text(), + translation: $(".entry.translation > .input").text(), + tags: $(".active-tags > .tagcloud > .tag").toArray().map(function(value) { return value.textContent; }) + }; +} + +function submitWord(url) { + var stub = new App.Stub($(".content")); + $.post(url, wordData()) + .done(function() { + var callback = $("meta[data-callback]").attr("data-callback"); + if (callback) { + window.location = callback; + } else { + stub.success(); + $(".entry.original > .input").text("").focus(); + $(".entry.translation > .input").text(""); + } + }) + .fail(function(obj, err, errDescr) { + stub.failure("Error: " + errDescr); + }) +} +</pre> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-enter-behaviour-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-enter-behaviour-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/editor/text-editor-enter-behaviour-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-enter-behaviour-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-enter-behaviour.html b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-enter-behaviour.html new file mode 100644 index 0000000..1f2c793 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-enter-behaviour.html
@@ -0,0 +1,118 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../resources/editor-test.js"></script> +<script> +function codeSnippet() { + return document.getElementById("codeSnippet").textContent; +} + +function test() { + // clang-format off +function testFunction() +{ + var a = 100; + var b = 200; + var c = (a + b) / 2; + console.log(a); + console.log(b); + console.log(c); + if (a > b) { + console.log(a); + } + return c; +} + // clang-format on + + var textEditor = SourcesTestRunner.createTestEditor(); + textEditor.setMimeType('text/javascript'); + textEditor.setReadOnly(false); + textEditor.element.focus(); + + TestRunner.runTestSuite([ + function testEnterInTheLineEnd(next) { + textEditor.setText(testFunction.toString()); + var line = textEditor.line(2); + textEditor.setSelection(TextUtils.TextRange.createFromLocation(2, line.length)); + hitEnterDumpTextAndNext(next); + }, + + function testEnterAfterOpenCurlyBrace(next) { + textEditor.setText(testFunction.toString()); + var line = textEditor.line(1); + textEditor.setSelection(TextUtils.TextRange.createFromLocation(1, line.length)); + hitEnterDumpTextAndNext(next); + }, + + function testEnterInTheMiddleOfLine(next) { + textEditor.setText(testFunction.toString()); + var line = textEditor.line(2); + textEditor.setSelection(TextUtils.TextRange.createFromLocation(2, line.length / 2)); + hitEnterDumpTextAndNext(next); + }, + + function testEnterInTheBeginningOfTheLine(next) { + textEditor.setText(testFunction.toString()); + textEditor.setSelection(TextUtils.TextRange.createFromLocation(2, 0)); + hitEnterDumpTextAndNext(next); + }, + + function testEnterWithTheSelection(next) { + textEditor.setText(testFunction.toString()); + textEditor.setSelection(new TextUtils.TextRange(2, 2, 2, 4)); + hitEnterDumpTextAndNext(next); + }, + + function testEnterWithReversedSelection(next) { + textEditor.setText(testFunction.toString()); + textEditor.setSelection(new TextUtils.TextRange(2, 4, 2, 2)); + hitEnterDumpTextAndNext(next); + }, + + function testEnterWithTheMultiLineSelection(next) { + textEditor.setText(testFunction.toString()); + textEditor.setSelection(new TextUtils.TextRange(2, 0, 8, 4)); + hitEnterDumpTextAndNext(next); + }, + + function testEnterWithFullLineSelection(next) { + textEditor.setText(testFunction.toString()); + textEditor.setSelection(new TextUtils.TextRange(2, 0, 3, 0)); + hitEnterDumpTextAndNext(next); + }, + + function testEnterBeforeOpenBrace(next) { + textEditor.setText(testFunction.toString()); + textEditor.setSelection(new TextUtils.TextRange(8, 0, 8, 0)); + hitEnterDumpTextAndNext(next); + }, + + function testEnterMultiCursor(next) { + textEditor.setText(testFunction.toString()); + SourcesTestRunner.setLineSelections(textEditor, [ + {line: 3, column: 0}, + {line: 5, column: 1}, + {line: 6, column: 2}, + ]); + hitEnterDumpTextAndNext(next); + } + ]); + + function hitEnterDumpTextAndNext(next) { + SourcesTestRunner.fakeKeyEvent(textEditor, 'Enter', null, step2); + function step2() { + SourcesTestRunner.dumpTextWithSelection(textEditor, true); + next(); + } + } +} + +</script> +</head> + +<body onload="runTest();"> +<p> +This test checks text editor enter behaviour. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-formatter-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-formatter-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/editor/text-editor-formatter-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-formatter-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-formatter.html b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-formatter.html new file mode 100644 index 0000000..7ba842a --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-formatter.html
@@ -0,0 +1,60 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../resources/editor-test.js"></script> +<script> +function codeSnippet() { + return document.getElementById("codeSnippet").textContent; +} + +function test() { + var textEditor = SourcesTestRunner.createTestEditor(); + textEditor.setMimeType('text/javascript'); + textEditor.setReadOnly(false); + textEditor.element.focus(); + + function step2(result) { + var codeLines = result.value; + SourcesTestRunner.typeIn(textEditor, codeLines, step3); + } + + function step3() { + TestRunner.addResult('============ editor contents start ============'); + TestRunner.addResult(textEditor.text().replace(/ /g, '.')); + TestRunner.addResult('============ editor contents end ============'); + TestRunner.completeTest(); + } + + TestRunner.evaluateInPage('codeSnippet();', step2); +} + +</script> +</head> + +<body onload="runTest();"> +<p> +This test checks text editor javascript formatting. +</p> + +<pre id="codeSnippet">/** +* Multi-line comment +* +*/ +function foo(n) { +// one-line comment +function bar() { +return 42;D + +var sum = 0; +for (var i = 0; i < n; ++i) { +for (var j = 0; j < n; ++j) { +sum += i + j;DD + + +if (sum > 1000) { +while (sum > 0) { +--sum;DDD +</pre> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-goto-matching-bracket-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-goto-matching-bracket-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/editor/text-editor-goto-matching-bracket-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-goto-matching-bracket-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-goto-matching-bracket.html b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-goto-matching-bracket.html new file mode 100644 index 0000000..6096e61e --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-goto-matching-bracket.html
@@ -0,0 +1,81 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../resources/editor-test.js"></script> +<script> +function codeSnippet() { + return document.getElementById("codeSnippet").textContent; +} + +function test() { + var textEditor = SourcesTestRunner.createTestEditor(); + textEditor.setMimeType('text/javascript'); + textEditor.setReadOnly(false); + textEditor.element.focus(); + TestRunner.evaluateInPage('codeSnippet();', onCodeSnippet); + var codeSnippetText; + + function onCodeSnippet(result) { + codeSnippetText = result.value; + TestRunner.runTestSuite(testSuite); + } + + function dumpAndNext(next) { + function innerDumpAndNext() { + SourcesTestRunner.dumpTextWithSelection(textEditor, true); + next(); + } + return innerDumpAndNext; + } + + var testSuite = [ + function testSingleCursorFromOutsideOpenBracket(next) { + textEditor.setText(codeSnippetText); + SourcesTestRunner.setLineSelections(textEditor, [{line: 0, column: 16}]); + SourcesTestRunner.fakeKeyEvent(textEditor, 'M', ['ctrlKey'], dumpAndNext(next)); + }, + + function testSingleCursorFromInsideOpenBracket(next) { + textEditor.setText(codeSnippetText); + SourcesTestRunner.setLineSelections(textEditor, [{line: 0, column: 17}]); + SourcesTestRunner.fakeKeyEvent(textEditor, 'M', ['ctrlKey'], dumpAndNext(next)); + }, + + function testSingleCursorFromOutsideCloseBracket(next) { + textEditor.setText(codeSnippetText); + SourcesTestRunner.setLineSelections(textEditor, [{line: 3, column: 1}]); + SourcesTestRunner.fakeKeyEvent(textEditor, 'M', ['ctrlKey'], dumpAndNext(next)); + }, + + function testSingleCursorFromInsideCloseBracket(next) { + textEditor.setText(codeSnippetText); + SourcesTestRunner.setLineSelections(textEditor, [{line: 3, column: 0}]); + SourcesTestRunner.fakeKeyEvent(textEditor, 'M', ['ctrlKey'], dumpAndNext(next)); + }, + + function testMulticursor(next) { + textEditor.setText(codeSnippetText); + SourcesTestRunner.setLineSelections( + textEditor, [{line: 0, column: 16}, {line: 0, column: 21}, {line: 3, column: 0}, {line: 2, column: 10}]); + SourcesTestRunner.fakeKeyEvent(textEditor, 'M', ['ctrlKey'], dumpAndNext(next)); + }, + ]; +} + +</script> +</head> + +<body onload="runTest();"> +<p> +This test verifies editor's "Goto Matching Bracket" behavior, which is triggered via Ctrl-M shortcut. +</p> + +<pre id="codeSnippet"> +function MyClass(a, b) +{ + console.log("Test"); +} +</pre> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-home-button-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-home-button-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/editor/text-editor-home-button-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-home-button-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-home-button.html b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-home-button.html new file mode 100644 index 0000000..8cfc45e --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-home-button.html
@@ -0,0 +1,99 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../resources/editor-test.js"></script> +<script> + +function test() { + // clang-format off +function foo() +{ + return 42; +} + // clang-format on + var textEditor = SourcesTestRunner.createTestEditor(); + textEditor.setMimeType('text/javascript'); + textEditor.setReadOnly(false); + textEditor.element.focus(); + + textEditor.setText(foo.toString()); + + TestRunner.addResult(textEditor.text()); + + function homeButton(shift, callback) { + var key = Host.isMac() ? 'ArrowLeft' : 'Home'; + var modifiers = Host.isMac() ? ['metaKey'] : []; + if (shift) + modifiers.push('shiftKey'); + SourcesTestRunner.fakeKeyEvent(textEditor, key, modifiers, callback); + } + + function hitHomeButton(shift, times, callback) { + function hitButtonCallback() { + --times; + SourcesTestRunner.dumpTextWithSelection(textEditor); + if (times > 0) { + homeButton(shift, hitButtonCallback); + return; + } + callback(); + } + homeButton(shift, hitButtonCallback); + } + + TestRunner.runTestSuite([ + function testFirstNonBlankCharacter(next) { + var selection = TextUtils.TextRange.createFromLocation(2, 8); + textEditor.setSelection(selection); + SourcesTestRunner.dumpTextWithSelection(textEditor); + hitHomeButton(false, 1, next); + }, + + function testFirstNonBlankCharacterFromWhitespace(next) { + var selection = TextUtils.TextRange.createFromLocation(2, 2); + textEditor.setSelection(selection); + SourcesTestRunner.dumpTextWithSelection(textEditor); + hitHomeButton(false, 1, next); + }, + + function testHomeButtonToggling(next) { + var selection = TextUtils.TextRange.createFromLocation(2, 2); + textEditor.setSelection(selection); + SourcesTestRunner.dumpTextWithSelection(textEditor); + hitHomeButton(false, 3, next); + }, + + function testHomeButtonDoesNotChangeCursor(next) { + var selection = TextUtils.TextRange.createFromLocation(0, 2); + textEditor.setSelection(selection); + SourcesTestRunner.dumpTextWithSelection(textEditor); + hitHomeButton(false, 2, next); + }, + + function testHomeButtonWithShift(next) { + var selection = new TextUtils.TextRange(0, 0, 2, 8); + textEditor.setSelection(selection); + SourcesTestRunner.dumpTextWithSelection(textEditor); + hitHomeButton(true, 3, next); + }, + + function testHomeButtonWithShiftInversed(next) { + var selection = new TextUtils.TextRange(3, 1, 2, 8); + textEditor.setSelection(selection); + SourcesTestRunner.dumpTextWithSelection(textEditor); + hitHomeButton(true, 3, next); + } + ]); +} + +</script> +</head> + +<body onload="runTest();"> +<p> +This test verifies that home button triggers selection between first symbol of the line +and first non-blank symbol of the line. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-indent-autodetection-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-indent-autodetection-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/editor/text-editor-indent-autodetection-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-indent-autodetection-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-indent-autodetection.html b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-indent-autodetection.html new file mode 100644 index 0000000..c2946ca --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-indent-autodetection.html
@@ -0,0 +1,155 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../resources/editor-test.js"></script> +<script> +function codeSnippet(name) { + return document.getElementById(name).textContent; +} + +function codeSnippetsNumber() { + return document.getElementsByClassName("test").length; +} + +function test() { + var textEditor = SourcesTestRunner.createTestEditor(); + textEditor.setMimeType('text/javascript'); + textEditor.setReadOnly(false); + textEditor.element.focus(); + Common.settingForTest('textEditorAutoDetectIndent').set(true); + function genericTest(snippetName, next) { + var command = 'codeSnippet(\'' + snippetName + '\');'; + TestRunner.evaluateInPage(command, step2); + function step2(result) { + textEditor.setText(result.value); + var indent = textEditor.indent(); + var description = indent === TextUtils.TextUtils.Indent.TabCharacter ? 'Tab' : indent.length + ' spaces'; + TestRunner.addResult('Autodetected indentation for ' + snippetName + ': ' + description); + next(); + } + } + + function onTestNumberReceived(result) { + var testSuite = []; + TestRunner.addResult('Tests number: ' + result.value); + for (var i = 1; i <= result.value; ++i) + testSuite.push(genericTest.bind(this, 'test' + i)); + + TestRunner.runTestSuite(testSuite); + } + + TestRunner.evaluateInPage('codeSnippetsNumber()', onTestNumberReceived); +} + +</script> +</head> + +<body onload="runTest();"> +<p> +This test checks text editor indent autodetection functionality +</p> +<div>--------------TEST 1--------------</div> +<pre id="test1" class="test">function foo() { + return 42; +} +</pre> +<div>--------------TEST 2--------------</div> +<pre id="test2" class="test">console.log("Hello!");</pre> +<div>--------------TEST 3--------------</div> +<pre id="test3" class="test">/** + * This is a header comment that spans + * for a lot of lines + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ +function foo() { + return 42; +} +</pre> +<div>--------------TEST 4--------------</div> +<pre id="test4" class="test"> +function MyClass() +{ + this._foo = "bar"; +} + +MyClass.prototype = { + method1: function() + { + var sum = 0; + for(var i = 0; i < 100; ++i) { + sum += i; + } + return sum; + }, + + method2: function() + { + while(true) { + break; + } + }, +} +</pre> +<div>--------------TEST 5--------------</div> +<pre id="test5" class="test"> + a + a + b + b + b +c +c +</pre> +<div>--------------TEST 6--------------</div> +<pre id="test6" class="test"> + tab + tab + tab + tab +</pre> +<div>--------------TEST 7-------------- (empty content)</div> +<pre id="test7" class="test"></pre> +<div>--------------TEST 8--------------</div> +<pre id="test8" class="test"> +function foo() { + var i = 0; + function bar() { + var a = []; + a.push(1); + a.push(12); + a.push(42); + a.push(44); + return a.join("!"); + } + + (function() { + var a = { + a: function() { + vbr b = []; + b.push(1); + b.push(12); + b.push(42); + b.push(44); + b.push(44 * 2); + return b.join("?"); + } + }; + })(); +} +</pre> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-line-breaks-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-line-breaks-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/editor/text-editor-line-breaks-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-line-breaks-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-line-breaks.html b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-line-breaks.html new file mode 100644 index 0000000..27b42ef --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-line-breaks.html
@@ -0,0 +1,50 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../resources/editor-test.js"></script> +<script> + +function test() { + TestRunner.runTestSuite([ + function testCRInitial(next) { + var textEditor = SourcesTestRunner.createTestEditor(); + textEditor.setText('1\n2\n3\n'); + TestRunner.addResult(encodeURI(textEditor.text())); + next(); + }, + + function testCRLFInitial(next) { + var textEditor = SourcesTestRunner.createTestEditor(); + textEditor.setText('1\r\n2\r\n3\r\n'); + TestRunner.addResult(encodeURI(textEditor.text())); + next(); + }, + + function testCREdit(next) { + var textEditor = SourcesTestRunner.createTestEditor(); + textEditor.setText('1\n2\n3\n'); + textEditor.editRange(new TextUtils.TextRange(1, 0, 1, 0), 'foo\r\nbar'); + TestRunner.addResult(encodeURI(textEditor.text())); + next(); + }, + + function testCRLFEdit(next) { + var textEditor = SourcesTestRunner.createTestEditor(); + textEditor.setText('1\r\n2\r\n3\r\n'); + textEditor.editRange(new TextUtils.TextRange(1, 0, 1, 0), 'foo\r\nbar'); + TestRunner.addResult(encodeURI(textEditor.text())); + next(); + } + ]); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +This test checks that line endings are inferred from the initial text content, not incremental editing. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-mark-clean-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-mark-clean-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/editor/text-editor-mark-clean-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-mark-clean-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-mark-clean.html b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-mark-clean.html new file mode 100644 index 0000000..33ac3d5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-mark-clean.html
@@ -0,0 +1,73 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../resources/editor-test.js"></script> +<script> + +function test() { + var textEditor = SourcesTestRunner.createTestEditor(); + textEditor.setText('1\n2\n3\n4'); + + TestRunner.runTestSuite([ + function testMarkiningInitialStateAsClean(next) { + TestRunner.addResult('Initial state: clean=' + textEditor.isClean()); + textEditor.markClean(); + TestRunner.addResult('After marking clean: clean=' + textEditor.isClean()); + textEditor.editRange(TextUtils.TextRange.createFromLocation(0, 0), 'newText'); + TestRunner.addResult('EDIT; clean=' + textEditor.isClean()); + textEditor.undo(); + TestRunner.addResult('UNDO; clean=' + textEditor.isClean()); + textEditor.redo(); + TestRunner.addResult('REDO; clean=' + textEditor.isClean()); + textEditor.undo(); + TestRunner.addResult('UNDO; clean=' + textEditor.isClean()); + textEditor.editRange(TextUtils.TextRange.createFromLocation(1, 0), 'newText2'); + TestRunner.addResult('EDIT; clean=' + textEditor.isClean()); + textEditor.undo(); + TestRunner.addResult('UNDO; clean=' + textEditor.isClean()); + next(); + }, + + function testMiddleStateAsClean(next) { + TestRunner.addResult('Initial state: clean=' + textEditor.isClean()); + for (var i = 0; i < 3; ++i) { + textEditor.editRange(TextUtils.TextRange.createFromLocation(i, 0), 'newText' + i); + TestRunner.addResult('EDIT; clean=' + textEditor.isClean()); + } + textEditor.markClean(); + TestRunner.addResult('After marking clean: clean=' + textEditor.isClean()); + textEditor.editRange(TextUtils.TextRange.createFromLocation(3, 0), 'newText' + 3); + TestRunner.addResult('EDIT; clean=' + textEditor.isClean()); + for (var i = 0; i < 4; ++i) { + textEditor.undo(); + TestRunner.addResult('UNDO; clean=' + textEditor.isClean()); + } + for (var i = 0; i < 4; ++i) { + textEditor.redo(); + TestRunner.addResult('REDO; clean=' + textEditor.isClean()); + } + for (var i = 0; i < 2; ++i) { + textEditor.undo(); + TestRunner.addResult('UNDO; clean=' + textEditor.isClean()); + } + textEditor.editRange(TextUtils.TextRange.createFromLocation(1, 0), 'foo'); + TestRunner.addResult('EDIT; clean=' + textEditor.isClean()); + textEditor.undo(); + TestRunner.addResult('UNDO; clean=' + textEditor.isClean()); + textEditor.undo(); + TestRunner.addResult('UNDO; clean=' + textEditor.isClean()); + next(); + }, + ]); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +This test checks TextEditorModel.markClean/isClean methods +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-reveal-line-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-reveal-line-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/editor/text-editor-reveal-line-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-reveal-line-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-reveal-line.html b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-reveal-line.html new file mode 100644 index 0000000..91ce67ad --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-reveal-line.html
@@ -0,0 +1,48 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../resources/editor-test.js"></script> +<script> +function test() { + var out = TestRunner.addResult; + var textEditor = SourcesTestRunner.createTestEditor(500); + textEditor.setMimeType('text/javascript'); + textEditor.setReadOnly(false); + textEditor.element.focus(); + + textEditor.setText(new Array(10000).join('\n')); + + testLineReveal(0); + testLineReveal(500); + testLineReveal(510); + testLineReveal(490); + testLineReveal(1000); + testLineReveal(100); + testLineReveal(9998); + testLineReveal(-100); + testLineReveal(textEditor.linesCount); + testLineReveal(-1); + testLineReveal(10100); + + function testLineReveal(lineNumber) { + textEditor.revealPosition(lineNumber); + var firstLine = textEditor.firstVisibleLine(); + var lastLine = textEditor.lastVisibleLine(); + var lineCentered = Math.abs(2 * lineNumber - firstLine - lastLine) <= 1; + out('======= Revealing line: ' + lineNumber); + out(' is line centered: ' + lineCentered); + out('\n'); + } + TestRunner.completeTest(); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +This test checks that text editor's revealLine centers line where needed. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-search-replace-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-search-replace-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/editor/text-editor-search-replace-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-search-replace-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-search-replace.html b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-search-replace.html new file mode 100644 index 0000000..46a52cadc --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-search-replace.html
@@ -0,0 +1,64 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script src="../sources/debugger/resources/edit-me.js"></script> + +<script> + +function test() { + var textEditor; + var panel = UI.panels.sources; + SourcesTestRunner.showScriptSource('edit-me.js', didShowScriptSource); + + function showReplaceField() { + var searchableView = UI.panels.sources.searchableView(); + searchableView.showSearchField(); + searchableView._replaceCheckboxElement.click(); + } + + function runReplaceAll(searchValue, replaceValue) { + panel.searchableView()._searchInputElement.value = searchValue; + panel.searchableView()._replaceInputElement.value = replaceValue; + panel.searchableView()._replaceAll(); + } + + function dumpTextEditor(message) { + TestRunner.addResult(message); + TestRunner.addResult(textEditor.text()); + } + + function didShowScriptSource(sourceFrame) { + textEditor = sourceFrame._textEditor; + showReplaceField(); + + TestRunner.runTestSuite([ + function testReplaceAll(next) { + var source = '// var a1, a2, a3;\nconst a1, a2, a3;\n'; + sourceFrame.setContent(source); + + dumpTextEditor('--- Before replace ---'); + + runReplaceAll('a1', 'a$$'); + runReplaceAll('a2', 'b$&'); + runReplaceAll('a3', 'a3 /* $0 $1 $2 $& $$ \\0 \\1 */'); + runReplaceAll('/\\b(const)(\\s)+/', '/** @$1 */ var$2'); + runReplaceAll('//', '//='); + + dumpTextEditor('--- After replace ---'); + + next(); + }, + ]); + } +}; + +</script> + +</head> + +<body onload="runTest()"> +<p>Tests the search replace functionality.</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-search-switch-editor-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-search-switch-editor-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/editor/text-editor-search-switch-editor-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-search-switch-editor-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-search-switch-editor.html b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-search-switch-editor.html new file mode 100644 index 0000000..4ea30d5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-search-switch-editor.html
@@ -0,0 +1,61 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script src="../sources/debugger/resources/edit-me.js"></script> +<script src="resources/search-me.js"></script> +<script> + +function test() { + var textEditor; + var searchString = 'FINDME'; + var searchableView = UI.panels.sources.searchableView(); + var sourceFrame; + SourcesTestRunner.showScriptSource('search-me.js', didShowScriptSource); + + function didShowScriptSource(shownSourceFrame) { + sourceFrame = shownSourceFrame; + textEditor = sourceFrame._textEditor; + // We are probably still updating the editor in current callstack, so postponing the test execution. + setImmediate(textEditorUpdated); + } + + function textEditorUpdated(sourceFrame) { + searchableView.showSearchField(); + + TestRunner.addResult('Performing search...'); + searchableView._searchInputElement.value = searchString; + searchableView._performSearch(true, true); + TestRunner.addResult('Recording editor viewport after searching...'); + + var originalViewport = {from: textEditor.firstVisibleLine(), to: textEditor.lastVisibleLine()}; + var originalSelectionRange = textEditor.selection(); + + SourcesTestRunner.showScriptSource('edit-me.js', didShowAnotherSource); + + function didShowAnotherSource(anotherSourceFrame) { + SourcesTestRunner.showScriptSource('search-me.js', didShowScriptSourceAgain); + } + + function didShowScriptSourceAgain(sourceFrame) { + TestRunner.addResult('Recording editor viewport after switching tabs...'); + var newViewport = {from: textEditor.firstVisibleLine(), to: textEditor.lastVisibleLine()}; + var newSelectionRange = textEditor.selection(); + TestRunner.addResult('Comparing viewports...'); + if (originalViewport.from === newViewport.from && originalViewport.to === newViewport.to) + TestRunner.addResult(' viewports match, SUCCESS'); + else + TestRunner.addResult(' viewports do not match, FAIL'); + TestRunner.addResult('Comparing selection ranges...'); + TestRunner.addResult(' original selection range: ' + originalSelectionRange.toString()); + TestRunner.addResult(' current selection range: ' + newSelectionRange.toString()); + TestRunner.completeTest(); + } + } +}; +</script> +</head> +<body onload="runTest()"> +<p>Tests that switching editor tabs after searching does not affect editor selection and viewport.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-selection-to-search-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-selection-to-search-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/editor/text-editor-selection-to-search-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-selection-to-search-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-selection-to-search.html b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-selection-to-search.html new file mode 100644 index 0000000..fa763c664 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-selection-to-search.html
@@ -0,0 +1,48 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script src="../sources/debugger/resources/edit-me.js"></script> + +<script> + +function test() { + var panel = UI.panels.sources; + + SourcesTestRunner.showScriptSource('edit-me.js', step1); + + function step1(sourceFrame) { + sourceFrame._textEditor.setSelection(findString(sourceFrame, 'return')); + setTimeout(step2); + } + + function step2() { + panel.searchableView().showSearchField(); + TestRunner.addResult('Search controller: \'' + panel.searchableView()._searchInputElement.value + '\''); + var action = new Sources.AdvancedSearchView.ActionDelegate(); + action._showSearch(); + var searchView = + /** @type {!Sources.AdvancedSearchView} */ (self.runtime.sharedInstance(Sources.AdvancedSearchView)); + TestRunner.addResult('Advanced search controller: \'' + searchView._search.value + '\''); + TestRunner.completeTest(); + } + + function findString(sourceFrame, string) { + for (var i = 0; i < sourceFrame._textEditor.linesCount; ++i) { + var line = sourceFrame._textEditor.line(i); + var column = line.indexOf(string); + if (column === -1) + continue; + return new TextUtils.TextRange(i, column, i, column + string.length); + } + } +} +</script> + +</head> + +<body onload="runTest()"> +<p>Tests synchronizing the search input field to the editor selection.</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-smart-braces-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-smart-braces-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/editor/text-editor-smart-braces-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-smart-braces-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-smart-braces.html b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-smart-braces.html new file mode 100644 index 0000000..85d0ea2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-smart-braces.html
@@ -0,0 +1,67 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../resources/editor-test.js"></script> +<script> +function test() { + var textEditor = SourcesTestRunner.createTestEditor(); + textEditor.setMimeType('text/javascript'); + textEditor.setReadOnly(false); + textEditor.element.focus(); + + function clearEditor() { + textEditor.setText(''); + textEditor.setSelection(TextUtils.TextRange.createFromLocation(0, 0)); + } + + TestRunner.runTestSuite([ + function testTypeBraceSequence(next) { + clearEditor(); + SourcesTestRunner.typeIn(textEditor, '({[', onTypedIn); + function onTypedIn() { + SourcesTestRunner.dumpTextWithSelection(textEditor); + next(); + } + }, + + function testBraceOverride(next) { + clearEditor(); + SourcesTestRunner.typeIn(textEditor, '({[]})', onTypedIn); + function onTypedIn() { + SourcesTestRunner.dumpTextWithSelection(textEditor); + next(); + } + }, + + function testQuotesToCloseStringLiterals(next) { + textEditor.setText('\'Hello'); + textEditor.setSelection(TextUtils.TextRange.createFromLocation(0, 6)); + SourcesTestRunner.typeIn(textEditor, '"\'', onTypedIn); + function onTypedIn() { + SourcesTestRunner.dumpTextWithSelection(textEditor); + next(); + } + }, + + function testQuotesToCloseStringLiteralInsideLine(next) { + textEditor.setText('console.log("information");'); + textEditor.setSelection(TextUtils.TextRange.createFromLocation(0, 24)); + SourcesTestRunner.typeIn(textEditor, '"', onTypedIn); + function onTypedIn() { + SourcesTestRunner.dumpTextWithSelection(textEditor); + next(); + } + } + ]); +} + +</script> +</head> + +<body onload="runTest();"> +<p> +This test checks text editor smart braces functionality. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-token-at-position-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-token-at-position-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/editor/text-editor-token-at-position-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-token-at-position-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-token-at-position.html b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-token-at-position.html new file mode 100644 index 0000000..87194ace --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-token-at-position.html
@@ -0,0 +1,47 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../resources/editor-test.js"></script> +<script> + +function test() { + var text = + ['function foo(a, b) {', ' var f = /.a/.test(a); /*', 'this is a comment */', ' return f + "looongword";']; + + var positions = [[0, 10, 13], [8, 14, 19], [0, 5], [5, 20]]; + function testTokenAtPosition(textEditor) { + for (var i = 0; i < positions.length; ++i) { + var columns = positions[i]; + TestRunner.addResult('Line: ' + text[i]); + for (var j = 0; j < columns.length; ++j) { + var column = columns[j]; + TestRunner.addResult( + 'Column #' + column + ' (char \'' + text[i].charAt(column) + + '\') - token: ' + JSON.stringify(textEditor.tokenAtTextPosition(i, column))); + } + } + } + + TestRunner.runTestSuite([ + function testHighlightedText(next) { + var textEditor = SourcesTestRunner.createTestEditor(); + TestRunner.addSnifferPromise(SourceFrame.SourcesTextEditor.prototype, 'rewriteMimeType').then(step1); + textEditor.setMimeType('text/javascript'); + function step1() { + textEditor.setText(text.join('\n')); + testTokenAtPosition(textEditor); + next(); + } + }, + ]); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Test editor tokenAtTextPosition method. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-word-jumps-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-word-jumps-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/editor/text-editor-word-jumps-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-word-jumps-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-word-jumps.html b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-word-jumps.html new file mode 100644 index 0000000..76c62955 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/editor/text-editor-word-jumps.html
@@ -0,0 +1,146 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../resources/editor-test.js"></script> +<script> +function test() { + // clang-format off +function testFunction(foo, bar) +{ + someFunctionCall(bar); + var b = 42; + return a === 1 ? true : false; +} + +function testMyCamelMove(foo, bar) +{ + /* HelloWorld.TestSTRIng */ + + var a = e === 2; +{} +} + // clang-format on + var textEditor = SourcesTestRunner.createTestEditor(); + textEditor.setMimeType('text/javascript'); + textEditor.setReadOnly(false); + textEditor.setText(testFunction.toString()); + textEditor.element.focus(); + + TestRunner.addResult(textEditor.text()); + const wordJumpModifier = Host.isMac() ? 'altKey' : 'ctrlKey'; + const camelJumpModifier = Host.isMac() ? 'ctrlKey' : 'altKey'; + + function dumpEditorSelection() { + var selection = textEditor.selection(); + if (selection.isEmpty()) { + var line = textEditor.line(selection.startLine); + TestRunner.addResult(line.substring(0, selection.startColumn) + '|' + line.substring(selection.startColumn)); + } else { + TestRunner.addResult('>>' + textEditor.text(selection.normalize()) + '<<'); + } + return selection; + } + + function setCursorAtBeginning() { + textEditor.setSelection(TextUtils.TextRange.createFromLocation(0, 0)); + } + + function setCursorAtEnd() { + var lastLine = textEditor.linesCount - 1; + var lastColumn = textEditor.line(lastLine).length; + textEditor.setSelection(TextUtils.TextRange.createFromLocation(lastLine, lastColumn)); + } + + function fireEventWhileSelectionChanges(eventType, modifiers, callback) { + var oldSelection = textEditor.selection(); + + function eventCallback() { + var selection = dumpEditorSelection(); + if (selection.collapseToEnd().compareTo(oldSelection.collapseToEnd()) !== 0) { + oldSelection = selection; + SourcesTestRunner.fakeKeyEvent(textEditor, eventType, modifiers, eventCallback); + } else { + callback(); + } + } + SourcesTestRunner.fakeKeyEvent(textEditor, eventType, modifiers, eventCallback); + } + + TestRunner.runTestSuite([ + function testCtrlRightArrow(next) { + setCursorAtBeginning(); + dumpEditorSelection(); + fireEventWhileSelectionChanges('ArrowRight', [wordJumpModifier], next); + }, + + function testCtrlLeftArrow(next) { + setCursorAtEnd(); + dumpEditorSelection(); + fireEventWhileSelectionChanges('ArrowLeft', [wordJumpModifier], next); + }, + + function testCtrlShiftRightArrow(next) { + setCursorAtBeginning(); + dumpEditorSelection(); + fireEventWhileSelectionChanges('ArrowRight', [wordJumpModifier, 'shiftKey'], next); + }, + + function testCtrlShiftLeftArrow(next) { + setCursorAtEnd(); + var selection = dumpEditorSelection(); + fireEventWhileSelectionChanges('ArrowLeft', [wordJumpModifier, 'shiftKey'], next); + }, + + function testCtrlBackspace(next) { + setCursorAtEnd(); + TestRunner.addResult('==============='); + TestRunner.addResult(textEditor.text()); + function eventCallback() { + TestRunner.addResult('==============='); + TestRunner.addResult(textEditor.text() + '<<'); + if (textEditor.text() !== '') + SourcesTestRunner.fakeKeyEvent(textEditor, '\b', [wordJumpModifier], eventCallback); + else + next(); + } + SourcesTestRunner.fakeKeyEvent(textEditor, '\b', [wordJumpModifier], eventCallback); + }, + + function testAltRight(next) { + TestRunner.addResult('====== CAMEL CASE MOVEMENTS ======'); + textEditor.setText(testMyCamelMove.toString()); + setCursorAtBeginning(); + dumpEditorSelection(); + fireEventWhileSelectionChanges('ArrowRight', [camelJumpModifier], next); + }, + + function testAltLeft(next) { + setCursorAtEnd(); + dumpEditorSelection(); + fireEventWhileSelectionChanges('ArrowLeft', [camelJumpModifier], next); + }, + + function testAltShiftRight(next) { + setCursorAtBeginning(); + dumpEditorSelection(); + fireEventWhileSelectionChanges('ArrowRight', [camelJumpModifier, 'shiftKey'], next); + }, + + function testAltShiftLeft(next) { + setCursorAtEnd(); + dumpEditorSelection(); + fireEventWhileSelectionChanges('ArrowLeft', [camelJumpModifier, 'shiftKey'], next); + } + ]); +} + +</script> +</head> + +<body onload="runTest();"> +<p> +This test checks how text editor handles different movements: ctrl-left, ctrl-right, ctrl-shift-left, ctrl-backspace, alt-left, alt-right, alt-shift-left, alt-shift-right. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/accessibility/autocomplete-attribute-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/accessibility/autocomplete-attribute-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/accessibility/autocomplete-attribute-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/accessibility/autocomplete-attribute-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/accessibility/autocomplete-attribute.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/accessibility/autocomplete-attribute.html new file mode 100644 index 0000000..763c8add --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/accessibility/autocomplete-attribute.html
@@ -0,0 +1,78 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../resources/accessibility-pane-test.js"></script> +<script> + +function test() { + UI.viewManager.showView('accessibility.view') + .then(() => AccessibilityTestRunner.selectNodeAndWaitForAccessibility('inspected')) + .then(runTests); + + function getPromptForAttribute(attribute) { + var treeElement = AccessibilityTestRunner.findARIAAttributeTreeElement(attribute); + treeElement._startEditing(); + return treeElement._prompt; + } + + function runTests() { + TestRunner.runTestSuite([ + function testCheckedEmptyValue(next) { + var prompt = getPromptForAttribute('aria-checked'); + testAgainstGolden(prompt, '', ['true', 'false', 'mixed'], next); + }, + + function testCheckedFirstCharacter(next) { + var prompt = getPromptForAttribute('aria-checked'); + testAgainstGolden(prompt, 't', ['true'], next); + }, + + function testRoleFirstCharacter(next) { + var prompt = getPromptForAttribute('role'); + testAgainstGolden(prompt, 'b', ['banner', 'button'], next); + } + ]); + } + + function testAgainstGolden(prompt, inputText, golden, callback) { + var proxyElement = document.createElement('div'); + document.body.appendChild(proxyElement); + proxyElement.style = 'webkit-user-select: text; -webkit-user-modify: read-write-plaintext-only'; + proxyElement.textContent = inputText; + var selectionRange = document.createRange(); + var textNode = proxyElement.childNodes[0]; + if (textNode) { + selectionRange.setStart(textNode, inputText.length); + selectionRange.setEnd(textNode, inputText.length); + } else { + selectionRange.selectNodeContents(proxyElement); + } + var range = selectionRange.startContainer.rangeOfWord( + selectionRange.startOffset, prompt._completionStopCharacters, proxyElement, 'backward'); + var prefix = range.toString(); + prompt._buildPropertyCompletions(inputText.substring(0, inputText.length - prefix.length), prefix, true) + .then(completions); + + function completions(result) { + var suggestions = new Set(result.map(s => s.text)); + var i; + for (i = 0; i < golden.length; ++i) { + if (!suggestions.has(golden[i])) + TestRunner.addResult('NOT FOUND: ' + golden[i]); + } + proxyElement.remove(); + callback(); + } + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that autocompletions are computed correctly when editing the ARIA pane. +</p> +<span id="inspected" aria-checked="true" role="checkbox"></span> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/accessibility/edit-aria-attributes-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/accessibility/edit-aria-attributes-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/accessibility/edit-aria-attributes-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/accessibility/edit-aria-attributes-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/accessibility/edit-aria-attributes.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/accessibility/edit-aria-attributes.html new file mode 100644 index 0000000..313ed1c --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/accessibility/edit-aria-attributes.html
@@ -0,0 +1,55 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../resources/accessibility-pane-test.js"></script> +<script> + +function test() { + UI.viewManager.showView('accessibility.view') + .then(() => AccessibilityTestRunner.selectNodeAndWaitForAccessibility('inspected')) + .then(editAriaChecked); + + function editAriaChecked() { + TestRunner.addResult('=== Before attribute modification ==='); + AccessibilityTestRunner.dumpSelectedElementAccessibilityNode(); + var treeElement = AccessibilityTestRunner.findARIAAttributeTreeElement('aria-checked'); + treeElement._startEditing(); + treeElement._prompt._element.textContent = 'false'; + treeElement._prompt._element.dispatchEvent(TestRunner.createKeyEvent('Enter')); + self.runtime.sharedInstance(Accessibility.AccessibilitySidebarView).doUpdate().then(() => { + editRole(); + }); + } + + function editRole() { + TestRunner.addResult('=== After attribute modification ==='); + AccessibilityTestRunner.dumpSelectedElementAccessibilityNode(); + var treeElement = AccessibilityTestRunner.findARIAAttributeTreeElement('role'); + treeElement._startEditing(); + treeElement._prompt._element.textContent = 'radio'; + treeElement._prompt._element.dispatchEvent(TestRunner.createKeyEvent('Enter')); + self.runtime.sharedInstance(Accessibility.AccessibilitySidebarView).doUpdate().then(() => { + postRoleChange(); + }); + } + + function postRoleChange() { + TestRunner.addResult('=== After role modification ==='); + AccessibilityTestRunner.dumpSelectedElementAccessibilityNode(); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that writing an ARIA attribute causes the accessibility node to be updated. +</p> + +<button id="inspected" role="checkbox" aria-checked="true">ARIA checkbox</button> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/attribute-modified-ns-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/attribute-modified-ns-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/attribute-modified-ns-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/attribute-modified-ns-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/attribute-modified-ns.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/attribute-modified-ns.html new file mode 100644 index 0000000..092d2ca --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/attribute-modified-ns.html
@@ -0,0 +1,65 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script> + +function setAttribute(namespace, name, value) +{ + var node = document.getElementById("node"); + node.setAttributeNS(namespace, name, value); +} + +function removeAttribute(name) +{ + var node = document.getElementById("node"); + node.removeAttribute(name); +} + +function test() { + var targetNode; + + TestRunner.runTestSuite([ + function testDumpInitial(next) { + function callback(node) { + targetNode = node; + TestRunner.addResult('========= Original ========'); + ElementsTestRunner.dumpElementsTree(targetNode); + next(); + } + ElementsTestRunner.selectNodeWithId('node', callback); + }, + + function testAttributeUpdated(next) { + function callback() { + TestRunner.domModel.removeEventListener(SDK.DOMModel.Events.AttrModified, callback); + TestRunner.addResult('===== On attribute set ====='); + ElementsTestRunner.dumpElementsTree(targetNode); + next(); + } + TestRunner.domModel.addEventListener(SDK.DOMModel.Events.AttrModified, callback); + TestRunner.evaluateInPage('setAttribute(\'http://www.w3.org/1999/xlink\', \'xlink:href\', \'changed-url\')'); + }, + + function testAttributeRemoved(next) { + function callback() { + TestRunner.domModel.removeEventListener(SDK.DOMModel.Events.AttrRemoved, callback); + TestRunner.addResult('=== On attribute removed ==='); + ElementsTestRunner.dumpElementsTree(targetNode); + next(); + } + TestRunner.domModel.addEventListener(SDK.DOMModel.Events.AttrRemoved, callback); + TestRunner.evaluateInPage('removeAttribute(\'xlink:href\')'); + }, + ]); +} + +</script> +</head> +<body onload="runTest()"> +<p>Tests that elements panel updates dom tree structure upon changing the attribute with namespace.</p> +<svg> + <a id="node" xlink:href="http://localhost">link</a> +</svg> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/bidi-dom-tree-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/bidi-dom-tree-expected.txt new file mode 100644 index 0000000..58e7a9f4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/bidi-dom-tree-expected.txt
@@ -0,0 +1,21 @@ +Tests that elements panel correctly displays DOM tree structure for bi-di pages. + +ویکیپدیا:خوشآمدید + <!DOCTYPE html> +- <html> + - <head> + <meta charset="utf-8"> + <script src="../../inspector/inspector-test.js"></script> + <script src="../../inspector/elements-test.js"></script> + - <script> + \nfunction test() {\n // Warm up highlighter module.\n runtime.loadModulePromise('source_frame').then(function() {\n ElementsTestRunner.expandElementsTree(step1);\n });\n\n function step1() {\n ElementsTestRunner.dumpElementsTree();\n TestRunner.completeTest();\n }\n}\n\n + </script> + </head> + - <body onload="runTest()"> + - <p> + "\nTests that elements panel correctly displays DOM tree structure for bi-di pages.\n" + </p> + <div title="ویکی‌پدیا:خوش‌آمدید">ویکی‌پدیا:خوش‌آمدید</div> + </body> + </html> +
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/bidi-dom-tree.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/bidi-dom-tree.html new file mode 100644 index 0000000..54418d5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/bidi-dom-tree.html
@@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script> + +function test() { + // Warm up highlighter module. + runtime.loadModulePromise('source_frame').then(function() { + ElementsTestRunner.expandElementsTree(step1); + }); + + function step1() { + ElementsTestRunner.dumpElementsTree(); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that elements panel correctly displays DOM tree structure for bi-di pages. +</p> + +<div title="ویکیپدیا:خوشآمدید">ویکیپدیا:خوشآمدید</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/breadcrumb-updates-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/breadcrumb-updates-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/breadcrumb-updates-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/breadcrumb-updates-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/breadcrumb-updates.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/breadcrumb-updates.html new file mode 100644 index 0000000..93f4abb1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/breadcrumb-updates.html
@@ -0,0 +1,57 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script> + +function changeClass() +{ + document.getElementsByClassName("firstClass")[0].className = "anotherClass"; +} + +function deleteClass() +{ + document.getElementsByClassName("anotherClass")[0].className = ""; +} + +function test() { + ElementsTestRunner.expandElementsTree(step0); + + function step0() { + TestRunner.addSniffer(Elements.ElementsBreadcrumbs.prototype, 'update', step1); + ElementsTestRunner.selectNodeWithId('target'); + } + + function step1() { + ElementsTestRunner.dumpBreadcrumb('Original breadcrumb'); + TestRunner.addSniffer(Elements.ElementsBreadcrumbs.prototype, 'update', step2); + TestRunner.evaluateInPage('changeClass()'); + } + + function step2() { + ElementsTestRunner.dumpBreadcrumb('After class change'); + TestRunner.addSniffer(Elements.ElementsBreadcrumbs.prototype, 'update', step3); + TestRunner.evaluateInPage('deleteClass()'); + } + + function step3() { + ElementsTestRunner.dumpBreadcrumb('After class removal'); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that breadcrumbs are updated upon involved element's attribute changes in the Elements panel. +</p> + +<div class="firstClass"> + <div id="target"></div> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/css-rule-hover-highlights-selectors-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/css-rule-hover-highlights-selectors-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/css-rule-hover-highlights-selectors-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/css-rule-hover-highlights-selectors-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/css-rule-hover-highlights-selectors.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/css-rule-hover-highlights-selectors.html new file mode 100644 index 0000000..8285f68 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/css-rule-hover-highlights-selectors.html
@@ -0,0 +1,127 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<style> +.border { + border: 1px solid black; +} +</style> +<script> + +function requestAnimationFramePromise() +{ + return new Promise(fulfill => requestAnimationFrame(fulfill)); +} + +function buildShadowDOM() +{ + var host = document.querySelector("body"); + var root = host.createShadowRoot(); + var template = document.querySelector("#dom-template"); + var clone = document.importNode(template.content, true); + root.appendChild(clone); + var second = root.querySelector("#fifth"); + second.id = "inspected-shadow"; + runTest(); +} + +function test() { + TestRunner.runTestSuite([ + function setupProxyOverlay(next) { + TestRunner.evaluateFunctionInOverlay(drawHighlightProxy, next); + }, + + function testRegularNodeSelection(next) { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', onSelected); + + function onSelected() { + resetHighlightCount(onHighlightCountReset); + } + + function onHighlightCountReset() { + var section = ElementsTestRunner.firstMatchedStyleSection(); + section._highlight(); + TestRunner.callFunctionInPageAsync('requestAnimationFramePromise').then(onHighlighted); + } + + function onHighlighted() { + dumpHighlightCount(next); + } + }, + + function testShadowDOMNodeSelection(next) { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected-shadow', onSelected); + + function onSelected() { + resetHighlightCount(onHighlightCountReset); + } + + function onHighlightCountReset() { + var section = ElementsTestRunner.firstMatchedStyleSection(); + section._highlight(); + TestRunner.callFunctionInPageAsync('requestAnimationFramePromise').then(onHighlighted); + } + + function onHighlighted() { + dumpHighlightCount(next); + } + }, + ]); + + function drawHighlightProxy() { + window._highlightsForTest = []; + var oldDrawHighlight = drawHighlight; + drawHighlight = proxy; + + function proxy(highlight, context) { + window._highlightsForTest.push(highlight); + oldDrawHighlight(highlight, context); + } + } + + function reportHighlights() { + var result = window._highlightsForTest.length; + window._highlightsForTest = []; + return result + ''; + } + + function dumpHighlightCount(next) { + TestRunner.evaluateFunctionInOverlay(reportHighlights, onResults); + + function onResults(count) { + TestRunner.addResult('Highlights drawn: ' + count); + next(); + } + } + + function resetHighlightCount(next) { + TestRunner.evaluateFunctionInOverlay(reportHighlights, next); + } +} + +</script> +</head> + +<body onload="buildShadowDOM()"> +<p> +Tests that long-hovering over StylesSidebar matched rule selector highlights +matching nodes in the page. +</p> +<div class="border">1st</div> +<div id="inspected" class="border">2nd</div> +<div class="border">3rd</div> +<template id="dom-template"> + <style> + .bck { + border: 1px solid black; + } + </style> + <div class="bck">1st</div> + <div class="bck">2nd</div> + <div class="bck">3rd</div> + <div class="bck">4th</div> + <div class="bck" id="fifth">5th</div> +</template> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/dom-agent-query-selector-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/dom-agent-query-selector-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/dom-agent-query-selector-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/dom-agent-query-selector-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/dom-agent-query-selector.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/dom-agent-query-selector.html new file mode 100644 index 0000000..b9135b1f --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/dom-agent-query-selector.html
@@ -0,0 +1,73 @@ +<html> +<head> + +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeWithId('container', step1); + + function step1(node) { + var containerId = node.id; + var documentId = node.ownerDocument.id; + + TestRunner.runTestSuite([ + function testDocumentQuerySelector(next) { + TestRunner.DOMAgent.querySelector(documentId, 'div.foo').then(dumpNodes.bind(null, next)); + }, + + function testDocumentQuerySelectorAll(next) { + TestRunner.DOMAgent.querySelectorAll(documentId, 'div.foo').then(dumpNodes.bind(null, next)); + }, + + function testQuerySelector(next) { + TestRunner.DOMAgent.querySelector(containerId, 'div.foo').then(dumpNodes.bind(null, next)); + }, + + function testQuerySelectorAll(next) { + TestRunner.DOMAgent.querySelectorAll(containerId, 'div.foo').then(dumpNodes.bind(null, next)); + } + ]); + } + + function dumpNodes(next, nodeIds) { + if (!nodeIds) { + next(); + return; + } + + if (!(nodeIds.constructor && nodeIds.constructor.name === 'Array')) + nodeIds = [nodeIds]; + + for (var i = 0; i < nodeIds.length; ++i) { + if (!nodeIds[i]) + TestRunner.addResult('no results'); + else { + var node = TestRunner.domModel.nodeForId(nodeIds[i]); + TestRunner.addResult('node id: ' + node.getAttribute('id')); + } + } + next(); + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests DOMAgent.querySelector and DOMAgent.querySelectorAll. +</p> + +<div id="id1" class="foo"></div> +<div id="id2" class="foo"></div> + +<div id="container"> + <div id="id3" class="foo"></div> + <div id="id4" class="foo"></div> + <div id="id5" class="foo"></div> + <div id="id6" class="foo"></div> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/dom-search-crash-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/dom-search-crash-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/dom-search-crash-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/dom-search-crash-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/dom-search-crash.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/dom-search-crash.html new file mode 100644 index 0000000..0e3e2fe0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/dom-search-crash.html
@@ -0,0 +1,25 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script> +function test() { + TestRunner.runTestSuite([ + function testSetUp(next) { + TestRunner.domModel.requestDocument(next); + }, + + function testNoCrash(next) { + TestRunner.domModel.performSearch('FooBar', false).then(next); + } + ]); +} +</script> +</head> + +<body> +<p> +Tests that elements panel search is not crashing on documentElement-less cases. +</p> +<iframe src="resources/dom-search-crash-iframe.html" onload="runTest()"></iframe> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/delete-from-document-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/delete-from-document-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/edit/delete-from-document-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/delete-from-document-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/delete-from-document.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/delete-from-document.html new file mode 100644 index 0000000..2d1e052 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/delete-from-document.html
@@ -0,0 +1,38 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function removeDoctype() +{ + document.removeChild(document.firstChild); +} + +function test() { + ElementsTestRunner.expandElementsTree(step1); + + function step1() { + TestRunner.addResult('Before remove doctype'); + ElementsTestRunner.dumpElementsTree(null, 1); + TestRunner.evaluateInPage('removeDoctype()', step2); + } + + function step2() { + TestRunner.addResult('After remove doctype'); + ElementsTestRunner.dumpElementsTree(null, 1); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that removing child from the document is handled properly in the elements panel. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-1-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-1-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-1-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-1-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-1.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-1.html new file mode 100644 index 0000000..1f78557 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-1.html
@@ -0,0 +1,82 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../resources/edit-dom-test.js"></script> +<script> + +function test() { + // Save time on style updates. + Elements.StylesSidebarPane.prototype.update = function() {}; + Elements.MetricsSidebarPane.prototype.update = function() {}; + + TestRunner.runTestSuite([ + function testSetUp(next) { + ElementsTestRunner.expandElementsTree(next); + }, + + function testRemove(next) { + ElementsTestRunner.domActionTestForNodeId('testRemove', 'node-to-remove', testBody, next); + + function testBody(node, done) { + var treeElement = ElementsTestRunner.firstElementsTreeOutline().findTreeElement(node); + treeElement.remove(); + TestRunner.deprecatedRunAfterPendingDispatches(done); + } + }, + + function testSetNodeName(next) { + ElementsTestRunner.domActionTestForNodeId('testSetNodeName', 'node-to-set-name', testBody, next); + + function testBody(node, done) { + ElementsTestRunner.editNodePartAndRun(node, 'webkit-html-tag-name', 'span', done); + } + }, + + function testSetNodeNameInput(next) { + ElementsTestRunner.domActionTestForNodeId('testSetNodeNameInput', 'node-to-set-name-input', testBody, next); + + function testBody(node, done) { + ElementsTestRunner.editNodePartAndRun(node, 'webkit-html-tag-name', 'input', done); + } + }, + + function testSetNodeValue(next) { + ElementsTestRunner.domActionTestForNodeId('testSetNodeValue', 'node-to-set-value', testBody, next); + + function testBody(node, done) { + ElementsTestRunner.editNodePartAndRun(node, 'webkit-html-text-node', ' \n Edited Text \n ', done); + } + }, + ]); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that user can mutate DOM by means of elements panel. +</p> + +<div> + <div id="testRemove"> + <div id="node-to-remove"></div> + </div> + + <div id="testSetNodeName"> + <div id="node-to-set-name"></div> + </div> + + <div id="testSetNodeNameInput"> + <div id="node-to-set-name-input"></div> + </div> + + <div id="testSetNodeValue"> + <div id="node-to-set-value"> + Text + </div> + </div> +</div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-2-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-2-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-2-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-2-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-2.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-2.html new file mode 100644 index 0000000..9a93a2b8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-2.html
@@ -0,0 +1,84 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../resources/edit-dom-test.js"></script> +<script> + +function test() { + // Save time on style updates. + Elements.StylesSidebarPane.prototype.update = function() {}; + Elements.MetricsSidebarPane.prototype.update = function() {}; + + TestRunner.runTestSuite([ + function testSetUp(next) { + ElementsTestRunner.expandElementsTree(next); + }, + + function testSetAttribute(next) { + ElementsTestRunner.domActionTestForNodeId('testSetAttribute', 'node-to-set-attribute', testBody, next); + + function testBody(node, done) { + ElementsTestRunner.editNodePartAndRun(node, 'webkit-html-attribute', 'bar="edited attribute"', done, true); + } + }, + + function testSetScriptableAttribute(next) { + ElementsTestRunner.domActionTestForNodeId( + 'testSetScriptableAttribute', 'node-to-set-scriptable-attribute', testBody, next); + + function testBody(node, done) { + ElementsTestRunner.editNodePartAndRun(node, 'webkit-html-attribute', 'onclick="alert(2)"', done, true); + } + }, + + function testRemoveAttribute(next) { + ElementsTestRunner.domActionTestForNodeId('testRemoveAttribute', 'node-to-remove-attribute', testBody, next); + + function testBody(node, done) { + ElementsTestRunner.editNodePartAndRun(node, 'webkit-html-attribute', '', done, true); + } + }, + + function testAddAttribute(next) { + ElementsTestRunner.doAddAttribute('testAddAttribute', 'node-to-add-attribute', 'newattr="new-value"', next); + }, + + function testAddAttributeUnquotedValue(next) { + ElementsTestRunner.doAddAttribute( + 'testAddAttributeUnquotedValue', 'node-to-add-attribute-unquoted-value', 'newattr=unquotedValue', next); + }, + ]); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that user can mutate DOM by means of elements panel. +</p> + +<div> + <div id="testSetAttribute"> + <div foo="attribute value" id="node-to-set-attribute"></div> + </div> + + <div id="testSetScriptableAttribute"> + <div onclick="alert(1)" id="node-to-set-scriptable-attribute"></div> + </div> + + <div id="testRemoveAttribute"> + <div foo="attribute value" id="node-to-remove-attribute"></div> + </div> + + <div id="testAddAttribute"> + <div id="node-to-add-attribute"></div> + </div> + + <div id="testAddAttributeUnquotedValue"> + <div id="node-to-add-attribute-unquoted-value"></div> + </div> +</div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-3-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-3-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-3-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-3-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-3.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-3.html new file mode 100644 index 0000000..d6a57b2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-3.html
@@ -0,0 +1,91 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../resources/edit-dom-test.js"></script> +<script> + +function test() { + // Save time on style updates. + Elements.StylesSidebarPane.prototype.update = function() {}; + Elements.MetricsSidebarPane.prototype.update = function() {}; + + TestRunner.runTestSuite([ + function testSetUp(next) { + ElementsTestRunner.expandElementsTree(next); + }, + + function testEditCommentAsHTML(next) { + function commentNodeSelectionCallback(testNode, callback) { + var childNodes = testNode.children(); + for (var i = 0; i < childNodes.length; ++i) { + if (childNodes[i].nodeType() === 8) { + Common.Revealer.reveal(childNodes[i]); + callback(childNodes[i]); + return; + } + } + TestRunner.addResult('Comment node not found'); + TestRunner.completeTest(); + } + ElementsTestRunner.domActionTest('testEditCommentAsHTML', commentNodeSelectionCallback, testBody, next); + + function testBody(node, done) { + var treeOutline = ElementsTestRunner.firstElementsTreeOutline(); + var treeElement = treeOutline.findTreeElement(node); + treeOutline.toggleEditAsHTML(node); + TestRunner.deprecatedRunAfterPendingDispatches(step2); + + function step2() { + TestRunner.addResult(treeElement._editing.editor.text()); + treeElement._editing.editor.setText('<div foo="bar-comment">Element</div>'); + var event = TestRunner.createKeyEvent('Enter'); + event.isMetaOrCtrlForTest = true; + treeElement._editing.editor.widget().element.dispatchEvent(event); + TestRunner.deprecatedRunAfterPendingDispatches(done); + } + } + }, + + function testEditAsHTML(next) { + ElementsTestRunner.domActionTestForNodeId('testEditAsHTML', 'node-to-edit-as-html', testBody, next); + + function testBody(node, done) { + var treeOutline = ElementsTestRunner.firstElementsTreeOutline(); + var treeElement = treeOutline.findTreeElement(node); + treeOutline.toggleEditAsHTML(node); + TestRunner.deprecatedRunAfterPendingDispatches(step2); + + function step2() { + TestRunner.addResult(treeElement._editing.editor.text()); + treeElement._editing.editor.setText('<span foo="bar"><span id="inner-span">Span contents</span></span>'); + var event = TestRunner.createKeyEvent('Enter'); + event.isMetaOrCtrlForTest = true; + treeElement._editing.editor.widget().element.dispatchEvent(event); + TestRunner.deprecatedRunAfterPendingDispatches( + ElementsTestRunner.expandElementsTree.bind(InspectorTest, done)); + } + } + }, + ]); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that user can mutate DOM by means of elements panel. +</p> + +<div> + <div id="testEditCommentAsHTML"> + <!-- Comment --> + </div> + + <div id="testEditAsHTML"> + <div id="node-to-edit-as-html"><span id="span">Text</span></div> + </div> +</div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-4-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-4-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-4-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-4-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-4.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-4.html new file mode 100644 index 0000000..d3576058 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-4.html
@@ -0,0 +1,104 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../resources/edit-dom-test.js"></script> +<script> + +function test() { + // Save time on style updates. + Elements.StylesSidebarPane.prototype.update = function() {}; + Elements.MetricsSidebarPane.prototype.update = function() {}; + + TestRunner.runTestSuite([ + function testSetUp(next) { + ElementsTestRunner.expandElementsTree(next); + }, + + function testEditInvisibleCharsAsHTML(next) { + ElementsTestRunner.domActionTestForNodeId( + 'testEditInvisibleCharsAsHTML', 'node-with-invisible-chars', testBody, next); + + function testBody(node, done) { + var treeOutline = ElementsTestRunner.firstElementsTreeOutline(); + var treeElement = treeOutline.findTreeElement(node); + treeOutline.toggleEditAsHTML(node); + TestRunner.deprecatedRunAfterPendingDispatches(step2); + + function step2() { + var editor = treeElement._editing.editor; + TestRunner.addResult(editor.text()); + editor.setText(editor.text().replace(/&/g, '#')); + var event = TestRunner.createKeyEvent('Enter'); + event.isMetaOrCtrlForTest = true; + editor.widget().element.dispatchEvent(event); + TestRunner.deprecatedRunAfterPendingDispatches( + ElementsTestRunner.expandElementsTree.bind(InspectorTest, done)); + } + } + }, + + function testEditScript(next) { + ElementsTestRunner.domActionTestForNodeId('testEditScript', 'node-to-edit-script', testBody, next); + + function testBody(node, done) { + ElementsTestRunner.editNodePartAndRun(node, 'webkit-html-text-node', 'var i = 0;\n var j = 0;\n', done); + } + }, + + function testEditSVGAttribute(next) { + ElementsTestRunner.domActionTestForNodeId('testEditSVG', 'node-to-edit-svg-attribute', testBody, next); + + function testBody(node, done) { + var treeOutline = ElementsTestRunner.firstElementsTreeOutline(); + var treeElement = treeOutline.findTreeElement(node); + treeOutline.toggleEditAsHTML(node); + TestRunner.deprecatedRunAfterPendingDispatches(step2); + + function step2() { + var value = treeElement._editing.editor._codeMirror.getValue(); + TestRunner.addResult(value); + treeElement._editing.editor.setText(value.replace('100', '110')); + var event = TestRunner.createKeyEvent('Enter'); + event.isMetaOrCtrlForTest = true; + treeElement._editing.editor.widget().element.dispatchEvent(event); + TestRunner.deprecatedRunAfterPendingDispatches( + ElementsTestRunner.expandElementsTree.bind(InspectorTest, done)); + } + } + } + ]); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that user can mutate DOM by means of elements panel. +</p> + +<div> + <div id="testEditInvisibleCharsAsHTML"> + <div id="node-with-invisible-chars">A B C D E‌F‍G‏H‎I</div> + </div> + + <div id="testEditScript"> + <script id="node-to-edit-script"> + + var i = 0; + var j = 5; + for (; i < j; ++i) { + // Do nothing. + } + + </script> + </div> + + <div id="testEditSVG"> + <svg id="node-to-edit-svg-attribute" xmlns:xlink="test" width="100"> + </svg> + </div> +</div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-shadow-1-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-shadow-1-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-shadow-1-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-shadow-1-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-shadow-1.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-shadow-1.html new file mode 100644 index 0000000..85f18100 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-shadow-1.html
@@ -0,0 +1,53 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../resources/edit-dom-test.js"></script> +<script> + +function test() { + // Save time on style updates. + UI.viewManager.showView('elements'); + + Elements.StylesSidebarPane.prototype.update = function() {}; + Elements.MetricsSidebarPane.prototype.update = function() {}; + + TestRunner.runTestSuite([ + function testSetUp(next) { + ElementsTestRunner.expandElementsTree(next); + }, + + function testSetAuthorShadowDOMElementAttribute(next) { + ElementsTestRunner.domActionTestForNodeId( + 'testSetAuthorShadowDOMElementAttribute', 'shadow-node-to-set-attribute', testBody, next); + + function testBody(node, done) { + ElementsTestRunner.editNodePartAndRun(node, 'webkit-html-attribute', 'bar="edited attribute"', done, true); + } + }, + ]); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that user can mutate author shadow DOM by means of elements panel. +</p> + +<div> + <div id="testSetAuthorShadowDOMElementAttribute"></div> +</div> +<script> +function createRootWithContents(id, html) +{ + var container = document.getElementById(id); + var root = container.createShadowRoot(); + root.innerHTML = html; +} + +createRootWithContents("testSetAuthorShadowDOMElementAttribute", "<div foo='attribute value' id='shadow-node-to-set-attribute'></div>"); +</script> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-shadow-2-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-shadow-2-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-shadow-2-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-shadow-2-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-shadow-2.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-shadow-2.html new file mode 100644 index 0000000..380f8cc --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-dom-actions-shadow-2.html
@@ -0,0 +1,67 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../resources/edit-dom-test.js"></script> +<script> + +function test() { + // Save time on style updates. + UI.viewManager.showView('elements'); + + Elements.StylesSidebarPane.prototype.update = function() {}; + Elements.MetricsSidebarPane.prototype.update = function() {}; + + TestRunner.runTestSuite([ + function testSetUp(next) { + ElementsTestRunner.expandElementsTree(next); + }, + + function testEditShadowDOMAsHTML(next) { + ElementsTestRunner.domActionTestForNodeId( + 'testEditAuthorShadowDOMAsHTML', 'authorShadowDOMElement', testBody, next); + + function testBody(node, done) { + var treeOutline = ElementsTestRunner.firstElementsTreeOutline(); + var treeElement = treeOutline.findTreeElement(node); + treeOutline.toggleEditAsHTML(node); + TestRunner.deprecatedRunAfterPendingDispatches(step2); + + function step2() { + TestRunner.addResult(treeElement._editing.editor.text()); + treeElement._editing.editor.setText( + '<span foo="shadow-span"><span id="inner-shadow-span">Shadow span contents</span></span>'); + var event = TestRunner.createKeyEvent('Enter'); + event.isMetaOrCtrlForTest = true; + treeElement._editing.editor.widget().element.dispatchEvent(event); + TestRunner.deprecatedRunAfterPendingDispatches( + ElementsTestRunner.expandElementsTree.bind(InspectorTest, done)); + } + } + } + ]); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that user can mutate author shadow DOM by means of elements panel. +</p> + +<div> + <div id="testEditAuthorShadowDOMAsHTML"></div> +</div> +<script> +function createRootWithContents(id, html) +{ + var container = document.getElementById(id); + var root = container.createShadowRoot(); + root.innerHTML = html; +} + +createRootWithContents("testEditAuthorShadowDOMAsHTML", "<div id='authorShadowDOMElement'></div>"); +</script> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-style-attribute-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-style-attribute-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/edit/edit-style-attribute-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-style-attribute-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-style-attribute.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-style-attribute.html new file mode 100644 index 0000000..c00cbf7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-style-attribute.html
@@ -0,0 +1,63 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function testSetNewValue() +{ + document.getElementById("node-set-new-value").style.setProperty("color", "blue"); +} + +function testSetSameValue() +{ + document.getElementById("node-set-same-value").style.setProperty("color", "red"); +} + +function test() { + // Save time on style updates. + Elements.StylesSidebarPane.prototype.update = function() {}; + Elements.MetricsSidebarPane.prototype.update = function() {}; + + TestRunner.runTestSuite([ + function testSetUp(next) { + ElementsTestRunner.expandElementsTree(next); + }, + + function testSetNewValue(next) { + TestRunner.evaluateInPage('testSetNewValue()'); + + TestRunner.domModel.addEventListener(SDK.DOMModel.Events.AttrModified, listener); + function listener(event) { + TestRunner.addResult('SDK.DOMModel.Events.AttrModified should be issued'); + TestRunner.domModel.removeEventListener(SDK.DOMModel.Events.AttrModified, listener); + next(); + } + }, + + function testSetSameValue(next) { + TestRunner.evaluateInPage('testSetSameValue()', next); + + TestRunner.domModel.addEventListener(SDK.DOMModel.Events.AttrModified, listener); + function listener(event) { + TestRunner.addResult('SDK.DOMModel.Events.AttrModified should not be issued'); + TestRunner.domModel.removeEventListener(SDK.DOMModel.Events.AttrModified, listener); + } + } + ]); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that style modification generates attribute updated event only when attribute is actually changed. +</p> + +<div id="container"> + <div id="node-set-new-value" style="color:red"></div> + <div id="node-set-same-value" style="color:red"></div> +</div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-trimmed-attribute-value-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-trimmed-attribute-value-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/edit/edit-trimmed-attribute-value-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-trimmed-attribute-value-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-trimmed-attribute-value.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-trimmed-attribute-value.html new file mode 100644 index 0000000..f1f448e --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/edit-trimmed-attribute-value.html
@@ -0,0 +1,46 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeWithId('inspected', execute); + + function execute() { + var treeElement = ElementsTestRunner.firstElementsTreeOutline().findTreeElement( + ElementsTestRunner.expandedNodeWithId('inspected')); + var textElement = treeElement.listItemElement.getElementsByClassName('webkit-html-attribute')[0]; + TestRunner.addResult('Original textContent'); + TestRunner.addResult(treeElement.title.textContent); + + treeElement._startEditingTarget(textElement); + TestRunner.addResult('textContent when editing \'href\''); + TestRunner.addResult(treeElement.title.textContent); + + eventSender.keyDown('Tab'); + TestRunner.addResult('textContent after moving to \'id\''); + TestRunner.addResult(treeElement.title.textContent); + + textElement = treeElement.listItemElement.getElementsByClassName('webkit-html-attribute')[1]; + textElement.dispatchEvent(TestRunner.createKeyEvent('Escape')); + TestRunner.addResult('textContent after canceling the edit (equal to the original one)'); + TestRunner.addResult(treeElement.title.textContent); + + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that user can mutate DOM by means of elements panel. +</p> + +<div> + <a href="data:text/plain;,12345678901234567890123456789012345678901234567890123456789012345678901234567890/123456789012345678901234567890123456789012345678901234567890" id="inspected">Anchor</a> +</div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/insert-node-collapsed-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/insert-node-collapsed-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/edit/insert-node-collapsed-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/insert-node-collapsed-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/insert-node-collapsed.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/insert-node-collapsed.html new file mode 100644 index 0000000..abb5b84f --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/insert-node-collapsed.html
@@ -0,0 +1,55 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function appendChild() +{ + var container = document.getElementById("container"); + var child = document.createElement("div"); + child.setAttribute("id", "appended"); + container.appendChild(child); +} + +function test() { + var containerNode; + + TestRunner.runTestSuite([ + function testDumpInitial(next) { + function callback(node) { + containerNode = node; + TestRunner.addResult('========= Original ========'); + ElementsTestRunner.dumpElementsTree(containerNode); + next(); + } + ElementsTestRunner.selectNodeWithId('container', callback); + }, + + function testAppend(next) { + function callback() { + ElementsTestRunner.firstElementsTreeOutline().runPendingUpdates(); + TestRunner.deprecatedRunAfterPendingDispatches(function() { + TestRunner.addResult('======== Appended ========='); + ElementsTestRunner.dumpElementsTree(containerNode); + next(); + }); + } + TestRunner.evaluateInPage('appendChild()', callback); + } + ]); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that elements panel updates hasChildren flag upon adding children to collapsed nodes. +</p> + +<div id="container"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/perform-undo-undo-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/perform-undo-undo-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/edit/perform-undo-undo-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/perform-undo-undo-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/perform-undo-undo.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/perform-undo-undo.html new file mode 100644 index 0000000..810d650 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/perform-undo-undo.html
@@ -0,0 +1,50 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + var containerNode; + ElementsTestRunner.expandElementsTree(step1); + + function step1(node) { + containerNode = ElementsTestRunner.expandedNodeWithId('container'); + TestRunner.addResult('========= Original ========'); + ElementsTestRunner.dumpElementsTree(containerNode); + step2(); + } + + function step2() { + function callback() { + TestRunner.addResult('===== Modified element ====='); + ElementsTestRunner.dumpElementsTree(containerNode); + step3(); + } + containerNode.setAttribute('', 'foo="bar"', callback); + } + + async function step3() { + await TestRunner.domModel.undo(); + TestRunner.addResult('===== Undo 1 ====='); + ElementsTestRunner.dumpElementsTree(containerNode); + + TestRunner.addResult('===== Undo 2 ====='); + ElementsTestRunner.dumpElementsTree(containerNode); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that client can call undo multiple times with non-empty history. +</p> + +<div style="display:none" id="container"> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/remove-node-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/remove-node-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/edit/remove-node-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/remove-node-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/remove-node.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/remove-node.html new file mode 100644 index 0000000..50e8667f2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/remove-node.html
@@ -0,0 +1,91 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function removeNode(id) +{ + var child = document.getElementById(id); + child.parentNode.removeChild(child); +} + +function removeTextNode(id) +{ + document.getElementById(id).textContent = ""; +} + +function test() { + var containerNode; + + TestRunner.runTestSuite([ + function testDumpInitial(next) { + function callback(node) { + containerNode = ElementsTestRunner.expandedNodeWithId('container'); + + TestRunner.addResult('========= Original ========'); + ElementsTestRunner.dumpElementsTree(containerNode); + next(); + } + ElementsTestRunner.expandElementsTree(callback); + }, + + function testRemoveTextNode(next) { + function callback() { + TestRunner.addResult('===== Removed Text node ====='); + ElementsTestRunner.dumpElementsTree(containerNode); + next(); + } + TestRunner.evaluateInPage('removeTextNode(\'child1\')', callback); + }, + + function testRemoveFirst(next) { + function callback() { + TestRunner.addResult('===== Removed first ====='); + ElementsTestRunner.dumpElementsTree(containerNode); + next(); + } + TestRunner.evaluateInPage('removeNode(\'child1\')', callback); + }, + + function testRemoveMiddle(next) { + function callback() { + TestRunner.addResult('===== Removed middle ====='); + ElementsTestRunner.dumpElementsTree(containerNode); + next(); + } + TestRunner.evaluateInPage('removeNode(\'child3\')', callback); + }, + + function testRemoveLast(next) { + function callback() { + TestRunner.addResult('===== Removed last ====='); + ElementsTestRunner.dumpElementsTree(containerNode); + next(); + } + TestRunner.evaluateInPage('removeNode(\'child4\')', callback); + }, + + function testRemoveTheOnly(next) { + function callback() { + TestRunner.addResult('===== Removed the only ====='); + ElementsTestRunner.dumpElementsTree(containerNode); + next(); + } + TestRunner.evaluateInPage('removeNode(\'child2\')', callback); + } + ]); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that elements panel updates dom tree structure upon node removal. +</p> + +<div id="container"><div id="child1">Text</div><div id="child2"></div><div id="child3"></div><div id="child4"></div></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/set-attribute-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-attribute-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/edit/set-attribute-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-attribute-expected.txt
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/set-attribute-non-html-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-attribute-non-html-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/edit/set-attribute-non-html-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-attribute-non-html-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-attribute-non-html.svg b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-attribute-non-html.svg new file mode 100644 index 0000000..1fb3012 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-attribute-non-html.svg
@@ -0,0 +1,49 @@ +<?xml version="1.0"?> +<svg xmlns="http://www.w3.org/2000/svg"> +<foreignObject> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script><![CDATA[ + +function test() +{ + var targetNode; + + InspectorTest.runTestSuite([ + function testDumpInitial(next) + { + function callback(node) + { + targetNode = node; + next(); + } + InspectorTest.selectNodeWithId("node", callback); + }, + + function testSetAttributeText(next) + { + function callback(error) + { + next(); + } + targetNode.setAttribute("foo", "foo2='baz2' foo3='baz3'", callback); + } + ]); +} +]]> +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that elements panel updates dom tree structure upon setting attribute on non HTML elements. PASSes if there is no crash. +</p> + +<div id="node"></div> + +</body> +</html> +</foreignObject> +</svg>
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-attribute.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-attribute.html new file mode 100644 index 0000000..3f2833f --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-attribute.html
@@ -0,0 +1,126 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function setAttribute(name, value) +{ + var node = document.getElementById("node"); + node.setAttribute(name, value); +} + +function removeAttribute(name) +{ + var node = document.getElementById("node"); + node.removeAttribute(name); +} + +function test() { + var targetNode; + + TestRunner.runTestSuite([ + function testDumpInitial(next) { + function callback(node) { + targetNode = node; + TestRunner.addResult('========= Original ========'); + ElementsTestRunner.dumpElementsTree(targetNode); + next(); + } + ElementsTestRunner.selectNodeWithId('node', callback); + }, + + function testAttributeUpdated(next) { + function callback() { + TestRunner.domModel.removeEventListener(SDK.DOMModel.Events.AttrModified, callback); + TestRunner.addResult('===== On attribute set ====='); + ElementsTestRunner.dumpElementsTree(targetNode); + next(); + } + TestRunner.domModel.addEventListener(SDK.DOMModel.Events.AttrModified, callback); + TestRunner.evaluateInPage('setAttribute(\'name\', \'value\')'); + }, + + function testAttributeSameValueNotUpdated(next) { + function callback() { + TestRunner.addResult('===== On attribute modified (should be \'newValue\') ====='); + ElementsTestRunner.dumpElementsTree(targetNode); + TestRunner.domModel.removeEventListener(SDK.DOMModel.Events.AttrModified, callback); + next(); + } + TestRunner.domModel.addEventListener(SDK.DOMModel.Events.AttrModified, callback); + // Setting the same property value should not result in the AttrModified event. + TestRunner.evaluateInPage('setAttribute(\'name\', \'value\')'); + TestRunner.evaluateInPage('setAttribute(\'name\', \'value\')'); + TestRunner.evaluateInPage('setAttribute(\'name\', \'newValue\')'); + }, + + function testAttributeRemoved(next) { + function callback() { + TestRunner.domModel.removeEventListener(SDK.DOMModel.Events.AttrRemoved, callback); + TestRunner.addResult('=== On attribute removed ==='); + ElementsTestRunner.dumpElementsTree(targetNode); + next(); + } + TestRunner.domModel.addEventListener(SDK.DOMModel.Events.AttrRemoved, callback); + TestRunner.evaluateInPage('removeAttribute(\'name\')'); + }, + + function testSetAttributeValue(next) { + function callback() { + TestRunner.domModel.removeEventListener(SDK.DOMModel.Events.AttrModified, callback); + TestRunner.addResult('=== Set attribute value ==='); + ElementsTestRunner.dumpElementsTree(targetNode); + next(); + } + TestRunner.domModel.addEventListener(SDK.DOMModel.Events.AttrModified, callback); + targetNode.setAttributeValue('foo', 'bar'); + }, + + function testSetAttributeText(next) { + function callback() { + TestRunner.domModel.removeEventListener(SDK.DOMModel.Events.AttrRemoved, callback); + TestRunner.addResult('=== Set attribute as text ==='); + ElementsTestRunner.dumpElementsTree(targetNode); + next(); + } + TestRunner.domModel.addEventListener(SDK.DOMModel.Events.AttrRemoved, callback); + targetNode.setAttribute('foo', 'foo2=\'baz2\' foo3=\'baz3\''); + }, + + function testRemoveAttributeAsText(next) { + function callback() { + TestRunner.domModel.removeEventListener(SDK.DOMModel.Events.AttrRemoved, callback); + TestRunner.addResult('=== Remove attribute as text ==='); + ElementsTestRunner.dumpElementsTree(targetNode); + next(); + } + TestRunner.domModel.addEventListener(SDK.DOMModel.Events.AttrRemoved, callback); + targetNode.setAttribute('foo3', ''); + }, + + function testSetMalformedAttributeText(next) { + function callback(error) { + TestRunner.addResult('Error: ' + error); + TestRunner.domModel.removeEventListener(SDK.DOMModel.Events.AttrModified, callback); + TestRunner.addResult('=== Set malformed attribute as text ==='); + ElementsTestRunner.dumpElementsTree(targetNode); + next(); + } + targetNode.setAttribute('foo2', 'foo2=\'missingquote', callback); + } + ]); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that elements panel updates dom tree structure upon setting attribute. +</p> + +<div id="node"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/set-outer-html-2-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-outer-html-2-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/edit/set-outer-html-2-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-outer-html-2-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-outer-html-2.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-outer-html-2.html new file mode 100644 index 0000000..6a221c7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-outer-html-2.html
@@ -0,0 +1,71 @@ +<html> +<head> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../resources/set-outer-html-test.js"></script> +<script> + +function onload() +{ + document.getElementById("identity").wrapperIdentity = "identity"; + runTest(); +} + +function test() { + TestRunner.runTestSuite([ + function testSetUp(next) { + ElementsTestRunner.setUpTestSuite(next); + }, + + function testChangeMultipleThings(next) { + var text = ElementsTestRunner.containerText.replace(/<li>.*<\/li>/, ''); + text = text.replace('<h2>', '<h2 foo="bar" bar="baz">'); + ElementsTestRunner.setOuterHTML(text, next); + }, + + function testChangeNestingLevel(next) { + var text = ElementsTestRunner.containerText.replace('<ul>', '<div><ul>'); + var text = text.replace('</ul>', '</ul></div>'); + ElementsTestRunner.setOuterHTML(text, next); + }, + + function testSwapNodes(next) { + var text = ElementsTestRunner.containerText.replace('<h2>Getting involved</h2>', ''); + var text = text.replace('</div>', '<h2>Getting involved</h2></div>'); + ElementsTestRunner.setOuterHTML(text, next); + }, + + function testEditTwoRoots(next) { + var text = ElementsTestRunner.containerText + '<div>Additional node</div>'; + ElementsTestRunner.setOuterHTML(text, next); + }, + + function testDupeNode(next) { + ElementsTestRunner.patchOuterHTML( + '<h2>Getting involved</h2>', '<h2>Getting involved</h2><h2>Getting involved</h2>', next); + } + ]); +} +</script> +</head> + +<body onload="onload()"> +<p> +Tests DOMAgent.setOuterHTML protocol method (part 2). +</p> + +<div id="container" style="display:none"> +<p>WebKit is used by <a href="http://www.apple.com/safari/">Safari</a>, Dashboard, etc..</p> +<h2>Getting involved</h2> +<p id="identity">There are many ways to get involved. You can:</p> +<ul> + <li></li> +</ul> +<ul> + <li></li> +</ul> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/set-outer-html-body-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-outer-html-body-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/edit/set-outer-html-body-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-outer-html-body-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-outer-html-body.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-outer-html-body.html new file mode 100644 index 0000000..d7707e3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-outer-html-body.html
@@ -0,0 +1,65 @@ +<html> +<head> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + var htmlNode; + var bodyNode; + var headNode; + + TestRunner.runTestSuite([ + function testSetUp(next) { + ElementsTestRunner.expandElementsTree(step1); + function step1() { + htmlNode = ElementsTestRunner.expandedNodeWithId('html'); + headNode = ElementsTestRunner.expandedNodeWithId('head'); + bodyNode = ElementsTestRunner.expandedNodeWithId('body'); + next(); + } + }, + + function testSetBody(next) { + TestRunner.DOMAgent.setOuterHTML(bodyNode.id, '<body>New body content</body>').then(dumpHTML(next)); + }, + + function testInsertComments(next) { + TestRunner.DOMAgent + .setOuterHTML(bodyNode.id, '<!-- new comment between head and body --><body>New body content</body>') + .then(dumpHTML(next)); + }, + + function testSetHead(next) { + TestRunner.DOMAgent.setOuterHTML(headNode.id, '<head><!-- new head content --></head>').then(dumpHTML(next)); + }, + + function testSetHTML(next) { + TestRunner.DOMAgent + .setOuterHTML( + htmlNode.id, + '<html><head><!-- new head content --></head><body>Setting body as a part of HTML.</body></html>') + .then(dumpHTML(next)); + } + ]); + + function dumpHTML(next) { + async function dump() { + var text = await TestRunner.DOMAgent.getOuterHTML(htmlNode.id); + TestRunner.addResult(text); + next(); + } + return dump; + } +} +</script> +</head> + +<body> +<p> +Tests DOMAgent.setOuterHTML invoked on body tag. See https://bugs.webkit.org/show_bug.cgi?id=62272. +<iframe src="../resources/set-outer-html-body-iframe.html" onload="runTest()"></iframe> +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/set-outer-html-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-outer-html-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/edit/set-outer-html-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-outer-html-expected.txt
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/set-outer-html-for-xhtml-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-outer-html-for-xhtml-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/edit/set-outer-html-for-xhtml-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-outer-html-for-xhtml-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-outer-html-for-xhtml.xhtml b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-outer-html-for-xhtml.xhtml new file mode 100644 index 0000000..f8e76b9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-outer-html-for-xhtml.xhtml
@@ -0,0 +1,74 @@ +<html id="html" xmlns="http://www.w3.org/1999/xhtml"> +<head> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../resources/set-outer-html-test.js"></script> +<script> +//<![CDATA[ + +function onload() +{ + document.getElementById("identity").wrapperIdentity = "identity"; + runTest(); +} + +function test() +{ + TestRunner.runTestSuite([ + function testSetUp(next) + { + ElementsTestRunner.setUpTestSuite(next); + }, + + function testChangeCharacterData(next) + { + ElementsTestRunner.patchOuterHTML("Getting involved", "Getting not involved", next); + }, + + function testChangeAttributes(next) + { + ElementsTestRunner.patchOuterHTML("<a href", "<a foo=\"bar\" href", next); + }, + + function testRemoveLastChild(next) + { + ElementsTestRunner.patchOuterHTML("Getting involved", "", next); + }, + + function testSplitNode(next) + { + ElementsTestRunner.patchOuterHTML("Getting involved", "Getting</h2><h2>involved", next); + }, + + function testChangeNodeName(next) + { + ElementsTestRunner.patchOuterHTML("<h2>Getting involved</h2>", "<h3>Getting involved</h3>", next); + }, + + async function testInvalidDocumentDoesNotCrash(next) + { + var htmlId = ElementsTestRunner.expandedNodeWithId("html").id; + await TestRunner.DOMAgent.setOuterHTML(htmlId, "foo"); + TestRunner.addResult("PASS: No crash"); + next(); + } + ]); +} +//]]> +</script> +</head> + +<body onload="onload()"> +<p> +Tests DOMAgent.setOuterHTML protocol method against an XHTML document. +</p> + +<div id="container" style="display:none"> +<p>WebKit is used by <a href="http://www.apple.com/safari/">Safari</a>, Dashboard, etc.</p> +<h2>Getting involved</h2> +<p id="identity">There are many ways to get involved. You can:</p> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-outer-html.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-outer-html.html new file mode 100644 index 0000000..e9f50325 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/set-outer-html.html
@@ -0,0 +1,57 @@ +<html> +<head> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../resources/set-outer-html-test.js"></script> +<script> + +function onload() +{ + document.getElementById("identity").wrapperIdentity = "identity"; + runTest(); +} + +function test() { + TestRunner.runTestSuite([ + function testSetUp(next) { + ElementsTestRunner.setUpTestSuite(next); + }, + + function testChangeCharacterData(next) { + ElementsTestRunner.patchOuterHTML('Getting involved', 'Getting not involved', next); + }, + + function testChangeAttributes(next) { + ElementsTestRunner.patchOuterHTML('<a href', '<a foo="bar" href', next); + }, + + function testRemoveLastChild(next) { + ElementsTestRunner.patchOuterHTML('Getting involved', '', next); + }, + + function testSplitNode(next) { + ElementsTestRunner.patchOuterHTML('Getting involved', 'Getting</h2><h2>involved', next); + }, + + function testChangeNodeName(next) { + ElementsTestRunner.patchOuterHTML('<h2>Getting involved</h2>', '<h3>Getting involved</h3>', next); + } + ]); +} +</script> +</head> + +<body onload="onload()"> +<p> +Tests DOMAgent.setOuterHTML protocol method. +</p> + +<div id="container" style="display:none"> +<p>WebKit is used by <a href="http://www.apple.com/safari/">Safari</a>, Dashboard, etc.</a>.</p> +<h2>Getting involved</h2> +<p id="identity">There are many ways to get involved. You can:</p> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/shadow-dom-modify-chardata-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/shadow-dom-modify-chardata-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/edit/shadow-dom-modify-chardata-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/shadow-dom-modify-chardata-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/shadow-dom-modify-chardata.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/shadow-dom-modify-chardata.html new file mode 100644 index 0000000..409c1c9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/shadow-dom-modify-chardata.html
@@ -0,0 +1,53 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function typeText() +{ + var input = document.getElementById("input1"); + input.focus(); + eventSender.keyDown("B"); + eventSender.keyDown("a"); + eventSender.keyDown("r"); +} + +function test() { + var containerNode; + Common.settingForTest('showUAShadowDOM').set(true); + TestRunner.runTestSuite([ + function testDumpInitial(next) { + function callback(node) { + containerNode = ElementsTestRunner.expandedNodeWithId('container'); + TestRunner.addResult('========= Original ========'); + ElementsTestRunner.dumpElementsTree(containerNode); + next(); + } + ElementsTestRunner.expandElementsTree(callback); + }, + + function testAppend(next) { + TestRunner.evaluateInPage('typeText()', callback); + + function callback() { + TestRunner.addResult('======== Type text ========='); + ElementsTestRunner.dumpElementsTree(containerNode); + next(); + } + } + ]); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that elements panel updates shadow dom tree structure upon typing. +</p> + +<div id="container"><input type="text" id="input1"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/switch-panels-while-editing-as-html-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/switch-panels-while-editing-as-html-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/edit/switch-panels-while-editing-as-html-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/switch-panels-while-editing-as-html-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/switch-panels-while-editing-as-html.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/switch-panels-while-editing-as-html.html new file mode 100644 index 0000000..9a419e15 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/switch-panels-while-editing-as-html.html
@@ -0,0 +1,48 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../resources/edit-dom-test.js"></script> +<script> + +function test() { + TestRunner.runTestSuite([ + function testSetUp(next) { + ElementsTestRunner.expandElementsTree(next); + }, + + function selectNode(next) { + ElementsTestRunner.selectNodeWithId('inspected', onNodeSelected); + + function onNodeSelected(node) { + var treeOutline = ElementsTestRunner.firstElementsTreeOutline(); + var treeElement = treeOutline.findTreeElement(node); + treeElement.toggleEditAsHTML(); + TestRunner.addSniffer(Elements.ElementsTreeOutline.prototype, 'setMultilineEditing', next); + } + }, + + function switchPanels(next) { + UI.inspectorView.showPanel('sources').then(next).catch(onError); + + function onError(error) { + TestRunner.addResult('FAILURE: exception caught while switching panels.'); + TestRunner.completeTest(); + } + } + ]); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Verifies inspector doesn't break when switching panels while editing as HTML. crbug.com/485457 +</p> + +<div> + <div id="inspected">Inspected Node</div> +</div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/undo-dom-edits-2-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/undo-dom-edits-2-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/edit/undo-dom-edits-2-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/undo-dom-edits-2-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/undo-dom-edits-2.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/undo-dom-edits-2.html new file mode 100644 index 0000000..29925004 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/undo-dom-edits-2.html
@@ -0,0 +1,67 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + var testSuite = []; + + function testSetUp(next) { + TestRunner.addResult('Setting up'); + ElementsTestRunner.expandElementsTree(callback); + + function callback() { + ElementsTestRunner.expandElementsTree(next); + } + } + testSuite.push(testSetUp); + + function testSetAttribute(callback) { + var node = ElementsTestRunner.expandedNodeWithId('node-to-set-attribute'); + node.setAttribute('foo', 'bar="edited attribute"', callback); + } + testSuite.push(ElementsTestRunner.generateUndoTest(testSetAttribute)); + + + function testRemoveAttribute(callback) { + var node = ElementsTestRunner.expandedNodeWithId('node-to-remove-attribute'); + node.removeAttribute('foo').then(callback); + } + testSuite.push(ElementsTestRunner.generateUndoTest(testRemoveAttribute)); + + + function testAddAttribute(callback) { + var node = ElementsTestRunner.expandedNodeWithId('node-to-add-attribute'); + node.setAttribute('', 'newattr="new-value"', callback); + } + testSuite.push(ElementsTestRunner.generateUndoTest(testAddAttribute)); + + + TestRunner.runTestSuite(testSuite); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that DOM modifications done in the Elements panel are undoable (Part 2). +</p> + +<div style="display:none"> + <div id="testSetAttribute"> + <div foo="attribute value" id="node-to-set-attribute"></div> + </div> + + <div id="testRemoveAttribute"> + <div foo="attribute value" id="node-to-remove-attribute"></div> + </div> + + <div id="testAddAttribute"> + <div id="node-to-add-attribute"></div> + </div> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/undo-dom-edits-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/undo-dom-edits-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/edit/undo-dom-edits-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/undo-dom-edits-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/undo-dom-edits.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/undo-dom-edits.html new file mode 100644 index 0000000..e8c3a23 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/undo-dom-edits.html
@@ -0,0 +1,78 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + var testSuite = []; + + function testSetUp(next) { + TestRunner.addResult('Setting up'); + ElementsTestRunner.expandElementsTree(callback); + + function callback() { + ElementsTestRunner.expandElementsTree(next); + } + } + testSuite.push(testSetUp); + + + function testRemove(callback) { + var node = ElementsTestRunner.expandedNodeWithId('node-to-remove'); + node.removeNode(callback); + } + testSuite.push(ElementsTestRunner.generateUndoTest(testRemove)); + + + function testSetNodeName(callback) { + var node = ElementsTestRunner.expandedNodeWithId('node-to-set-name'); + node.setNodeName('span', callback); + } + testSuite.push(ElementsTestRunner.generateUndoTest(testSetNodeName)); + + + function testSetNodeValue(callback) { + var node = ElementsTestRunner.expandedNodeWithId('node-to-set-value'); + node.firstChild.setNodeValue('New Text', callback); + } + testSuite.push(ElementsTestRunner.generateUndoTest(testSetNodeValue)); + + function testEditAsHTML(callback) { + var node = ElementsTestRunner.expandedNodeWithId('node-to-edit-as-html'); + node.setOuterHTML( + '<div id="node-to-edit-as-html"><div id="span2">Text2</div></div><span>Second node</span>', callback); + } + testSuite.push(ElementsTestRunner.generateUndoTest(testEditAsHTML)); + + TestRunner.runTestSuite(testSuite); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that DOM modifications done in the Elements panel are undoable. +</p> + +<div style="display:none"> + <div id="testRemove"> + <div id="node-to-remove"></div> + </div> + + <div id="testSetNodeName"> + <div id="node-to-set-name"></div> + </div> + + <div id="testSetNodeValue"> + <div id="node-to-set-value">Text</div> + </div> + + <div id="testEditAsHTML"> + <div id="node-to-edit-as-html"><span id="span">Text</span></div> + </div> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/undo-set-outer-html-2-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/undo-set-outer-html-2-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/edit/undo-set-outer-html-2-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/undo-set-outer-html-2-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/undo-set-outer-html-2.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/undo-set-outer-html-2.html new file mode 100644 index 0000000..b7b10c8d --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/undo-set-outer-html-2.html
@@ -0,0 +1,71 @@ +<html> +<head> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../resources/set-outer-html-test.js"></script> +<script> + +function onload() +{ + document.getElementById("identity").wrapperIdentity = "identity"; + runTest(); +} + +function test() { + TestRunner.runTestSuite([ + function testSetUp(next) { + ElementsTestRunner.setUpTestSuite(next); + }, + + function testChangeMultipleThings(next) { + var text = ElementsTestRunner.containerText.replace(/<li>.*<\/li>/, ''); + text = text.replace('<h2>', '<h2 foo="bar" bar="baz">'); + ElementsTestRunner.setOuterHTMLUseUndo(text, next); + }, + + function testChangeNestingLevel(next) { + var text = ElementsTestRunner.containerText.replace('<ul>', '<div><ul>'); + var text = text.replace('</ul>', '</ul></div>'); + ElementsTestRunner.setOuterHTMLUseUndo(text, next); + }, + + function testSwapNodes(next) { + var text = ElementsTestRunner.containerText.replace('<h2>Getting involved</h2>', ''); + var text = text.replace('</div>', '<h2>Getting involved</h2></div>'); + ElementsTestRunner.setOuterHTMLUseUndo(text, next); + }, + + function testEditTwoRoots(next) { + var text = ElementsTestRunner.containerText + '<div>Additional node</div>'; + ElementsTestRunner.setOuterHTMLUseUndo(text, next); + }, + + function testDupeNode(next) { + ElementsTestRunner.patchOuterHTML( + '<h2>Getting involved</h2>', '<h2>Getting involved</h2><h2>Getting involved</h2>', next); + } + ]); +} +</script> +</head> + +<body onload="onload()"> +<p> +Tests undo for the DOMAgent.setOuterHTML protocol method (part 2). +</p> + +<div id="container" style="display:none"> +<p>WebKit is used by <a href="http://www.apple.com/safari/">Safari</a>, Dashboard, etc..</p> +<h2>Getting involved</h2> +<p id="identity">There are many ways to get involved. You can:</p> +<ul> + <li></li> +</ul> +<ul> + <li></li> +</ul> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/undo-set-outer-html-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/undo-set-outer-html-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/edit/undo-set-outer-html-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/undo-set-outer-html-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/undo-set-outer-html.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/undo-set-outer-html.html new file mode 100644 index 0000000..d3ace4bf --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/edit/undo-set-outer-html.html
@@ -0,0 +1,57 @@ +<html> +<head> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../resources/set-outer-html-test.js"></script> +<script> + +function onload() +{ + document.getElementById("identity").wrapperIdentity = "identity"; + runTest(); +} + +function test() { + TestRunner.runTestSuite([ + function testSetUp(next) { + ElementsTestRunner.setUpTestSuite(next); + }, + + function testChangeCharacterData(next) { + ElementsTestRunner.patchOuterHTMLUseUndo('Getting involved', 'Getting not involved', next); + }, + + function testChangeAttributes(next) { + ElementsTestRunner.patchOuterHTMLUseUndo('<a href', '<a foo="bar" href', next); + }, + + function testRemoveLastChild(next) { + ElementsTestRunner.patchOuterHTMLUseUndo('Getting involved', '', next); + }, + + function testSplitNode(next) { + ElementsTestRunner.patchOuterHTMLUseUndo('Getting involved', 'Getting</h2><h2>involved', next); + }, + + function testChangeNodeName(next) { + ElementsTestRunner.patchOuterHTMLUseUndo('<h2>Getting involved</h2>', '<h3>Getting involved</h3>', next); + } + ]); +} +</script> +</head> + +<body onload="onload()"> +<p> +Tests undo for the DOMAgent.setOuterHTML protocol method. +</p> + +<div id="container" style="display:none"> +<p>WebKit is used by <a href="http://www.apple.com/safari/">Safari</a>, Dashboard, etc.</a>.</p> +<h2>Getting involved</h2> +<p id="identity">There are many ways to get involved. You can:</p> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-css-path-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-css-path-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/elements-css-path-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-css-path-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-css-path.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-css-path.html new file mode 100644 index 0000000..36a6e1a --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-css-path.html
@@ -0,0 +1,139 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<script src="../../inspector/inspector-test.js" id="script-id"></script> +<script src="../../inspector/elements-test.js"></script> +<script id="test-script"> +function matchingElements(selector) +{ + return document.querySelectorAll(selector).length; +} + +function test() { + var nodeQueue = []; + ElementsTestRunner.expandElementsTree(enqueueNodes); + + function enqueueNodes() { + enqueueNode('', getDocumentElement()); + dumpNodeData(); + } + + function dumpNodeData() { + var entry = nodeQueue.shift(); + if (!entry) { + TestRunner.completeTest(); + return; + } + var cssPath = Components.DOMPresentationUtils.cssPath(entry.node, true); + var result = entry.prefix + cssPath; + TestRunner.addResult(result.replace(/\n/g, '\\n')); + var escapedPath = cssPath.replace(/\\/g, '\\\\'); + TestRunner.evaluateInPage('matchingElements(\'' + escapedPath + '\')', callback); + + function callback(result) { + TestRunner.assertEquals(1, result.value); + dumpNodeData(); + } + } + + function getDocumentElement() { + var map = TestRunner.domModel._idToDOMNode; + for (var id in map) { + if (map[id].nodeName() === '#document') + return map[id]; + } + + return null; + } + + function enqueueNode(prefix, node) { + if (node.nodeType() === Node.ELEMENT_NODE) + nodeQueue.push({prefix: prefix, node: node}); + var children = node.children(); + for (var i = 0; children && i < children.length; ++i) + enqueueNode(prefix + ' ', children[i]); + } +} +</script> +</head> + +<body onload="runTest()"> +<p>Tests DOMNode.cssPath()</p> + +<article></article> +<article></article> +<input type="number"/> + +<!-- Comment node --> + +<div id="ids"> + <!-- Comment node --> + <div></div> + <div></div> + <div id="inner-id"></div> + <div id="__proto__"></div> + <div id='#"ridiculous".id'></div> + <div id="'quoted.value'"></div> + <div id=".foo.bar"></div> + <div id="-"></div> + <div id="-a"></div> + <div id="-0"></div> + <div id="7"></div> + <div id="ид">ид</div> + <input type="text" id="input-id"/> + <input type="text"/> + <p></p> +</div> + +<div id="classes"> + <!-- Comment node 1 --> + <div class="foo bar"></div> + <!-- Comment node 2 --> + <div class=" foo foo "></div> + <div class=".foo"></div> + <div class=".foo.bar"></div> + <div class="-"></div> + <div class="-a"></div> + <div class="-0"></div> + <div class="--a"></div> + <div class="---a"></div> + <div class="7"></div> + <div class="класс">класс</div> + <div class="__proto__"></div> + <div class="__proto__ foo"></div> + <span class="bar"></span> + <div id="id-with-class" class="moo"></div> + <input type="text" class="input-class-one"/> + <input type="text" class="input-class-two"/> + <!-- Comment node 3 --> +</div> + +<div id="non-unique-classes"> + <!-- Comment node 1 --> + <span class="c1"></span> + <!-- Comment node 2 --> + <span class="c1"></span> + <!-- Comment node 3 --> + <span class="c1 c2"></span> + <!-- Comment node 4 --> + <span class="c1 c2 c3"></span> + <!-- Comment node 5 --> + <span></span> + <!-- Comment node 6 --> + <div class="c1"></div> + <!-- Comment node 7 --> + <div class="c1 c2"></div> + <!-- Comment node 8 --> + <div class="c3 c2"></div> + <!-- Comment node 9 --> + <div class="c3 c4"></div> + <!-- Comment node 10 --> + <div class="c1 c4"></div> + <!-- Comment node 11 --> + <input type="text" class="input-class"/> + <input type="text" class="input-class"/> + <div></div> +</div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-delete-inline-style-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-delete-inline-style-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/elements-delete-inline-style-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-delete-inline-style-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-delete-inline-style.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-delete-inline-style.html new file mode 100644 index 0000000..5331880 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-delete-inline-style.html
@@ -0,0 +1,33 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); + + function step1(node) { + TestRunner.addResult('Before style property removal:'); + ElementsTestRunner.dumpSelectedElementStyles(true); + node.removeAttribute('style'); + ElementsTestRunner.waitForStyles('inspected', step2); + } + + function step2() { + TestRunner.addResult('After style property removal:'); + ElementsTestRunner.dumpSelectedElementStyles(true); + TestRunner.completeTest(); + } +} + +</script> +</head> +<body onload="runTest()"> +<p> +Tests that the "style" attribute removal results in the Styles sidebar pane update (not a crash). <a href="http://bugs.webkit.org/show_bug.cgi?id=51478">Bug 51478</a> +</p> + +<div id="inspected" style="color: red"></div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-hide-html-comments-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-hide-html-comments-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/elements-hide-html-comments-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-hide-html-comments-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-hide-html-comments.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-hide-html-comments.html new file mode 100644 index 0000000..a1d59a9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-hide-html-comments.html
@@ -0,0 +1,36 @@ +<!-- comment 1 --> +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.nodeWithId('inspect', onNode); + + function onNode(node) { + var commentNode = node.nextSibling; + ElementsTestRunner.selectNode(commentNode).then(onNodeSelected); + } + + function onNodeSelected() { + TestRunner.addResult('HTML comments shown:'); + ElementsTestRunner.dumpElementsTree(); + Common.settingForTest('showHTMLComments').set(false); + TestRunner.addResult('\nHTML comments hidden:'); + ElementsTestRunner.dumpElementsTree(); + TestRunner.completeTest(); + } +} + +</script> +</head> +<!-- comment 2 --> +<body onload="runTest()"> +<p> +Verifies show/hide HTML comments setting. +<span id="inspect"></span> +<!-- comment 3 --> +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-img-tooltip-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-img-tooltip-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/elements-img-tooltip-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-img-tooltip-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-img-tooltip.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-img-tooltip.html new file mode 100644 index 0000000..98d8e9a --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-img-tooltip.html
@@ -0,0 +1,52 @@ +<html> +<head> + +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script> + +var test = function() { + + var treeElement; + ElementsTestRunner.nodeWithId('image', step1); + + function step1(node) { + ElementsTestRunner.firstElementsTreeOutline()._loadDimensionsForNode(node).then(step2); + } + + function step2(dimensions) { + const EXPECTED_WIDTH = 215; + const EXPECTED_HEIGHT = 174; + + if (!dimensions) + TestRunner.addResult('FAILED, no dimensions on treeElement.'); + else { + if (dimensions.offsetWidth === dimensions.naturalWidth && dimensions.offsetHeight == dimensions.naturalHeight && + dimensions.offsetWidth === EXPECTED_WIDTH && dimensions.offsetHeight === EXPECTED_HEIGHT) + TestRunner.addResult('PASSED, image dimensions for tooltip: ' + EXPECTED_WIDTH + 'x' + EXPECTED_HEIGHT + '.'); + else + TestRunner.addResult( + 'FAILED, image dimensions for tooltip: ' + formatDimensions(dimensions) + ' (should be ' + EXPECTED_WIDTH + + 'x' + EXPECTED_HEIGHT + ').'); + } + TestRunner.completeTest(); + } + + function formatDimensions(dimensions) { + return dimensions.offsetWidth + 'x' + dimensions.offsetHeight + ' (natural: ' + dimensions.naturalWidth + 'x' + + dimensions.naturalHeight + ')'; + } +}; + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests the tooltip for the image on hover. +</p> + +<img id="image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANcAAACuCAIAAAAqMg/rAAAAAXNSR0IArs4c6QAAAU9JREFUeNrt0jERAAAIxDDAv+dHAxNLIqHXTlLwaiTAheBCXAguxIXgQlwILsSF4EJcCC7EheBCXAguxIXgQlwILsSF4EJcCC7EheBCXAguxIXgQlwILsSF4EJcCC7EheBCXAguxIXgQlwILsSF4EJcCC7EheBCXAguxIXgQlwILsSF4EJcCC7EheBCXAguxIXgQlwILsSF4EJcCC7EheBCXAguxIXgQlwILsSF4EJcCC7EheBCXAguxIXgQlwILsSF4EJcCC7EheBCXAguxIXgQlwILsSF4EJcCC7EheBCXAguxIXgQlwILsSF4EJcCC7EheBCXAguxIXgQlwILsSFEuBCcCEuBBfiQnAhLgQX4kJwIS4EF+JCcCEuBBfiQnAhLgQX4kJwIS4EF+JCcCEuBBfiQnAhLgQX4kJwIS4EF+JCcCEuBBfiQnAhLoSDBZXqBFnkRyeqAAAAAElFTkSuQmCC"/> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-inspect-iframe-from-different-domain-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-inspect-iframe-from-different-domain-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/elements-inspect-iframe-from-different-domain-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-inspect-iframe-from-different-domain-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-inspect-iframe-from-different-domain.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-inspect-iframe-from-different-domain.html new file mode 100644 index 0000000..3bb228a0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-inspect-iframe-from-different-domain.html
@@ -0,0 +1,86 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/console-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script> +var el1; +var el2; +function createDynamicElements() +{ + var mainDoc = document; + var frameDoc = window.frames[0].document; + + el1 = mainDoc.createElement('div'); + el1.id = "main-frame-div"; + el2 = frameDoc.createElement('div'); + el2.id = "iframe-div"; + + el1.innerHTML = 'Element created via <main document>.createElement'; + el2.innerHTML = 'Element created via <frame document>.createElement'; + + frameDoc.body.appendChild(el1); + frameDoc.body.appendChild(el2); +} + +function test() { + TestRunner.evaluateInPage('createDynamicElements()', step1); + + function selectedNodeId() { + var selectedElement = ElementsTestRunner.firstElementsTreeOutline().selectedTreeElement; + if (!selectedElement) + return '<no selected node>'; + return selectedElement.node().getAttribute('id'); + } + + function step1() { + ConsoleTestRunner.evaluateInConsole('inspect(el1)', step2); + } + + function step2() { + TestRunner.deprecatedRunAfterPendingDispatches(step3); + } + + function step3() { + var id = selectedNodeId(); + if (id === 'main-frame-div') + TestRunner.addResult('PASS: selected node with id \'' + id + '\''); + else + TestRunner.addResult('FAIL: unexpected selection ' + id); + // Frame was changed to the iframe. Moving back to the top frame. + ConsoleTestRunner.evaluateInConsole('inspect(window.frameElement.parentElement)', step4); + } + + function step4() { + TestRunner.deprecatedRunAfterPendingDispatches(step5); + } + + function step5() { + ConsoleTestRunner.evaluateInConsole('inspect(el2)', step6); + } + + function step6() { + TestRunner.deprecatedRunAfterPendingDispatches(step7); + } + + function step7() { + var id = selectedNodeId(); + if (id === 'iframe-div') + TestRunner.addResult('PASS: selected node with id \'' + id + '\''); + else + TestRunner.addResult('FAIL: unexpected selection ' + id); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p>Test that web inspector can select element in an iframe even if the element was created +via <code>createElement</code> of <code>document</code> other than iframe's <code>document</code>. +<a href="https://bugs.webkit.org/show_bug.cgi?id=60031">Bug 60031</a> +</p> +<iframe style="width:400px"></iframe> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-correct-case-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-correct-case-expected.txt new file mode 100644 index 0000000..8e885d76 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-correct-case-expected.txt
@@ -0,0 +1,26 @@ +Tests that elements panel shows all types of elements in the correct case. + + + <!DOCTYPE html> +- <html> + - <head> + <link rel="stylesheet" type="text/css" href="resources/elements-panel-styles.css"> + <script src="../../inspector/inspector-test.js"></script> + <script src="../../inspector/elements-test.js"></script> + - <script> + function test() {\n ElementsTestRunner.expandElementsTree(step1);\n\n function step1() {\n ElementsTestRunner.dumpElementsTree();\n TestRunner.completeTest();\n }\n}\n + </script> + </head> + - <body onload="runTest()"> + <p>\nTests that elements panel shows all types of elements in the correct case.\n</p> + - <svg> + <feComposite></feComposite> + </svg> + - <svg> + <circle></circle> + </svg> + <div></div> + <div></div> + </body> + </html> +
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-correct-case.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-correct-case.html new file mode 100644 index 0000000..578dea3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-correct-case.html
@@ -0,0 +1,32 @@ +<!DOCTYPE html> +<html> +<head> +<link rel="stylesheet" type="text/css" href="resources/elements-panel-styles.css"> + +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script> +function test() { + ElementsTestRunner.expandElementsTree(step1); + + function step1() { + ElementsTestRunner.dumpElementsTree(); + TestRunner.completeTest(); + } +} +</script> +</head> +<body onload="runTest()"> +<p> +Tests that elements panel shows all types of elements in the correct case. +</p> +<svg> + <feComposite></feComposite> +</svg> +<svg> + <circle></circle> +</svg> +<DIv></DIv> +<DIV></DIV> +</body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-limited-children-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-limited-children-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/elements-panel-limited-children-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-limited-children-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-limited-children.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-limited-children.html new file mode 100644 index 0000000..9fd002fc --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-limited-children.html
@@ -0,0 +1,74 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script> + +function insertNode() +{ + var dataElement = document.getElementById("data"); + dataElement.appendChild(document.createElement("a")); + dataElement.removeChild(document.getElementById("id2")); + var aElement = document.createElement("a"); + dataElement.insertBefore(aElement, document.getElementById("id1")); + dataElement.appendChild(aElement); + dataElement.insertBefore(aElement, document.getElementById("id1")); +} + +function test() { + var dataTreeElement; + ElementsTestRunner.nodeWithId('data', step1); + + function step1(node) { + dataTreeElement = ElementsTestRunner.firstElementsTreeOutline().findTreeElement(node); + dataTreeElement._expandedChildrenLimit = 5; + dataTreeElement.reveal(); + dataTreeElement.expand(); + TestRunner.deprecatedRunAfterPendingDispatches(step2); + } + + function step2() { + TestRunner.addResult('=========== Loaded 5 children ==========='); + dumpElementsTree(); + TestRunner.addSniffer(Elements.ElementsTreeOutline.prototype, '_updateModifiedNodes', step3); + TestRunner.evaluateInPage('insertNode()'); + } + + function step3() { + TestRunner.addResult('=========== Modified children ==========='); + dumpElementsTree(); + dataTreeElement.expandAllButtonElement.button.click(); + TestRunner.deprecatedRunAfterPendingDispatches(step4); + } + + function step4() { + TestRunner.addResult('=========== Loaded all children ==========='); + dumpElementsTree(); + TestRunner.completeTest(); + } + + function dumpElementsTree() { + ElementsTestRunner.dumpElementsTree(null, 0); + } +} +</script> +</head> + +<body onload="runTest()"> +<div id="data"> +<div id="id1">1</div> +<div id="id2">2</div> +<div id="id3">3</div> +<div id="id4">4</div> +<div id="id5">5</div> +<div id="id6">6</div> +<div id="id7">7</div> +<div id="id8">8</div> +<div id="id9">9</div> +<div id="id10">10</div> +</div> +<p> +Tests that src and href element targets are rewritten properly. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-reload-assert-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-reload-assert-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/elements-panel-reload-assert-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-reload-assert-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-reload-assert.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-reload-assert.html new file mode 100644 index 0000000..e2b3fa9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-reload-assert.html
@@ -0,0 +1,31 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.expandElementsTree(step1); + + function step1() { + TestRunner.reloadPage(step2); + } + + function step2() { + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that the inspected page does not crash in a debug build when reloading a page containing shadow DOM with open inspector. <a href="https://bugs.webkit.org/show_bug.cgi?id=84154">Bug 84154</a>. +</p> + +<input type="radio"> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-restore-selection-when-node-comes-later-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-restore-selection-when-node-comes-later-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/elements-panel-restore-selection-when-node-comes-later-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-restore-selection-when-node-comes-later-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-restore-selection-when-node-comes-later.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-restore-selection-when-node-comes-later.html new file mode 100644 index 0000000..5f79c19 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-restore-selection-when-node-comes-later.html
@@ -0,0 +1,98 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script src="../resources/elements-panel-shadow-selection-on-refresh.js"></script> +<script> + +function test() { + var node; + + TestRunner.runTestSuite([ + function selectNode(next) { + ElementsTestRunner.nodeWithId('inspected', onNodeFound); + + function onNodeFound(n) { + node = n; + ElementsTestRunner.selectNode(node).then(onNodeSelected); + } + + function onNodeSelected() { + dumpSelectedNode(); + next(); + } + }, + + function firstReloadWithoutNodeInDOM(next) { + TestRunner.addSniffer(Elements.ElementsPanel.prototype, '_lastSelectedNodeSelectedForTest', onNodeRestored); + // Do a reload and pretend page's DOM doesn't have a node to restore. + overridePushNodeForPath(node.path()); + TestRunner.reloadPage(function() {}); + + function onNodeRestored() { + dumpSelectedNode(); + next(); + } + }, + + function secondReloadWithNodeInDOM(next) { + var pageReloaded = false; + var nodeRestored = false; + TestRunner.addSniffer(Elements.ElementsPanel.prototype, '_lastSelectedNodeSelectedForTest', onNodeRestored); + TestRunner.reloadPage(onPageReloaded); + + function onPageReloaded() { + pageReloaded = true; + maybeNext(); + } + + function onNodeRestored() { + nodeRestored = true; + maybeNext(); + } + + function maybeNext() { + if (!nodeRestored || !pageReloaded) + return; + dumpSelectedNode(); + next(); + } + }, + + ]); + + function dumpSelectedNode() { + var selectedElement = ElementsTestRunner.firstElementsTreeOutline().selectedTreeElement; + var nodeName = selectedElement ? selectedElement.node().nodeNameInCorrectCase() : 'null'; + TestRunner.addResult('Selected node: \'' + nodeName + '\''); + } + + /** + * @param {string} pathToIgnore + */ + function overridePushNodeForPath(pathToIgnore) { + var original = TestRunner.override(SDK.DOMModel.prototype, 'pushNodeByPathToFrontend', override); + + function override(nodePath, callback) { + if (nodePath === pathToIgnore) { + setTimeout(callback.bind(null), 0); + return; + } + original(nodePath, callback); + } + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Verify that last selected element is restored properly later, even if +it failed to do so once. +</p> +<div> + <span id="inspected"></span> +</div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-rewrite-href-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-rewrite-href-expected.txt new file mode 100644 index 0000000..016ec4a --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-rewrite-href-expected.txt
@@ -0,0 +1,12 @@ +Tests that src and href element targets are rewritten properly. + + + javascript:alert('foo') +http://127.0.0.1/script.js +http://127.0.0.1/stylesheet.css +http://127.0.0.1/target.html +http://127.0.0.1:8000/bogusSheet1.css +http://127.0.0.1:8000/devtools/elements/bogusSheet2.css +http://127.0.0.1:8000/inspector/elements-test.js +http://127.0.0.1:8000/inspector/inspector-test.js +
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-rewrite-href.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-rewrite-href.html new file mode 100644 index 0000000..7cdfd34 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-rewrite-href.html
@@ -0,0 +1,60 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<link rel="stylesheet" src="/bogusSheet1.css"> +<link rel="stylesheet" src="bogusSheet2.css"> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.expandElementsTree(step1); + + function step1() { + var innerMapping = TestRunner.domModel._idToDOMNode; + + var outputLines = []; + for (var nodeId in innerMapping) { + var node = innerMapping[nodeId]; + if (node.nodeName() === 'LINK' || node.nodeName() === 'SCRIPT') { + var segments = []; + var href = node.resolveURL(node.getAttribute('src') || node.getAttribute('href')); + if (!href) { + segments.push('<empty>'); + continue; + } + if (href.startsWith('http:')) { + outputLines.push(href); + continue; + } + var parsedURL = href.asParsedURL(); + if (!parsedURL) { + testController.notifyDone('FAIL: no URL match for <' + href + '>'); + continue; + } + var split = parsedURL.path.split('/'); + for (var i = split.length - 1, j = 0; j < 3 && i >= 0; --i, ++j) + segments.push(split[i]); + outputLines.push(segments.reverse()); + } + if (node.nodeName() === 'A') + outputLines.push(node.resolveURL(node.getAttribute('href'))); + } + outputLines.sort(); + TestRunner.addResult(outputLines.join('\n')); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body> +<p> +Tests that src and href element targets are rewritten properly. +</p> + +<a style="display:none" href=" javascript:alert('foo') "></a> +<iframe src="resources/elements-panel-rewrite-href-iframe.html" onload="runTest()"></iframe> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-search-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-search-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/elements-panel-search-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-search-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-search.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-search.html new file mode 100644 index 0000000..76b7b360 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-search.html
@@ -0,0 +1,285 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html id="documentElement"> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script> +function initializeShadowDOM() +{ + var shadow = document.querySelector('#shadow-host').createShadowRoot(); + var template = document.querySelector('#shadow-dom-template'); + + // Avoid matching this function + shadow.appendChild(template.content.cloneNode(true)); +} + +function test() { + var omitInnerHTML; + + async function searchCallback(next, resultCount) { + if (resultCount == 0) { + TestRunner.addResult('Nothing found'); + SDK.DOMModel.cancelSearch(); + next(); + return; + } + + for (var i = 0; i < resultCount; ++i) { + var node = await TestRunner.domModel.searchResult(i); + var markupVa_lue = await node.getOuterHTML(); + if (omitInnerHTML) + markupVa_lue = markupVa_lue.substr(0, markupVa_lue.indexOf('>') + 1); + TestRunner.addResult(markupVa_lue.split('').join(' ')); + } + + SDK.DOMModel.cancelSearch(); + next(); + } + + function setUp(next) { + TestRunner.domModel.requestDocument(step2); + + function step2() { + TestRunner.evaluateInPage('initializeShadowDOM()', next); + } + } + + TestRunner.runTestSuite([ + function testSetUp(next) { + setUp(next); + }, + + function testPlainText(next) { + TestRunner.domModel + .performSearch( + 'Fo' + + 'o' + + 'Bar', + false) + .then(searchCallback.bind(this, next)); + }, + + function testPartialText(next) { + TestRunner.domModel + .performSearch( + 'oo' + + 'Ba', + false) + .then(searchCallback.bind(this, next)); + }, + + function testStartTag(next) { + TestRunner.domModel + .performSearch( + '<inpu' + + 't', + false) + .then(searchCallback.bind(this, next)); + }, + + function testEndTag(next) { + TestRunner.domModel + .performSearch( + 'npu' + + 't>', + false) + .then(searchCallback.bind(this, next)); + }, + + function testPartialTag(next) { + TestRunner.domModel + .performSearch( + 'npu' + + 't', + false) + .then(searchCallback.bind(this, next)); + }, + + function testPartialAbsentTagStart(next) { + TestRunner.domModel + .performSearch( + '<npu' + + 't', + false) + .then(searchCallback.bind(this, next)); + }, + + function testPartialAbsentTagEnd(next) { + TestRunner.domModel + .performSearch( + 'npu' + + '>', + false) + .then(searchCallback.bind(this, next)); + }, + + function testFullTag(next) { + TestRunner.domModel + .performSearch( + '<inpu' + + 't>', + false) + .then(searchCallback.bind(this, next)); + }, + + function testExactAttributeName(next) { + TestRunner.domModel + .performSearch( + 'valu' + + 'e', + false) + .then(searchCallback.bind(this, next)); + }, + + function testExactAttributeVal_ue(next) { + TestRunner.domModel + .performSearch( + 'In' + + 'putVa' + + 'l', + false) + .then(searchCallback.bind(this, next)); + }, + + function testExactAttributeVal_ueOnRoot(next) { + omitInnerHTML = true; + TestRunner.domModel + .performSearch( + 'documen' + + 'tElement', + false) + .then(searchCallback.bind(this, next)); + }, + + function testExactAttributeVal_ueWithQuotes(next) { + omitInnerHTML = false; + TestRunner.domModel + .performSearch( + '"fo' + + 'o"', + false) + .then(searchCallback.bind(this, next)); + }, + + function testPartialAttributeVal_ue(next) { + TestRunner.domModel + .performSearch( + 'n' + + 'putVa' + + 'l', + false) + .then(searchCallback.bind(this, next)); + }, + + function testXPathAttribute(next) { + TestRunner.domModel + .performSearch( + '//html' + + '//@attr', + false) + .then(searchCallback.bind(this, next)); + }, + + function testSelector(next) { + TestRunner.domModel + .performSearch( + 'd' + + 'iv.divclass span', + false) + .then(searchCallback.bind(this, next)); + }, + + function testCaseUpperFindsLower(next) { + TestRunner.domModel + .performSearch( + 'K' + + 'OO', + false) + .then(searchCallback.bind(this, next)); + }, + + function testCaseLowerFindsUpper(next) { + TestRunner.domModel + .performSearch( + 'c' + + 'aseless', + false) + .then(searchCallback.bind(this, next)); + }, + + function testCaseAttribute(next) { + TestRunner.domModel + .performSearch( + 'C' + + 'AMEL', + false) + .then(searchCallback.bind(this, next)); + }, + + function testSearchShadowDOM(next) { + TestRunner.domModel + .performSearch( + '<c' + + 'ontent', + false) + .then(searchCallback.bind(this, next)); + }, + + function testSearchUAShadowDOM(next) { + TestRunner.addResult('Searching UA shadow DOM with setting disabled:'); + TestRunner.domModel + .performSearch( + 'inne' + + 'r-editor', + false) + .then(searchCallback.bind(this, step2)); + + function step2() { + TestRunner.addResult('Searching UA shadow DOM with setting enabled:'); + TestRunner.domModel + .performSearch( + 'inne' + + 'r-editor', + true) + .then(searchCallback.bind(this, next)); + } + }, + + function testSearchShadowHostChildren(next) { + TestRunner.domModel + .performSearch( + 'shadow-host-c' + + 'ontent', + false) + .then(searchCallback.bind(this, next)); + }, + ]); +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that elements panel search is returning proper results. +</p> + +<div>FooBar</div> +<input value="InputVal"> +<div attr="foo"></div> +<div id="terminator"></div> +<div class="divclass"><span>Found by selector</span></div> +<span class="foo koo"></span> +<span class="CASELESS"></span> +<span data-camel="insenstive"></span> +<div id="shadow-host"> + <div id="shadow-host-content"></div> +</div> +<template id="shadow-dom-template"> + <div id="shadow-dom-outer"> + <content></content> + </div> +</div> +</template> +<textarea></textarea> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-selection-after-delete-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-selection-after-delete-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/elements-panel-selection-after-delete-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-selection-after-delete-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-selection-after-delete.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-selection-after-delete.html new file mode 100644 index 0000000..93b5433 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-selection-after-delete.html
@@ -0,0 +1,166 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script> + +function prepareTestTree() +{ + var template = document.querySelector("#testTree"); + var testTreeContainer = document.querySelector("#testTreeContainer"); + testTreeContainer.textContent = ""; + testTreeContainer.appendChild(document.importNode(template.content, true)); +} + +function test() { + function selectNode(className, callback) { + var selector = '#testTreeContainer .' + className; + ElementsTestRunner.querySelector(selector, gotNode); + + function gotNode(node) { + ElementsTestRunner.selectNode(node).then(callback); + } + } + + function nodeToString(node) { + if (!node) + return 'null'; + var result = '<' + node.nodeName(); + var attributes = node.attributes(); + for (var attribute of attributes) { + result += ' ' + attribute.name; + if (attribute.value) + result += '="' + attribute.value + '"'; + } + result += '>'; + return result; + } + + function prepareTestTree(callback) { + TestRunner.evaluateInPage('prepareTestTree()', callback); + } + + function removeElementAsUser(element, callback) { + TestRunner.addSniffer(Elements.ElementsTreeOutline.prototype, '_updateModifiedNodes', callback); + element.remove(); + } + + function removeElementExternally(element, callback) { + var node = element.node(); + TestRunner.addSniffer(Elements.ElementsTreeOutline.prototype, '_updateChildren', callback); + node.removeNode(); + } + + function dumpSelectedNode() { + var selectedElement = ElementsTestRunner.firstElementsTreeOutline().selectedTreeElement; + var selectedNode = selectedElement ? selectedElement.node() : null; + TestRunner.addResult('The following node is now selected: ' + nodeToString(selectedNode)); + } + + TestRunner.runTestSuite([ + function testUserDelete(next) { + prepareTestTree(step2); + + function step2() { + TestRunner.addResult('Selecting node...'); + selectNode('child2', step3); + } + + function step3() { + dumpSelectedNode(); + + TestRunner.addResult('Deleting selected node like it was a user action...'); + var selectedElement = ElementsTestRunner.firstElementsTreeOutline().selectedTreeElement; + removeElementAsUser(selectedElement, step4); + } + + function step4() { + dumpSelectedNode(); + + TestRunner.addResult('Deleting selected node like it was a user action again...'); + var selectedElement = ElementsTestRunner.firstElementsTreeOutline().selectedTreeElement; + removeElementAsUser(selectedElement, step5); + } + + function step5() { + dumpSelectedNode(); + + TestRunner.addResult('Deleting last child like it was a user action...'); + var selectedElement = ElementsTestRunner.firstElementsTreeOutline().selectedTreeElement; + removeElementAsUser(selectedElement, step6); + } + + function step6() { + dumpSelectedNode(); + next(); + } + }, + + function testExternalDelete(next) { + // We should wait for container node to be updated since it is already populated. + TestRunner.addSniffer(Elements.ElementsTreeOutline.prototype, '_updateModifiedNodes', step2); + prepareTestTree(); + + function step2() { + TestRunner.addResult('Selecting node...'); + selectNode('child2', step3); + } + + function step3() { + dumpSelectedNode(); + + TestRunner.addResult('Deleting selected node externally...'); + var selectedElement = ElementsTestRunner.firstElementsTreeOutline().selectedTreeElement; + removeElementExternally(selectedElement, step4); + } + + function step4() { + dumpSelectedNode(); + + TestRunner.addResult('Deleting selected node externally again...'); + var selectedElement = ElementsTestRunner.firstElementsTreeOutline().selectedTreeElement; + removeElementExternally(selectedElement, step5); + } + + function step5() { + dumpSelectedNode(); + + TestRunner.addResult('Deleting last child externally...'); + var selectedElement = ElementsTestRunner.firstElementsTreeOutline().selectedTreeElement; + removeElementExternally(selectedElement, step6); + } + + function step6() { + dumpSelectedNode(); + next(); + } + }, + ]); +} + +</script> +</head> +<body onload="runTest()"> +<p>Tests that elements panel correctly updates selection on node removal.</p> +<template id="testTree"> + <div class="left"> + <div class="child1"> + </div> + <div class="child2"> + <div class="child5"> + </div> + <div class="child6"> + </div> + <div class="child7"> + </div> + <div class="child8"> + </div> + </div> + <div class="child3"> + </div> + </div> +</template> +<div id="testTreeContainer"> +</div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-selection-on-refresh-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-selection-on-refresh-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/elements-panel-selection-on-refresh-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-selection-on-refresh-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-selection-on-refresh.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-selection-on-refresh.html new file mode 100644 index 0000000..fe5ec3c --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-selection-on-refresh.html
@@ -0,0 +1,36 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeWithId('test-topic', step1); + + function step1() { + TestRunner.reloadPage(step2); + } + + function step2() { + TestRunner.deprecatedRunAfterPendingDispatches(step3); + } + + function step3() { + // We should have "test-topic" element selected after refresh. + var selectedElement = ElementsTestRunner.firstElementsTreeOutline().selectedTreeElement; + var nodeName = selectedElement ? selectedElement.node().nodeName() : 'null'; + TestRunner.addResult('Selected element should be \'P\', was: \'' + nodeName + '\''); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p id="test-topic"> +Tests that elements panel preserves selected node on page refresh. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-structure-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-structure-expected.txt new file mode 100644 index 0000000..a38b8d9d --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-structure-expected.txt
@@ -0,0 +1,25 @@ +Tests that elements panel shows DOM tree structure. + +"Quoted Text". Special characters: ><"' + + <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +- <html> + - <head> + <script src="../../inspector/inspector-test.js"></script> + <script src="../../inspector/elements-test.js"></script> + - <script> + \nfunction test() {\n // Warm up highlighter module.\n runtime.loadModulePromise('source_frame').then(function() {\n ElementsTestRunner.expandElementsTree(step1);\n });\n\n function step1() {\n ElementsTestRunner.dumpElementsTree();\n TestRunner.completeTest();\n }\n}\n\nfunction prepareTest()\n{\n document.querySelector("#control-character").textContent = "\ufeff\u0093";\n runTest();\n}\n\n + </script> + </head> + - <body onload="prepareTest()"> + <p>\nTests that elements panel shows DOM tree structure.\n</p> + - <div id="level1"> + - <div id="level2"> + ""Quoted Text". Special characters: ><"'     ​‌‍‎‏ ‪‫‬‭‮­" + <div id="level3"></div> + </div> + </div> + <div id="control-character">“</div> + </body> + </html> +
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-structure.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-structure.html new file mode 100644 index 0000000..ca39b5c --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-panel-structure.html
@@ -0,0 +1,41 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script> + +function test() { + // Warm up highlighter module. + runtime.loadModulePromise('source_frame').then(function() { + ElementsTestRunner.expandElementsTree(step1); + }); + + function step1() { + ElementsTestRunner.dumpElementsTree(); + TestRunner.completeTest(); + } +} + +function prepareTest() +{ + document.querySelector("#control-character").textContent = "\ufeff\u0093"; + runTest(); +} + +</script> +</head> + +<body onload="prepareTest()"> +<p> +Tests that elements panel shows DOM tree structure. +</p> + +<div id="level1"> + <div id="level2">"Quoted Text". Special characters: ><"'     ​‌‍‎‏ ‪‫‬‭‮­<div id="level3"></div> + </div> +</div> +<div id="control-character"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-tab-stops-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-tab-stops-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/elements-tab-stops-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-tab-stops-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-tab-stops.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-tab-stops.html new file mode 100644 index 0000000..60a86f76 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-tab-stops.html
@@ -0,0 +1,67 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script type="text/javascript"> + +var test = function() { + + var maxElements = 1000; + var elements = 0; + + // Make sure the sidebar is loaded + + // make sure the tree is loaded + ElementsTestRunner.selectNodeAndWaitForStyles('node-to-select', nodeSelected); + function nodeSelected() { + eventSender.keyDown('Tab'); + var startElement = document.deepActiveElement(); + do { + dumpFocus(); + eventSender.keyDown('Tab'); + elements++; + } while (startElement !== document.deepActiveElement() && elements < maxElements); + + TestRunner.addResult(''); + TestRunner.addResult('Shift+Tab:'); + TestRunner.addResult(''); + startElement = document.deepActiveElement(); + do { + dumpFocus(); + eventSender.keyDown('Tab', ['shiftKey']); + elements++; + } while (startElement !== document.deepActiveElement() && elements < maxElements); + + if (elements >= maxElements) + TestRunner.addResult('FAIL: Unable to complete tab stop cycle.'); + + TestRunner.completeTest(); + } + + function dumpFocus() { + var element = document.deepActiveElement(); + if (!element) { + TestRunner.addResult('null'); + return; + } + var name = element.tagName; + if (element.id) + name += '#' + element.id; + if (element.getAttribute('aria-label')) + name += ':' + element.getAttribute('aria-label'); + else if (element.title) + name += ':' + element.title; + else if (element.textContent && element.textContent.length < 50) { + name += ':' + element.textContent.replace('\u200B', ''); + } else if (element.className) + name += '.' + element.className.split(' ').join('.'); + TestRunner.addResult(name); + } +}; +</script> +</head> +<body onload="runTest()"> +<p>Tests what elements have focus after pressing tab.</p> +<span id="node-to-select"></span> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-treeoutline-copy-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-treeoutline-copy-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/elements-treeoutline-copy-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-treeoutline-copy-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-treeoutline-copy.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-treeoutline-copy.html new file mode 100644 index 0000000..3de03b0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/elements-treeoutline-copy.html
@@ -0,0 +1,30 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script type="text/javascript"> + +var test = function() { + + // make sure the tree is loaded + ElementsTestRunner.selectNodeAndWaitForStyles('node-to-copy', nodeSelected); + var input = document.body.createChild('input'); + + function nodeSelected() { + eventSender.keyDown('Copy'); + input.focus(); + setTimeout(next, 0); + } + function next() { + eventSender.keyDown('Paste'); + TestRunner.addResult(input.value); + TestRunner.completeTest(); + } +}; +</script> +</head> +<body onload="runTest()"> +<p>Tests that nodes can be copied in ElementsTreeOutline.</p> +<span id="node-to-copy">This should be <b>copied</b>.</span> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/event-listener-sidebar-custom-framework-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listener-sidebar-custom-framework-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/event-listener-sidebar-custom-framework-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listener-sidebar-custom-framework-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listener-sidebar-custom-framework.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listener-sidebar-custom-framework.html new file mode 100644 index 0000000..1dbba9fc --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listener-sidebar-custom-framework.html
@@ -0,0 +1,136 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script src="../../inspector/console-test.js"></script> +<script> +function setupNormalPath() +{ + var inspectedNode = document.getElementById("inspectedNode"); + + inspectedNode.addEventListener("click", internalHandler); + + function customFirstEventListener(e) + { + console.log("I'm first custom event listener"); + } + + function customSecondEventListener(e) + { + console.log("I'm second custom event listener"); + } + + function internalHandler(e) + { + console.log("I'm internal event handler"); + if (e.type === "customFirst") + customFirstEventListener(e); + if (e.type === "customSecond") + customSecondEventListener(e); + } + + // Example of API usage. + window.devtoolsFrameworkEventListeners = window.devtoolsFrameworkEventListeners || []; + window.devtoolsFrameworkEventListeners.push(frameworkEventListeners); + + function frameworkEventListeners(node) + { + if (node === inspectedNode) { + return {eventListeners: [{type: "customFirst", useCapture: true, passive: false, once: false, handler: customFirstEventListener}, + {type: "customSecond", useCapture: false, passive: false, once: false, handler: customSecondEventListener}], + internalHandlers: [internalHandler]}; + } + return {eventListeners: []}; + } +} + +function setupExceptionInGetter() +{ + Object.defineProperty(window, "devtoolsFrameworkEventListeners", { get: function() { throw "Error in getter" }}); +} + +function setupReturnIncorrectResult() +{ + window.devtoolsFrameworkEventListeners = window.devtoolsFrameworkEventListeners || []; + window.devtoolsFrameworkEventListeners.push(frameworkEventListenersWithException); + window.devtoolsFrameworkEventListeners.push(function(){ return null; }); + window.devtoolsFrameworkEventListeners.push(function(){ return undefined; }); + window.devtoolsFrameworkEventListeners.push(function(){ return {}; }); + window.devtoolsFrameworkEventListeners.push(function(){ return {eventListeners: null}; }); + window.devtoolsFrameworkEventListeners.push(function(){ return {eventListeners: undefined}; }); + window.devtoolsFrameworkEventListeners.push(function(){ return {eventListeners: [], internalHandlers: null}; }); + window.devtoolsFrameworkEventListeners.push(function(){ return {eventListeners: [], internalHandlers: undefined}; }); + window.devtoolsFrameworkEventListeners.push(function(){ return {eventListeners: [], internalHandlers: [undefined, null]}; }); + window.devtoolsFrameworkEventListeners.push(returnFrameworkEventListenersWithGetter); + window.devtoolsFrameworkEventListeners.push(returnIncrrectEventListeners); + + function frameworkEventListenersWithException() + { + throw "Error in fetcher"; + } + + function returnFrameworkEventListenersWithGetter() + { + var obj = {}; + Object.defineProperty(obj, "eventListeners", { get: function() { throw "Error in getter" }}); + return obj; + } + + function returnIncrrectEventListeners() + { + var listeners = []; + listeners.push({}); + var listener = {type: "type", useCapture: true}; + Object.defineProperty(listener, "handler", { get: function() { throw "Error in getter" }}); + listeners.push(listener); + listener = {type: "type", handler: (function(){})}; + Object.defineProperty(listener, "useCapture", { get: function() { throw "Error in getter"}}); + listeners.push(listener); + return {eventListeners: listeners, internalHandlers: [239, null, undefined]}; + } +} + +function test() { + Common.settingForTest('showEventListenersForAncestors').set(false); + ElementsTestRunner.selectNodeWithId('inspectedNode', step1); + + function step1() { + TestRunner.addResult('== Incorrect fetchers'); + ElementsTestRunner.expandAndDumpSelectedElementEventListeners(step2); + } + + function step2() { + TestRunner.evaluateInPage('setupExceptionInGetter()', step3); + } + + function step3() { + ElementsTestRunner.selectNodeWithId('inspectedNode', step4); + } + + function step4() { + TestRunner.addResult('== Exception in fetchers\' getter'); + ElementsTestRunner.expandAndDumpSelectedElementEventListeners(step5); + ElementsTestRunner.eventListenersWidget().doUpdate(); + } + + function step5() { + ConsoleTestRunner.dumpConsoleMessages(false, false, TestRunner.textContentWithLineBreaks); + TestRunner.completeTest(); + } +} + +function onloadHandler() +{ + setupReturnIncorrectResult(); + setupNormalPath(); + runTest(); +} +</script> +</head> +<body onload="onloadHandler()"> +<p> +Tests framework event listeners output in the Elements sidebar panel. +</p> +<button id="inspectedNode">Inspect Me</button> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/event-listener-sidebar-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listener-sidebar-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/event-listener-sidebar-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listener-sidebar-expected.txt
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/event-listener-sidebar-jquery1-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listener-sidebar-jquery1-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/event-listener-sidebar-jquery1-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listener-sidebar-jquery1-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listener-sidebar-jquery1.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listener-sidebar-jquery1.html new file mode 100644 index 0000000..edd7357 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listener-sidebar-jquery1.html
@@ -0,0 +1,40 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script src="resources/jquery-1.11.3.min.js"></script> +<script> +function setupEventListeners() +{ + var node = $("#node")[0]; + $("#node").click(function(){ console.log("first jquery"); }); + $("#node").click(function(){ console.log("second jquery"); }); + node.addEventListener("click", function() { console.log("addEventListener"); }); +} + +function test() { + Common.settingForTest('showEventListenersForAncestors').set(true); + ElementsTestRunner.selectNodeWithId('node', step1); + + function step1() { + ElementsTestRunner.showEventListenersWidget(); + ElementsTestRunner.expandAndDumpSelectedElementEventListeners(TestRunner.completeTest.bind(this)); + } +} + +function onloadHandler() +{ + setupEventListeners(); + runTest(); +} +</script> +</head> + + +<body onload="onloadHandler()"> +<p> +Tests event listeners output in the Elements sidebar panel. +</p> +<button id="node">Inspect Me</button> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/event-listener-sidebar-jquery2-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listener-sidebar-jquery2-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/event-listener-sidebar-jquery2-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listener-sidebar-jquery2-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listener-sidebar-jquery2.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listener-sidebar-jquery2.html new file mode 100644 index 0000000..5abc0b29 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listener-sidebar-jquery2.html
@@ -0,0 +1,55 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script src="resources/jquery-2.1.4.min.js"></script> +<script> +function setupEventListeners() +{ + var node = $("#node")[0]; + $("#node").click(function(){ console.log("first jquery"); }); + $("#node").click(function(){ console.log("second jquery"); }); + node.addEventListener("click", function() { console.log("addEventListener"); }); + node.onclick = function() { console.log("onclick"); } +} + +function test() { + Common.settingForTest('showEventListenersForAncestors').set(true); + ElementsTestRunner.selectNodeWithId('node', step1); + + function step1() { + ElementsTestRunner.showEventListenersWidget(); + ElementsTestRunner.expandAndDumpSelectedElementEventListeners(step2); + } + + function step2() { + TestRunner.addResult('Remove listeners..'); + var eventListenersWidget = ElementsTestRunner.eventListenersWidget(); + var listenerTypes = eventListenersWidget._eventListenersView._treeOutline.rootElement().children(); + var promises = []; + for (var i in listenerTypes) { + var listenersItems = listenerTypes[i].children(); + for (var j in listenersItems) + promises.push(listenersItems[j].eventListener().remove()); + } + ElementsTestRunner.expandAndDumpSelectedElementEventListeners(TestRunner.completeTest.bind(this)); + Promise.all(promises).then(() => eventListenersWidget.doUpdate()); + } +} + + +function onloadHandler() +{ + setupEventListeners(); + runTest(); +} +</script> +</head> + +<body onload="onloadHandler()"> +<p> +Tests event listeners output in the Elements sidebar panel. +</p> +<button id="node">Inspect Me</button> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/event-listener-sidebar-remove-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listener-sidebar-remove-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/event-listener-sidebar-remove-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listener-sidebar-remove-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listener-sidebar-remove.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listener-sidebar-remove.html new file mode 100644 index 0000000..b31a688 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listener-sidebar-remove.html
@@ -0,0 +1,68 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script> + +function setupEventListeners() +{ + function f() {} + function g() {} + var button = document.getElementById("node"); + button.addEventListener("click", f, false); + button.addEventListener("mouseover", f, false); + var sibling = document.getElementById("node-sibling"); + sibling.addEventListener("click", g, false); + sibling.addEventListener("mouseover", g, false); +} + +function test() { + Common.settingForTest('showEventListenersForAncestors').set(false); + + + function step1() { + ElementsTestRunner.selectNodeWithId('node', function() { + ElementsTestRunner.expandAndDumpSelectedElementEventListeners(step2); + }); + } + + function step2() { + ElementsTestRunner.removeFirstEventListener(); + TestRunner.addResult('Listeners after removal:'); + ElementsTestRunner.expandAndDumpSelectedElementEventListeners(step3, true); + } + + function step3() { + ElementsTestRunner.selectNodeWithId('node-sibling', function() { + TestRunner.addResult('Listeners for sibling node:'); + ElementsTestRunner.expandAndDumpSelectedElementEventListeners(step4); + }); + } + + function step4() { + TestRunner.completeTest(); + } + + step1(); +} + +function onloadHandler() +{ + setupEventListeners(); + runTest(); +} +</script> +</head> + + + +<body onload="onloadHandler()"> +<p> +Tests removing event listeners in the Elements sidebar panel. +</p> + +<button id="node">Inspect Me</button> +<button id="node-sibling">Inspect Sibling</button> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listener-sidebar.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listener-sidebar.html new file mode 100644 index 0000000..6206679 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listener-sidebar.html
@@ -0,0 +1,81 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script> +function documentClickHandler(event) { console.log("click - document - attribute"); } + +function setupEventListeners() +{ + function f() {} + var button = document.getElementById("node"); + function clickHandler(event) { console.log("click - button - bubbling (registered before attribute)"); } + button.addEventListener("click", clickHandler, false); + button.addEventListener("hover", function hoverHandler(event) { console.log("hover - button - bubbling"); }, false); + button.addEventListener("click", function(event) { console.log("click - button - capturing"); }, true); + button.onclick = function(event) { console.log("click - button - attribute"); } + button.addEventListener("click", function(event) { console.log("click - button - bubbling (registered after attribute)"); }, false); + document.onclick = documentClickHandler; + document.addEventListener("click", function(event) { console.log("click - document - capturing"); }, true); + document.addEventListener("mousedown", f, false); + document.removeEventListener("mousedown", f, false); + + document.body.addEventListener("custom event", f, {capture: true, once: true}); + + function ObjectHandler() { document.addEventListener("click", this, true); } + ObjectHandler.prototype.toString = function() { return "ObjectHandler"; } + new ObjectHandler(); + + function EventListenerImpl() { document.addEventListener("click", this, true); } + EventListenerImpl.prototype.toString = function() { return "EventListenerImpl"; } + EventListenerImpl.prototype.handleEvent = function() { console.log("click - document - handleEvent"); } + new EventListenerImpl(); + document.body.addEventListener("wheel", f, {"passive": true}); + document.body.addEventListener("wheel", f, {"passive": true, "capture": true}); + document.body.removeEventListener("wheel", f, {"passive": true, "capture": true}); +} + +function test() { + Common.settingForTest('showEventListenersForAncestors').set(true); + ElementsTestRunner.selectNodeWithId('node', step1); + + function step1() { + ElementsTestRunner.expandAndDumpSelectedElementEventListeners(step2); + } + + function step2() { + ElementsTestRunner.selectNodeWithId('node-without-listeners', step3); + } + + function step3() { + Common.settingForTest('showEventListenersForAncestors').set(false); + TestRunner.addResult('Listeners for selected node only(should be no listeners):'); + ElementsTestRunner.expandAndDumpSelectedElementEventListeners(step4); + } + + function step4() { + TestRunner.completeTest(); + } +} + +function onloadHandler() +{ + setupEventListeners(); + runTest(); +} +</script> +</head> + + + +<body onload="onloadHandler()"> +<p> +Tests event listeners output in the Elements sidebar panel. +</p> + +<button id="node">Inspect Me</button> + +<div id="node-without-listeners"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/event-listeners-about-blank-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listeners-about-blank-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/event-listeners-about-blank-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listeners-about-blank-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listeners-about-blank.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listeners-about-blank.html new file mode 100644 index 0000000..80eb02ce --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/event-listeners-about-blank.html
@@ -0,0 +1,44 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script> + +function setupEventListeners() +{ + function f() {} + var frame = document.getElementById("myframe"); + var body = frame.contentDocument.body; + body.addEventListener("click", f, true); + var div = frame.contentDocument.createElement("div"); + div.id = "div-in-iframe"; + div.addEventListener("hover", f, {capture: true, once: true}); + body.appendChild(div); + body.addEventListener("wheel", f, {"passive": true}); +} + +function test() { + Common.settingForTest('showEventListenersForAncestors').set(true); + TestRunner.evaluateInPage('setupEventListeners()', step1); + + function step1() { + ElementsTestRunner.selectNodeWithId('div-in-iframe', step2); + } + + function step2() { + ElementsTestRunner.expandAndDumpSelectedElementEventListeners(TestRunner.completeTest.bind(InspectorTest)); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests event listeners output in the Elements sidebar panel when the listeners are added on an element in about:blank page. +</p> + +<iframe id="myframe"></iframe> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/expand-recursively-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/expand-recursively-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/expand-recursively-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/expand-recursively-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/expand-recursively.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/expand-recursively.html new file mode 100644 index 0000000..3bd07f3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/expand-recursively.html
@@ -0,0 +1,64 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script> + +function test() { + var treeOutline = ElementsTestRunner.firstElementsTreeOutline(); + ElementsTestRunner.findNode(function() { + return false; + }, firstStep); + + function firstStep() { + TestRunner.addResult('===== Initial state of tree outline =====\n'); + dump(); + + var topNode = treeOutline.rootElement().childAt(0).childAt(1).childAt(1); + topNode.expandRecursively(); + TestRunner.deprecatedRunAfterPendingDispatches(secondStep); + }; + + function secondStep() { + TestRunner.addResult('\n===== State of tree outline after calling .expandRecursively() =====\n'); + dump(); + + TestRunner.completeTest(); + }; + + function dump() { + var node = ElementsTestRunner.expandedNodeWithId('depth-1'); + ElementsTestRunner.dumpElementsTree(node); + }; +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that expanding elements recursively works. +</p> + +<div id="depth-1"> + <div id="depth-2"> + <div id="depth-3"> + <div id="depth-4"> + <div id="depth-5"> + <div id="depth-6"> + <div id="depth-7"> + <div id="depth-8"> + <div id="depth-9"> + <div id="depth-10"></div> + </div> + </div> + </div> + </div> + </div> + </div> + </div> + </div> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/hide-shortcut-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/hide-shortcut-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/hide-shortcut-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/hide-shortcut-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/hide-shortcut.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/hide-shortcut.html new file mode 100644 index 0000000..5c30e89 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/hide-shortcut.html
@@ -0,0 +1,161 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script> + +function pseudoVisibility(pseudo) +{ + var parentNode = document.getElementById("parent-node"); + return getComputedStyle(parentNode, ":" + pseudo).visibility; +} + +function pseudoIframeVisibility() +{ + var parentNode = frames[0].document.getElementById("frame-node"); + return getComputedStyle(parentNode).visibility; +} + +function test() { + var treeOutline; + var parentNode; + var childNode; + var frameNode; + + TestRunner.runTestSuite([ + function testSetUp(next) { + treeOutline = ElementsTestRunner.firstElementsTreeOutline(); + + ElementsTestRunner.nodeWithId('parent-node', callback); + + function callback(node) { + parentNode = node; + ElementsTestRunner.nodeWithId('child-node', callback2); + } + + function callback2(node) { + childNode = node; + ElementsTestRunner.nodeWithId('frame-node', callback3); + } + + function callback3(node) { + frameNode = node; + next(); + } + }, + + function testToggleHideShortcutOn(next) { + treeOutline.toggleHideElement(parentNode).then(callback); + + function callback() { + TestRunner.addResult('=== Added hide shortcut ==='); + TestRunner.cssModel.computedStylePromise(parentNode.id).then(callback2); + } + + function callback2(style) { + TestRunner.addResult('=== Parent node is hidden ==='); + TestRunner.addResult(getPropertyText(style, 'visibility')); + TestRunner.cssModel.computedStylePromise(childNode.id).then(callback3); + } + + function callback3(style) { + TestRunner.addResult('=== Child node is hidden ==='); + TestRunner.addResult(getPropertyText(style, 'visibility')); + next(); + } + }, + + function testToggleHideShortcutOff(next) { + treeOutline.toggleHideElement(parentNode).then(callback); + + function callback() { + TestRunner.addResult('=== Removed hide shortcut ==='); + TestRunner.cssModel.computedStylePromise(parentNode.id).then(callback2); + } + + function callback2(style) { + TestRunner.addResult('=== Parent node is visible ==='); + TestRunner.addResult(getPropertyText(style, 'visibility')); + TestRunner.cssModel.computedStylePromise(childNode.id).then(callback3); + } + + function callback3(style) { + TestRunner.addResult('=== Child node is visible ==='); + TestRunner.addResult(getPropertyText(style, 'visibility')); + next(); + } + }, + + function testToggleHideBeforePseudoShortcutOn(next) { + testPseudoToggle(parentNode.beforePseudoElement(), next); + }, + + function testToggleHideAfterPseudoShortcutOn(next) { + testPseudoToggle(parentNode.afterPseudoElement(), next); + }, + + function testToggleHideBeforePseudoShortcutOff(next) { + testPseudoToggle(parentNode.beforePseudoElement(), next); + }, + + function testToggleHideAfterPseudoShortcutOff(next) { + testPseudoToggle(parentNode.afterPseudoElement(), next); + }, + + function testToggleHideShortcutOnInFrame(next) { + treeOutline.toggleHideElement(frameNode).then(callback); + + function callback() { + TestRunner.evaluateInPagePromise('pseudoIframeVisibility()').then(function(result) { + TestRunner.addResult('=== Added hide shortcut in frame ==='); + TestRunner.addResult('=== Frame node is hidden ==='); + TestRunner.addResult('visibility: ' + result.value + ';'); + next(); + }); + } + } + ]); + + function getPropertyText(computedStyle, propertyName) { + return String.sprintf('%s: %s;', propertyName, computedStyle.get(propertyName)); + } + + function testPseudoToggle(pseudoNode, next) { + treeOutline.toggleHideElement(pseudoNode).then(callback); + function callback() { + var pseudoNodeTypeArg = pseudoNode.pseudoType() ? ('"' + pseudoNode.pseudoType() + '"') : 'undefined'; + TestRunner.evaluateInPagePromise('pseudoVisibility(' + pseudoNodeTypeArg + ')').then(function(result) { + TestRunner.addResult('::' + pseudoNode.pseudoType() + ' node visibility: \'' + result.value + '\''); + next(); + }); + } + } +} +</script> +<style> +#parent-node::before { + content: "before"; +} + +#parent-node::after { + content: "after"; +} +</style> +</head> + +<body> +<p> +Tests the hide shortcut, which toggles visibility:hidden on the node and it's ancestors. +<a href="https://bugs.webkit.org/show_bug.cgi?id=110641">Bug 110641</a> +</p> + +<div id="parent-node">parent + <div style="visibility:hidden">hidden + <div id="child-node" style="visibility:visible">child</div> + </div> +</div> + +<iframe src="resources/hide-shortcut-iframe.html" onload="runTest()"> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-css-grid-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-css-grid-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-css-grid-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-css-grid-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-css-grid.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-css-grid.html new file mode 100644 index 0000000..206c055 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-css-grid.html
@@ -0,0 +1,83 @@ +<html> +<head> + +<style> + +body { + width: 2000px; + height: 2000px; + background-color: grey; +} +.grid { + width: 1000px; + display: grid; + grid-template-columns: 50px 20%; + grid-auto-rows: 25px; +} +.padded { + padding: 50px 60px; + align-content: space-around; + justify-content: end; + grid-gap: 15px 25px; + border: 5px solid; + margin: 10px; +} +.parent { + width: 1300px; + display: grid; + grid-template-columns: 50px 1200px; + grid-auto-rows: 100px; + grid-gap: 20px 50px; +} +.fixed { + position: absolute; + top: 0; + left: 0; +} +</style> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function onload() +{ + runTest(); +} + +async function test() { + function dumpGridHighlight(id) { + return new Promise(resolve => ElementsTestRunner.dumpInspectorHighlightJSON(id, resolve)); + } + + await dumpGridHighlight('paddedGrid'); + await dumpGridHighlight('nestedGrid'); + + TestRunner.completeTest(); +} + +</script> +</head> + +<body onload="onload()"> + +<div id="paddedGrid" class="grid padded fixed"> + <div>c1</div> + <div>c2</div> + <div>c3</div> +</div> +<div id="parentGrid" class="parent fixed"> + <div>Parent Cell 1</div> + <div>Parent Cell 2</div> + <div>Parent Cell 3</div> + <div id="nestedGrid" class="grid"> + <div>c1</div> + <div>c2</div> + <div>c3</div> + </div> +</div> + +<p id="description">This test verifies the position and size of the highlight rectangles overlayed on an inspected CSS grid div.</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-css-shapes-outside-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-css-shapes-outside-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-css-shapes-outside-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-css-shapes-outside-expected.txt
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-css-shapes-outside-scroll-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-css-shapes-outside-scroll-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-css-shapes-outside-scroll-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-css-shapes-outside-scroll-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-css-shapes-outside-scroll.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-css-shapes-outside-scroll.html new file mode 100644 index 0000000..bdfbd964 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-css-shapes-outside-scroll.html
@@ -0,0 +1,45 @@ +<!DOCTYPE html> +<html> +<head> +<style> + +.float { + width: 8em; + height: 8em; + float: left; + shape-margin: 2em; + margin: 1em; +} + +.circle { + background-color:blue; + shape-outside: circle(closest-side at center); + -webkit-clip-path: circle(closest-side at center); +} + +</style> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + var i = 0; + function dump() { + ElementsTestRunner.dumpInspectorHighlightJSON( + 'circle', i == 0 ? scroll : TestRunner.completeTest.bind(InspectorTest)); + } + function scroll() { + window.scrollTo(0, 100); + ++i; + dump(); + } + dump(); +} + +</script> +</head> + +<body onload="runTest()"> +<div class="float circle" id="circle"> </div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-css-shapes-outside.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-css-shapes-outside.html new file mode 100644 index 0000000..f9825458 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-css-shapes-outside.html
@@ -0,0 +1,87 @@ +<!DOCTYPE html> +<html> +<head> +<style> + +.float { + width: 8em; + height: 8em; + float: left; + shape-margin: 2em; + margin: 1em; +} + +.circle { + background-color:blue; + shape-outside: circle(closest-side at center); + -webkit-clip-path: circle(closest-side at center); +} + +.contentBox { + background-color:blue; + border-radius: 2em 4em 2em 2em; + border-width: 3em 1em 2em 1em; + padding: 1em 1em 1em 2em; + margin: 2em 1em 1em 1em; + shape-outside: content-box; + -webkit-clip-path: content-box; +} + +.insetSimpleRound { + background-color:green; + shape-outside: inset(30% round 20%); + -webkit-clip-path: inset(30% round 20%); +} + +.insetComplexRound { + background-color:blue; + shape-outside: inset(10% round 10% 40% 10% 40%); + -webkit-clip-path: inset(10% round 10% 40% 10% 40%); +} + +.ellipse { + background-color:green; + height: 5em; + shape-outside: ellipse(closest-side closest-side); + -webkit-clip-path: ellipse(closest-side closest-side); +} + +.raster { + background-color: blue; + shape-outside: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100px' height='100px'><rect width='100' height='100' fill='green'/></svg>"); +} + +.polygon { + background-color: green; + shape-outside: polygon(0px 0px, 0px 200px, 200px 0px); +} + +</style> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + var list = ['circle', 'insetSimpleRound', 'insetComplexRound', 'ellipse', 'contentBox', 'polygon', 'raster']; + var index = 0; + function nextNode() { + var nodeId = String(list[index++]); + ElementsTestRunner.dumpInspectorHighlightJSON( + nodeId, (index == list.length) ? TestRunner.completeTest.bind(InspectorTest) : nextNode); + } + nextNode(); +} + +</script> +</head> + +<body onload="runTest()"> +<div class="float circle" id="circle"> </div> +<div class="float insetSimpleRound" id="insetSimpleRound"> </div> +<div class="float insetComplexRound" id="insetComplexRound"> </div> +<div class="float ellipse" id="ellipse"> </div> +<div class="float contentBox" id="contentBox"> </div> +<div class="float polygon" id="polygon"> </div> +<div class="float raster" id="raster"> </div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-dom-updates-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-dom-updates-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-dom-updates-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-dom-updates-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-dom-updates.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-dom-updates.html new file mode 100644 index 0000000..d56eccc --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-dom-updates.html
@@ -0,0 +1,157 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../../inspector/console-test.js"></script> +<script> + +function appendChild(parentId, id) +{ + var e = document.createElement("span"); + e.id = id; + document.getElementById(parentId).appendChild(e); +} + +function remove(id) +{ + document.getElementById(id).remove(); +} + +function removeFirstChild(id) +{ + document.getElementById(id).firstChild.remove(); +} + +function setAttribute(id, name, value) +{ + var e = document.getElementById(id); + if (value === undefined) + e.removeAttribute(name); + else + e.setAttribute(name, value); +} + +function setTextContent(id, content) +{ + document.getElementById(id).textContent = content; +} + +function setFirstChildTextContent(id, content) +{ + document.getElementById(id).firstChild.textContent = content; +} + +function test() { + var attrTestNode; + var childTestNode; + var textTestNode; + + TestRunner.runTestSuite([ + function testDumpInitial(next) { + function callback(node) { + attrTestNode = ElementsTestRunner.expandedNodeWithId('attrTest'); + childTestNode = ElementsTestRunner.expandedNodeWithId('childTest'); + textTestNode = ElementsTestRunner.expandedNodeWithId('textTest'); + next(); + } + TestRunner.addResult('========= Original ========'); + ElementsTestRunner.dumpDOMUpdateHighlights(null); + ElementsTestRunner.expandElementsTree(callback); + }, + + function testSetAttributeOtherValue(next) { + runAndDumpHighlights('setAttribute(\'attrTest\', \'attrFoo\', \'bar\')', attrTestNode, next); + }, + + function testSetAttributeEmpty(next) { + runAndDumpHighlights('setAttribute(\'attrTest\', \'attrFoo\', \'\')', attrTestNode, next); + }, + + function testAddAttribute(next) { + runAndDumpHighlights('setAttribute(\'attrTest\', \'attrBar\', \'newBar\')', attrTestNode, next); + }, + + function testRemoveAttribute(next) { + runAndDumpHighlights('setAttribute(\'attrTest\', \'attrFoo\')', attrTestNode, next); + }, + + function testAppendChildToEmpty(next) { + runAndDumpHighlights('appendChild(\'childTest\', \'child1\')', childTestNode, callback); + function callback() { + // Expand the #childTest node. + ElementsTestRunner.expandElementsTree(next); + } + }, + + function testAppendChildToExpanded(next) { + runAndDumpHighlights('appendChild(\'childTest\', \'child2\')', childTestNode, next); + }, + + function testRemoveChild1(next) { + runAndDumpHighlights('remove(\'child1\')', childTestNode, next); + }, + + function testRemoveChild2(next) { + runAndDumpHighlights('remove(\'child2\')', childTestNode, next); + }, + + function testSetTextContent(next) { + runAndDumpHighlights('setTextContent(\'textTest\', \'Text\')', textTestNode, next); + }, + + function testSetTextNodeTextContent(next) { + runAndDumpHighlights('setFirstChildTextContent(\'textTest\', \'NewText\')', textTestNode, next); + }, + + function testRemoveInlineTextNode(next) { + runAndDumpHighlights('removeFirstChild(\'textTest\')', textTestNode, next); + }, + + function testSetTextContentWithEmptyText(next) { + runAndDumpHighlights('setTextContent(\'textTest\', \'Text\')', textTestNode, next); + }, + + function testClearTextNodeTextContent(next) { + runAndDumpHighlights('setFirstChildTextContent(\'textTest\', \'\')', textTestNode, next); + }, + + function testAppendChildWhenHidden(next) { + UI.viewManager.showView('console'); + runAndDumpHighlights('appendChild(\'childTest\', \'child1\')', childTestNode, next); + } + ]); + + function runAndDumpHighlights(script, root, next) { + dumpHighlights(root, next); + TestRunner.evaluateInPage(script); + } + + function dumpHighlights(root, next) { + ElementsTestRunner.dumpDOMUpdateHighlights(root, callback); + + function callback() { + var treeOutline = ElementsTestRunner.firstElementsTreeOutline(); + var highlights = treeOutline._element.getElementsByClassName('dom-update-highlight'); + for (var i = 0; i < highlights.length; ++i) + highlights[i].classList.remove('dom-update-highlight'); + next(); + } + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests DOM update highlights in the DOM tree. +</p> + +<div id="container"> + <div id="attrTest" attrFoo="foo"></div> + <div id="childTest"></div> + <div id="textTest"></div> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-node-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-node-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-node-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-node-expected.txt
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-node-scaled-and-scrolled-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-node-scaled-and-scrolled-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-node-scaled-and-scrolled-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-node-scaled-and-scrolled-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-node-scaled-and-scrolled.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-node-scaled-and-scrolled.html new file mode 100644 index 0000000..d67b834d --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-node-scaled-and-scrolled.html
@@ -0,0 +1,44 @@ +<html> +<head> + +<style> + +body { + margin: 0; +} + +iframe { + position: absolute; + left: 83px; + top: 53px; + width: 200px; + height: 200px; +} + +</style> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../../inspector/console-test.js"></script> +<script> + +function onload() +{ + if (window.internals) + window.internals.setPageScaleFactor(2); + // Fully scroll the visual viewport. + internals.setVisualViewportOffset(1000, 1000); + runTest(); +} + +function test() { + ElementsTestRunner.dumpInspectorHighlightJSON('div', TestRunner.completeTest.bind(InspectorTest)); +} + +</script> +</head> + +<body onload="onload()"> +<iframe id="scale-iframe" src="resources/highlight-node-scaled-iframe.html"></iframe> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-node-scaled-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-node-scaled-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-node-scaled-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-node-scaled-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-node-scaled.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-node-scaled.html new file mode 100644 index 0000000..4254a2e9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-node-scaled.html
@@ -0,0 +1,42 @@ +<html> +<head> + +<style> + +body { + margin: 0; +} + +iframe { + position: absolute; + left: 83px; + top: 53px; + width: 200px; + height: 200px; +} + +</style> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../../inspector/console-test.js"></script> +<script> + +function onload() +{ + if (window.internals) + window.internals.setPageScaleFactor(2); + runTest(); +} + +function test() { + ElementsTestRunner.dumpInspectorHighlightJSON('div', TestRunner.completeTest.bind(InspectorTest)); +} + +</script> +</head> + +<body onload="onload()"> +<iframe id="scale-iframe" src="resources/highlight-node-scaled-iframe.html"></iframe> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-node-scroll-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-node-scroll-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-node-scroll-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-node-scroll-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-node-scroll.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-node-scroll.html new file mode 100644 index 0000000..a892250 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-node-scroll.html
@@ -0,0 +1,67 @@ +<html> +<head> + +<style> + +body { + width: 2000px; + height: 2000px; + background-color: grey; +} +.inspected { + margin: 5px; + border: solid 10px aqua; + padding: 15px; + width: 200px; + height: 200px; + background-color: blue; + float: left; +} +#scrollingContainer { + clear: both; + width: 100px; + height: 100px; + overflow: auto; +} +#description { + clear: both; +} + +</style> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function onload() +{ + window.scrollBy(50, 100); + scrollingContainer = document.getElementById("scrollingContainer"); + scrollingContainer.scrollTop = 50; + scrollingContainer.scrollLeft = 60; + runTest(); +} + +function test() { + ElementsTestRunner.dumpInspectorHighlightJSON('inspectedElement1', testNode2); + + function testNode2() { + ElementsTestRunner.dumpInspectorHighlightJSON('inspectedElement2', TestRunner.completeTest.bind(InspectorTest)); + } +} + +</script> +</head> + +<body onload="onload()"> + +<div id="inspectedElement1" class="inspected"></div> + +<div id="scrollingContainer"> + <div id="inspectedElement2" class="inspected"></div> +</div> + +<p id="description">This test verifies the position and size of the highlight rectangles overlayed on an inspected div in the scrolled view.</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-node-transformed-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-node-transformed-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-node-transformed-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-node-transformed-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-node-transformed.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-node-transformed.html new file mode 100644 index 0000000..0b7c899 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-node-transformed.html
@@ -0,0 +1,40 @@ +<html> +<head> + +<style> + +body { + margin: 0; +} + +iframe { + position: absolute; + left: 83px; + top: 53px; + width: 200px; + height: 200px; +} + +</style> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../../inspector/console-test.js"></script> +<script> + +function onload() +{ + runTest(); +} + +function test() { + ElementsTestRunner.dumpInspectorHighlightJSON('div', TestRunner.completeTest.bind(InspectorTest)); +} + +</script> +</head> + +<body onload="onload()"> +<iframe id="transform-iframe" src="resources/highlight-node-transformed-iframe.html"></iframe> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-node.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-node.html new file mode 100644 index 0000000..632ee42 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-node.html
@@ -0,0 +1,46 @@ +<html> +<head> + +<style> + +body { + margin: 0; +} +#container { + width: 400px; + height: 400px; + background-color: grey; +} +#inspectedElement { + margin: 5px; + border: solid 10px aqua; + padding: 15px; + width: 200px; + height: 200px; + background-color: blue; + float: left; +} +#description { + clear: both; +} + +</style> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.dumpInspectorHighlightJSON('inspectedElement', TestRunner.completeTest.bind(InspectorTest)); +} + +</script> +</head> + +<body onload="runTest()"> + +<div id="inspectedElement"></div> +<p id="description">This test verifies the position and size of the highlight rectangles overlayed on an inspected div.</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-svg-content-inside-iframe-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-svg-content-inside-iframe-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-svg-content-inside-iframe-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-svg-content-inside-iframe-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-svg-content-inside-iframe.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-svg-content-inside-iframe.html new file mode 100644 index 0000000..3481d75 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-svg-content-inside-iframe.html
@@ -0,0 +1,41 @@ +<html> +<head> + +<style> + +body { + margin: 0; +} + +#container { + position: absolute; + overflow: hidden; + left: 100px; + top: 200px; +} + +iframe { + width: 200px; + height: 200px; + border: none; +} + +</style> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.dumpInspectorHighlightJSON('svg-rect', TestRunner.completeTest.bind(InspectorTest), 'svg-iframe'); +} + +</script> +</head> + +<body onload="runTest()"> +<div id="container"> + <iframe id="svg-iframe" src="resources/highlight-svg-content-iframe.html"></iframe> +</div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-svg-root-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-svg-root-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-svg-root-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-svg-root-expected.txt
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-svg-root-zoomed-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-svg-root-zoomed-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-svg-root-zoomed-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-svg-root-zoomed-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-svg-root-zoomed.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-svg-root-zoomed.html new file mode 100644 index 0000000..a6e80625 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-svg-root-zoomed.html
@@ -0,0 +1,71 @@ +<!DOCTYPE html> +<html> +<head> +<style> + +body { + margin: 0; +} +#svg-root { + position: relative; + left: 10px; + top: 20px; + margin: 30px; + border: solid 40px aqua; + padding: 50px; + background-color: blue; +} + +</style> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function startTest() +{ + if (window.eventSender) + window.eventSender.zoomPageIn(); + runTest(); +} + +function test() { + ElementsTestRunner.dumpInspectorHighlightJSON('svg-root', TestRunner.completeTest.bind(InspectorTest)); +} + +</script> +</head> +<body onload="startTest()"> +<svg id="svg-root" width="100" height="200" viewbox="0 0 50 100"></svg> +<p id="description">This test verifies the position and size of the highlight rectangles overlayed on an SVG root element when the page is zoomed.</p> +<!-- + +Expected value calculations for #svg-root's highlight rectangles at 120% zoom: + +margin rect: + left: (10) * 1.2 == 12 + top: (20) * 1.2 == 24 + width: (100 + 2 * (30 + 40 + 50)) * 1.2 == 340 * 1.2 == 408 + height: (200 + 2 * (30 + 40 + 50)) * 1.2 == 440 * 1.2 == 528 + +border rect: + left: (10 + 30) * 1.2 == 40 * 1.2 == 48 + top: (20 + 30) * 1.2 == 50 * 1.2 == 60 + width: (100 + 2 * (40 + 50)) * 1.2 == 280 * 1.2 == 336 + height: (200 + 2 * (40 + 50)) * 1.2 == 380 * 1.2 == 456 + +padding rect: + left: (10 + 30 + 40) * 1.2 == 80 * 1.2 == 96 + top: (20 + 30 + 40) * 1.2 == 90 * 1.2 == 108 + width: (100 + 2 * (50)) * 1.2 == 200 * 1.2 == 240 + height: (200 + 2 * (50)) * 1.2 == 300 * 1.2 == 360 + +content rect: + left: (10 + 30 + 40 + 50) * 1.2 == 130 * 1.2 == 156 + top: (20 + 30 + 40 + 50) * 1.2 == 140 * 1.2 == 168 + width: (100) * 1.2 == 120 + height: (200) * 1.2 == 240 + +--> +<div id="console"></div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-svg-root.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-svg-root.html new file mode 100644 index 0000000..0fe3ddc7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/highlight-svg-root.html
@@ -0,0 +1,36 @@ +<!DOCTYPE html> +<html> +<head> + +<style> + +body { + margin: 0; +} +#svg-root { + margin: 5px; + border: solid 10px aqua; + padding: 15px; + background-color: blue; +} + +</style> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.dumpInspectorHighlightJSON('svg-root', TestRunner.completeTest.bind(InspectorTest)); +} + +</script> +</head> + +<body onload="runTest()"> + +<svg id="svg-root" width="100" height="100" viewbox="0 0 50 50"></svg> +<p id="description">This test verifies the position and size of the highlight rectangles overlayed on an SVG root element.</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/highlight/resources/highlight-node-scaled-iframe.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/resources/highlight-node-scaled-iframe.html similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/highlight/resources/highlight-node-scaled-iframe.html rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/resources/highlight-node-scaled-iframe.html
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/highlight/resources/highlight-node-transformed-iframe.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/resources/highlight-node-transformed-iframe.html similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/highlight/resources/highlight-node-transformed-iframe.html rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/resources/highlight-node-transformed-iframe.html
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/highlight/resources/highlight-svg-content-iframe.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/resources/highlight-svg-content-iframe.html similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/highlight/resources/highlight-svg-content-iframe.html rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/highlight/resources/highlight-svg-content-iframe.html
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/iframe-load-event-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/iframe-load-event-expected.txt new file mode 100644 index 0000000..a9b4198 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/iframe-load-event-expected.txt
@@ -0,0 +1,30 @@ +Tests that iframe content is available after iframe's load event fired. See bug 76552. + + + + +After frame navigate +- <html> + - <head> + <script src="../../inspector/inspector-test.js"></script> + <script src="../../inspector/elements-test.js"></script> + <script src="resources/iframe-load-event-iframe.js"></script> + </head> + - <body> + - <p> + "\nTests that iframe content is available after iframe's load event fired. See " + <a href="http://webkit.org/b/76552">bug 76552</a> + ".\n" + </p> + - <iframe id="myframe" src="resources/iframe-load-event-iframe-2.html" onload="runTest()"> + - #document + - <html> + <head></head> + - <body> + <div id="iframe-2-element"></div> + </body> + </html> + </iframe> + </body> + </html> +
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/iframe-load-event.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/iframe-load-event.html new file mode 100644 index 0000000..4fd8edb --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/iframe-load-event.html
@@ -0,0 +1,13 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script src="resources/iframe-load-event-iframe.js"></script> +</head> +<body> +<p> +Tests that iframe content is available after iframe's load event fired. See <a href="http://webkit.org/b/76552">bug 76552</a>. +</p> +<iframe id="myframe" src="resources/iframe-load-event-iframe-1.html" onload="runTest()"></iframe> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/inline-style-title-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/inline-style-title-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/inline-style-title-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/inline-style-title-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/inline-style-title.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/inline-style-title.html new file mode 100644 index 0000000..5b769ac --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/inline-style-title.html
@@ -0,0 +1,54 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<style id="inline-style"> + div { color: red } +</style> +<script> + +function updateStyleText() +{ + document.querySelector("#inline-style").textContent = "span { border: 1px solid black }"; +} + +function test() { + // Save time on style updates. + Elements.StylesSidebarPane.prototype.update = function() {}; + Elements.MetricsSidebarPane.prototype.update = function() {}; + + ElementsTestRunner.nodeWithId('inline-style', onInlineStyleQueried); + + var treeOutline = ElementsTestRunner.firstElementsTreeOutline(); + var treeElement; + + function onInlineStyleQueried(node) { + if (!node) { + TestRunner.addResult('Didn\'t find node with given ID'); + TestRunner.completeTest(); + return; + } + treeElement = treeOutline.findTreeElement(node); + TestRunner.addResult('=== initial inline style text ==='); + TestRunner.addResult(treeElement.title.textContent); + TestRunner.evaluateInPage('updateStyleText()', onStyleUpdated); + } + + function onStyleUpdated() { + ElementsTestRunner.firstElementsTreeOutline().runPendingUpdates(); + TestRunner.addResult('=== inline style text after change ==='); + TestRunner.addResult(treeElement.title.textContent); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Verifies that external change of inline style element updates its title. +</p> +</div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/insert-node-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/insert-node-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/insert-node-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/insert-node-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/insert-node.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/insert-node.html new file mode 100644 index 0000000..b2fdf88 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/insert-node.html
@@ -0,0 +1,135 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script> + +function insertBeforeFirst() +{ + var container = document.getElementById("container"); + var child = document.createElement("div"); + child.setAttribute("id", "child-before"); + container.insertBefore(child, container.firstChild); +} + +function insertNode() +{ + var container = document.getElementById("container"); + var child2 = document.getElementById("child2"); + var child = document.createElement("div"); + child.setAttribute("id", "child-middle"); + container.insertBefore(child, child2); +} + +function appendChild() +{ + var container = document.getElementById("container"); + var child = document.createElement("div"); + child.setAttribute("id", "child-after"); + container.appendChild(child); +} + +function appendChildWithText() +{ + var container = document.getElementById("container"); + var child = document.createElement("div"); + child.setAttribute("id", "child-with-text"); + child.setAttribute("style", "display: none;"); + child.innerText = "Text"; + container.appendChild(child); +} + +function insertFirstTextNode() +{ + var child3 = document.getElementById("child3"); + child3.innerText = "First text"; +} + +function test() { + var containerNode; + + TestRunner.runTestSuite([ + function testDumpInitial(next) { + function callback(node) { + containerNode = ElementsTestRunner.expandedNodeWithId('container'); + + TestRunner.addResult('========= Original ========'); + ElementsTestRunner.dumpElementsTree(containerNode); + next(); + } + ElementsTestRunner.expandElementsTree(callback); + }, + + function testInsertBefore(next) { + function callback() { + TestRunner.addResult('===== Inserted before ====='); + ElementsTestRunner.dumpElementsTree(containerNode); + next(); + } + TestRunner.evaluateInPage('insertBeforeFirst()', callback); + }, + + function testInsertMiddle(next) { + function callback() { + TestRunner.addResult('===== Inserted middle ====='); + ElementsTestRunner.dumpElementsTree(containerNode); + next(); + } + TestRunner.evaluateInPage('insertNode()', callback); + }, + + function testAppend(next) { + function callback() { + TestRunner.addResult('======== Appended ========='); + ElementsTestRunner.dumpElementsTree(containerNode); + next(); + } + TestRunner.evaluateInPage('appendChild()', callback); + }, + + function testAppendWithText(next) { + function callback() { + TestRunner.addResult('======== Appended with text========='); + ElementsTestRunner.dumpElementsTree(containerNode); + var newNode = ElementsTestRunner.expandedNodeWithId('child-with-text'); + if (TestRunner.domModel.nodeForId(newNode.firstChild.id)) + TestRunner.addResult('Success: child text is bound'); + else + TestRunner.addResult('Failed: child text is not bound'); + next(); + } + TestRunner.evaluateInPage('appendChildWithText()', callback); + }, + + function testInsertFirstTextNode(next) { + function callback() { + TestRunner.addResult('======== Inserted first text node ========='); + ElementsTestRunner.expandElementsTree(callback2); + } + + function callback2() { + ElementsTestRunner.dumpElementsTree(containerNode); + var newNode = ElementsTestRunner.expandedNodeWithId('child3'); + if (TestRunner.domModel.nodeForId(newNode.firstChild.id)) + TestRunner.addResult('Success: child text is bound'); + else + TestRunner.addResult('Failed: child text is not bound'); + next(); + } + TestRunner.evaluateInPage('insertFirstTextNode()', callback); + } + ]); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that elements panel updates dom tree structure upon node insertion. +</p> + +<div id="container"><div id="child1"></div><div id="child2"></div><div id="child3"></div></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/inspect-mode-after-profiling-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/inspect-mode-after-profiling-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/inspect-mode-after-profiling-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/inspect-mode-after-profiling-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/inspect-mode-after-profiling.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/inspect-mode-after-profiling.html new file mode 100644 index 0000000..3d33cb5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/inspect-mode-after-profiling.html
@@ -0,0 +1,46 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script> + +function click() +{ + var target = document.getElementById("inspected"); + var rect = target.getBoundingClientRect(); + // Simulate the mouse click over the target to trigger an event dispatch. + eventSender.mouseMoveTo(rect.left + 10, rect.top + 10); + eventSender.mouseDown(); + eventSender.mouseUp(); +} + +function test() { + TestRunner.cpuProfilerModel.startRecording(); + TestRunner.cpuProfilerModel.stopRecording(); + TestRunner.overlayModel.setInspectMode(Protocol.Overlay.InspectMode.SearchForNode).then(clickAtInspected); + + function clickAtInspected() { + ElementsTestRunner.firstElementsTreeOutline().addEventListener( + Elements.ElementsTreeOutline.Events.SelectedNodeChanged, dumpAndFinish); + TestRunner.evaluateInPage('click()'); + } + + function dumpAndFinish() { + ElementsTestRunner.firstElementsTreeOutline().removeEventListener( + Elements.ElementsTreeOutline.Events.SelectedNodeChanged, dumpAndFinish); + var selectedElement = ElementsTestRunner.firstElementsTreeOutline().selectedTreeElement; + TestRunner.addResult('Node selected: ' + selectedElement.node().getAttribute('id')); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that inspect mode works after profiling start/stop. +</p> +<div id="inspected" style="width:100px;height:100px;"></div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/inspect-mode-shadow-text-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/inspect-mode-shadow-text-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/inspect-mode-shadow-text-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/inspect-mode-shadow-text-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/inspect-mode-shadow-text.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/inspect-mode-shadow-text.html new file mode 100644 index 0000000..a1350888 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/inspect-mode-shadow-text.html
@@ -0,0 +1,53 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> + +<script> + +function click() +{ + var target = document.getElementById("host"); + var rect = target.getBoundingClientRect(); + // Simulate the mouse click over the target to trigger an event dispatch. + if (window.eventSender) { + window.eventSender.mouseMoveTo(rect.left + 10, rect.top + 10); + window.eventSender.mouseDown(); + window.eventSender.mouseUp(); + } +} + +function test() { + TestRunner.overlayModel.setInspectMode(Protocol.Overlay.InspectMode.SearchForNode).then(step2); + + function step2() { + ElementsTestRunner.firstElementsTreeOutline().addEventListener( + Elements.ElementsTreeOutline.Events.SelectedNodeChanged, step3); + TestRunner.evaluateInPage('click()'); + } + + function step3() { + ElementsTestRunner.firstElementsTreeOutline().removeEventListener( + Elements.ElementsTreeOutline.Events.SelectedNodeChanged, step3); + var selectedElement = ElementsTestRunner.firstElementsTreeOutline().selectedTreeElement; + TestRunner.addResult('Node selected: ' + selectedElement.node().getAttribute('id')); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> + +<p>Test that devtools can inspect text element under shadow root.</p> + +<div><div><div id="host"></div></div></div> +<script> + var host = document.querySelector('#host'); + var sr = host.createShadowRoot(); + sr.innerHTML = "Text Text Text<br>Text Text Text"; +</script> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/inspect-pointer-events-none-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/inspect-pointer-events-none-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/inspect-pointer-events-none-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/inspect-pointer-events-none-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/inspect-pointer-events-none.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/inspect-pointer-events-none.html new file mode 100644 index 0000000..e1c5d6ad --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/inspect-pointer-events-none.html
@@ -0,0 +1,98 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<style> +div { + margin: 0; + padding: 0; + border: none; +} +#outer { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; +} +#inner { + pointer-events: none; + position: absolute; + top: 10px; + left: 10px; + bottom: 10px; + right: 10px; +} +</style> +<script> + +function clickInner(withShift) +{ + var target = document.getElementById("inner"); + var rect = target.getBoundingClientRect(); + // Simulate the mouse click over the target to trigger an event dispatch. + if (window.eventSender) { + window.eventSender.mouseMoveTo(rect.left + rect.width / 2, rect.top + rect.height / 2, withShift ? "shiftKey" : ""); + window.eventSender.mouseDown(); + window.eventSender.mouseUp(); + } +} + +function test() { + function selectedNodeId() { + var selectedElement = ElementsTestRunner.firstElementsTreeOutline().selectedTreeElement; + if (!selectedElement) + return '<no selected node>'; + return selectedElement.node().getAttribute('id'); + } + + function expectSelectedNode(expectedId) { + var id = selectedNodeId(); + if (id === expectedId) + TestRunner.addResult('PASS: selected node with id \'' + id + '\''); + else + TestRunner.addResult('FAIL: unexpected selection ' + id); + } + + function step1() { + TestRunner.overlayModel.setInspectMode(Protocol.Overlay.InspectMode.SearchForNode).then(step2); + } + + function step2() { + ElementsTestRunner.firstElementsTreeOutline().addEventListener( + Elements.ElementsTreeOutline.Events.SelectedNodeChanged, step3); + TestRunner.evaluateInPage('clickInner(true)'); + } + + function step3() { + ElementsTestRunner.firstElementsTreeOutline().removeEventListener( + Elements.ElementsTreeOutline.Events.SelectedNodeChanged, step3); + expectSelectedNode('inner'); + TestRunner.overlayModel.setInspectMode(Protocol.Overlay.InspectMode.SearchForNode).then(step4); + } + + function step4() { + ElementsTestRunner.firstElementsTreeOutline().addEventListener( + Elements.ElementsTreeOutline.Events.SelectedNodeChanged, step5); + TestRunner.evaluateInPage('clickInner(false)'); + } + + function step5() { + ElementsTestRunner.firstElementsTreeOutline().removeEventListener( + Elements.ElementsTreeOutline.Events.SelectedNodeChanged, step5); + expectSelectedNode('outer'); + TestRunner.completeTest(); + } + + step1(); +} + +</script> +</head> + +<body onload="runTest()"> +<p>Test that Web Inspector can inspect element with <code>pointer-events:none</code>. +</p> +<div id="outer"><div id="inner"></div></div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/inspect-pseudo-element-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/inspect-pseudo-element-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/inspect-pseudo-element-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/inspect-pseudo-element-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/inspect-pseudo-element.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/inspect-pseudo-element.html new file mode 100644 index 0000000..1f18df3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/inspect-pseudo-element.html
@@ -0,0 +1,52 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script> +function clickPseudo() +{ + if (!window.eventSender) { + console.log("This test requires test shell"); + return; + } + eventSender.mouseMoveTo(2, 2); + eventSender.mouseDown(0); + eventSender.mouseUp(0); +} + +function test() { + TestRunner.overlayModel.setInspectMode(Protocol.Overlay.InspectMode.SearchForNode).then(inspectModeEnabled); + + function inspectModeEnabled() { + UI.context.addFlavorChangeListener(SDK.DOMNode, selectedNodeChanged); + TestRunner.evaluateInPage('clickPseudo()'); + } + + function selectedNodeChanged() { + var selectedNode = ElementsTestRunner.firstElementsTreeOutline().selectedDOMNode(); + if (!selectedNode) + TestRunner.addResult('<no selected node>'); + else + TestRunner.addResult('Selected node pseudo type: ' + selectedNode.pseudoType()); + UI.context.removeFlavorChangeListener(SDK.DOMNode, selectedNodeChanged); + TestRunner.completeTest(); + } +} + +</script> +<style> +body { + margin: 0; + padding: 0; +} + +#inspected::before { + content: "BEFORE" +} +</style> +</head> + +<body onload="runTest()"> +<div id="inspected">Test</div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/modify-chardata-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/modify-chardata-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/modify-chardata-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/modify-chardata-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/modify-chardata.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/modify-chardata.html new file mode 100644 index 0000000..a2e411d3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/modify-chardata.html
@@ -0,0 +1,81 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script> + +function modifyChars() +{ + var node = document.getElementById("node"); + node.firstChild.textContent = "Bar"; +} + +function modifyViaRange() +{ + var range = document.createRange(); + var referenceNode = document.getElementById("rangenode").firstChild; + range.selectNode(referenceNode); + range.setStart(referenceNode, 9); + range.setEnd(referenceNode, 9 + 5); + range.deleteContents(); + var span = range.startContainer.ownerDocument.createElement("span"); + span.innerHTML = "test"; + range.insertNode(span); +} + +function test() { + var targetNode; + + TestRunner.runTestSuite([ + function testDumpInitial(next) { + function callback(node) { + targetNode = node; + TestRunner.addResult('========= Original for normal mutation ========'); + ElementsTestRunner.dumpElementsTree(targetNode); + next(); + } + ElementsTestRunner.selectNodeWithId('node', callback); + }, + + function testSetAttribute(next) { + function callback() { + TestRunner.addResult('===== Mutated text node ====='); + ElementsTestRunner.dumpElementsTree(targetNode); + next(); + } + TestRunner.evaluateInPage('modifyChars()', callback); + }, + + function testModifyViaRange(next) { + function callback() { + TestRunner.addResult('===== Contents modified via Range ====='); + ElementsTestRunner.dumpElementsTree(targetNode); + next(); + } + function expandCallback() { + ElementsTestRunner.expandElementsTree(callback); + } + function selectCallback(node) { + targetNode = node; + TestRunner.addResult('========= Original for Range mutation ========'); + ElementsTestRunner.dumpElementsTree(targetNode); + TestRunner.evaluateInPage('modifyViaRange()', expandCallback); + } + ElementsTestRunner.selectNodeWithId('rangenode', selectCallback); + } + ]); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that elements panel updates dom tree structure upon changes to characters. +</p> + +<div id="node">Foo</div> +<div id="rangenode">Lorem ipsum dolor sit amet</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/move-node-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/move-node-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/move-node-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/move-node-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/move-node.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/move-node.html new file mode 100644 index 0000000..0798498 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/move-node.html
@@ -0,0 +1,59 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script> + +function test() { + var containerNode; + + TestRunner.runTestSuite([ + function testDumpInitial(next) { + function callback(node) { + containerNode = ElementsTestRunner.expandedNodeWithId('container'); + + TestRunner.addResult('========= Original ========'); + ElementsTestRunner.dumpElementsTree(containerNode); + next(); + } + ElementsTestRunner.expandElementsTree(callback); + }, + + function testDragAndDrop(next) { + var treeOutline = ElementsTestRunner.firstElementsTreeOutline(); + treeOutline.addEventListener(Elements.ElementsTreeOutline.Events.SelectedNodeChanged, selectionChanged); + + function selectionChanged() { + TestRunner.addResult('===== Moved child2 ====='); + ElementsTestRunner.dumpElementsTree(containerNode); + TestRunner.addResult( + 'Selection: ' + Components.DOMPresentationUtils.fullQualifiedSelector(treeOutline.selectedDOMNode())); + next(); + } + + var child2 = ElementsTestRunner.expandedNodeWithId('child2'); + var child4 = ElementsTestRunner.expandedNodeWithId('child4'); + treeOutline._treeElementBeingDragged = child2[treeOutline._treeElementSymbol]; + var treeElementToDropOn = child4[treeOutline._treeElementSymbol]; + treeOutline._doMove(treeElementToDropOn); + } + ]); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests elements drag and drop operation internals, verifies post-move selection. +</p> + +<div id="container"> + <div id="child1"></div> + <div id="child2"></div> + <div id="child3"></div> + <div id="child4"></div> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/node-reselect-on-append-child-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/node-reselect-on-append-child-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/node-reselect-on-append-child-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/node-reselect-on-append-child-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/node-reselect-on-append-child.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/node-reselect-on-append-child.html new file mode 100644 index 0000000..924c7cd --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/node-reselect-on-append-child.html
@@ -0,0 +1,45 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> + +<script> + +function appendNewNode() +{ + var element = document.querySelector("#first"); + var second = document.createElement("div"); + element.parentElement.appendChild(second); +} + +function test() { + ElementsTestRunner.selectNodeWithId('first', onNodeSelected); + + function onNodeSelected() { + ElementsTestRunner.firstElementsTreeOutline().addEventListener( + Elements.ElementsTreeOutline.Events.SelectedNodeChanged, onSelectionChangedEvent); + TestRunner.addSniffer(Elements.ElementsTreeOutline.prototype, '_updateChildren', onNodeAppended); + TestRunner.evaluateInPage('appendNewNode()'); + } + + function onSelectionChangedEvent() { + TestRunner.addResult('ERROR: erroneous selection changed event received.'); + TestRunner.completeTest(); + } + + function onNodeAppended() { + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p>The test verifies that SelectedNodeChanged event is not fired whenever a child gets added to the node.</p> +<div> + <div id="first">First Child</div> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/node-xpath-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/node-xpath-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/node-xpath-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/node-xpath-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/node-xpath.xhtml b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/node-xpath.xhtml new file mode 100644 index 0000000..52104ca --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/node-xpath.xhtml
@@ -0,0 +1,74 @@ +<!-- Pre-comment --> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<script src="../../inspector/inspector-test.js" id="script-id"></script> +<script src="../../inspector/elements-test.js"></script> +<script id="test-script"> +//<![CDATA[ +function test() +{ + ElementsTestRunner.expandElementsTree(dumpNodes.bind(null, "")); + var doc; + + function dumpNodes(prefix, node) + { + if (!doc) { + doc = getDocumentElement(); + node = doc; + } + if (node.getAttribute("id") === "test-script") + return; + dumpNodeData(node, prefix); + var children = node.children(); + for (var i = 0; children && i < children.length; ++i) + dumpNodes(prefix + " ", children[i]); + if (node === doc) + TestRunner.completeTest(); + } + + function getDocumentElement() + { + var map = TestRunner.domModel._idToDOMNode; + for (var id in map) { + if (map[id].nodeName() === "#document") + return map[id]; + } + + return null; + } + + function dumpNodeData(node, prefix) + { + var result = prefix + "'" + node.nodeName() + "':'" + node.nodeValue() + "' - '" + Components.DOMPresentationUtils.xPath(node, true) + "'"; + TestRunner.addResult(result.replace(/\r?\n/g, "\\n")); + } +} +//]]> +</script> +<script> +// Comment +//<![CDATA[ +function f() +{ + document.write("<"); +} +//]]> +</script> +</head> + +<body onload="runTest()"> +<p>Tests node xPath construction</p> + +<div id="id1" class="foo"></div> +<div id="id2" class="foo"></div> + +<div id="container"> + <div id="id3" class="foo">3 Prefix <![CDATA[<greeting>Hello, world!</greeting>]]> Suffix</div> + <div id="id4" class="foo">4</div> + <div id="id5" class="foo">5</div> + <div id="id6" class="foo">6</div> +</div> + +</body> +</html> +<!-- Post-comment -->
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/resolve-alien-node-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/resolve-alien-node-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/resolve-alien-node-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/resolve-alien-node-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/resolve-alien-node.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/resolve-alien-node.html new file mode 100644 index 0000000..2ce0893b --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/resolve-alien-node.html
@@ -0,0 +1,27 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script> + +async function test() { + var result = await TestRunner.RuntimeAgent.evaluate( + 'var doc = document.implementation.createHTMLDocument(\'\'); doc.lastChild.innerHTML = \'<span></span>\'; doc.lastChild'); + + var spanWrapper = TestRunner.runtimeModel.createRemoteObject(result); + var node = await TestRunner.domModel.pushObjectAsNodeToFrontend(spanWrapper); + TestRunner.assertTrue(node, 'Node object should be resovled'); + var remoteObject = await node.resolveToObject(); + TestRunner.addResult('Alien node should resolve to null: ' + remoteObject); + TestRunner.completeTest(); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that resolveNode from alien document does not crash. https://bugs.webkit.org/show_bug.cgi?id=71806. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/resolve-node-blocked-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/resolve-node-blocked-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/resolve-node-blocked-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/resolve-node-blocked-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/resolve-node-blocked.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/resolve-node-blocked.html new file mode 100644 index 0000000..0e580d825 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/resolve-node-blocked.html
@@ -0,0 +1,25 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<meta http-equiv="Content-Security-Policy" content="script-src 'unsafe-inline'"> +<script> +function test() { + TestRunner.evaluateInPage('document', didReceiveDocumentObject); + async function didReceiveDocumentObject(remoteObject) { + TestRunner.addResult('didReceiveDocumentObject'); + var nodeId = await TestRunner.DOMAgent.requestNode(remoteObject.objectId); + TestRunner.addResult('didRequestNode error = ' + (nodeId ? 'null' : 'error')); + TestRunner.completeTest(); + } +} +</script> +</head> +<body onload="runTest()"> +<p> +Tests that JS object to node resolution still works even if script evals are prohibited by Content-Security-Policy. +The test passes if it doesn't crash. +<a href="https://bugs.webkit.org/show_bug.cgi?id=78705">Bug 78705.</a> +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/resources/dom-search-crash-iframe.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/resources/dom-search-crash-iframe.html similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/resources/dom-search-crash-iframe.html rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/resources/dom-search-crash-iframe.html
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/resources/elements-panel-rewrite-href-iframe.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/resources/elements-panel-rewrite-href-iframe.html similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/resources/elements-panel-rewrite-href-iframe.html rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/resources/elements-panel-rewrite-href-iframe.html
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/resources/hide-shortcut-iframe.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/resources/hide-shortcut-iframe.html similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/resources/hide-shortcut-iframe.html rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/resources/hide-shortcut-iframe.html
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/resources/iframe-load-event-iframe-1.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/resources/iframe-load-event-iframe-1.html similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/resources/iframe-load-event-iframe-1.html rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/resources/iframe-load-event-iframe-1.html
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/resources/iframe-load-event-iframe-2.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/resources/iframe-load-event-iframe-2.html similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/resources/iframe-load-event-iframe-2.html rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/resources/iframe-load-event-iframe-2.html
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/resources/iframe-load-event-iframe.js b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/resources/iframe-load-event-iframe.js similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/resources/iframe-load-event-iframe.js rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/resources/iframe-load-event-iframe.js
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/resources/jquery-1.11.3.min.js b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/resources/jquery-1.11.3.min.js similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/resources/jquery-1.11.3.min.js rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/resources/jquery-1.11.3.min.js
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/resources/jquery-2.1.4.min.js b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/resources/jquery-2.1.4.min.js similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/resources/jquery-2.1.4.min.js rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/resources/jquery-2.1.4.min.js
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/resources/set-html-via-resource-iframe.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/resources/set-html-via-resource-iframe.html similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/resources/set-html-via-resource-iframe.html rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/resources/set-html-via-resource-iframe.html
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/resources/set-outer-html-body-iframe.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/resources/set-outer-html-body-iframe.html similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/resources/set-outer-html-body-iframe.html rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/resources/set-outer-html-body-iframe.html
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/resources/user-properties.js b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/resources/user-properties.js similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/resources/user-properties.js rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/resources/user-properties.js
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/reveal-whitespace-text-node-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/reveal-whitespace-text-node-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/reveal-whitespace-text-node-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/reveal-whitespace-text-node-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/reveal-whitespace-text-node.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/reveal-whitespace-text-node.html new file mode 100644 index 0000000..2f627e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/reveal-whitespace-text-node.html
@@ -0,0 +1,38 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script> + +function whitespaceChild() +{ + return document.getElementById("test").firstChild; +} + +function test() { + TestRunner.evaluateInPage('whitespaceChild()', childCallback); + + function childCallback(childObject) { + ElementsTestRunner.firstElementsTreeOutline().addEventListener( + Elements.ElementsTreeOutline.Events.SelectedNodeChanged, selectedNodeChanged); + Common.Revealer.reveal(childObject); + } + + function selectedNodeChanged(event) { + var node = event.data.node; + TestRunner.addResult('SelectedNodeChanged: ' + node.localName()); + TestRunner.completeTest(); + } +} +</script> +</head> + +<body onload="runTest()"> + +<p id="description">This test verifies that revealing a whitespace text node RemoteObject reveals its parentElement DIV.</p> + +<div id="test"> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/selected-element-changes-execution-context-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/selected-element-changes-execution-context-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/selected-element-changes-execution-context-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/selected-element-changes-execution-context-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/selected-element-changes-execution-context.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/selected-element-changes-execution-context.html new file mode 100644 index 0000000..c429538 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/selected-element-changes-execution-context.html
@@ -0,0 +1,55 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script> +function test() { + var mainContext; + + TestRunner.runTestSuite([ + function initialize(next) { + ElementsTestRunner.expandElementsTree(onExpanded); + + function onExpanded() { + mainContext = UI.context.flavor(SDK.ExecutionContext); + dumpContextAndNext(next); + } + }, + + function selectIframeInnerNode(next) { + ElementsTestRunner.selectNodeWithId('head', dumpContextAndNext.bind(null, next)); + }, + + function selectMainFrameNode(next) { + ElementsTestRunner.selectNodeWithId('element', dumpContextAndNext.bind(null, next)); + }, + + function selectIframeNode(next) { + ElementsTestRunner.selectNodeWithId('iframe-per-se', dumpContextAndNext.bind(null, next)); + }, + + function selectIframeImmediateChild(next) { + var iframe = UI.context.flavor(SDK.DOMNode); + var child = iframe.firstChild; + ElementsTestRunner.selectNode(child).then(dumpContextAndNext.bind(null, next)); + }, + ]); + + function dumpContextAndNext(next) { + var context = UI.context.flavor(SDK.ExecutionContext); + var node = UI.context.flavor(SDK.DOMNode); + var contextName = context === mainContext ? 'main' : 'iframe'; + var matchesNode = context.frameId === node.frameId(); + TestRunner.addResult('Execution Context: ' + contextName); + TestRunner.addResult(' matches: ' + matchesNode); + next(); + } +} +</script> +</head> +<body> + <p>Tests that the execution context is changed to match new selected node.</p> + <iframe id="iframe-per-se" src="resources/set-outer-html-body-iframe.html" onload="runTest()"></iframe> + <div id="element"></div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/shadow/breadcrumb-shadow-roots-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/breadcrumb-shadow-roots-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/shadow/breadcrumb-shadow-roots-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/breadcrumb-shadow-roots-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/breadcrumb-shadow-roots.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/breadcrumb-shadow-roots.html new file mode 100644 index 0000000..31a663f --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/breadcrumb-shadow-roots.html
@@ -0,0 +1,80 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function loaded() +{ + var template = document.querySelector("#tmpl"); + var root = document.querySelector("#host").createShadowRoot(); + root.appendChild(template.content.cloneNode(true)); + var rootClosed = document.querySelector("#hostClosed").attachShadow({mode: 'closed'}); + rootClosed.appendChild(template.content.cloneNode(true)); + runTest(); +} + +function test() { + Common.settingForTest('showUAShadowDOM').set(true); + ElementsTestRunner.expandElementsTree(step0); + + function step0() { + selectNode(matchUserAgentShadowRoot, step1); + } + + function step1() { + ElementsTestRunner.dumpBreadcrumb('User-agent shadow root breadcrumb'); + selectNode(matchOpenShadowRoot, step2); + } + + function step2() { + ElementsTestRunner.dumpBreadcrumb('Open shadow root breadcrumb'); + selectNode(matchClosedShadowRoot, step3); + } + + function step3() { + ElementsTestRunner.dumpBreadcrumb('Closed shadow root breadcrumb'); + TestRunner.completeTest(); + } + + function selectNode(matchFunction, next) { + ElementsTestRunner.findNode(matchFunction, callback); + function callback(node) { + TestRunner.addSniffer(Elements.ElementsBreadcrumbs.prototype, 'update', next); + Common.Revealer.revealPromise(node); + } + } + + function matchUserAgentShadowRoot(node) { + return node.shadowRootType() === SDK.DOMNode.ShadowRootTypes.UserAgent; + } + + function matchOpenShadowRoot(node) { + return node.shadowRootType() === SDK.DOMNode.ShadowRootTypes.Open; + } + + function matchClosedShadowRoot(node) { + return node.shadowRootType() === SDK.DOMNode.ShadowRootTypes.Closed; + } +} + +</script> +</head> + +<body onload="loaded()"> +<p> +Tests that shadow roots are displayed correctly in breadcrumbs. +</p> + +<input type="text"> +<div id="host"></div> +<div id="hostClosed"></div> +<template id="tmpl"> + <style>.red { color: red; }</style> + <div id="inner" class="red">inner</div> +</template> + + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/shadow/create-shadow-root-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/create-shadow-root-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/shadow/create-shadow-root-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/create-shadow-root-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/create-shadow-root.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/create-shadow-root.html new file mode 100644 index 0000000..0f086d6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/create-shadow-root.html
@@ -0,0 +1,72 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function createShadowRoot(id) +{ + var container = document.getElementById("container"); + var root = container.createShadowRoot(); + root.innerHTML = "<div id='" + id + "'></div>"; +} + +function createShadowRootV1(containerId, id, mode) +{ + var container = document.getElementById(containerId); + var root = container.attachShadow({ mode: mode }); + root.innerHTML = "<div id='" + id + "'></div>"; +} + +function test() { + TestRunner.runTestSuite([ + function testCreateShadowRoot(next) { + testShadowRoot('container', 'createShadowRoot(\'shadow-1\')', next); + }, + + function testCreateSecondShadowRoot(next) { + testShadowRoot('container', 'createShadowRoot(\'shadow-2\')', next); + }, + + function testCreateOpenShadowRoot(next) { + testShadowRoot('containerOpen', 'createShadowRootV1(\'containerOpen\', \'shadow-3\', \'open\')', next); + }, + + function testCreateCloseShadowRoot(next) { + testShadowRoot('containerClosed', 'createShadowRootV1(\'containerClosed\', \'shadow-4\', \'closed\')', next); + }, + ]); + + function testShadowRoot(containerId, code, next) { + var containerNode; + ElementsTestRunner.expandElementsTree(dumpBefore); + + function dumpBefore() { + containerNode = ElementsTestRunner.expandedNodeWithId(containerId); + TestRunner.addResult('==== before ===='); + ElementsTestRunner.dumpElementsTree(containerNode); + TestRunner.evaluateInPage(code, ElementsTestRunner.expandElementsTree.bind(InspectorTest, dumpAfter)); + } + + function dumpAfter() { + TestRunner.addResult('==== after ===='); + ElementsTestRunner.dumpElementsTree(containerNode); + next(); + } + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that elements panel updates dom tree structure upon shadow root creation. +</p> + +<div id="container"><div id="child"></div></div> +<div id="containerOpen"><div id="childOpen"></div></div> +<div id="containerClosed"><div id="childClosed"></div></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/shadow/elements-panel-shadow-selection-on-refresh-1-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-1-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/shadow/elements-panel-shadow-selection-on-refresh-1-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-1-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-1.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-1.html new file mode 100644 index 0000000..f1a1ca6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-1.html
@@ -0,0 +1,48 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../resources/elements-panel-shadow-selection-on-refresh.js"></script> +<script> + +function test() { + TestRunner.runTestSuite([ + function setup(next) { + Common.settingForTest('showUAShadowDOM').set(true); + ElementsTestRunner.expandElementsTree(next); + }, + + function testOpenShadowRoot(next) { + ElementsTestRunner.findNode(isOpenShadowRoot, ElementsTestRunner.selectReloadAndDump.bind(null, next)); + }, + + function testClosedShadowRoot(next) { + ElementsTestRunner.findNode(isClosedShadowRoot, ElementsTestRunner.selectReloadAndDump.bind(null, next)); + }, + ]); + + function isOpenShadowRoot(node) { + return node && node.shadowRootType() === SDK.DOMNode.ShadowRootTypes.Open; + } + + function isClosedShadowRoot(node) { + return node && node.shadowRootType() === SDK.DOMNode.ShadowRootTypes.Closed; + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that elements panel preserves selected shadow DOM node on page refresh. +</p> +<span id="hostElement"></span><span id="closedHostElement"></span> +<script> +var root = document.getElementById("hostElement").createShadowRoot(); +root.innerHTML = "<input type='text'>"; +var closedRoot = document.getElementById("closedHostElement").attachShadow({mode: 'closed'}); +closedRoot.innerHTML = "<button></button>"; +</script> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/shadow/elements-panel-shadow-selection-on-refresh-2-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-2-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/shadow/elements-panel-shadow-selection-on-refresh-2-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-2-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-2.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-2.html new file mode 100644 index 0000000..66c9484 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-2.html
@@ -0,0 +1,52 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../resources/elements-panel-shadow-selection-on-refresh.js"></script> +<script> + +function test() { + TestRunner.runTestSuite([ + function setup(next) { + Common.settingForTest('showUAShadowDOM').set(true); + ElementsTestRunner.expandElementsTree(next); + }, + + function testUserAgentShadowRoot(next) { + ElementsTestRunner.findNode(isUserAgentShadowRoot, ElementsTestRunner.selectReloadAndDump.bind(null, next)); + }, + + function testOpenShadowRootChild(next) { + ElementsTestRunner.findNode(isOpenShadowRootChild, ElementsTestRunner.selectReloadAndDump.bind(null, next)); + }, + ]); + + function isOpenShadowRoot(node) { + return node && node.shadowRootType() === SDK.DOMNode.ShadowRootTypes.Open; + } + + function isUserAgentShadowRoot(node) { + return node && node.shadowRootType() === SDK.DOMNode.ShadowRootTypes.UserAgent; + } + + function isOpenShadowRootChild(node) { + return isOpenShadowRoot(node.parentNode); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that elements panel preserves selected shadow DOM node on page refresh. +</p> +<span id="hostElement"></span><span id="closedHostElement"></span> +<script> +var root = document.getElementById("hostElement").createShadowRoot(); +root.innerHTML = "<input type='text'>"; +var closedRoot = document.getElementById("closedHostElement").attachShadow({mode: 'closed'}); +closedRoot.innerHTML = "<button></button>"; +</script> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/shadow/elements-panel-shadow-selection-on-refresh-3-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-3-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/shadow/elements-panel-shadow-selection-on-refresh-3-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-3-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-3.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-3.html new file mode 100644 index 0000000..3eb45482 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/elements-panel-shadow-selection-on-refresh-3.html
@@ -0,0 +1,56 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../resources/elements-panel-shadow-selection-on-refresh.js"></script> +<script> + +function test() { + TestRunner.runTestSuite([ + function setup(next) { + Common.settingForTest('showUAShadowDOM').set(true); + ElementsTestRunner.expandElementsTree(next); + }, + + function testClosedShadowRootChild(next) { + ElementsTestRunner.findNode(isClosedShadowRootChild, ElementsTestRunner.selectReloadAndDump.bind(null, next)); + }, + + function testUserAgentShadowRootChild(next) { + ElementsTestRunner.findNode(isUserAgentShadowRootChild, ElementsTestRunner.selectReloadAndDump.bind(null, next)); + }, + ]); + + function isClosedShadowRoot(node) { + return node && node.shadowRootType() === SDK.DOMNode.ShadowRootTypes.Closed; + } + + function isUserAgentShadowRoot(node) { + return node && node.shadowRootType() === SDK.DOMNode.ShadowRootTypes.UserAgent; + } + + function isClosedShadowRootChild(node) { + return isClosedShadowRoot(node.parentNode); + } + + function isUserAgentShadowRootChild(node) { + return isUserAgentShadowRoot(node.parentNode); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that elements panel preserves selected shadow DOM node on page refresh. +</p> +<span id="hostElement"></span><span id="closedHostElement"></span> +<script> +var root = document.getElementById("hostElement").createShadowRoot(); +root.innerHTML = "<input type='text'>"; +var closedRoot = document.getElementById("closedHostElement").attachShadow({mode: 'closed'}); +closedRoot.innerHTML = "<button></button>"; +</script> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/shadow/inspect-deep-shadow-element-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/inspect-deep-shadow-element-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/shadow/inspect-deep-shadow-element-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/inspect-deep-shadow-element-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/inspect-deep-shadow-element.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/inspect-deep-shadow-element.html new file mode 100644 index 0000000..1f35cc3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/inspect-deep-shadow-element.html
@@ -0,0 +1,60 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/console-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.firstElementsTreeOutline().addEventListener( + Elements.ElementsTreeOutline.Events.SelectedNodeChanged, selectedNodeChanged); + + var tests = [ + ['shadow', 'inspect(host.shadowRoot.firstChild.firstChild.firstChild)'], + ['shadow-open', 'inspect(hostOpen.shadowRoot.firstChild.firstChild.firstChild)'] + ]; + + function selectedNodeChanged(event) { + var node = event.data.node; + if (!node) + return; + if (node.getAttribute('id') == tests[0][0]) { + TestRunner.addResult(Components.DOMPresentationUtils.xPath(node, false)); + tests.shift(); + nextTest(); + } + } + + function nextTest() { + if (!tests.length) { + TestRunner.completeTest(); + return; + } + ConsoleTestRunner.evaluateInConsole(tests[0][1]); + } + + nextTest(); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that inspect element action works for deep shadow elements. +</p> + +<div> + <div> + <div id="host"></div> + <span id="hostOpen"></span> + </div> +</div> + +<script> + document.querySelector('#host').createShadowRoot().innerHTML = "<div><div><span id='shadow'>Shadow</span></div></div>"; + document.querySelector('#hostOpen').attachShadow({ mode: "open" }).innerHTML = "<div><div><span id='shadow-open'>Shadow</span></div></div>"; +</script> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/shadow/reveal-shadow-dom-node-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/reveal-shadow-dom-node-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/shadow/reveal-shadow-dom-node-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/reveal-shadow-dom-node-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/reveal-shadow-dom-node.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/reveal-shadow-dom-node.html new file mode 100644 index 0000000..8986e6a --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/reveal-shadow-dom-node.html
@@ -0,0 +1,58 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.firstElementsTreeOutline().addEventListener( + Elements.ElementsTreeOutline.Events.SelectedNodeChanged, selectedNodeChanged); + + var nodeChangesRemaining = 2; + function selectedNodeChanged(event) { + var node = event.data.node; + if (node.nodeName() === 'BODY') + return; + TestRunner.addResult('SelectedNodeChanged: ' + node.localName() + ' ' + shadowDOMPart(node)); + if (!--nodeChangesRemaining) + TestRunner.completeTest(); + } + + function shadowDOMPart(node) { + if (!node.isInShadowTree()) + return '(not in shadow tree)'; + return '(in ' + (node.ancestorUserAgentShadowRoot() ? 'user-agent' : 'author') + ' shadow DOM)'; + } + + ElementsTestRunner.nodeWithId('nested-input', function(node) { + node.shadowRoots()[0].getChildNodes(childrenCallback); + + function childrenCallback(children) { + var shadowDiv = children[0]; + TestRunner.addResult('User-agent shadow DOM hidden:'); + UI.panels.elements.revealAndSelectNode(shadowDiv).then(() => { + Common.settingForTest('showUAShadowDOM').set(true); + TestRunner.addResult('User-agent shadow DOM shown:'); + UI.panels.elements.revealAndSelectNode(shadowDiv); + }); + } + }); +} +</script> +</head> + +<body onload="runTest()"> + +<p id="description">This test verifies that the correct node is revealed in the DOM tree when asked to reveal a user-agent shadow DOM node.</p> + +<p id="test1"></p> + +<script> +var input = document.createElement("input"); +input.id = "nested-input"; +input.value = "test"; +test1.createShadowRoot().appendChild(input); +</script> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/shadow/shadow-distribution-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/shadow-distribution-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/shadow/shadow-distribution-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/shadow-distribution-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/shadow-distribution.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/shadow-distribution.html new file mode 100644 index 0000000..375461d --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/shadow-distribution.html
@@ -0,0 +1,151 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function createShadowRoot(hostId, slots) +{ + var host = document.createElement("div"); + host.id = hostId; + document.body.appendChild(host); + + var shadow = host.attachShadow({ mode: "open" }); + for (var i = 0; i < slots.length; i++) { + var slot = document.createElement("slot"); + slot.id = "slot" + (i + 1); + if (slots[i]) + slot.setAttribute("name", slots[i]); + shadow.appendChild(slot); + } +} + +function createChild(hostId, childId, tagName, slotName) +{ + var child = document.createElement(tagName); + child.id = childId; + if (slotName) + child.setAttribute("slot", slotName); + var host = document.getElementById(hostId); + host.appendChild(child); +} + +function resolveElement(elementId) +{ + var parts = elementId.split("."); + var root = document; + while (parts.length > 1) { + root = root.getElementById(parts[0]).shadowRoot; + parts.shift(); + } + return root.getElementById(parts[0]); +} + +function changeAttribute(elementId, name, value) +{ + var element = resolveElement(elementId); + if (value) + element.setAttribute(name, value); + else + element.removeAttribute(name); +} + +function removeElement(elementId) +{ + var element = resolveElement(elementId); + element.parentNode.removeChild(element); +} + +function reparentElement(elementId, parentId) +{ + var element = resolveElement(elementId); + var parent = resolveElement(parentId); + parent.appendChild(element); +} + +function test() { + TestRunner.runTestSuite([ + function createHost1(next) { + evalAndDump('createShadowRoot(\'host1\', [\'slot1\', \'slot2\', \'\'])', 'host1', next); + }, + + function createChild1(next) { + evalAndDump('createChild(\'host1\', \'child1\', \'span\', \'slot2\')', 'host1', next); + }, + + function createChild2(next) { + evalAndDump('createChild(\'host1\', \'child2\', \'div\', \'\')', 'host1', next); + }, + + function createChild3(next) { + evalAndDump('createChild(\'host1\', \'child3\', \'h1\', \'slot2\')', 'host1', next); + }, + + function createChild4(next) { + evalAndDump('createChild(\'host1\', \'child4\', \'h2\', \'slot1\')', 'host1', next); + }, + + function createChild5(next) { + evalAndDump('createChild(\'host1\', \'child5\', \'h3\', \'slot3\')', 'host1', next); + }, + + function modifyChild1(next) { + evalAndDump('changeAttribute(\'child1\', \'slot\', \'slot1\')', 'host1', next); + }, + + function modifyChild4(next) { + evalAndDump('changeAttribute(\'child4\', \'slot\', \'\')', 'host1', next); + }, + + function modifySlot1(next) { + evalAndDump('changeAttribute(\'host1.slot1\', \'name\', \'slot3\')', 'host1', next); + }, + + function modifySlot2(next) { + evalAndDump('changeAttribute(\'host1.slot2\', \'name\', \'slot1\')', 'host1', next); + }, + + function removeChild3(next) { + evalAndDump('removeElement(\'child3\')', 'host1', next); + }, + + function removeChild1(next) { + evalAndDump('removeElement(\'child1\')', 'host1', next); + }, + + function removeSlot1(next) { + evalAndDump('removeElement(\'host1.slot1\')', 'host1', next); + }, + + function createHost2(next) { + evalAndDump('createShadowRoot(\'host2\', [\'slot3\'])', 'host2', next); + }, + + function moveChild5FromHost1ToHost2(next) { + evalAndDump('reparentElement(\'child5\', \'host2\')', 'host2', next); + }, + + function modifyChild4(next) { + evalAndDump('changeAttribute(\'child4\', \'slot\', \'slot1\')', 'host1', next); + }, + ]); + + function evalAndDump(code, nodeId, next) { + TestRunner.evaluateInPage(code, ElementsTestRunner.expandElementsTree.bind(InspectorTest, dump)); + + function dump() { + ElementsTestRunner.dumpElementsTree(ElementsTestRunner.expandedNodeWithId(nodeId)); + next(); + } + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that elements panel updates dom tree structure upon distribution in shadow dom. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/shadow/shadow-host-display-modes-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/shadow-host-display-modes-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/shadow/shadow-host-display-modes-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/shadow-host-display-modes-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/shadow-host-display-modes.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/shadow-host-display-modes.html new file mode 100644 index 0000000..d19b4848 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/shadow-host-display-modes.html
@@ -0,0 +1,154 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> +function createShadowRootFromTemplate(root, selector, templateId) +{ + var shadowHost = root.querySelector(selector); + var shadowRoot = shadowHost.createShadowRoot(); + var template = document.querySelector(templateId); + var clone = document.importNode(template.content, true); + shadowRoot.appendChild(clone); + return shadowHost; +} + +function initOldestShadowRoot() +{ + createShadowRootFromTemplate(document, "#shadowHost", "#oldestShadowRootTemplate"); +} + +function initYoungestShadowRoot() +{ + createShadowRootFromTemplate(document, "#shadowHost", "#youngestShadowRootTemplate"); +} + +function initInnerShadowRoot() +{ + var shadowHost = document.querySelector("#shadowHost"); + var innerShadowHost = createShadowRootFromTemplate(shadowHost.shadowRoot, ".innerShadowHost", "#innerShadowRootTemplate"); + innerShadowHost.id = "innerShadowHost"; +} + +var lastDistributedNodeId = 0; + +function addDistributedNode(oldest) +{ + var node = document.createElement("div"); + node.classList.add(oldest ? "distributeMeToOldest" : "distributeMeToYoungest"); + node.classList.add("distributeMeAsWell_" + (++lastDistributedNodeId)); + var shadowHost = document.querySelector("#shadowHost"); + shadowHost.appendChild(node); +} + +function addDistributedNodeToOldest() +{ + addDistributedNode(true); +} + +function test() { + var shadowHostNode; + var treeOutline; + var shadowHostTreeElement; + var innerShadowHostNode; + var innerShadowHostTreeElement; + + ElementsTestRunner.expandElementsTree(elementsTreeExpanded); + + function elementsTreeExpanded(node) { + treeOutline = ElementsTestRunner.firstElementsTreeOutline(); + shadowHostNode = ElementsTestRunner.expandedNodeWithId('shadowHost'); + shadowHostTreeElement = treeOutline.findTreeElement(shadowHostNode); + expandAndDumpShadowHostNode('========= Original ========', originalElementsTreeDumped); + } + + function originalElementsTreeDumped(node) { + TestRunner.evaluateInPage('initOldestShadowRoot()', onOldestShadowRootInitialized); + } + + function onOldestShadowRootInitialized() { + expandAndDumpShadowHostNode('========= After shadow root created ========', onOldestShadowRootDumped); + } + + function onOldestShadowRootDumped() { + waitForModifiedNodesUpdate('After adding distributed node', distributedNodeChangedAfterFirstAdding); + TestRunner.evaluateInPage('addDistributedNodeToOldest()'); + } + + function distributedNodeChangedAfterFirstAdding() { + waitForModifiedNodesUpdate('After adding another distributed node', distributedNodeChangedAfterSecondAdding); + TestRunner.evaluateInPage('addDistributedNodeToOldest()'); + } + + function distributedNodeChangedAfterSecondAdding() { + waitForModifiedNodesUpdate( + 'After adding youngest shadow root', distributedNodeChangedAfterAddingYoungestShadowRoot); + TestRunner.evaluateInPage('initYoungestShadowRoot()'); + } + + function distributedNodeChangedAfterAddingYoungestShadowRoot() { + waitForModifiedNodesUpdate('After adding inner shadow root node', distributedNodeChangedAfterAddingInnerShadowRoot); + TestRunner.evaluateInPage('initInnerShadowRoot()'); + } + + function distributedNodeChangedAfterAddingInnerShadowRoot() { + TestRunner.completeTest(); + } + + function waitForModifiedNodesUpdate(title, next) { + TestRunner.addSniffer(Elements.ElementsTreeOutline.prototype, '_updateModifiedNodes', callback); + + function callback() { + expandAndDumpShadowHostNode('========= ' + title + ' ========', next); + } + } + + function expandAndDumpShadowHostNode(title, next) { + TestRunner.addResult(title); + ElementsTestRunner.expandElementsTree(callback); + + function callback() { + ElementsTestRunner.dumpElementsTree(shadowHostNode); + next(); + } + } +} +</script> +</head> +<body onload="runTest()"> +<p>Tests that distributed nodes and their updates are correctly shown in different shadow host display modes.</p> +<template id="youngestShadowRootTemplate"> + <div class="youngestShadowMain"> + <shadow></shadow> + <content select=".distributeMeToYoungest"><div id="fallbackYoungest"></div></content> + <div class="innerShadowHost"> + <content in-youngest-shadow-root select=".distributeMeToInner"></content> + </div> + </div> +</template> +<template id="oldestShadowRootTemplate"> + <div class="oldestShadowMain"> + <content select=".distributeMeToOldest"><div id="fallbackOldest"></div></content> + </div> +</template> +<template id="innerShadowRootTemplate"> + <div class="innerShadowMain"> + <content in-inner-shadow-root select=".distributeMeToInner"></content> + </div> +</template> +<div id="shadowHost"> + <div class="distributeMeToYoungest original"> + youngest distributed text + </div> + <div class="distributeMeToOldest original"> + oldest distributed text + </div> + <div class="distributeMeToInner original"> + oldest distributed text + </div> + <div class="distributeMeToInner original2"> + oldest distributed text + </div> +</div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/shadow/shadow-root-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/shadow-root-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/shadow/shadow-root-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/shadow-root-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/shadow-root.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/shadow-root.html new file mode 100644 index 0000000..0ccffb8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/shadow-root.html
@@ -0,0 +1,35 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.expandElementsTree(function() { + var container = ElementsTestRunner.expandedNodeWithId('container'); + ElementsTestRunner.dumpElementsTree(container); + TestRunner.completeTest(); + }); +} +</script> +</head> + +<body onload="runTest()"> + +<p id="description">This test verifies that author shadow root's #document-fragment is displayed and user-agent one is hidden by default.</p> + +<div id="container"> + <div id="test1"></div> + <div id="test2">only test</div> + <div id="test3">with <span>elements</span></div> + <input type="text" value="Test"> +</div> + +<script> +test1.createShadowRoot(); +test2.attachShadow({ mode: "open" }); +test3.attachShadow({ mode: "closed" }); +</script> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/shadow/update-shadowdom-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/update-shadowdom-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/shadow/update-shadowdom-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/update-shadowdom-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/update-shadowdom.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/update-shadowdom.html new file mode 100644 index 0000000..a7e26be --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/shadow/update-shadowdom.html
@@ -0,0 +1,39 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> +function updateShadowDOM() +{ + shadowRoot.removeChild(shadowRoot.firstChild); +} + +function test() { + ElementsTestRunner.expandElementsTree(function() { + TestRunner.evaluateInPage('updateShadowDOM()', function() { + ElementsTestRunner.expandElementsTree(function() { + var containerElem = ElementsTestRunner.expandedNodeWithId('container'); + ElementsTestRunner.dumpElementsTree(containerElem); + TestRunner.completeTest(); + }); + }); + }); +} +</script> +</head> + +<body onload="runTest()"> + +<p id="description">This test confirms that updating the shadow dom is reflected to the Inspector.</p> + +<div id="container"> + <div id="host"></div> +</div> + +<script> +var shadowRoot = host.createShadowRoot(); +shadowRoot.innerHTML = "<div></div>"; +</script> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/add-new-rule-inline-style-csp-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/add-new-rule-inline-style-csp-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-1/add-new-rule-inline-style-csp-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/add-new-rule-inline-style-csp-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/add-new-rule-inline-style-csp.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/add-new-rule-inline-style-csp.html new file mode 100644 index 0000000..2e9fe6f --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/add-new-rule-inline-style-csp.html
@@ -0,0 +1,121 @@ +<html> +<head> +<meta http-equiv="Content-Security-Policy" content="style-src https://*:443 'unsafe-eval'"> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + var nodeId; + var rule; + var matchedStyles; + + TestRunner.runTestSuite([ + function testSetUp(next) { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', next); + }, + + function testAddRule(next) { + ElementsTestRunner.nodeWithId('inspected', nodeCallback); + + function nodeCallback(node) { + nodeId = node.id; + ElementsTestRunner.addNewRule('#inspected', successCallback); + } + + function successCallback(section) { + rule = section.style().parentRule; + matchedStyles = section._matchedStyles; + TestRunner.addResult('=== Rule added ==='); + TestRunner.addResult(rule.selectorText() + ' {' + rule.style.cssText + '}'); + TestRunner.addResult( + 'Selectors matching the (#inspected) node: ' + ElementsTestRunner.matchingSelectors(matchedStyles, rule)); + next(); + } + }, + + function testAddProperty(next) { + rule.style.appendProperty('width', '100%', callback); + + function callback(success) { + TestRunner.addResult('=== Added rule modified ==='); + if (!success) { + TestRunner.addResult('[!] No valid rule style received'); + TestRunner.completeTest(); + } else { + dumpProperties(rule.style); + rule.setSelectorText('body').then(onSelectorUpdated).then(successCallback); + } + } + + function onSelectorUpdated(success) { + if (!success) { + TestRunner.addResult('[!] Failed to change selector'); + TestRunner.completeTest(); + return; + } + return matchedStyles.recomputeMatchingSelectors(rule); + } + + function successCallback() { + TestRunner.addResult('=== Selector changed ==='); + TestRunner.addResult(rule.selectorText() + ' {' + rule.style.cssText + '}'); + TestRunner.addResult( + 'Selectors matching the (#inspected) node: ' + ElementsTestRunner.matchingSelectors(matchedStyles, rule)); + + next(); + } + }, + + function testModifyInlineStyle(next) { + var inlineStyle; + TestRunner.cssModel.inlineStylesPromise(nodeId).then(stylesCallback); + TestRunner.cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetChanged, onStyleSheetChanged); + function onStyleSheetChanged(event) { + if (event.data && event.data.edit) + inlineStyle.rebase(event.data.edit); + } + + function stylesCallback(inlineStyleResult) { + if (!inlineStyleResult || !inlineStyleResult.inlineStyle) { + TestRunner.completeTest(); + return; + } + inlineStyle = inlineStyleResult.inlineStyle; + inlineStyle.appendProperty('font-size', '14px', appendCallback); + } + + function appendCallback(success) { + TestRunner.addResult('=== Inline style modified ==='); + if (!success) { + TestRunner.addResult('No valid inline style received'); + TestRunner.completeTest(); + return; + } + + dumpProperties(inlineStyle); + next(); + } + } + ]); + + function dumpProperties(style) { + if (!style) + return; + var allProperties = style.allProperties(); + for (var i = 0; i < allProperties.length; ++i) + TestRunner.addResult(allProperties[i].text); + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that adding a new rule does not crash the renderer and modifying an inline style does not report errors when forbidden by Content-Security-Policy. +</p> + +<div id="inspected">Text</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/add-new-rule-invalid-selector-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/add-new-rule-invalid-selector-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-1/add-new-rule-invalid-selector-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/add-new-rule-invalid-selector-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/add-new-rule-invalid-selector.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/add-new-rule-invalid-selector.html new file mode 100644 index 0000000..66dbc11 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/add-new-rule-invalid-selector.html
@@ -0,0 +1,35 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + TestRunner.runTestSuite([ + function init(next) { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', next); + }, + + function keyframesRuleSelector(next) { + ElementsTestRunner.addNewRule('@-webkit-keyframes shake', callback); + + function callback() { + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + next(); + } + } + ]); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that adding a new rule with invalid selector works as expected. +</p> + +<div id="inspected">Text</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/add-new-rule-with-style-after-body-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/add-new-rule-with-style-after-body-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-1/add-new-rule-with-style-after-body-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/add-new-rule-with-style-after-body-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/add-new-rule-with-style-after-body.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/add-new-rule-with-style-after-body.html new file mode 100644 index 0000000..1f73899 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/add-new-rule-with-style-after-body.html
@@ -0,0 +1,58 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> +function addStyle() +{ + var style = document.createElement("style"); + document.documentElement.appendChild(style); + style.sheet.insertRule("foo {display: none;}", 0); +} + +function test() { + TestRunner.cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetAdded, stylesheetAdded); + TestRunner.evaluateInPage('addStyle()'); + + function stylesheetAdded() { + TestRunner.cssModel.removeEventListener(SDK.CSSModel.Events.StyleSheetAdded, stylesheetAdded); + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); + } + + var treeElement; + var hasResourceChanged; + + function step1() { + ElementsTestRunner.addNewRule('inspected', step2); + } + + function step2() { + var section = ElementsTestRunner.firstMatchedStyleSection(); + var newProperty = section.addNewBlankProperty(); + newProperty.startEditing(); + newProperty.nameElement.textContent = 'color'; + newProperty.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + newProperty.valueElement.textContent = 'maroon'; + newProperty.valueElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + ElementsTestRunner.waitForStyles('inspected', step3); + } + + function step3() { + TestRunner.addResult('After adding new rule:'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that adding a new rule works when there is a STYLE element after BODY. TIMEOUT SHOULD NOT OCCUR! <a href="https://bugs.webkit.org/show_bug.cgi?id=111299">Bug 111299</a> +</p> + +<div id="inspected" style="font-size: 12px">Text</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/background-parsing-crash-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/background-parsing-crash-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-1/background-parsing-crash-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/background-parsing-crash-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/background-parsing-crash.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/background-parsing-crash.html new file mode 100644 index 0000000..53bbb463 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/background-parsing-crash.html
@@ -0,0 +1,22 @@ +<html> +<head> +<style> +.absent { + background: #fff url(foo.png) no-repeat left 4px; +} + +body { + background: #fff; +} +</style> +<script src="../../../inspector/inspector-test.js"></script> +<script> +function test() { + TestRunner.completeTest(); +} +</script> +</head> +<body onload="runTest()"> +This test passes if it doesn't ASSERT. +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/cached-sync-computed-styles-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/cached-sync-computed-styles-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-1/cached-sync-computed-styles-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/cached-sync-computed-styles-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/cached-sync-computed-styles.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/cached-sync-computed-styles.html new file mode 100644 index 0000000..506d2c808 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/cached-sync-computed-styles.html
@@ -0,0 +1,62 @@ +<html> +<head> +<style id="style"> +#inspected { + background-color: green; +} +</style> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function updateStyle() +{ + document.getElementById("style").textContent = "#inspected { color: red }"; +} + +function test() { + ElementsTestRunner.nodeWithId('inspected', step1); + var backendCallCount = 0; + var nodeId; + + function onBackendCall(domain, method, params) { + if (method === 'CSS.getComputedStyleForNode' && params.nodeId === nodeId) + ++backendCallCount; + } + + function step1(node) { + var callsLeft = 2; + nodeId = node.id; + TestRunner.addSniffer(Protocol.TargetBase.prototype, '_wrapCallbackAndSendMessageObject', onBackendCall, true); + TestRunner.cssModel.computedStylePromise(nodeId).then(styleCallback); + TestRunner.cssModel.computedStylePromise(nodeId).then(styleCallback); + function styleCallback() { + if (--callsLeft) + return; + TestRunner.addResult('# of backend calls sent [2 requests]: ' + backendCallCount); + TestRunner.evaluateInPage('updateStyle()', step2); + } + } + + function step2() { + TestRunner.cssModel.computedStylePromise(nodeId).then(callback); + function callback() { + TestRunner.addResult('# of backend calls sent [style update + another request]: ' + backendCallCount); + TestRunner.completeTest(); + } + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that computed styles are cached across synchronous requests. +</p> + +<div> + <div id="inspected">Test</div> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/case-sensitive-suggestions-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/case-sensitive-suggestions-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-1/case-sensitive-suggestions-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/case-sensitive-suggestions-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/case-sensitive-suggestions.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/case-sensitive-suggestions.html new file mode 100644 index 0000000..804c2a8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/case-sensitive-suggestions.html
@@ -0,0 +1,71 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + var prompt = new Elements.StylesSidebarPane.CSSPropertyPrompt(SDK.cssMetadata().allProperties(), [], null, true); + + TestRunner.runTestSuite([ + function testForUpperCase(next) { + testAutoCompletionsAgainstCase(prompt, 'C', next); + }, + + function testForLowerCase(next) { + testAutoCompletionsAgainstCase(prompt, 'b', next); + }, + + function testForMixedCase(next) { + testAutoCompletionsAgainstCase(prompt, 'bAcK', next); + } + ]); + + function testAutoCompletionsAgainstCase(prompt, inputText, callback) { + var proxyElement = document.body.createChild('span'); + proxyElement.textContent = inputText; + var selectionRange = document.createRange(); + selectionRange.selectNodeContents(proxyElement); + var prefix = selectionRange.toString(); + prompt._buildPropertyCompletions(inputText.substring(0, inputText.length - prefix.length), prefix, true) + .then(completions); + + function completions(result) { + function isUpperCase(str) { + return str === str.toUpperCase(); + } + + function isLowerCase(str) { + return str === str.toLowerCase(); + } + + var Case = {Upper: 0, Lower: 1, Mixed: 2}; + + var inputCase = isUpperCase(inputText) ? Case.Upper : isLowerCase(inputText) ? Case.Lower : Case.Mixed; + + for (var i = 0; i < result.length; ++i) { + switch (inputCase) { + case Case.Upper: + if (!isUpperCase(result[i].text)) + TestRunner.addResult('Error: Suggestion ' + result[i].text + ' must be in UPPERCASE.'); + break; + case Case.Lower: + if (!isLowerCase(result[i].text)) + TestRunner.addResult('Error: Suggestion ' + result[i].text + ' must be in lowercase.'); + break; + } + } + proxyElement.remove(); + callback(); + } + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that text prompt suggestions' casing follows that of the user input. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/color-aware-property-value-edit-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/color-aware-property-value-edit-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-1/color-aware-property-value-edit-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/color-aware-property-value-edit-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/color-aware-property-value-edit.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/color-aware-property-value-edit.html new file mode 100644 index 0000000..351a90e --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/color-aware-property-value-edit.html
@@ -0,0 +1,98 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + TestRunner.runTestSuite([ + function init(next) { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected1', next); + }, + + function editKeywordAsOriginal(next) { + startEditingAndDumpValue(Common.Color.Format.Original, 'border', next); + }, + + function editKeywordAsHex(next) { + startEditingAndDumpValue(Common.Color.Format.HEX, 'border', next); + }, + + function editKeywordAsHSL(next) { + startEditingAndDumpValue(Common.Color.Format.HSL, 'border', next); + }, + + function editKeywordAsRGB(next) { + startEditingAndDumpValue(Common.Color.Format.RGB, 'border', onValueDumped); + function onValueDumped() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected2', next); + } + }, + + function editHexAsOriginal(next) { + startEditingAndDumpValue(Common.Color.Format.Original, 'color', next); + }, + + function editHexAsHex(next) { + startEditingAndDumpValue(Common.Color.Format.HEX, 'color', next); + }, + + function editHexAsHSL(next) { + startEditingAndDumpValue(Common.Color.Format.HSL, 'color', next); + }, + + function editHexAsRGB(next) { + startEditingAndDumpValue(Common.Color.Format.RGB, 'color', next); + }, + + function editNewProperty(next) { + var section = ElementsTestRunner.inlineStyleSection(); + + treeElement = section.addNewBlankProperty(0); + treeElement.startEditing(); + treeElement.nameElement.textContent = 'border-color'; + treeElement.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + treeElement.valueElement.textContent = 'hsl(120, 100%, 25%)'; + treeElement.kickFreeFlowStyleEditForTest(); + ElementsTestRunner.waitForStyleApplied(kicked); + + function kicked() { + treeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('Tab', false, false, true)); + treeElement.nameElement.dispatchEvent(TestRunner.createKeyEvent('Tab')); + TestRunner.addResult(treeElement.valueElement.textContent); + next(); + } + } + ]); + + function setFormat(newFormat, callback) { + Common.settingForTest('colorFormat').set(newFormat); + UI.panels.elements._stylesWidget.doUpdate().then(callback); + } + + function startEditingAndDumpValue(format, propertyName, next) { + setFormat(format, onFormatSet); + + function onFormatSet() { + var treeElement = ElementsTestRunner.getElementStylePropertyTreeItem(propertyName); + treeElement.startEditing(treeElement.valueElement); + TestRunner.addResult(treeElement.valueElement.textContent); + treeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('Escape')); + next(); + } + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that property value being edited uses the user-specified color format. +</p> + +<div id="inspected1" style="border: 1px solid red">inspected1</div> +<div id="inspected2" style="color: #ffffee">inspected2</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/color-nicknames-lowercase-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/color-nicknames-lowercase-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-1/color-nicknames-lowercase-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/color-nicknames-lowercase-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/color-nicknames-lowercase.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/color-nicknames-lowercase.html new file mode 100644 index 0000000..ff48435 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/color-nicknames-lowercase.html
@@ -0,0 +1,26 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script> + +function test() { + var badNames = []; + for (var nickname in Common.Color.Nicknames) { + if (nickname.toLowerCase() !== nickname) + badNames.push(nickname); + } + + if (badNames.length === 0) + TestRunner.addResult('PASSED'); + else + TestRunner.addResult('Non-lowercase color nicknames: ' + badNames.join(', ')); + + TestRunner.completeTest(); +} + +</script> +</head> +<body onload="runTest()"> +<p>Tests that all color nicknames are lowercase to facilitate lookup</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/color-swatch-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/color-swatch-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-1/color-swatch-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/color-swatch-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/color-swatch.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/color-swatch.html new file mode 100644 index 0000000..415934b --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/color-swatch.html
@@ -0,0 +1,70 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<style> +#inspected { + color: red; + --variable: red; +} +</style> +<script> +function test() { + TestRunner.runTestSuite([ + function selectNode(next) { + ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('inspected', next); + }, + + function testColorSwatchInMatchRules(next) { + var treeItem = ElementsTestRunner.getMatchedStylePropertyTreeItem('color'); + TestRunner.addResult('Initial color value: ' + treeItem.valueElement.textContent); + var swatch = + treeItem.valueElement.querySelector('span[is=color-swatch]').shadowRoot.querySelector('.color-swatch-inner'); + swatch.dispatchEvent(createShiftClick()); + TestRunner.addResult('After shift-click: ' + treeItem.valueElement.textContent); + TestRunner.addResult('Has popover before click: ' + popoverVisible()); + + swatch.click(); + TestRunner.addResult('Has popover after click: ' + popoverVisible()); + next(); + }, + + function testColorSwatchInCustomProperty(next) { + var treeItem = ElementsTestRunner.getMatchedStylePropertyTreeItem('--variable'); + var swatch = treeItem.valueElement.querySelector('span[is=color-swatch]'); + TestRunner.addResult('Custom property has a color swatch: ' + !!swatch); + next(); + }, + + function testColorSwatchInComputedRules(next) { + var computedProperty = ElementsTestRunner.findComputedPropertyWithName('color').title; + var computedPropertyValue = computedProperty.querySelector('.value'); + TestRunner.addResult('Initial color value: ' + computedPropertyValue.textContent); + var swatch = + computedPropertyValue.querySelector('span[is=color-swatch]').shadowRoot.querySelector('.color-swatch-inner'); + swatch.dispatchEvent(createShiftClick()); + TestRunner.addResult('After shift-click color value: ' + computedPropertyValue.textContent); + next(); + } + ]); + + function createShiftClick() { + var event = document.createEvent('MouseEvent'); + event.initMouseEvent('click', true, true, null, 1, 0, 0, 0, 0, false, false, true, false, 0, null); + return event; + } + + function popoverVisible() { + return !!document.body.querySelector('* /deep/ .spectrum-color'); + } +} +</script> +</head> + +<body onload="runTest()"> +<p>The patch verifies that color swatch functions properly in matched and computed styles. crbug.com/461363</p> + +<div id="inspected">Inspected div</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/commit-selector-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/commit-selector-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-1/commit-selector-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/commit-selector-expected.txt
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/commit-selector-mark-matching-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/commit-selector-mark-matching-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-1/commit-selector-mark-matching-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/commit-selector-mark-matching-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/commit-selector-mark-matching.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/commit-selector-mark-matching.html new file mode 100644 index 0000000..2f1b431 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/commit-selector-mark-matching.html
@@ -0,0 +1,58 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + var nodeId; + var stylesPane; + + TestRunner.runTestSuite([ + function setUp(next) { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', next); + }, + + function addRule(next) { + ElementsTestRunner.nodeWithId('inspected', nodeCallback); + + function nodeCallback(node) { + nodeId = node.id; + stylesPane = UI.panels.elements._stylesWidget; + ElementsTestRunner.addNewRule('foo, #inspected, .bar, #inspected', callback); + } + + function callback() { + ElementsTestRunner.dumpSelectedElementStyles(true, false, false, true); + next(); + } + }, + + function changeSelector(next) { + var section = ElementsTestRunner.firstMatchedStyleSection(); + section.startEditingSelector(); + var selectorElement = section._selectorElement; + selectorElement.textContent = '#inspected, a, hr'; + ElementsTestRunner.waitForSelectorCommitted(callback); + selectorElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + + function callback() { + ElementsTestRunner.dumpSelectedElementStyles(true, false, false, true); + next(); + } + } + ]); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that matching selectors are marked properly after new rule creation and selector change. +</p> + +<div id="inspected"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/commit-selector.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/commit-selector.html new file mode 100644 index 0000000..563acaa9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/commit-selector.html
@@ -0,0 +1,54 @@ +<html> +<head> +<style> +#inspected { + color: green; +} +</style> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); + + function step1() { + TestRunner.addResult('=== Before selector modification ==='); + ElementsTestRunner.dumpSelectedElementStyles(true); + var section = ElementsTestRunner.firstMatchedStyleSection(); + section.startEditingSelector(); + section._selectorElement.textContent = 'hr, #inspected '; + ElementsTestRunner.waitForSelectorCommitted(step2); + section._selectorElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + } + + function step2() { + TestRunner.addResult('=== After non-affecting selector modification ==='); + ElementsTestRunner.dumpSelectedElementStyles(true); + var section = ElementsTestRunner.firstMatchedStyleSection(); + section.startEditingSelector(); + section._selectorElement.textContent = '#inspectedChanged'; + ElementsTestRunner.waitForSelectorCommitted(step3); + section._selectorElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + } + + function step3() { + TestRunner.addResult('=== After affecting selector modification ==='); + ElementsTestRunner.dumpSelectedElementStyles(true); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that renaming a selector updates element styles. <a href="https://bugs.webkit.org/show_bug.cgi?id=70018">Bug 70018</a>. +</p> + +<div id="inspected" style="color: red">Text</div> +<div id="other"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/css-live-edit-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/css-live-edit-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-1/css-live-edit-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/css-live-edit-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/css-live-edit.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/css-live-edit.html new file mode 100644 index 0000000..197aa6d --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/css-live-edit.html
@@ -0,0 +1,39 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../../inspector/live-edit-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<link rel="stylesheet" href="../styles/resources/css-live-edit.css"> +<div id=foo></div> +<script> + +function test() { + TestRunner.runTestSuite([function testLiveEdit(next) { + SourcesTestRunner.showScriptSource('css-live-edit.css', didShowResource); + + function didShowResource(sourceFrame) { + TestRunner.addSniffer(SDK.CSSModel.prototype, '_fireStyleSheetChanged', didEditResource); + SourcesTestRunner.replaceInSource(sourceFrame, 'font-size: 12px;', 'font-size: 20px;'); + } + + function didEditResource() { + ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('foo', didSelectElement); + } + + function didSelectElement() { + ElementsTestRunner.dumpSelectedElementStyles(false, true); + next(); + } + }]); +}; + +</script> + +</head> + +<body onload="runTest()"> +<p>Tests that styles are updated when live-editing css resource.</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/css-outline-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/css-outline-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-1/css-outline-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/css-outline-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/css-outline.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/css-outline.html new file mode 100644 index 0000000..7b316b2c --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/css-outline.html
@@ -0,0 +1,87 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<style id="styler"> +@import url("some-url-to-load-css.css") print; +@charset "ISO-8859-15"; +@namespace svg url(http://www.w3.org/2000/svg); +@font-face { + font-family: "Example Font"; + src: url("/fonts/example"); +} + +@page { + margin: 1in 1.5in; +} +@page :right { + margin-right: 5cm; /* right pages only */ +} +@page :first { + margin-top: 8cm; /* extra top margin on the first page */ +} + +div { color: red } +#fluffy { + border: 1px solid black; + z-index: 1; + /* -webkit-disabled-property: rgb(1, 2, 3) */ +} +input:-moz-placeholder { text-overflow: ellipsis; } +.class-name, p /* style all paragraphs as well */ { + border-color: blue; + -lol-cats: "dogs" /* unexisting property */ +} + +@keyframes identifier { + 0% { top: 0; left: 0; } + 30% { top: 50px; } + 68%, 72% { left: 50px; } + 100% { top: 100px; left: 100%; } +} + +svg|a { + text-decoration: underline; +} + +@media (max-width:500px) { + span { +/* font-family: Times New Roman; */ + -webkit-border-radius: 10px; + font-family: "Example Font" + } +} +</style> +<script> + +function initialize_Formatter() { + InspectorTest.preloadModule('formatter'); +} + +function getCSS() +{ + return document.querySelector("#styler").textContent; +} + +function test() { + function onRulesParsed(isLastChunk, rules) { + for (var i = 0; i < rules.length; ++i) + TestRunner.addObject(rules[i]); + if (isLastChunk) + TestRunner.completeTest(); + } + + function onStyleFetched(result) { + Formatter.formatterWorkerPool().parseCSS(result.value, onRulesParsed); + } + + TestRunner.evaluateInPage('getCSS()', onStyleFetched); +} + +</script> + +</head> + +<body onload="runTest()"> +<p>The test verifies the CSS outline functionality.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/cssom-media-insert-crash-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/cssom-media-insert-crash-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-1/cssom-media-insert-crash-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/cssom-media-insert-crash-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/cssom-media-insert-crash.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/cssom-media-insert-crash.html new file mode 100644 index 0000000..e066e85 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/cssom-media-insert-crash.html
@@ -0,0 +1,36 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('box', step1); + + function step1() { + ElementsTestRunner.dumpSelectedElementStyles(true, false, true, false); + TestRunner.completeTest(); + } +} + +</script> +<style> +div { + border: 1px solid black; + background-color: white; + padding: 20px; +} +</style> +</head> + +<body onload="runTest()"> +Tests that the inspected page does not crash after inspecting element with CSSOM added rules. <a href="http://crbug.com/373508">Bug 373508</a> +<div id="box">Inspecting this element crashes DevTools</div> +<script> +var lastSheet = document.styleSheets[document.styleSheets.length - 1]; +var mediaIndex = lastSheet.insertRule('@media all { }', lastSheet.cssRules.length); +var mediaRule = lastSheet.cssRules[mediaIndex]; +mediaRule.insertRule('#box { background: red; color: white; }', mediaRule.cssRules.length); +</script> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/disable-property-workingcopy-update-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/disable-property-workingcopy-update-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-1/disable-property-workingcopy-update-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/disable-property-workingcopy-update-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/disable-property-workingcopy-update.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/disable-property-workingcopy-update.html new file mode 100644 index 0000000..24c14a1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/disable-property-workingcopy-update.html
@@ -0,0 +1,81 @@ +<html> +<head> +<link rel="stylesheet" href="../styles/resources/disable-property-workingcopy-update.css"> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + var cssSourceFrame; + Bindings.StylesSourceMapping.MinorChangeUpdateTimeoutMs = 10; + + TestRunner.runTestSuite([ + function selectContainer(next) { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', next); + }, + + function showEditor(next) { + var headers = TestRunner.cssModel.styleSheetHeaders(); + for (var i = 0; i < headers.length; ++i) { + if (headers[i].sourceURL.endsWith('.css')) { + var cssLocation = new SDK.CSSLocation(headers[i], 0); + SourcesTestRunner.showUISourceCode( + Bindings.cssWorkspaceBinding.rawLocationToUILocation(cssLocation).uiSourceCode, callback); + break; + } + } + + function callback(sourceFrame) { + cssSourceFrame = sourceFrame; + SourcesTestRunner.dumpSourceFrameContents(cssSourceFrame); + next(); + } + }, + + function togglePropertyOff(next) { + toggleProperty(false, next); + }, + + function dumpDisabledText(next) { + SourcesTestRunner.dumpSourceFrameContents(cssSourceFrame); + ElementsTestRunner.dumpSelectedElementStyles(true); + next(); + }, + + function togglePropertyOn(next) { + toggleProperty(true, next); + }, + + function dumpEnabledText(next) { + SourcesTestRunner.dumpSourceFrameContents(cssSourceFrame); + ElementsTestRunner.dumpSelectedElementStyles(true); + next(); + } + ]); + + function toggleProperty(value, next) { + TestRunner.addSniffer(Workspace.UISourceCode.prototype, 'addRevision', callback); + ElementsTestRunner.waitForStyles('inspected', callback); + ElementsTestRunner.toggleMatchedStyleProperty('font-weight', value); + + var barrierCounter = 2; + function callback() { + if (!--barrierCounter) + next(); + } + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that style property disablement is propagated into the stylesheet UISourceCode working copy. +</p> + +<div id="inspected"> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/dynamic-style-tag-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/dynamic-style-tag-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-1/dynamic-style-tag-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/dynamic-style-tag-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/dynamic-style-tag.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/dynamic-style-tag.html new file mode 100644 index 0000000..a578d7524 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/dynamic-style-tag.html
@@ -0,0 +1,55 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<style> +/* comment */.inline-style-added-by-parser { + color: red; +} +</style> +<style> +.inline-style-added-by-parser-with-source-url { + color: green; +} +/*# sourceURL=inlineStyleAddedByParser.css*/ +</style> +<script> +document.write("<style>\n.inline-style-added-by-parser-in-document-write {\n color: blue;\n}\n</style>"); +document.write("<style>\n.inline-style-added-by-document-write-with-source-url {\n color: yellow;\n}\n/*# sourceURL=inlineStyleAddedByDocumentWrite.css*/\n</style>"); +addStyleElement(".inline-style-created-by-script {\n color: orange;\n}"); +addStyleElement(".inline-style-created-by-script-with-source-url {\n color: grey;\n}\n/*# sourceURL=inlineStyleCreatedByScript.css*/"); + +function addStyleElement(styleContent) +{ + var styleElement = document.createElement("style"); + styleElement.textContent = styleContent; + document.head.appendChild(styleElement); +} + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); + + async function step1() { + var styleSheets = TestRunner.cssModel.allStyleSheets(); + styleSheets.sort(); + for (var header of styleSheets) { + var content = await TestRunner.CSSAgent.getStyleSheetText(header.id); + + TestRunner.addResult('Stylesheet added:'); + TestRunner.addResult(' - isInline: ' + header.isInline); + TestRunner.addResult(' - sourceURL: ' + header.sourceURL.substring(header.sourceURL.lastIndexOf('/') + 1)); + TestRunner.addResult(' - hasSourceURL: ' + header.hasSourceURL); + TestRunner.addResult(' - contents: ' + content); + } + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + TestRunner.completeTest(); + } +} +</script> +</head> +<body onload="runTest()"> +<p>Tests that different types of inline styles are correctly disambiguated and their sourceURL is correct. +<div id="inspected" style="color:red" class="inline-style-added-by-parser inline-style-added-by-parser-with-source-url inline-style-added-by-parser-in-document-write inline-style-added-by-document-write-with-source-url inline-style-created-by-script inline-style-created-by-script-with-source-url"></div> +</body> +</html> +
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-inspector-stylesheet-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-inspector-stylesheet-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-inspector-stylesheet-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-inspector-stylesheet-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-inspector-stylesheet.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-inspector-stylesheet.html new file mode 100644 index 0000000..02f03e8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-inspector-stylesheet.html
@@ -0,0 +1,63 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', onStylesSelected); + + function onStylesSelected(node) { + Workspace.workspace.addEventListener(Workspace.Workspace.Events.WorkingCopyCommitted, onWorkingCopyCommitted); + ElementsTestRunner.addNewRule('#inspected', new Function()); + } + + function onWorkingCopyCommitted(event) { + Workspace.workspace.removeEventListener(Workspace.Workspace.Events.WorkingCopyCommitted, onWorkingCopyCommitted); + var uiSourceCode = event.data.uiSourceCode; + TestRunner.addResult('Inspector stylesheet URL: ' + uiSourceCode.displayName()); + uiSourceCode.requestContent().then(printContent(onContent)); + + function onContent() { + TestRunner.addResult('\nSetting new content'); + uiSourceCode.setWorkingCopy('#inspected { background-color: green; }'); + uiSourceCode.commitWorkingCopy(); + onUpdatedWorkingCopy(uiSourceCode); + } + } + + function onUpdatedWorkingCopy(uiSourceCode) { + uiSourceCode.requestContent().then(printContent(selectNode)); + function selectNode() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', dumpStyles); + } + + function dumpStyles() { + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + TestRunner.completeTest(); + } + } + + function printContent(next) { + function result(content) { + TestRunner.addResult('Inspector stylesheet content:'); + TestRunner.addResult(content); + if (next) + next(); + } + return result; + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that adding a new rule creates inspector stylesheet resource and allows its live editing. +</p> + +<div id="inspected">Text</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-media-text-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-media-text-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-media-text-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-media-text-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-media-text.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-media-text.html new file mode 100644 index 0000000..02a80f3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-media-text.html
@@ -0,0 +1,66 @@ +<html> +<head> +<style> +@media screen and (max-device-width: 100000px) { + #inspected { + color: green; + } + #inspected { + color: blue; + } +} +@media screen and (max-device-width: 200000px) { + #other { + color: green; + } +} +</style> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); + + function step1() { + TestRunner.addResult('=== Before media text modification ==='); + ElementsTestRunner.dumpSelectedElementStyles(true); + var section = ElementsTestRunner.firstMatchedStyleSection(); + var mediaTextElement = ElementsTestRunner.firstMediaTextElementInSection(section); + mediaTextElement.click(); + mediaTextElement.textContent = 'screen and (max-device-width: 99999px)'; + ElementsTestRunner.waitForMediaTextCommitted(step2); + mediaTextElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + } + + function step2() { + TestRunner.addResult('=== After valid media text modification ==='); + ElementsTestRunner.dumpSelectedElementStyles(true); + var section = ElementsTestRunner.firstMatchedStyleSection(); + var mediaTextElement = ElementsTestRunner.firstMediaTextElementInSection(section); + mediaTextElement.click(); + mediaTextElement.textContent = 'something is wrong here'; + ElementsTestRunner.waitForMediaTextCommitted(step3); + mediaTextElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + } + + function step3() { + TestRunner.addResult('=== After invalid media text modification ==='); + ElementsTestRunner.dumpSelectedElementStyles(true); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that editing media text updates element styles. +</p> + +<div id="inspected" style="color: red">Text</div> +<div id="other"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-name-with-trimmed-value-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-name-with-trimmed-value-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-name-with-trimmed-value-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-name-with-trimmed-value-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-name-with-trimmed-value.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-name-with-trimmed-value.html new file mode 100644 index 0000000..5ad7762e --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-name-with-trimmed-value.html
@@ -0,0 +1,40 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); + + function step1() { + var treeElement = ElementsTestRunner.getElementStylePropertyTreeItem('background'); + TestRunner.addResult('Viewing \'background\' value in Styles:'); + TestRunner.addResult(treeElement.valueElement.textContent); + + treeElement.startEditing(treeElement.nameElement); + treeElement.nameElement.textContent = 'background-image'; + treeElement.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + ElementsTestRunner.waitForStyleApplied(step2); + } + + function step2() { + var treeElement = ElementsTestRunner.getElementStylePropertyTreeItem('background-image'); + TestRunner.addResult('Renamed \'background\' to \'background-image\' (edited value):'); + TestRunner.addResult(treeElement.valueElement.textContent); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that editing a CSS property name in the Styles pane retains its original, non-trimmed value text. +</p> + +<div id="inspected" style="background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC)" /> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-resource-referred-by-multiple-styletags-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-resource-referred-by-multiple-styletags-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-resource-referred-by-multiple-styletags-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-resource-referred-by-multiple-styletags-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-resource-referred-by-multiple-styletags.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-resource-referred-by-multiple-styletags.html new file mode 100644 index 0000000..eda1c30 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-resource-referred-by-multiple-styletags.html
@@ -0,0 +1,71 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script src="../../../inspector/live-edit-test.js"></script> +<script src="../../../inspector/bindings/bindings-test.js"></script> +<script> + +function prepareTest() +{ + runTest(); +} + +async function test() { + await BindingsTestRunner.attachShadowDOM('shadow1', '#template'), + await BindingsTestRunner.attachFrame('frame', './resources/frame.html'); + var uiSourceCode = await TestRunner.waitForUISourceCode('stylesheet.css'); + var headers = + TestRunner.cssModel.styleSheetHeaders().filter(header => header.resourceURL().endsWith('stylesheet.css')); + TestRunner.addResult('Headers count: ' + headers.length); + + TestRunner.markStep('Make edits with Sources Panel'); + var sourceFrame = await new Promise(x => SourcesTestRunner.showScriptSource('stylesheet.css', x)); + SourcesTestRunner.replaceInSource(sourceFrame, 'red', 'EDITED'); + await TestRunner.addSnifferPromise(Bindings.StyleFile.prototype, '_styleFileSyncedForTest'); + await checkHeadersContent(); + + + TestRunner.markStep('Make edits via css model'); + TestRunner.cssModel.setStyleSheetText(headers[0].id, '* { --foo: "bar" }'); + await TestRunner.addSnifferPromise(Bindings.StyleFile.prototype, '_styleFileSyncedForTest'); + await checkHeadersContent(); + TestRunner.completeTest(); + + + async function checkHeadersContent(expected) { + var contents = await Promise.all(headers.map(header => header.requestContent())); + contents.push(uiSourceCode.workingCopy()); + var dedup = new Set(contents); + if (dedup.size !== 1) { + TestRunner.addResult('ERROR: contents are out of sync!'); + TestRunner.completeTest(); + return; + } + TestRunner.addResult('Both headers and uiSourceCode content:'); + TestRunner.addResult(dedup.firstValue()); + } +} +</script> +</head> +<body onload="prepareTest()"> +<p> +Tests that editing sourcecode which is referred by multiple stylesheets (via sourceURL comment) updates all stylesheets. +</p> + +<div id="inspected">Inspected node</div> + +<style>div{color:red;} +/*# sourceURL=stylesheet.css */ +</style> + +<template id='template'> +<style>div{color:red;} +/*# sourceURL=stylesheet.css */ +</style> +<p>Hi! I'm ShadowDOM v1!</p> +</template> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-value-inside-property-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-value-inside-property-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-value-inside-property-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-value-inside-property-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-value-inside-property.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-value-inside-property.html new file mode 100644 index 0000000..56b63902 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-value-inside-property.html
@@ -0,0 +1,54 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', testEmulateKeypress); + + function testEmulateKeypress() { + var treeElement = ElementsTestRunner.getMatchedStylePropertyTreeItem('font-size'); + treeElement.startEditing(treeElement.valueElement); + var selection = treeElement.valueElement.getComponentSelection(); + var range = selection.getRangeAt(0); + var newRange = document.createRange(); + newRange.setStart(range.startContainer, 1); + newRange.setEnd(range.startContainer, 1); + selection.removeAllRanges(); + selection.addRange(newRange); + // Use eventSender to emit "input" event. + eventSender.keyDown('1'); + ElementsTestRunner.waitForStyleApplied(onStyleApplied); + } + + function onStyleApplied() { + ElementsTestRunner.nodeWithId('inspected', onNodeFound); + } + + function onNodeFound(node) { + TestRunner.cssModel.inlineStylesPromise(node.id).then(onInlineStyle); + } + + function onInlineStyle(inlineStyleResult) { + if (!inlineStyleResult || !inlineStyleResult.inlineStyle) { + TestRunner.addResult('Failed to get inline styles.').TestRunner.completeTest(); + return; + } + TestRunner.addResult('font-size: ' + inlineStyleResult.inlineStyle.getPropertyValue('font-size')); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Verifies that property value editing triggers style update in rendering engine. +</p> + +<div id="inspected" style="font-size: 19px"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-value-url-with-color-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-value-url-with-color-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-value-url-with-color-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-value-url-with-color-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-value-url-with-color.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-value-url-with-color.html new file mode 100644 index 0000000..472b1de5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-value-url-with-color.html
@@ -0,0 +1,53 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + var maxIndex = 11; + var idIndex = 1; + + Common.Color.detectColorFormat = function() { + return Common.Color.Format.RGB; + }; + + selectDivAndEditValue(); + + function selectDivAndEditValue() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected' + idIndex++, editCallback); + } + + function editCallback() { + var treeElement = ElementsTestRunner.getMatchedStylePropertyTreeItem('background'); + treeElement.startEditing(treeElement.valueElement); + TestRunner.addResult(treeElement.valueElement.textContent); + if (idIndex <= maxIndex) + selectDivAndEditValue(); + else + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that colors are not re-formatted inside url(...) when editing property values. +</p> + +<div id="inspected1" style="background: white">"white" background</div> +<div id="inspected2" style="background: url( white )">"url( white )" background</div> +<div id="inspected3" style="background: url(white.png)">"url(white.png)" background</div> +<div id="inspected4" style="background: url(../foo/white.png)">"url(../foo/white.png)" background</div> +<div id="inspected5" style="background: green url(white)">"green url(white)" background</div> +<div id="inspected6" style="background: url(white) green">"url(white) green" background</div> +<div id="inspected7" style="background: url(white) green, url(green)">"url(white) green, url(green)" background</div> +<div id="inspected8" style="background: url(white), url(green)">"url(white), url(green)" background</div> +<div id="inspected9" style="background: hsl(0, 50%, 50%) url(white)">"hsl(0, 50%, 50%) url(white)" background</div> +<div id="inspected10" style="background: url(white) hsl(0, 50%, 50%)">"url(white) hsl(0, 50%, 50%)" background</div> +<div id="inspected11" style="background: url(../black/white.png)">"url(../black/white.png)" background</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-value-with-trimmed-url-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-value-with-trimmed-url-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-value-with-trimmed-url-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-value-with-trimmed-url-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-value-with-trimmed-url.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-value-with-trimmed-url.html new file mode 100644 index 0000000..d96806897 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/edit-value-with-trimmed-url.html
@@ -0,0 +1,33 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); + + function step1() { + var treeElement = ElementsTestRunner.getElementStylePropertyTreeItem('background'); + TestRunner.addResult('Viewing \'background\' value in Styles:'); + TestRunner.addResult(treeElement.valueElement.textContent); + + treeElement.startEditing(treeElement.valueElement); + TestRunner.addResult('Editing \'background\' value in Styles:'); + TestRunner.addResult(treeElement.valueElement.textContent); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that editing a CSS property value in the Styles pane restores the original, non-trimmed value text. <a href="https://bugs.webkit.org/show_bug.cgi?id=107936">Bug 107936</a>. +</p> + +<div id="inspected" style="background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC) repeat-y 50% top" /> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/empty-background-url-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/empty-background-url-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-1/empty-background-url-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/empty-background-url-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/empty-background-url.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/empty-background-url.html new file mode 100644 index 0000000..173bddc3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/empty-background-url.html
@@ -0,0 +1,21 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<link rel="stylesheet" href="../styles/resources/empty-background-url.css"> +<script> +function test() { + ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('inspected', step1); + + function step1() { + ElementsTestRunner.dumpSelectedElementStyles(true, false); + TestRunner.completeTest(); + } +} +</script> +</head> +<body onload="runTest()"> +<p>Tests that empty url in the property value does not break inspector.</p> +<div id="inspected"></div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/filter-matched-styles-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/filter-matched-styles-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-1/filter-matched-styles-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/filter-matched-styles-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/filter-matched-styles.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/filter-matched-styles.html new file mode 100644 index 0000000..2b78ae5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/filter-matched-styles.html
@@ -0,0 +1,48 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<style> +.mydiv { + border: 1px solid black; + padding: 10px 10px 10px 10px; +} + +#inspected { + border-size: 2px; +} + +</style> +<script> +function test() { + TestRunner.runTestSuite([ + function selectInitialNode(next) { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', next); + }, + + function testSimpleFiltering(next) { + ElementsTestRunner.filterMatchedStyles('padding'); + ElementsTestRunner.dumpRenderedMatchedStyles(); + next(); + }, + + function testLonghandsAreAutoExpanded(next) { + ElementsTestRunner.filterMatchedStyles('-top'); + ElementsTestRunner.dumpRenderedMatchedStyles(); + next(); + }, + + function testAutoExpandedLonghandsAreCollapsed(next) { + ElementsTestRunner.filterMatchedStyles(null); + ElementsTestRunner.dumpRenderedMatchedStyles(); + next(); + } + ]); +} +</script> +</head> +<body onload="runTest()"> +<p>Verifies that filtering in StylesSidebarPane works as expected.</p> +<div style="margin: 1px;" class="mydiv" id="inspected"></div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/resources/frame.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/resources/frame.html similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-1/resources/frame.html rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-1/resources/frame.html
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/add-import-rule-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/add-import-rule-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-2/add-import-rule-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/add-import-rule-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/add-import-rule.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/add-import-rule.html new file mode 100644 index 0000000..52ec8b5e --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/add-import-rule.html
@@ -0,0 +1,36 @@ +<!DOCTYPE html> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<style>span { color: red }</style> +<script> +function test() { + var nodeId; + var sheetId; + + ElementsTestRunner.selectNodeAndWaitForStyles('styled-span', nodeSelected); + + function nodeSelected(node) { + nodeId = node.id; + TestRunner.cssModel.matchedStylesPromise(nodeId).then(matchedStylesBefore); + } + + function matchedStylesBefore(matchedResult) { + sheetId = matchedResult.nodeStyles()[1].styleSheetId; + TestRunner.addResult('\n== Matched rules before @import added ==\n'); + ElementsTestRunner.dumpSelectedElementStyles(true); + TestRunner.CSSAgent.setStyleSheetText(sheetId, '@import \'data:text/css,span{color:green}\';').then(sheetTextSet); + } + + function sheetTextSet() { + ElementsTestRunner.selectNodeAndWaitForStyles('styled-span', matchedStylesAfter); + } + + function matchedStylesAfter() { + TestRunner.addResult('\n== Matched rules after @import added ==\n'); + ElementsTestRunner.dumpSelectedElementStyles(true); + TestRunner.completeTest(); + } +} +</script> +<body onload="runTest()"> +<span id="styled-span"></span>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/cssom-shorthand-important-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/cssom-shorthand-important-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-2/cssom-shorthand-important-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/cssom-shorthand-important-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/cssom-shorthand-important.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/cssom-shorthand-important.html new file mode 100644 index 0000000..f0f68b7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/cssom-shorthand-important.html
@@ -0,0 +1,30 @@ +<html> +<head> +<style> +#inspected { + padding: 10px 50px !important; +} +</style> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +document.styleSheets[0].cssRules[0].style.marginTop = "10px" + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', dump); + + function dump() { + ElementsTestRunner.dumpSelectedElementStyles(true); + TestRunner.completeTest(); + } +} +</script> +</head> + +<body onload="runTest()"> +<p>Tests that CSSOM-modified shorthands are reporting their "important" bits.</p> +<div id="inspected">Text</div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/filter-matched-styles-hides-separators-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/filter-matched-styles-hides-separators-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-2/filter-matched-styles-hides-separators-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/filter-matched-styles-hides-separators-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/filter-matched-styles-hides-separators.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/filter-matched-styles-hides-separators.html new file mode 100644 index 0000000..12a7d25 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/filter-matched-styles-hides-separators.html
@@ -0,0 +1,82 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<style> +#first { + font-family: arial; + display: block; +} + +#second { + font-family: helvetica; +} + +#third { + font-family: times; + display: block; +} + +#third::before { + content: "uno-1"; +} + +#third::after { + content: "dos-2"; + display: block; +} + +</style> +<script> +function test() { + TestRunner.runTestSuite([ + function selectInitialNode(next) { + ElementsTestRunner.selectNodeAndWaitForStyles('third', next); + }, + + function onNodeSelected(next) { + ElementsTestRunner.dumpRenderedMatchedStyles(); + next(); + }, + + function testFilterFontFamily(next) { + ElementsTestRunner.filterMatchedStyles('font-family'); + dumpSidebarSeparators(); + next(); + }, + + function testContentProperty(next) { + ElementsTestRunner.filterMatchedStyles('content'); + dumpSidebarSeparators(); + next(); + }, + + function testDisplayProperty(next) { + ElementsTestRunner.filterMatchedStyles('display'); + dumpSidebarSeparators(); + next(); + } + ]); + + function dumpSidebarSeparators() { + var separators = UI.panels.elements._stylesWidget.contentElement.querySelectorAll('.sidebar-separator'); + for (var i = 0; i < separators.length; ++i) { + var separator = separators[i]; + var hidden = separator.classList.contains('hidden'); + var text = String.sprintf('%s %s', hidden ? '[ HIDDEN ] ' : '[ VISIBLE ]', separator.deepTextContent()); + TestRunner.addResult(text); + } + } +} +</script> +</head> +<body onload="runTest()"> +<p>Verifies that filtering in StylesSidebarPane hides sidebar separators.</p> +<div id="first"> + <div id="second"> + <div id="third"> + </div> + </div> +</div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/force-pseudo-state-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/force-pseudo-state-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-2/force-pseudo-state-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/force-pseudo-state-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/force-pseudo-state.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/force-pseudo-state.html new file mode 100644 index 0000000..3b04365ae --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/force-pseudo-state.html
@@ -0,0 +1,79 @@ +<html> +<head> +<style> +div:hover, a:hover { + color: red; +} + +div:focus, a:focus { + border: 1px solid green; +} + +div:active, a:active { + font-weight: bold; +} + +</style> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.nodeWithId('div', foundDiv); + + var divNode; + + function dumpData() { + ElementsTestRunner.dumpSelectedElementStyles(true); + ElementsTestRunner.dumpElementsTree(); + } + + function foundDiv(node) { + divNode = node; + TestRunner.cssModel.forcePseudoState(divNode, 'hover', true); + TestRunner.cssModel.forcePseudoState(divNode, 'active', true); + ElementsTestRunner.selectNodeAndWaitForStyles('div', divSelected1); + } + + function divSelected1() { + TestRunner.addResult(''); + TestRunner.addResult('DIV with :hover and :active'); + dumpData(); + ElementsTestRunner.waitForStyles('div', hoverCallback, true); + TestRunner.cssModel.forcePseudoState(divNode, 'hover', false); + + function hoverCallback() { + ElementsTestRunner.waitForStyles('div', divSelected2, true); + TestRunner.cssModel.forcePseudoState(divNode, 'focus', true); + } + } + + function divSelected2() { + TestRunner.addResult(''); + TestRunner.addResult('DIV with :active and :focus'); + dumpData(); + ElementsTestRunner.waitForStyles('div', focusCallback, true); + TestRunner.cssModel.forcePseudoState(divNode, 'focus', false); + + function focusCallback() { + ElementsTestRunner.waitForStyles('div', divSelected3, true); + TestRunner.cssModel.forcePseudoState(divNode, 'active', false); + } + } + + function divSelected3(node) { + TestRunner.addResult(''); + TestRunner.addResult('DIV with no forced state'); + dumpData(); + TestRunner.completeTest(); + } +} +</script> +</head> +<body id="mainBody" class="main1 main2 mainpage" onload="runTest()" style="font-weight: normal; width: 85%; background-image: url(bar.png)"> +<p> +Tests that forced element state is reflected in the DOM tree and Styles pane. +</p> +<div id="div">Test text</div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/get-set-stylesheet-text-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/get-set-stylesheet-text-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-2/get-set-stylesheet-text-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/get-set-stylesheet-text-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/get-set-stylesheet-text.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/get-set-stylesheet-text.html new file mode 100644 index 0000000..4051d87 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/get-set-stylesheet-text.html
@@ -0,0 +1,110 @@ +<html> +<head> + +<style> + +/* An inline stylesheet */ +body.mainpage { + text-decoration: none; +} +</style> + +<link rel="stylesheet" href="../styles/resources/get-set-stylesheet-text.css"> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + var foundStyleSheetHeader; + var foundStyleSheetText; + + findStyleSheet(); + + function findStyleSheet() { + var styleSheetHeaders = TestRunner.cssModel.styleSheetHeaders(); + for (var i = 0; i < styleSheetHeaders.length; ++i) { + styleSheetHeader = styleSheetHeaders[i]; + if (styleSheetHeader.sourceURL.indexOf('get-set-stylesheet-text.css') >= 0) { + foundStyleSheetHeader = styleSheetHeader; + foundStyleSheetHeader.requestContent().then(callback); + } + if (!foundStyleSheetHeader) + TestRunner.cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetAdded, styleSheetAdded); + } + + function callback(content) { + foundStyleSheetText = content; + TestRunner.runTestSuite([testSetText, testNewElementStyles]); + } + + function styleSheetAdded() { + TestRunner.cssModel.removeEventListener(SDK.CSSModel.Events.StyleSheetAdded, styleSheetAdded); + findStyleSheet(); + } + } + + function testSetText(next) { + function callback(error) { + if (error) { + TestRunner.addResult('Failed to set stylesheet text: ' + error); + return; + } + } + + TestRunner.addResult('=== Original stylesheet text: ==='); + TestRunner.addResult(foundStyleSheetText); + TestRunner.cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetChanged, next, this); + TestRunner.cssModel.setStyleSheetText(foundStyleSheetHeader.id, 'h1 { COLOR: Red; }', true).then(callback); + } + + function testNewElementStyles() { + function callback(response) { + if (response[Protocol.Error]) { + TestRunner.addResult('error: ' + response[Protocol.Error]); + return; + } + + TestRunner.addResult('=== Matched rules for h1 after setText() ==='); + dumpMatchesArray(response.matchedCSSRules); + TestRunner.completeTest(); + } + + function nodeCallback(node) { + TestRunner.CSSAgent.invoke_getMatchedStylesForNode({nodeId: node.id}).then(callback); + } + + ElementsTestRunner.selectNodeWithId('inspected', nodeCallback); + } + + + // Data dumping + + function dumpMatchesArray(rules) { + if (!rules) + return; + for (var i = 0; i < rules.length; ++i) + dumpRuleOrStyle(rules[i].rule); + } + + function dumpRuleOrStyle(ruleOrStyle) { + if (!ruleOrStyle) + return; + var isRule = !!(ruleOrStyle.style); + var style = isRule ? ruleOrStyle.style : ruleOrStyle; + TestRunner.addResult(''); + TestRunner.addResult(isRule ? 'rule' : 'style'); + TestRunner.addResult((isRule ? (ruleOrStyle.selectorList.text + ': [' + ruleOrStyle.origin + ']') : 'raw style')); + ElementsTestRunner.dumpStyle(style); + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that WebInspector.CSSStyleSheet methods work as expected. +</p> +<h1 id="inspected">Inspect Me</h1> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/import-pseudoclass-crash-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/import-pseudoclass-crash-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-2/import-pseudoclass-crash-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/import-pseudoclass-crash-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/import-pseudoclass-crash.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/import-pseudoclass-crash.html new file mode 100644 index 0000000..34c4c28 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/import-pseudoclass-crash.html
@@ -0,0 +1,49 @@ +<html> +<head> +<link rel="stylesheet" href="../styles/resources/import-pseudoclass-crash.css"> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.nodeWithId('lastchild', nodeFound); + + function nodeFound(node) { + TestRunner.cssModel.matchedStylesPromise(node.id).then(matchedStylesCallback); + } + + var styleSheetId; + + function matchedStylesCallback(matchedResult) { + styleSheetId = matchedResult.nodeStyles()[1].styleSheetId; + TestRunner.CSSAgent + .setStyleSheetText( + styleSheetId, '@import url("import-pseudoclass-crash-empty.css");\n\n:last-child { color: #000001; }\n') + .then(modifiedCallback); + } + + function modifiedCallback() { + TestRunner.CSSAgent + .setStyleSheetText( + styleSheetId, '@import url("import-pseudoclass-crash-empty.css");\n\n:last-child { color: #002001; }\n') + .then(modifiedCallback2); + } + + function modifiedCallback2() { + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that modifying stylesheet text with @import and :last-child selector does not crash (<a href="https://bugs.webkit.org/show_bug.cgi?id=95324">Bug 95324</a>). +</p> + +<div> + <p id="lastchild">:last-child</p> +</div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/inactive-properties-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/inactive-properties-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-2/inactive-properties-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/inactive-properties-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/inactive-properties.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/inactive-properties.html new file mode 100644 index 0000000..73cac768 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/inactive-properties.html
@@ -0,0 +1,36 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('inspected', step1); + + function step1() { + ElementsTestRunner.dumpSelectedElementStyles(false, false); + TestRunner.completeTest(); + } +} + +</script> +<style> +#inspected { + text-align: left; + text-align: bar; + text-align: right; +} +</style> +</head> + +<body onload="runTest()"> +<p> +Tests that effectively inactive properties are displayed correctly in the sidebar. +</p> + +<div id="container"> + <div id="inspected" align="left">Test</div> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/inherited-mixed-case-properties-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/inherited-mixed-case-properties-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-2/inherited-mixed-case-properties-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/inherited-mixed-case-properties-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/inherited-mixed-case-properties.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/inherited-mixed-case-properties.html new file mode 100644 index 0000000..b53d8714 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/inherited-mixed-case-properties.html
@@ -0,0 +1,33 @@ +<html> +<head> +<style> +#container { + -webkit-FONT-smoothing: antialiased; +} +</style> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('nested', step1); + + function step1() { + ElementsTestRunner.dumpSelectedElementStyles(); + TestRunner.completeTest(); + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that non-standard mixed-cased properties are displayed in the Styles pane. +</p> + +<div id="container" style="CoLoR: blAck"> + <div id="nested"></div> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/inject-stylesheet-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/inject-stylesheet-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-2/inject-stylesheet-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/inject-stylesheet-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/inject-stylesheet.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/inject-stylesheet.html new file mode 100644 index 0000000..0be4dd17 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/inject-stylesheet.html
@@ -0,0 +1,61 @@ +<html> +<head> + +<style type="text/css" media="screen"> + #main { background:blue; } +</style> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function injectStyleSheet(context) +{ + var styleSheet = "#main { color: red; border-style: solid; -webkit-border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAiElEQVR42r2RsQrDMAxEBRdl8SDcX8lQPGg1GBI6lvz/h7QyRRXV0qUULwfvwZ1tenw5PxToRPWMC52eA9+WDnlh3HFQ/xBQl86NFYJqeGflkiogrOvVlIFhqURFVho3x1moGAa3deMs+LS30CAhBN5nNxeT5hbJ1zwmji2k+aF6NENIPf/hs54f0sZFUVAMigAAAABJRU5ErkJggg==) } #iframeBody { background: red }"; + if (context.testRunner) + context.testRunner.insertStyleSheet(styleSheet); +} + +function preRunTest() { + injectStyleSheet(window); + runTest(); +} + +function loadIframe() +{ + var iframe = document.createElement("iframe"); + iframe.src = "../styles/resources/inject-stylesheet-iframe-data.html"; + document.getElementById("main").appendChild(iframe); +} + +function test() { + ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('main', step0); + + function step0() { + TestRunner.addResult('Main frame style:'); + ElementsTestRunner.dumpSelectedElementStyles(); + TestRunner.evaluateInPage('loadIframe()'); + ConsoleTestRunner.addConsoleSniffer(step1); + } + + function step1() { + ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('iframeBody', step2); + } + + function step2() { + TestRunner.addResult('iframe style:'); + ElementsTestRunner.dumpSelectedElementStyles(); + TestRunner.completeTest(); + } +} +</script> +</head> + +<body onload="preRunTest()"> +<p> +Tests that injected user stylesheets are reflected in the Styles pane. +</p> + +<div id="main"></div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/keyframes-rules-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/keyframes-rules-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-2/keyframes-rules-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/keyframes-rules-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/keyframes-rules.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/keyframes-rules.html new file mode 100644 index 0000000..96d742c --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/keyframes-rules.html
@@ -0,0 +1,38 @@ +<html> +<head> +<style> +@keyframes fadeout { + from { background-color: black; } + to { background-color: white; } +} + +* { + background-color: papayawhip; +} +</style> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> +function test() { + TestRunner.runTestSuite([ + function testInit(next) { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', next); + }, + + function testDumpStyles(next) { + ElementsTestRunner.dumpSelectedElementStyles(true); + next(); + } + ]); +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that source data is extracted correctly from stylesheets with @keyframes rules. +</p> + +<div id="inspected" style="background-color: white;">Content</div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/lazy-computed-style-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/lazy-computed-style-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-2/lazy-computed-style-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/lazy-computed-style-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/lazy-computed-style.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/lazy-computed-style.html new file mode 100644 index 0000000..e936072 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/lazy-computed-style.html
@@ -0,0 +1,51 @@ +<html> +<head> +<style> + +#inspected { + background-color: green; + font-family: Times; +} + +#inspected { + background-color: black; + font-family: Courier; +} + +#inspected { + background: gray; +} + +</style> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); + + function step1() { + TestRunner.addResult('==== All styles (should be no computed) ===='); + ElementsTestRunner.dumpSelectedElementStyles(false, false); + ElementsTestRunner.computedStyleWidget().doUpdate().then(step2); + } + + function step2() { + TestRunner.addResult('==== All styles (computed should be there) ===='); + ElementsTestRunner.dumpSelectedElementStyles(false, false); + TestRunner.completeTest(); + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that computed styles expand and allow tracing to style rules. +</p> + +<div id="inspected"> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/media-emulation-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/media-emulation-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-2/media-emulation-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/media-emulation-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/media-emulation.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/media-emulation.html new file mode 100644 index 0000000..261d1a7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/media-emulation.html
@@ -0,0 +1,65 @@ +<html> +<head> + +<style type="text/css"> +#main { color: red; } + +@media print { +#main { color: black; } +} + +@media tty { +#main { color: green; } +} +</style> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('main', step0); + + function step0() { + TestRunner.addResult('Original style:'); + ElementsTestRunner.dumpSelectedElementStyles(true); + applyEmulatedMedia('print'); + ElementsTestRunner.waitForStyles('main', step1); + } + + function step1() { + TestRunner.addResult('print media emulated:'); + ElementsTestRunner.dumpSelectedElementStyles(true); + applyEmulatedMedia('tty'); + ElementsTestRunner.waitForStyles('main', step2); + } + + function step2() { + TestRunner.addResult('tty media emulated:'); + ElementsTestRunner.dumpSelectedElementStyles(true); + applyEmulatedMedia(''); + ElementsTestRunner.waitForStyles('main', step3); + } + + function step3() { + TestRunner.addResult('No media emulated:'); + ElementsTestRunner.dumpSelectedElementStyles(true); + TestRunner.completeTest(); + } + + function applyEmulatedMedia(media) { + TestRunner.EmulationAgent.setEmulatedMedia(media); + TestRunner.cssModel.mediaQueryResultChanged(); + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that emulated CSS media is reflected in the Styles pane. +</p> + +<div id="main"></div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/media-queries-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/media-queries-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-2/media-queries-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/media-queries-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/media-queries.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/media-queries.html new file mode 100644 index 0000000..7a0f675 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/media-queries.html
@@ -0,0 +1,38 @@ +<html> +<head> + +<style type="text/css" media="screen"> +@media not print { + #main { background:blue; } +} + +@media print { + #main { background: transparent; } +} +</style> + +<link rel="stylesheet" href="../styles/resources/media-queries.css" media="all"> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('main', step1); + + function step1() { + TestRunner.addResult('Main style:'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + TestRunner.completeTest(); + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that media query stack is rendered for associated rules. +</p> + +<div id="main"></div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/media-using-same-url-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/media-using-same-url-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-2/media-using-same-url-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/media-using-same-url-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/media-using-same-url.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/media-using-same-url.html new file mode 100644 index 0000000..7ee59f7a --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/media-using-same-url.html
@@ -0,0 +1,43 @@ +<html> +<head> + +<style type="text/css" media="screen"> +@media not print { +#main { + background: blue; +} +} +</style> + +<style type="text/css" media="screen"> +@media not print { +#main { + color: white; +} +} +</style> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('main', step1); + + function step1() { + TestRunner.addResult('Main style:'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + TestRunner.completeTest(); + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that media query stack is computed correctly when several stylesheets share the same URL. +</p> + +<div id="main"></div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/metrics-box-sizing-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/metrics-box-sizing-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-2/metrics-box-sizing-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/metrics-box-sizing-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/metrics-box-sizing.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/metrics-box-sizing.html new file mode 100644 index 0000000..aac68787 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/metrics-box-sizing.html
@@ -0,0 +1,156 @@ +<html> +<head> + +<style> +#border-box { + box-sizing: border-box; + width: 55px; + height: 55px; + margin: 1px; + padding: 7px; + border: 3px solid black; +} + +#content-box { + box-sizing: content-box; + width: 55px; + height: 55px; + margin: 1px; + padding: 7px; + border: 3px solid black; +} +</style> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +var initialize_AdditionalPreload = function() { + InspectorTest.preloadModule("source_frame"); +} + +function dumpDimensions() +{ + var element; + + element = document.getElementById("content-box"); + document.getElementById("output-content").textContent = "content-box rendered dimensions: " + element.offsetWidth + " x " + element.offsetHeight; + element = document.getElementById("border-box"); + document.getElementById("output-border").textContent = "border-box rendered dimensions: " + element.offsetWidth + " x " + element.offsetHeight; +} + +function test() { + var contentWidthElement; + var contentHeightElement; + + function getChildTextByClassName(element, className) { + var children = element.children; + for (var i = 0; i < children.length; ++i) { + if (children[i].classList && children[i].classList.contains(className)) + return children[i].textContent; + } + return null; + } + + function dumpMetrics(sectionElement) { + var marginElement = sectionElement.getElementsByClassName('margin')[0]; + var borderElement = sectionElement.getElementsByClassName('border')[0]; + var paddingElement = sectionElement.getElementsByClassName('padding')[0]; + var contentDimensions = sectionElement.getElementsByClassName('content')[0].getElementsByTagName('span'); + TestRunner.addResult( + 'margin: ' + getChildTextByClassName(marginElement, 'top') + ' ' + + getChildTextByClassName(marginElement, 'right') + ' ' + getChildTextByClassName(marginElement, 'bottom') + ' ' + + getChildTextByClassName(marginElement, 'left')); + TestRunner.addResult( + 'border: ' + getChildTextByClassName(borderElement, 'top') + ' ' + + getChildTextByClassName(borderElement, 'right') + ' ' + getChildTextByClassName(borderElement, 'bottom') + ' ' + + getChildTextByClassName(borderElement, 'left')); + TestRunner.addResult( + 'padding: ' + getChildTextByClassName(paddingElement, 'top') + ' ' + + getChildTextByClassName(paddingElement, 'right') + ' ' + getChildTextByClassName(paddingElement, 'bottom') + + ' ' + getChildTextByClassName(paddingElement, 'left')); + TestRunner.addResult('content: ' + contentDimensions[0].textContent + ' x ' + contentDimensions[1].textContent); + } + + function createDoubleClickEvent() { + var event = document.createEvent('MouseEvent'); + event.initMouseEvent('dblclick', true, true, null, 2, 0, 0, 0, 0, false, false, false, false, 0, null); + return event; + } + + TestRunner.runTestSuite([ + function testBorderBoxInit1(next) { + ElementsTestRunner.selectNodeAndWaitForStyles('border-box', next); + }, + + function testBorderBoxInit2(next) { + section = UI.panels.elements._metricsWidget; + section.expand(); + TestRunner.addSniffer(section._updateController._updateThrottler, '_processCompletedForTests', next); + }, + + function testInitialBorderBoxMetrics(next) { + var spanElements = section.element.getElementsByClassName('content')[0].getElementsByTagName('span'); + contentWidthElement = spanElements[0]; + contentHeightElement = spanElements[1]; + TestRunner.addResult('=== Initial border-box ==='); + dumpMetrics(section.element); + contentWidthElement.dispatchEvent(createDoubleClickEvent()); + contentWidthElement.textContent = '60'; + contentWidthElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + TestRunner.deprecatedRunAfterPendingDispatches(next); + }, + + function testModifiedBorderBoxMetrics(next) { + TestRunner.addResult('=== Modified border-box ==='); + dumpMetrics(section.element); + next(); + }, + + function testContentBoxInit1(next) { + ElementsTestRunner.selectNodeWithId('content-box', next); + }, + + function testContentBoxInit2(next) { + section = UI.panels.elements._metricsWidget; + section.expand(); + TestRunner.addSniffer(section._updateController._updateThrottler, '_processCompletedForTests', next); + }, + + function testInitialContentBoxMetrics(next) { + var spanElements = section.element.getElementsByClassName('content')[0].getElementsByTagName('span'); + contentWidthElement = spanElements[0]; + contentHeightElement = spanElements[1]; + TestRunner.addResult('=== Initial content-box ==='); + dumpMetrics(section.element); + contentWidthElement.dispatchEvent(createDoubleClickEvent()); + contentWidthElement.textContent = '60'; + contentWidthElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + TestRunner.deprecatedRunAfterPendingDispatches(next); + next(); + }, + + function testModifiedContentBoxMetrics(next) { + function callback() { + next(); + } + + TestRunner.addResult('=== Modified content-box ==='); + dumpMetrics(section.element); + TestRunner.evaluateInPage('dumpDimensions()', callback); + } + ]); +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that content-box and border-box content area dimensions are handled property by the Metrics pane. +</p> +<div id="content-box">content-box</div> +<div id="border-box">border-box</div> +<div id="output-content">zzz</div> +<div id="output-border">zzz</div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/mixed-case-color-aware-properties-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/mixed-case-color-aware-properties-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-2/mixed-case-color-aware-properties-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/mixed-case-color-aware-properties-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/mixed-case-color-aware-properties.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/mixed-case-color-aware-properties.html new file mode 100644 index 0000000..911e7be --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/mixed-case-color-aware-properties.html
@@ -0,0 +1,23 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + var colorAwareProperties = ['bAckground-ColoR', 'COloR', 'Border-coLoR', 'border-right-color', 'BOX-SHADOW']; + for (var i = 0; i < colorAwareProperties.length; ++i) { + var isColorAware = SDK.cssMetadata().isColorAwareProperty(colorAwareProperties[i]); + TestRunner.addResult(colorAwareProperties[i] + (isColorAware ? ' is' : ' is NOT') + ' color aware'); + } + TestRunner.completeTest(); +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that color-related mix-cased CSS properties are actually color aware. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/multiple-imports-edit-crash-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/multiple-imports-edit-crash-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-2/multiple-imports-edit-crash-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/multiple-imports-edit-crash-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/multiple-imports-edit-crash.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/multiple-imports-edit-crash.html new file mode 100644 index 0000000..e617cd9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/multiple-imports-edit-crash.html
@@ -0,0 +1,75 @@ +<html> +<head> +<style> +@import url(../styles/resources/multiple-imports-edit-crash-1.css); +@import url(../styles/resources/multiple-imports-edit-crash-2.css); +@import url(../styles/resources/multiple-imports-edit-crash-1.css); +#inspected { + color: green; +} +</style> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + TestRunner.cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetAdded, styleSheetAdded, this); + TestRunner.cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetRemoved, styleSheetRemoved, this); + ElementsTestRunner.nodeWithId('inspected', nodeFound); + + function nodeFound(node) { + TestRunner.cssModel.matchedStylesPromise(node.id).then(matchedStylesCallback); + } + + var styleSheetId; + + function matchedStylesCallback(matchedResult) { + styleSheetId = matchedResult.nodeStyles()[1].styleSheetId; + TestRunner.addResult('Setting stylesheet text...'); + TestRunner.CSSAgent.setStyleSheetText( + styleSheetId, + '@import url(../styles/resources/multiple-imports-edit-crash-1.css);\n@import url(../styles/resources/multiple-imports-edit-crash-2.css);\n#inspected { color: black }\n'); + } + + var addsExpected = 2; + var removesExpected = 3; + var added = []; + var removed = []; + + function styleSheetAdded(event) { + added.push(resourceName(event.data.sourceURL)); + + if (!(--addsExpected)) { + added.sort(); + TestRunner.addResult('Added:'); + TestRunner.addResult(added.join('\n')); + TestRunner.completeTest(); + } + } + + function styleSheetRemoved(event) { + removed.push(resourceName(event.data.sourceURL)); + + if (!(--removesExpected)) { + removed.sort(); + TestRunner.addResult('Removed:'); + TestRunner.addResult(removed.join('\n')); + } + } + + function resourceName(url) { + return url.substring(url.lastIndexOf('/') + 1); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that modifying stylesheet text with multiple @import at-rules does not crash. +</p> + +<div id="inspected">Text</div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/page-reload-update-sidebar-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/page-reload-update-sidebar-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-2/page-reload-update-sidebar-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/page-reload-update-sidebar-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/page-reload-update-sidebar.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/page-reload-update-sidebar.html new file mode 100644 index 0000000..33e712a --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/page-reload-update-sidebar.html
@@ -0,0 +1,70 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function removeInspectedNode() +{ + document.querySelector("#inspected").remove(); +} + +function test() { + var stylesSidebarPane = UI.panels.elements._stylesWidget; + TestRunner.runTestSuite([ + function selectInspectedNode(next) { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', next); + }, + + function startEditingAndReloadPage(next) { + var treeElement = ElementsTestRunner.getElementStylePropertyTreeItem('color'); + var currentDocumentId = stylesSidebarPane.node().ownerDocument.id; + treeElement.startEditing(treeElement.valueElement); + var nodeRebuiltHappened = false; + var pageReloadHappened = false; + TestRunner.addSniffer(Elements.StylesSidebarPane.prototype, '_nodeStylesUpdatedForTest', onNodeRebuilt); + TestRunner.reloadPage(reloadedCallback); + + function onNodeRebuilt(node, rebuild) { + if (!node || node.ownerDocument.id === currentDocumentId) { + TestRunner.addResult('ERROR: A rebuild update happened for the same node.'); + TestRunner.completeTest(); + return; + } + nodeRebuiltHappened = true; + maybeNext(); + } + + function reloadedCallback() { + pageReloadHappened = true; + maybeNext(); + } + + function maybeNext() { + if (nodeRebuiltHappened && pageReloadHappened) + next(); + } + }, + + function onPageReloaded(next) { + if (stylesSidebarPane._isEditingStyle) { + TestRunner.addResult('StylesSidebarPane should not be locked in editing on page reload.'); + TestRunner.completeTest(); + return; + } + next(); + }, + ]); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that reloading page during styles sidebar pane editing cancels editing and re-renders the +sidebar pane. +</p> +<div id="inspected" style="color: blue">Text</div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/parse-comments-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/parse-comments-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-2/parse-comments-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/parse-comments-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/parse-comments.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/parse-comments.html new file mode 100644 index 0000000..010a087 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/parse-comments.html
@@ -0,0 +1,58 @@ +<html> +<head> + +<style type="text/css"> +/* color: red */ + +@media /* color: red */ not /* color: red */print /* color: red */ { + /* color: red */ + /* color: red */#main/* color: red */{/* color: red */ background /* color: red */ :/* color: red */blue/* color: red */;/* color: red */ } + /* color: red */ +} + +/* color: red */ + +@font-face { + /* color: red */ + /* color: red */font-family/* color: red */:/* color: red */ Example/* color: red */;/* color: red */ + /* color: red */ + /* color: red */src/* color: red */:/* color: red */ url(bogus-example-url)/* color: red */;/* color: red */ + /* color: red */ +} + +/* color: red */ + +#main /* color: red */{ + /* color: red */color/* color: red */:/* color: red */ green/* color: red */;/* color: red */ +} +/* color: red */ +@page /* color: red */:right /* color: red */{/* color: red */ + /* color: red */margin-left/* color: red */:/* color: red */ 3cm/* color: red */;/* color: red */ + /* color: red */margin-right /* color: red */: /* color: red */4cm /* color: red */ +}/*color: red*/ +</style> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('main', step1); + + function step1() { + TestRunner.addResult('Main style:'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + TestRunner.completeTest(); + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that comments in stylesheets are parsed correctly by the DevTools. +</p> + +<div id="main"></div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/parse-declaration-unterminated-comment-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/parse-declaration-unterminated-comment-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-2/parse-declaration-unterminated-comment-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/parse-declaration-unterminated-comment-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/parse-declaration-unterminated-comment.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/parse-declaration-unterminated-comment.html new file mode 100644 index 0000000..a80c9d4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/parse-declaration-unterminated-comment.html
@@ -0,0 +1,30 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected1', dumpStylesFirst); + + function dumpStylesFirst() { + ElementsTestRunner.dumpSelectedElementStyles(true); + ElementsTestRunner.selectNodeAndWaitForStyles('inspected2', dumpStylesSecond); + } + + function dumpStylesSecond() { + ElementsTestRunner.dumpSelectedElementStyles(true); + TestRunner.completeTest(); + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that CSSParser correctly parses declarations with unterminated comments. + +<div id="inspected1" style="color: red /* foo: bar;"></div> +<div id="inspected2" style="color: green; /* foo: bar;"></div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/parse-declaration-with-quote-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/parse-declaration-with-quote-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-2/parse-declaration-with-quote-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/parse-declaration-with-quote-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/parse-declaration-with-quote.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/parse-declaration-with-quote.html new file mode 100644 index 0000000..d2f365e --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/parse-declaration-with-quote.html
@@ -0,0 +1,24 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', dumpStyles); + + function dumpStyles() { + ElementsTestRunner.dumpSelectedElementStyles(true); + TestRunner.completeTest(); + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that CSSParser correctly parses declarations with unterminated strings. <a href="https://code.google.com/p/chromium/issues/detail?id=231127">Blink bug 231127</a> + +<div id="inspected" style="color: red'foo"></div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/parse-utf8-bom-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/parse-utf8-bom-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-2/parse-utf8-bom-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/parse-utf8-bom-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/parse-utf8-bom.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/parse-utf8-bom.html new file mode 100644 index 0000000..6644d976 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/parse-utf8-bom.html
@@ -0,0 +1,30 @@ +<html> +<head> +<link rel="stylesheet" type="text/css" href="../styles/resources/parse-utf8-bom-main.css"> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); + + function step1() { + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that source data are extracted correctly from external stylesheets in UTF-8 with BOM. <a href="https://bugs.webkit.org/show_bug.cgi?id=59322">Bug 59322</a>. +</p> +<h1 id="inspected"> +I'm red. +</h1> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/paste-property-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/paste-property-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-2/paste-property-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/paste-property-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/paste-property.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/paste-property.html new file mode 100644 index 0000000..287b31bbc --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/paste-property.html
@@ -0,0 +1,73 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', pasteFirstProperty); + + function pasteFirstProperty() { + TestRunner.addResult('Before pasting:'); + ElementsTestRunner.dumpSelectedElementStyles(true); + var section = ElementsTestRunner.inlineStyleSection(); + + var treeElement = section.addNewBlankProperty(0); + pasteProperty(treeElement, 'margin-left: 1px', pasteTwoProperties); + } + + function pasteTwoProperties() { + TestRunner.addResult('After pasting \'margin-left: 1px\':'); + ElementsTestRunner.dumpSelectedElementStyles(true); + + var treeElement = ElementsTestRunner.inlineStyleSection().addNewBlankProperty(2); + pasteProperty(treeElement, 'margin-top: 1px; color: red;', pasteOverExistingProperty); + } + + function pasteOverExistingProperty() { + TestRunner.addResult('After pasting \'margin-top: 1px; color: red;\':'); + ElementsTestRunner.dumpSelectedElementStyles(true); + + var treeElement = ElementsTestRunner.getElementStylePropertyTreeItem('margin-top'); + pasteProperty(treeElement, 'foo: bar; moo: zoo', dumpAndComplete); + } + + function dumpAndComplete() { + TestRunner.addResult('After pasting \'foo: bar; moo: zoo\' over \'margin-top\':'); + ElementsTestRunner.dumpSelectedElementStyles(true); + + TestRunner.completeTest(); + } + + function pasteProperty(treeElement, propertyText, callback) { + treeElement.nameElement.textContent = propertyText; + treeElement.startEditing(); + + document.execCommand('SelectAll'); + document.execCommand('Copy'); + ElementsTestRunner.waitForStyleApplied(reloadStyles.bind(this, callback)); + document.execCommand('Paste'); + } + + function reloadStyles(callback) { + ElementsTestRunner.selectNodeAndWaitForStyles('other', otherCallback); + + function otherCallback() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', callback); + } + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that splitting properties when pasting works. +</p> + +<div id="inspected" style="font-size: 12px">Text</div> +<div id="other"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/perform-undo-perform-of-mergable-action-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/perform-undo-perform-of-mergable-action-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-2/perform-undo-perform-of-mergable-action-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/perform-undo-perform-of-mergable-action-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/perform-undo-perform-of-mergable-action.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/perform-undo-perform-of-mergable-action.html new file mode 100644 index 0000000..e224523a --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/perform-undo-perform-of-mergable-action.html
@@ -0,0 +1,61 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> + +<style> +.container { + font-weight: bold +} +</style> + +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('container', step1); + + function step1() { + TestRunner.addResult('Initial value'); + ElementsTestRunner.dumpSelectedElementStyles(true); + + var treeItem = ElementsTestRunner.getMatchedStylePropertyTreeItem('font-weight'); + treeItem.applyStyleText('font-weight: normal', false); + ElementsTestRunner.waitForStyles('container', step2); + } + + function step2() { + TestRunner.addResult('After changing property'); + ElementsTestRunner.dumpSelectedElementStyles(true); + + TestRunner.domModel.undo(); + ElementsTestRunner.waitForStyles('container', step3); + } + + function step3() { + TestRunner.addResult('After undo'); + ElementsTestRunner.dumpSelectedElementStyles(true); + + var treeItem = ElementsTestRunner.getMatchedStylePropertyTreeItem('font-weight'); + treeItem.applyStyleText('font-weight: normal', false); + ElementsTestRunner.waitForStyles('container', step4); + } + + function step4() { + TestRunner.addResult('After perform'); + ElementsTestRunner.dumpSelectedElementStyles(true); + TestRunner.completeTest(); + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that perform-undo-perform of the mergeable action does not crash. +</p> + +<div id="container" class="container"></div> +<div id="other" class="container"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/property-ui-location-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/property-ui-location-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-2/property-ui-location-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/property-ui-location-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/property-ui-location.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/property-ui-location.html new file mode 100644 index 0000000..7ab837a4c --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/property-ui-location.html
@@ -0,0 +1,59 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<link rel="stylesheet" href="../styles/resources/empty-background-url.css"> +<style> +#inspected { + color: blue; +} +</style> +<style>#inspected { margin: 10px; } +#inspected { + font-family: arial; + /* font-size: 20px; */ +} +/*# sourceURL=source-url.css */ +</style> +<script> +function test() { + SourcesTestRunner.waitForScriptSource('source-url.css', onUISourceCodeCreated); + + function onUISourceCodeCreated() { + ElementsTestRunner.nodeWithId('inspected', onNodeFound); + } + + function onNodeFound(node) { + TestRunner.cssModel.matchedStylesPromise(node.id).then(onMatchedStyles); + } + + function onMatchedStyles(matchedResult) { + var styles = matchedResult.nodeStyles(); + for (var style of styles) { + if (style.type !== SDK.CSSStyleDeclaration.Type.Regular) + continue; + var properties = style.allProperties(); + for (var property of properties) { + if (!property.range) + continue; + var uiLocation = Bindings.cssWorkspaceBinding.propertyUILocation(property, true); + TestRunner.addResult(String.sprintf( + '%s -> %s:%d:%d', property.name, uiLocation.uiSourceCode.name(), uiLocation.lineNumber, + uiLocation.columnNumber)); + var uiLocation = Bindings.cssWorkspaceBinding.propertyUILocation(property, false); + TestRunner.addResult(String.sprintf( + '%s -> %s:%d:%d', property.value, uiLocation.uiSourceCode.name(), uiLocation.lineNumber, + uiLocation.columnNumber)); + } + } + TestRunner.completeTest(); + } +} +</script> +</head> +<body onload="runTest()"> +<p>Verifies Bindings.cssWorkspaceBinding.propertyUILocation functionality</p> +<div id="inspected"></div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/pseudo-elements-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/pseudo-elements-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-2/pseudo-elements-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/pseudo-elements-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/pseudo-elements.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/pseudo-elements.html new file mode 100644 index 0000000..a3a1300 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/pseudo-elements.html
@@ -0,0 +1,176 @@ +<html> +<head> +<style> +#inspected:before, .some-other-selector { + content: "BEFORE"; +} + +#inspected:after { + content: "AFTER"; +} +</style> +<style> +#empty::before { + content: "EmptyBefore"; +} + +#empty::after { + content: "EmptyAfter"; +} +</style> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function removeLastRule() +{ + document.styleSheets[0].deleteRule(document.styleSheets[0].cssRules.length - 1); +} + +function addAfterRule() +{ + document.styleSheets[0].addRule("#inspected:after", "content: \"AFTER\""); +} + +function addBeforeRule() +{ + document.styleSheets[0].addRule("#inspected:before", "content: \"BEFORE\""); +} + +function modifyTextContent() +{ + document.getElementById("inspected").textContent = "bar"; +} + +function clearTextContent() +{ + document.getElementById("inspected").textContent = ""; +} + +function removeNode() +{ + document.getElementById("inspected").remove(); +} + +function test() { + var containerNode; + var inspectedNode; + + TestRunner.runTestSuite([ + function dumpOriginalTree(next) { + ElementsTestRunner.expandElementsTree(callback); + function callback() { + containerNode = ElementsTestRunner.expandedNodeWithId('container'); + inspectedNode = ElementsTestRunner.expandedNodeWithId('inspected'); + TestRunner.addResult('Original elements tree:'); + ElementsTestRunner.dumpElementsTree(containerNode); + next(); + } + }, + + function dumpNormalNodeStyles(next) { + selectNodeAndDumpStyles('inspected', '', next); + }, + + function dumpBeforeStyles(next) { + selectNodeAndDumpStyles('inspected', 'before', next); + }, + + function dumpAfterStyles(next) { + selectNodeAndDumpStyles('inspected', 'after', next); + }, + + function removeAfter(next) { + executeAndDumpTree('removeLastRule()', SDK.DOMModel.Events.NodeRemoved, next); + }, + + function removeBefore(next) { + executeAndDumpTree('removeLastRule()', SDK.DOMModel.Events.NodeRemoved, next); + }, + + function addAfter(next) { + executeAndDumpTree('addAfterRule()', SDK.DOMModel.Events.NodeInserted, expandAndDumpTree.bind(this, next)); + }, + + function addBefore(next) { + executeAndDumpTree('addBeforeRule()', SDK.DOMModel.Events.NodeInserted, next); + }, + + function modifyTextContent(next) { + executeAndDumpTree('modifyTextContent()', SDK.DOMModel.Events.NodeInserted, next); + }, + + function clearTextContent(next) { + executeAndDumpTree('clearTextContent()', SDK.DOMModel.Events.NodeRemoved, next); + }, + + function removeNodeAndCheckPseudoElementsUnbound(next) { + var inspectedBefore = inspectedNode.beforePseudoElement(); + var inspectedAfter = inspectedNode.afterPseudoElement(); + + executeAndDumpTree('removeNode()', SDK.DOMModel.Events.NodeRemoved, callback); + function callback() { + TestRunner.addResult( + 'inspected:before DOMNode in DOMAgent: ' + !!(TestRunner.domModel.nodeForId(inspectedBefore.id))); + TestRunner.addResult( + 'inspected:after DOMNode in DOMAgent: ' + !!(TestRunner.domModel.nodeForId(inspectedAfter.id))); + next(); + } + } + ]); + + function executeAndDumpTree(pageFunction, eventName, next) { + TestRunner.domModel.addEventListener(eventName, domCallback, this); + TestRunner.evaluateInPage(pageFunction); + + function domCallback() { + TestRunner.domModel.removeEventListener(eventName, domCallback, this); + ElementsTestRunner.firstElementsTreeOutline().addEventListener( + Elements.ElementsTreeOutline.Events.ElementsTreeUpdated, treeCallback, this); + } + + function treeCallback() { + ElementsTestRunner.firstElementsTreeOutline().removeEventListener( + Elements.ElementsTreeOutline.Events.ElementsTreeUpdated, treeCallback, this); + ElementsTestRunner.dumpElementsTree(containerNode); + next(); + } + } + + function expandAndDumpTree(next) { + TestRunner.addResult('== Expanding: =='); + ElementsTestRunner.expandElementsTree(callback); + function callback() { + ElementsTestRunner.dumpElementsTree(containerNode); + next(); + } + } + + function selectNodeAndDumpStyles(id, pseudoTypeName, callback) { + if (pseudoTypeName) + ElementsTestRunner.selectPseudoElementAndWaitForStyles('inspected', pseudoTypeName, stylesCallback); + else + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', stylesCallback); + + function stylesCallback() { + ElementsTestRunner.dumpSelectedElementStyles(true, false, false, true); + callback(); + } + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that pseudo elements and their styles are handled properly. +</p> + +<div id="container"> + <div id="inspected">Text</div> + <div id="empty"></div> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/region-style-crash-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/region-style-crash-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-2/region-style-crash-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/region-style-crash-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/region-style-crash.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/region-style-crash.html new file mode 100644 index 0000000..2c987ae1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-2/region-style-crash.html
@@ -0,0 +1,39 @@ +<html> +<head> +<style> +#article1 { -webkit-flow-into: flow1; } +#region1 { -webkit-flow-from: flow1; position: absolute; top: 10px; width: 350px; height: 25px;} +#p1 { color: #ff0000; } +@-webkit-region #region1 { + #p1 { color: #008000; } +} + +</style> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('p1', dumpAllStyles); + + function dumpAllStyles() { + ElementsTestRunner.dumpSelectedElementStyles(); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that webkit css region styling can be parsed correctly. Test passes if it doesn't crash. +</p> + +<div id="article1"> + <p id="p1">P color styled in region: #008000.</p> +</div> +<div id="region1" class="regionBox"></div> + +</body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/computed-properties-retain-expanded-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/computed-properties-retain-expanded-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-3/computed-properties-retain-expanded-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/computed-properties-retain-expanded-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/computed-properties-retain-expanded.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/computed-properties-retain-expanded.html new file mode 100644 index 0000000..c13224d --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/computed-properties-retain-expanded.html
@@ -0,0 +1,54 @@ +<html> +<head> +<style> + +#inspected { + display: flex; + color: blue; +} + +#other { + display: inline; +} + +div { + display: block; + color: black; +} + +</style> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('inspected', step1); + + function step1() { + var treeElement = ElementsTestRunner.findComputedPropertyWithName('display'); + treeElement.expand(); + TestRunner.addResult('\n#inspected computed styles: '); + ElementsTestRunner.dumpComputedStyle(true); + ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('other', step2); + } + + function step2() { + TestRunner.addResult('\n#other computed styles: '); + ElementsTestRunner.dumpComputedStyle(true); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Verifies that Computed Style preserves property expansion on re-rendering. +</p> + +<div id="inspected">Inspected</div> +<div id="other">Other</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/remove-shadow-host-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/remove-shadow-host-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-3/remove-shadow-host-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/remove-shadow-host-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/remove-shadow-host.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/remove-shadow-host.html new file mode 100644 index 0000000..7997dbe6d --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/remove-shadow-host.html
@@ -0,0 +1,28 @@ +<!DOCTYPE html> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + function addShadow() { + var root = host.attachShadow({mode:"open"}); + root.innerHTML = '<link rel="stylesheet" href="data:text/css,#x{color:pink}">'; + } + + function test() { + TestRunner.cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetAdded, sheetAdded); + TestRunner.cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetRemoved, sheetRemoved); + TestRunner.evaluateInPage('addShadow()'); + + function sheetAdded(event) { + TestRunner.addResult('Sheet added: ' + event.data.sourceURL); + TestRunner.evaluateInPage('host.remove()'); + } + + function sheetRemoved(event) { + TestRunner.addResult('Sheet removed: ' + event.data.sourceURL); + TestRunner.completeTest(); + } +} +</script> +<body onload="runTest()"> +<div id="host"></div> +
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/selector-list-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/selector-list-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-3/selector-list-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/selector-list-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/selector-list.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/selector-list.html new file mode 100644 index 0000000..a3893b3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/selector-list.html
@@ -0,0 +1,48 @@ +<html> +<head> +<style> +#inspected{ +} + +#InSpEcTeD { +} + +/* */#inspected/* */ { +} + +/* + */ FOO/*Single-line 1*/ bAr,/* Single-line 2*/#inspected/* + Multiline comment +*/ ,MOO>BAR, /*1*/htML /*2 +*/div/*3*/,/**/Foo~/**C*/Moo,/**/MOO /* Comment + */ +{ + color: green; +} + +</style> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); + + function step1() { + ElementsTestRunner.dumpSelectedElementStyles(true); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests representation of selector lists in the protocol. <a href="https://bugs.webkit.org/show_bug.cgi?id=103118">Bug 103118</a>. +</p> + +<div id="inspected">Text</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/selector-source-data-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/selector-source-data-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-3/selector-source-data-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/selector-source-data-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/selector-source-data.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/selector-source-data.html new file mode 100644 index 0000000..6e0e401 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/selector-source-data.html
@@ -0,0 +1,40 @@ +<html> +<head> + +<style> +/* c1 */ + html + #inspected.bar /* c2 */, + /* c3 */ b + /* c4 */ { + text-decoration: none; +} +</style> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.nodeWithId('inspected', nodeFound); + + async function nodeFound(node) { + var response = await TestRunner.CSSAgent.invoke_getMatchedStylesForNode({nodeId: node.id}); + if (response[Protocol.Error]) { + TestRunner.addResult('Failed to get styles: ' + response[Protocol.Error]); + return; + } + ElementsTestRunner.dumpRuleMatchesArray(response.matchedCSSRules); + TestRunner.completeTest(); + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that WebInspector.CSSStyleSheet methods work as expected. +</p> +<h1 id="inspected" class="bar">Inspect Me</h1> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/shadow-dom-rules-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/shadow-dom-rules-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-3/shadow-dom-rules-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/shadow-dom-rules-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/shadow-dom-rules.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/shadow-dom-rules.html new file mode 100644 index 0000000..a6aa0fa --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/shadow-dom-rules.html
@@ -0,0 +1,43 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function createShadowRoot() +{ + var template = document.querySelector('#tmpl'); + var root = document.querySelector('#host').createShadowRoot(); + root.appendChild(template.content.cloneNode(true)); +} + +function test() { + TestRunner.runTestSuite([ + function testInit(next) { + TestRunner.evaluateInPage('createShadowRoot()', callback); + function callback() { + ElementsTestRunner.selectNodeAndWaitForStyles('inner', next); + } + }, + + function testDumpStyles(next) { + ElementsTestRunner.dumpSelectedElementStyles(true); + next(); + } + ]); +} +</script> +</head> + +<body onload="runTest()"> +<p> +This test checks that style sheets hosted inside shadow roots +could be inspected. +</p> +<div id="host"></div> +<template id="tmpl"> + <style> .red { color: red; } </style> + <div id="inner" class="red">hi!</div> +</template> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/simple-selector-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/simple-selector-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-3/simple-selector-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/simple-selector-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/simple-selector.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/simple-selector.html new file mode 100644 index 0000000..bc6e7ec --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/simple-selector.html
@@ -0,0 +1,38 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.expandElementsTree(onElementsTreeExpanded); + + function onElementsTreeExpanded() { + var container = ElementsTestRunner.expandedNodeWithId('container'); + var children = container.children(); + for (var i = 0; i < children.length; ++i) + TestRunner.addResult(Components.DOMPresentationUtils.simpleSelector(children[i])); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p>Verifies simple selector behavior.</p> +<div id="container" style="display: none"> + <div id="foo"></div> + <div id="bar" class="foo"></div> + <div class="title"></div> + <input></input> + <input type="text"></input> + <input type="text" class="text-input"></input> + <input type="text" id="text-input"></input> + <p class="article"></p> + <span></span> + <b></b> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/spectrum-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/spectrum-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-3/spectrum-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/spectrum-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/spectrum.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/spectrum.html new file mode 100644 index 0000000..a276408 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/spectrum.html
@@ -0,0 +1,64 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script type="text/javascript"> + +var test = function() { + function setColor(inputColor, format) { + TestRunner.addResult('Testing: ' + inputColor); + var color = Common.Color.parse(inputColor); + spectrum.setColor(color, format); + } + + function checkColorString(inputColor, format) { + setColor(inputColor, format); + TestRunner.addResult(spectrum.colorString()); + } + + function checkAlphaChange(inputColor, format) { + setColor(inputColor, format); + spectrum._hsv[3] = 0; + spectrum._innerSetColor(spectrum._hsv, undefined, undefined, ColorPicker.Spectrum._ChangeSource.Other); + TestRunner.addResult(spectrum.colorString()); + } + + function checkNextFormat(inputColor, format) { + setColor(inputColor, format); + spectrum._formatViewSwitch(); + TestRunner.addResult(spectrum._colorFormat); + spectrum._formatViewSwitch(); + TestRunner.addResult(spectrum._colorFormat); + } + + var spectrum = new ColorPicker.Spectrum(); + var cf = Common.Color.Format; + var inputColors = [ + {string: 'red', format: cf.Nickname}, {string: '#ABC', format: cf.ShortHEX}, + {string: '#ABCA', format: cf.ShortHEXA}, {string: '#ABCDEF', format: cf.HEX}, + {string: '#ABCDEFAA', format: cf.HEXA}, {string: 'rgb(1, 2, 3)', format: cf.RGB}, + {string: 'rgba(1, 2, 3, 0.2)', format: cf.RGB}, {string: 'hsl(1, 100%, 50%)', format: cf.HSL}, + {string: 'hsla(1, 100%, 50%, 0.2)', format: cf.HSLA} + ]; + + TestRunner.addResult('--- Testing colorString()'); + for (var color of inputColors) + checkColorString(color.string, color.format); + + TestRunner.addResult('--- Testing alpha changes'); + for (var color of inputColors) + checkAlphaChange(color.string, color.format); + + TestRunner.addResult('--- Testing _formatViewSwitch()'); + for (var color of inputColors) + checkNextFormat(color.string, color.format); + + TestRunner.completeTest(); +}; + +</script> +</head> +<body onload="runTest()"> +<p>Tests ColorPicker.Spectrum</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/style-autocomplete-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/style-autocomplete-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-3/style-autocomplete-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/style-autocomplete-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/style-autocomplete.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/style-autocomplete.html new file mode 100644 index 0000000..02f2806 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/style-autocomplete.html
@@ -0,0 +1,135 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<style> +#outer {--red-color: red} +#middle {--blue-color: blue} +</style> +<script> + +function test() { + var node = + ElementsTestRunner.nodeWithId('inner', node => TestRunner.cssModel.cachedMatchedCascadeForNode(node).then(step1)); + function step1(matchedStyles) { + var namePrompt = new Elements.StylesSidebarPane.CSSPropertyPrompt( + SDK.cssMetadata().allProperties(), matchedStyles.cssVariables(), null, true); + var valuePrompt = valuePromptFor('color'); + function valuePromptFor(name) { + return new Elements.StylesSidebarPane.CSSPropertyPrompt( + SDK.cssMetadata().propertyValues(name), matchedStyles.cssVariables(), null, false); + } + TestRunner.runTestSuite([ + function testEmptyName(next) { + testAgainstGolden(namePrompt, '', false, [], ['width'], next); + }, + + function testEmptyNameForce(next) { + testAgainstGolden(namePrompt, '', true, ['width'], [], next); + }, + + function testSingleCharName(next) { + testAgainstGolden(namePrompt, 'w', false, ['width'], [], next); + }, + + function testSubstringName(next) { + testAgainstGolden(namePrompt, 'size', false, ['font-size', 'background-size', 'resize'], ['font-align'], next); + }, + + function testEmptyValue(next) { + testAgainstGolden(valuePrompt, '', false, ['aliceblue', 'red', 'inherit'], [], next); + }, + + function testImportantDeclarationDoNotToggleOnExclamationMark(next) { + testAgainstGolden(valuePrompt, 'red !', false, [], ['!important'], next); + }, + + function testImportantDeclaration(next) { + testAgainstGolden(valuePrompt, 'red !i', false, ['!important'], [], next); + }, + + function testValueR(next) { + testAgainstGolden(valuePrompt, 'R', false, ['RED', 'ROSYBROWN'], ['aliceblue', 'inherit'], next); + }, + + function testValueWithParenthesis(next) { + testAgainstGolden(valuePrompt, 'saturate(0%)', false, [], ['inherit'], next); + }, + + function testValuePrefixed(next) { + testAgainstGolden( + valuePromptFor('-webkit-transform'), 'tr', false, ['translate', 'translateY', 'translate3d'], + ['initial', 'inherit'], next); + }, + + function testValueUnprefixed(next) { + testAgainstGolden( + valuePromptFor('transform'), 'tr', false, ['translate', 'translateY', 'translate3d'], + ['initial', 'inherit'], next); + }, + + function testValueSubstring(next) { + testAgainstGolden( + valuePromptFor('color'), 'blue', false, ['blue', 'darkblue', 'lightblue'], + ['darkred', 'yellow', 'initial', 'inherit'], next); + }, + + function testNameVariables(next) { + testAgainstGolden(namePrompt, '', true, ['--red-color', '--blue-color'], [], next); + }, + + function testValueVariables(next) { + testAgainstGolden(valuePromptFor('color'), 'var(', true, ['--red-color)', '--blue-color)'], ['width'], next); + } + ]); + } + + function testAgainstGolden(prompt, inputText, force, golden, antiGolden, callback) { + var proxyElement = document.createElement('div'); + document.body.appendChild(proxyElement); + proxyElement.style = 'webkit-user-select: text; -webkit-user-modify: read-write-plaintext-only'; + proxyElement.textContent = inputText; + var selectionRange = document.createRange(); + var textNode = proxyElement.childNodes[0]; + if (textNode) { + selectionRange.setStart(textNode, inputText.length); + selectionRange.setEnd(textNode, inputText.length); + } else { + selectionRange.selectNodeContents(proxyElement); + } + var range = selectionRange.startContainer.rangeOfWord( + selectionRange.startOffset, prompt._completionStopCharacters, proxyElement, 'backward'); + var prefix = range.toString(); + prompt._buildPropertyCompletions(inputText.substring(0, inputText.length - prefix.length), prefix, force) + .then(completions); + + function completions(result) { + var suggestions = new Set(result.map(s => s.text)); + var i; + for (i = 0; i < golden.length; ++i) { + if (!suggestions.has(golden[i])) + TestRunner.addResult('NOT FOUND: ' + golden[i]); + } + for (i = 0; i < antiGolden.length; ++i) { + if (suggestions.has(antiGolden[i])) + TestRunner.addResult('FOUND: ' + antiGolden[i]); + } + proxyElement.remove(); + callback(); + } + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that autocompletions are computed correctly when editing the Styles pane. +</p> +<div id="outer"> + <div id="middle"> + <div id="inner"></div> + </div> +</div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/style-rule-from-imported-stylesheet-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/style-rule-from-imported-stylesheet-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-3/style-rule-from-imported-stylesheet-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/style-rule-from-imported-stylesheet-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/style-rule-from-imported-stylesheet.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/style-rule-from-imported-stylesheet.html new file mode 100644 index 0000000..945b02dc --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/style-rule-from-imported-stylesheet.html
@@ -0,0 +1,31 @@ +<html> +<head> +<link rel="import" href="../styles/resources/imported-stylesheet.html"/> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('square', step1); + + function step1() { + TestRunner.addResult('Rules before toggling:'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + ElementsTestRunner.waitForStyleApplied(step2); + ElementsTestRunner.toggleMatchedStyleProperty('background-color', false); + } + + function step2() { + TestRunner.addResult('Rules after toggling:'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + TestRunner.completeTest(); + } +} +</script> +</head> + +<body onload="runTest()"> +<p>Tests that rules from imported stylesheets are correctly shown and are editable in inspector.</p> +<div id="square" class="square"></div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-blank-property-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-blank-property-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-blank-property-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-blank-property-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-blank-property.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-blank-property.html new file mode 100644 index 0000000..6d9f556 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-blank-property.html
@@ -0,0 +1,103 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', addAndIncrementFirstProperty); + + var treeElement; + var section; + + function addAndIncrementFirstProperty() { + TestRunner.addResult('Before append:'); + ElementsTestRunner.dumpSelectedElementStyles(true); + section = ElementsTestRunner.inlineStyleSection(); + + // Create and increment. + treeElement = section.addNewBlankProperty(0); + treeElement.startEditing(); + treeElement.nameElement.textContent = 'margin-left'; + treeElement.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + + treeElement.valueElement.textContent = '1px'; + treeElement.valueElement.firstChild.select(); + treeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('ArrowUp')); + ElementsTestRunner.waitForStyleApplied(incrementProperty); + } + + function incrementProperty() { + // Increment again. + treeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('ArrowUp')); + ElementsTestRunner.waitForStyleApplied(commitProperty); + } + + function commitProperty() { + // Commit. + treeElement.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + reloadStyles(addAndChangeLastCompoundProperty); + } + + function addAndChangeLastCompoundProperty() { + TestRunner.addResult('After insertion at index 0:'); + ElementsTestRunner.dumpSelectedElementStyles(true); + + treeElement = ElementsTestRunner.inlineStyleSection().addNewBlankProperty(2); + treeElement.startEditing(); + treeElement.nameElement.textContent = 'color'; + treeElement.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + + treeElement.valueElement.textContent = 'green; font-weight: bold'; + treeElement.kickFreeFlowStyleEditForTest(); + + treeElement.valueElement.textContent = 'red; font-weight: bold'; + treeElement.kickFreeFlowStyleEditForTest(); + + treeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + ElementsTestRunner.waitForStyleApplied(reloadStyles.bind(this, addAndCommitMiddleProperty)); + } + + function addAndCommitMiddleProperty() { + TestRunner.addResult('After appending and changing a \'compound\' property:'); + ElementsTestRunner.dumpSelectedElementStyles(true); + + treeElement = ElementsTestRunner.inlineStyleSection().addNewBlankProperty(2); + treeElement.startEditing(); + treeElement.nameElement.textContent = 'third-property'; + treeElement.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + treeElement.valueElement.textContent = 'third-value'; + + treeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + ElementsTestRunner.waitForStyleApplied(reloadStyles.bind(this, dumpAndComplete)); + } + + function dumpAndComplete() { + TestRunner.addResult('After insertion at index 2:'); + ElementsTestRunner.dumpSelectedElementStyles(true); + + TestRunner.completeTest(); + } + + function reloadStyles(callback) { + ElementsTestRunner.selectNodeAndWaitForStyles('other', otherCallback); + + function otherCallback() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', callback); + } + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that adding a new blank property works. +</p> + +<div id="inspected" style="font-size: 12px">Text</div> +<div id="other"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-invalid-property-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-invalid-property-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-invalid-property-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-invalid-property-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-invalid-property.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-invalid-property.html new file mode 100644 index 0000000..da027b1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-invalid-property.html
@@ -0,0 +1,64 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); + + var treeElement; + var section; + + function step1() { + TestRunner.addResult('Before append:'); + ElementsTestRunner.dumpSelectedElementStyles(true); + section = ElementsTestRunner.inlineStyleSection(); + + // Create and increment. + treeElement = section.addNewBlankProperty(); + treeElement.startEditing(); + treeElement.nameElement.textContent = 'color'; + treeElement.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + + // Update incrementally to a valid value. + treeElement.valueElement.textContent = 'rgb('; + treeElement.kickFreeFlowStyleEditForTest(); + ElementsTestRunner.waitForStyleApplied(step2); + } + + function step2() { + // Commit invalid value. + treeElement.valueElement.textContent = 'rgb(1'; + ElementsTestRunner.waitForStyleApplied(step3); + treeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + } + + function step3() { + ElementsTestRunner.selectNodeWithId('other', step4); + } + + function step4() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step5); + } + + function step5() { + TestRunner.addResult('After append:'); + ElementsTestRunner.dumpSelectedElementStyles(true); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that adding an invalid property retains its syntax. +</p> + +<div id="inspected" style="font-size: 12px">Text</div> +<div id="other"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-new-rule-colon-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-new-rule-colon-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-new-rule-colon-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-new-rule-colon-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-new-rule-colon.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-new-rule-colon.html new file mode 100644 index 0000000..9a7f39e --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-new-rule-colon.html
@@ -0,0 +1,84 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); + TestRunner.addSniffer(Workspace.UISourceCode.prototype, 'addRevision', onRevisionAdded); + + var treeElement; + var hasResourceChanged; + + var revisionAdded = false; + var testFinished = false; + var displayName = ''; + + function step1() { + ElementsTestRunner.addNewRule('foo, div#inspected, bar', step2); + } + + function step2() { + var section = ElementsTestRunner.firstMatchedStyleSection(); + var newProperty = section.addNewBlankProperty(); + newProperty.startEditing(); + textInputController.insertText('color'); + eventSender.keyDown(':'); + textInputController.insertText('maroon'); + ElementsTestRunner.waitForStyleApplied(step3); + eventSender.keyDown(';'); + } + + function step3() { + ElementsTestRunner.selectNodeAndWaitForStyles('other', step4); + } + + function step4() { + ElementsTestRunner.addNewRule(null, onRuleAdded); + + function onRuleAdded() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step5); + } + } + + function step5() { + TestRunner.addResult('After adding new rule (inspected):'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true, true); + ElementsTestRunner.selectNodeAndWaitForStyles('other', step6); + } + + function step6() { + TestRunner.addResult('After adding new rule (other):'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + testFinished = true; + maybeCompleteTest(); + } + + function maybeCompleteTest() { + if (!testFinished || !revisionAdded) + return; + TestRunner.addResult('Revision added: ' + displayName); + TestRunner.completeTest(); + } + + function onRevisionAdded(revision) { + revisionAdded = true; + displayName = this.displayName(); + maybeCompleteTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that adding a new rule works after switching nodes. +</p> + +<div id="inspected" style="font-size: 12px">Text</div> +<div id="other" style="color:red"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-new-rule-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-new-rule-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-new-rule-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-new-rule-expected.txt
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-new-rule-tab-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-new-rule-tab-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-new-rule-tab-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-new-rule-tab-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-new-rule-tab.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-new-rule-tab.html new file mode 100644 index 0000000..81ff6c0b --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-new-rule-tab.html
@@ -0,0 +1,86 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +var initialize_AdditionalPreload = function() { + InspectorTest.preloadModule("source_frame"); +} + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); + TestRunner.addSniffer(Workspace.UISourceCode.prototype, 'addRevision', onRevisionAdded); + + var treeElement; + var hasResourceChanged; + + var testFinished = false; + var revisionAdded = false; + var displayName = ''; + + function step1() { + // Click "Add new rule". + ElementsTestRunner.addNewRule('foo, div#inspected, bar', step2); + } + + function step2() { + var section = ElementsTestRunner.firstMatchedStyleSection(); + var newProperty = section.addNewBlankProperty(); + newProperty.startEditing(); + textInputController.insertText('color'); + newProperty.nameElement.dispatchEvent(TestRunner.createKeyEvent('Tab')); + textInputController.insertText('maroon'); + newProperty.valueElement.dispatchEvent(TestRunner.createKeyEvent('Tab')); + ElementsTestRunner.selectNodeAndWaitForStyles('other', step3); + } + + function step3() { + // Click "Add new rule". + ElementsTestRunner.addNewRule(null, onRuleAdded); + + function onRuleAdded() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step4); + } + } + + function step4() { + TestRunner.addResult('After adding new rule (inspected):'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true, true); + ElementsTestRunner.selectNodeAndWaitForStyles('other', step5); + } + + function step5() { + TestRunner.addResult('After adding new rule (other):'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + testFinished = true; + maybeCompleteTest(); + } + + function maybeCompleteTest() { + if (!testFinished || !revisionAdded) + return; + TestRunner.addResult('Revision added: ' + displayName); + TestRunner.completeTest(); + } + + function onRevisionAdded(revision) { + displayName = this.displayName(); + revisionAdded = true; + maybeCompleteTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that adding a new rule works after switching nodes. +</p> + +<div id="inspected" style="font-size: 12px">Text</div> +<div id="other" style="color:red"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-new-rule-to-stylesheet-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-new-rule-to-stylesheet-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-new-rule-to-stylesheet-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-new-rule-to-stylesheet-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-new-rule-to-stylesheet.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-new-rule-to-stylesheet.html new file mode 100644 index 0000000..2a5dcad --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-new-rule-to-stylesheet.html
@@ -0,0 +1,45 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<link rel="stylesheet" href="../styles/resources/different-rule-types.css"> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspect', fetchStyleSheet); + + function fetchStyleSheet() { + var styleSheets = TestRunner.cssModel.allStyleSheets(); + for (var i = 0; i < styleSheets.length; ++i) { + var styleSheetHeader = styleSheets[i]; + if (styleSheetHeader.sourceURL.indexOf('different-rule-types.css') === -1) + continue; + ElementsTestRunner.addNewRuleInStyleSheet(styleSheetHeader, '#other, div', onRuleAdded); + return; + } + } + + function onRuleAdded() { + ElementsTestRunner.selectNodeAndWaitForStyles('other', onNodeSelected); + } + + function onNodeSelected() { + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that adding new rule in the stylesheet end works as expected. +</p> + +<div class="inspected">Styled element</div> +<div id="inspect"></div> +<div id="other"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-new-rule.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-new-rule.html new file mode 100644 index 0000000..ff553cfe --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-add-new-rule.html
@@ -0,0 +1,120 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +var initialize_AdditionalPreload = function() { + InspectorTest.preloadModule("source_frame"); +} + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); + + var treeElement; + var hasResourceChanged; + + var revisionAdded = false; + var testFinished = false; + var displayName = null; + + TestRunner.addSniffer(Workspace.UISourceCode.prototype, 'addRevision', onRevisionAdded); + + function step1() { + // Click "Add new rule". + ElementsTestRunner.addNewRule('foo, div#inspected, bar', step2); + } + + function step2() { + var section = ElementsTestRunner.firstMatchedStyleSection(); + var newProperty = section.addNewBlankProperty(); + newProperty.startEditing(); + textInputController.insertText('color'); + newProperty.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + textInputController.insertText('maroon'); + newProperty.valueElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + ElementsTestRunner.selectNodeAndWaitForStyles('other', step3); + } + + function step3() { + // Click "Add new rule". + ElementsTestRunner.addNewRule(null, onRuleAdded); + + function onRuleAdded() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step4); + } + } + + function step4() { + TestRunner.addResult('After adding new rule (inspected):'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true, true); + ElementsTestRunner.selectNodeAndWaitForStyles('other', step5); + } + + function step5() { + TestRunner.addResult('After adding new rule (other):'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + + ElementsTestRunner.waitForStylesForClass('my-class', onStylesReceived); + ElementsTestRunner.nodeWithClass('my-class', onNodeFound); + function onNodeFound(node) { + Common.Revealer.reveal(node); + } + + function onStylesReceived() { + ElementsTestRunner.addNewRule(null, step6); + } + } + + function step6() { + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + + ElementsTestRunner.waitForStylesForClass('class-1', onStylesReceived); + ElementsTestRunner.nodeWithClass('class-1', onNodeFound); + function onNodeFound(node) { + Common.Revealer.reveal(node); + } + + function onStylesReceived() { + ElementsTestRunner.addNewRule(null, function() { + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + testFinished = true; + maybeCompleteTest(); + }); + } + } + + function maybeCompleteTest() { + if (!revisionAdded || !testFinished) + return; + TestRunner.addResult('Revision added: ' + displayName); + TestRunner.completeTest(); + } + + function onRevisionAdded(revision) { + revisionAdded = true; + displayName = this.displayName(); + maybeCompleteTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that adding a new rule works after switching nodes. +</p> + +<div id="inspected" style="font-size: 12px">Text</div> +<div id="other" style="color:red"></div> +<div> + <div class="my-class"></div> + <div class="my-class"></div> + <div class="my-class"></div> +</div> + +<div class=" class-1 class-2 class-3 "></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-cancel-editing-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-cancel-editing-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-cancel-editing-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-cancel-editing-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-cancel-editing.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-cancel-editing.html new file mode 100644 index 0000000..9545cf8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-cancel-editing.html
@@ -0,0 +1,62 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); + + var treeElement; + var section; + + function step1() { + ElementsTestRunner.dumpSelectedElementStyles(true); + treeElement = ElementsTestRunner.getElementStylePropertyTreeItem('color'); + + treeElement.startEditing(); + treeElement.nameElement.textContent = 'color'; + treeElement.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + + // Update incrementally, do not commit. + treeElement.valueElement.textContent = 'green'; + treeElement.kickFreeFlowStyleEditForTest(); + + // Cancel editing. + treeElement.valueElement.firstChild.select(); + ElementsTestRunner.waitForStyleApplied(onStyleApplied); + + function onStyleApplied() { + treeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('Escape')); + ElementsTestRunner.waitForStyleApplied(onStyleReverted); + } + + function onStyleReverted() { + ElementsTestRunner.selectNodeWithId('other', step2); + } + } + + function step2() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step3); + } + + function step3() { + TestRunner.addResult('After append:'); + ElementsTestRunner.dumpSelectedElementStyles(true); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that editing is canceled properly after incremental editing. +</p> + +<div id="inspected" style="color: red">Text</div> +<div id="other"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-change-node-while-editing-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-change-node-while-editing-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-change-node-while-editing-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-change-node-while-editing-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-change-node-while-editing.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-change-node-while-editing.html new file mode 100644 index 0000000..c76a696e --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-change-node-while-editing.html
@@ -0,0 +1,46 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); + + var treeElement; + var section; + + function step1() { + ElementsTestRunner.dumpSelectedElementStyles(true, true, true); + treeElement = ElementsTestRunner.getElementStylePropertyTreeItem('color'); + + treeElement.startEditing(); + treeElement.nameElement.textContent = 'background'; + + ElementsTestRunner.selectNodeAndWaitForStyles('other', step2); + } + + function step2() { + ElementsTestRunner.dumpSelectedElementStyles(true, true, true); + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step3); + } + + function step3() { + ElementsTestRunner.dumpSelectedElementStyles(true, true, true); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that changing selected node while editing style does update styles sidebar. +</p> + +<div id="inspected" style="color: red">Text</div> +<div id="other" style="color: blue"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-commit-editing-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-commit-editing-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-commit-editing-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-commit-editing-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-commit-editing.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-commit-editing.html new file mode 100644 index 0000000..61bc6de --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-commit-editing.html
@@ -0,0 +1,87 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + var treeElement; + var treeOutline; + var section; + + TestRunner.runTestSuite([ + function selectInitialNode(next) { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', next); + }, + + function testFreeFlowEdit(next) { + ElementsTestRunner.dumpSelectedElementStyles(true); + treeElement = ElementsTestRunner.getElementStylePropertyTreeItem('color'); + treeOutline = treeElement.treeOutline; + + treeElement.startEditing(); + treeElement.nameElement.textContent = 'color'; + treeElement.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + + // Update incrementally, do not commit. + treeElement.valueElement.textContent = 'rgb(/*'; + ElementsTestRunner.waitForStyleApplied(next); + treeElement.kickFreeFlowStyleEditForTest(); + }, + + function testCommitEditing(next) { + // Commit editing. + treeElement.valueElement.textContent = 'green'; + treeElement.valueElement.firstChild.select(); + TestRunner.addSniffer(Elements.StylePropertiesSection.prototype, '_afterUpdateFinishedForTest', next); + treeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + }, + + function testNewPropertyEditorIsCreated(next) { + var blankTreeElement = treeOutline.rootElement().childAt(1); + if (!UI.isBeingEdited(blankTreeElement.nameElement)) { + TestRunner.addResult('No new property editor active!'); + TestRunner.completeTest(); + return; + } + + // Test Styles pane editor looping. + TestRunner.addSniffer(Elements.StylePropertiesSection.prototype, '_afterUpdateFinishedForTest', next); + blankTreeElement.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + }, + + function testCycleThroughPropertyEditing(next) { + if (!UI.isBeingEdited(treeOutline.firstChild().nameElement)) { + TestRunner.addResult('Original property name editor not active!'); + TestRunner.completeTest(); + return; + } + + ElementsTestRunner.selectNodeWithId('other', next); + }, + + function testNodeStyles(next) { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', next); + }, + + function dumpStyles(next) { + TestRunner.addResult('After append:'); + ElementsTestRunner.dumpSelectedElementStyles(true); + next(); + } + ]); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that editing is canceled properly after incremental editing. +</p> + +<div id="inspected" style="color: red">Text</div> +<div id="other"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-computed-trace-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-computed-trace-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-computed-trace-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-computed-trace-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-computed-trace.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-computed-trace.html new file mode 100644 index 0000000..36a5147e --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-computed-trace.html
@@ -0,0 +1,75 @@ +<html> +<head> +<style> +body { + background-color: rgb(100, 0, 0); + font-family: Arial; +} + +div { + text-decoration: underline; +} + +#id1 { + background-color: green; + font-family: Times; +} + +#id1 { + background-color: black; + font-family: Courier; +} + +#id1 { + background: gray; +} + +#id2 { + background-color: blue; + font-family: Courier; + text-decoration: invalidvalue; +} + +</style> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('id1', step1); + + function step1() { + TestRunner.addResult('==== Computed style for ID1 ===='); + ElementsTestRunner.dumpSelectedElementStyles(false, true); + ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('id2', step2); + } + + function step2() { + TestRunner.addResult('==== Computed style for ID2 ===='); + ElementsTestRunner.dumpSelectedElementStyles(false, true); + ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('id3', step3); + } + + function step3() { + TestRunner.addResult('==== Style for ID3 ===='); + // The button[hidden] style specifies "display: none", which should not be /-- overloaded --/. + ElementsTestRunner.dumpSelectedElementStyles(true, true); + TestRunner.completeTest(); + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that computed styles expand and allow tracing to style rules. +</p> + +<div id="id1"> +<div id="id2"> +</div> +<button id="id3" hidden /> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-inherited-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-inherited-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-inherited-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-inherited-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-inherited.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-inherited.html new file mode 100644 index 0000000..1d8e8ed --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-inherited.html
@@ -0,0 +1,46 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +var initialize_AdditionalPreload = function() { + InspectorTest.preloadModule("source_frame"); +} + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('nested', step1); + + function step1() { + var treeItem = ElementsTestRunner.getElementStylePropertyTreeItem('font-weight'); + TestRunner.addResult('Before disable'); + ElementsTestRunner.dumpSelectedElementStyles(true); + + ElementsTestRunner.selectNodeAndWaitForStyles('container', step2); + } + + function step2() { + ElementsTestRunner.toggleStyleProperty('font-weight', false); + ElementsTestRunner.selectNodeAndWaitForStyles('nested', step3); + } + + function step3() { + TestRunner.addResult('After disable:'); + ElementsTestRunner.dumpSelectedElementStyles(true); + TestRunner.completeTest(); + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that disabling inherited style property does not break further style inspection. +</p> + +<div id="container" style="font-weight:bold"> + <div id="nested"></div> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-property-after-selector-edit-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-property-after-selector-edit-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-property-after-selector-edit-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-property-after-selector-edit-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-property-after-selector-edit.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-property-after-selector-edit.html new file mode 100644 index 0000000..422fe29 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-property-after-selector-edit.html
@@ -0,0 +1,50 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + TestRunner.runTestSuite([ + function selectInitialNode(next) { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', next); + }, + + function editSelector(next) { + var section = ElementsTestRunner.firstMatchedStyleSection(); + section.startEditingSelector(); + section._selectorElement.textContent = '#inspected, .INSERTED-OTHER-SELECTOR'; + ElementsTestRunner.waitForSelectorCommitted(next); + section._selectorElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + }, + + function testDisableProperty(next) { + var treeItem = ElementsTestRunner.getMatchedStylePropertyTreeItem('color'); + ElementsTestRunner.waitForStyleApplied(onPropertyDisabled); + treeItem._toggleEnabled({target: {checked: false}, consume: function() {}}); + + function onPropertyDisabled() { + TestRunner.addResult('\n\n#### AFTER PROPERTY DISABLED ####\n\n'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + next(); + } + } + ]); +} +</script> +<style> +#inspected { + color: red; +} +</style> +</head> + +<body onload="runTest()"> +<p> +Verifies that sequence of setting selector and disabling property works. +</p> + +<div id="inspected">Red text here.</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-then-change-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-then-change-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-then-change-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-then-change-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-then-change.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-then-change.html new file mode 100644 index 0000000..b569ee5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-then-change.html
@@ -0,0 +1,48 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('container', step1); + + function step1() { + TestRunner.addResult('Before disable'); + ElementsTestRunner.dumpSelectedElementStyles(true, true); + + ElementsTestRunner.toggleStyleProperty('font-weight', false); + ElementsTestRunner.waitForStyles('container', step2); + } + + function step2() { + TestRunner.addResult('After disable'); + ElementsTestRunner.dumpSelectedElementStyles(true, true); + + var treeItem = ElementsTestRunner.getElementStylePropertyTreeItem('font-weight'); + treeItem.applyStyleText('color: green', false); + ElementsTestRunner.waitForStyles('container', step3); + } + + function step3() { + TestRunner.addResult('After change'); + ElementsTestRunner.dumpSelectedElementStyles(true, true); + TestRunner.completeTest(); + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that changing a disabled property enables it as well. +</p> + +<div id="container" style="font-weight:bold"> +</div> + +<div id="other"> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-then-delete-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-then-delete-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-then-delete-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-then-delete-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-then-delete.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-then-delete.html new file mode 100644 index 0000000..7729094 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-then-delete.html
@@ -0,0 +1,58 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('container', step1); + + function step1() { + // Disable property + TestRunner.addResult('Before disable'); + ElementsTestRunner.dumpSelectedElementStyles(true, true); + ElementsTestRunner.toggleStyleProperty('font-weight', false); + ElementsTestRunner.waitForStyleApplied(step2); + } + + function step2() { + // Delete style + TestRunner.addResult('After disable'); + ElementsTestRunner.dumpSelectedElementStyles(true, true); + + var treeItem = ElementsTestRunner.getElementStylePropertyTreeItem('font-weight'); + treeItem.applyStyleText('', false); + + ElementsTestRunner.waitForStyleApplied(step3); + } + + function step3() { + ElementsTestRunner.selectNodeWithId('other', step4); + } + + function step4() { + ElementsTestRunner.selectNodeAndWaitForStyles('container', step5); + } + + function step5(node) { + TestRunner.addResult('After delete'); + ElementsTestRunner.dumpSelectedElementStyles(true, true); + TestRunner.completeTest(); + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that removal of property following its disabling works. +</p> + +<div id="container" style="font-weight:bold"> +</div> + +<div id="other"> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-then-enable-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-then-enable-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-then-enable-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-then-enable-expected.txt
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-then-enable-overriden-ua-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-then-enable-overriden-ua-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-then-enable-overriden-ua-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-then-enable-overriden-ua-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-then-enable-overriden-ua.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-then-enable-overriden-ua.html new file mode 100644 index 0000000..783f9dbc --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-then-enable-overriden-ua.html
@@ -0,0 +1,41 @@ +<!DOCTYPE html> +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> + +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('body-id', step1); + + function step1() { + TestRunner.addResult('Before disable'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + ElementsTestRunner.toggleStyleProperty('margin', false); + ElementsTestRunner.waitForStyles('body-id', step2); + } + + function step2() { + TestRunner.addResult('After disable'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + ElementsTestRunner.toggleStyleProperty('margin', true); + ElementsTestRunner.waitForStyles('body-id', step3); + } + + function step3() { + TestRunner.addResult('After enable'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + TestRunner.completeTest(); + } +} +</script> +</head> + +<body onload="runTest()" id="body-id" style="margin: 10px"> +<p> +Tests that disabling shorthand removes the "overriden" mark from the UA shorthand it overrides. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-then-enable.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-then-enable.html new file mode 100644 index 0000000..b360a5d --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-disable-then-enable.html
@@ -0,0 +1,48 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('container', step1); + + function step1(node) { + TestRunner.addResult('Before disable'); + var treeItem = ElementsTestRunner.getElementStylePropertyTreeItem('font-weight'); + ElementsTestRunner.dumpStyleTreeItem(treeItem, ''); + + ElementsTestRunner.toggleStyleProperty('font-weight', false); + ElementsTestRunner.waitForStyles('container', step2); + } + + function step2() { + TestRunner.addResult('After disable'); + var treeItem = ElementsTestRunner.getElementStylePropertyTreeItem('font-weight'); + ElementsTestRunner.dumpStyleTreeItem(treeItem, ''); + + ElementsTestRunner.toggleStyleProperty('font-weight', true); + ElementsTestRunner.waitForStyles('container', step3); + } + + function step3() { + TestRunner.addResult('After enable'); + var treeItem = ElementsTestRunner.getElementStylePropertyTreeItem('font-weight'); + ElementsTestRunner.dumpStyleTreeItem(treeItem, ''); + + TestRunner.completeTest(); + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that disabling style property works. +</p> + +<div id="container" style="font-weight:bold"> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-variables-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-variables-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-variables-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-variables-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-variables.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-variables.html new file mode 100644 index 0000000..e25278f --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/styles-variables.html
@@ -0,0 +1,85 @@ +<html> +<head> +<style> +body { + --a: red; +} + +#id1 { + --b: 44px; +} + +#id2 { + --a: green; +} + +#id3 { + --a: inherit; +} + +#id4 { + --a: var(--z); +} + +</style> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('id1', step1); + function step1(node) { + TestRunner.addResult('==== Computed style for ID1 ===='); + ElementsTestRunner.dumpSelectedElementStyles(false, false); + TestRunner.cssModel.computedStylePromise(node.id).then(function(style) { + TestRunner.addResult('value of --a: ' + style.get('--a')); + ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('id2', step2); + }); + } + + function step2(node) { + TestRunner.addResult('==== Computed style for ID2 ===='); + ElementsTestRunner.dumpSelectedElementStyles(false, false); + TestRunner.cssModel.computedStylePromise(node.id).then(function(style) { + TestRunner.addResult('value of --b: ' + style.get('--b')); + ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('id3', step3); + }); + } + + function step3(node) { + TestRunner.addResult('==== Computed style for ID3 ===='); + ElementsTestRunner.dumpSelectedElementStyles(false, false); + TestRunner.cssModel.computedStylePromise(node.id).then(function(style) { + TestRunner.addResult('value of --b: ' + style.get('--b')); + ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('id4', step4); + }); + } + + function step4(node) { + TestRunner.addResult('==== Computed style for ID4 ===='); + ElementsTestRunner.dumpSelectedElementStyles(false, false); + TestRunner.cssModel.computedStylePromise(node.id).then(function(style) { + TestRunner.addResult('value of --a: ' + style.get('--a')); + TestRunner.completeTest(); + }); + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that computed styles expand and allow tracing to style rules. +</p> + +<div id="id1"> +<div id="id2"> +<div id="id3"> +</div> +</div> +</div> +<div id="id4"> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/disable-last-property-without-semicolon-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/disable-last-property-without-semicolon-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/disable-last-property-without-semicolon-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/disable-last-property-without-semicolon-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/disable-last-property-without-semicolon.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/disable-last-property-without-semicolon.html new file mode 100644 index 0000000..81db70a --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/disable-last-property-without-semicolon.html
@@ -0,0 +1,90 @@ +<html> +<head> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + var formattedStyle; + + TestRunner.cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetChanged, onStyleSheetChanged, this); + + function onStyleSheetChanged(event) { + if (!event.data || !event.data.edit) + return; + formattedStyle.rebase(event.data.edit); + } + + TestRunner.runTestSuite([ + function initFormattedStyle(next) { + function callback(matchedResult) { + if (!matchedResult) { + TestRunner.addResult('empty styles'); + TestRunner.completeTest(); + return; + } + + formattedStyle = matchedResult.nodeStyles()[1]; + next(); + } + + function nodeCallback(node) { + TestRunner.cssModel.matchedStylesPromise(node.id, false, false).then(callback); + } + ElementsTestRunner.selectNodeWithId('formatted', nodeCallback); + }, + + function testFormattedDisableLast(next) { + formattedStyle.allProperties()[1].setDisabled(true).then(dumpFormattedAndCallNext.bind(null, next)); + }, + + function testFormattedInsertEnd(next) { + formattedStyle.insertPropertyAt(2, 'endProperty', 'endValue', dumpFormattedAndCallNext.bind(null, next)); + }, + + function testFormattedEnable(next) { + formattedStyle.allProperties()[1].setDisabled(false).then(dumpFormattedAndCallNext.bind(null, next)); + }, + ]); + + // Data dumping + + function dumpFormattedAndCallNext(next, success) { + if (!success) { + TestRunner.addResult('error: operation failed.'); + TestRunner.completeTest(); + return; + } + + dumpStyle(formattedStyle); + if (next) + next(); + } + + function dumpStyle(style) { + if (!style) + return; + TestRunner.addResult('raw cssText:'); + TestRunner.addResult('{' + style.cssText + '}'); + } +} +</script> + +<style> + +#formatted { + color: red; + margin: 0 +} + +</style> +</head> + +<body id="mainBody" onload="runTest()"> +<p> +Verifies that formatter adds a semicolon when enabling property. +</p> +<div id="formatted">Formatted</div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/do-not-rebuild-styles-on-every-change-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/do-not-rebuild-styles-on-every-change-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/do-not-rebuild-styles-on-every-change-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/do-not-rebuild-styles-on-every-change-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/do-not-rebuild-styles-on-every-change.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/do-not-rebuild-styles-on-every-change.html new file mode 100644 index 0000000..17c43a4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/do-not-rebuild-styles-on-every-change.html
@@ -0,0 +1,55 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<div id="parent"> + <div id=foo><div id="child"></div></div> + <div id="sibling"><div id="child-of-sibling"></div></div> +</div> +<script> + +function modify(id) +{ + document.getElementById(id).setAttribute("fake", "modified"); +} + +function test() { + TestRunner.runTestSuite([ + function setupTest(next) { + ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('foo', didSelectElement); + + function didSelectElement() { + TestRunner.addSniffer( + Elements.StylesSidebarPane.prototype, 'update', + TestRunner.addResult.bind(InspectorTest, 'Requested StyleSidebarPane update'), true); + next(); + } + }, + + function testModifySibling(next) { + TestRunner.evaluateInPage('modify("sibling")', next); + }, + + function testModifySiblingChild(next) { + TestRunner.evaluateInPage('modify("child-of-sibling")', next); + }, + + function testModifyParent(next) { + TestRunner.evaluateInPage('modify("parent")', next); + }, + + function testModifyChild(next) { + TestRunner.evaluateInPage('modify("child")', next); + } + ]); +}; + +</script> + +</head> + +<body onload="runTest()"> +<p>Tests show that ssp isn't rebuild on every dom mutation</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/inline-style-sourcemap-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/inline-style-sourcemap-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/inline-style-sourcemap-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/inline-style-sourcemap-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/inline-style-sourcemap.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/inline-style-sourcemap.html new file mode 100644 index 0000000..b8c51fca --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/inline-style-sourcemap.html
@@ -0,0 +1,39 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function embedInlineStyleSheet() +{ + var style = document.createElement("style"); + style.type = "text/css"; + style.textContent = document.querySelector(".stylesheet-text").textContent; + document.head.appendChild(style); +} + +function test() { + SDK.targetManager.addModelListener(SDK.CSSModel, SDK.CSSModel.Events.StyleSheetAdded, function() {}); + TestRunner.evaluateInPage('embedInlineStyleSheet()', onEvaluated); + + function onEvaluated() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspect', onSelected); + } + + function onSelected() { + ElementsTestRunner.dumpSelectedElementStyles(true, false, false); + TestRunner.completeTest(); + } +}; + +</script> + +</head> + +<body id="inspect" onload="runTest()"> +<p>Verify that inline style sourceMappingURL is resolved properly.</p> +<pre class="stylesheet-text">.red,body{color:red}body{background-color:red} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1peGluLmxlc3MiLCJ0ZXN0Lmxlc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsS0NJQSxLREhFLE1BQUEsSUNHRixLQUVFLGlCQUFBIn0=*/</pre> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/keyframes-source-offsets-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/keyframes-source-offsets-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/keyframes-source-offsets-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/keyframes-source-offsets-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/keyframes-source-offsets.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/keyframes-source-offsets.html new file mode 100644 index 0000000..315f8b0a --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/keyframes-source-offsets.html
@@ -0,0 +1,73 @@ +<html> +<head> + +<link rel="stylesheet" href="../styles/resources/keyframes.css"> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<style> +@keyframes animName { + from, 20% { + height: 200px; + color: red; + } + to { + height: 500px; + } +} +</style> +<script> + +function test() { + function dumpRule(rule) { + TestRunner.addResult( + '\n' + rule.animationName.text + ' @' + ElementsTestRunner.rangeText(rule.animationName.range)); + for (var keyframe of rule.keyframes) { + TestRunner.addResult( + keyframe.keyText.text + ' @' + ElementsTestRunner.rangeText(keyframe.keyText.range) + ' {} @' + + ElementsTestRunner.rangeText(keyframe.style.range)); + var allProperties = keyframe.style.cssProperties; + for (var i = 0; i < allProperties.length; ++i) { + var property = allProperties[i]; + if (!property.range) + continue; + TestRunner.addResult( + property.name + ':' + property.value + (property.important ? ' !important' : '') + + (('parsedOk' in property) ? ' non-parsed' : '') + ' @' + ElementsTestRunner.rangeText(property.range)); + } + } + } + + ElementsTestRunner.selectNodeWithId('element', step1); + + async function step1(node) { + var response = await TestRunner.CSSAgent.invoke_getMatchedStylesForNode({nodeId: node.id}); + + for (var animation of response.cssKeyframesRules) + dumpRule(animation); + + TestRunner.addResult('\n>> Modifying keyframe rule'); + var style = new SDK.CSSStyleDeclaration( + TestRunner.cssModel, null, response.cssKeyframesRules[1].keyframes[0].style, + SDK.CSSStyleDeclaration.Type.Regular); + await style.setText('width: 123px'); + + response = await TestRunner.CSSAgent.invoke_getMatchedStylesForNode({nodeId: node.id}); + + for (var animation of response.cssKeyframesRules) + dumpRule(animation); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<div id="element"></div> +<p> +Tests that proper data and start/end offset positions are reported for CSS keyframes. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/resources/styles-do-not-detach-sourcemap-on-edits.css b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/resources/styles-do-not-detach-sourcemap-on-edits.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/resources/styles-do-not-detach-sourcemap-on-edits.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/resources/styles-do-not-detach-sourcemap-on-edits.css
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/resources/styles-do-not-detach-sourcemap-on-edits.css.map b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/resources/styles-do-not-detach-sourcemap-on-edits.css.map similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/resources/styles-do-not-detach-sourcemap-on-edits.css.map rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/resources/styles-do-not-detach-sourcemap-on-edits.css.map
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/resources/styles-do-not-detach-sourcemap-on-edits.scss b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/resources/styles-do-not-detach-sourcemap-on-edits.scss similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/resources/styles-do-not-detach-sourcemap-on-edits.scss rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/resources/styles-do-not-detach-sourcemap-on-edits.scss
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/resources/styles-new-API-1.css b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/resources/styles-new-API-1.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/resources/styles-new-API-1.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/resources/styles-new-API-1.css
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/resources/styles-new-API-2.css b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/resources/styles-new-API-2.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/resources/styles-new-API-2.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/resources/styles-new-API-2.css
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/resources/styles-new-API.css b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/resources/styles-new-API.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/resources/styles-new-API.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/resources/styles-new-API.css
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/resources/styles-rerequest-sourcemap-on-watchdog.css b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/resources/styles-rerequest-sourcemap-on-watchdog.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/resources/styles-rerequest-sourcemap-on-watchdog.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/resources/styles-rerequest-sourcemap-on-watchdog.css
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/resources/styles-rerequest-sourcemap-on-watchdog.css.map b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/resources/styles-rerequest-sourcemap-on-watchdog.css.map similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/resources/styles-rerequest-sourcemap-on-watchdog.css.map rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/resources/styles-rerequest-sourcemap-on-watchdog.css.map
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/resources/styles-rerequest-sourcemap-on-watchdog.scss b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/resources/styles-rerequest-sourcemap-on-watchdog.scss similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/resources/styles-rerequest-sourcemap-on-watchdog.scss rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/resources/styles-rerequest-sourcemap-on-watchdog.scss
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-update-links.js b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/resources/styles-update-links.js similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-update-links.js rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/resources/styles-update-links.js
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/style-update-during-selector-edit-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/style-update-during-selector-edit-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/style-update-during-selector-edit-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/style-update-during-selector-edit-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/style-update-during-selector-edit.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/style-update-during-selector-edit.html new file mode 100644 index 0000000..99f4bb59 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/style-update-during-selector-edit.html
@@ -0,0 +1,66 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function addStyleClass() +{ + document.getElementById("inspected").className = "new-class"; +} + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); + var treeOutline = ElementsTestRunner.firstElementsTreeOutline(); + var seenRebuildUpdate; + var seenAttrModified; + var modifiedAttrNodes = []; + + function attributeChanged(event) { + if (event.data.node === treeOutline.selectedDOMNode()) + seenAttrModified = true; + } + + function rebuildUpdate() { + if (UI.panels.elements._stylesWidget.node === treeOutline.selectedDOMNode()) + seenRebuildUpdate = true; + } + + function step1() { + TestRunner.addSniffer(Elements.StylesSidebarPane.prototype, 'doUpdate', rebuildUpdate); + TestRunner.domModel.addEventListener(SDK.DOMModel.Events.AttrModified, attributeChanged, this); + // Click "Add new rule". + UI.panels.elements._stylesWidget.contentElement.querySelector('.styles-pane-toolbar') + .shadowRoot.querySelector('.largeicon-add') + .click(); + TestRunner.evaluateInPage('addStyleClass()', step2); + } + + function step2() { + if (!seenAttrModified) + TestRunner.addResult('FAIL: AttrModified event not received.'); + else if (seenRebuildUpdate) + TestRunner.addResult('FAIL: Styles pane updated while a selector editor was active.'); + else + TestRunner.addResult('SUCCESS: Styles pane not updated.'); + TestRunner.completeTest(); + } +} + +</script> +<style> +.new-class { + color: red; +} +</style> +</head> + +<body onload="runTest()"> +<p> +Tests that modification of element styles while editing a selector does not commit the editor. +</p> + +<div id="inspected"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-do-not-detach-sourcemap-on-edits-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-do-not-detach-sourcemap-on-edits-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-do-not-detach-sourcemap-on-edits-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-do-not-detach-sourcemap-on-edits-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-do-not-detach-sourcemap-on-edits.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-do-not-detach-sourcemap-on-edits.html new file mode 100644 index 0000000..90e5fc7e --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-do-not-detach-sourcemap-on-edits.html
@@ -0,0 +1,82 @@ +<html> +<head> + +<link rel="stylesheet" href="./resources/styles-do-not-detach-sourcemap-on-edits.css"> +<script src="../../../inspector/debugger-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../../inspector/inspector-test.js"></script> +<script> + +function test() { + SourcesTestRunner.waitForScriptSource('styles-do-not-detach-sourcemap-on-edits.scss', onSourceMapLoaded); + + function onSourceMapLoaded() { + ElementsTestRunner.selectNodeAndWaitForStyles('container', onNodeSelected); + } + + function onNodeSelected() { + TestRunner.runTestSuite(testSuite); + } + + var testSuite = [ + function editProperty(next) { + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + + var treeItem = ElementsTestRunner.getMatchedStylePropertyTreeItem('color'); + treeItem.applyStyleText('NAME: VALUE', true); + ElementsTestRunner.waitForStyles('container', next); + }, + + function editSelector(next) { + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + + var section = ElementsTestRunner.firstMatchedStyleSection(); + section.startEditingSelector(); + section._selectorElement.textContent = '#container, SELECTOR'; + ElementsTestRunner.waitForSelectorCommitted(next); + section._selectorElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + }, + + function editMedia(next) { + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + + var section = ElementsTestRunner.firstMatchedStyleSection(); + var mediaTextElement = ElementsTestRunner.firstMediaTextElementInSection(section); + mediaTextElement.click(); + mediaTextElement.textContent = '(max-width: 9999999px)'; + ElementsTestRunner.waitForMediaTextCommitted(next); + mediaTextElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + }, + + function addRule(next) { + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + + var styleSheetHeader = TestRunner.cssModel.styleSheetHeaders().find( + header => header.resourceURL().indexOf('styles-do-not-detach-sourcemap-on-edits.css') !== -1); + if (!styleSheetHeader) { + TestRunner.addResult('ERROR: failed to find style sheet!'); + TestRunner.completeTest(); + return; + } + ElementsTestRunner.addNewRuleInStyleSheet(styleSheetHeader, 'NEW-RULE', next); + }, + + function finish(next) { + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + next(); + }, + ]; +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that source map is not detached on edits. crbug.com/257778 +</p> + +<div id="container">container.</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-edit-property-after-invalid-rule-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-edit-property-after-invalid-rule-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-edit-property-after-invalid-rule-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-edit-property-after-invalid-rule-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-edit-property-after-invalid-rule.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-edit-property-after-invalid-rule.html new file mode 100644 index 0000000..ef22fac --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-edit-property-after-invalid-rule.html
@@ -0,0 +1,49 @@ +<html> +<head> + +<style type="text/css" media="screen"> +/* Invalid selector */ +.navbar-search .search-query:-moz-placeholder { + color: #cccccc; +} + +#container { + padding: 15px; +} +</style> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('container', step1); + + function step1() { + TestRunner.addResult('Initial value'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + + var treeItem = ElementsTestRunner.getMatchedStylePropertyTreeItem('padding'); + treeItem.applyStyleText('padding: 20px', false); + ElementsTestRunner.waitForStyles('container', step2); + } + + function step2() { + TestRunner.addResult('After changing property'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that proper source lines are reported for the styles after unrecognizer / invalid selector. +</p> + +<div id="container"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-formatting-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-formatting-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-formatting-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-formatting-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-formatting.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-formatting.html new file mode 100644 index 0000000..b42d7e3f --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-formatting.html
@@ -0,0 +1,242 @@ +<html> +<head> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + var formattedStyle; + var unformattedStyle; + + + TestRunner.cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetChanged, onStyleSheetChanged, this); + + function onStyleSheetChanged(event) { + if (!event.data || !event.data.edit) + return; + if (formattedStyle) + formattedStyle.rebase(event.data.edit); + if (unformattedStyle) + unformattedStyle.rebase(event.data.edit); + } + + TestRunner.runTestSuite([ + function initFormattedStyle(next) { + function callback(matchedResult) { + if (!matchedResult) { + TestRunner.addResult('empty styles'); + TestRunner.completeTest(); + return; + } + + formattedStyle = matchedResult.nodeStyles()[1]; + next(); + } + + function nodeCallback(node) { + TestRunner.cssModel.matchedStylesPromise(node.id).then(callback); + } + ElementsTestRunner.selectNodeWithId('formatted', nodeCallback); + }, + + function testFormattedInsertStart(next) { + formattedStyle.insertPropertyAt( + 0, 'firstProperty', 'rgba(1, 2, 3, 0)', dumpFormattedAndCallNext.bind(null, next)); + }, + + function testFormattedRemoveStart(next) { + formattedStyle.allProperties()[0].setText('', true, true).then(dumpFormattedAndCallNext.bind(null, next)); + }, + + function testFormattedInsertMiddle(next) { + formattedStyle.insertPropertyAt( + 1, 'middleProperty', 'middleValue /* comment */', dumpFormattedAndCallNext.bind(null, next)); + }, + + function testFormattedRemoveMiddle(next) { + formattedStyle.allProperties()[1].setText('', true, true).then(dumpFormattedAndCallNext.bind(null, next)); + }, + + function testFormattedInsertEnd(next) { + formattedStyle.insertPropertyAt(3, 'endProperty', 'endValue', dumpFormattedAndCallNext.bind(null, next)); + }, + + function testFormattedRemoveEnd(next) { + formattedStyle.allProperties()[3].setText('', true, true).then(dumpFormattedAndCallNext.bind(null, next)); + }, + + function testFormattedDisableStart(next) { + formattedStyle.allProperties()[0].setDisabled(true).then(dumpFormattedAndCallNext.bind(null, next)); + }, + + function testFormattedDisableEnd(next) { + formattedStyle.allProperties()[2].setDisabled(true).then(dumpFormattedAndCallNext.bind(null, next)); + }, + + function testFormattedDisableMiddle(next) { + formattedStyle.allProperties()[1].setDisabled(true).then(dumpFormattedAndCallNext.bind(null, next)); + }, + + function testFormattedInsert1(next) { + formattedStyle.insertPropertyAt(0, 'propA', 'valA', dumpFormattedAndCallNext.bind(null, next)); + }, + + function testFormattedInsert2(next) { + formattedStyle.insertPropertyAt(2, 'propB', 'valB', dumpFormattedAndCallNext.bind(null, next)); + }, + + function testFormattedInsert3(next) { + formattedStyle.insertPropertyAt(5, 'propC', 'valC', dumpFormattedAndCallNext.bind(null, next)); + }, + + function testFormattedEnableStart(next) { + formattedStyle.allProperties()[1].setDisabled(false).then(dumpFormattedAndCallNext.bind(null, next)); + }, + + function testFormattedEnableEnd(next) { + formattedStyle.allProperties()[4].setDisabled(false).then(dumpFormattedAndCallNext.bind(null, next)); + }, + + function testFormattedEnableMiddle(next) { + formattedStyle.allProperties()[3].setDisabled(false).then(dumpFormattedAndCallNext.bind(null, next)); + }, + + function testFormattedWithMeta(next) { + formattedStyle.insertPropertyAt(0, '-webkit-animation', 'linear', dumpFormattedAndCallNext.bind(null, next)); + }, + + function testFormattedWithMetaValue(next) { + formattedStyle.insertPropertyAt(1, 'unicode-bidi', 'webkit-isolate', dumpFormattedAndCallNext.bind(null, next)); + }, + + function testFormattedWithAtoms(next) { + formattedStyle.insertPropertyAt( + 0, 'border-left', '1px solid rgb(1,1,1)', dumpFormattedAndCallNext.bind(null, next)); + }, + + function initUnformattedStyle(next) { + function callback(matchedResult) { + if (!matchedResult) { + TestRunner.addResult('empty styles'); + TestRunner.completeTest(); + return; + } + + unformattedStyle = matchedResult.nodeStyles()[1]; + next(); + } + + function nodeCallback(node) { + TestRunner.cssModel.matchedStylesPromise(node.id).then(callback); + } + ElementsTestRunner.selectNodeWithId('unformatted', nodeCallback); + }, + + function testUnformattedInsertStart(next) { + unformattedStyle.insertPropertyAt(0, 'firstProperty', 'firstValue', dumpUnformattedAndCallNext.bind(null, next)); + }, + + function testUnformattedRemoveStart(next) { + unformattedStyle.allProperties()[0].setText('', true, true).then(dumpUnformattedAndCallNext.bind(null, next)); + }, + + function testUnformattedInsertMiddle(next) { + unformattedStyle.insertPropertyAt( + 1, 'middleProperty', 'middleValue', dumpUnformattedAndCallNext.bind(null, next)); + }, + + function testUnformattedRemoveMiddle(next) { + unformattedStyle.allProperties()[1].setText('', true, true).then(dumpUnformattedAndCallNext.bind(null, next)); + }, + + function testUnformattedInsertEnd(next) { + unformattedStyle.insertPropertyAt(3, 'endProperty', 'endValue', dumpUnformattedAndCallNext.bind(null, next)); + }, + + function testUnformattedRemoveEnd(next) { + unformattedStyle.allProperties()[3].setText('', true, true).then(dumpUnformattedAndCallNext.bind(null, next)); + }, + + function testUnformattedDisableStart(next) { + unformattedStyle.allProperties()[0].setDisabled(true).then(dumpUnformattedAndCallNext.bind(null, next)); + }, + + function testUnformattedDisableEnd(next) { + unformattedStyle.allProperties()[2].setDisabled(true).then(dumpUnformattedAndCallNext.bind(null, next)); + }, + + function testUnformattedDisableMiddle(next) { + unformattedStyle.allProperties()[1].setDisabled(true).then(dumpUnformattedAndCallNext.bind(null, next)); + }, + + function testUnformattedEnableStart(next) { + unformattedStyle.allProperties()[0].setDisabled(false).then(dumpUnformattedAndCallNext.bind(null, next)); + }, + + function testUnformattedEnableEnd(next) { + unformattedStyle.allProperties()[2].setDisabled(false).then(dumpUnformattedAndCallNext.bind(null, next)); + }, + + function testUnformattedEnableMiddle(next) { + unformattedStyle.allProperties()[1].setDisabled(false).then(dumpUnformattedAndCallNext.bind(null, next)); + } + ]); + + // Data dumping + + function dumpFormattedAndCallNext(next, success) { + if (!success) { + TestRunner.addResult('error: operation failed.'); + TestRunner.completeTest(); + return; + } + + dumpStyle(formattedStyle); + if (next) + next(); + } + + function dumpUnformattedAndCallNext(next, success) { + if (!success) { + TestRunner.addResult('error: operation failed.'); + TestRunner.completeTest(); + return; + } + + dumpStyle(unformattedStyle); + if (next) + next(); + } + + function dumpStyle(style) { + if (!style) + return; + TestRunner.addResult('raw cssText:'); + TestRunner.addResult('{' + style.cssText + '}'); + } +} +</script> + +<style> + +#formatted { + /* leading comment */ + color: red; /* comment1 */ + zoom: 1;/* comment2 */ /* like: property */ + padding: 0 +} + +#unformatted {/*leading comment*/color:red;zoom:1;padding:0;} + +</style> +</head> + +<body id="mainBody" onload="runTest()"> +<p> +Tests that InspectorCSSAgent formats the CSS style text based on the CSS model modifications. +</p> +<div id="formatted">Formatted</div> +<div id="unformatted">Unformatted</div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-history-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-history-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-history-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-history-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-history.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-history.html new file mode 100644 index 0000000..49329f5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-history.html
@@ -0,0 +1,129 @@ +<html> +<head> + +<link rel="stylesheet" href="../styles/resources/styles-history.css"> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../../inspector/resources-test.js"></script> +<script> + +function test() { + ApplicationTestRunner.runAfterCachedResourcesProcessed(runTestSuite); + + var uiSourceCode; + + function runTestSuite() { + TestRunner.runTestSuite([ + function testSetUp(next) { + function visitUISourceCodes(currentUISourceCode) { + if (currentUISourceCode.url().indexOf('styles-history.css') === -1) + return; + uiSourceCode = currentUISourceCode; + next(); + } + Workspace.workspace.uiSourceCodes().forEach(visitUISourceCodes); + }, + + function testSetResourceContentMinor(next) { + TestRunner.addSniffer(Bindings.StyleFile.prototype, '_styleFileSyncedForTest', styleUpdatedMinor); + uiSourceCode.setWorkingCopy('body {\n margin: 15px;\n padding: 10px;\n}'); + + function styleUpdatedMinor() { + dumpHistory(next)(); + } + }, + + function testSetResourceContentMajor(next) { + TestRunner.addSniffer(Bindings.StyleFile.prototype, '_styleFileSyncedForTest', styleUpdatedMinor); + uiSourceCode.setWorkingCopy('body {\n margin: 20px;\n padding: 10px;\n}'); + + function styleUpdatedMinor() { + TestRunner.addSniffer(Bindings.StyleFile.prototype, '_styleFileSyncedForTest', styleUpdatedMajor); + uiSourceCode.commitWorkingCopy(function() {}); + + function styleUpdatedMajor() { + dumpHistory(next)(); + } + } + }, + + function testSetContentViaModelMinor(next) { + styleSheetForResource(step1); + + function step1(style) { + var property = getLiveProperty(style, 'margin'); + property.setText('margin:25px;', false, true).then(dumpHistory(next)); + } + }, + + function testSetContentViaModelMajor(next) { + styleSheetForResource(step1); + + function step1(style) { + var property = getLiveProperty(style, 'margin'); + TestRunner.addSniffer(Workspace.UISourceCode.prototype, 'addRevision', dumpHistory(next)); + property.setText('margin:30px;', true, true); + } + } + ]); + } + + function styleSheetForResource(callback) { + ElementsTestRunner.nodeWithId('mainBody', onNodeSelected); + + function onNodeSelected(node) { + TestRunner.CSSAgent.invoke_getMatchedStylesForNode({nodeId: node.id}).then(onMatchedStylesForNode); + } + + function onMatchedStylesForNode(response) { + var error = response[Protocol.Error]; + if (error) { + TestRunner.addResult('error: ' + error); + TestRunner.completeTest(); + return; + } + for (var matchedStyle of response.matchedCSSRules) { + var rule = matchedStyle.rule; + if (rule.origin !== 'regular') + continue; + callback(new SDK.CSSStyleDeclaration(TestRunner.cssModel, null, rule.style)); + return; + } + TestRunner.addResult('error: did not find any regular rule'); + TestRunner.completeTest(); + } + } + + function dumpHistory(next) { + function result() { + TestRunner.addResult('History length: ' + uiSourceCode.history().length); + for (var i = 0; i < uiSourceCode.history().length; ++i) { + TestRunner.addResult('Item ' + i + ':'); + TestRunner.addResult(uiSourceCode.history()[i].content); + } + next(); + } + return result; + } + + function getLiveProperty(style, name) { + for (var property of style.allProperties()) { + if (!property.activeInStyle()) + continue; + if (property.name === name) + return property; + } + return null; + } +} + +</script> +</head> + +<body id="mainBody" onload="runTest()"> +<p> +Tests resources panel history. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-iframe-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-iframe-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-iframe-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-iframe-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-iframe.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-iframe.html new file mode 100644 index 0000000..ad0d3fd --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-iframe.html
@@ -0,0 +1,51 @@ +<html> +<head> + +<style type="text/css" media="screen"> + #main { background:blue; } + +/*# sourceURL=styles-iframe.html*/ +</style> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function loadIframe() +{ + var iframe = document.createElement("iframe"); + iframe.src = "../styles/resources/styles-iframe-data.html"; + document.getElementById("main").appendChild(iframe); +} + +function test() { + TestRunner.evaluateInPage('loadIframe()'); + ConsoleTestRunner.addConsoleSniffer(step0); + + function step0() { + ElementsTestRunner.selectNodeAndWaitForStyles('main', step1); + } + + function step1() { + TestRunner.addResult('Main frame style:'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + ElementsTestRunner.selectNodeAndWaitForStyles('iframeBody', step2); + } + + function step2() { + TestRunner.addResult('iframe style:'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + TestRunner.completeTest(); + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that proper (and different) styles are returned for body elements of main document and iframe. +</p> + +<div id="main"></div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-inline-element-style-changes-should-not-force-style-recalc-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-inline-element-style-changes-should-not-force-style-recalc-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-inline-element-style-changes-should-not-force-style-recalc-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-inline-element-style-changes-should-not-force-style-recalc-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-inline-element-style-changes-should-not-force-style-recalc.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-inline-element-style-changes-should-not-force-style-recalc.html new file mode 100644 index 0000000..b5ec50f --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-inline-element-style-changes-should-not-force-style-recalc.html
@@ -0,0 +1,27 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/timeline-test.js"></script> + +<script> + +function performActions() +{ + var testDiv = document.querySelector("#testDiv"); + for (var i = 0; i < 20; ++i) + testDiv.style.visibility = ""; +} + +function test() { + UI.context.setFlavor(Timeline.TimelinePanel, UI.panels.timeline); + PerformanceTestRunner.performActionsAndPrint('performActions()', 'RecalculateStyles'); +} + +</script> +</head> + +<body onload="runTest()"> +<p>Tests that inspector doesn't force styles recalc on operations with inline element styles that result in no changes.</p> +<div id="testDiv" style="color: green">testDiv</div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-invalid-color-values-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-invalid-color-values-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-invalid-color-values-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-invalid-color-values-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-invalid-color-values.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-invalid-color-values.html new file mode 100644 index 0000000..f5e8be5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-invalid-color-values.html
@@ -0,0 +1,93 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> +function test() { + var colors = [ + // Each of these is red. Some may need to be clipped to [0, 255]. + 'red', '#F00', '#F00F', '#FF0000', '#FF0000FF', 'rgb(255,0,0)', + 'rgb(300,0,0)', // clipped to rgb(255,0,0) + 'rgb(255,-10,0)', // clipped to rgb(255,0,0) + 'rgb(110%, 0%, 0%)', // clipped to rgb(100%,0%,0%) + + // Each of these are valid + 'rgba(0,0,0,0.5)', 'hsl(-120, 100%, 50%)', + 'hsl(-120, 200%, 200%)', // clipped to hsl(240,100%,100%) + 'hsl(-120, -200%, -200%)', // clipped to hsl(240,100%,100%) + 'hsla(-120, -200%, -200%, -5)', // clipped to hsla(0,0%,0%,0) + 'hsla(240,100%,50%,0.05)', 'hsl(200.5,0%,50%)', 'hsla(200,1.5%,50%,1)', 'rgba(0,0,0,.5)', 'hsla(.5,.5%,.5%,.5)', + 'hsla(100.5,50.5%,50.5%,.5)', + + // Each of these has their alpha clipped [0.0, 1.0]. + 'rgba(255, 0, 0, -5)', // clipped to rgba(255,0,0,0) + 'rgba(255, 0, 0, 5)', // clipped to rgba(255,0,0,1) + ]; + + var invalidColors = [ + // An invalid color, eg a value for a shorthand like 'border' which can have a color + 'none', '#00000', '#ggg', 'rgb(a,b,c)', 'rgb(a,b,c,d)', 'rgb(1,1,1.2)', 'rgba(0,0,0,1%)', 'rgba(0,0,0,)', + 'hsl(0,0,0)', 'hsl(0%, 0%, 0%)', 'hsla(0,,0,1)', 'hsl(0, 0%, 0)', 'hsl(a,b,c)', 'hsla(0,0,0,0)', 'hsla' + ]; + + TestRunner.runTestSuite([ + function testColors(next) { + for (var i = 0; i < colors.length; ++i) + dumpColorRepresentationsForColor(colors[i]); + next(); + }, + function testInvalidColors(next) { + for (var i = 0; i < invalidColors.length; ++i) + dumpErrorsForInvalidColor(invalidColors[i]); + next(); + }, + ]); + + function dumpErrorsForInvalidColor(colorString) { + var color = Common.Color.parse(colorString); + if (!color) { + TestRunner.addResult(''); + TestRunner.addResult('SUCCESS: parsed invalid color ' + colorString + ' to null'); + } else { + TestRunner.addResult(''); + TestRunner.addResult('FAIL: invalid color ' + colorString + ' did not parse to to null'); + } + } + + function dumpColorRepresentationsForColor(colorString) { + var color = Common.Color.parse(colorString); + if (!color) + return; + + TestRunner.addResult(''); + TestRunner.addResult('color: ' + colorString); + TestRunner.addResult(' simple: ' + !color.hasAlpha()); + var cf = Common.Color.Format; + for (var colorFormatKey in cf) { + var colorFormat = cf[colorFormatKey]; + // Simple colors do not have RGBA and HSLA representations. + if (!color.hasAlpha() && (colorFormat === cf.RGBA || colorFormat === cf.HSLA)) + continue; + // Advanced colors do not have HEX representations. + if (color.hasAlpha() && (colorFormat === cf.ShortHEX || colorFormat === cf.HEX)) + continue; + // If there is no ShortHEX then skip it. + if (colorFormat === cf.ShortHEX && color.detectHEXFormat() !== cf.ShortHEX) + continue; + // If there is no nickname, then skip it. + if (colorFormat === cf.Nickname && !color.nickname()) + continue; + TestRunner.addResult(' ' + colorFormat + ': ' + color.asString(colorFormat)); + } + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that the displayed string for colors correctly handles clipped CSS values and RGB percentages. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-keyframes-cssom-injected-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-keyframes-cssom-injected-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-keyframes-cssom-injected-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-keyframes-cssom-injected-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-keyframes-cssom-injected.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-keyframes-cssom-injected.html new file mode 100644 index 0000000..6240b9d --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-keyframes-cssom-injected.html
@@ -0,0 +1,28 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<style> +</style> +<script> +function injectAnimation() +{ + var styleSheet = document.styleSheets[0]; + styleSheet.insertRule("@keyframes injected { 0% {opacity:0} 100% {opacity:1} }", 0); +} + +function test() { + TestRunner.evaluateInPage('injectAnimation()'); + ElementsTestRunner.selectNodeAndWaitForStyles('element', TestRunner.completeTest.bind(InspectorTest)); +} +</script> +</head> + +<body onload="runTest()"> +<div id="element" style="animation: injected 1s infinite"></div> +<p> +Tests that inspecting keyframes injected via CSSOM doesn't crash. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-keyframes-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-keyframes-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-keyframes-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-keyframes-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-keyframes.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-keyframes.html new file mode 100644 index 0000000..1fd6e34 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-keyframes.html
@@ -0,0 +1,74 @@ +<html> +<head> + +<link rel="stylesheet" href="../styles/resources/keyframes.css"> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<style> +@keyframes animName { + from, 20% { + margin-left: 200px; + color: red; + } + to { + margin-left: 500px; + } +} +</style> +<script> +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('element', step1); + + function step1() { + TestRunner.addResult('=== Before key modification ==='); + ElementsTestRunner.dumpSelectedElementStyles(true); + var section = UI.panels.elements._stylesWidget._sectionBlocks[1].sections[1]; + section.startEditingSelector(); + section._selectorElement.textContent = '1%'; + section._selectorElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + ElementsTestRunner.waitForSelectorCommitted(step2); + } + + function step2() { + TestRunner.addResult('=== After key modification ==='); + ElementsTestRunner.dumpSelectedElementStyles(true); + TestRunner.domModel.undo(); + ElementsTestRunner.waitForStyles('element', step3, true); + } + + function step3() { + TestRunner.addResult('=== After undo ==='); + ElementsTestRunner.dumpSelectedElementStyles(true); + + TestRunner.domModel.redo(); + ElementsTestRunner.waitForStyles('element', step4, true); + } + + function step4() { + TestRunner.addResult('=== After redo ==='); + ElementsTestRunner.dumpSelectedElementStyles(true); + var section = UI.panels.elements._stylesWidget._sectionBlocks[1].sections[1]; + section.startEditingSelector(); + section._selectorElement.textContent = '1% /*'; + section._selectorElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + ElementsTestRunner.waitForSelectorCommitted(step5); + } + + function step5() { + TestRunner.addResult('=== After invalid key modification ==='); + ElementsTestRunner.dumpSelectedElementStyles(true); + TestRunner.completeTest(); + } +} +</script> +</head> + +<body onload="runTest()"> +<div id="element"></div> +<p> +Tests that keyframes are shown in styles pane. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-live-locations-leak-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-live-locations-leak-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-live-locations-leak-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-live-locations-leak-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-live-locations-leak.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-live-locations-leak.html new file mode 100644 index 0000000..56eda86b --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-live-locations-leak.html
@@ -0,0 +1,81 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<style> +#first { + color: blue; +} + +#second { + line-height: 1em; + border: 1px solid black; +} + +#third { + margin: 1px 1px 0 0; + padding: 10px; + background-color: blue; + border: 1px solid black; +} +</style> +<script> +function test() { + var initialLiveLocationsCount; + TestRunner.runTestSuite([ + function selectInitialNode(next) { + ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('first', next); + }, + + function saveInitialLiveLocationsCount(next) { + initialLiveLocationsCount = countLiveLocations(); + next(); + }, + + function rebuildStylesSidebarPaneMultipleTimes(next) { + var elementsToSelect = ['second', 'third', 'second', 'first', 'third', 'first']; + function loopThroughElements() { + if (!elementsToSelect.length) { + next(); + return; + } + ElementsTestRunner.selectNodeAndWaitForStylesWithComputed(elementsToSelect.shift(), loopThroughElements); + } + loopThroughElements(); + }, + + function compareLiveLocationsCount(next) { + var liveLocationsCount = countLiveLocations(); + if (liveLocationsCount !== initialLiveLocationsCount) + TestRunner.addResult(String.sprintf( + 'ERROR: LiveLocations count is growing! Expected: %d found: %d', initialLiveLocationsCount, + liveLocationsCount)); + else + TestRunner.addResult('SUCCESS: LiveLocations count do not grow.'); + next(); + } + ]); + + function countLiveLocations() { + var locationsCount = 0; + var modelInfos = Bindings.cssWorkspaceBinding._modelToInfo.valuesArray(); + for (var modelInfo of modelInfos) + locationsCount += modelInfo._locations.valuesArray().length; + return locationsCount; + } +} + +</script> + +</head> + +<body onload="runTest()"> + +<p> +Tests that styles sidebar pane does not leak any LiveLocations. +</p> +<div id="first">First element to select</div> +<div id="second">Second element to select</div> +<div id="third">Second element to select</div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-new-API-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-new-API-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-new-API-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-new-API-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-new-API.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-new-API.html new file mode 100644 index 0000000..2a80162 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-new-API.html
@@ -0,0 +1,218 @@ +<html> +<head> + +<link rel="stylesheet" href="resources/styles-new-API.css"> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + var bodyId; + TestRunner.runTestSuite([ + function test_styles(next) { + function callback(styles) { + TestRunner.addResult(''); + TestRunner.addResult('=== Computed style property count for body ==='); + var propCount = styles.computedStyle.length; + TestRunner.addResult(propCount > 200 ? 'OK' : 'FAIL (' + propCount + ')'); + + TestRunner.addResult(''); + TestRunner.addResult('=== Matched rules for body ==='); + ElementsTestRunner.dumpRuleMatchesArray(styles.matchedCSSRules); + + TestRunner.addResult(''); + TestRunner.addResult('=== Pseudo rules for body ==='); + for (var i = 0; i < styles.pseudoElements.length; ++i) { + TestRunner.addResult('PseudoType=' + styles.pseudoElements[i].pseudoType); + ElementsTestRunner.dumpRuleMatchesArray(styles.pseudoElements[i].matches); + } + + TestRunner.addResult(''); + TestRunner.addResult('=== Inherited styles for body ==='); + for (var i = 0; i < styles.inherited.length; ++i) { + TestRunner.addResult('Level=' + (i + 1)); + ElementsTestRunner.dumpStyle(styles.inherited[i].inlineStyle); + ElementsTestRunner.dumpRuleMatchesArray(styles.inherited[i].matchedCSSRules); + } + + TestRunner.addResult(''); + TestRunner.addResult('=== Inline style for body ==='); + ElementsTestRunner.dumpStyle(styles.inlineStyle); + next(); + } + + var resultStyles = {}; + + function computedCallback(computedStyle) { + if (!computedStyle) { + TestRunner.addResult('Error'); + TestRunner.completeTest(); + return; + } + resultStyles.computedStyle = computedStyle; + } + + function matchedCallback(response) { + if (response[Protocol.Error]) { + TestRunner.addResult('error: ' + response[Protocol.Error]); + TestRunner.completeTest(); + return; + } + + resultStyles.inlineStyle = response.inlineStyle; + resultStyles.matchedCSSRules = response.matchedCSSRules; + resultStyles.pseudoElements = response.pseudoElements; + resultStyles.inherited = response.inherited; + } + + function nodeCallback(node) { + bodyId = node.id; + var promises = [ + TestRunner.CSSAgent.getComputedStyleForNode(node.id).then(computedCallback), + TestRunner.CSSAgent.invoke_getMatchedStylesForNode({nodeId: node.id}).then(matchedCallback) + ]; + Promise.all(promises).then(callback.bind(null, resultStyles)); + } + ElementsTestRunner.selectNodeWithId('mainBody', nodeCallback); + }, + + async function test_forcedState(next) { + TestRunner.CSSAgent.forcePseudoState(bodyId, ['hover']); + var response = await TestRunner.CSSAgent.invoke_getMatchedStylesForNode({nodeId: bodyId}); + + TestRunner.addResult('=== BODY with forced :hover ==='); + ElementsTestRunner.dumpRuleMatchesArray(response.matchedCSSRules); + TestRunner.CSSAgent.forcePseudoState(bodyId, ['hover']).then(next); + }, + + function test_textNodeComputedStyles(next) { + ElementsTestRunner.nodeWithId('toggle', nodeCallback); + + async function nodeCallback(node) { + var textNode = node.children()[0]; + if (textNode.nodeType() !== Node.TEXT_NODE) { + TestRunner.addResult('Failed to retrieve TextNode.'); + TestRunner.completeTest(); + return; + } + var computedStyle = await TestRunner.CSSAgent.getComputedStyleForNode(textNode.id); + if (!computedStyle) { + TestRunner.addResult('Error'); + return; + } + TestRunner.addResult(''); + TestRunner.addResult('=== Computed style property count for TextNode ==='); + var propCount = computedStyle.length; + TestRunner.addResult(propCount > 200 ? 'OK' : 'FAIL (' + propCount + ')'); + next(); + } + }, + + function test_tableStyles(next) { + async function nodeCallback(node) { + var response = await TestRunner.CSSAgent.invoke_getInlineStylesForNode({nodeId: node.id}); + if (response[Protocol.Error]) { + TestRunner.addResult('error: ' + response[Protocol.Error]); + next(); + return; + } + TestRunner.addResult(''); + TestRunner.addResult('=== Attributes style for table ==='); + ElementsTestRunner.dumpStyle(response.attributesStyle); + + var result = await TestRunner.CSSAgent.getStyleSheetText(response.inlineStyle.styleSheetId); + + TestRunner.addResult(''); + TestRunner.addResult('=== Stylesheet-for-inline-style text ==='); + TestRunner.addResult(result || ''); + + await TestRunner.CSSAgent.setStyleSheetText(response.inlineStyle.styleSheetId, ''); + + TestRunner.addResult(''); + TestRunner.addResult('=== Stylesheet-for-inline-style modification result ==='); + TestRunner.addResult(null); + next(); + } + ElementsTestRunner.nodeWithId('thetable', nodeCallback); + }, + + async function test_addRule(next) { + var frameId = TestRunner.resourceTreeModel.mainFrame.id; + var styleSheetId = await TestRunner.CSSAgent.createStyleSheet(frameId); + if (!styleSheetId) { + TestRunner.addResult('Error in CSS.createStyleSheet'); + next(); + return; + } + + var range = {startLine: 0, startColumn: 0, endLine: 0, endColumn: 0}; + + var rule = await TestRunner.CSSAgent.addRule(styleSheetId, 'body {}', range); + if (!rule) { + TestRunner.addResult('Error in CSS.addRule'); + next(); + return; + } + + var style = await TestRunner.CSSAgent.setStyleTexts([{ + styleSheetId: rule.style.styleSheetId, + range: { + startLine: rule.style.range.startLine, + startColumn: rule.style.range.startColumn, + endLine: rule.style.range.startLine, + endColumn: rule.style.range.startColumn + }, + text: 'font-family: serif;' + }]); + if (!style) { + TestRunner.addResult('Error in CSS.setStyleTexts'); + next(); + return; + } + + var response = await TestRunner.CSSAgent.invoke_getMatchedStylesForNode({nodeId: bodyId}); + if (response[Protocol.Error]) { + TestRunner.addResult('error: ' + response[Protocol.Error]); + next(); + return; + } + + TestRunner.addResult(''); + TestRunner.addResult('=== Matched rules after rule added ==='); + ElementsTestRunner.dumpRuleMatchesArray(response.matchedCSSRules); + next(); + }, + ]); +} + +</script> + +<style> + +/* An inline stylesheet */ +body.mainpage { + text-decoration: none; /* at least one valid property is necessary for WebCore to match a rule */ + ;badproperty: 1badvalue1; +} + +body.mainpage { + prop1: val1; + prop2: val2; +} + +body:hover { + color: #CDE; +} +</style> +</head> + +<body id="mainBody" class="main1 main2 mainpage" onload="runTest()" style="font-weight: normal; width: 85%; background-image: url(bar.png)"> +<p> +Tests that InspectorCSSAgent API methods work as expected. +</p> +<table width="50%" id="thetable"> +</table> +<h1 id="toggle">H1</h1> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-overriden-properties-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-overriden-properties-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-overriden-properties-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-overriden-properties-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-overriden-properties.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-overriden-properties.html new file mode 100644 index 0000000..83e1633 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-overriden-properties.html
@@ -0,0 +1,41 @@ +<html> +<head> +<style type="text/css"> +#main { + height: 100px; + background: #000; + background: #bada55; +} +#main { + -x: +} +#main { + -x: +} +</style> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('main', step1); + + function step1() { + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that overriding shorthands within rule are visible. +</p> + +<div id="main"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-properties-overload-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-properties-overload-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-properties-overload-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-properties-overload-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-properties-overload.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-properties-overload.html new file mode 100644 index 0000000..578a5583 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-properties-overload.html
@@ -0,0 +1,46 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<style> +div { + margin: 1px; + border: 1px solid black; +} + +#inspect { + margin-top: 1px; + margin-left: 1px; + margin-right: 1px; + margin-bottom: 1px; + font: 10px Arial; +} + +.container { + font-size: 10px; + border: 0; +} + +</style> + +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspect', step2); + + function step2() { + ElementsTestRunner.dumpSelectedElementStyles(true, false, false); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p>Verifies that inspector figures out overloaded properties correctly.</p> +<div class="container"> + <div id="inspect">Text.</div> +</div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-rerequest-sourcemap-on-watchdog-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-rerequest-sourcemap-on-watchdog-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-rerequest-sourcemap-on-watchdog-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-rerequest-sourcemap-on-watchdog-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-rerequest-sourcemap-on-watchdog.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-rerequest-sourcemap-on-watchdog.html new file mode 100644 index 0000000..8c7d7341 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-rerequest-sourcemap-on-watchdog.html
@@ -0,0 +1,42 @@ +<html> +<head> +<script type="text/javascript" src="../../../inspector/inspector-test.js"></script> +<script type="text/javascript" src="../../../inspector/debugger-test.js"></script> +<link rel="stylesheet"> +<script> + +function addStyleSheet() +{ + var link = document.querySelector("link"); + link.setAttribute("href", "./resources/styles-rerequest-sourcemap-on-watchdog.css"); +} + +function test() { + TestRunner.cssModel.sourceMapManager().addEventListener( + SDK.SourceMapManager.Events.SourceMapAttached, onInitialSourceMap); + + TestRunner.evaluateInPagePromise('addStyleSheet()'); + + function onInitialSourceMap() { + TestRunner.cssModel.removeEventListener(SDK.SourceMapManager.Events.SourceMapAttached, onInitialSourceMap); + SourcesTestRunner.waitForScriptSource('styles-rerequest-sourcemap-on-watchdog.css', onCSSFile); + } + + function onCSSFile(uiSourceCode) { + TestRunner.addSniffer(SDK.SourceMapManager.prototype, '_sourceMapLoadedForTest', onSourceMapRerequested); + uiSourceCode.addRevision( + 'div { color: blue; } /*# sourceMappingURL=styles-rerequest-sourcemap-on-watchdog.css.map */'); + } + + function onSourceMapRerequested() { + TestRunner.addResult('SourceMap successfully re-requested.'); + TestRunner.completeTest(); + } +} +</script> +</head> +<body onLoad="runTest();"> +<p>Verifies that the sourceMap is in fact re-requested from network as SASS watchdog updates the CSS file.</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-should-not-force-sync-style-recalc-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-should-not-force-sync-style-recalc-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-should-not-force-sync-style-recalc-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-should-not-force-sync-style-recalc-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-should-not-force-sync-style-recalc.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-should-not-force-sync-style-recalc.html new file mode 100644 index 0000000..91f475eb --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-should-not-force-sync-style-recalc.html
@@ -0,0 +1,50 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/timeline-test.js"></script> + +<style id="testSheet"> +.test-0 { font-family: 'Arial'; } +.test-1 { font-family: 'Arial'; } +.test-2 { font-family: 'Arial'; } +.test-3 { font-family: 'Arial'; } +.test-4 { font-family: 'Arial'; } +.test-5 { font-family: 'Arial'; } +.test-6 { font-family: 'Arial'; } +.test-7 { font-family: 'Arial'; } +.test-8 { font-family: 'Arial'; } +.test-9 { font-family: 'Arial'; } +</style> + +<script> + +function performActions() +{ + var styleElement = document.querySelector("#testSheet"); + for (var i = 0; i < 10; ++i) + styleElement.sheet.deleteRule(0); +} + +function test() { + UI.context.setFlavor(Timeline.TimelinePanel, UI.panels.timeline); + PerformanceTestRunner.evaluateWithTimeline('performActions()', callback); + + function callback() { + PerformanceTestRunner.timelineModel().mainThreadEvents().forEach(event => { + if (event.name === TimelineModel.TimelineModel.RecordType.UpdateLayoutTree) + TestRunner.addResult(event.name); + }); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that inspector doesn't force sync layout on operations with CSSOM.<a href="https://code.google.com/p/chromium/issues/detail?id=315885">Bug 315885</a>. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-source-lines-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-source-lines-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-source-lines-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-source-lines-expected.txt
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-source-lines-inline-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-source-lines-inline-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-source-lines-inline-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-source-lines-inline-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-source-lines-inline.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-source-lines-inline.html new file mode 100644 index 0000000..4fc4c10 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-source-lines-inline.html
@@ -0,0 +1,35 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> + +<style> +.foo { + color: blue; +} +</style> + +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('foo', step2); + + function step2() { + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that elements panel shows proper inline style locations in the sidebar panel. +</p> + +<div id="foo" class="foo" style="display:none">Foo</div> +<iframe src="../styles/resources/styles-source-lines-inline-iframe.html"> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-source-lines-recovery-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-source-lines-recovery-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-source-lines-recovery-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-source-lines-recovery-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-source-lines-recovery.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-source-lines-recovery.html new file mode 100644 index 0000000..cf9de2e --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-source-lines-recovery.html
@@ -0,0 +1,54 @@ +<html> +<head> +<style> +@media all { + ::-moz-focus-inner {} +} +#main { + color: red; +} +</style> + +<style> +@-webkit-region x { + x ? {} +} +#main { + color: blue; +} +</style> + +<style> +@-webkit-region x { + ? {} +} +#main { + color: white; +} +</style> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('main', step1); + + function step1() { + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that invalid rule inside @-rule doesn't break source code matching (http://crbug.com/317499). +</p> + +<div id="main"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-source-lines.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-source-lines.html new file mode 100644 index 0000000..9f8a227d --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-source-lines.html
@@ -0,0 +1,80 @@ +<html> +<head> +<!-- + Line numbers are reported wrt the opened style tag baseline. + Allow some space here to align local line numbers to be style + 10. + Selector sourceLine is the line of the corresponding { following the + selector text. +--> + +<style type="text/css" media="screen"> +#main, .at_line_11::/* +Multiline comment +before pseudo element + */before +{ + color:red; + content: "Before" +} +/* + +Multiline comment followed with whitespace + + +*/ + +#main, .at_line_26 + + +{ + /* Comment in definition*/ + /* Comment in definition 2*/ + + /* Comment in definition 3 + */font-family:/* Comment in + value */courier; + color blue; +}/*Multiline comment + +followed by selector +*/#main, +.at_line_41 + +{ + font-size: + 10px; +} + + +#main, .at_line_49 +{ + border: 1px solid + red; +} +</style> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('main', step1); + + function step1() { + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that proper source lines are reported for the parsed styles. +</p> + +<div id="main"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-source-offsets-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-source-offsets-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-source-offsets-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-source-offsets-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-source-offsets.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-source-offsets.html new file mode 100644 index 0000000..8e1ccaa --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-source-offsets.html
@@ -0,0 +1,76 @@ +<html> +<head> + +<link rel="stylesheet" href="../styles/resources/styles-source-offsets.css"> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + function dumpStyleData(ruleOrStyle) { + var isRule = !!(ruleOrStyle.style); + var style; + var header = ''; + if (isRule) { + if (ruleOrStyle.origin !== 'regular') + return; + style = ruleOrStyle.style; + var selectorRanges = []; + var selectors = ruleOrStyle.selectorList.selectors; + var firstRange = selectors[0].range; + var lastRange = selectors[selectors.length - 1].range; + var range = { + startLine: firstRange.startLine, + startColumn: firstRange.startColumn, + endLine: lastRange.endLine, + endColumn: lastRange.endColumn + }; + header = ruleOrStyle.selectorList.text + ': ' + (range ? ElementsTestRunner.rangeText(range) : ''); + } else { + style = ruleOrStyle; + header = 'element.style:'; + } + TestRunner.addResult(header + ' ' + ElementsTestRunner.rangeText(style.range)); + var allProperties = style.cssProperties; + for (var i = 0; i < allProperties.length; ++i) { + var property = allProperties[i]; + if (!property.range) + continue; + TestRunner.addResult( + '[\'' + property.name + '\':\'' + property.value + '\'' + (property.important ? ' !important' : '') + + (('parsedOk' in property) ? ' non-parsed' : '') + '] @' + ElementsTestRunner.rangeText(property.range)); + } + } + + ElementsTestRunner.selectNodeWithId('mainBody', step1); + + async function step1(node) { + var response = await TestRunner.CSSAgent.invoke_getMatchedStylesForNode({nodeId: node.id}); + + for (var rule of response.matchedCSSRules) + dumpStyleData(rule.rule); + dumpStyleData(response.inlineStyle); + TestRunner.completeTest(); + } +} + +</script> + +<style> + +body.mainpage { + text-decoration: none; /* at least one valid property is necessary for WebCore to match a rule */ + badproperty: 1badvalue1; +} + +</style> +</head> + +<body id="mainBody" class="main1 main2 mainpage" onload="runTest()" style="font-weight: normal; width: 80%"> +<p> +Tests that proper data and start/end offset positions are reported for CSS style declarations and properties. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-update-from-js-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-update-from-js-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-update-from-js-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-update-from-js-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-update-from-js.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-update-from-js.html new file mode 100644 index 0000000..6acc4f0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-update-from-js.html
@@ -0,0 +1,123 @@ +<html> +<head> +<style> +.red div:first-child { + background-color: red; +} + +div[foo="bar"] + div { + background-color: blue; +} + +</style> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> +function modifyStyleAttribute() +{ + document.getElementById("container").setAttribute("style", "color: #daC0DE; border: 1px solid black;"); +} + +function modifyCSSText() +{ + document.getElementById("container").style.cssText = "color: #C0FFEE"; +} + +function modifyParsedAttributes() +{ + var style = document.getElementById("container").style; + style.border = "2px dashed green"; + style.borderWidth = "3px"; +} + +function modifyContainerClass() +{ + document.getElementById("container").className = "red"; +} + +function modifyChildAttr() +{ + document.getElementById("child").setAttribute("foo", "bar"); +} + +function test() { + TestRunner.runTestSuite([ + function testInit(next) { + ElementsTestRunner.selectNodeAndWaitForStyles('container', next); + }, + + function testSetStyleAttribute(next) { + waitAndDumpAttributeAndStyles(next); + TestRunner.evaluateInPage('modifyStyleAttribute()'); + }, + + function testSetStyleCSSText(next) { + waitAndDumpAttributeAndStyles(next); + TestRunner.evaluateInPage('modifyCSSText()'); + }, + + function testSetViaParsedAttributes(next) { + waitAndDumpAttributeAndStyles(next); + TestRunner.evaluateInPage('modifyParsedAttributes()'); + }, + + function testSetViaAncestorClass(next) { + ElementsTestRunner.selectNodeAndWaitForStyles('child', callback); + + function callback() { + waitAndDumpAttributeAndStyles(next, 'child'); + TestRunner.evaluateInPage('modifyContainerClass()'); + } + }, + + function testSetViaSiblingAttr(next) { + ElementsTestRunner.selectNodeAndWaitForStyles('childSibling', callback); + + function callback() { + waitAndDumpAttributeAndStyles(next, 'childSibling'); + TestRunner.evaluateInPage('modifyChildAttr()'); + } + } + ]); + + function waitAndDumpAttributeAndStyles(next, id) { + id = id || 'container'; + function callback() { + dumpAttributeAndStyles(id); + next(); + } + ElementsTestRunner.waitForStyles(id, callback); + } + + function dumpAttributeAndStyles(id) { + var treeElement = findNodeTreeElement(id); + if (!treeElement) { + TestRunner.addResult('\'' + id + '\' tree element not found'); + return; + } + TestRunner.addResult(treeElement.listItemElement.textContent.replace(/\u200b/g, '')); + ElementsTestRunner.dumpSelectedElementStyles(true); + } + + function findNodeTreeElement(id) { + ElementsTestRunner.firstElementsTreeOutline().runPendingUpdates(); + var expandedNode = ElementsTestRunner.expandedNodeWithId(id); + if (!expandedNode) { + TestRunner.addResult('\'' + id + '\' node not found'); + TestRunner.completeTest(); + } + return ElementsTestRunner.firstElementsTreeOutline().findTreeElement(expandedNode); + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that changes to an inline style and ancestor/sibling className from JavaScript are reflected in the Styles pane and Elements tree. +</p> + +<div id="container" style="font-weight:bold"><div id="child"></div><div id="childSibling"></div></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-update-links-1-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-update-links-1-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-update-links-1-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-update-links-1-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-update-links-1.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-update-links-1.html new file mode 100644 index 0000000..80ab5545 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-update-links-1.html
@@ -0,0 +1,63 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="./resources/styles-update-links.js"></script> +<style> +#pseudo::after { + pseudo-property: "12"; + color: red; +} + +#pseudo::after { + border: 1px solid black; +} + +#pseudo::before { + color: blue; +} +</style> +<script> + +function test() { + TestRunner.runTestSuite([ + function selectInitialNode(next) { + ElementsTestRunner.selectNodeAndWaitForStyles('container', next); + }, + + function testInsertProperty(next) { + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + var treeItem = ElementsTestRunner.getMatchedStylePropertyTreeItem('color'); + var treeElement = treeItem.section().addNewBlankProperty(1); + ElementsTestRunner.waitForStyleApplied(onPropertyInserted); + treeElement.applyStyleText('PROPERTY: INSERTED;', true); + + function onPropertyInserted() { + TestRunner.addResult('\n\n#### AFTER PROPERTY INSERTION ####\n\n'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + var rules = ElementsTestRunner.getMatchedRules(); + ElementsTestRunner.validateRuleRanges('container', rules, next); + } + } + ]); +} +</script> +<link rel="stylesheet" href="../styles/resources/styles-update-links-2.css"></link> +<link rel="stylesheet" href="../styles/resources/styles-update-links.css"></link> +</head> + +<body onload="runTest()"> +<p> +Tests that links are updated properly when inserting a new property. +</p> + +<div id="container" class="left-intact should-change"> +Red text here. +</div> + +<div id="other"></div> + +<section id="pseudo"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-update-links-2-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-update-links-2-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-update-links-2-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-update-links-2-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-update-links-2.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-update-links-2.html new file mode 100644 index 0000000..c6ed7dc3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-update-links-2.html
@@ -0,0 +1,63 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="./resources/styles-update-links.js"></script> +<style> +#pseudo::after { + pseudo-property: "12"; + color: red; +} + +#pseudo::after { + border: 1px solid black; +} + +#pseudo::before { + color: blue; +} +</style> +<script> + +function test() { + TestRunner.runTestSuite([ + function selectInitialNode(next) { + ElementsTestRunner.selectNodeAndWaitForStyles('container', next); + }, + + function testEditSelector(next) { + var section = UI.panels.elements._stylesWidget._sectionBlocks[0].sections[3]; + section.startEditingSelector(); + section._selectorElement.textContent = '.should-change, .INSERTED-OTHER-SELECTOR'; + ElementsTestRunner.waitForSelectorCommitted(onSelectorEdited); + section._selectorElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + + function onSelectorEdited() { + TestRunner.addResult('\n\n#### AFTER SELECTOR EDIT ####\n\n'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + var rules = ElementsTestRunner.getMatchedRules(); + ElementsTestRunner.validateRuleRanges('container', rules, next); + } + } + ]); +} +</script> +<link rel="stylesheet" href="../styles/resources/styles-update-links-2.css"></link> +<link rel="stylesheet" href="../styles/resources/styles-update-links.css"></link> +</head> + +<body onload="runTest()"> +<p> +Tests that links are updated properly when editing selector. +</p> + +<div id="container" class="left-intact should-change"> +Red text here. +</div> + +<div id="other"></div> + +<section id="pseudo"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-update-links-3-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-update-links-3-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-update-links-3-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-update-links-3-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-update-links-3.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-update-links-3.html new file mode 100644 index 0000000..7718bceb --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-update-links-3.html
@@ -0,0 +1,61 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="./resources/styles-update-links.js"></script> +<style> +#pseudo::after { + pseudo-property: "12"; + color: red; +} + +#pseudo::after { + border: 1px solid black; +} + +#pseudo::before { + color: blue; +} +</style> +<script> + +function test() { + TestRunner.runTestSuite([ + function selectInitialNode(next) { + ElementsTestRunner.selectNodeAndWaitForStyles('container', next); + }, + + function testDisableProperty(next) { + var treeItem = ElementsTestRunner.getMatchedStylePropertyTreeItem('border'); + ElementsTestRunner.waitForStyleApplied(onPropertyDisabled); + treeItem._toggleEnabled({target: {checked: false}, consume: function() {}}); + + function onPropertyDisabled() { + TestRunner.addResult('\n\n#### AFTER PROPERTY DISABLED ####\n\n'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + var rules = ElementsTestRunner.getMatchedRules(); + ElementsTestRunner.validateRuleRanges('container', rules, next); + } + } + ]); +} +</script> +<link rel="stylesheet" href="../styles/resources/styles-update-links-2.css"></link> +<link rel="stylesheet" href="../styles/resources/styles-update-links.css"></link> +</head> + +<body onload="runTest()"> +<p> +Tests that links are updated properly after disabling property. +</p> + +<div id="container" class="left-intact should-change"> +Red text here. +</div> + +<div id="other"></div> + +<section id="pseudo"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-update-links-4-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-update-links-4-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-update-links-4-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-update-links-4-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-update-links-4.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-update-links-4.html new file mode 100644 index 0000000..71bb433 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-update-links-4.html
@@ -0,0 +1,62 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="./resources/styles-update-links.js"></script> +<style> +#pseudo::after { + pseudo-property: "12"; + color: red; +} + +#pseudo::after { + border: 1px solid black; +} + +#pseudo::before { + color: blue; +} +</style> +<script> + +function test() { + TestRunner.runTestSuite([ + function selectNodeWithPseudoElements(next) { + ElementsTestRunner.selectNodeAndWaitForStyles('pseudo', next); + }, + + function testPseudoSectionPropertyEdit(next) { + var treeItem = ElementsTestRunner.getMatchedStylePropertyTreeItem('pseudo-property'); + var treeElement = treeItem.section().addNewBlankProperty(1); + ElementsTestRunner.waitForStyleApplied(onPropertyInserted); + treeElement.applyStyleText('PROPERTY: INSERTED;', true); + + function onPropertyInserted() { + TestRunner.addResult('\n\n#### AFTER PROPERTY INSERTED ####\n\n'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + var rules = ElementsTestRunner.getMatchedRules(); + ElementsTestRunner.validateRuleRanges('pseudo', rules, next); + } + } + ]); +} +</script> +<link rel="stylesheet" href="../styles/resources/styles-update-links-2.css"></link> +<link rel="stylesheet" href="../styles/resources/styles-update-links.css"></link> +</head> + +<body onload="runTest()"> +<p> +Tests that links are updated property when editing pseudo element property. +</p> + +<div id="container" class="left-intact should-change"> +Red text here. +</div> + +<div id="other"></div> + +<section id="pseudo"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-url-linkify-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-url-linkify-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-url-linkify-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-url-linkify-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-url-linkify.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-url-linkify.html new file mode 100644 index 0000000..80bcb13 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-url-linkify.html
@@ -0,0 +1,96 @@ +<html> +<head> +<link rel="stylesheet" href="../styles/resources/styles-url-linkify.css"> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + function completeURL(baseURL, href) { + TestRunner.addResult(Common.ParsedURL.completeURL(baseURL, href)); + } + + TestRunner.addResult('URLs completed:'); + completeURL('http://example.com', '/'); + completeURL('http://example.com', 'moo'); + completeURL('http://example.com/', 'https://secure.com/moo'); + completeURL('https://example.com/foo', '//secure.com/moo'); + completeURL('http://example.com/foo/zoo', '/moo'); + completeURL('http://example.com/foo/zoo/', 'moo'); + completeURL('http://example.com/foo/zoo', 'boo/moo'); + completeURL('http://example.com/foo', 'moo'); + completeURL('http://example.com/foo', '?a=b'); + completeURL('http://example.com/foo', '?a=/b'); + completeURL('http://example.com/?c=/d#anchor', '?a=/b'); + completeURL('http://example.com/foo?c=d', '?a=b'); + completeURL('http://example.com/foo?c=d#anchor', '?a=/b'); + completeURL('http://example.com/foo?c=/d/e', '?a=b'); + completeURL('http://example.com/foo?c=/d/e', 'cat.jpeg'); + completeURL('http://example.com/foo#anchor', 'cat.jpeg'); + completeURL('http://example.com/', '/foo?bar=http://otherexample.com'); + + const dataURL = + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAABCAgMAAACeOuh7AAAABGdBTUEAAK/INwWK6QAAAAlQTFRF////AAAA////fu+PTwAAAAF0Uk5TAEDm2GYAAACHSURBVDjLxdLbDYAgDAVQGELn0R3oEHYf2KGdUqtE46OFRCP3oyTng1xCnWsaD5JRRtCkQ2YmkBkHRXqWJBn0j0TICbrsWVoWhRShCdcGyZCtHxMaUnVPRZ9KSbmBJdsX2vJVnwqRD0Rb4rpzgIbE/AI5NTnWAMvy5l0dXrfuLh5OCe5BmmYGXhTUxlQ5xJ8AAAAASUVORK5CYII='; + const blobURL = 'blob:http://example.com/f91b7b00-00-0000-0000-3b7c87055d7a'; + completeURL('https://example.com/foo', dataURL); + completeURL('http://example.com/foo', 'javascript:alert(\'foo\');'); + completeURL('http://example.com/foo', blobURL); + completeURL('', blobURL); + + function dumpHref(dumpLinkClass) { + var hrefNode; + var valueChildNodes = + ElementsTestRunner.firstMatchedStyleSection().propertiesTreeOutline.firstChild().valueElement.childNodes; + for (var i = 0; i < valueChildNodes.length; ++i) { + if (valueChildNodes[i].href) { + hrefNode = valueChildNodes[i]; + break; + } + } + if (!hrefNode) { + TestRunner.addResult('href property not found'); + return; + } + + var styleClass = ''; + if (dumpLinkClass) { + if (hrefNode.classList.contains('devtools-link')) + styleClass += 'devtools-link '; + } + + var href = hrefNode.href; + var segments = href.split('/'); + var output = []; + for (var i = segments.length - 1, minSegment = i - 3; i >= 0 && i >= minSegment; --i) + output.unshift(segments[i]); + + TestRunner.addResult(styleClass + output.join('/')); + } + + ElementsTestRunner.selectNodeAndWaitForStyles('local', step1); + + function step1() { + TestRunner.addResult('Link for a URI from CSS document:'); + dumpHref(true); + ElementsTestRunner.selectNodeAndWaitForStyles('iframed', step2); + } + + function step2() { + TestRunner.addResult('Link for a URI from iframe inline stylesheet:'); + dumpHref(); + TestRunner.completeTest(); + } +} + +</script> +</head> +<body onload="runAfterIframeIsLoaded()"> +<p> +Tests that URLs are linked to and completed correctly. Bugs <a href="http://bugs.webkit.org/show_bug.cgi?id=51663">51663</a>, <a href="http://bugs.webkit.org/show_bug.cgi?id=53171">53171</a>, <a href="http://bugs.webkit.org/show_bug.cgi?id=62643">62643</a>, <a href="http://bugs.webkit.org/show_bug.cgi?id=72373">72373</a>, <a href="http://bugs.webkit.org/show_bug.cgi?id=79905">79905</a> +</p> +<div id="local"></div> +<iframe src="../styles/resources/styles-url-linkify-iframe.html"></iframe> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-with-spaces-in-sourceURL-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-with-spaces-in-sourceURL-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-with-spaces-in-sourceURL-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-with-spaces-in-sourceURL-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-with-spaces-in-sourceURL.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-with-spaces-in-sourceURL.html new file mode 100644 index 0000000..c22145d --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-with-spaces-in-sourceURL.html
@@ -0,0 +1,29 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<link rel="stylesheet" href="../styles/resources/style-with-spaces-in-sourceURL.css"> + +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', onNodeSelected); + + function onNodeSelected() { + ElementsTestRunner.dumpSelectedElementStyles(true); + TestRunner.completeTest(); + } +} +</script> + +</head> + +<body onload="runTest()"> +<p> +Verifies that links for URLs with spaces displayed properly for matched styles. +</p> + +<div id="inspected"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/stylesheet-source-url-comment-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/stylesheet-source-url-comment-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/stylesheet-source-url-comment-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/stylesheet-source-url-comment-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/stylesheet-source-url-comment.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/stylesheet-source-url-comment.html new file mode 100644 index 0000000..91bb7dad --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/stylesheet-source-url-comment.html
@@ -0,0 +1,121 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<style> +body { + color: green; +} + +/*# sourceURL=inlineStyleSheet.css */ +</style> +<script> +function addInlineStyleSheet() +{ + var styleElement = document.createElement("style"); + styleElement.textContent = "body { color: black; }\n/*# sourceURL=css/addedInlineStylesheet.css */"; + document.head.appendChild(styleElement); +} + +function addInlineStyleSheetNonRelative() +{ + var styleElement = document.createElement("style"); + styleElement.textContent = "body { color: red; }\n/*# sourceURL=css/nonRelativeInlineStylesheet.css */"; + document.head.appendChild(styleElement); +} + +function addInlineStyleSheetMultiple() +{ + var styleElement = document.createElement("style"); + styleElement.textContent = "\n/*# sourceURL=1.css */\nbody { color: red; }\n/*# sourceURL=2.css*/\n/*# sourceURL=css/addedInlineStylesheetMultiple.css */"; + document.head.appendChild(styleElement); +} + +function addInlineStyleSheetDeprecated() +{ + var styleElement = document.createElement("style"); + styleElement.textContent = "body { color: black; }\n/*@ sourceURL=css/addedInlineStylesheetDeprecated.css */"; + document.head.appendChild(styleElement); +} + +function test() { + function forEachHeaderMatchingURL(url, handler) { + var headers = TestRunner.cssModel.styleSheetHeaders(); + for (var i = 0; i < headers.length; ++i) { + if (headers[i].sourceURL.indexOf(url) !== -1) + handler(headers[i]); + } + } + + function checkHeaderHasSourceURL(header) { + TestRunner.assertTrue(header.hasSourceURL); + } + + TestRunner.runTestSuite([ + function testSourceURLCommentInInlineScript(next) { + SourcesTestRunner.showScriptSource('stylesheet-source-url-comment.html', didShowSource); + + function didShowSource(sourceFrame) { + function checkHeaderDoesNotHaveSourceURL(header) { + TestRunner.assertTrue(!header.hasSourceURL, 'hasSourceURL flag is set for inline stylesheet'); + } + + forEachHeaderMatchingURL('source-url-comment.html', checkHeaderDoesNotHaveSourceURL); + next(); + } + }, + + function testSourceURLComment(next) { + SourcesTestRunner.showScriptSource('css/addedInlineStylesheet.css', didShowSource); + TestRunner.evaluateInPage('setTimeout(addInlineStyleSheet, 0)'); + + function didShowSource(sourceFrame) { + TestRunner.addResult(sourceFrame.textEditor.text()); + forEachHeaderMatchingURL('addedInlineStylesheet', checkHeaderHasSourceURL); + next(); + } + }, + + function testDeprecatedSourceURLComment(next) { + SourcesTestRunner.showScriptSource('css/addedInlineStylesheetDeprecated.css', didShowSource); + TestRunner.evaluateInPage('setTimeout(addInlineStyleSheetDeprecated, 0)'); + + function didShowSource(sourceFrame) { + TestRunner.addResult(sourceFrame.textEditor.text()); + forEachHeaderMatchingURL('addedInlineStylesheetDeprecated', checkHeaderHasSourceURL); + next(); + } + }, + + function testNonRelativeURL(next) { + SourcesTestRunner.showScriptSource('css/nonRelativeInlineStylesheet.css', didShowSource); + TestRunner.evaluateInPage('setTimeout(addInlineStyleSheetNonRelative, 0)'); + + function didShowSource(sourceFrame) { + TestRunner.addResult(sourceFrame.textEditor.text()); + forEachHeaderMatchingURL('nonRelativeInlineStyleSheet.css', checkHeaderHasSourceURL); + next(); + } + }, + + function testMultiple(next) { + SourcesTestRunner.showScriptSource('css/addedInlineStylesheetMultiple.css', didShowSource); + TestRunner.evaluateInPage('setTimeout(addInlineStyleSheetMultiple, 0)'); + + function didShowSource(sourceFrame) { + TestRunner.addResult(sourceFrame.textEditor.text()); + forEachHeaderMatchingURL('addInlineStyleSheetMultiple.css', checkHeaderHasSourceURL); + next(); + } + } + ]); +}; + +</script> + +</head> + +<body onload="runTest()"> +<p>Tests that stylesheets with sourceURL comment are shown in the Sources panel.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/supported-css-properties-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/supported-css-properties-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/supported-css-properties-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/supported-css-properties-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/supported-css-properties.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/supported-css-properties.html new file mode 100644 index 0000000..9c7e3c5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/supported-css-properties.html
@@ -0,0 +1,16 @@ +<html> +<head> +<script type="text/javascript" src="../../../inspector/inspector-test.js"></script> +<script> +function test() { + var marginLonghands = SDK.cssMetadata().longhands('margin'); + marginLonghands.sort(); + TestRunner.addResult('Margin longhands: ' + marginLonghands.join(', ')); + TestRunner.completeTest(); +} +</script> +</head> +<body onLoad="runTest();"> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/svg-style-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/svg-style-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/svg-style-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/svg-style-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/svg-style.xhtml b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/svg-style.xhtml new file mode 100644 index 0000000..1949890 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/svg-style.xhtml
@@ -0,0 +1,36 @@ +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() +{ + ElementsTestRunner.selectNodeAndWaitForStyles("main", step1); + + function step1() + { + TestRunner.addResult("Main style:"); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + TestRunner.completeTest(); + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that svg:style does not crash when the related element is inspected. +</p> + +<svg:svg xmlns:svg="http://www.w3.org/2000/svg" version="1.1"> + <svg:defs> + <svg:style type="text/css"> + rect {fill: red} + </svg:style> + </svg:defs> + <svg:rect id="main" width="100" height="100"/> +</svg:svg> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/undo-add-new-rule-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/undo-add-new-rule-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/undo-add-new-rule-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/undo-add-new-rule-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/undo-add-new-rule.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/undo-add-new-rule.html new file mode 100644 index 0000000..a2d3a48 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/undo-add-new-rule.html
@@ -0,0 +1,83 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); + + var treeElement; + + function step1() { + addNewRuleAndSelectNode('other', step2); + } + + function step2() { + addNewRuleAndSelectNode('inspected', step3); + } + + function step3() { + TestRunner.addResult('After adding new rule:'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + printStyleSheetAndCall(step4); + } + + function step4() { + TestRunner.domModel.undo(); + ElementsTestRunner.selectNodeAndWaitForStyles('other', step5); + } + + function step5() { + TestRunner.addResult('After undo:'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + printStyleSheetAndCall(step6); + } + + function step6() { + TestRunner.domModel.redo(); + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step7); + } + + function step7() { + TestRunner.addResult('After redo:'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + printStyleSheetAndCall(step8); + } + + function step8() { + TestRunner.completeTest(); + } + + function addNewRuleAndSelectNode(nodeId, next) { + function selectNode() { + ElementsTestRunner.selectNodeAndWaitForStyles(nodeId, next); + } + + ElementsTestRunner.addNewRule('div.foo', selectNode); + } + + async function printStyleSheetAndCall(next) { + var section = ElementsTestRunner.firstMatchedStyleSection(); + var id = section.style().styleSheetId; + var styleSheetText = await TestRunner.CSSAgent.getStyleSheetText(id); + TestRunner.addResult('===== Style sheet text: ====='); + TestRunner.addResult(styleSheetText); + TestRunner.addResult('============================='); + next(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that adding a new rule can be undone. +</p> + +<div class="foo" id="inspected" style="font-size: 12px">Text</div> +<div class="foo" id="other" style="color:red"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/undo-add-property-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/undo-add-property-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/undo-add-property-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/undo-add-property-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/undo-add-property.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/undo-add-property.html new file mode 100644 index 0000000..e23af41e --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/undo-add-property.html
@@ -0,0 +1,76 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> + +<style> +.container { + font-weight: bold +} +</style> + +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('container', testAppendProperty); + + function testAppendProperty() { + TestRunner.addResult('=== Last property ==='); + testAddProperty('margin-left: 2px', undefined, testInsertBegin); + } + + function testInsertBegin() { + TestRunner.addResult('=== First property ==='); + testAddProperty('margin-top: 0px', 0, testInsertMiddle); + } + + function testInsertMiddle() { + TestRunner.addResult('=== Middle property ==='); + testAddProperty('margin-right: 1px', 1, TestRunner.completeTest.bind(InspectorTest)); + } + + function testAddProperty(propertyText, index, callback) { + TestRunner.addResult('(Initial value)'); + ElementsTestRunner.dumpSelectedElementStyles(true); + + var treeItem = ElementsTestRunner.getMatchedStylePropertyTreeItem('font-weight'); + var treeElement = treeItem.section().addNewBlankProperty(index); + treeElement.applyStyleText(propertyText, true); + ElementsTestRunner.waitForStyles('container', step1); + + function step1() { + TestRunner.addResult('(After adding property)'); + ElementsTestRunner.dumpSelectedElementStyles(true); + + TestRunner.domModel.undo(); + ElementsTestRunner.selectNodeAndWaitForStyles('other', step2); + } + + function step2() { + TestRunner.addResult('(After undo)'); + ElementsTestRunner.dumpSelectedElementStyles(true); + + TestRunner.domModel.redo(); + ElementsTestRunner.selectNodeAndWaitForStyles('container', step3); + } + + function step3() { + TestRunner.addResult('(After redo)'); + ElementsTestRunner.dumpSelectedElementStyles(true); + callback(); + } + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that adding a property is undone properly. +</p> + +<div id="container" class="container"></div> +<div id="other" class="container"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/undo-add-rule-crash-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/undo-add-rule-crash-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles-4/undo-add-rule-crash-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/undo-add-rule-crash-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/undo-add-rule-crash.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/undo-add-rule-crash.html new file mode 100644 index 0000000..621c2673 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/undo-add-rule-crash.html
@@ -0,0 +1,44 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); + + function step1() { + addNewRuleAndSelectNode('other', step2); + } + + function step2() { + TestRunner.domModel.undo(); + ElementsTestRunner.waitForStyles('other', step3); + } + + function step3() { + TestRunner.completeTest(); + } + + function addNewRuleAndSelectNode(nodeId, next) { + ElementsTestRunner.addNewRule(null, ruleAdded); + + function ruleAdded() { + ElementsTestRunner.selectNodeAndWaitForStyles(nodeId, next); + } + } +} + +</script> +</head> + +<body onload="runTest()"> +Tests that the inspected page does not crash after undoing a new rule addition. <a href="https://bugs.webkit.org/show_bug.cgi?id=104806">Bug 104806</a> + +<p>The test has passed (no crash).</p> +<div id="inspected"><div id="other" /></div> +<style> +@keyframes cfpulse1 { 0% { opacity: 0.1; } } +.c1 { animation-name: cfpulse1; } +</style> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/cancel-upon-invalid-property-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/cancel-upon-invalid-property-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/cancel-upon-invalid-property-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/cancel-upon-invalid-property-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/cancel-upon-invalid-property.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/cancel-upon-invalid-property.html new file mode 100644 index 0000000..963357a --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/cancel-upon-invalid-property.html
@@ -0,0 +1,54 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<style> +#inspected { + color: blue; +} +</style> +<script> + +function test() { + var treeElement; + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', editProperty); + + function editProperty() { + treeElement = ElementsTestRunner.getMatchedStylePropertyTreeItem('color'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + treeElement.startEditing(); + treeElement.nameElement.textContent = 'color'; + treeElement.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + treeElement.valueElement.textContent = 'red'; + ElementsTestRunner.waitForStyleApplied(commitInvalidProperty); + treeElement.kickFreeFlowStyleEditForTest(); + } + + function commitInvalidProperty() { + treeElement.valueElement.textContent = 'red/*'; + treeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + ElementsTestRunner.waitForStyleApplied(invalidCommitted); + } + + function invalidCommitted() { + ElementsTestRunner.waitForStyleApplied(dumpAndExit); + } + + function dumpAndExit() { + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Verifies that entering poor property value restores original text. +</p> + +<div id="inspected">Text</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/original-content-provider-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/original-content-provider-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/original-content-provider-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/original-content-provider-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/original-content-provider.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/original-content-provider.html new file mode 100644 index 0000000..02adeb2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/original-content-provider.html
@@ -0,0 +1,118 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<style> +div { color: red; } +/*# sourceURL=set-style.css */ +</style> + +<style> +div {} +/*# sourceURL=set-selector.css */ +</style> + +<style> +@media (all) { } +/*# sourceURL=set-media.css */ +</style> + +<style> +@keyframes animation { 100% { color: red; } } +/*# sourceURL=set-keyframe-key.css */ +</style> + +<style> +div {} +/*# sourceURL=add-rule.css */ +</style> + +<style> +div {} +/*# sourceURL=set-text.css */ +</style> + +<script> + +function test() { + TestRunner.addSniffer(SDK.CSSModel.prototype, '_originalContentRequestedForTest', onOriginalContentRequested, true); + function onOriginalContentRequested(header) { + TestRunner.addResult('original content loaded for header: ' + header.sourceURL); + } + + var headers = TestRunner.cssModel.styleSheetHeaders(); + TestRunner.runTestSuite([ + function testSetStyle(next) { + var header = headers.find(header => header.sourceURL.endsWith('set-style.css')); + TestRunner.cssModel.setStyleText(header.id, new TextUtils.TextRange(1, 5, 1, 18), 'EDITED: EDITED', true) + .then(success => onEdit(header, success)) + .then(next); + }, + + function testSetSelector(next) { + var header = headers.find(header => header.sourceURL.endsWith('set-selector.css')); + TestRunner.cssModel.setSelectorText(header.id, new TextUtils.TextRange(1, 0, 1, 3), 'EDITED') + .then(success => onEdit(header, success)) + .then(next); + }, + + function testSetMedia(next) { + var header = headers.find(header => header.sourceURL.endsWith('set-media.css')); + TestRunner.cssModel.setMediaText(header.id, new TextUtils.TextRange(1, 7, 1, 12), 'EDITED') + .then(success => onEdit(header, success)) + .then(next); + }, + + function testSetKeyframeKey(next) { + var header = headers.find(header => header.sourceURL.endsWith('set-keyframe-key.css')); + TestRunner.cssModel.setKeyframeKey(header.id, new TextUtils.TextRange(1, 23, 1, 27), 'from') + .then(success => onEdit(header, success)) + .then(next); + }, + + function testAddRule(next) { + var header = headers.find(header => header.sourceURL.endsWith('add-rule.css')); + TestRunner.cssModel.addRule(header.id, 'EDITED {}\n', new TextUtils.TextRange(1, 0, 1, 0)) + .then(success => onEdit(header, success)) + .then(next); + }, + + function testSetStyleSheetText(next) { + var header = headers.find(header => header.sourceURL.endsWith('set-text.css')); + TestRunner.cssModel.setStyleSheetText(header.id, 'EDITED {}', true) + .then(success => onEdit(header, success)) + .then(next); + }, + ]); + + function onEdit(header, success) { + if (success !== null && !success) { + TestRunner.addResult('Failed to run edit operation.'); + TestRunner.completeTest(); + return; + } + var contents = [ + header.originalContentProvider().requestContent(), + header.requestContent(), + ]; + return Promise.all(contents).then(onContents); + } + + function onContents(contents) { + TestRunner.addResult('== Original =='); + TestRunner.addResult(contents[0].trim()); + TestRunner.addResult('== Current =='); + TestRunner.addResult(contents[1].trim()); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p>Verifies that CSSStyleSheetHeader.originalContentProvider() indeed returns original content.</p> + +<div id="inspected"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/css-live-edit.css b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/css-live-edit.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/css-live-edit.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/css-live-edit.css
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/different-rule-types-import.css b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/different-rule-types-import.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/different-rule-types-import.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/different-rule-types-import.css
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/different-rule-types.css b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/different-rule-types.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/different-rule-types.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/different-rule-types.css
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/disable-property-workingcopy-update.css b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/disable-property-workingcopy-update.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/disable-property-workingcopy-update.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/disable-property-workingcopy-update.css
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/empty-background-url.css b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/empty-background-url.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/empty-background-url.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/empty-background-url.css
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/fromcss.png b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/fromcss.png similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/fromcss.png rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/fromcss.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/get-set-stylesheet-text.css b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/get-set-stylesheet-text.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/get-set-stylesheet-text.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/get-set-stylesheet-text.css
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/iframed.png b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/iframed.png similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/iframed.png rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/iframed.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/import-pseudoclass-crash-empty.css b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/import-pseudoclass-crash-empty.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/import-pseudoclass-crash-empty.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/import-pseudoclass-crash-empty.css
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/import-pseudoclass-crash.css b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/import-pseudoclass-crash.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/import-pseudoclass-crash.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/import-pseudoclass-crash.css
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/imported-stylesheet.css b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/imported-stylesheet.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/imported-stylesheet.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/imported-stylesheet.css
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/imported-stylesheet.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/imported-stylesheet.html similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/imported-stylesheet.html rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/imported-stylesheet.html
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/inject-stylesheet-iframe-data.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/inject-stylesheet-iframe-data.html similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/inject-stylesheet-iframe-data.html rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/inject-stylesheet-iframe-data.html
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/keyframes.css b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/keyframes.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/keyframes.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/keyframes.css
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/media-queries-1.css b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/media-queries-1.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/media-queries-1.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/media-queries-1.css
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/media-queries.css b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/media-queries.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/media-queries.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/media-queries.css
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/multiple-imports-edit-crash-1.css b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/multiple-imports-edit-crash-1.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/multiple-imports-edit-crash-1.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/multiple-imports-edit-crash-1.css
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/multiple-imports-edit-crash-2.css b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/multiple-imports-edit-crash-2.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/multiple-imports-edit-crash-2.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/multiple-imports-edit-crash-2.css
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/parse-utf8-bom-main.css b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/parse-utf8-bom-main.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/parse-utf8-bom-main.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/parse-utf8-bom-main.css
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/parse-utf8-bom-reset.css b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/parse-utf8-bom-reset.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/parse-utf8-bom-reset.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/parse-utf8-bom-reset.css
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/style-with-spaces-in-sourceURL.css b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/style-with-spaces-in-sourceURL.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/style-with-spaces-in-sourceURL.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/style-with-spaces-in-sourceURL.css
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/styles-history.css b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/styles-history.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/styles-history.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/styles-history.css
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/styles-iframe-data.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/styles-iframe-data.html similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/styles-iframe-data.html rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/styles-iframe-data.html
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/styles-source-lines-inline-iframe.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/styles-source-lines-inline-iframe.html similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/styles-source-lines-inline-iframe.html rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/styles-source-lines-inline-iframe.html
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/styles-source-offsets.css b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/styles-source-offsets.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/styles-source-offsets.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/styles-source-offsets.css
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/styles-update-links-2.css b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/styles-update-links-2.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/styles-update-links-2.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/styles-update-links-2.css
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/styles-update-links.css b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/styles-update-links.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/styles-update-links.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/styles-update-links.css
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/styles-url-linkify-iframe.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/styles-url-linkify-iframe.html similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/styles-url-linkify-iframe.html rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/styles-url-linkify-iframe.html
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/resources/styles-url-linkify.css b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/styles-url-linkify.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/resources/styles-url-linkify.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/resources/styles-url-linkify.css
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/undo-after-cancelled-editing-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/undo-after-cancelled-editing-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/undo-after-cancelled-editing-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/undo-after-cancelled-editing-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/undo-after-cancelled-editing.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/undo-after-cancelled-editing.html new file mode 100644 index 0000000..d704284 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/undo-after-cancelled-editing.html
@@ -0,0 +1,72 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<style> +#inspected { +} +</style> +<script> + +function test() { + var treeElement; + TestRunner.runTestSuite([ + function selectNode(next) { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', next); + }, + + function addNewProperty(next) { + var section = ElementsTestRunner.firstMatchedStyleSection(); + var newProperty = section.addNewBlankProperty(); + newProperty.startEditing(); + newProperty.nameElement.textContent = 'color'; + newProperty.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + newProperty.valueElement.textContent = 'blue'; + newProperty.valueElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + ElementsTestRunner.waitForStyleApplied(next); + }, + + function editProperty(next) { + treeElement = ElementsTestRunner.getMatchedStylePropertyTreeItem('color'); + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + treeElement.startEditing(); + treeElement.nameElement.textContent = 'color'; + treeElement.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + + // Update incrementally, do not commit. + treeElement.valueElement.textContent = 'red'; + treeElement.kickFreeFlowStyleEditForTest(); + ElementsTestRunner.waitForStyleApplied(next); + }, + + function cancelEditing(next) { + treeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('Escape')); + ElementsTestRunner.waitForStyleApplied(next); + }, + + function undoStyles(next) { + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + TestRunner.domModel.undo(); + ElementsTestRunner.waitForStyles('inspected', next, true); + }, + + function onUndoedProperty(next) { + ElementsTestRunner.dumpSelectedElementStyles(true, false, true); + next(); + } + ]); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Verifies that cancelling property value editing doesn't affect +undo stack. +</p> + +<div id="inspected">Text</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/undo-change-property-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/undo-change-property-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/undo-change-property-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/undo-change-property-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/undo-change-property.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/undo-change-property.html new file mode 100644 index 0000000..25fb344 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/undo-change-property.html
@@ -0,0 +1,60 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> + +<style> +.container { + font-weight: bold +} +</style> + +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('container', step1); + + function step1() { + TestRunner.addResult('Initial value'); + ElementsTestRunner.dumpSelectedElementStyles(true); + + var treeItem = ElementsTestRunner.getMatchedStylePropertyTreeItem('font-weight'); + treeItem.applyStyleText('font-weight: normal', false); + ElementsTestRunner.waitForStyles('container', step2); + } + + function step2() { + TestRunner.addResult('After changing property'); + ElementsTestRunner.dumpSelectedElementStyles(true); + + TestRunner.domModel.undo(); + ElementsTestRunner.selectNodeAndWaitForStyles('other', step3); + } + + function step3() { + TestRunner.addResult('After undo'); + ElementsTestRunner.dumpSelectedElementStyles(true); + + TestRunner.domModel.redo(); + ElementsTestRunner.selectNodeAndWaitForStyles('container', step4); + } + + function step4() { + TestRunner.addResult('After redo'); + ElementsTestRunner.dumpSelectedElementStyles(true); + TestRunner.completeTest(); + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that changing a property is undone properly. +</p> + +<div id="container" class="container"></div> +<div id="other" class="container"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/undo-property-toggle-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/undo-property-toggle-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/undo-property-toggle-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/undo-property-toggle-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/undo-property-toggle.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/undo-property-toggle.html new file mode 100644 index 0000000..fa5a27d9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/undo-property-toggle.html
@@ -0,0 +1,56 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('container', step1); + + function step1(node) { + TestRunner.addResult('Before disable'); + var treeItem = ElementsTestRunner.getElementStylePropertyTreeItem('font-weight'); + ElementsTestRunner.dumpStyleTreeItem(treeItem, ''); + + ElementsTestRunner.toggleStyleProperty('font-weight', false); + ElementsTestRunner.waitForStyles('container', step2); + } + + function step2() { + TestRunner.addResult('After disable'); + var treeItem = ElementsTestRunner.getElementStylePropertyTreeItem('font-weight'); + ElementsTestRunner.dumpStyleTreeItem(treeItem, ''); + + TestRunner.domModel.undo(); + ElementsTestRunner.waitForStyles('container', step3); + } + + function step3() { + TestRunner.addResult('After undo'); + var treeItem = ElementsTestRunner.getElementStylePropertyTreeItem('font-weight'); + ElementsTestRunner.dumpStyleTreeItem(treeItem, ''); + + TestRunner.domModel.redo(); + ElementsTestRunner.waitForStyles('container', step4); + } + + function step4() { + TestRunner.addResult('After redo'); + var treeItem = ElementsTestRunner.getElementStylePropertyTreeItem('font-weight'); + ElementsTestRunner.dumpStyleTreeItem(treeItem, ''); + TestRunner.completeTest(); + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that disabling style is undone properly. +</p> + +<div id="container" style="font-weight:bold"> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/undo-set-selector-text-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/undo-set-selector-text-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/undo-set-selector-text-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/undo-set-selector-text-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/undo-set-selector-text.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/undo-set-selector-text.html new file mode 100644 index 0000000..598ca8d --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/undo-set-selector-text.html
@@ -0,0 +1,59 @@ +<html> +<head> +<style> +#inspected { + color: green; +} +</style> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); + + function step1() { + TestRunner.addResult('=== Before selector modification ==='); + ElementsTestRunner.dumpSelectedElementStyles(true); + var section = ElementsTestRunner.firstMatchedStyleSection(); + section.startEditingSelector(); + section._selectorElement.textContent = '#inspected, #other'; + section._selectorElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + ElementsTestRunner.selectNodeAndWaitForStyles('other', step2); + } + + function step2() { + TestRunner.addResult('=== After selector modification ==='); + ElementsTestRunner.dumpSelectedElementStyles(true); + TestRunner.domModel.undo(); + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step3); + } + + function step3() { + TestRunner.addResult('=== After undo ==='); + ElementsTestRunner.dumpSelectedElementStyles(true); + + TestRunner.domModel.redo(); + ElementsTestRunner.selectNodeAndWaitForStyles('other', step4); + } + + function step4() { + TestRunner.addResult('=== After redo ==='); + ElementsTestRunner.dumpSelectedElementStyles(true); + TestRunner.completeTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that setting selector text can be undone. +</p> + +<div id="inspected"></div> +<div id="other"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/up-down-numerics-and-colors-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/up-down-numerics-and-colors-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/up-down-numerics-and-colors-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/up-down-numerics-and-colors-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/up-down-numerics-and-colors.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/up-down-numerics-and-colors.html new file mode 100644 index 0000000..3ee4cc1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/up-down-numerics-and-colors.html
@@ -0,0 +1,81 @@ +<html> +<head> + +<style> +h1 { + color: #FF2; + opacity: .5; + transform: rotate(1000000000000000065537deg); +} +</style> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + TestRunner.runTestSuite([ + function testInit(next) { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', next); + }, + + function testAlterColor(next) { + var colorTreeElement = ElementsTestRunner.getMatchedStylePropertyTreeItem('color'); + colorTreeElement.startEditing(colorTreeElement.valueElement); + + // PageUp should change to 'FF3' + colorTreeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('PageUp')); + // Ctrl/Meta + Shift Down should change to 'EE3' + if (Host.isMac()) + colorTreeElement.valueElement.dispatchEvent( + TestRunner.createKeyEvent('ArrowDown', /*Ctrl*/ false, /*Alt*/ false, /*Shift*/ true, /*Meta*/ true)); + else + colorTreeElement.valueElement.dispatchEvent( + TestRunner.createKeyEvent('ArrowDown', /*Ctrl*/ true, /*Alt*/ false, /*Shift*/ true, /*Meta*/ false)); + + TestRunner.addResult(colorTreeElement.listItemElement.textContent); + next(); + }, + + function testAlterNumber(next) { + var opacityTreeElement = ElementsTestRunner.getMatchedStylePropertyTreeItem('opacity'); + opacityTreeElement.startEditing(opacityTreeElement.valueElement); + // 0.5 (initial). Alt + Up should change to 0.6 + opacityTreeElement.valueElement.dispatchEvent( + TestRunner.createKeyEvent('ArrowUp', /*Ctrl*/ false, /*Alt*/ true, /*Shift*/ false)); + // Up should change to 1.6 + opacityTreeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('ArrowUp')); + // Shift + PageUp should change to 11.6 + opacityTreeElement.valueElement.dispatchEvent( + TestRunner.createKeyEvent('PageUp', /*Ctrl*/ false, /*Alt*/ false, /*Shift*/ true)); + TestRunner.addResult(opacityTreeElement.listItemElement.textContent); + next(); + }, + + function testAlterBigNumber(next) { + var treeElement = ElementsTestRunner.getMatchedStylePropertyTreeItem('transform'); + treeElement.startEditing(treeElement.valueElement); + var selection = treeElement.valueElement.getComponentSelection(); + var range = selection.getRangeAt(0); + var newRange = document.createRange(); + newRange.setStart(range.startContainer, 10); + newRange.setEnd(range.startContainer, 10); + selection.removeAllRanges(); + selection.addRange(newRange); + treeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('ArrowUp')); + treeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('PageUp')); + TestRunner.addResult(treeElement.listItemElement.textContent); + next(); + } + ]); +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that numeric and color values are incremented/decremented correctly. +</p> +<h1 id="inspected">Inspect Me</h1> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/updates-during-dom-traversal-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/updates-during-dom-traversal-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/updates-during-dom-traversal-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/updates-during-dom-traversal-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/updates-during-dom-traversal.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/updates-during-dom-traversal.html new file mode 100644 index 0000000..b2c6d23 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/updates-during-dom-traversal.html
@@ -0,0 +1,50 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + var updateCount = 0; + var keydownCount = 5; + + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', selectCallback); + function selectCallback() { + TestRunner.addSniffer(Elements.StylesSidebarPane.prototype, '_innerRebuildUpdate', sniffUpdate, true); + var element = ElementsTestRunner.firstElementsTreeOutline().element; + for (var i = 0; i < keydownCount; ++i) + element.dispatchEvent(TestRunner.createKeyEvent('ArrowUp')); + + TestRunner.deprecatedRunAfterPendingDispatches(completeCallback); + } + + function completeCallback() { + if (updateCount >= keydownCount) + TestRunner.addResult('ERROR: got ' + updateCount + ' updates for ' + keydownCount + ' consecutive keydowns'); + else + TestRunner.addResult('OK: updates throttled'); + TestRunner.completeTest(); + } + + function sniffUpdate() { + ++updateCount; + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that style updates are throttled during DOM traversal. <a href="https://bugs.webkit.org/show_bug.cgi?id=77643">Bug 77643</a>. +</p> + +<div></div> +<div></div> +<div></div> +<div></div> +<div></div> +<div id="inspected"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/updates-throttled-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/updates-throttled-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/updates-throttled-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/updates-throttled-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/updates-throttled.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/updates-throttled.html new file mode 100644 index 0000000..d3a551ff --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/updates-throttled.html
@@ -0,0 +1,45 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + var UPDATE_COUNT = 5; + var rebuildCount = 0; + + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', selectCallback); + function selectCallback() { + TestRunner.addSniffer(Elements.StylesSidebarPane.prototype, '_innerRebuildUpdate', sniffRebuild, true); + var stylesPane = UI.panels.elements._stylesWidget; + for (var i = 0; i < UPDATE_COUNT; ++i) + UI.context.setFlavor(SDK.DOMNode, stylesPane.node()); + + TestRunner.deprecatedRunAfterPendingDispatches(completeCallback); + } + + function completeCallback() { + if (rebuildCount >= UPDATE_COUNT) + TestRunner.addResult('ERROR: got ' + rebuildCount + ' rebuilds for ' + UPDATE_COUNT + ' consecutive updates'); + else + TestRunner.addResult('OK: rebuilds throttled'); + TestRunner.completeTest(); + } + + function sniffRebuild() { + ++rebuildCount; + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that Styles sidebar DOM rebuilds are throttled during consecutive updates. <a href="https://bugs.webkit.org/show_bug.cgi?id=78086">Bug 78086</a>. +</p> + +<div id="inspected"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/url-color-swatch-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/url-color-swatch-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/url-color-swatch-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/url-color-swatch-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/url-color-swatch.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/url-color-swatch.html new file mode 100644 index 0000000..6fe7dbf6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/url-color-swatch.html
@@ -0,0 +1,60 @@ +<html> +<head> +<style> +#inspected { + background-image: url("red green blue.jpg"); + color: red; + --blue: blue; + border-color: var(--blue); +} +</style> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); + + function step1() { + dumpDOM(ElementsTestRunner.getMatchedStylePropertyTreeItem('background-image')); + dumpDOM(ElementsTestRunner.getMatchedStylePropertyTreeItem('color')); + dumpDOM(ElementsTestRunner.getMatchedStylePropertyTreeItem('border-color')); + TestRunner.completeTest(); + } + + function dumpDOM(treeItem) { + var element = treeItem.listItemElement.getElementsByClassName('value')[0]; + var result = []; + dumpNode(element, result); + TestRunner.addResult(result.join('')); + } + + function dumpNode(parentNode, result) { + var childNodes = parentNode.childNodes; + for (var i = 0; i < childNodes.length; ++i) { + var node = childNodes[i]; + switch (node.nodeType) { + case Node.ELEMENT_NODE: + if (node.getAttribute('is') === 'color-swatch') + result.push('[] ' + node.textContent); + else + dumpNode(node, result); + break; + case Node.TEXT_NODE: + result.push(node.nodeValue); + break; + } + } + } +} + +</script> +</head> +<body onload="runTest()"> +<p> +Tests that url(...) with space-delimited color names as filename segments do not contain color swatches. Bug <a href="http://bugs.webkit.org/show_bug.cgi?id=106770">106770</a>. +Also tests that CSS variables such as var(--blue) do not contain color swatches. Bug <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=595231">595231</a>. +</p> +<div id="inspected"></div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/url-multiple-collapsing-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/url-multiple-collapsing-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/styles/url-multiple-collapsing-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/url-multiple-collapsing-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/url-multiple-collapsing.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/url-multiple-collapsing.html new file mode 100644 index 0000000..116d8e5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles/url-multiple-collapsing.html
@@ -0,0 +1,52 @@ +<html> +<head> +<style> +#inspected { + background: -webkit-image-set(url("chrome-search://theme/IDR_THEME_NTP_BACKGROUND?pfncmbjabnpldlfbnmhnhblapoibfbei") 1x, url("chrome-search://theme/IDR_THEME_NTP_BACKGROUND@2x?pfncmbjabnpldlfbnmhnhblapoibfbei") 2x); + color: red; +} +</style> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> + +function test() { + ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); + + function step1() { + dumpDOM(ElementsTestRunner.getMatchedStylePropertyTreeItem('background')); + TestRunner.completeTest(); + } + + function dumpDOM(treeItem) { + var element = treeItem.listItemElement.getElementsByClassName('value')[0]; + var result = []; + dumpNode(element, result); + TestRunner.addResult(result.join('')); + } + + function dumpNode(parentNode, result) { + var childNodes = parentNode.childNodes; + for (var i = 0; i < childNodes.length; ++i) { + var node = childNodes[i]; + switch (node.nodeType) { + case Node.ELEMENT_NODE: + dumpNode(node, result); + break; + case Node.TEXT_NODE: + result.push(node.nodeValue); + break; + } + } + } +} + +</script> +</head> +<body onload="runTest()"> +<p> +Tests that multiple URLs which are long are not squashed into a single URL. Bug <a href="http://crbug.com/590172">590172</a>. +</p> +<div id="inspected"></div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/user-properties-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/user-properties-expected.txt new file mode 100644 index 0000000..8b8530e --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/user-properties-expected.txt
@@ -0,0 +1,142 @@ +Tests that DOMNode properly tracks own and descendants' user properties. + +attr1 set on aNode + <!DOCTYPE html> +- <html> [subtreeMarkerCount:1] + - <head> + <script src="../../inspector/inspector-test.js"></script> + <script src="../../inspector/elements-test.js"></script> + <script src="resources/user-properties.js"></script> + </head> + - <body onload="runTest()"> [subtreeMarkerCount:1] + <p>\nTests that DOMNode properly tracks own and descendants' user properties.\n</p> + - <div id="container"> [subtreeMarkerCount:1] + <div id="child1"></div> + - <div id="child2"> [subtreeMarkerCount:1] + <a href="#" id="aNode">Third-level node</a> [markers:[attr1=true], subtreeMarkerCount:1] + </div> + </div> + </body> + </html> +attr2 set on child2 + <!DOCTYPE html> +- <html> [subtreeMarkerCount:2] + - <head> + <script src="../../inspector/inspector-test.js"></script> + <script src="../../inspector/elements-test.js"></script> + <script src="resources/user-properties.js"></script> + </head> + - <body onload="runTest()"> [subtreeMarkerCount:2] + <p>\nTests that DOMNode properly tracks own and descendants' user properties.\n</p> + - <div id="container"> [subtreeMarkerCount:2] + <div id="child1"></div> + - <div id="child2"> [markers:[attr2=value], subtreeMarkerCount:2] + <a href="#" id="aNode">Third-level node</a> [markers:[attr1=true], subtreeMarkerCount:1] + </div> + </div> + </body> + </html> +attr1 set on child2 + <!DOCTYPE html> +- <html> [subtreeMarkerCount:3] + - <head> + <script src="../../inspector/inspector-test.js"></script> + <script src="../../inspector/elements-test.js"></script> + <script src="resources/user-properties.js"></script> + </head> + - <body onload="runTest()"> [subtreeMarkerCount:3] + <p>\nTests that DOMNode properly tracks own and descendants' user properties.\n</p> + - <div id="container"> [subtreeMarkerCount:3] + <div id="child1"></div> + - <div id="child2"> [markers:[attr2=value,attr1=true], subtreeMarkerCount:3] + <a href="#" id="aNode">Third-level node</a> [markers:[attr1=true], subtreeMarkerCount:1] + </div> + </div> + </body> + </html> +attr1 modified on aNode + <!DOCTYPE html> +- <html> [subtreeMarkerCount:3] + - <head> + <script src="../../inspector/inspector-test.js"></script> + <script src="../../inspector/elements-test.js"></script> + <script src="resources/user-properties.js"></script> + </head> + - <body onload="runTest()"> [subtreeMarkerCount:3] + <p>\nTests that DOMNode properly tracks own and descendants' user properties.\n</p> + - <div id="container"> [subtreeMarkerCount:3] + <div id="child1"></div> + - <div id="child2"> [markers:[attr2=value,attr1=true], subtreeMarkerCount:3] + <a href="#" id="aNode">Third-level node</a> [markers:[attr1=anotherValue], subtreeMarkerCount:1] + </div> + </div> + </body> + </html> +attr2 modified on child2 + <!DOCTYPE html> +- <html> [subtreeMarkerCount:3] + - <head> + <script src="../../inspector/inspector-test.js"></script> + <script src="../../inspector/elements-test.js"></script> + <script src="resources/user-properties.js"></script> + </head> + - <body onload="runTest()"> [subtreeMarkerCount:3] + <p>\nTests that DOMNode properly tracks own and descendants' user properties.\n</p> + - <div id="container"> [subtreeMarkerCount:3] + <div id="child1"></div> + - <div id="child2"> [markers:[attr2=anotherValue,attr1=true], subtreeMarkerCount:3] + <a href="#" id="aNode">Third-level node</a> [markers:[attr1=anotherValue], subtreeMarkerCount:1] + </div> + </div> + </body> + </html> +attr1 removed from aNode + <!DOCTYPE html> +- <html> [subtreeMarkerCount:2] + - <head> + <script src="../../inspector/inspector-test.js"></script> + <script src="../../inspector/elements-test.js"></script> + <script src="resources/user-properties.js"></script> + </head> + - <body onload="runTest()"> [subtreeMarkerCount:2] + <p>\nTests that DOMNode properly tracks own and descendants' user properties.\n</p> + - <div id="container"> [subtreeMarkerCount:2] + <div id="child1"></div> + - <div id="child2"> [markers:[attr2=anotherValue,attr1=true], subtreeMarkerCount:2] + <a href="#" id="aNode">Third-level node</a> + </div> + </div> + </body> + </html> +aNode removed + <!DOCTYPE html> +- <html> [subtreeMarkerCount:2] + - <head> + <script src="../../inspector/inspector-test.js"></script> + <script src="../../inspector/elements-test.js"></script> + <script src="resources/user-properties.js"></script> + </head> + - <body onload="runTest()"> [subtreeMarkerCount:2] + <p>\nTests that DOMNode properly tracks own and descendants' user properties.\n</p> + - <div id="container"> [subtreeMarkerCount:2] + <div id="child1"></div> + <div id="child2"></div> [markers:[attr2=anotherValue,attr1=true], subtreeMarkerCount:2] + </div> + </body> + </html> +child2 removed + <!DOCTYPE html> +- <html> [subtreeMarkerCount:2] + - <head> + <script src="../../inspector/inspector-test.js"></script> + <script src="../../inspector/elements-test.js"></script> + <script src="resources/user-properties.js"></script> + </head> + - <body onload="runTest()"> [subtreeMarkerCount:2] + <p>\nTests that DOMNode properly tracks own and descendants' user properties.\n</p> + - <div id="container"> + <div id="child1"></div> + </div> + </body> + </html> +
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/user-properties.html b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/user-properties.html new file mode 100644 index 0000000..86c8ecb --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/user-properties.html
@@ -0,0 +1,20 @@ +<!DOCTYPE html> +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/elements-test.js"></script> +<script src="resources/user-properties.js"></script> +</head> + +<body onload="runTest()"> +<p> +Tests that DOMNode properly tracks own and descendants' user properties. +</p> + +<div id="container"> + <div id="child1"></div> + <div id="child2"><a href="#" id="aNode">Third-level node</a></div> +</div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/accessibility/accessibility-pane-test.js b/third_party/WebKit/LayoutTests/http/tests/devtools/resources/accessibility-pane-test.js similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/accessibility/accessibility-pane-test.js rename to third_party/WebKit/LayoutTests/http/tests/devtools/resources/accessibility-pane-test.js
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/autocomplete-test.js b/third_party/WebKit/LayoutTests/http/tests/devtools/resources/autocomplete-test.js similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/autocomplete-test.js rename to third_party/WebKit/LayoutTests/http/tests/devtools/resources/autocomplete-test.js
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-test.js b/third_party/WebKit/LayoutTests/http/tests/devtools/resources/edit-dom-test.js similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-test.js rename to third_party/WebKit/LayoutTests/http/tests/devtools/resources/edit-dom-test.js
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/shadow/elements-panel-shadow-selection-on-refresh.js b/third_party/WebKit/LayoutTests/http/tests/devtools/resources/elements-panel-shadow-selection-on-refresh.js similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/shadow/elements-panel-shadow-selection-on-refresh.js rename to third_party/WebKit/LayoutTests/http/tests/devtools/resources/elements-panel-shadow-selection-on-refresh.js
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/set-outer-html-test.js b/third_party/WebKit/LayoutTests/http/tests/devtools/resources/set-outer-html-test.js similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/elements/edit/set-outer-html-test.js rename to third_party/WebKit/LayoutTests/http/tests/devtools/resources/set-outer-html-test.js
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/autocomplete-css-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/autocomplete-css-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/autocomplete-css-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/autocomplete-css-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/autocomplete-css.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/autocomplete-css.html new file mode 100644 index 0000000..89ab960 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/autocomplete-css.html
@@ -0,0 +1,82 @@ +<html> +<head> +<link rel="stylesheet" href="./resources/empty.css"> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script src="../resources/autocomplete-test.js"></script> +<script src="../resources/editor-test.js"></script> +<script> +function test() { + SourcesTestRunner.showScriptSource('empty.css', onSourceFrame); + + var textEditor; + var dumpSuggestions; + function onSourceFrame(sourceFrame) { + textEditor = sourceFrame.textEditor; + dumpSuggestions = SourcesTestRunner.dumpSuggestions.bind(InspectorTest, textEditor); + TestRunner.runTestSuite(testSuite); + } + + var testSuite = [ + function testClassNameAutocomplete(next) { + dumpSuggestions(['.red { color: red }', '.blue { color: blue }', '.|']).then(next); + }, + + function testPropertyNameAutocomplete1(next) { + dumpSuggestions(['.red { color: red }', '.blue { c|']).then(next); + }, + + function testPropertyNameAutocomplete2(next) { + dumpSuggestions([ + '.my-class { -|webkit-border: 1px solid black; -webkit-color: blue;', 'text-align: }' + ]).then(next); + }, + + function testPropertyValueAutocomplete1(next) { + dumpSuggestions(['.red { border-style: |', '/* some other words to mess up */']).then(next); + }, + + function testPropertyValueAutocomplete2(next) { + dumpSuggestions(['.red { border-style: d|', '/* dial drummer dig */']).then(next); + }, + + function testPropertyValueAutocomplete3(next) { + dumpSuggestions(['.red { border-style: z|', '/* zipper zorro zion */']).then(next); + }, + + function testPropertyValueAutocomplete4(next) { + dumpSuggestions(['.red { border-style/* comment */: /* comment */|']).then(next); + }, + + function testPropertyValueAutocomplete5(next) { + dumpSuggestions([ + '.my-class { -webkit-border: 1px solid black; -webkit-color: blue;', 'text-align: |}' + ]).then(next); + }, + + function verifySuggestionsOnColumnTypedIn(next) { + textEditor.element.focus(); + textEditor.setText(['.green {', ' display'].join('\n')); + textEditor.setSelection(TextUtils.TextRange.createFromLocation(1, 10)); + SourcesTestRunner.dumpTextWithSelection(textEditor); + TestRunner.addSniffer( + TextEditor.TextEditorAutocompleteController.prototype, '_onSuggestionsShownForTest', suggestionsShown); + SourcesTestRunner.typeIn(textEditor, ':'); + + function suggestionsShown(words) { + TestRunner.addResult('Suggestions displayed on \':\' symbol typed in:'); + TestRunner.addResult('[' + words.map(item => item.text).join(', ') + ']'); + next(); + } + }, + ]; +} +</script> +</head> + +<body onload="runTest();"> +<p> +The test verifies autocomplete suggestions for CSS file. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/autocomplete-general-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/autocomplete-general-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/autocomplete-general-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/autocomplete-general-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/autocomplete-general.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/autocomplete-general.html new file mode 100644 index 0000000..ab58228 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/autocomplete-general.html
@@ -0,0 +1,86 @@ +<html> +<head> +<script src="../sources/debugger/resources/edit-me.js"></script> +<script src="../resources/editor-test.js"></script> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script> +function test() { + SourcesTestRunner.showScriptSource('edit-me.js', onSourceFrame); + + var textEditor; + function onSourceFrame(sourceFrame) { + textEditor = sourceFrame.textEditor; + textEditor.element.focus(); + TestRunner.runTestSuite(testSuite); + } + + var testSuite = [ + // This test has to be the first. It validates that autocompletion controller + // will initialize as a key will be pressed. + function testCompletionsShowUpOnKeyPress(next) { + textEditor.setText('name1 name2 name3 name4\nna'); + textEditor.setSelection(TextUtils.TextRange.createFromLocation(1, 2)); + TestRunner.addSniffer( + TextEditor.TextEditorAutocompleteController.prototype, '_onSuggestionsShownForTest', + onAutocompletionSuggestBox); + SourcesTestRunner.typeIn(textEditor, 'm'); + function onAutocompletionSuggestBox() { + document.activeElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); + dumpDictionary(next); + } + }, + + function testSetInitialText(next) { + textEditor.setText('one two three3_\nfour five\na_b\nsix\n123foo\n132\nseven'); + dumpDictionary(next); + }, + + function testAlphaNumericWords(next) { + textEditor.setText('2 2foo foo2 2foo4 foo3bar'); + dumpDictionary(next); + }, + + function testRemoveDuplicate(next) { + textEditor.setText('one\none'); + textEditor.setSelection(new TextUtils.TextRange(0, 0, 0, 3)); + SourcesTestRunner.typeIn(textEditor, '\b', dumpDictionary.bind(null, next)); + }, + + function testSetText(next) { + textEditor.setText('dog cat \'mouse\';dog bird'); + dumpDictionary(next); + }, + + function testSimpleEdit(next) { + textEditor.setSelection(TextUtils.TextRange.createFromLocation(0, 3)); + SourcesTestRunner.typeIn(textEditor, '\b', dumpDictionary.bind(null, next)); + }, + + function testDeleteOneDogAndOneCat(next) { + textEditor.setSelection(TextUtils.TextRange.createFromLocation(0, 6)); + SourcesTestRunner.typeIn(textEditor, '\b\b\b\b\b\b', dumpDictionary.bind(null, next)); + } + ]; + + function dumpDictionary(next) { + var wordsInDictionary = textEditor._autocompleteController._dictionary.wordsWithPrefix(''); + TestRunner.addResult('========= Text in editor ========='); + SourcesTestRunner.dumpTextWithSelection(textEditor); + TestRunner.addResult('======= Words in dictionary ======='); + TestRunner.addResult('[' + wordsInDictionary.sort().join(', ') + ']'); + TestRunner.addResult('============='); + next(); + } +} + +</script> +</head> + +<body onload="runTest();"> +<p> +This test checks how text editor updates autocompletion dictionary in a response +to user input. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/autocomplete-hide-on-smart-brace-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/autocomplete-hide-on-smart-brace-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/autocomplete-hide-on-smart-brace-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/autocomplete-hide-on-smart-brace-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/autocomplete-hide-on-smart-brace.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/autocomplete-hide-on-smart-brace.html new file mode 100644 index 0000000..1bf8d906 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/autocomplete-hide-on-smart-brace.html
@@ -0,0 +1,55 @@ +<html> +<head> +<script src="../sources/debugger/resources/edit-me.js"></script> +<script src="../resources/editor-test.js"></script> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script> + +function test() { + SourcesTestRunner.showScriptSource('edit-me.js', onSourceFrame); + + var textEditor; + function onSourceFrame(sourceFrame) { + textEditor = sourceFrame.textEditor; + textEditor.element.focus(); + TestRunner.runTestSuite(testSuite); + } + + var testSuite = [ + function testSummonSuggestBox(next) { + TestRunner.addSniffer( + TextEditor.TextEditorAutocompleteController.prototype, '_onSuggestionsShownForTest', onSuggestionsShown); + + textEditor.setText('one\n()'); + textEditor.setSelection(TextUtils.TextRange.createFromLocation(1, 1)); + SourcesTestRunner.typeIn(textEditor, 'o', function() {}); + + function onSuggestionsShown() { + TestRunner.addResult('Suggestions shown.'); + next(); + } + }, + + function testTypeSmartBrace(next) { + TestRunner.addSniffer( + TextEditor.TextEditorAutocompleteController.prototype, '_onSuggestionsHiddenForTest', onSuggestionsHidden); + SourcesTestRunner.typeIn(textEditor, ')', function() {}); + + function onSuggestionsHidden() { + TestRunner.addResult('Suggestions hidden.'); + next(); + } + }, + ]; +} + +</script> +</head> + +<body onload="runTest();"> +<p> +Verify that suggest box gets hidden whenever a cursor jumps over smart brace. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/autocomplete-scss-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/autocomplete-scss-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/autocomplete-scss-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/autocomplete-scss-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/autocomplete-scss.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/autocomplete-scss.html new file mode 100644 index 0000000..aebc88f69 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/autocomplete-scss.html
@@ -0,0 +1,37 @@ +<html> +<head> +<link rel="stylesheet" href="./resources/empty.css"> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script src="../resources/autocomplete-test.js"></script> +<script src="../resources/editor-test.js"></script> +<script> +function test() { + SourcesTestRunner.showScriptSource('empty.scss', onSourceFrame); + + var dumpSuggestions; + function onSourceFrame(sourceFrame) { + dumpSuggestions = SourcesTestRunner.dumpSuggestions.bind(InspectorTest, sourceFrame.textEditor); + TestRunner.runTestSuite(testSuite); + } + + var testSuite = [ + function testPropertyValueSuggestionsBefore$(next) { + dumpSuggestions(['@mixin my-border-style($style) {', ' border-style: |$;', '}']).then(next); + }, + + function testPropertyValueSuggestionsAfter$(next) { + dumpSuggestions(['@mixin my-border-style($style) {', ' border-style: $|;', '}']).then(next); + }, + ]; +} + +</script> +</head> + +<body onload="runTest();"> +<p> +The test verifies autocomplete suggestions for SCSS file. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/bezier-swatch-position-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/bezier-swatch-position-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/bezier-swatch-position-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/bezier-swatch-position-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/bezier-swatch-position.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/bezier-swatch-position.html new file mode 100644 index 0000000..fc7b1e3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/bezier-swatch-position.html
@@ -0,0 +1,52 @@ +<html> +<head> + +<link rel="stylesheet" href="resources/bezier.css"> + +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script src="../../inspector/sources-test.js"></script> +<script> +function test() { + SourcesTestRunner.showScriptSource('bezier.css', onSourceFrame); + + function onSourceFrame(sourceFrame) { + TestRunner.addResult('Initial swatch positions:'); + SourcesTestRunner.dumpSwatchPositions(sourceFrame, Sources.CSSSourceFrame.SwatchBookmark); + + TestRunner.runTestSuite([ + function testEditBezier(next) { + var swatch = sourceFrame.textEditor._codeMirrorElement.querySelector('span[is=bezier-swatch]'); + swatch.shadowRoot.querySelector('.bezier-swatch-icon').click(); + sourceFrame._bezierEditor.setBezier(UI.Geometry.CubicBezier.parse('linear')); + sourceFrame._bezierEditor._onchange(); + sourceFrame._swatchPopoverHelper.hide(true); + SourcesTestRunner.dumpSwatchPositions(sourceFrame, Sources.CSSSourceFrame.SwatchBookmark); + next(); + }, + + function testAddBezier(next) { + var bodyLineEnd = new TextUtils.TextRange(1, 37, 1, 37); + sourceFrame.textEditor.editRange(bodyLineEnd, ' transition: height 1s cubic-bezier(0, 0.5, 1, 1);'); + SourcesTestRunner.dumpSwatchPositions(sourceFrame, Sources.CSSSourceFrame.SwatchBookmark); + next(); + }, + + function testInvalidateBezier(next) { + var startParenthesis = new TextUtils.TextRange(1, 67, 1, 68); + sourceFrame.textEditor.editRange(startParenthesis, '['); + SourcesTestRunner.dumpSwatchPositions(sourceFrame, Sources.CSSSourceFrame.SwatchBookmark); + next(); + } + ]); + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that bezier swatches are updated properly in CSS Sources. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/color-swatch-position-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/color-swatch-position-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/color-swatch-position-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/color-swatch-position-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/color-swatch-position.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/color-swatch-position.html new file mode 100644 index 0000000..702c5a2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/color-swatch-position.html
@@ -0,0 +1,74 @@ +<html> +<head> + +<link rel="stylesheet" href="resources/color.css"> + +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script src="../../inspector/sources-test.js"></script> +<script> +function test() { + SourcesTestRunner.showScriptSource('color.css', onSourceFrame); + + function onSourceFrame(sourceFrame) { + TestRunner.addResult('Initial swatch positions:'); + SourcesTestRunner.dumpSwatchPositions(sourceFrame, Sources.CSSSourceFrame.SwatchBookmark); + + TestRunner.runTestSuite([ + function testEditSpectrum(next) { + var swatch = sourceFrame.textEditor._codeMirrorElement.querySelector('span[is=color-swatch]'); + swatch.shadowRoot.querySelector('.color-swatch-inner').click(); + sourceFrame._spectrum._innerSetColor( + Common.Color.parse('#008000').hsva(), '', Common.Color.Format.HEX, + ColorPicker.Spectrum._ChangeSource.Other); + sourceFrame._swatchPopoverHelper.hide(true); + SourcesTestRunner.dumpSwatchPositions(sourceFrame, Sources.CSSSourceFrame.SwatchBookmark); + next(); + }, + + function testAddLine(next) { + var start = TextUtils.TextRange.createFromLocation(0, 0); + sourceFrame.textEditor.editRange(start, '/* New line */\n'); + SourcesTestRunner.dumpSwatchPositions(sourceFrame, Sources.CSSSourceFrame.SwatchBookmark); + next(); + }, + + function testDeleteLine(next) { + var bodyLine = new TextUtils.TextRange(2, 0, 3, 0); + sourceFrame.textEditor.editRange(bodyLine, ''); + SourcesTestRunner.dumpSwatchPositions(sourceFrame, Sources.CSSSourceFrame.SwatchBookmark); + next(); + }, + + function testAddColor(next) { + var emptyBodyLine = new TextUtils.TextRange(2, 0, 2, 0); + sourceFrame.textEditor.editRange(emptyBodyLine, 'color: hsl(300, 100%, 35%);'); + SourcesTestRunner.dumpSwatchPositions(sourceFrame, Sources.CSSSourceFrame.SwatchBookmark); + next(); + }, + + function testInvalidateColor(next) { + var endParenthesis = new TextUtils.TextRange(2, 25, 2, 26); + sourceFrame.textEditor.editRange(endParenthesis, ']'); + SourcesTestRunner.dumpSwatchPositions(sourceFrame, Sources.CSSSourceFrame.SwatchBookmark); + next(); + }, + + function testBookmarksAtLineStart(next) { + var lineStart = new TextUtils.TextRange(5, 0, 5, 0); + sourceFrame.textEditor.editRange(lineStart, 'background color:\n#ff0;\n'); + SourcesTestRunner.dumpSwatchPositions(sourceFrame, Sources.CSSSourceFrame.SwatchBookmark); + next(); + } + ]); + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that color swatch positions are updated properly. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/compile-javascript-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/compile-javascript-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/compile-javascript-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/compile-javascript-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/compile-javascript.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/compile-javascript.html new file mode 100644 index 0000000..3d222c7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/compile-javascript.html
@@ -0,0 +1,33 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script src="../resources/editor-test.js"></script> +<script src="./debugger/resources/edit-me.js"></script> +<script> + +function test() { + SourcesTestRunner.showScriptSource('edit-me.js', onSourceFrame); + + function onSourceFrame(sourceFrame) { + TestRunner.addSniffer( + Sources.JavaScriptCompiler.prototype, '_compilationFinishedForTest', + onCompilationFinished.bind(null, sourceFrame)); + sourceFrame.textEditor.setSelection(TextUtils.TextRange.createFromLocation(0, 0)); + SourcesTestRunner.typeIn(sourceFrame.textEditor, 'test!'); + } + + function onCompilationFinished(sourceFrame) { + SourcesTestRunner.dumpSourceFrameMessages(sourceFrame); + TestRunner.completeTest(); + } +} + +</script> + +</head> + +<body onload="runTest()"> +<p>Verifies proactive javascript compilation.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/css-inline-sourcemap-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/css-inline-sourcemap-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/css-inline-sourcemap-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/css-inline-sourcemap-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/css-inline-sourcemap.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/css-inline-sourcemap.html new file mode 100644 index 0000000..daaf4f5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/css-inline-sourcemap.html
@@ -0,0 +1,26 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<style>/*# sourceMappingURL=data:application/json;charset=utf-8;base64,ew0KICAidmVyc2lvbiI6IDMsDQogICJmaWxlIjogIiIsDQogICJzb3VyY2VzIjogWyIuL3Jlc291cmNlcy9lbXB0eS5zY3NzIl0sDQogICJuYW1lcyI6IFtdLA0KICAibWFwcGluZ3MiOiAiIg0KfQ== */</style> +<script> +function test() { + SourcesTestRunner.showScriptSource('empty.scss', onSourceFrame); + + function onSourceFrame(sourceFrame) { + TestRunner.addResult('Source mapping loaded.'); + TestRunner.completeTest(); + dumpSuggestions = SourcesTestRunner.dumpSuggestions.bind(InspectorTest, sourceFrame.textEditor); + TestRunner.runTestSuite(testSuite); + } +} + +</script> +</head> + +<body onload="runTest();"> +<p> +The test verifies that source maps are loaded if specified inside style tag. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/css-outline-dialog-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/css-outline-dialog-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/css-outline-dialog-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/css-outline-dialog-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/css-outline-dialog.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/css-outline-dialog.html new file mode 100644 index 0000000..433642a --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/css-outline-dialog.html
@@ -0,0 +1,44 @@ +<html> +<head> + +<link rel="stylesheet" href="resources/css-outline-column.css"> + +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script> + +function test() { + SourcesTestRunner.showScriptSource('css-outline-column.css', onSourceShown); + var textEditor; + function onSourceShown(sourceFrame) { + textEditor = sourceFrame.textEditor; + TestRunner.addSniffer(Sources.OutlineQuickOpen.prototype, 'refresh', onQuickOpenFulfilled); + UI.panels.sources._sourcesView._showOutlineQuickOpen(); + } + + function onQuickOpenFulfilled() { + TestRunner.addSniffer(Common.Revealer, 'revealPromise', (revealable, omitFocus, promise) => promise.then(revealed)); + this.selectItem(1, ''); + } + + function revealed() { + var selection = textEditor.selection(); + if (!selection.isEmpty()) { + TestRunner.addResult('ERROR: selection is not empty.'); + TestRunner.completeTest(); + return; + } + TestRunner.addResult( + String.sprintf('Cursor position: line %d, column %d', selection.startLine, selection.startColumn)); + TestRunner.completeTest(); + } +} + +</script> + +</head> + +<body onload="runTest()"> +<p>Top-down test to verify css outline dialog.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-change-variable-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-change-variable-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-change-variable-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-change-variable-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-change-variable.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-change-variable.html new file mode 100644 index 0000000..4cec43e --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-change-variable.html
@@ -0,0 +1,71 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/console-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function slave(x) +{ + var y = 20; + debugger; +} + +function testFunction() +{ + var localObject1 = { a: 310 }; + var localObject2 = 42; + slave(4000); +} + +var test = function() { + SourcesTestRunner.startDebuggerTest(step1, true); + + function evalLocalVariables(callback) { + ConsoleTestRunner.evaluateInConsoleAndDump('localObject1.a', next); + function next() { + ConsoleTestRunner.evaluateInConsoleAndDump('localObject2', callback); + } + } + + function localScopeObject() { + var localsSection = SourcesTestRunner.scopeChainSections()[0]; + return localsSection._object; + } + + function step1() { + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); + } + + function step2(callFrames) { + var pane = self.runtime.sharedInstance(Sources.CallStackSidebarPane); + pane._list.selectItem(pane._list._model.at(1)); + TestRunner.deprecatedRunAfterPendingDispatches(step3); + } + + function step3() { + TestRunner.addResult('\nEvaluated before modification:'); + evalLocalVariables(step4); + } + + async function step4() { + await localScopeObject().setPropertyValue('localObject1', '({ a: -290})'); + await localScopeObject().setPropertyValue({value: 'localObject2'}, '123'); + TestRunner.addResult('\nEvaluated after modification:'); + evalLocalVariables(step7); + } + + function step7() { + SourcesTestRunner.completeDebuggerTest(); + } +}; + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that modifying local variables works fine. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-eval-on-call-frame-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-eval-on-call-frame-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-eval-on-call-frame-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-eval-on-call-frame-expected.txt
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-eval-on-call-frame-inside-iframe-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-eval-on-call-frame-inside-iframe-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-eval-on-call-frame-inside-iframe-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-eval-on-call-frame-inside-iframe-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-eval-on-call-frame-inside-iframe.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-eval-on-call-frame-inside-iframe.html new file mode 100644 index 0000000..a9ae1eb --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-eval-on-call-frame-inside-iframe.html
@@ -0,0 +1,95 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/console-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function dirxml() { return "overridden dirxml() in top frame"; } + +function onload() +{ + var iframe = document.getElementById("iframe"); + var doc = iframe.contentWindow.document; + + var html = "<html><head><script>\n" + + "function dir() { return 'overridden dir() in iframe'; }\n" + + "function pauseInsideIframe()\n" + + "{\n" + + " var table = 'local in iframe';\n" + + " debugger;\n" + + " dir;\n" + + "}\n" + + "</" + "script></" + "head><" + "body></" + "body></" + "html>"; + doc.open(); + doc.write(html); + doc.close(); + + runTest(); +} + +function testFunction() +{ + var clear = "local in top frame"; + var iframe = document.getElementById("iframe"); + iframe.contentWindow.pauseInsideIframe.call({foo: 42}); +} + +function test() { + var expressions = [ + 'dir()', 'dirxml()', 'table', 'clear', + 'x:', // print correct syntax error: crbug.com/110163 + ]; + + function evaluateInConsoleAndDump(callback) { + var copy = expressions.slice(); + inner(); + + function inner() { + var expression = copy.shift(); + if (expression) + ConsoleTestRunner.evaluateInConsoleAndDump(expression, inner, true); + else + callback(); + } + } + + SourcesTestRunner.startDebuggerTest(step1, true); + + function step1() { + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); + } + + function step2(callFrames) { + SourcesTestRunner.captureStackTrace(callFrames); + TestRunner.addResult('\n=== Evaluating on iframe ==='); + evaluateInConsoleAndDump(step3); + } + + function step3() { + var pane = self.runtime.sharedInstance(Sources.CallStackSidebarPane); + pane._list.selectItem(pane._list._model.at(1)); + TestRunner.deprecatedRunAfterPendingDispatches(step4); + } + + function step4() { + TestRunner.addResult('\n=== Evaluating on top frame ==='); + evaluateInConsoleAndDump(step5); + } + + function step5() { + SourcesTestRunner.completeDebuggerTest(); + } +} + +</script> +</head> + +<body onload="onload()"> +<iframe id="iframe"></iframe> +<p> +Test that evaluation on call frame works across all inspected windows in the call stack. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-eval-on-call-frame.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-eval-on-call-frame.html new file mode 100644 index 0000000..74dec74 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-eval-on-call-frame.html
@@ -0,0 +1,44 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/console-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +var a = 1; +function testFunction() +{ + var a = 2; + debugger; +} + +var test = function() { + SourcesTestRunner.startDebuggerTest(step1); + + function step1() { + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); + } + + function step2() { + ConsoleTestRunner.evaluateInConsole('a', step3); + } + + function step3(result) { + TestRunner.addResult('Evaluated in console in the top frame context: a = ' + result); + SourcesTestRunner.completeDebuggerTest(); + } +}; + +</script> +</head> + +<body onload="runTest()"> +<p> +Test that evaluation in the context of top frame will see values +of its local variables, even if there are global variables with +same names. On success the test will print a = 2(value of the +local variable a). <a href="https://bugs.webkit.org/show_bug.cgi?id=47358">Bug 47358.</a> +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-eval-while-paused-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-eval-while-paused-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-eval-while-paused-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-eval-while-paused-expected.txt
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-eval-while-paused-throws-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-eval-while-paused-throws-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-eval-while-paused-throws-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-eval-while-paused-throws-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-eval-while-paused-throws.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-eval-while-paused-throws.html new file mode 100644 index 0000000..9c67e10a --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-eval-while-paused-throws.html
@@ -0,0 +1,75 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/console-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +var globalObj = { + func: function() + { + throw new Error("globalObj.func"); + } +}; + +function testFunction() +{ + var localObj = { + func: function() + { + throw new Error("localObj.func"); + } + }; + debugger; +} + +var test = function() { + SourcesTestRunner.startDebuggerTest(step1, true); + + function injectedFunction() { + var injectedObj = { + func: function() { + throw new Error('injectedObj.func'); + } + }; + return injectedObj.func(); + } + + function step1() { + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); + } + + function step2() { + TestRunner.evaluateInPage(String(injectedFunction), step3); + } + + function step3() { + ConsoleTestRunner.evaluateInConsole('injectedFunction()', step4); + } + + function step4() { + ConsoleTestRunner.evaluateInConsole('localObj.func()', step5); + } + + function step5() { + ConsoleTestRunner.evaluateInConsole('globalObj.func()', dumpConsoleMessages); + } + + function dumpConsoleMessages() { + TestRunner.deprecatedRunAfterPendingDispatches(() => { + TestRunner.addResult('Dumping console messages:\n'); + ConsoleTestRunner.dumpConsoleMessages(); + SourcesTestRunner.completeDebuggerTest(); + }); + } +}; +//# sourceURL=test.js +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that evaluation in console that throws works fine when script is paused. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-eval-while-paused.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-eval-while-paused.html new file mode 100644 index 0000000..7911c65 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-eval-while-paused.html
@@ -0,0 +1,60 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/console-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +var globalVar = { b: 1 }; + +function slave(x) +{ + var y = 20; + debugger; +} + +function testFunction() +{ + var localObject = { a: 300 }; + slave(4000); +} + +var test = function() { + SourcesTestRunner.startDebuggerTest(step1); + + function step1() { + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); + } + + function step2(callFrames) { + ConsoleTestRunner.evaluateInConsole('x + y + globalVar.b', step3.bind(null, callFrames)); + } + + function step3(callFrames, result) { + TestRunner.addResult('Evaluated script on the top frame: ' + result); + var pane = self.runtime.sharedInstance(Sources.CallStackSidebarPane); + pane._list.selectItem(pane._list._model.at(1)); + TestRunner.deprecatedRunAfterPendingDispatches(step4); + } + + function step4() { + ConsoleTestRunner.evaluateInConsole('localObject.a + globalVar.b', step5); + } + + function step5(result) { + TestRunner.addResult('Evaluated script on the calling frame: ' + result); + SourcesTestRunner.completeDebuggerTest(); + } +}; + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that evaluation in console works fine when script is paused. It also checks that +stack and global variables are accessible from the console. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-mute-exception-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-mute-exception-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-mute-exception-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-mute-exception-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-mute-exception.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-mute-exception.html new file mode 100644 index 0000000..9c2f7f6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-mute-exception.html
@@ -0,0 +1,59 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function throwAnException() +{ + var a; + try { + a.foo = 1; // Should not stop here. + } catch (e) { + } + + debugger; // Should not stop here. + + try { + a.bar = 1; // Should stop here. + } catch (e) { + } +} + +function handleClick() +{ + throwAnException(); +} + +var test = function() { + SourcesTestRunner.startDebuggerTest(step1); + + function step1() { + TestRunner.DebuggerAgent.setPauseOnExceptions(SDK.DebuggerModel.PauseOnExceptionsState.PauseOnAllExceptions); + SourcesTestRunner.showScriptSource('debugger-mute-exception.html', step2); + } + + function step2(sourceFrame) { + TestRunner.addResult('Script source was shown.'); + SourcesTestRunner.setBreakpoint(sourceFrame, 10, 'false', true); + SourcesTestRunner.setBreakpoint(sourceFrame, 14, 'false', true); + TestRunner.evaluateInPage('setTimeout(handleClick, 0)'); + SourcesTestRunner.waitUntilPausedAndDumpStackAndResume(step3); + } + + function step3() { + TestRunner.DebuggerAgent.setPauseOnExceptions(SDK.DebuggerModel.PauseOnExceptionsState.DontPauseOnExceptions); + SourcesTestRunner.completeDebuggerTest(); + } +}; + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that pause on exception is muted when conditional breakpoint is set to "false". +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-no-nested-pause-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-no-nested-pause-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-no-nested-pause-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-no-nested-pause-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-no-nested-pause.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-no-nested-pause.html new file mode 100644 index 0000000..c45d7be --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-no-nested-pause.html
@@ -0,0 +1,43 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/console-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function testFunction() +{ + testFunction.invocationCount++; + debugger; +} + +testFunction.invocationCount = 0; + +var test = function() { + SourcesTestRunner.startDebuggerTest(step1); + + function step1() { + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); + } + + function step2() { + ConsoleTestRunner.evaluateInConsole('testFunction(); testFunction.invocationCount', step3); + TestRunner.addResult('Set timer for test function.'); + } + + function step3(result) { + TestRunner.addResult('testFunction.invocationCount = ' + result); + SourcesTestRunner.completeDebuggerTest(); + } +}; + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that debugger will skip breakpoint hit when script execution is already paused. <a href="https://bugs.webkit.org/show_bug.cgi?id=41768">See bug</a> +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-in-eval-script-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-in-eval-script-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-in-eval-script-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-in-eval-script-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-in-eval-script.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-in-eval-script.html new file mode 100644 index 0000000..bea392b5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-in-eval-script.html
@@ -0,0 +1,38 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + + +var test = function() { + var scriptToEvaluate = 'function testFunction() {\n' + + ' debugger;\n' + + '}\n' + + 'setTimeout(testFunction, 0);\n'; + + SourcesTestRunner.startDebuggerTest(step1); + + function step1() { + TestRunner.evaluateInPage( + scriptToEvaluate, TestRunner.addResult.bind(InspectorTest, 'Evaluated script in console.')); + SourcesTestRunner.waitUntilPaused(step2); + } + + function step2(callFrames) { + SourcesTestRunner.captureStackTrace(callFrames); + SourcesTestRunner.completeDebuggerTest(); + } +}; + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that debugger will stop on "debugger" statement in a function that was added +to the inspected page via evaluation in Web Inspector console.<a href="https://bugs.webkit.org/show_bug.cgi?id=41058">Bug 41058</a> +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-in-internal-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-in-internal-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-in-internal-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-in-internal-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-in-internal.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-in-internal.html new file mode 100644 index 0000000..aa45128 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-in-internal.html
@@ -0,0 +1,46 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function throwException() +{ + new Function("return ()"); +} + +function handleClick() +{ + throwException(); +} + +var test = function() { + SourcesTestRunner.startDebuggerTest(step1); + + function step1() { + TestRunner.DebuggerAgent.setPauseOnExceptions(SDK.DebuggerModel.PauseOnExceptionsState.PauseOnUncaughtExceptions); + SourcesTestRunner.showScriptSource('debugger-pause-in-internal.html', step2); + } + + function step2() { + TestRunner.addResult('Script source was shown.'); + TestRunner.evaluateInPage('setTimeout(handleClick, 0)'); + SourcesTestRunner.waitUntilPaused(step3); + } + + function step3(callFrames) { + SourcesTestRunner.captureStackTrace(callFrames); + SourcesTestRunner.completeDebuggerTest(); + } +}; + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that pause on exception in internal script does not crash. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-on-debugger-statement-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-on-debugger-statement-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-on-debugger-statement-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-on-debugger-statement-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-on-debugger-statement.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-on-debugger-statement.html new file mode 100644 index 0000000..3ed6aba2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-on-debugger-statement.html
@@ -0,0 +1,33 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function testFunction() +{ + debugger; +} + +var test = function() { + SourcesTestRunner.startDebuggerTest(step1); + + function step1() { + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); + } + + function step2() { + SourcesTestRunner.completeDebuggerTest(); + } +}; + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that debugger will stop on "debugger" statement. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-on-exception-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-on-exception-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-on-exception-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-on-exception-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-on-exception.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-on-exception.html new file mode 100644 index 0000000..00b5ce9a --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-on-exception.html
@@ -0,0 +1,46 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function throwAnException() +{ + return unknown_var; +} + +function handleClick() +{ + throwAnException(); +} + +var test = function() { + SourcesTestRunner.startDebuggerTest(step1); + + function step1() { + TestRunner.DebuggerAgent.setPauseOnExceptions(SDK.DebuggerModel.PauseOnExceptionsState.PauseOnUncaughtExceptions); + SourcesTestRunner.showScriptSource('debugger-pause-on-exception.html', step2); + } + + function step2() { + TestRunner.addResult('Script source was shown.'); + TestRunner.evaluateInPage('setTimeout(handleClick, 0)'); + SourcesTestRunner.waitUntilPausedAndDumpStackAndResume(step3); + } + + function step3() { + TestRunner.DebuggerAgent.setPauseOnExceptions(SDK.DebuggerModel.PauseOnExceptionsState.DontPauseOnExceptions); + SourcesTestRunner.completeDebuggerTest(); + } +}; + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that pause on exception works. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-on-failed-assertion-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-on-failed-assertion-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-on-failed-assertion-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-on-failed-assertion-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-on-failed-assertion.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-on-failed-assertion.html new file mode 100644 index 0000000..b524e17 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-on-failed-assertion.html
@@ -0,0 +1,46 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function failAssertion() +{ + console.assert(false); +} + +function handleClick() +{ + failAssertion(); +} + +var test = function() { + SourcesTestRunner.startDebuggerTest(step1); + + function step1() { + TestRunner.DebuggerAgent.setPauseOnExceptions(SDK.DebuggerModel.PauseOnExceptionsState.PauseOnUncaughtExceptions); + SourcesTestRunner.showScriptSource('debugger-pause-on-failed-assertion.html', step2); + } + + function step2() { + TestRunner.addResult('Script source was shown.'); + TestRunner.evaluateInPage('setTimeout(handleClick, 0)'); + SourcesTestRunner.waitUntilPaused(step3); + } + + function step3(callFrames) { + SourcesTestRunner.captureStackTrace(callFrames); + SourcesTestRunner.completeDebuggerTest(); + } +}; + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that debugger breaks on failed assertion when pause on exception mode is enabled. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-on-promise-rejection-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-on-promise-rejection-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-on-promise-rejection-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-on-promise-rejection-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-on-promise-rejection.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-on-promise-rejection.html new file mode 100644 index 0000000..51749cdc --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-on-promise-rejection.html
@@ -0,0 +1,85 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function createPromise() +{ + var result = {}; + var p = new Promise(function(resolve, reject) { + result.resolve = resolve; + result.reject = reject; + }); + result.promise = p; + return result; +} + +function testFunction() +{ + var resolved = createPromise(); + var caught = createPromise(); + var uncaught = createPromise(); + + caught.promise + .then(function c1() {}) + .then(function c2() {}) + .catch(function c3() {}); + uncaught.promise + .then(function f1() {}) + .then(function f2() {}) + .then(function f3() {}); // Last is uncaught. + + resolved.resolve(42); // Should not pause. + caught.reject(new Error("caught")); + uncaught.reject(new Error("uncaught")); +} + +var test = function() { + SourcesTestRunner.setQuiet(true); + SourcesTestRunner.startDebuggerTest(step1); + + function waitUntilPausedNTimes(count, callback) { + function inner() { + if (count--) + SourcesTestRunner.waitUntilPausedAndDumpStackAndResume(inner); + else + callback(); + } + inner(); + } + + function step1() { + TestRunner.DebuggerAgent.setPauseOnExceptions(SDK.DebuggerModel.PauseOnExceptionsState.PauseOnUncaughtExceptions); + SourcesTestRunner.showScriptSource('debugger-pause-on-promise-rejection.html', step2); + } + + function step2() { + TestRunner.addResult('=== Pausing only on uncaught exceptions ==='); + SourcesTestRunner.runTestFunction(); + waitUntilPausedNTimes(1, step3); + } + + function step3() { + TestRunner.DebuggerAgent.setPauseOnExceptions(SDK.DebuggerModel.PauseOnExceptionsState.PauseOnAllExceptions); + TestRunner.addResult('\n=== Pausing on all exceptions ==='); + SourcesTestRunner.runTestFunction(); + waitUntilPausedNTimes(2, step4); + } + + function step4() { + TestRunner.DebuggerAgent.setPauseOnExceptions(SDK.DebuggerModel.PauseOnExceptionsState.DontPauseOnExceptions); + SourcesTestRunner.completeDebuggerTest(); + } +}; + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that pause on promise rejection works. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-with-overrides-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-with-overrides-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-with-overrides-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-with-overrides-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-with-overrides.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-with-overrides.html new file mode 100644 index 0000000..6f4efa1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-pause-with-overrides.html
@@ -0,0 +1,35 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function testFunction() +{ + String = "aa"; + debugger; +} + +var test = function() { + SourcesTestRunner.startDebuggerTest(step1); + + function step1() { + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); + } + + function step2(callFrames) { + SourcesTestRunner.captureStackTrace(callFrames); + SourcesTestRunner.completeDebuggerTest(); + } +}; + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that debugger will stop on "debugger" statement w/ overriden string, etc. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-resume-button-in-overlay-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-resume-button-in-overlay-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-resume-button-in-overlay-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-resume-button-in-overlay-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-resume-button-in-overlay.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-resume-button-in-overlay.html new file mode 100644 index 0000000..4ac5bb2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/debugger-resume-button-in-overlay.html
@@ -0,0 +1,58 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/console-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function testFunction() +{ + debugger; +} + +function clickAt(x, y) +{ + eventSender.mouseMoveTo(x, y); + eventSender.mouseDown(); + eventSender.mouseUp(); +} + +var test = function() { + SourcesTestRunner.startDebuggerTest(step1); + + function step1() { + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); + } + + function inOverlay() { + var resumeButton = document.getElementById('resume-button'); + var centerX = resumeButton.offsetLeft + resumeButton.offsetWidth / 2; + var centerY = resumeButton.offsetTop + resumeButton.offsetHeight / 2; + return JSON.stringify({x: centerX, y: centerY}); + } + + function step2(callFrames) { + TestRunner.evaluateFunctionInOverlay(inOverlay, step3); + } + + function step3(val) { + TestRunner.addResult('Make a click'); + var resumeButtonCenter = JSON.parse(val); + SourcesTestRunner.waitUntilResumed(step4); + ConsoleTestRunner.evaluateInConsole('clickAt(' + resumeButtonCenter.x + ', ' + resumeButtonCenter.y + ');'); + } + + function step4() { + SourcesTestRunner.completeDebuggerTest(); + } +}; + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that resume button in overlay works +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/eval-on-pause-blocked-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/eval-on-pause-blocked-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/eval-on-pause-blocked-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/eval-on-pause-blocked-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/eval-on-pause-blocked.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/eval-on-pause-blocked.html new file mode 100644 index 0000000..a314ce8f --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/eval-on-pause-blocked.html
@@ -0,0 +1,40 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/console-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<meta http-equiv="Content-Security-Policy" content="script-src 'unsafe-inline'"> +<script> +function testFunction() +{ + var foo = 2012; + debugger; +} + +var test = function() { + SourcesTestRunner.startDebuggerTest(step1); + + function step1() { + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); + } + + function step2() { + ConsoleTestRunner.evaluateInConsole('foo', step3); + } + + function step3(result) { + TestRunner.addResult('Evaluated in console in the top frame context: foo = ' + result); + SourcesTestRunner.completeDebuggerTest(); + } +}; + +</script> +</head> +<body onload="runTest()"> +<p> +Test that evaluation in the context of top frame will not be blocked by Content-Security-Policy. +<a href="https://bugs.webkit.org/show_bug.cgi?id=77203">Bug 77203.</a> +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/function-name-in-callstack-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/function-name-in-callstack-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/function-name-in-callstack-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/function-name-in-callstack-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/function-name-in-callstack.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/function-name-in-callstack.html new file mode 100644 index 0000000..7e33ffa4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/function-name-in-callstack.html
@@ -0,0 +1,56 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> +var foo = function () +{ + debugger; +} + +foo.displayName = 'foo.displayName'; +Object.defineProperty(foo, 'name', { value: 'foo.function.name' } ); + +var bar = function() +{ + foo(); +} + +bar.displayName = 'bar.displayName'; + +var baz = function() +{ + bar(); +} + +Object.defineProperty(baz, 'name', { value: 'baz.function.name' } ); + +function testFunction() +{ + baz(); +} + +function test() { + SourcesTestRunner.startDebuggerTest(step1); + + function step1() { + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); + } + + function step2(callFrames) { + TestRunner.addResult('callFrames.length = ' + callFrames.length); + for (var i = 0; i < callFrames.length; ++i) + TestRunner.addResult('functionName: ' + callFrames[i].functionName); + SourcesTestRunner.completeDebuggerTest(); + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that callFrames on pause contains function name taking into account displayName and Function.name. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/pause-in-inline-script-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/pause-in-inline-script-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/pause-in-inline-script-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/pause-in-inline-script-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/pause-in-inline-script.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/pause-in-inline-script.html new file mode 100644 index 0000000..8e651b5e --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/pause-in-inline-script.html
@@ -0,0 +1,91 @@ +<html> +<head> +<script>function foo() { }; +</script> +<script> +function bar() { }; +</script><script>function f1() { debugger; }</script> +<script> +function f2() { return f1(); } +</script> + +<script type="module"> +function f3() +{ + return f2(); +} +f3(); +</script> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> + +<script> + +var test = function() { + var testName = TestRunner.mainTarget.inspectedURL(); + testName = testName.substring(testName.lastIndexOf('/') + 1); + + SourcesTestRunner.startDebuggerTest(step1); + + function step1() { + TestRunner.addResult('Did load front-end'); + TestRunner.addResult('Paused: ' + !!TestRunner.debuggerModel.debuggerPausedDetails()); + TestRunner.reloadPage(didReload.bind(this)); + TestRunner.debuggerModel.addEventListener(SDK.DebuggerModel.Events.DebuggerPaused, didPauseAfterReload, this); + } + + function didReload() { + TestRunner.addResult('didReload'); + SourcesTestRunner.completeDebuggerTest(); + } + + function didPauseAfterReload(details) { + TestRunner.addResult('didPauseAfterReload'); + TestRunner.addResult('Source strings corresponding to the call stack:'); + dumpNextCallFrame(didDump); + } + + var callFrameIndex = 0; + function dumpNextCallFrame(next) { + var callFrames = TestRunner.debuggerModel.callFrames; + if (callFrameIndex === callFrames.length) { + next(); + return; + } + var frame = callFrames[callFrameIndex]; + var uiLocation = Bindings.debuggerWorkspaceBinding.rawLocationToUILocation(frame.location()); + SourcesTestRunner.showUISourceCode(uiLocation.uiSourceCode, dumpCallFrameLine); + + function dumpCallFrameLine(sourceFrame) { + var resourceText = sourceFrame._textEditor.text(); + var lines = resourceText.split('\n'); + var lineNumber = uiLocation.lineNumber; + TestRunner.addResult( + 'Frame ' + callFrameIndex + ') line ' + lineNumber + ', content: ' + lines[lineNumber] + + ' (must be part of function \'' + frame.functionName + '\')'); + callFrameIndex++; + dumpNextCallFrame(next); + } + } + + function didDump() { + SourcesTestRunner.resumeExecution(didResume); + } + + function didResume() { + TestRunner.addResult('didResume'); + } +}; +</script> + +</head> + +<body onload="runTest()"> +<p> +Tests that main resource script text is correct when paused in inline script on reload. +<a href="https://bugs.webkit.org/show_bug.cgi?id=77548">Bug 77548.</a> +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/pause-in-internal-script-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/pause-in-internal-script-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/pause-in-internal-script-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/pause-in-internal-script-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/pause-in-internal-script.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/pause-in-internal-script.html new file mode 100644 index 0000000..2fb8316 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/pause-in-internal-script.html
@@ -0,0 +1,50 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> + +<script> + +function testFunction() +{ + var array = [2, 5, 7]; + var sum = 0; + array.forEach(function(key) + { + sum += array[key]; + }); + return sum; +} + +function test() { + SourcesTestRunner.runDebuggerTestSuite([function testSetBreakpoint(next) { + SourcesTestRunner.showScriptSource('pause-in-internal-script.html', didShowScriptSource); + + var breakpointFunctionFrame = null; + + function didShowScriptSource(sourceFrame) { + breakpointFunctionFrame = sourceFrame; + TestRunner.addResult('Script source was shown.'); + SourcesTestRunner.setBreakpoint(sourceFrame, 13, '', true); + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(didPause); + } + + function didPause(callFrames) { + SourcesTestRunner.captureStackTrace(callFrames); + SourcesTestRunner.removeBreakpoint(breakpointFunctionFrame, 13); + next(); + } + }]); +}; + +</script> + +</head> + +<body onload="runTest()"> +<p>Tests that internal scripts unknown to front-end are processed correctly when appear in debugger call frames. +<a href="https://bugs.webkit.org/show_bug.cgi?id=64995">Bug 64995</a> +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/pause-on-elements-panel-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/pause-on-elements-panel-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/pause-on-elements-panel-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/pause-on-elements-panel-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/pause-on-elements-panel.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/pause-on-elements-panel.html new file mode 100644 index 0000000..7bb0458 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/pause-on-elements-panel.html
@@ -0,0 +1,55 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function callback() +{ + return 0; +} + +function test() { + SourcesTestRunner.startDebuggerTest(step1, true); + + function step1() { + UI.inspectorView.showPanel('sources').then(step2); + } + + function step2() { + ElementsTestRunner.nodeWithId('test', step3); + } + + function step3(node) { + TestRunner.assertTrue(!!node); + TestRunner.evaluateInPage('setTimeout(callback, 200)', step4.bind(null, node)); + } + + function step4(node) { + TestRunner.assertTrue(!UI.panels.sources.paused()); + SourcesTestRunner.togglePause(); + + // This used to skip the pause request (the test used to timeout). + node.highlight(); + + SourcesTestRunner.waitUntilPaused(step5); + } + + function step5(callFrames) { + SourcesTestRunner.captureStackTrace(callFrames); + TestRunner.addResult('PASS: Debugger paused.'); + SourcesTestRunner.completeDebuggerTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<div id="test"></div> +<p> +Tests that debugger pause button works on Elements panel after a DOM node highlighting. <a href="https://code.google.com/p/chromium/issues/detail?id=433366">Chromium bug 433366</a> +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/skip-pauses-until-reload-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/skip-pauses-until-reload-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/skip-pauses-until-reload-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/skip-pauses-until-reload-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/skip-pauses-until-reload.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/skip-pauses-until-reload.html new file mode 100644 index 0000000..00e7b3c9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-pause/skip-pauses-until-reload.html
@@ -0,0 +1,140 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function testFunction() +{ + console.log("Begin"); + debugger; // Reload follows, nothing below should break. + console.log("Middle: Breakpoint 1"); // Breakpoint + console.log("Middle: Breakpoint 2"); // Breakpoint + console.assert(false, "Assertion failed!"); + console.error("Some console.error message"); + debugger; // Should skip this also. + var element = document.getElementById("element"); + var parent = element.parentElement; + var child = document.createElement("span"); + element.setAttribute("foo", "bar"); // DOM breakpoint: AttributeModified + element.appendChild(child); // DOM breakpoint: SubtreeModified + parent.removeChild(element); // DOM breakpoint: NodeRemoved + parent.appendChild(element); + element.click(); // Event breakpoint + console.log("End"); + // Should be last. + eval("throwException()"); +} + +function throwException() +{ + function inner() + { + try { + if (window.foo === 1) + throw new Error("error message"); + } finally { + ++window.foo; + } + } + try { + window.foo = 1; + inner(); + } finally { + ++window.foo; + } +} + +function test() { + SourcesTestRunner.startDebuggerTest(step1); + + function step1() { + SourcesTestRunner.showScriptSource('skip-pauses-until-reload.html', didShowScriptSource); + } + + function didShowScriptSource(sourceFrame) { + TestRunner.addResult('Script source was shown.'); + TestRunner.addResult('Set up breakpoints.'); + SourcesTestRunner.setBreakpoint(sourceFrame, 11, '', true); + SourcesTestRunner.setBreakpoint(sourceFrame, 12, '', true); + TestRunner.addResult('Set up to pause on all exceptions.'); + // FIXME: Test is flaky with PauseOnAllExceptions due to races in debugger. + TestRunner.DebuggerAgent.setPauseOnExceptions(SDK.DebuggerModel.PauseOnExceptionsState.DontPauseOnExceptions); + ElementsTestRunner.nodeWithId('element', didResolveNode); + testRunner.logToStderr('didShowScriptSource'); + } + + function didResolveNode(node) { + testRunner.logToStderr('didResolveNode'); + TestRunner.addResult('Set up DOM breakpoints.'); + TestRunner.domDebuggerModel.setDOMBreakpoint(node, SDK.DOMDebuggerModel.DOMBreakpoint.Type.SubtreeModified); + TestRunner.domDebuggerModel.setDOMBreakpoint(node, SDK.DOMDebuggerModel.DOMBreakpoint.Type.AttributeModified); + TestRunner.domDebuggerModel.setDOMBreakpoint(node, SDK.DOMDebuggerModel.DOMBreakpoint.Type.NodeRemoved); + setUpEventBreakpoints(); + } + + function setUpEventBreakpoints() { + testRunner.logToStderr('setUpEventBreakpoints'); + TestRunner.addResult('Set up Event breakpoints.'); + SourcesTestRunner.setEventListenerBreakpoint('listener:click', true); + TestRunner.deprecatedRunAfterPendingDispatches(didSetUp); + } + + function didSetUp() { + testRunner.logToStderr('didSetUp'); + TestRunner.addResult('Did set up.'); + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(didPause); + } + + function didPause(callFrames) { + testRunner.logToStderr('didPause'); + SourcesTestRunner.captureStackTrace(callFrames); + TestRunner.DebuggerAgent.setSkipAllPauses(true).then(didSetSkipAllPauses); + } + + function didSetSkipAllPauses() { + testRunner.logToStderr('didSetSkipAllPauses'); + TestRunner.addResult('Set up to skip all pauses.'); + doReloadPage(); + } + + function doReloadPage() { + testRunner.logToStderr('doReloadPage'); + TestRunner.addResult('Reloading the page...'); + SourcesTestRunner.waitUntilPausedNextTime(didPauseAfterReload); + TestRunner.reloadPage(didReloadPage); + } + + function didReloadPage() { + testRunner.logToStderr('didReloadPage'); + TestRunner.addResult('PASS: Reloaded without hitting breakpoints.'); + completeTest(); + } + + function didPauseAfterReload(callFrames) { + testRunner.logToStderr('didPauseAfterReload'); + TestRunner.addResult('FAIL: Should not pause while reloading the page!'); + SourcesTestRunner.captureStackTrace(callFrames); + SourcesTestRunner.waitUntilPausedNextTime(didPauseAfterReload); + SourcesTestRunner.resumeExecution(); + } + + function completeTest() { + testRunner.logToStderr('completeTest'); + SourcesTestRunner.setEventListenerBreakpoint('listener:click', false); + SourcesTestRunner.completeDebuggerTest(); + } +}; + +</script> + +</head> + +<body onload="runTest()"> +<p>Tests that 'skip all pauses' mode blocks breakpoint and gets cancelled right at page reload. +</p> + +<div id="element" onclick="return 0;"></div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-in-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-in-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-in-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-in-expected.txt
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-in-ignore-injected-script-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-in-ignore-injected-script-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-in-ignore-injected-script-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-in-ignore-injected-script-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-in-ignore-injected-script.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-in-ignore-injected-script.html new file mode 100644 index 0000000..fb3ba58 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-in-ignore-injected-script.html
@@ -0,0 +1,36 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> +function testFunction() +{ + debugger; + console.log(123); + return 239; // stack result should point here +} +</script> +<script> + +function test() { + SourcesTestRunner.startDebuggerTestPromise(/* quiet */ true) + .then(() => SourcesTestRunner.runTestFunctionAndWaitUntilPausedPromise()) + .then(() => stepIntoPromise()) + .then(() => stepIntoPromise()) + .then((callFrames) => SourcesTestRunner.captureStackTrace(callFrames)) + .then(() => SourcesTestRunner.completeDebuggerTest()); + + function stepIntoPromise() { + var cb; + var p = new Promise(fullfill => cb = fullfill); + SourcesTestRunner.stepInto(); + SourcesTestRunner.waitUntilResumed(() => SourcesTestRunner.waitUntilPaused(cb)); + return p; + } +} +</script> +</head> +<body onload="runTest()"> +<p>Tests that stepInto doesn't pause in InjectedScriptSource.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-in.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-in.html new file mode 100644 index 0000000..42eb143 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-in.html
@@ -0,0 +1,47 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function d() +{ + var i = 10; +} + +function testFunction() +{ + debugger; + d(); +} + +var test = function() { + SourcesTestRunner.startDebuggerTest(step1); + + function step1() { + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); + } + + var stepCount = 0; + function step2(callFrames) { + SourcesTestRunner.captureStackTrace(callFrames); + if (stepCount < 2) { + TestRunner.addResult('Stepping into...'); + SourcesTestRunner.stepInto(); + SourcesTestRunner.waitUntilResumed(SourcesTestRunner.waitUntilPaused.bind(InspectorTest, step2)); + } else + SourcesTestRunner.completeDebuggerTest(); + stepCount++; + } +}; + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests "step in" functionality in debugger. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-into-across-timeouts-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-into-across-timeouts-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-into-across-timeouts-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-into-across-timeouts-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-into-across-timeouts.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-into-across-timeouts.html new file mode 100644 index 0000000..c0352b7d --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-into-across-timeouts.html
@@ -0,0 +1,57 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function testFunction() +{ + setTimeout(callback1, 0); +} + +function callback1() +{ + setTimeout(callback2, 0); + debugger; +} + +function callback2() +{ + var dummy = 42; // Should pause here. + (function FAIL_Should_Not_Pause_Here() { debugger; })(); + + if (window.testRunner) + testRunner.evaluateInWebInspector(0, "(SourcesTestRunner.completeDebuggerTest())") +} + +var test = function() { + SourcesTestRunner.startDebuggerTest(step1, true); + + function step1() { + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); + } + + function step2() { + var actions = [ + 'Print', // "debugger" in callback1 + 'StepInto', + 'StepInto', + 'Print', + ]; + SourcesTestRunner.waitUntilPausedAndPerformSteppingActions(actions, resume); + } + + function resume() { + SourcesTestRunner.resumeExecution(SourcesTestRunner.waitUntilPaused.bind(InspectorTest, resume)); + } +}; + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that debugger StepInto will stop inside next timeout handler. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-into-custom-element-callbacks-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-into-custom-element-callbacks-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-into-custom-element-callbacks-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-into-custom-element-callbacks-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-into-custom-element-callbacks.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-into-custom-element-callbacks.html new file mode 100644 index 0000000..0b80a55 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-into-custom-element-callbacks.html
@@ -0,0 +1,107 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function testFunction() +{ + var proto = Object.create(HTMLElement.prototype); + proto.createdCallback = function createdCallback() + { + output('Invoked createdCallback.'); + }; + proto.attachedCallback = function attachedCallback() + { + output('Invoked attachedCallback.'); + }; + proto.detachedCallback = function detachedCallback() + { + output('Invoked detachedCallback.'); + }; + proto.attributeChangedCallback = function attributeChangedCallback() + { + output('Invoked attributeChangedCallback.'); + }; + var FooElement = document.registerElement('x-foo', { prototype: proto }); + debugger; + var foo = new FooElement(); + debugger; + foo.setAttribute('a', 'b'); + debugger; + document.body.appendChild(foo); + debugger; + foo.remove(); +} + +function test() { + SourcesTestRunner.startDebuggerTest(step1, true); + + function step1() { + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); + } + + function checkTopFrameFunction(callFrames, expectedName) { + var topFunctionName = callFrames[0].functionName; + if (expectedName === topFunctionName) + TestRunner.addResult('PASS: Did step into event listener(' + expectedName + ').'); + else + TestRunner.addResult('FAIL: Unexpected top function: expected ' + expectedName + ', found ' + topFunctionName); + } + + function stepOverThenIn(name, callback) { + TestRunner.addResult('Stepping to ' + name + '...'); + SourcesTestRunner.stepOver(); + SourcesTestRunner.waitUntilResumed(SourcesTestRunner.waitUntilPaused.bind(InspectorTest, function() { + TestRunner.addResult('Stepping into ' + name + '...'); + SourcesTestRunner.stepInto(); + SourcesTestRunner.waitUntilResumed(SourcesTestRunner.waitUntilPaused.bind(InspectorTest, callback)); + })); + } + + function step2() { + stepOverThenIn('constructor', step3); + } + + function step3(callFrames) { + checkTopFrameFunction(callFrames, 'createdCallback'); + SourcesTestRunner.resumeExecution(SourcesTestRunner.waitUntilPaused.bind(InspectorTest, step4)); + } + + function step4() { + stepOverThenIn('setAttribute', step5); + } + + function step5(callFrames) { + checkTopFrameFunction(callFrames, 'attributeChangedCallback'); + SourcesTestRunner.resumeExecution(SourcesTestRunner.waitUntilPaused.bind(InspectorTest, step6)); + } + + function step6() { + stepOverThenIn('attachedCallback', step7); + } + + function step7(callFrames) { + checkTopFrameFunction(callFrames, 'attachedCallback'); + SourcesTestRunner.resumeExecution(SourcesTestRunner.waitUntilPaused.bind(InspectorTest, step8)); + } + + function step8() { + stepOverThenIn('detachedCallback', step9); + } + + function step9(callFrames) { + checkTopFrameFunction(callFrames, 'detachedCallback'); + SourcesTestRunner.completeDebuggerTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that stepping into custom element methods will lead to a pause in the callbacks. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-into-document-write-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-into-document-write-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-into-document-write-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-into-document-write-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-into-document-write.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-into-document-write.html new file mode 100644 index 0000000..1fd980b --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-into-document-write.html
@@ -0,0 +1,53 @@ +<html> +<head> +<script> + document.writeln("<script>\nfunction f1() {\n window.foo = true;\n}\nf1();\n <" + "/script>"); +</script> + +<script> + console.assert(window.foo, "FAIL"); +</script> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> + +<script> + +function test() { + var numberOfStepInto = 7; + + SourcesTestRunner.startDebuggerTest(step1, true); + + function step1() { + SourcesTestRunner.showScriptSource('debugger-step-into-document-write.html', step2); + } + + function step2(sourceFrame) { + TestRunner.addResult('Script source was shown.'); + SourcesTestRunner.setBreakpoint(sourceFrame, 3, '', true); + SourcesTestRunner.waitUntilPaused(step3); + TestRunner.reloadPage(completeTest); + } + + function step3() { + var actions = ['Print']; // First pause on breakpoint. + for (var i = 0; i < numberOfStepInto; ++i) + actions.push('StepInto', 'Print'); + actions.push('Resume'); + SourcesTestRunner.waitUntilPausedAndPerformSteppingActions(actions); + } + + function completeTest() { + SourcesTestRunner.completeDebuggerTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that debugger StepInto will step into inlined scripts created by document.write(). +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-into-event-listener-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-into-event-listener-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-into-event-listener-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-into-event-listener-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-into-event-listener.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-into-event-listener.html new file mode 100644 index 0000000..75f28dd --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-into-event-listener.html
@@ -0,0 +1,71 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function testFunction() +{ + var div = document.getElementById("myDiv"); + function fooEventHandler1() + { + div.textContent += "Recieved foo event(1)!\n"; + } + div.addEventListener("foo", fooEventHandler1); + + function fooEventHandler2() + { + div.textContent += "Recieved foo event(2)!\n"; + } + div.addEventListener("foo", fooEventHandler2); + + var e = new CustomEvent("foo"); + debugger; + div.dispatchEvent(e); +} + +var test = function() { + SourcesTestRunner.startDebuggerTest(step1, true); + + function step1() { + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); + } + + function checkTopFrameFunction(callFrames, expectedName, reason) { + var topFunctionName = callFrames[0].functionName; + if (expectedName === topFunctionName) + TestRunner.addResult('SUCCESS: Did step into event listener(' + expectedName + ').'); + else + TestRunner.addResult('FAIL: Unexpected top function: expected ' + expectedName + ', found ' + topFunctionName); + TestRunner.assertEquals(SDK.DebuggerModel.BreakReason.Other, reason, 'FAIL: wrong pause reason: ' + reason); + } + + var stepCount = 0; + function step2(callFrames, reason) { + if (stepCount === 2) + checkTopFrameFunction(callFrames, 'fooEventHandler1', reason); + else if (stepCount === 5) + checkTopFrameFunction(callFrames, 'fooEventHandler2', reason); + + if (stepCount < 5) { + TestRunner.addResult('Stepping into...'); + SourcesTestRunner.stepInto(); + SourcesTestRunner.waitUntilResumed(SourcesTestRunner.waitUntilPaused.bind(InspectorTest, step2)); + } else { + SourcesTestRunner.completeDebuggerTest(); + } + stepCount++; + } +}; + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that stepping into dispatchEvent() method will lead to a pause in the first event listener. +</p> +<div id="myDiv"></div> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-into-inlined-scripts-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-into-inlined-scripts-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-into-inlined-scripts-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-into-inlined-scripts-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-into-inlined-scripts.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-into-inlined-scripts.html new file mode 100644 index 0000000..3918852 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-into-inlined-scripts.html
@@ -0,0 +1,62 @@ +<html> +<head> + +<script> +function f1() +{ + return 1; // Breakpoint. +} +f1(); +</script> + +<script> +function f2() +{ + return 2; +} +f2(); +</script> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> + +<script> + +function test() { + var numberOfStepInto = 6; + + SourcesTestRunner.startDebuggerTest(step1, true); + + function step1() { + SourcesTestRunner.showScriptSource('debugger-step-into-inlined-scripts.html', step2); + } + + function step2(sourceFrame) { + TestRunner.addResult('Script source was shown.'); + SourcesTestRunner.setBreakpoint(sourceFrame, 6, '', true); + SourcesTestRunner.waitUntilPaused(step3); + TestRunner.reloadPage(completeTest); + } + + function step3() { + var actions = ['Print']; // First pause on breakpoint. + for (var i = 0; i < numberOfStepInto; ++i) + actions.push('StepInto', 'Print'); + actions.push('Resume'); + SourcesTestRunner.waitUntilPausedAndPerformSteppingActions(actions); + } + + function completeTest() { + SourcesTestRunner.completeDebuggerTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that debugger StepInto will step through inlined scripts. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-out-across-timeouts-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-out-across-timeouts-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-out-across-timeouts-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-out-across-timeouts-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-out-across-timeouts.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-out-across-timeouts.html new file mode 100644 index 0000000..ca6826c --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-out-across-timeouts.html
@@ -0,0 +1,57 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function testFunction() +{ + setTimeout(callback1, 0); +} + +function callback1() +{ + setTimeout(callback2, 0); + debugger; + return 1; +} + +function callback2() +{ + var dummy = 42; // Should pause here. + (function FAIL_Should_Not_Pause_Here() { debugger; })(); + + if (window.testRunner) + testRunner.evaluateInWebInspector(0, "(SourcesTestRunner.completeDebuggerTest())") +} + +var test = function() { + SourcesTestRunner.startDebuggerTest(step1, true); + + function step1() { + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); + } + + function step2() { + var actions = [ + 'Print', // "debugger" in callback1 + 'StepOut', + 'Print', + ]; + SourcesTestRunner.waitUntilPausedAndPerformSteppingActions(actions, resume); + } + + function resume() { + SourcesTestRunner.resumeExecution(SourcesTestRunner.waitUntilPaused.bind(InspectorTest, resume)); + } +}; + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that debugger StepOut will stop inside next timeout handler. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-out-custom-element-callbacks-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-out-custom-element-callbacks-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-out-custom-element-callbacks-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-out-custom-element-callbacks-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-out-custom-element-callbacks.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-out-custom-element-callbacks.html new file mode 100644 index 0000000..dfb85f7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-out-custom-element-callbacks.html
@@ -0,0 +1,68 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function testFunction() +{ + var proto = Object.create(HTMLElement.prototype); + proto.createdCallback = function createdCallback() + { + debugger; + output('Invoked createdCallback.'); + }; + proto.attachedCallback = function attachedCallback() + { + output('Invoked attachedCallback.'); + }; + proto.detachedCallback = function detachedCallback() + { + output('Invoked detachedCallback.'); + }; + proto.attributeChangedCallback = function attributeChangedCallback() + { + output('Invoked attributeChangedCallback.'); + }; + var FooElement = document.registerElement('x-foo', { prototype: proto }); + var foo = new FooElement(); + foo.setAttribute('a', 'b'); + document.body.appendChild(foo); + foo.remove(); +} + +function test() { + SourcesTestRunner.startDebuggerTest(step1, true); + + function step1() { + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); + } + + function step2() { + var actions = [ + 'Print', // debugger; in createdCallback + 'StepOut', 'Print', // at foo.setAttribute() + 'StepInto', 'Print', // at attributeChangedCallback + 'StepOut', 'Print', // at document.body.appendChild() + 'StepInto', 'Print', // at attachedCallback + 'StepOut', 'Print', // at foo.remove() + 'StepInto', 'Print', // at detachedCallback + 'StepOut', 'Print', // at testFunction() return point + ]; + SourcesTestRunner.waitUntilPausedAndPerformSteppingActions(actions, step3); + } + + function step3() { + SourcesTestRunner.completeDebuggerTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests stepping out from custom element callbacks. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-out-document-write-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-out-document-write-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-out-document-write-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-out-document-write-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-out-document-write.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-out-document-write.html new file mode 100644 index 0000000..e4af0c2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-out-document-write.html
@@ -0,0 +1,61 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> + +<script> + document.writeln("<script>\nfunction f1() {\n window.foo1 = true;\n}\nf1();\n <" + "/script>"); +</script> +<script> + console.assert(window.foo1, "FAIL: foo1"); +</script> +<script> +function global1() +{ + debugger; + document.writeln("<script>\nfunction f2() {\n window.foo2 = true;\n}\nf2();\n <" + "/script>"); +} +var x = global1(); +</script> +<script> + console.assert(window.foo2, "FAIL: foo2"); +</script> + +<script> +function test() { + var numberOfStepOut = 5; + + SourcesTestRunner.startDebuggerTest(step1, true); + + function step1() { + SourcesTestRunner.showScriptSource('debugger-step-out-document-write.html', step2); + } + + function step2(sourceFrame) { + TestRunner.addResult('Script source was shown.'); + SourcesTestRunner.setBreakpoint(sourceFrame, 6, '', true); + SourcesTestRunner.waitUntilPaused(step3); + TestRunner.reloadPage(completeTest); + } + + function step3() { + var actions = ['Print']; // First pause on breakpoint. + for (var i = 0; i < numberOfStepOut; ++i) + actions.push('StepOut', 'Print'); + actions.push('Resume'); + SourcesTestRunner.waitUntilPausedAndPerformSteppingActions(actions); + } + + function completeTest() { + SourcesTestRunner.completeDebuggerTest(); + } +} +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that debugger StepOut will skip inlined scripts created by document.write(). +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-out-event-listener-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-out-event-listener-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-out-event-listener-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-out-event-listener-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-out-event-listener.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-out-event-listener.html new file mode 100644 index 0000000..4d759e3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-out-event-listener.html
@@ -0,0 +1,87 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function testFunction() +{ + function inner() + { + var div = document.getElementById("myDiv"); + function fooEventHandler1() + { + div.textContent += "Recieved foo event(1)!\n"; + } + + function fooEventHandler2() + { + div.textContent += "Recieved foo event(2)!\n"; + } + + div.addEventListener("foo", fooEventHandler1); + div.addEventListener("foo", fooEventHandler2); + + var e = new CustomEvent("foo"); + debugger; + div.dispatchEvent(e); + + div.removeEventListener("foo", fooEventHandler1); + div.removeEventListener("foo", fooEventHandler2); + } + inner(); +} + +var test = function() { + SourcesTestRunner.startDebuggerTest(step1, true); + + function step1() { + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); + } + + function step2() { + var actions = [ + 'Print', // debugger; + 'StepInto', + 'StepInto', + 'StepInto', + 'Print', // at fooEventHandler1 + 'StepOut', + 'Print', // should be at fooEventHandler2 + 'StepOut', + 'Print', + ]; + SourcesTestRunner.waitUntilPausedAndPerformSteppingActions(actions, step3); + } + + function step3() { + SourcesTestRunner.resumeExecution(step4); + } + + function step4() { + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step5); + } + + function step5() { + var actions = [ + 'Print', // debugger; + 'StepOut', 'Print', // should be at inner() + ]; + SourcesTestRunner.waitUntilPausedAndPerformSteppingActions(actions, step6); + } + + function step6() { + SourcesTestRunner.completeDebuggerTest(); + } +}; + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that stepping out of an event listener will lead to a pause in the next event listener. +</p> +<div id="myDiv"></div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-out-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-out-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-out-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-out-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-out.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-out.html new file mode 100644 index 0000000..994f522 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-out.html
@@ -0,0 +1,46 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function d() +{ + debugger; +} + +function testFunction() +{ + d(); +} + +var test = function() { + SourcesTestRunner.startDebuggerTest(step1); + + function step1() { + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); + } + + function step2(callFrames) { + SourcesTestRunner.captureStackTrace(callFrames); + TestRunner.addResult('Stepping out...'); + SourcesTestRunner.waitUntilResumed(SourcesTestRunner.waitUntilPaused.bind(InspectorTest, step3)); + SourcesTestRunner.stepOut(); + } + + function step3(callFrames) { + SourcesTestRunner.captureStackTrace(callFrames); + SourcesTestRunner.completeDebuggerTest(); + } +}; + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests "step out" functionality in debugger. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-over-across-timeouts-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-over-across-timeouts-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-over-across-timeouts-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-over-across-timeouts-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-over-across-timeouts.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-over-across-timeouts.html new file mode 100644 index 0000000..110212c --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-over-across-timeouts.html
@@ -0,0 +1,57 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function testFunction() +{ + setTimeout(callback1, 0); +} + +function callback1() +{ + setTimeout(callback2, 0); + debugger; +} + +function callback2() +{ + var dummy = 42; // Should pause here. + (function FAIL_Should_Not_Pause_Here() { debugger; })(); + + if (window.testRunner) + testRunner.evaluateInWebInspector(0, "(SourcesTestRunner.completeDebuggerTest())") +} + +var test = function() { + SourcesTestRunner.startDebuggerTest(step1, true); + + function step1() { + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); + } + + function step2() { + var actions = [ + 'Print', // "debugger" in callback1 + 'StepOver', + 'StepOver', + 'Print', + ]; + SourcesTestRunner.waitUntilPausedAndPerformSteppingActions(actions, resume); + } + + function resume() { + SourcesTestRunner.resumeExecution(SourcesTestRunner.waitUntilPaused.bind(InspectorTest, resume)); + } +}; + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that debugger StepOver will stop inside next timeout handler. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-over-document-write-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-over-document-write-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-over-document-write-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-over-document-write-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-over-document-write.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-over-document-write.html new file mode 100644 index 0000000..acf7601 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-over-document-write.html
@@ -0,0 +1,53 @@ +<html> +<head> +<script> + document.writeln("<script>\nfunction f1() {\n window.foo = true;\n}\nf1();\n <" + "/script>"); +</script> + +<script> + console.assert(window.foo, "FAIL"); +</script> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> + +<script> + +function test() { + var numberOfStepOver = 3; + + SourcesTestRunner.startDebuggerTest(step1, true); + + function step1() { + SourcesTestRunner.showScriptSource('debugger-step-over-document-write.html', step2); + } + + function step2(sourceFrame) { + TestRunner.addResult('Script source was shown.'); + SourcesTestRunner.setBreakpoint(sourceFrame, 3, '', true); + SourcesTestRunner.waitUntilPaused(step3); + TestRunner.reloadPage(completeTest); + } + + function step3() { + var actions = ['Print']; // First pause on breakpoint. + for (var i = 0; i < numberOfStepOver; ++i) + actions.push('StepOver', 'Print'); + actions.push('Resume'); + SourcesTestRunner.waitUntilPausedAndPerformSteppingActions(actions); + } + + function completeTest() { + SourcesTestRunner.completeDebuggerTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that debugger StepOver will skip inlined scripts created by document.write(). +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-over-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-over-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-over-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-over-expected.txt
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-over-inlined-scripts-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-over-inlined-scripts-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-over-inlined-scripts-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-over-inlined-scripts-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-over-inlined-scripts.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-over-inlined-scripts.html new file mode 100644 index 0000000..d36deed --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-over-inlined-scripts.html
@@ -0,0 +1,62 @@ +<html> +<head> + +<script> +function f1() +{ + return 1; // Breakpoint. +} +f1(); +</script> + +<script> +function f2() +{ + return 2; +} +f2(); +</script> + +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> + +<script> + +function test() { + var numberOfStepOver = 4; + + SourcesTestRunner.startDebuggerTest(step1, true); + + function step1() { + SourcesTestRunner.showScriptSource('debugger-step-over-inlined-scripts.html', step2); + } + + function step2(sourceFrame) { + TestRunner.addResult('Script source was shown.'); + SourcesTestRunner.setBreakpoint(sourceFrame, 6, '', true); + SourcesTestRunner.waitUntilPaused(step3); + TestRunner.reloadPage(completeTest); + } + + function step3() { + var actions = ['Print']; // First pause on breakpoint. + for (var i = 0; i < numberOfStepOver; ++i) + actions.push('StepOver', 'Print'); + actions.push('Resume'); + SourcesTestRunner.waitUntilPausedAndPerformSteppingActions(actions); + } + + function completeTest() { + SourcesTestRunner.completeDebuggerTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that debugger StepOver will step through inlined scripts. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-over.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-over.html new file mode 100644 index 0000000..68fcd1d --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-over.html
@@ -0,0 +1,52 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function f() +{ + var i = 10; +} + +function d() +{ + debugger; + f(); +} + +function testFunction() +{ + d(); +} + +var test = function() { + SourcesTestRunner.startDebuggerTest(step1); + + function step1() { + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); + } + + var stepCount = 0; + function step2(callFrames) { + SourcesTestRunner.captureStackTrace(callFrames); + if (stepCount < 2) { + TestRunner.addResult('Stepping over...'); + SourcesTestRunner.stepOver(); + SourcesTestRunner.waitUntilResumed(SourcesTestRunner.waitUntilPaused.bind(InspectorTest, step2)); + } else + SourcesTestRunner.completeDebuggerTest(); + stepCount++; + } +}; + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests "step over" functionality in debugger. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-through-promises-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-through-promises-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-through-promises-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-through-promises-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-through-promises.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-through-promises.html new file mode 100644 index 0000000..c9c8785b --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/debugger-step-through-promises.html
@@ -0,0 +1,67 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function testFunction() +{ + Promise.resolve(42).then( + function p1() + { + debugger; + } + ).then( + function p2() + { + return window.foo || 1; + } + ).then( + function p3() + { + return window.foo || 2; + } + ).catch(function(e) { + console.error("FAIL: Unexpected exception: " + e); + }); +} + +function test() { + SourcesTestRunner.startDebuggerTest(step1, true); + + function step1() { + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); + } + + function step2() { + var actions = [ + 'Print', // debugger; at p1 + 'StepInto', + 'Print', + 'StepInto', + 'Print', // entered p2 + 'StepOver', + 'Print', + 'StepOver', + 'Print', // entered p3 + 'StepOver', + 'Print', + ]; + SourcesTestRunner.waitUntilPausedAndPerformSteppingActions(actions, step3); + } + + function step3() { + SourcesTestRunner.completeDebuggerTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<input type='button' onclick='testFunction()' value='Test'/> +<p> +Tests that debugger will step through Promise handlers while not stepping into V8 internal scripts. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/step-through-event-listeners-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/step-through-event-listeners-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-step/step-through-event-listeners-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/step-through-event-listeners-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/step-through-event-listeners.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/step-through-event-listeners.html new file mode 100644 index 0000000..82c79a41 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-step/step-through-event-listeners.html
@@ -0,0 +1,82 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function listener1() +{ +} + +function listener2() +{ +} + +function listener3() +{ +} + +function addListenerAndClick() +{ + var element = document.getElementById("test"); + element.addEventListener("click", listener1, true); + element.addEventListener("click", listener2, true); + document.body.addEventListener("click", listener3, true); + document.body.addEventListener("click", listener3, false); + element.click(); +} + +function test() { + SourcesTestRunner.runDebuggerTestSuite([function testClickBreakpoint(next) { + SourcesTestRunner.setEventListenerBreakpoint('listener:click', true); + SourcesTestRunner.waitUntilPaused(paused1); + TestRunner.evaluateInPageWithTimeout('addListenerAndClick()'); + + function paused1(callFrames) { + SourcesTestRunner.captureStackTrace(callFrames); + SourcesTestRunner.resumeExecution(resumed1); + } + + function resumed1() { + SourcesTestRunner.waitUntilPaused(paused2); + } + + function paused2(callFrames) { + SourcesTestRunner.captureStackTrace(callFrames); + SourcesTestRunner.resumeExecution(resumed2); + } + + function resumed2() { + SourcesTestRunner.waitUntilPaused(paused3); + } + + function paused3(callFrames) { + SourcesTestRunner.captureStackTrace(callFrames); + SourcesTestRunner.resumeExecution(resumed3); + } + + function resumed3() { + SourcesTestRunner.waitUntilPaused(paused4); + } + + function paused4(callFrames) { + SourcesTestRunner.captureStackTrace(callFrames); + SourcesTestRunner.setEventListenerBreakpoint('listener:click', false); + SourcesTestRunner.resumeExecution(next); + } + }]); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Test that debugger will pause in all event listeners when corresponding breakpoint is set. +<a href="https://bugs.webkit.org/show_bug.cgi?id=77331">Bug 77331.</a> +</p> + +<input type=button id="test"></input> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/async-call-stack-async-function-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/async-call-stack-async-function-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/async-call-stack-async-function-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/async-call-stack-async-function-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/async-call-stack-async-function.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/async-call-stack-async-function.html new file mode 100644 index 0000000..e01c0078 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/async-call-stack-async-function.html
@@ -0,0 +1,47 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> +async function foo() +{ + await Promise.resolve(1); + await Promise.resolve(2); + debugger; +} + +async function boo() +{ + await Promise.resolve(3); + await foo(); +} + +async function testFunction() +{ + await Promise.resolve(4); + await boo(); +} +//# sourceURL=test.js +</script> +<script> +var test = function() { + TestRunner.DebuggerAgent.setAsyncCallStackDepth(200); + + SourcesTestRunner.startDebuggerTestPromise(/* quiet */ true) + .then(() => SourcesTestRunner.runTestFunctionAndWaitUntilPausedPromise()) + .then(() => dumpCallStackSidebarPane()) + .then(() => SourcesTestRunner.completeDebuggerTest()); + + function dumpCallStackSidebarPane() { + var pane = self.runtime.sharedInstance(Sources.CallStackSidebarPane); + for (var element of pane.contentElement.querySelectorAll('.call-frame-item')) + TestRunner.addResult(element.deepTextContent().replace(/VM\d+/g, 'VM')); + } +}; + +</script> +</head> +<body onload="runTest()"> +<p>Tests that call stack sidebar contains correct labels for async await functions.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/async-call-stack-url-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/async-call-stack-url-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/async-call-stack-url-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/async-call-stack-url-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/async-call-stack-url.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/async-call-stack-url.html new file mode 100644 index 0000000..bffce04 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/async-call-stack-url.html
@@ -0,0 +1,46 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script src="../debugger/resources/unformatted-async.js"></script> +<script> + +function testFunction() +{ + setTimeout(f2, 0); +} + +async function test() { + await TestRunner.DebuggerAgent.setAsyncCallStackDepth(200); + + var scriptFormatter = await SourcesTestRunner.scriptFormatter(); + + SourcesTestRunner.startDebuggerTest(step3); + + function step3() { + SourcesTestRunner.showScriptSource('unformatted-async.js', step4); + } + + function step4() { + TestRunner.addSniffer(Sources.ScriptFormatterEditorAction.prototype, '_updateButton', step5); + scriptFormatter._toggleFormatScriptSource(); + } + + function step5() { + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step6); + } + + function step6() { + var pane = self.runtime.sharedInstance(Sources.CallStackSidebarPane); + for (var element of pane.contentElement.querySelectorAll('.call-frame-item')) + TestRunner.addResult(element.deepTextContent().replace(/VM\d+/g, 'VM')); + SourcesTestRunner.completeDebuggerTest(); + } +} + +</script> +</head> +<body onload="runTest()"> +<p>Tests that call stack sidebar contains correct urls for call frames.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/break-on-empty-event-listener-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/break-on-empty-event-listener-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/break-on-empty-event-listener-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/break-on-empty-event-listener-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/break-on-empty-event-listener.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/break-on-empty-event-listener.html new file mode 100644 index 0000000..5d96502 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/break-on-empty-event-listener.html
@@ -0,0 +1,47 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function SHOULD_NOT_STOP_HERE() +{ + return 239; +} + +function addEmptyEventListenerAndClick() +{ + // this event listener won't execute any JS code. + var div = document.getElementById("myDiv"); + div.addEventListener("click", {}); + div.click(); + SHOULD_NOT_STOP_HERE(); + debugger; +} + +var test = function() { + SourcesTestRunner.startDebuggerTest(step1, true); + + function step1() { + var actions = ['Print']; + SourcesTestRunner.waitUntilPausedAndPerformSteppingActions(actions, step2); + SourcesTestRunner.setEventListenerBreakpoint('listener:click', true); + TestRunner.evaluateInPageWithTimeout('addEmptyEventListenerAndClick()'); + } + + function step2() { + SourcesTestRunner.setEventListenerBreakpoint('listener:click', false); + SourcesTestRunner.completeDebuggerTest(); + } +}; + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that scheduled pause is cleared after processing event with empty handler. +</p> +<div id="myDiv"></div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/break-on-set-timeout-with-syntax-error-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/break-on-set-timeout-with-syntax-error-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/break-on-set-timeout-with-syntax-error-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/break-on-set-timeout-with-syntax-error-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/break-on-set-timeout-with-syntax-error.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/break-on-set-timeout-with-syntax-error.html new file mode 100644 index 0000000..d03aee20 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/break-on-set-timeout-with-syntax-error.html
@@ -0,0 +1,48 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script src="../../../inspector/console-test.js"></script> +<script> + +function runSetTimeoutWithSyntaxError() +{ + setTimeout({}, 0); +} + +function executeSomeCode() +{ + debugger; // should stop here not earlier +} + +var test = function() { + SourcesTestRunner.startDebuggerTest(step1, true); + + function step1() { + SourcesTestRunner.setEventListenerBreakpoint('instrumentation:setTimeout.callback', true); + TestRunner.evaluateInPage( + 'runSetTimeoutWithSyntaxError()', ConsoleTestRunner.waitUntilMessageReceived.bind(this, step2)); + } + + function step2() { + var actions = ['Print']; + SourcesTestRunner.waitUntilPausedAndPerformSteppingActions(actions, step3); + TestRunner.evaluateInPage('executeSomeCode()'); + } + + function step3() { + SourcesTestRunner.setEventListenerBreakpoint('instrumentation:setTimeout.callback', false); + SourcesTestRunner.completeDebuggerTest(); + } +}; + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that scheduled pause is cleared after processing event with empty handler. +</p> +<div id="myDiv"></div> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/callstack-placards-discarded-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/callstack-placards-discarded-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/callstack-placards-discarded-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/callstack-placards-discarded-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/callstack-placards-discarded.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/callstack-placards-discarded.html new file mode 100644 index 0000000..470a2cd --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/callstack-placards-discarded.html
@@ -0,0 +1,68 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function testFunction() +{ + debugger; +} + +var test = function() { + SourcesTestRunner.runDebuggerTestSuite([ + function testCallStackPlacardsDiscarded(next) { + TestRunner.debuggerModel.addEventListener(SDK.DebuggerModel.Events.DebuggerPaused, didPause, this); + var previousCount = undefined; + function didPause(event) { + TestRunner.addResult('Received DebuggerPaused event.'); + var callFrame = event.data.callFrames[0]; + TestRunner.addResult('Function name: ' + callFrame.functionName); + var count = liveLocationsCount(); + if (previousCount !== undefined && count !== previousCount) + TestRunner.addResult('FAILED: Live locations count has changed!'); + previousCount = count; + } + + SourcesTestRunner.showScriptSource('callstack-placards-discarded.html', didShowScriptSource); + function didShowScriptSource(sourceFrame) { + TestRunner.addResult('Script source was shown.'); + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(didPause1); + } + function didPause1() { + SourcesTestRunner.resumeExecution(didResume1); + } + function didResume1() { + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(didPause2); + } + function didPause2() { + SourcesTestRunner.resumeExecution(didResume2); + } + function didResume2() { + next(); + } + }, + ]); + + function liveLocationsCount() { + var count = 0; + var infos = Object.values(TestRunner.debuggerModel.scripts) + .map(script => script[Bindings.DebuggerWorkspaceBinding._ScriptInfoSymbol]) + .filter(info => !!info); + infos.forEach(function(info) { + count += info._locations ? info._locations.size : 0; + }); + return count; + } +}; + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that RawSourceCode listeners count won't grow on each script pause. <a href="https://bugs.webkit.org/show_bug.cgi?id=70996">Bug 70996</a> +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/click-gutter-breakpoint-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/click-gutter-breakpoint-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/click-gutter-breakpoint-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/click-gutter-breakpoint-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/click-gutter-breakpoint.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/click-gutter-breakpoint.html new file mode 100644 index 0000000..cf32899 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/click-gutter-breakpoint.html
@@ -0,0 +1,59 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script src="../debugger/resources/click-breakpoints.js"></script> +<script> +function test() { + function clickCodeMirrorLineNumber(lineNumber, isRemove, sourceFrame) { + var element = Array.from(document.getElementsByClassName('CodeMirror-linenumber')) + .filter(x => x.textContent === (lineNumber + 1).toString())[0]; + if (!element) { + TestRunner.addResult('CodeMirror Gutter Not Found:' + lineNumber); + SourcesTestRunner.completeDebuggerTest(); + return Promise.resolve(); + } + var rect = element.getBoundingClientRect(); + eventSender.mouseMoveTo(rect.left + rect.width / 2, rect.top + rect.height / 2); + eventSender.mouseDown(); + eventSender.mouseUp(); + if (!isRemove) + return new Promise( + resolve => TestRunner.addSniffer(sourceFrame.__proto__, '_breakpointWasSetForTest', resolve, false)); + return Promise.resolve(); + } + + Bindings.breakpointManager._storage._breakpoints = {}; + var panel = UI.panels.sources; + var scriptFormatter; + var formattedSourceFrame; + + SourcesTestRunner.startDebuggerTest( + () => SourcesTestRunner.showScriptSource('click-breakpoints.js', didShowScriptSource)); + + + function didShowScriptSource(sourceFrame) { + clickCodeMirrorLineNumber(2, false, sourceFrame) + .then(() => clickCodeMirrorLineNumber(2, true, sourceFrame)) + .then(() => clickCodeMirrorLineNumber(3, false, sourceFrame)) + .then(runScript); + } + + function runScript() { + Promise + .all([ + SourcesTestRunner.waitBreakpointSidebarPane(), + new Promise(resolve => SourcesTestRunner.waitUntilPaused(resolve)) + ]) + .then(() => SourcesTestRunner.dumpBreakpointSidebarPane('while paused')) + .then(() => SourcesTestRunner.completeDebuggerTest()); + TestRunner.evaluateInPageWithTimeout('f2()'); + } +} +</script> +</head> +<body onload="runTest()"> +<p>Tests that breakpoints can be added and removed by clicking the gutter. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/continue-to-location-markers-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/continue-to-location-markers-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/continue-to-location-markers-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/continue-to-location-markers-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/continue-to-location-markers.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/continue-to-location-markers.html new file mode 100644 index 0000000..0746d18d --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/continue-to-location-markers.html
@@ -0,0 +1,117 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + function foo1() { + return 10; + } + + function foo2() { + return {a:x => 2 * x}; + } + + async function bar1() { + return 10; + } + + async function bar2(x) { + return 2 * x; + } + + async function foo3() { + debugger; + var a = foo1() + foo1(); + var b = foo2(); + if (a) { + a = b.a(a); + } + + bar1().then((xxx, yyy) => console.log(xxx)); + bar1().then( (xxx, yyy) => console.log(xxx)); + bar1().then( (xxx, /*zzz*/ yyy /* xyz */) => console.log(xxx)); + bar1().then ( bar2 ); + bar1().then ( console.log() ); + bar1().then ( console.log ); + bar1().then(function(x) { + console.log(x); + }); + bar1().then( async /* comment */ function(x) { + console.log(x); + }); + bar1().then( async function(x) { + console.log(x); + }); + bar1().then(bar2.bind(null)); + bar1().then(() => bar2(5)); + bar1().then(async () => await bar2(5)); + bar1().then(async (x, y) => await bar2(x)); + setTimeout(bar1, 2000); + a = await bar1(); + bar1().then((x, + y) => console.log(x)); + bar1().then(( + x, y) => console.log(x)); + bar1().then(async ( + x, y) => console.log(x)); + bar1().then( + async (x, y) => console.log(x)); + bar1().then( + bar2); + bar1().then((bar2)); + bar1().then(Promise.resolve()); + bar1().then(Promise.resolve(42).then(bar2)); + bar1().then((Promise.resolve())); + + var False = false; + if (False) + bar1().then(bar2); + bar1().then(bar2); + + bar1().then(/* comment */ bar2.bind(null)); + return 10; + } +</script> +<script> + +function testFunction() +{ + foo3(); +} + +var test = function() { + SourcesTestRunner.startDebuggerTest(step1, true); + + function step1() { + TestRunner.addSnifferPromise(Sources.JavaScriptSourceFrame.prototype, '_continueToLocationRenderedForTest') + .then(step2); + TestRunner.addSniffer(Sources.JavaScriptSourceFrame.prototype, 'setExecutionLocation', function() { + SourcesTestRunner.showUISourceCodePromise(this.uiSourceCode()).then(() => { + this._showContinueToLocations(); + }); + }); + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(); + } + + function step2() { + var currentFrame = UI.panels.sources.visibleView; + var decorations = currentFrame._continueToLocationDecorations; + var lines = []; + for (var decoration of decorations.keysArray()) { + var find = decoration.find(); + var line = find.from.line; + var text = currentFrame.textEditor.line(line).substring(find.from.ch, find.to.ch); + lines.push(`${decoration.className} @${line + 1}:${find.from.ch} = '${text}'`); + } + lines.sort(); + TestRunner.addResults(lines); + SourcesTestRunner.completeDebuggerTest(); + } +}; + +</script> +</head> +<body onload="runTest()"> +<p>Tests that continue to location markers are computed correctly.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/copy-stack-trace-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/copy-stack-trace-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/copy-stack-trace-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/copy-stack-trace-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/copy-stack-trace.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/copy-stack-trace.html new file mode 100644 index 0000000..b7a55c6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/copy-stack-trace.html
@@ -0,0 +1,45 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function testFunction() +{ + functionBar(); +} + +function functionBar() +{ + functionBaz(); +} + +function functionBaz() +{ + debugger; +} + +var test = function() { + SourcesTestRunner.startDebuggerTest(step1); + + function step1() { + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); + } + + function step2() { + InspectorFrontendHost.copyText = text => TestRunner.addResult(TestRunner.clearSpecificInfoFromStackFrames(text)); + self.runtime.sharedInstance(Sources.CallStackSidebarPane)._copyStackTrace(); + SourcesTestRunner.completeDebuggerTest(); + } +}; + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that debugger will copy valid stack trace upon context menu action. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/custom-element-lifecycle-events-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/custom-element-lifecycle-events-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/custom-element-lifecycle-events-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/custom-element-lifecycle-events-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/custom-element-lifecycle-events.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/custom-element-lifecycle-events.html new file mode 100644 index 0000000..9e139e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/custom-element-lifecycle-events.html
@@ -0,0 +1,57 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/console-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function test() { + var setup = [ + 'var proto = Object.create(HTMLElement.prototype);', + 'proto.createdCallback = function() { output(\'Invoked createdCallback.\'); };', + 'proto.attachedCallback = function() { output(\'Invoked attachedCallback.\'); };', + 'proto.detachedCallback = function() { output(\'Invoked detachedCallback.\'); };', + 'proto.attributeChangedCallback = function() { output(\'Invoked attributeChangedCallback.\'); };', + 'CustomElement = document.registerElement(\'x-foo\', {prototype: proto});', + ].join('\n'); + + var lifecycleCallbacks = [ + 'created = new CustomElement();', + 'created.setAttribute(\'x\', \'1\');', + 'document.body.appendChild(created);', + 'created.remove();', + ].join('\n'); + + SourcesTestRunner.startDebuggerTest(step1); + + function step1() { + ConsoleTestRunner.evaluateInConsole(setup, function() { + TestRunner.addResult('Custom element registered.'); + ConsoleTestRunner.evaluateInConsoleAndDump('new CustomElement() instanceof CustomElement', step2); + }); + } + + function step2() { + ConsoleTestRunner.evaluateInConsole('debugger;'); + SourcesTestRunner.waitUntilPaused(step3); + } + + function step3() { + ConsoleTestRunner.evaluateInConsoleAndDump('new CustomElement() instanceof CustomElement', step4); + } + + function step4() { + ConsoleTestRunner.evaluateInConsole(lifecycleCallbacks, SourcesTestRunner.completeDebuggerTest); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that custom element lifecycle events fire while debugger is paused. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/debugger-expand-scope-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/debugger-expand-scope-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/debugger-expand-scope-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/debugger-expand-scope-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/debugger-expand-scope.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/debugger-expand-scope.html new file mode 100644 index 0000000..5dc55d09 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/debugger-expand-scope.html
@@ -0,0 +1,61 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function makeClosure(n) +{ + var makeClosureLocalVar = "local." + n; + return function innerFunction(x) + { + var innerFunctionLocalVar = x + 2; + var negInf = -Infinity; + var negZero = 1 / negInf; + try { + throw new Error("An exception"); + } catch (e) { + e.toString(); + debugger; + } + return n + makeClosureLocalVar + x + innerFunctionLocalVar; + } +} + +function testFunction() +{ + var f = makeClosure("TextParam"); + f(2010); +} + +function test() { + SourcesTestRunner.startDebuggerTest(onTestStarted); + + function onTestStarted() { + TestRunner.addSniffer( + Sources.ScopeChainSidebarPane.prototype, '_sidebarPaneUpdatedForTest', onSidebarRendered, true); + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(() => {}); + } + + function onSidebarRendered() { + SourcesTestRunner.expandScopeVariablesSidebarPane(onScopeVariablesExpanded); + } + + function onScopeVariablesExpanded() { + TestRunner.addResult(''); + SourcesTestRunner.dumpScopeVariablesSidebarPane(); + SourcesTestRunner.completeDebuggerTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<input type='button' onclick='testFunction()' value='Test'/> +<p> +Test that sections representing scopes of the current call frame are expandable +and contain correct data. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/debugger-inline-values-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/debugger-inline-values-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/debugger-inline-values-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/debugger-inline-values-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/debugger-inline-values.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/debugger-inline-values.html new file mode 100644 index 0000000..817d1eb75 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/debugger-inline-values.html
@@ -0,0 +1,62 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function testFunction() +{ + debugger; + var a = { k: 1 }; + var b = [1, 2, 3, 4, 5]; + var c = new Array(100); c[10] = 1; + a.k = 2; + a.l = window; + b[1]++; + b[2] = document.body; +} + +function test() { + SourcesTestRunner.startDebuggerTest(runTestFunction); + SourcesTestRunner.setQuiet(true); + + var stepCount = 0; + + function runTestFunction() { + TestRunner.addSniffer(Sources.JavaScriptSourceFrame.prototype, 'setExecutionLocation', onSetExecutionLocation); + TestRunner.evaluateInPage('setTimeout(testFunction, 0)'); + } + + function onSetExecutionLocation(uiLocation) { + TestRunner.deprecatedRunAfterPendingDispatches(dumpAndContinue.bind(null, this.textEditor, uiLocation.lineNumber)); + } + + function dumpAndContinue(textEditor, lineNumber) { + TestRunner.addResult('=========== 8< =========='); + for (var i = 8; i < 18; ++i) { + var output = ['[' + (i < 10 ? ' ' : '') + i + ']']; + output.push(i == lineNumber ? '>' : ' '); + output.push(textEditor.line(i)); + output.push('\t'); + textEditor._decorations.get(i).forEach(decoration => output.push(decoration.element.deepTextContent())); + TestRunner.addResult(output.join(' ')); + } + + TestRunner.addSniffer(Sources.JavaScriptSourceFrame.prototype, 'setExecutionLocation', onSetExecutionLocation); + if (++stepCount < 10) + SourcesTestRunner.stepOver(); + else + SourcesTestRunner.completeDebuggerTest(); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests inline values rendering in the sources panel. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/debugger-save-to-temp-var-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/debugger-save-to-temp-var-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/debugger-save-to-temp-var-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/debugger-save-to-temp-var-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/debugger-save-to-temp-var.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/debugger-save-to-temp-var.html new file mode 100644 index 0000000..f3f00340c --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/debugger-save-to-temp-var.html
@@ -0,0 +1,101 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/console-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +var thisObj; + +function testFunction() +{ + function inner() + { + debugger; + } + + thisObj = { foo: 42, __proto__: null }; + for (var i = 1; i < 6; ++i) + thisObj["temp" + i] = "FAIL"; + + inner.call(thisObj); +} + +function checkThisObject() +{ + for (var key in thisObj) { + if (key === "foo") + console.assert(thisObj[key] === 42); + else if (key.substr(0, 4) === "temp") + console.assert(thisObj[key] === "FAIL"); + else + console.error("FAIL: Unexpected property " + key); + } +} + +function onload() +{ + for (var i = 3; i < 8; ++i) + window["temp" + i] = "Reserved"; + + runTest(); +} + +function test() { + var expressions = [ + '42', '\'foo string\'', 'NaN', 'Infinity', '-Infinity', '-0', '[1, 2, NaN, -0, null, undefined]', + '({ foo: \'bar\' })', '(function(){ return arguments; })(1,2,3,4)', '(function func() {})', 'new Error(\'errr\')' + ]; + + SourcesTestRunner.setQuiet(true); + SourcesTestRunner.startDebuggerTest(step1); + + TestRunner.addResult('Number of expressions: ' + expressions.length); + TestRunner.addResult('Names [temp3..temp7] are reserved\n'); + + function step1() { + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(didPause); + } + + function didPause() { + evaluateNext(); + } + + function evaluateNext() { + var expression = expressions.shift(); + if (!expression) { + ConsoleTestRunner.waitForRemoteObjectsConsoleMessages(tearDown); + return; + } + + function didEvaluate(result) { + TestRunner.assertTrue(!result.exceptionDetails, 'FAIL: was thrown. Expression: ' + expression); + UI.panels.sources._saveToTempVariable(result.object); + ConsoleTestRunner.waitUntilNthMessageReceived(2, evaluateNext); + } + + UI.context.flavor(SDK.ExecutionContext) + .evaluate({expression: expression, objectGroup: 'console'}) + .then(didEvaluate); + } + + function tearDown() { + TestRunner.evaluateInPage('checkThisObject()', dumpConsoleMessages); + } + + function dumpConsoleMessages() { + ConsoleTestRunner.dumpConsoleMessagesIgnoreErrorStackFrames(); + SourcesTestRunner.completeDebuggerTest(); + } +} + +</script> +</head> + +<body onload="onload()"> +<p> +Tests saving objects to temporary variables while paused. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/error-in-watch-expressions-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/error-in-watch-expressions-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/error-in-watch-expressions-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/error-in-watch-expressions-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/error-in-watch-expressions.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/error-in-watch-expressions.html new file mode 100644 index 0000000..e6100a7f --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/error-in-watch-expressions.html
@@ -0,0 +1,37 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script> + +var foo = 123 + +var test = function() { + var watchExpressionsPane = self.runtime.sharedInstance(Sources.WatchExpressionsSidebarPane); + UI.panels.sources._sidebarPaneStack.showView(UI.panels.sources._watchSidebarPane).then(() => { + watchExpressionsPane.doUpdate(); + watchExpressionsPane._createWatchExpression('#$%'); + watchExpressionsPane._saveExpressions(); + TestRunner.deprecatedRunAfterPendingDispatches(step1); + }); + + + function step1() { + TestRunner.addResult( + watchExpressionsPane.contentElement.textContent.indexOf('<not available>') !== -1 ? 'SUCCESS' : 'FAILED'); + + // Clear watch expressions after execution. + watchExpressionsPane._deleteAllButtonClicked(); + TestRunner.completeTest(); + } +}; + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that watches pane renders errors in red. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/execution-context-sorted-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/execution-context-sorted-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/execution-context-sorted-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/execution-context-sorted-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/execution-context-sorted.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/execution-context-sorted.html new file mode 100644 index 0000000..c4e30b8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/execution-context-sorted.html
@@ -0,0 +1,23 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script> + +function test() { + var contexts = TestRunner.runtimeModel.executionContexts(); + for (var c of contexts) + TestRunner.addResult(TestRunner.resourceTreeModel.frameForId(c.frameId).displayName()); + TestRunner.completeTest(); +} + +</script> +</head> + +<body onload="runTest()"> + <iframe src="../resources/execution-context-iframe1.html"></iframe> +<p> +Tests how execution context and target are selected. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/function-details-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/function-details-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/function-details-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/function-details-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/function-details.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/function-details.html new file mode 100644 index 0000000..9e5b860 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/function-details.html
@@ -0,0 +1,171 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> + +<script> function firstLineFunction() + +{ +} + + function notFirstLineFunction() + +{ +} + +var obj = { + m: function() {} +} + +function functionWithDisplayName() {} +functionWithDisplayName.displayName = "user-friendly name"; + +function functionWithDisplayNameGetter() {} +functionWithDisplayNameGetter.__defineGetter__("displayName", function() { return "FAIL_should_not_execute"; }); + +var smallClosure = (function(p) { return function() { return p; }; })("Capybara"); + +var bigClosure = (function(p) { + var o = { + e: 7, + f: 5, + get u() { return 3; }, + set v(value) { } + }; + with (o) { + try { + throw Error("Test"); + } catch (ex) { + return function() { + return String(p) + String(ex) + u + e; + }; + } + } +})({}); + +function* gen() { yield [1,2,3] } + +function test() { + function dumpFunctionDetails(properties) { + var location = properties.get('[[FunctionLocation]]').value.value; + TestRunner.addResult('Function details: '); + TestRunner.addResult('lineNumber: ' + location.lineNumber); + TestRunner.addResult('columnNumber: ' + location.columnNumber); + TestRunner.addResult('scriptId is valid: ' + !!location.scriptId); + TestRunner.addResult('functionName: ' + properties.get('name').value.value); + if (properties.has('[[IsGenerator]]')) + TestRunner.addResult('isGenerator: ' + properties.get('[[IsGenerator]]').value.value); + } + + function dumpFunctionNoScopes() { + TestRunner.addResult('scopeChain: n/a'); + } + + function dumpFunctionScope(pos, type, propertyDescriptors) { + var variables; + if (type == 'Global') { + variables = '<global object properties omitted>'; + } else { + var varArray = []; + for (var i = 0; i < propertyDescriptors.length; i++) { + var d = propertyDescriptors[i]; + var valueStr; + if (d.value) { + if (d.value.value) + valueStr = JSON.stringify(d.value.value); + else + valueStr = '<no string representation>'; + } else { + valueStr = '<no value>'; + } + varArray.push(d.name + ': ' + valueStr); + } + varArray.sort(); + variables = varArray.join(); + } + TestRunner.addResult('scopeChain #' + pos + ': ' + type + '; ' + variables); + } + + async function loadAndDumpScopeObjects(scopeChain, end) { + if (!scopeChain) { + dumpFunctionNoScopes(); + end(); + return; + } + + var properties = await TestRunner.RuntimeAgent.getProperties(scopeChain.value.objectId, true); + var scopes = []; + for (var prop of properties) { + if (String(prop.name >>> 0) === prop.name) + scopes.push(prop.value); + } + + for (var pos = 0; pos < scopes.length; ++pos) { + var propertyDescriptors = await TestRunner.RuntimeAgent.getProperties(scopes[pos].objectId, true); + dumpFunctionScope(pos, scopes[pos].description, propertyDescriptors); + } + + end(); + } + + function performStandardTestCase(pageExpression, next) { + TestRunner.evaluateInPage(pageExpression, didEvaluate); + + async function didEvaluate(remote) { + TestRunner.addResult(pageExpression + ' type = ' + remote.type); + var response = + await TestRunner.RuntimeAgent.invoke_getProperties({objectId: remote.objectId, isOwnProperty: false}); + + var propertiesMap = new Map(); + for (var prop of response.internalProperties) + propertiesMap.set(prop.name, prop); + for (var prop of response.result) { + if (prop.name === 'name' && prop.value && prop.value.type === 'string') + propertiesMap.set('name', prop); + if (prop.name === 'displayName' && prop.value && prop.value.type === 'string') { + propertiesMap.set('name', prop); + break; + } + } + dumpFunctionDetails(propertiesMap); + loadAndDumpScopeObjects(propertiesMap.get('[[Scopes]]'), next); + } + } + + SourcesTestRunner.runDebuggerTestSuite([ + function testGetFirstLineFunctionDetails(next) { + performStandardTestCase('firstLineFunction', next); + }, + function testGetNonFirstLineFunctionDetails(next) { + performStandardTestCase('notFirstLineFunction', next); + }, + function testGetDetailsOfFunctionWithInferredName(next) { + performStandardTestCase('obj.m', next); + }, + function testGetDetailsOfFunctionWithDisplayName(next) { + performStandardTestCase('functionWithDisplayName', next); + }, + function testGetDetailsOfFunctionWithDisplayNameGetter(next) { + performStandardTestCase('functionWithDisplayNameGetter', next); + }, + function testSmallClosure(next) { + performStandardTestCase('smallClosure', next); + }, + function testBigClosure(next) { + performStandardTestCase('bigClosure', next); + }, + function testGenFunction(next) { + performStandardTestCase('gen', next); + } + ]); +}; + +</script> +</head> + +<body onload="runTest()"> +<p>Tests that Debugger.getFunctionDetails command returns correct location. +<a href="https://bugs.webkit.org/show_bug.cgi?id=71808">Bug 71808</a> +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/function-display-name-call-stack-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/function-display-name-call-stack-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/function-display-name-call-stack-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/function-display-name-call-stack-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/function-display-name-call-stack.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/function-display-name-call-stack.html new file mode 100644 index 0000000..f14addb9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/function-display-name-call-stack.html
@@ -0,0 +1,66 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> +var error = false; + +function func1() +{ + debugger; +} +func1.displayName = "my.framework.foo"; + +var func2 = (function() { + var f = function() { func1(); } + f.displayName = "my.framework.bar"; + return f; +})(); + +var func3 = function() { func2(); } +func3.__defineGetter__("displayName", function() { error = true; throw new Error("Should not crash!"); }); + +function func4() { func3(); } +func4.__defineGetter__("displayName", function() { error = true; return "FAIL: Should not execute getters!"; }); + +function func5() { func4(); } +func5.displayName = "my.framework.func5"; +func5.__defineSetter__("displayName", function() { error = true; throw new Error("FAIL: Should not call setter!"); }); + +function func6() { func5(); } +func6.displayName = { "foo": 6, toString: function() { error = true; return "FAIL: Should not call toString!"; } }; + +function testFunction() +{ + (function() { + arguments.callee.displayName = "<anonymous_inside_testFunction>"; + func6(); + })(); + console.assert(!error, "FAIL: No getter or setter or toString should have been called!"); +} +testFunction.displayName = "<InspectorTest::testFunction>"; + +function test() { + SourcesTestRunner.startDebuggerTest(step1); + + function step1() { + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); + } + + function step2(callFrames) { + SourcesTestRunner.captureStackTrace(callFrames); + SourcesTestRunner.completeDebuggerTest(); + } +}; + +</script> + +</head> + +<body onload="runTest()"> +<p>Tests that we display function's "displayName" property in the call stack. +<a href="http://code.google.com/p/chromium/issues/detail?id=17356">CrBug 17356</a> +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/function-generator-details-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/function-generator-details-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/function-generator-details-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/function-generator-details-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/function-generator-details.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/function-generator-details.html new file mode 100644 index 0000000..9659d201 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/function-generator-details.html
@@ -0,0 +1,99 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function forward(iter, step) +{ + while (step-- > 0) + iter.next(); + return iter; +} + +function* gen() +{ + yield 1; + yield 2; + yield 3; +} + +var obj = { + generator: function*() + { + yield 11; + yield 12; + yield 13; + } +}; + +var iterNotStarted = gen(); +var iterSuspended = forward(gen(), 1); +var iterClosed = forward(gen(), 5); + +var iterObjGenerator = forward(obj.generator(), 2); + +var anonymousGenIter = (function*() { + yield 21; + yield 22; + yield 23; +})(); +forward(anonymousGenIter, 3); + +function test() { + function performStandardTestCase(pageExpression, next) { + TestRunner.evaluateInPage(pageExpression, didEvaluate); + + function didEvaluate(remote) { + TestRunner.addResult(pageExpression + ': type = ' + remote.type + ', subtype = ' + remote.subtype); + remote.getOwnPropertiesPromise().then(dumpInternalProperties); + } + + function dumpInternalProperties(properties) { + TestRunner.assertTrue(properties && properties.internalProperties, 'FAIL: no properties'); + for (var prop of properties.internalProperties) { + if (prop.name !== '[[GeneratorLocation]]') + TestRunner.addResult(prop.name + ' = ' + prop.value.description); + else + dumpLocation(prop.value.value); + } + next(); + } + + function dumpLocation(location) { + TestRunner.addResult('lineNumber = ' + location.lineNumber); + TestRunner.addResult('columnNumber = ' + location.columnNumber); + TestRunner.addResult('script is valid: ' + (location.scriptId ? 'yes' : 'no')); + } + } + + var expressions = [ + 'iterNotStarted', + 'iterSuspended', + 'iterClosed', + 'iterObjGenerator', + 'anonymousGenIter', + ]; + + function createTestSuiteFunction(expression) { + var functionName = 'test' + expression.toTitleCase(); + return eval( + 'function ' + functionName + '(next)\n' + + '{\n' + + ' performStandardTestCase(\'' + expression + '\', next);\n' + + '}; ' + functionName); + } + + SourcesTestRunner.runDebuggerTestSuite(expressions.map(createTestSuiteFunction)); +}; + +</script> + +</head> + +<body onload="runTest()"> +<p> +Tests that Debugger.getGeneratorObjectDetails command returns correct result. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/inline-scope-variables-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/inline-scope-variables-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/inline-scope-variables-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/inline-scope-variables-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/inline-scope-variables.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/inline-scope-variables.html new file mode 100644 index 0000000..4b0aa88 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/inline-scope-variables.html
@@ -0,0 +1,44 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function testFunction() +{ + var length = 123; + var a = [1, 2, 3]; + if (a.length) { + var b = 42; + console.log(a.length); + debugger; + return b; + } +} + +var test = function() { + SourcesTestRunner.startDebuggerTest(step1, true); + + function step1() { + TestRunner.addSnifferPromise(Sources.JavaScriptSourceFrame.prototype, '_renderDecorations').then(step2); + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(); + } + + function step2() { + var currentFrame = UI.panels.sources.visibleView; + var decorations = currentFrame.textEditor._decorations; + for (var line of decorations.keysArray()) { + var lineDecorations = + Array.from(decorations.get(line)).map(decoration => decoration.element.textContent).join(', '); + TestRunner.addResult(`${line + 1}: ${lineDecorations}`); + } + SourcesTestRunner.completeDebuggerTest(); + } +}; + +</script> +</head> +<body onload="runTest()"> +<p>Tests that inline scope variables are rendering correctly.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/last-execution-context-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/last-execution-context-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/last-execution-context-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/last-execution-context-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/last-execution-context.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/last-execution-context.html new file mode 100644 index 0000000..a793af7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/last-execution-context.html
@@ -0,0 +1,129 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script> + +function test() { + var mockTargetId = 1; + function createMockTarget(name, capabilities, dontAttachToMain) { + return SDK.targetManager.createTarget( + 'mock-target-' + mockTargetId++, name, capabilities, params => new SDK.StubConnection(params), + dontAttachToMain ? null : TestRunner.mainTarget); + } + + var context = new UI.Context(); + context.addFlavorChangeListener(SDK.ExecutionContext, executionContextChanged, this); + context.addFlavorChangeListener(SDK.Target, targetChanged, this); + new Main.ExecutionContextSelector(SDK.targetManager, context); + + function executionContextChanged(event) { + var executionContext = event.data; + TestRunner.addResult( + 'Execution context selected: ' + + (executionContext.isDefault ? executionContext.target().name() + ':' + executionContext.frameId : + executionContext.name)); + } + + function targetChanged(event) { + TestRunner.addResult('Target selected: ' + event.data.name()); + } + + TestRunner.runtimeModel._executionContextsCleared(); + + + TestRunner.addResult(''); + TestRunner.addResult('Adding page target'); + var pageTarget = createMockTarget('page-target', SDK.Target.Capability.AllForTests, true /* dontAttachToMain */); + var pageRuntimeModel = pageTarget.model(SDK.RuntimeModel); + pageTarget.model(SDK.ResourceTreeModel)._frameAttached('42', ''); + pageTarget.model(SDK.ResourceTreeModel)._frameNavigated({ + id: '42', + parentId: '', + loaderId: '', + name: 'mock-frame', + url: 'mock-url.com/frame.html', + securityOrigin: 'mock-security-origin', + mineType: 'mimeType' + }); + pageRuntimeModel._executionContextCreated( + {id: 'cs1', auxData: {isDefault: false, frameId: '42'}, origin: 'origin', name: 'contentScript1'}); + pageRuntimeModel._executionContextCreated( + {id: 'if1', auxData: {isDefault: true, frameId: 'iframe1'}, origin: 'origin', name: 'iframeContext1'}); + pageRuntimeModel._executionContextCreated( + {id: 'p1', auxData: {isDefault: true, frameId: '42'}, origin: 'origin', name: 'pageContext1Name'}); + + TestRunner.addResult(''); + TestRunner.addResult('Adding sw target'); + var swTarget = createMockTarget( + 'sw-target', SDK.Target.Capability.Network | SDK.Target.Capability.Worker | SDK.Target.Capability.JS); + swTarget.model(SDK.RuntimeModel) + ._executionContextCreated( + {id: 'sw1', auxData: {isDefault: true, frameId: ''}, origin: 'origin', name: 'swContext1Name'}); + + TestRunner.addResult(''); + TestRunner.addResult('Removing page main frame'); + pageRuntimeModel._executionContextDestroyed('p1'); + + TestRunner.addResult(''); + TestRunner.addResult('Readding page main frame'); + pageRuntimeModel._executionContextCreated( + {id: 'p2', auxData: {isDefault: true, frameId: '42'}, origin: 'origin', name: 'pageContext1Name'}); + + TestRunner.addResult(''); + TestRunner.addResult('Switching to sw target'); + context.setFlavor(SDK.Target, swTarget); + + TestRunner.addResult(''); + TestRunner.addResult('Switching to page target'); + context.setFlavor(SDK.Target, pageTarget); + + TestRunner.addResult(''); + TestRunner.addResult('User selected content script'); + context.setFlavor(SDK.ExecutionContext, pageRuntimeModel.executionContexts()[2]); + + TestRunner.addResult(''); + TestRunner.addResult('Switching to sw target'); + context.setFlavor(SDK.Target, swTarget); + + TestRunner.addResult(''); + TestRunner.addResult('Switching to page target'); + context.setFlavor(SDK.Target, pageTarget); + + TestRunner.addResult(''); + TestRunner.addResult('User selected iframe1'); + context.setFlavor(SDK.ExecutionContext, pageRuntimeModel.executionContexts()[0]); + + TestRunner.addResult(''); + TestRunner.addResult('Switching to sw target'); + context.setFlavor(SDK.Target, swTarget); + + TestRunner.addResult(''); + TestRunner.addResult('Switching to page target'); + context.setFlavor(SDK.Target, pageTarget); + + TestRunner.addResult(''); + TestRunner.addResult('Switching to sw target'); + context.setFlavor(SDK.Target, swTarget); + + TestRunner.addResult(''); + TestRunner.addResult('Removing page main frame'); + pageRuntimeModel._executionContextDestroyed('p2'); + + TestRunner.addResult(''); + TestRunner.addResult('Readding page main frame'); + pageRuntimeModel._executionContextCreated( + {id: 'p3', auxData: {isDefault: true, frameId: '42'}, origin: 'origin', name: 'pageContext1Name'}); + + TestRunner.completeTest(); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests how execution context and target are selected. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/monitor-console-command-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/monitor-console-command-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/monitor-console-command-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/monitor-console-command-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/monitor-console-command.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/monitor-console-command.html new file mode 100644 index 0000000..947767d --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/monitor-console-command.html
@@ -0,0 +1,85 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script src="../../../inspector/console-test.js"></script> + +<script> +function simpleTestFunction() +{ + return 0; +} +</script> + +<script> +function simpleTestFunction2() +{ + return simpleTestFunction3(); +} + +function simpleTestFunction3() +{ + return 0; +} +</script> + +<script> +var test = function() { + var currentSourceFrame; + SourcesTestRunner.setQuiet(true); + SourcesTestRunner.runDebuggerTestSuite([ + function testSimpleMonitor(next) { + monitorAndRun(next, 'simpleTestFunction', 'simpleTestFunction();'); + }, + + function testSimpleMonitorWith1Arg(next) { + monitorAndRun(next, 'simpleTestFunction', 'simpleTestFunction(1);'); + }, + + function testSimpleMonitorWithManyArgs(next) { + monitorAndRun(next, 'simpleTestFunction', 'simpleTestFunction(1, 2, 3, 4 ,5);'); + }, + + function testSimpleUnmonitor(next) { + ConsoleTestRunner.evaluateInConsole('monitor(simpleTestFunction2)'); + ConsoleTestRunner.evaluateInConsole('unmonitor(simpleTestFunction2)'); + monitorAndRun(next, 'simpleTestFunction3', 'simpleTestFunction2();'); + }, + + function testUnmonitorFuntionNotMonitored(next) { + ConsoleTestRunner.evaluateInConsole('monitor(simpleTestFunction)', next); + } + ]); + + function monitorAndRun(next, functionName, runCmd) { + ConsoleTestRunner.evaluateInConsole('monitor(' + functionName + ')'); + TestRunner.addResult('Start monitoring function.'); + + ConsoleTestRunner.evaluateInConsole('setTimeout(function() { ' + runCmd + ' }, 0)'); + TestRunner.addResult('Set timer for test function.'); + ConsoleTestRunner.waitUntilMessageReceived(didReceive); + + function didReceive(message) { + if (message.type === ConsoleModel.ConsoleMessage.MessageType.Result) { + ConsoleTestRunner.waitUntilMessageReceived(didReceive); + return; + } + + TestRunner.addResult('Console message received: ' + message.messageText); + ConsoleTestRunner.evaluateInConsole('unmonitor(' + functionName + ')'); + TestRunner.addResult('Stop monitoring.'); + next(); + } + } +}; + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests traceCalls(fn) console command. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/reveal-execution-line-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/reveal-execution-line-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/reveal-execution-line-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/reveal-execution-line-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/reveal-execution-line.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/reveal-execution-line.html new file mode 100644 index 0000000..cdab83f --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/reveal-execution-line.html
@@ -0,0 +1,53 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> +function testFunction() +{ + debugger; +} + +var test = function() { + SourcesTestRunner.setQuiet(true); + SourcesTestRunner.runDebuggerTestSuite([function testRevealAndHighlightExecutionLine(next) { + var executionLineSet = false; + var executionLineRevealed = false; + TestRunner.addSniffer(SourceFrame.SourceFrame.prototype, 'revealPosition', didRevealLine); + TestRunner.addSniffer(Sources.JavaScriptSourceFrame.prototype, 'setExecutionLocation', didSetExecutionLocation); + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(didPause); + + function didPause(callFrames) { + } + + function didSetExecutionLocation(uiLocation) { + if (executionLineSet) + return; + executionLineSet = true; + maybeNext(); + } + + function didRevealLine(line) { + if (executionLineRevealed) + return; + if (this.isShowing()) { + executionLineRevealed = true; + maybeNext(); + } + } + + function maybeNext() { + if (executionLineRevealed && executionLineSet) { + TestRunner.addResult('Execution line revealed and highlighted.'); + SourcesTestRunner.resumeExecution(next); + } + } + }]); +}; +</script> +</head> +<body onload="runTest()"> +<p>Tests that execution line is revealed and highlighted when debugger is paused.</p> +<a href="https://bugs.webkit.org/show_bug.cgi?id=80306">Bug 80306</a> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/reveal-not-skipped-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/reveal-not-skipped-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/reveal-not-skipped-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/reveal-not-skipped-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/reveal-not-skipped.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/reveal-not-skipped.html new file mode 100644 index 0000000..4cbf1d5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/reveal-not-skipped.html
@@ -0,0 +1,84 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script src="../debugger/resources/script1.js"></script> +<script> +function throwAnException() +{ + var i = 0; var j = i + 2; var k = j + i; + + return unknown_var; +} + +var test = function() { + var panel = UI.panels.sources; + TestRunner.DebuggerAgent.setPauseOnExceptions(SDK.DebuggerModel.PauseOnExceptionsState.PauseOnUncaughtExceptions); + + SourcesTestRunner.runDebuggerTestSuite([ + function testRevealAfterPausedOnException(next) { + TestRunner.addResult('Showing script1 source...'); + SourcesTestRunner.showScriptSource('script1.js', step2); + + function step2() { + TestRunner.addResult('Script source was shown for \'' + panel.visibleView._uiSourceCode.name() + '\'.'); + TestRunner.addResult('Throwing exception...'); + TestRunner.evaluateInPage('setTimeout(throwAnException, 0)'); + TestRunner.addSniffer(Sources.TabbedEditorContainer.prototype, 'showFile', step3); + } + + function step3() { + TestRunner.addResult('Script source was shown for \'' + panel.visibleView._uiSourceCode.name() + '\'.'); + TestRunner.addResult('Reloading page...'); + TestRunner.reloadPage(step4); + } + + function step4() { + TestRunner.addResult('Showing script1 source...'); + SourcesTestRunner.showScriptSource('script1.js', step5); + } + + function step5() { + TestRunner.addResult('Script source was shown for \'' + panel.visibleView._uiSourceCode.name() + '\'.'); + TestRunner.addResult('Throwing exception...'); + TestRunner.evaluateInPage('setTimeout(throwAnException, 0)'); + TestRunner.addSniffer(Sources.TabbedEditorContainer.prototype, 'showFile', step6); + } + + function step6() { + TestRunner.addResult('Script source was shown for \'' + panel.visibleView._uiSourceCode.name() + '\'.'); + next(); + } + }, + + function testRevealAfterPrettyPrintWhenPaused(next) { + TestRunner.addResult('Throwing exception...'); + SourcesTestRunner.waitUntilPaused(step2); + function step2() { + TestRunner.addResult('Showing script1 source...'); + SourcesTestRunner.showScriptSource('script1.js', step3); + } + + function step3() { + TestRunner.addResult('Script source was shown for \'' + panel.visibleView._uiSourceCode.name() + '\'.'); + TestRunner.addResult('Formatting...'); + SourcesTestRunner.scriptFormatter().then(function(scriptFormatter) { + TestRunner.addSniffer( + Sources.ScriptFormatterEditorAction.prototype, '_updateButton', uiSourceCodeScriptFormatted); + scriptFormatter._toggleFormatScriptSource(); + }); + } + + function uiSourceCodeScriptFormatted() { + TestRunner.addResult('Script source was shown for \'' + panel.visibleView._uiSourceCode.name() + '\'.'); + next(); + } + } + ]); +}; +</script> +</head> +<body onload="runTest()"> +<p>Tests that certain user actions in scripts panel reveal execution line.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-formatter-breakpoints-2-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/script-formatter-breakpoints-2-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-formatter-breakpoints-2-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/script-formatter-breakpoints-2-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/script-formatter-breakpoints-2.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/script-formatter-breakpoints-2.html new file mode 100644 index 0000000..0a4be02 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/script-formatter-breakpoints-2.html
@@ -0,0 +1,59 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script src="../debugger/resources/unformatted2.js"></script> +<script> +var test = function() { + Bindings.breakpointManager._storage._breakpoints = {}; + var panel = UI.panels.sources; + var scriptFormatter; + var formattedSourceFrame; + + SourcesTestRunner.runDebuggerTestSuite([ + function testSetup(next) { + SourcesTestRunner.scriptFormatter().then(function(sf) { + scriptFormatter = sf; + next(); + }); + }, + + function testBreakpointsSetAndRemoveInFormattedSource(next) { + SourcesTestRunner.showScriptSource('unformatted2.js', didShowScriptSource); + + function didShowScriptSource(frame) { + TestRunner.addSniffer( + Sources.ScriptFormatterEditorAction.prototype, '_updateButton', uiSourceCodeScriptFormatted); + scriptFormatter._toggleFormatScriptSource(); + } + + function uiSourceCodeScriptFormatted() { + formattedSourceFrame = panel.visibleView; + SourcesTestRunner.setBreakpoint(formattedSourceFrame, 3, '', true); + SourcesTestRunner.waitBreakpointSidebarPane().then(evaluateF2); + } + + function evaluateF2() { + SourcesTestRunner.waitUntilPaused(pausedInF2); + TestRunner.evaluateInPageWithTimeout('f2()'); + } + + function pausedInF2(callFrames) { + SourcesTestRunner.dumpBreakpointSidebarPane('while paused in pretty printed'); + SourcesTestRunner.waitBreakpointSidebarPane() + .then(() => SourcesTestRunner.dumpBreakpointSidebarPane('while paused in raw')) + .then(() => SourcesTestRunner.resumeExecution(next)); + SourcesTestRunner.removeBreakpoint(formattedSourceFrame, 3); + Sources.sourceFormatter.discardFormattedUISourceCode(panel.visibleView.uiSourceCode()); + } + } + ]); + +}; +</script> +</head> +<body onload="runTest()"> +<p>Tests the script formatting is working fine with breakpoints. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-formatter-breakpoints-3-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/script-formatter-breakpoints-3-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-formatter-breakpoints-3-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/script-formatter-breakpoints-3-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/script-formatter-breakpoints-3.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/script-formatter-breakpoints-3.html new file mode 100644 index 0000000..b674d45 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/script-formatter-breakpoints-3.html
@@ -0,0 +1,59 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script src="../debugger/resources/unformatted3.js"></script> +<script> +var test = function() { + Bindings.breakpointManager._storage._breakpoints = {}; + var panel = UI.panels.sources; + var scriptFormatter; + + SourcesTestRunner.runDebuggerTestSuite([ + function testSetup(next) { + SourcesTestRunner.scriptFormatter().then(function(sf) { + scriptFormatter = sf; + next(); + }); + }, + + function testBreakpointsSetInFormattedAndRemoveInOriginalSource(next) { + SourcesTestRunner.showScriptSource('unformatted3.js', didShowScriptSource); + + function didShowScriptSource(frame) { + TestRunner.addSniffer( + Sources.ScriptFormatterEditorAction.prototype, '_updateButton', uiSourceCodeScriptFormatted); + scriptFormatter._toggleFormatScriptSource(); + } + + function uiSourceCodeScriptFormatted() { + var formattedSourceFrame = panel.visibleView; + SourcesTestRunner.setBreakpoint(formattedSourceFrame, 3, '', true); + SourcesTestRunner.waitBreakpointSidebarPane().then(evaluateF2); + } + + function evaluateF2() { + SourcesTestRunner.waitUntilPaused(pausedInF2); + TestRunner.evaluateInPageWithTimeout('f2()'); + } + + + function pausedInF2(callFrames) { + SourcesTestRunner.dumpBreakpointSidebarPane('while paused in pretty printed'); + SourcesTestRunner.waitBreakpointSidebarPane() + .then(() => SourcesTestRunner.dumpBreakpointSidebarPane('while paused in raw')) + .then(() => SourcesTestRunner.resumeExecution(next)); + // No need to remove breakpoint since formattedUISourceCode was removed. + Sources.sourceFormatter.discardFormattedUISourceCode(panel.visibleView.uiSourceCode()); + } + } + ]); + +}; +</script> +</head> +<body onload="runTest()"> +<p>Tests the script formatting is working fine with breakpoints. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-formatter-search-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/script-formatter-search-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-formatter-search-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/script-formatter-search-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/script-formatter-search.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/script-formatter-search.html new file mode 100644 index 0000000..6d1a2d1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/script-formatter-search.html
@@ -0,0 +1,52 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script src="../../../inspector/search/search-test.js"></script> +<script> + +function nonFormattedFunction() { var i = 2 + 2; var a = 4; return a + i; } + +var test = function() { + var scriptSource; + var shouldRequestContent = false; + SourcesTestRunner.scriptFormatter().then(startDebuggerTest); + var scriptFormatter; + + function startDebuggerTest(sf) { + scriptFormatter = sf; + SourcesTestRunner.startDebuggerTest(started); + } + + function started() { + SourcesTestRunner.showScriptSource('script-formatter-search.html', didShowScriptSource); + } + + async function didShowScriptSource(frame) { + scriptSource = frame._uiSourceCode; + var matches = await scriptSource.searchInContent('magic-string', true, false); + TestRunner.addResult('Pre-format search results:'); + SourcesTestRunner.dumpSearchMatches(matches); + shouldRequestContent = true; + TestRunner.addSniffer(Sources.ScriptFormatterEditorAction.prototype, '_updateButton', uiSourceCodeScriptFormatted); + scriptFormatter._toggleFormatScriptSource(); + } + + async function uiSourceCodeScriptFormatted() { + var matches = await scriptSource.searchInContent('magic-string', true, false); + TestRunner.addResult('Post-format search results:'); + SourcesTestRunner.dumpSearchMatches(matches); + TestRunner.completeTest(); + } +}; + +</script> + +</head> + +<body onload="runTest()"> +<p>Tests that search across files works with formatted scripts. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-snippet-model-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/script-snippet-model-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-snippet-model-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/script-snippet-model-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/script-snippet-model.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/script-snippet-model.html new file mode 100644 index 0000000..4612eed3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/script-snippet-model.html
@@ -0,0 +1,282 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> +function startWorker() +{ + var workerScript = "postMessage('Done.');"; + var blob = new Blob([workerScript], { type: "text/javascript" }); + var worker = new Worker(URL.createObjectURL(blob)); +} + +function test() { + function evaluateSnippetAndDumpEvaluationDetails(uiSourceCode, context, callback) { + TestRunner.addSniffer(Snippets.ScriptSnippetModel.prototype, '_printRunScriptResult', dumpResult); + Snippets.scriptSnippetModel.evaluateScriptSnippet(context, uiSourceCode); + var target = context.target(); + var mapping = Snippets.scriptSnippetModel._mappingForDebuggerModel.get(target.model(SDK.DebuggerModel)); + var evaluationSourceURL = mapping._evaluationSourceURL(uiSourceCode); + var snippetId = Snippets.scriptSnippetModel._snippetIdForUISourceCode.get(uiSourceCode); + TestRunner.addResult('Last evaluation source url for snippet: ' + evaluationSourceURL); + TestRunner.assertEquals( + snippetId, Snippets.scriptSnippetModel._snippetIdForSourceURL(evaluationSourceURL), + 'Snippet can not be identified by its evaluation sourceURL.'); + + + function dumpResult(target, result) { + TestRunner.addResult('Snippet execution result: ' + result.description); + callback(); + } + } + + function resetSnippetsSettings() { + Snippets.scriptSnippetModel._snippetStorage._lastSnippetIdentifierSetting.set(0); + Snippets.scriptSnippetModel._snippetStorage._snippetsSetting.set([]); + Snippets.scriptSnippetModel._lastSnippetEvaluationIndexSetting.set(0); + Snippets.scriptSnippetModel._project.removeProject(); + Snippets.scriptSnippetModel = new Snippets.ScriptSnippetModel(Workspace.workspace); + } + + var workspace = Workspace.workspace; + SourcesTestRunner.runDebuggerTestSuite([ + function testCreateEditRenameRemove(next) { + var uiSourceCode1; + + function filterSnippet(uiSourceCode) { + return uiSourceCode.project().type() === Workspace.projectTypes.Snippets; + } + + function uiSourceCodeAdded(event) { + var uiSourceCode = event.data; + TestRunner.addResult('UISourceCodeAdded: ' + uiSourceCode.name()); + } + + function uiSourceCodeRemoved(event) { + var uiSourceCode = event.data; + TestRunner.addResult('UISourceCodeRemoved: ' + uiSourceCode.name()); + } + + workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeAdded, uiSourceCodeAdded); + workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeRemoved, uiSourceCodeRemoved); + + async function renameSnippetAndCheckWorkspace(uiSourceCode, snippetName) { + TestRunner.addResult('Renaming snippet to \'' + snippetName + '\' ...'); + await uiSourceCode.rename(snippetName).then(success => renameCallback(success)); + + function renameCallback(success) { + if (success) + TestRunner.addResult('Snippet renamed successfully.'); + else + TestRunner.addResult('Snippet was not renamed.'); + } + TestRunner.addResult('UISourceCode name is \'' + uiSourceCode.name() + '\' now.'); + TestRunner.addResult( + 'Number of uiSourceCodes in workspace: ' + workspace.uiSourceCodes().filter(filterSnippet).length); + var storageSnippetsCount = Snippets.scriptSnippetModel._snippetStorage.snippets().length; + TestRunner.addResult('Number of snippets in the storage: ' + storageSnippetsCount); + } + + function contentCallback(content) { + TestRunner.addResult('Snippet content: ' + content); + } + + resetSnippetsSettings(); + + Snippets.scriptSnippetModel.project().createFile('', null, '', step2.bind(this)); + + function step2(uiSourceCode) { + uiSourceCode1 = uiSourceCode; + + uiSourceCode1.requestContent().then(contentCallback).then(contentDumped1); + + function contentDumped1() { + uiSourceCode1.addRevision('<snippet content>'); + TestRunner.addResult('Snippet content set.'); + uiSourceCode1._requestContentPromise = null; + uiSourceCode1.contentLoaded = false; + uiSourceCode1.requestContent().then(contentCallback).then(contentDumped2); + } + + function contentDumped2() { + TestRunner.addResult('Snippet1 created.'); + Snippets.scriptSnippetModel.project().createFile('', null, '', step3.bind(this)); + } + } + + async function step3(uiSourceCode) { + var uiSourceCode2 = uiSourceCode; + TestRunner.addResult('Snippet2 created.'); + await renameSnippetAndCheckWorkspace(uiSourceCode1, 'foo'); + await renameSnippetAndCheckWorkspace(uiSourceCode1, ' '); + await renameSnippetAndCheckWorkspace(uiSourceCode1, ' bar '); + await renameSnippetAndCheckWorkspace(uiSourceCode1, 'foo'); + await renameSnippetAndCheckWorkspace(uiSourceCode2, 'bar'); + await renameSnippetAndCheckWorkspace(uiSourceCode2, 'foo'); + uiSourceCode1._requestContentPromise = null; + uiSourceCode1.contentLoaded = false; + uiSourceCode1.requestContent().then(contentCallback).then(onContentDumped); + + function onContentDumped() { + Snippets.scriptSnippetModel.project().deleteFile(uiSourceCode1); + Snippets.scriptSnippetModel.project().deleteFile(uiSourceCode2); + Snippets.scriptSnippetModel.project().createFile('', null, '', step4.bind(this)); + } + } + + function step4(uiSourceCode) { + var uiSourceCode3 = uiSourceCode; + TestRunner.addResult('Snippet3 created.'); + Snippets.scriptSnippetModel.project().deleteFile(uiSourceCode3); + TestRunner.addResult('Snippet3 deleted.'); + + TestRunner.addResult( + 'Number of uiSourceCodes in workspace: ' + workspace.uiSourceCodes().filter(filterSnippet).length); + var storageSnippetsCount = Snippets.scriptSnippetModel._snippetStorage.snippets().length; + TestRunner.addResult('Number of snippets in the storage: ' + storageSnippetsCount); + + workspace.removeEventListener(Workspace.Workspace.Events.UISourceCodeAdded, uiSourceCodeAdded); + workspace.removeEventListener(Workspace.Workspace.Events.UISourceCodeRemoved, uiSourceCodeRemoved); + + next(); + } + }, + + function testEvaluate(next) { + var uiSourceCode1; + var uiSourceCode2; + var uiSourceCode3; + var context = UI.context.flavor(SDK.ExecutionContext); + + resetSnippetsSettings(); + var snippetScriptMapping = + Snippets.scriptSnippetModel.snippetScriptMapping(SDK.targetManager.models(SDK.DebuggerModel)[0]); + + Snippets.scriptSnippetModel.project().createFile('', null, '', step2.bind(this)); + + function step2(uiSourceCode) { + uiSourceCode1 = uiSourceCode; + uiSourceCode1.rename('Snippet1'); + var content = ''; + content += '// This snippet does nothing.\n'; + content += 'var i = 2+2;\n'; + uiSourceCode1.setWorkingCopy(content); + Snippets.scriptSnippetModel.project().createFile('', null, '', step3.bind(this)); + } + + function step3(uiSourceCode) { + uiSourceCode2 = uiSourceCode; + uiSourceCode2.rename('Snippet2'); + content = ''; + content += '// This snippet creates a function that does nothing and returns it.\n'; + content += 'function doesNothing() {\n'; + content += ' var i = 2+2;\n'; + content += '};\n'; + content += 'doesNothing;\n'; + uiSourceCode2.setWorkingCopy(content); + Snippets.scriptSnippetModel.project().createFile('', null, '', step4.bind(this)); + } + + function step4(uiSourceCode) { + uiSourceCode3 = uiSourceCode; + uiSourceCode3.rename('Snippet3'); + content = ''; + content += '// This snippet uses Command Line API.\n'; + content += '$$("p").length'; + uiSourceCode3.setWorkingCopy(content); + evaluateSnippetAndDumpEvaluationDetails(uiSourceCode1, context, step5); + } + + function step5() { + evaluateSnippetAndDumpEvaluationDetails(uiSourceCode2, context, step6); + } + + function step6() { + evaluateSnippetAndDumpEvaluationDetails(uiSourceCode1, context, step7); + } + + function step7() { + evaluateSnippetAndDumpEvaluationDetails(uiSourceCode3, context, next); + } + }, + + function testEvaluateEditReload(next) { + function evaluateSnippetAndReloadPage(uiSourceCode, callback) { + TestRunner.addSniffer(Snippets.ScriptSnippetModel.prototype, '_printRunScriptResult', snippetFinished); + Snippets.scriptSnippetModel.evaluateScriptSnippet(UI.context.flavor(SDK.ExecutionContext), uiSourceCode); + + function snippetFinished(result) { + var script = snippetScriptMapping._scriptForUISourceCode.get(uiSourceCode); + TestRunner.addResult('Snippet execution result: ' + result.description); + + TestRunner.reloadPage(callback); + } + } + + resetSnippetsSettings(); + var snippetScriptMapping = + Snippets.scriptSnippetModel.snippetScriptMapping(SDK.targetManager.models(SDK.DebuggerModel)[0]); + + Snippets.scriptSnippetModel.project().createFile('', null, '', step3.bind(this)); + + function step3(uiSourceCode) { + var uiSourceCode1 = uiSourceCode; + uiSourceCode1.rename('Snippet1'); + var content = ''; + content += '// This snippet does nothing.\n'; + content += 'var i = 2+2;\n'; + uiSourceCode1.setWorkingCopy(content); + + evaluateSnippetAndReloadPage(uiSourceCode1, next); + } + }, + + function testEvaluateInWorker(next) { + var context; + + TestRunner.addSniffer(SDK.RuntimeModel.prototype, '_executionContextCreated', contextCreated); + TestRunner.evaluateInPage('startWorker()'); + + function contextCreated() { + // Take the only execution context from the worker's RuntimeModel. + context = this.executionContexts()[0]; + + resetSnippetsSettings(); + Snippets.scriptSnippetModel.project().createFile('', null, '', step2.bind(this)); + } + + function step2(uiSourceCode) { + uiSourceCode.rename('Snippet1'); + var content = '2+2;\n'; + uiSourceCode.setWorkingCopy(content); + evaluateSnippetAndDumpEvaluationDetails(uiSourceCode, context, next); + } + }, + + function testDangerousNames(next) { + resetSnippetsSettings(); + + Snippets.scriptSnippetModel.project().createFile('', null, '', step2.bind(this)); + + function step2(uiSourceCode) { + uiSourceCode.rename('toString'); + SourcesTestRunner.showUISourceCode(uiSourceCode, step3.bind(this)); + } + + function step3() { + Snippets.scriptSnippetModel.project().createFile('', null, '', step4.bind(this)); + } + + function step4(uiSourceCode) { + uiSourceCode.rename('myfile.toString'); + SourcesTestRunner.showUISourceCode(uiSourceCode, next); + } + } + ]); +}; +</script> +</head> +<body onload="runTest()"> +<p>Tests script snippet model.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/scripts-panel-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/scripts-panel-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/scripts-panel-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/scripts-panel-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/scripts-panel.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/scripts-panel.html new file mode 100644 index 0000000..3c49291 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/scripts-panel.html
@@ -0,0 +1,105 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script src="../../../inspector/page-mock.js"></script> +<script> +function test() { + function dumpNavigator(sourcesNavigatorView) { + TestRunner.addResult('Navigator:'); + SourcesTestRunner.dumpNavigatorView(sourcesNavigatorView); + } + + function createNavigatorView() { + var navigatorView = new Sources.SourcesNavigatorView(); + navigatorView.show(UI.inspectorView.element); + return navigatorView; + } + + TestRunner.addSniffer(Workspace.UISourceCode.prototype, 'requestContent', onRequestContent, true); + + function onRequestContent() { + TestRunner.addResult('Source requested for ' + this.url()); + } + + Bindings.NetworkProject.forTarget(TestRunner.mainTarget)._resetForTest(); + Bindings.resourceMapping._resetForTest(TestRunner.mainTarget); + var page = new TestRunner.PageMock('http://example.com'); + TestRunner.connectToPage('mock-page', page, true /* makeMainTarget */); + + function addNetworkFile(url) { + page.evalScript(url, '', false /* isContentScript */); + return TestRunner.waitForUISourceCode(url); + } + + function reload() { + page.reload(); + return new Promise(fulfill => TestRunner.addSniffer(SDK.ResourceTreeModel.prototype, '_frameNavigated', fulfill)); + } + + TestRunner.runTestSuite([ + async function testInitialLoad(next) { + await reload(); + await addNetworkFile('foobar.js'); + + var sourcesNavigatorView = createNavigatorView(); + + await addNetworkFile('foo.js'); + await addNetworkFile('bar.js'); + var uiSourceCode = await addNetworkFile('baz.js'); + sourcesNavigatorView.revealUISourceCode(uiSourceCode); + + dumpNavigator(sourcesNavigatorView); + next(); + }, + + async function testReset(next) { + await reload(); + var sourcesNavigatorView = createNavigatorView(); + + var uiSourceCode = await addNetworkFile('foo.js'); + await addNetworkFile('bar.js'); + await addNetworkFile('baz.js'); + + dumpNavigator(sourcesNavigatorView); + TestRunner.addResult('Revealing in navigator.'); + sourcesNavigatorView.revealUISourceCode(uiSourceCode); + dumpNavigator(sourcesNavigatorView); + + await reload(); + dumpNavigator(sourcesNavigatorView); + uiSourceCode = await addNetworkFile('bar.js'); + sourcesNavigatorView.revealUISourceCode(uiSourceCode); + dumpNavigator(sourcesNavigatorView); + + next(); + }, + + async function testDebuggerUISourceCodeAddedAndRemoved(next) { + await reload(); + var sourcesNavigatorView = createNavigatorView(); + + var uiSourceCode = await addNetworkFile('foo.js'); + TestRunner.waitForUISourceCode().then(onUISourceCode); + TestRunner.evaluateInPage('function foo() {}'); + + async function onUISourceCode(debuggerUISourceCode) { + sourcesNavigatorView.revealUISourceCode(uiSourceCode); + sourcesNavigatorView.revealUISourceCode(debuggerUISourceCode); + dumpNavigator(sourcesNavigatorView); + + // Plug compiler source mapping. + await addNetworkFile('source.js'); + + dumpNavigator(sourcesNavigatorView); + next(); + } + } + ]); +}; +</script> +</head> +<body onload="runTest()"> +<p>Tests that scripts panel UI elements work as intended.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/scripts-sorting-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/scripts-sorting-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/scripts-sorting-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/scripts-sorting-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/scripts-sorting.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/scripts-sorting.html new file mode 100644 index 0000000..ce99825 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/scripts-sorting.html
@@ -0,0 +1,74 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script src="../../../inspector/page-mock.js"></script> + +<script> +async function test() { + function createNavigatorView(constructor) { + var navigatorView = new constructor(); + navigatorView.show(UI.inspectorView.element); + return navigatorView; + } + + sourcesNavigatorView = createNavigatorView(Sources.SourcesNavigatorView); + contentScriptsNavigatorView = createNavigatorView(Sources.ContentScriptsNavigatorView); + + Bindings.NetworkProject.forTarget(TestRunner.mainTarget)._resetForTest(); + Bindings.resourceMapping._resetForTest(TestRunner.mainTarget); + + var pageMock = new TestRunner.PageMock('http://example.com'); + pageMock.disableDOMCapability(); + TestRunner.connectToPage('mock-target-1', pageMock); + + var uiSourceCodes = []; + async function addUISourceCode(url, isContentScript) { + pageMock.evalScript(url, '', isContentScript); + var uiSourceCode = await TestRunner.waitForUISourceCode(url); + uiSourceCodes.push(uiSourceCode); + } + + function dumpScriptsList() { + SourcesTestRunner.dumpNavigatorViewInAllModes(sourcesNavigatorView); + SourcesTestRunner.dumpNavigatorViewInAllModes(contentScriptsNavigatorView); + + for (var i = 0; i < uiSourceCodes.length; ++i) { + sourcesNavigatorView.revealUISourceCode(uiSourceCodes[i]); + contentScriptsNavigatorView.revealUISourceCode(uiSourceCodes[i]); + } + + SourcesTestRunner.dumpNavigatorViewInAllModes(sourcesNavigatorView); + SourcesTestRunner.dumpNavigatorViewInAllModes(contentScriptsNavigatorView); + } + + var scripts = [ + 'block.js?block=foo', 'ga.js', 'lenta.ban?pg=4883&ifr=1', 'lenta.ban?pg=5309&ifr=1', 'top100.jcn?80674', + '_js/production/motor.js?1308927432', 'i/xgemius.js', 'i/js/jquery-1.5.1.min.js', 'i/js/jquery.cookie.js', + 'foo/path/bar.js?file=bar/zzz.js', 'foo/path/foo.js?file=bar/aaa.js' + ]; + for (var i = 0; i < scripts.length; ++i) + await addUISourceCode('http://foo.com/' + scripts[i]); + + var scripts2 = ['foo/path/bar.js?file=bar/zzz.js', 'foo/path/foo.js?file=bar/aaa.js']; + for (var i = 0; i < scripts2.length; ++i) + await addUISourceCode('http://bar.com/' + scripts2[i]); + await addUISourceCode('*Non*URL*path'); + + var extensions = ['extension-schema://extension-name/bar.js', 'extension-schema://extension-name/folder/baz.js']; + for (var i = 0; i < extensions.length; ++i) + await addUISourceCode(extensions[i], true); + await addUISourceCode('*Another*Non*URL*path', true); + dumpScriptsList(); + TestRunner.completeTest(); +} +</script> + +</head> +<body onload="runTest()"> +<p> +Tests scripts sorting in the scripts panel. +</p> +</body> + +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/scripts-with-same-source-url-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/scripts-with-same-source-url-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/scripts-with-same-source-url-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/scripts-with-same-source-url-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/scripts-with-same-source-url.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/scripts-with-same-source-url.html new file mode 100644 index 0000000..1023cd8a --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/scripts-with-same-source-url.html
@@ -0,0 +1,50 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> +function injectScript(value) +{ + eval("function foo() { return " + value + "; } //# sourceURL=MyScript.js"); +} + +function test() { + TestRunner.evaluateInPage('injectScript(1);'); + TestRunner.evaluateInPage('injectScript(2);'); + + Workspace.workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeAdded, reportAdded); + Workspace.workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeRemoved, reportRemoved); + + var iteration = 0; + + function reportAdded(event) { + if (event.data.url().indexOf('MyScript.js') === -1) + return; + TestRunner.addResult( + 'Added: ' + event.data.url().replace(/VM[\d]+/, 'VMXX') + ' to ' + event.data.project().type()); + if (event.data.project().type() !== 'network') + return; + event.data.requestContent().then(function(it, content) { + TestRunner.addResult('Content: ' + content); + if (it) + TestRunner.completeTest(); + }.bind(null, iteration++)); + } + + function reportRemoved(event) { + if (event.data.url() !== 'MyScript.js') + return; + TestRunner.addResult('Removed: ' + event.data.url() + ' from ' + event.data.project().type()); + } +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that script is replaced with the newer version when the names match. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/selected-call-frame-after-formatting-source-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/selected-call-frame-after-formatting-source-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/selected-call-frame-after-formatting-source-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/selected-call-frame-after-formatting-source-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/selected-call-frame-after-formatting-source.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/selected-call-frame-after-formatting-source.html new file mode 100644 index 0000000..9c1777b --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/selected-call-frame-after-formatting-source.html
@@ -0,0 +1,58 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script> +function testFunction() +{ + return testFunction2(); +} + +function testFunction2() +{ + var x = Math.sqrt(10); + debugger; + return x; +} + +var test = function() { + SourcesTestRunner.startDebuggerTest(step1); + var panel = UI.panels.sources; + var sourceFrame; + + function step1() { + var testName = TestRunner.mainTarget.inspectedURL(); + testName = testName.substring(testName.lastIndexOf('/') + 1); + SourcesTestRunner.showScriptSource(testName, step2); + } + + function step2(frame) { + sourceFrame = frame; + SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step3); + } + + function step3() { + SourcesTestRunner.completeDebuggerTest(); + return; + TestRunner.debuggerModel.setSelectedCallFrame(TestRunner.debuggerModel.debuggerPausedDetails().callFrames[1]); + sourceFrame._toggleFormatSource(step4); + } + + function step4() { + TestRunner.assertEquals('testFunction', UI.context.flavor(SDK.DebuggerModel.CallFrame).functionName); + sourceFrame._toggleFormatSource(step5); + } + + function step5() { + SourcesTestRunner.completeDebuggerTest(); + } +}; + +</script> +</head> +<body onload="runTest()"> +<p>Tests selected call frame does not change when pretty-print is toggled.</p> +<a href="https://bugs.webkit.org/show_bug.cgi?id=70906">Bug 70906</a> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/show-function-definition-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/show-function-definition-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/show-function-definition-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/show-function-definition-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/show-function-definition.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/show-function-definition.html new file mode 100644 index 0000000..09d0776 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/show-function-definition.html
@@ -0,0 +1,68 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/console-test.js"></script> +<script> + +function jumpToMe() +{ + var result = 12345; + return window.foo || result; +} + +function test() { + var panel = UI.panels.sources; + + TestRunner.runTestSuite([ + function testRevealFunctionDefinition(next) { + TestRunner.addSniffer(panel, 'showUISourceCode', showUISourceCodeHook); + UI.context.flavor(SDK.ExecutionContext).evaluate({expression: 'jumpToMe', silent: true}).then(didGetFunction); + + function didGetFunction(result) { + var error = !result.object || !!result.exceptionDetails; + TestRunner.assertTrue(!error); + panel._showFunctionDefinition(result.object); + } + + function showUISourceCodeHook(uiSourceCode, lineNumber, columnNumber, forceShowInPanel) { + // lineNumber and columnNumber are 0-based + ++lineNumber; + ++columnNumber; + TestRunner.addResult('Function location revealed: [' + lineNumber + ':' + columnNumber + ']'); + next(); + } + }, + + function testDumpFunctionDefinition(next) { + TestRunner.addSniffer(ObjectUI.ObjectPropertiesSection, 'formatObjectAsFunction', onConsoleMessagesReceived); + var consoleView = Console.ConsoleView.instance(); + consoleView._prompt._appendCommand('jumpToMe', true); + + function onConsoleMessagesReceived() { + TestRunner.deprecatedRunAfterPendingDispatches(function() { + var messages = []; + ConsoleTestRunner.disableConsoleViewport(); + var viewMessages = Console.ConsoleView.instance()._visibleViewMessages; + for (var i = 0; i < viewMessages.length; ++i) { + var uiMessage = viewMessages[i]; + var element = uiMessage.contentElement(); + messages.push(element.deepTextContent()); + } + TestRunner.addResult(messages.join('\n')); + next(); + }); + } + } + ]); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that "Show Function Definition" jumps to the correct location. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/show-generator-location-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/show-generator-location-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/show-generator-location-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/show-generator-location-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/show-generator-location.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/show-generator-location.html new file mode 100644 index 0000000..e4597a03 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/show-generator-location.html
@@ -0,0 +1,87 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/console-test.js"></script> +<script> + +function forward(iter, step) +{ + while (step-- > 0) + iter.next(); + return iter; +} + +function* gen() +{ + yield 1; + yield 2; + yield 3; +} + +var iterNotStarted = gen(); +var iterSuspended1 = forward(gen(), 1); +var iterSuspended2 = forward(gen(), 2); +var iterSuspended3 = forward(gen(), 3); +var iterClosed = forward(gen(), 4); + +function test() { + var panel = UI.panels.sources; + + function performStandardTestCase(pageExpression, next) { + TestRunner.addSniffer(panel, 'showUISourceCode', showUISourceCodeHook); + TestRunner.evaluateInPage(pageExpression, didEvaluate); + + function didEvaluate(remote) { + remote.getOwnPropertiesPromise().then(revealLocation.bind(null, remote)); + } + + function revealLocation(remote, properties) { + var loc; + for (var prop of properties.internalProperties) { + if (prop.name === '[[GeneratorLocation]]') { + loc = prop.value.value; + break; + } + } + Common.Revealer.reveal( + remote.debuggerModel().createRawLocationByScriptId(loc.scriptId, loc.lineNumber, loc.columnNumber)); + } + + function showUISourceCodeHook(uiSourceCode, lineNumber, columnNumber, forceShowInPanel) { + // lineNumber and columnNumber are 0-based + ++lineNumber; + ++columnNumber; + TestRunner.addResult('Generator location revealed: [' + lineNumber + ':' + columnNumber + ']'); + next(); + } + } + + var expressions = [ + 'iterNotStarted', + 'iterSuspended1', + 'iterSuspended2', + 'iterSuspended3', + 'iterClosed', + ]; + + function createTestSuiteFunction(expression) { + var functionName = 'test' + expression.toTitleCase(); + return eval( + 'function ' + functionName + '(next)\n' + + '{\n' + + ' performStandardTestCase(\'' + expression + '\', next);\n' + + '}; ' + functionName); + } + + TestRunner.runTestSuite(expressions.map(createTestSuiteFunction)); +} + +</script> +</head> + +<body onload="runTest()"> +<p> +Tests that "Show Generator Location" jumps to the correct location. +</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/source-frame-count-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/source-frame-count-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/source-frame-count-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/source-frame-count-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/source-frame-count.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/source-frame-count.html new file mode 100644 index 0000000..c656009 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/source-frame-count.html
@@ -0,0 +1,80 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> + +<script> +function createScriptsAndRun() +{ + eval("window.foo1 = function() {}\n//# sourceURL=script1.js"); + eval("window.foo2 = function() {}\n//# sourceURL=script2.js"); + eval("window.foo3 = function() {}\n//# sourceURL=script3.js"); + eval("window.foo4 = function() {}\n//# sourceURL=script4.js"); + eval("window.foo5 = function() {}\n//# sourceURL=script5.js"); + + runTest(); +} + +function test() { + var framesOpened = 0; + + SourcesTestRunner.runDebuggerTestSuite([function testSourceFramesCount(next) { + var panel = UI.panels.sources; + + SourcesTestRunner.showScriptSource('source-frame-count.html', function() {}); + SourcesTestRunner.showScriptSource('script1.js', function() {}); + SourcesTestRunner.showScriptSource('script2.js', function() {}); + SourcesTestRunner.showScriptSource('script3.js', function() {}); + SourcesTestRunner.showScriptSource('script4.js', function() {}); + SourcesTestRunner.showScriptSource('script5.js', reloadThePage); + + function reloadThePage() { + TestRunner.addResult('Reloading page...'); + TestRunner.reloadPage(didReload); + function didCreateSourceFrame() { + framesOpened++; + } + TestRunner.addSniffer(SourceFrame.SourceFrame.prototype, 'wasShown', didCreateSourceFrame, true); + } + + function didReload() { + if (framesOpened > 3) + TestRunner.addResult('Too many frames opened: ' + framesOpened); + else + TestRunner.addResult('Less than 3 frames opened'); + TestRunner.addResult('Visible view: ' + panel.visibleView._uiSourceCode.name()); + next(); + } + }]); +}; + +</script> + +<script> +function secondInlinedScriptInPage() +{ + return 0; +} +</script> + +<script> +function thirdInlinedScriptInPage() +{ + return 0; +} +</script> + +<script> +function fourthInlinedScriptInPage() +{ + return 0; +} +</script> + +</head> + +<body onload="createScriptsAndRun()"> +<p>Tests that scripts panel does not create too many source frames.</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/source-frame-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/source-frame-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/source-frame-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/source-frame-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/source-frame.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/source-frame.html new file mode 100644 index 0000000..09713ee --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/source-frame.html
@@ -0,0 +1,80 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/console-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script src="../../../inspector/network-test.js"></script> +<script src="../../../inspector/resources-test.js"></script> +<script> +function addErrorToConsole() +{ + console.error("test error message"); +} + +function methodForBreakpoint() +{ + alert("Hello world"); +} + +function test() { + UI.viewManager.showView('resources'); + SourcesTestRunner.runDebuggerTestSuite([ + function testConsoleMessage(next) { + SourcesTestRunner.showScriptSource('source-frame.html', didShowScriptSource); + + var shownSourceFrame; + function didShowScriptSource(sourceFrame) { + TestRunner.addResult('Script source was shown.'); + shownSourceFrame = sourceFrame; + TestRunner.addSniffer(SourceFrame.UISourceCodeFrame.prototype, '_addMessageToSource', didAddMessage); + TestRunner.addSniffer(SourceFrame.UISourceCodeFrame.prototype, '_removeMessageFromSource', didRemoveMessage); + TestRunner.evaluateInPage('addErrorToConsole()'); + } + + function didAddMessage(message) { + if (this !== shownSourceFrame) + return; + TestRunner.addResult('Message added to source frame: ' + message.text()); + setImmediate(function() { + Console.ConsoleView.clearConsole(); + }); + } + + function didRemoveMessage(message) { + if (this !== shownSourceFrame) + return; + TestRunner.addResult('Message removed from source frame: ' + message.text()); + next(); + } + }, + + function testShowResource(next) { + UI.viewManager.showView('network'); + TestRunner.addSniffer(SourceFrame.SourceFrame.prototype, 'show', didShowSourceFrame); + + TestRunner.resourceTreeModel.forAllResources(visit); + function visit(resource) { + if (resource.url.indexOf('debugger-test.js') !== -1) { + UI.panels.resources._sidebar.showResource(resource, 1); + return true; + } + } + + function didShowSourceFrame() { + next(); + } + } + ]); +}; + +</script> + +</head> + +<body onload="runTest()"> +<p>Tests that it's possible to set breakpoint in source frame, and that +source frame displays breakpoints and console errors. +</p> + +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/source-url-comment-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/source-url-comment-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/source-url-comment-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/source-url-comment-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/source-url-comment.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/source-url-comment.html new file mode 100644 index 0000000..d5f6928 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/source-url-comment.html
@@ -0,0 +1,179 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> +function keepAliveInInlineScript() { } + +//# sourceURL=inlineScriptURL.js +</script> +<script> +function doEval() +{ + eval("function keepAlive() {}\n//# sourceURL=evalURL.js"); +} + +function doEvalWithNonRelativeURL() +{ + eval("function relativeURLScript() {}\n//# sourceURL=js/nonRelativeURL.js"); +} + +function doDynamicScript() +{ + var scriptElement = document.createElement("script"); + scriptElement.textContent = "function keepAliveInDynamicScript() {}\n//# sourceURL=dynamicScriptURL.js"; + document.body.appendChild(scriptElement); +} + +function doURLAndMappingURL() +{ + eval("function keepAlive() {}\n//# sourceMappingURL=sourceMappingURL.map\n//# sourceURL=sourceURL.js"); +} + +function doEvalWithMultipleSourceURL() +{ + eval("\n//# sourceURL=evalURL2.js\nfunction keepAlive() {}\n//# sourceURL=evalMultipleURL.js"); +} + +function addScriptWithURL() +{ + var script = document.createElement("script"); + script.src = "../debugger/resources/script-with-url.js"; + document.head.appendChild(script); +} + +function addScriptWithPoorURL() +{ + var script = document.createElement("script"); + script.src = "../debugger/resources/script-with-poor-url.js"; + document.head.appendChild(script); +} + +function test() + +{ + function forEachScriptMatchingURL(url, handler) { + for (var script of TestRunner.debuggerModel.scripts()) { + if (script.sourceURL.indexOf(url) !== -1) + handler(script); + } + } + + SourcesTestRunner.runDebuggerTestSuite([ + function testSourceURLCommentInInlineScript(next) { + SourcesTestRunner.showScriptSource('source-url-comment.html', didShowScriptSource); + + function didShowScriptSource(sourceFrame) { + var panel = UI.panels.sources; + var uiSourceCodes = panel._workspace.uiSourceCodes(); + var ignored = true; + for (var i = 0; i < uiSourceCodes.length && ignored; ++i) { + if (uiSourceCodes[i].url().indexOf('inlineScriptURL.js') !== -1) + ignored = false; + } + if (ignored) + TestRunner.addResult('FAILED: sourceURL comment in inline script was ignored'); + next(); + } + }, + + function testSourceURLCommentInScript(next) { + SourcesTestRunner.showScriptSource('scriptWithSourceURL.js', didShowScriptSource); + TestRunner.evaluateInPage('setTimeout(addScriptWithURL, 0)'); + + function didShowScriptSource(sourceFrame) { + TestRunner.addResult(sourceFrame.textEditor.text().trim()); + forEachScriptMatchingURL('scriptWithSourceURL.js', checkScriptSourceURL); + next(); + } + }, + + function testPoorSourceURLCommentInScript(next) { + SourcesTestRunner.showScriptSource('source-url-comment.html', didShowScriptSource); + TestRunner.evaluateInPage('setTimeout(addScriptWithPoorURL, 0)'); + + function didShowScriptSource(sourceFrame) { + var panel = UI.panels.sources; + var uiSourceCodes = panel._workspace.uiSourceCodes(); + for (var i = 0; i < uiSourceCodes.length; ++i) { + if (uiSourceCodes[i].url().indexOf('scriptWithPoorSourceURL.js') !== -1) + TestRunner.addResult('FAILED: poor sourceURL comment in script was used as a script name'); + } + next(); + } + }, + + function testSourceURLComment(next) { + SourcesTestRunner.showScriptSource('evalURL.js', didShowScriptSource); + TestRunner.evaluateInPage('setTimeout(doEval, 0)'); + + function didShowScriptSource(sourceFrame) { + TestRunner.addResult(sourceFrame.textEditor.text()); + forEachScriptMatchingURL('evalURL.js', checkScriptSourceURL); + next(); + } + }, + + function testSourceURLAndMappingURLComment(next) { + SourcesTestRunner.showScriptSource('sourceURL.js', didShowScriptSource); + TestRunner.evaluateInPage('setTimeout(doURLAndMappingURL, 0)'); + + function didShowScriptSource(sourceFrame) { + function checkScriptSourceURLAndMappingURL(script) { + TestRunner.addResult('hasSourceURL: ' + script.hasSourceURL); + TestRunner.addResult('sourceMapURL: ' + script.sourceMapURL); + } + + TestRunner.addResult(sourceFrame.textEditor.text()); + forEachScriptMatchingURL('sourceURL.js', checkScriptSourceURLAndMappingURL); + next(); + } + }, + + function testSourceURLCommentInDynamicScript(next) { + SourcesTestRunner.showScriptSource('dynamicScriptURL.js', didShowScriptSource); + TestRunner.evaluateInPage('setTimeout(doDynamicScript, 0)'); + + function didShowScriptSource(sourceFrame) { + TestRunner.addResult(sourceFrame.textEditor.text()); + forEachScriptMatchingURL('dynamicScriptURL.js', checkScriptSourceURL); + next(); + } + }, + + function testNonRelativeURL(next) { + SourcesTestRunner.showScriptSource('js/nonRelativeURL.js', didShowScriptSource); + TestRunner.evaluateInPage('setTimeout(doEvalWithNonRelativeURL, 0)'); + + function didShowScriptSource(sourceFrame) { + TestRunner.addResult(sourceFrame.textEditor.text()); + forEachScriptMatchingURL('nonRelativeURL.js', checkScriptSourceURL); + next(); + } + }, + + function testMultipleSourceURLComment(next) { + SourcesTestRunner.showScriptSource('evalMultipleURL.js', didShowScriptSource); + TestRunner.evaluateInPage('setTimeout(doEvalWithMultipleSourceURL, 0)'); + + function didShowScriptSource(sourceFrame) { + TestRunner.addResult(sourceFrame.textEditor.text()); + forEachScriptMatchingURL('evalMultipleURL.js', checkScriptSourceURL); + next(); + } + } + ]); + + function checkScriptSourceURL(script) { + TestRunner.addResult('hasSourceURL: ' + script.hasSourceURL); + } +}; + +</script> + +</head> + +<body onload="runTest()"> +<p>Tests that evals with sourceURL comment are shown in scripts panel.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/switch-file-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/switch-file-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/switch-file-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/switch-file-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/switch-file.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/switch-file.html new file mode 100644 index 0000000..8a9600d --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/switch-file.html
@@ -0,0 +1,43 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/page-mock.js"></script> +<script> + +async function test() { + var files = [ + 'foo.css', 'foo.js', 'foo.js.map', 'foo.ts', + + 'bar.css', 'bar.js', 'bar.js.map', 'bar.ts', + + 'baz.css', 'baz2', + + 'foo/foo.css', 'foo/foo.js', 'foo/foo.js.map', 'foo/foo.ts', 'foo/foo', + + 'bar/foo.css', 'bar/foo.js', 'bar/foo.js.map', 'bar/foo.ts', 'bar/foo' + ]; + files = files.map(file => 'http://example.com/' + file); + + var page = new TestRunner.PageMock('http://example.com'); + TestRunner.connectToPage('mock-page', page); + + var uiSourceCodes = []; + for (var i = 0; i < files.length; ++i) { + page.evalScript(files[i], '', false /* isContentScript */); + uiSourceCodes.push(await TestRunner.waitForUISourceCode(files[i])); + } + + TestRunner.addResult('Dumping next file for each file:'); + for (var uiSourceCode of uiSourceCodes) { + var nextUISourceCode = Sources.SourcesView.SwitchFileActionDelegate._nextFile(uiSourceCode); + var nextURI = nextUISourceCode ? nextUISourceCode.url() : '<none>'; + TestRunner.addResult(`Next file for ${uiSourceCode.url()} is ${nextURI}.`); + } + TestRunner.completeTest(); +} +</script> +</head> +<body onload="runTest()"> +<p>Tests how switch to next file with the same name and different extension feature works.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/ui-source-code-display-name-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/ui-source-code-display-name-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/ui-source-code-display-name-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/ui-source-code-display-name-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/ui-source-code-display-name.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/ui-source-code-display-name.html new file mode 100644 index 0000000..1a5c1f4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/ui-source-code-display-name.html
@@ -0,0 +1,26 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script> +async function test() { + async function dumpUISourceCodeDisplayName(url) { + var uiSourceCode = await SourcesTestRunner.addScriptUISourceCode(url, ''); + TestRunner.addResult( + 'UISourceCode display name for url "' + url + '" is "' + + Sources.TabbedEditorContainer.prototype._titleForFile(uiSourceCode) + '".'); + } + + const baseURL = 'http://localhost:8080/folder/'; + await dumpUISourceCodeDisplayName(baseURL + 'filename?parameter=value&nnn=1'); + await dumpUISourceCodeDisplayName(baseURL + 'very-long-filename-123456?nn=1'); + await dumpUISourceCodeDisplayName(baseURL + 'too-long-filename-1234567890?nn=1'); + await dumpUISourceCodeDisplayName(baseURL + 'long-filename?parameter=value&nnn=1'); + await dumpUISourceCodeDisplayName(baseURL + 'too-long-filename-1234567890?parameter=value&nnn=1'); + TestRunner.completeTest(); +}; +</script> +</head> +<body onload="runTest()"> +<p>Tests UISourceCode display name.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/ui-source-code-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/ui-source-code-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/ui-source-code-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/ui-source-code-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/ui-source-code.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/ui-source-code.html new file mode 100644 index 0000000..e175972c --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/ui-source-code.html
@@ -0,0 +1,61 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> + +<script> + +function test() { + var MockProject = class extends Workspace.ProjectStore { + requestFileContent(uri, callback) { + TestRunner.addResult('Content is requested from SourceCodeProvider.'); + setTimeout(callback.bind(null, 'var x = 0;'), 0); + } + + mimeType() { + return 'text/javascript'; + } + + isServiceProject() { + return false; + } + + type() { + return Workspace.projectTypes.Debugger; + } + + url() { + return 'mock://debugger-ui/'; + } + }; + + TestRunner.runTestSuite([function testUISourceCode(next) { + var uiSourceCode = new Workspace.UISourceCode(new MockProject(), 'url', Common.resourceTypes.Script); + function didRequestContent(callNumber, content) { + TestRunner.addResult('Callback ' + callNumber + ' is invoked.'); + TestRunner.assertEquals('text/javascript', uiSourceCode.mimeType()); + TestRunner.assertEquals('var x = 0;', content); + + if (callNumber === 3) { + // Check that sourceCodeProvider.requestContent won't be called anymore. + uiSourceCode.requestContent().then(function(content) { + TestRunner.assertEquals('text/javascript', uiSourceCode.mimeType()); + TestRunner.assertEquals('var x = 0;', content); + next(); + }); + } + } + // Check that all callbacks will be invoked. + uiSourceCode.requestContent().then(didRequestContent.bind(null, 1)); + uiSourceCode.requestContent().then(didRequestContent.bind(null, 2)); + uiSourceCode.requestContent().then(didRequestContent.bind(null, 3)); + }]); +}; + +</script> + +</head> + +<body onload="runTest()"> +<p>Tests UISourceCode class.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/watch-expressions-panel-switch-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/watch-expressions-panel-switch-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/watch-expressions-panel-switch-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/watch-expressions-panel-switch-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/watch-expressions-panel-switch.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/watch-expressions-panel-switch.html new file mode 100644 index 0000000..036a248 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/watch-expressions-panel-switch.html
@@ -0,0 +1,44 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../../inspector/network-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +function testFunction() +{ + var x = Math.sqrt(16); + debugger; + return x; +} + +function test() { + SourcesTestRunner.setQuiet(true); + SourcesTestRunner.startDebuggerTest(step1); + var updateCount = 8; + + Common.settings.createLocalSetting('watchExpressions', []).set(['x', 'y.foo']); + + function step1() { + watchExpressionsPane = self.runtime.sharedInstance(Sources.WatchExpressionsSidebarPane); + UI.panels.sources._sidebarPaneStack.showView(UI.panels.sources._watchSidebarPane).then(() => { + TestRunner.addSniffer(Sources.WatchExpression.prototype, '_createWatchExpression', watchExpressionsUpdated, true); + TestRunner.evaluateInPage('testFunction()'); + }); + } + + function watchExpressionsUpdated(result, wasThrown) { + TestRunner.addResult(this._element.deepTextContent()); + if (--updateCount === 0) + SourcesTestRunner.completeDebuggerTest(); + } +} + +</script> +</head> +<body onload="runTest()"> +<p>Tests debugger does not fail when stopped while a panel other than scripts was opened. Both valid and invalid expressions are added to watch expressions.</p> +<a href="https://bugs.webkit.org/show_bug.cgi?id=70718">Bug 70718</a> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/watch-expressions-preserve-expansion-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/watch-expressions-preserve-expansion-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/watch-expressions-preserve-expansion-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/watch-expressions-preserve-expansion-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/watch-expressions-preserve-expansion.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/watch-expressions-preserve-expansion.html new file mode 100644 index 0000000..d2d5599 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-ui/watch-expressions-preserve-expansion.html
@@ -0,0 +1,124 @@ +<html> +<head> +<script src="../../../inspector/inspector-test.js"></script> +<script src="../../../inspector/elements-test.js"></script> +<script src="../../../inspector/debugger-test.js"></script> +<script> + +var globalObject = { + foo: { + bar: { + baz: 2012 + } + } +}; +var windowAlias = window; +var array = []; +for (var i = 0; i < 300; ++i) + array[i] = i; + +(function() +{ + var a = 10; + var b = 100; + window.func = function() {return a + b;} +}()); + +var test = function() { + var watchExpressionsPane = self.runtime.sharedInstance(Sources.WatchExpressionsSidebarPane); + UI.panels.sources._sidebarPaneStack.showView(UI.panels.sources._watchSidebarPane).then(() => { + watchExpressionsPane.doUpdate(); + watchExpressionsPane._createWatchExpression('globalObject'); + watchExpressionsPane._createWatchExpression('windowAlias'); + watchExpressionsPane._createWatchExpression('array'); + watchExpressionsPane._createWatchExpression('func'); + watchExpressionsPane._saveExpressions(); + TestRunner.deprecatedRunAfterPendingDispatches(step2); + }); + + function step2() { + TestRunner.addResult('Watch expressions added.'); + var expandArray = expandWatchExpression.bind(null, ['array', '[200 \u2026 299]', '299'], step3); + var expandFunc = expandWatchExpression.bind(null, ['func', '[[Scopes]]', '0', 'a'], expandArray); + expandWatchExpression(['globalObject', 'foo', 'bar'], expandFunc); + } + + function step3() { + TestRunner.addResult('Watch expressions expanded.'); + dumpWatchExpressions(); + TestRunner.reloadPage(step4); + } + + function step4() { + TestRunner.addResult('Watch expressions after page reload:'); + dumpWatchExpressions(); + TestRunner.completeTest(); + } + + function dumpWatchExpressions() { + var pane = self.runtime.sharedInstance(Sources.WatchExpressionsSidebarPane); + + for (var i = 0; i < pane._watchExpressions.length; i++) { + var watch = pane._watchExpressions[i]; + TestRunner.addResult(watch.expression() + ': ' + watch._objectPropertiesSection._object._description); + dumpObjectPropertiesTreeElement(watch._objectPropertiesSection.objectTreeElement(), ' '); + } + } + + function dumpObjectPropertiesTreeElement(treeElement, indent) { + if (treeElement.property) + addResult(indent + treeElement.property.name + ': ' + treeElement.property.value._description); + else if (typeof treeElement.title === 'string') + addResult(indent + treeElement.title); + + for (var i = 0; i < treeElement.children().length; i++) + dumpObjectPropertiesTreeElement(treeElement.children()[i], ' ' + indent); + } + + function expandProperties(treeoutline, path, callback) { + treeoutline.addEventListener(UI.TreeOutline.Events.ElementAttached, elementAttached); + treeoutline.expand(); + + function elementAttached(event) { + var treeElement = event.data; + var currentName = treeElement.property ? treeElement.property.name : treeElement.title; + if (currentName !== path[0]) + return; + + var childName = path.shift(); + addResult('expanded ' + childName + ' ' + (treeElement.property ? treeElement.property.value : '')); + + if (path.length) { + treeElement.expand(); + return; + } + + treeoutline.removeEventListener(UI.TreeOutline.Events.ElementAttached, elementAttached); + callback(); + } + } + + function expandWatchExpression(path, callback) { + var pane = self.runtime.sharedInstance(Sources.WatchExpressionsSidebarPane); + var expression = path.shift(); + for (var i = 0; i < pane._watchExpressions.length; i++) { + var watch = pane._watchExpressions[i]; + if (watch.expression() === expression) { + expandProperties(watch._objectPropertiesSection, path, callback); + break; + } + } + } + + function addResult(string) { + TestRunner.addResult(string.replace('\u2026', '..')); + } +}; + +</script> +</head> +<body onload="runTest()"> +<p>Test that watch expressions expansion state is restored after update.</p> +<a href="https://bugs.webkit.org/show_bug.cgi?id=99304">Bug 99304</a> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/dont-diverge-script-evaluated-twice-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/dont-diverge-script-evaluated-twice-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/dont-diverge-script-evaluated-twice-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/dont-diverge-script-evaluated-twice-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/dont-diverge-script-evaluated-twice.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/dont-diverge-script-evaluated-twice.html new file mode 100644 index 0000000..bee3008 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/dont-diverge-script-evaluated-twice.html
@@ -0,0 +1,53 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script> + +var test = function() { + const scriptSource = '239\n//# sourceURL=test.js'; + const changedScriptSource = '42\n//# sourceURL=test.js'; + + SourcesTestRunner.startDebuggerTest(step1); + + function step1() { + SourcesTestRunner.waitForScriptSource('test.js', step2); + TestRunner.evaluateInPage(scriptSource); + } + + function step2(uiSourceCode) { + TestRunner.addSnifferPromise(Bindings.ResourceScriptFile.prototype, '_mappingCheckedForTest') + .then(() => step3(uiSourceCode)); + SourcesTestRunner.showScriptSource('test.js'); + } + + function step3(uiSourceCode) { + var debuggerModel = TestRunner.debuggerModel; + var scriptFile = Bindings.debuggerWorkspaceBinding.scriptFile(uiSourceCode, debuggerModel); + if (!scriptFile) { + TestRunner.addResult('[FAIL]: no script file for test.js'); + SourcesTestRunner.completeDebuggerTest(); + return; + } + if (scriptFile.hasDivergedFromVM() || scriptFile.isDivergingFromVM()) { + TestRunner.addResult('[FAIL]: script file is diverged from VM'); + SourcesTestRunner.completeDebuggerTest(); + return; + } + + TestRunner.addSnifferPromise(Sources.JavaScriptSourceFrame.prototype, '_didDivergeFromVM').then(dumpDivergeFromVM); + TestRunner.addSnifferPromise(Bindings.ResourceScriptFile.prototype, '_mappingCheckedForTest') + .then(() => SourcesTestRunner.completeDebuggerTest()); + TestRunner.evaluateInPage(changedScriptSource); + } + + function dumpDivergeFromVM() { + TestRunner.addResult('[FAIL]: script file was diverged from VM'); + } +}; +</script> +</head> +<body onload="runTest()"> +<p>Checks that script evaluated twice with different source and the same sourceURL won't be diverged from VM.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/formatter-css-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/formatter-css-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/formatter-css-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/formatter-css-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/formatter-css.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/formatter-css.html new file mode 100644 index 0000000..5ee44dd --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/formatter-css.html
@@ -0,0 +1,65 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<link rel="stylesheet" href="resources/style-formatter-obfuscated.css"> + +<script> +async function test() { + var uiSourceCode = await TestRunner.waitForUISourceCode('style-formatter-obfuscated.css'); + var formatData = await Sources.sourceFormatter.format(uiSourceCode); + var targetContent = await formatData.formattedSourceCode.requestContent(); + + TestRunner.addResult(`Formatted:\n${targetContent}`); + + var originalContent = await uiSourceCode.requestContent(); + var styleHeader = Bindings.cssWorkspaceBinding.uiLocationToRawLocations(uiSourceCode.uiLocation(0, 0))[0].header(); + var text = new TextUtils.Text(originalContent); + var liveLocationsPool = new Bindings.LiveLocationPool(); + var locationUpdateCount = 0; + var rawLocations = []; + var liveLocations = []; + for (var offset = originalContent.indexOf('{'); offset >= 0; offset = originalContent.indexOf('{', offset + 1)) { + var position = text.positionFromOffset(offset); + var rawLocation = new SDK.CSSLocation(styleHeader, position.lineNumber, position.columnNumber); + rawLocations.push(rawLocation); + liveLocations.push(Bindings.cssWorkspaceBinding.createLiveLocation(rawLocation, () => { + locationUpdateCount++; + }, liveLocationsPool)); + } + + TestRunner.addResult('Location mapping with formatted source:'); + dumpLocations(); + + Sources.sourceFormatter.discardFormattedUISourceCode(formatData.formattedSourceCode); + + TestRunner.addResult('Location mapping without formatted source:'); + dumpLocations(); + + TestRunner.completeTest(); + + function dumpLocations() { + TestRunner.addResult('Mapped locations:'); + for (var rawLocation of rawLocations) { + var uiLocation = Bindings.cssWorkspaceBinding.rawLocationToUILocation(rawLocation); + var reverseRawLocation = Bindings.cssWorkspaceBinding.uiLocationToRawLocations(uiLocation)[0]; + TestRunner.addResult( + `${rawLocation.lineNumber}:${rawLocation.columnNumber} -> ${uiLocation.lineNumber}:${ + uiLocation.columnNumber + } ` + + `-> ${reverseRawLocation.lineNumber}:${reverseRawLocation.columnNumber}`); + } + TestRunner.addResult(`Live locations (updated: ${locationUpdateCount}):`); + for (var liveLocation of liveLocations) { + var uiLocation = liveLocation.uiLocation(); + TestRunner.addResult(`${uiLocation.lineNumber}:${uiLocation.columnNumber}`); + } + } +} +</script> + +</head> +<body onload="runTest()"> +<p>Tests how SourceFormatter handles CSS sources</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/formatter-js-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/formatter-js-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/formatter-js-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/formatter-js-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/formatter-js.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/formatter-js.html new file mode 100644 index 0000000..8cb66b4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/formatter-js.html
@@ -0,0 +1,52 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script src="debugger/resources/obfuscated.js"></script> + +<script> +async function test() { + var uiSourceCode = await TestRunner.waitForUISourceCode('obfuscated.js'); + var formatData = await Sources.sourceFormatter.format(uiSourceCode); + var targetContent = await formatData.formattedSourceCode.requestContent(); + + TestRunner.addResult(`Formatted:\n${targetContent}`); + + var originalContent = await uiSourceCode.requestContent(); + var text = new TextUtils.Text(originalContent); + var positions = []; + for (var offset = originalContent.indexOf('{'); offset >= 0; offset = originalContent.indexOf('{', offset + 1)) + positions.push(text.positionFromOffset(offset)); + var script = Bindings.debuggerWorkspaceBinding.uiLocationToRawLocation(uiSourceCode, 0, 0).script(); + + TestRunner.addResult('Location mapping with formatted source:'); + dumpLocations(positions); + + Sources.sourceFormatter.discardFormattedUISourceCode(formatData.formattedSourceCode); + + TestRunner.addResult('Location mapping without formatted source:'); + dumpLocations(positions); + + TestRunner.completeTest(); + + function dumpLocations(positions) { + for (var position of positions) { + var rawLocation = TestRunner.debuggerModel.createRawLocation(script, position.lineNumber, position.columnNumber); + var uiLocation = Bindings.debuggerWorkspaceBinding.rawLocationToUILocation(rawLocation); + var reverseRawLocation = Bindings.debuggerWorkspaceBinding.uiLocationToRawLocation( + uiLocation.uiSourceCode, uiLocation.lineNumber, uiLocation.columnNumber); + TestRunner.addResult( + `${rawLocation.lineNumber}:${rawLocation.columnNumber} -> ${uiLocation.lineNumber}:${ + uiLocation.columnNumber + }` + + ` -> ${reverseRawLocation.lineNumber}:${reverseRawLocation.columnNumber}`); + } + } +} +</script> + +</head> +<body onload="runTest()"> +<p>Tests how SourceFormatter handles JS sources</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/inspect-function-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/inspect-function-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/inspect-function-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/inspect-function-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/inspect-function.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/inspect-function.html new file mode 100644 index 0000000..8b46361 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/inspect-function.html
@@ -0,0 +1,26 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/console-test.js"></script> +<script> +function test() { + var revealed = 0; + TestRunner.addSniffer(Sources.SourcesView.prototype, 'showSourceLocation', didReveal, true); + ConsoleTestRunner.evaluateInConsole('function foo() { }; inspect(foo.bind());inspect(foo);'); + + function didReveal(uiSourceCode, lineNumber, columnNumber) { + TestRunner.addResult('Function was revealed:'); + TestRunner.addResult('lineNumber: ' + lineNumber); + TestRunner.addResult('columnNumber: ' + columnNumber); + if (revealed == 0) + ++revealed; + else + TestRunner.completeTest(); + } +} +</script> +</head> +<body onload="runTest()"> + <p>Tests that inspect object action works for function and resolve bound function location.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/javascript-outline-dialog-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/javascript-outline-dialog-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/javascript-outline-dialog-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/javascript-outline-dialog-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/javascript-outline-dialog.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/javascript-outline-dialog.html new file mode 100644 index 0000000..9f08b72 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/javascript-outline-dialog.html
@@ -0,0 +1,46 @@ +<html> +<head> + + +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script src="./resources/javascript-outline-dialog.js"></script> +<script> + +function test() { + SourcesTestRunner.showScriptSource('javascript-outline-dialog.js', onSourceShown); + var provider; + function onSourceShown(sourceFrame) { + TestRunner.addSniffer(Sources.OutlineQuickOpen.prototype, 'refresh', onQuickOpenFulfilled); + UI.panels.sources._sourcesView._showOutlineQuickOpen(); + } + + function onQuickOpenFulfilled() { + provider = this; + dumpScores('te'); + dumpScores('test'); + dumpScores('test('); + dumpScores('test(arg'); + TestRunner.completeTest(); + } + + function dumpScores(query) { + TestRunner.addResult(`Scores for query="${query}"`); + var keys = []; + for (var i = 0; i < provider.itemCount(); ++i) { + keys.push({key: provider.itemKeyAt(i), score: provider.itemScoreAt(i, query)}); + } + keys.sort((a, b) => b.score - a.score); + TestRunner.addResult(keys.map(a => a.key + ' ' + a.score).join('\n')); + TestRunner.addResult(''); + } +} + +</script> + +</head> + +<body onload="runTest()"> +<p>Verify JavaScriptOutlineDialog scoring.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-1-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-1-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-1-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-1-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-1.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-1.html new file mode 100644 index 0000000..8ee3eca --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-1.html
@@ -0,0 +1,36 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/sources-test.js"></script> + +<script> + +async function test() { + var test = SourcesTestRunner.testJavascriptOutline; + + TestRunner.markStep('testSimpleFunction'); + await test('function foo(a, b, c) {}'); + + TestRunner.markStep('testSpreadOperator'); + await test('function foo(a, b, ...c) {}'); + + TestRunner.markStep('testVariableDeclaration'); + await test('var a = function(a,b) { }'); + + TestRunner.markStep('testMultipleVariableDeclaration'); + await test('var a = function(a,b) { }, b = function(c,d) { }'); + + TestRunner.markStep('testObjectProperty'); + await test('a.b.c = function(d, e) { }'); + + TestRunner.completeTest(); +} + +</script> + +</head> + +<body onload="runTest()"> +<p>Verify javascript outline</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-2-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-2-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-2-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-2-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-2.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-2.html new file mode 100644 index 0000000..c010afb --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-2.html
@@ -0,0 +1,36 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/sources-test.js"></script> + +<script> + +async function test() { + var test = SourcesTestRunner.testJavascriptOutline; + + TestRunner.markStep('testNamedFunctionVariableAssignment'); + await test('var a = function foo(...bar) { }'); + + TestRunner.markStep('testArrowFunction'); + await test('var a = x => x + 2'); + + TestRunner.markStep('testArrowFunctionWithMultipleArguments'); + await test('var a = (x, y) => x + y'); + + TestRunner.markStep('testInnerFunctions'); + await test('function foo(){ function bar() {} function baz() { }}'); + + TestRunner.markStep('testObjectProperties'); + await test('x = { run: function() { }, get count() { }, set count(value) { }}'); + + TestRunner.completeTest(); +} + +</script> + +</head> + +<body onload="runTest()"> +<p>Verify javascript outline</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-3-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-3-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-3-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-3-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-3.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-3.html new file mode 100644 index 0000000..785b1ab --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-3.html
@@ -0,0 +1,36 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/sources-test.js"></script> + +<script> + +async function test() { + var test = SourcesTestRunner.testJavascriptOutline; + + TestRunner.markStep('testClassConstructor'); + await test('class Test { constructor(foo, bar) { }}'); + + TestRunner.markStep('testClassMethods'); + await test('class Test { foo() {} bar() { }}'); + + TestRunner.markStep('testAnonymousClass'); + await test('var test = class { constructor(foo, bar) { }}'); + + TestRunner.markStep('testClassExtends'); + await test('var A = class extends B { foo() { }}'); + + TestRunner.markStep('testStaticMethod'); + await test('class Test { static foo() { }}'); + + TestRunner.completeTest(); +} + +</script> + +</head> + +<body onload="runTest()"> +<p>Verify javascript outline</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-4-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-4-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-4-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-4-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-4.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-4.html new file mode 100644 index 0000000..47e0eb9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-4.html
@@ -0,0 +1,48 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/sources-test.js"></script> + +<script> + +async function test() { + var test = SourcesTestRunner.testJavascriptOutline; + + TestRunner.markStep('testAsyncFunction'); + await test('async function foo() { }'); + + TestRunner.markStep('testAsyncArrowFunction'); + await test('var sum = async (x, y) => x + y;'); + + TestRunner.markStep('testGeneratorFunction'); + await test('function* foo() { }'); + + TestRunner.markStep('testMismatchBrackets'); + await test(` +function foo(a, b) { + if (a > b) { + return a; +} + +function bar(eee) { + foo(eee, 2 * eee); +} +`); + + TestRunner.markStep('testSyntaxError'); + await test(` +function notAGenerator(a, b) { + yield 10; +}`); + + TestRunner.completeTest(); +} + +</script> + +</head> + +<body onload="runTest()"> +<p>Verify javascript outline</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-5-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-5-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-5-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-5-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-5.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-5.html new file mode 100644 index 0000000..eec0f27 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-5.html
@@ -0,0 +1,36 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/sources-test.js"></script> + +<script> + +async function test() { + var test = SourcesTestRunner.testJavascriptOutline; + + TestRunner.markStep('testComputedProperty'); + await test('a.b[c] = function() { };'); + + TestRunner.markStep('testComputedPropertyInTheMiddle'); + await test('a.b[c].d = function() { };'); + + TestRunner.markStep('testComputedPropertyForExpression'); + await test('(a || b).c = function() { };'); + + TestRunner.markStep('testPropertyStringLiteral'); + await test('var foo = { "bar": function() { }}'); + + TestRunner.markStep('testPropertyNumberLiteral'); + await test('var foo = { 42: function() { }}'); + + TestRunner.completeTest(); +} + +</script> + +</head> + +<body onload="runTest()"> +<p>Verify javascript outline</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-6-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-6-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-6-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-6-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-6.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-6.html new file mode 100644 index 0000000..cab7536 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/outline-javascript-6.html
@@ -0,0 +1,30 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/sources-test.js"></script> + +<script> + +async function test() { + var test = SourcesTestRunner.testJavascriptOutline; + + TestRunner.markStep('testClassAsNumberLiteralProperty'); + await test('var foo = { 42: class { }};'); + + TestRunner.markStep('testClassAsStringLiteralProperty'); + await test('var foo = { "foo": class { }};'); + + TestRunner.markStep('testClassAsIdentifierProperty'); + await test('var foo = { foo: class { }};'); + + TestRunner.completeTest(); +} + +</script> + +</head> + +<body onload="runTest()"> +<p>Verify javascript outline</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-css-1-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-css-1-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/pretty-print-css-1-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-css-1-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-css-1.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-css-1.html new file mode 100644 index 0000000..2f4e8d3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-css-1.html
@@ -0,0 +1,65 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script src="../../inspector/sources-test.js"></script> +<link rel="stylesheet" href="resources/style-formatter-obfuscated.css"> + +<script> + +function test() { + var testCSSFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/css'); + + TestRunner.runTestSuite([ + function testSimpleCSS(next) { + var content = 'a { /* pre-comment */ color /* after name */ : /* before value */ red /* post-comment */ }'; + testCSSFormatter(content, ['pre-comment', 'post-comment'], next); + }, + + function testComplexCSS(next) { + SourcesTestRunner.showScriptSource('style-formatter-obfuscated.css', didShowScriptSource); + + function didShowScriptSource(sourceFrame) { + var mappingQueries = [ + '@media', + 'screen', + 'html', + 'color', + 'green', + 'foo-property', + 'bar-value', + 'body', + 'background', + 'black', + ]; + testCSSFormatter(sourceFrame._textEditor.text(), mappingQueries, next); + } + }, + + function testFormatInlinedStyles(next) { + var content = + '<html><body><style>@-webkit-keyframes{from{left: 0} to{left:100px;}}</style><style>badbraces { }} @media screen{a.b{color:red;text-decoration: none}}</style></body></html>'; + SourcesTestRunner.testPrettyPrint('text/html', content, [], next); + }, + + function testNonZeroLineMapping(next) { + var mappingQueries = ['div', 'color', 'red']; + testCSSFormatter('\n\ndiv { color: red; }', mappingQueries, next); + }, + + function testComplexSelector(next) { + var css = 'a.b.c:hover,.d.e.f.g::before,h.i{color:red;}'; + var mappingQueries = ['a', '.b', '.c', '.d', '.e', '.f', '.g', 'h', '.i', 'color', 'red']; + testCSSFormatter(css, mappingQueries, next); + }, + ]); +} + +</script> + +</head> + +<body onload="runTest()"> +<p>Verifies CSS pretty-printing functionality.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-css-2-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-css-2-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/pretty-print-css-2-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-css-2-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-css-2.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-css-2.html new file mode 100644 index 0000000..b436f03 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-css-2.html
@@ -0,0 +1,55 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script src="../../inspector/sources-test.js"></script> +<link rel="stylesheet" href="resources/style-formatter-obfuscated.css"> + +<script> + +function test() { + var testCSSFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/css'); + + TestRunner.runTestSuite([ + function testFontFace(next) { + var css = + '@font-face{font-family:MyHelvetica;src:local(\'Helvetica Neue Bold\'),local(\'HelveticaNeue-Bold\'),url(MgOpenModernaBold.ttf);font-weight:bold;}div{color:red}'; + var mappingQueries = ['font-face', 'red']; + testCSSFormatter(css, mappingQueries, next); + }, + + function testCharsetRule(next) { + var css = '@charset \'iso-8859-15\';p{margin:0}'; + var mappingQueries = ['charset', 'iso', 'margin']; + testCSSFormatter(css, mappingQueries, next); + }, + + function testImportRule(next) { + var css = '@import url(\'bluish.css\') projection,tv;span{border:1px solid black}'; + var mappingQueries = ['import', 'bluish', 'projection', 'span', 'border', 'black']; + testCSSFormatter(css, mappingQueries, next); + }, + + function testImportWithMediaQueryRule(next) { + var css = '@import url(\'landscape.css\') screen and (orientation:landscape);article{background:yellow}'; + var mappingQueries = ['import', 'url', 'orientation', 'article', 'background', 'yellow']; + testCSSFormatter(css, mappingQueries, next); + }, + + function testKeyframesRule(next) { + var css = + 'p{animation-duration:3s;}@keyframes slidein{from{margin-left:100%;width:300%;}to{margin-left:0%;width:100%;}}p{animation-name:slidein}'; + var mappingQueries = ['animation-duration', '3s', 'keyframes', 'from', '300%', 'animation-name']; + testCSSFormatter(css, mappingQueries, next); + }, + ]); +} + +</script> + +</head> + +<body onload="runTest()"> +<p>Verifies CSS pretty-printing functionality.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-css-3-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-css-3-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/pretty-print-css-3-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-css-3-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-css-3.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-css-3.html new file mode 100644 index 0000000..f9b6146 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-css-3.html
@@ -0,0 +1,53 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script src="../../inspector/sources-test.js"></script> +<link rel="stylesheet" href="resources/style-formatter-obfuscated.css"> + +<script> + +function test() { + var testCSSFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/css'); + + TestRunner.runTestSuite([ + function testMediaRule(next) { + var css = '@media screen,print{body{line-height:1.2}}span{line-height:10px}'; + var mappingQueries = ['@media', 'screen', 'print', 'body', 'line-height', '1.2']; + testCSSFormatter(css, mappingQueries, next); + }, + + function testNamespaceRule(next) { + var css = '@namespace svg url(http://www.w3.org/2000/svg);g{color:red}'; + var mappingQueries = ['namespace', 'url', 'color', 'red']; + testCSSFormatter(css, mappingQueries, next); + }, + + function testPageRule(next) { + var css = '@page :first{margin:2in 3in;}span{color:blue}'; + var mappingQueries = ['page', 'first', 'margin', '3in']; + testCSSFormatter(css, mappingQueries, next); + }, + + function testSupportsRule(next) { + var css = '@supports(--foo:green){body{color:green;}}#content{font-size:14px}'; + var mappingQueries = ['supports', 'foo', 'body', 'color']; + testCSSFormatter(css, mappingQueries, next); + }, + + function testViewportRule(next) { + var css = '@viewport{zoom:0.75;min-zoom:0.5;max-zoom:0.9;}footer{position:fixed;bottom:0;}'; + var mappingQueries = ['viewport', 'zoom', '0.5', '0.9']; + testCSSFormatter(css, mappingQueries, next); + }, + ]); +} + +</script> + +</head> + +<body onload="runTest()"> +<p>Verifies CSS pretty-printing functionality.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-html-1-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-html-1-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/pretty-print-html-1-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-html-1-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-html-1.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-html-1.html new file mode 100644 index 0000000..b8f7874 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-html-1.html
@@ -0,0 +1,50 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script src="../../inspector/sources-test.js"></script> + +<script> + +function test() { + var testFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/html'); + + TestRunner.runTestSuite([ + function simpleHTML(next) { + var mappingQueries = ['</head>', 'test', '</title>']; + testFormatter('<html><head><title>test</title></head></html>', mappingQueries, next); + }, + + function selfClosingTags(next) { + var mappingQueries = ['meta', 'hr', '<html>', '</html>']; + testFormatter('<html><head><meta></head><img><hr/></html>', mappingQueries, next); + }, + + function erroneousSelfClosingTags(next) { + var mappingQueries = ['<br/>', '<title>', 'test', '</head>']; + testFormatter('<head><meta><meta></meta><br/></br><link></link><title>test</title></head>', mappingQueries, next); + }, + + function testAttributes(next) { + var mappingQueries = ['<body>', 'width', 'height', '</body>']; + testFormatter( + '<body><canvas width=100 height=100 data-bad-attr=\'</canvas>\'></canvas></body>', mappingQueries, next); + }, + + function testCustomElements(next) { + var mappingQueries = ['<body>', 'custom-time', 'year', 'month', '</body>']; + testFormatter( + '<body><custom-time year=2016 day=1 month=1><div>minutes/seconds</div></custom-time></body>', mappingQueries, + next); + } + ]); +} + +</script> + +</head> + +<body onload="runTest()"> +<p>Verifies JavaScript pretty-printing functionality.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-html-2-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-html-2-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/pretty-print-html-2-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-html-2-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-html-2.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-html-2.html new file mode 100644 index 0000000..0c4421f7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-html-2.html
@@ -0,0 +1,51 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script src="../../inspector/sources-test.js"></script> + +<script> + +function test() { + var testFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/html'); + + TestRunner.runTestSuite([ + function testDocType(next) { + var mappingQueries = ['<body>', 'hello', '</body>']; + testFormatter('<!DOCTYPE HTML><body>hello, world</body>', mappingQueries, next); + }, + + function testComment(next) { + var mappingQueries = ['<body>', 'comment 1', 'comment 2', 'comment 3', 'link']; + testFormatter( + '<!-- comment 1 --><html><!-- comment 2--><meta/><body><!-- comment 3--><a>link</a></body></html>', + mappingQueries, next); + }, + + function testNonJavascriptScriptTag(next) { + var mappingQueries = ['type', 'R', '</div>', '<\/script>']; + testFormatter('<div><script type=\'text/K\'>2_&{&/x!/:2_!x}\'!R<\/script></div>', mappingQueries, next); + }, + + function testList(next) { + var mappingQueries = ['foo', 'bar', 'baz', 'hello', 'world', 'another']; + testFormatter( + '<ul><li>foo<li> hello <b>world</b>!<li> hello <b>world</b> <b>i\'m here</b><li>bar<li>baz<li>hello <b>world</b><li>another</ul>', + mappingQueries, next); + }, + + function testAutomaticClosingTags(next) { + var mappingQueries = ['aaaa', 'bbbb1', 'bbbb2', 'cccc', 'dddd']; + testFormatter('<a>aaaa<b>bbbb1<c>cccc<d>dddd</c>bbbb2</a>', mappingQueries, next); + }, + ]); +} + +</script> + +</head> + +<body onload="runTest()"> +<p>Verifies JavaScript pretty-printing functionality.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-html-3-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-html-3-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/pretty-print-html-3-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-html-3-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-html-3.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-html-3.html new file mode 100644 index 0000000..21319c0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-html-3.html
@@ -0,0 +1,55 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script src="../../inspector/sources-test.js"></script> + +<script> + +function test() { + var testFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/html'); + + TestRunner.runTestSuite([ + function testLinkFollowedByComment(next) { + var mappingQueries = ['stylesheet', 'some', 'comment']; + testFormatter('<link href=\'a/b/c.css\' rel=\'stylesheet\'><!-- some comment -->', mappingQueries, next); + }, + + function testInlineJavascript(next) { + var mappingQueries = ['console', 'test', '</html']; + testFormatter( + '<html><script>for(var i=0;i<10;++i)console.log(\'test \'+i);<\/script></html>', mappingQueries, next); + }, + + function testInlineCSS(next) { + var mappingQueries = ['<html>', 'red', 'black']; + testFormatter('<html><style>div{color:red;border:1px solid black;}</style></html>', mappingQueries, next); + }, + + function testMultilineInput(next) { + var html = `<html> +<head> +<meta name=\"ROBOTS\" content=\"NOODP\"> +<meta name='viewport' content='text/html'> +<title>foobar</title> +<body> +<script>if(1<2){if(2<3){if(3<4){if(4<5){console.log("magic")}}}}<\/script> +<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIA..."> +<style>div{display:flex;align-items:center;justify-content:center;}body{width:100%}*{border:1px solid black}</style> +</body> +</html> +`; + var mappingQueries = ['ROBOTS', 'image', '...', '</body>', '</html>', '</style>']; + testFormatter(html, mappingQueries, next); + }, + ]); +} + +</script> + +</head> + +<body onload="runTest()"> +<p>Verifies JavaScript pretty-printing functionality.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-1-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-1-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-1-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-1-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-1.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-1.html new file mode 100644 index 0000000..c74b071 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-1.html
@@ -0,0 +1,49 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script src="../../inspector/sources-test.js"></script> +<script src="debugger/resources/obfuscated.js"></script> + +<script> + +function test() { + var testJSFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/javascript'); + + TestRunner.runTestSuite([ + function multipleVariableDeclarations(next) { + var mappingQueries = ['{}', 'hello', ';']; + testJSFormatter('var a=1,b={},c=2,d="hello world";var a,b,c,d=2,e,f=3;', mappingQueries, next); + }, + + function emptyObjectExpression(next) { + var mappingQueries = ['{', '}', 'a']; + testJSFormatter('var a={}', mappingQueries, next); + }, + + function breakContinueStatements(next) { + var mappingQueries = ['break', 'continue', '2', 'else']; + testJSFormatter('for(var i in set)if(i%2===0)break;else continue;', mappingQueries, next); + }, + + function chainedIfStatements(next) { + var mappingQueries = ['7', '9', '3', '++']; + testJSFormatter( + 'if(a%7===0)b=1;else if(a%9===1) b = 2;else if(a%5===3){b=a/2;b++;} else b= 3;', mappingQueries, next); + }, + + function tryCatchStatement(next) { + var mappingQueries = ['try', 'catch', 'finally']; + testJSFormatter('try{a(b());}catch(e){f()}finally{f();}', mappingQueries, next); + }, + ]); +} + +</script> + +</head> + +<body onload="runTest()"> +<p>Verifies JavaScript pretty-printing functionality.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-2-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-2-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-2-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-2-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-2.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-2.html new file mode 100644 index 0000000..98a523f --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-2.html
@@ -0,0 +1,48 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script src="../../inspector/sources-test.js"></script> +<script src="debugger/resources/obfuscated.js"></script> + +<script> + +function test() { + var testJSFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/javascript'); + + TestRunner.runTestSuite([ + function forLoopWithIfStatementWithoutBlockStatements(next) { + var mappingQueries = ['length', 'console', 'of']; + testJSFormatter('for(var value of map)if (value.length%3===0)console.log(value);', mappingQueries, next); + }, + + function objectExpressionProperties(next) { + var mappingQueries = ['mapping', 'original', 'formatted']; + testJSFormatter('var mapping={original:[1,2,3],formatted:[],count:0}', mappingQueries, next); + }, + + function blockFormatting(next) { + var mappingQueries = ['(1)', '(2)']; + testJSFormatter('{ print(1); print(2); }', mappingQueries, next); + }, + + function assignmentFormatting(next) { + var mappingQueries = ['string']; + testJSFormatter('var exp=\'a string\';c=+a+(0>a?b:0);c=(1);var a=(1);', mappingQueries, next); + }, + + function objectLiteralFormatting(next) { + var mappingQueries = ['dog', '1989', 'foo']; + testJSFormatter('var obj={\'foo\':1,bar:"2",cat:{dog:\'1989\'}}', mappingQueries, next); + }, + ]); +} + +</script> + +</head> + +<body onload="runTest()"> +<p>Verifies JavaScript pretty-printing functionality.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-3-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-3-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-3-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-3-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-3.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-3.html new file mode 100644 index 0000000..6accc7f9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-3.html
@@ -0,0 +1,50 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script src="../../inspector/sources-test.js"></script> +<script src="debugger/resources/obfuscated.js"></script> + +<script> + +function test() { + var testJSFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/javascript'); + + TestRunner.runTestSuite([ + function ifStatements(next) { + var mappingQueries = ['===', '!==', 'non-eq']; + testJSFormatter( + 'if(a<b)log(a);else log(b);if(a<b){log(a)}else{log(b);}if(a===b)log(\'equals\');if(a!==b){log(\'non-eq\');}', + mappingQueries, next); + }, + + function arrayLiteralFormatting(next) { + var mappingQueries = ['3', '2', '1', '0']; + testJSFormatter('var arr=[3,2,1,0]', mappingQueries, next); + }, + + function ifFormatting(next) { + var mappingQueries = ['&&', 'print(a)']; + testJSFormatter('if(a>b&&b>c){print(a);print(b);}', mappingQueries, next); + }, + + function ternarOperatorFormatting(next) { + var mappingQueries = ['?', ':']; + testJSFormatter('a>b?a:b', mappingQueries, next); + }, + + function labeledStatementFormatting(next) { + var mappingQueries = ['break', 'continue', 'while']; + testJSFormatter('firstLoop:while(true){break firstLoop;continue firstLoop;}', mappingQueries, next); + }, + ]); +} + +</script> + +</head> + +<body onload="runTest()"> +<p>Verifies JavaScript pretty-printing functionality.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-4-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-4-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-4-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-4-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-4.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-4.html new file mode 100644 index 0000000..08f9f0f6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-4.html
@@ -0,0 +1,50 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script src="../../inspector/sources-test.js"></script> +<script src="debugger/resources/obfuscated.js"></script> + +<script> + +function test() { + var testJSFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/javascript'); + + TestRunner.runTestSuite([ + function withStatementFormatting(next) { + var mappingQueries = ['first', 'obj', 'nice', '1', '2', 'done']; + testJSFormatter('with(obj)log(\'first\');with(nice){log(1);log(2);}done();', mappingQueries, next); + }, + + function switchStatementFormatting(next) { + var mappingQueries = ['even', 'odd', '89', 'done']; + testJSFormatter( + 'switch (a) { case 1, 3: log("odd");break;case 2:log("even");break;case 42:case 89: log(a);default:log("interesting");log(a);}log("done");', + mappingQueries, next); + }, + + function whileFormatting(next) { + var mappingQueries = ['while', 'infinity', ');']; + testJSFormatter('while(true){print(\'infinity\');}', mappingQueries, next); + }, + + function doWhileFormatting(next) { + var mappingQueries = ['while', 'infinity']; + testJSFormatter('do{print(\'infinity\');}while(true);', mappingQueries, next); + }, + + function functionFormatting(next) { + var mappingQueries = ['return', '*=']; + testJSFormatter('function test(a,b,c){a*=b;return c+a;}', mappingQueries, next); + }, + ]); +} + +</script> + +</head> + +<body onload="runTest()"> +<p>Verifies JavaScript pretty-printing functionality.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-5-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-5-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-5-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-5-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-5.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-5.html new file mode 100644 index 0000000..8293833 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-5.html
@@ -0,0 +1,55 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script src="../../inspector/sources-test.js"></script> +<script src="debugger/resources/obfuscated.js"></script> + +<script> + +function test() { + var testJSFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/javascript'); + + TestRunner.runTestSuite([ + function forInFormatting(next) { + var mappingQueries = ['myMap', 'print']; + testJSFormatter('for(var key in myMap)print(key);', mappingQueries, next); + }, + + function forOfFormatting(next) { + var mappingQueries = ['myMap', 'print']; + testJSFormatter('for(var value of myMap)print(value);', mappingQueries, next); + }, + + function commaBetweenStatementsFormatting(next) { + var mappingQueries = ['noop', 'hasNew']; + testJSFormatter('rebuild(),show(),hasNew?refresh():noop();', mappingQueries, next); + }, + + function complexScriptFormatting(next) { + SourcesTestRunner.showScriptSource('obfuscated.js', didShowScriptSource); + + function didShowScriptSource(sourceFrame) { + var mappingQueries = [ + 'function', 'formatted1', 'variable1', ' return "functionWithComments"', 'onmessage', 'indent_start', + 'function require', 'var regexp', 'importScripts', 'formatted2' + ]; + testJSFormatter(sourceFrame._textEditor.text(), mappingQueries, next); + } + }, + + function ifStatementIndentRegression(next) { + var mappingQueries = ['pretty', 'reset']; + testJSFormatter('{if (a>b){a();pretty();}else if (a+b)e();reset();}', mappingQueries, next); + }, + ]); +} + +</script> + +</head> + +<body onload="runTest()"> +<p>Verifies JavaScript pretty-printing functionality.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-6-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-6-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-6-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-6-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-6.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-6.html new file mode 100644 index 0000000..1cb2d1d0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-6.html
@@ -0,0 +1,62 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script src="../../inspector/sources-test.js"></script> +<script src="debugger/resources/obfuscated.js"></script> + +<script> + +function test() { + var testJSFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/javascript'); + + TestRunner.runTestSuite([ + function trailingCommentsTest(next) { + var mappingQueries = []; + testJSFormatter('noop(); //#sourceMappingURL=program.js.map', mappingQueries, next); + }, + + function inlinedScriptFormatting(next) { + var content = '<html><body><script>function f(){}<' + + '/script><script>function g(){var a;window.return = 10;if (a) return;}<' + + '/script></body></html>'; + SourcesTestRunner.testPrettyPrint('text/html', content, [], next); + }, + + function generatorFormatter(next) { + var mappingQueries = ['max', '*', 'else']; + testJSFormatter( + 'function *max(){var a=yield;var b=yield 10;if(a>b)return a;else return b;}', mappingQueries, next); + }, + + function blockCommentFormatter(next) { + var mappingQueries = ['this', 'is', 'block', 'comment', 'var', '10']; + testJSFormatter('/** this\n * is\n * block\n * comment\n */\nvar a=10;', mappingQueries, next); + }, + + function lexicalScoping(next) { + var mappingQueries = ['for', 'person', 'name', '}']; + testJSFormatter( + 'for(var i=0;i<names.length;++i){let name=names[i];let person=persons[i];}', mappingQueries, next); + }, + + function anonimousFunctionAsParameter(next) { + var mappingQueries = ['setTimeout', 'function', 'alert', '2000']; + testJSFormatter('setTimeout(function(){alert(1);},2000);', mappingQueries, next); + }, + + function arrowFunction(next) { + var mappingQueries = ['function', 'console', '=>', '2']; + testJSFormatter('function test(arg){console.log(arg);}test(a=>a+2);', mappingQueries, next); + } + ]); +} + +</script> + +</head> + +<body onload="runTest()"> +<p>Verifies JavaScript pretty-printing functionality.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-7-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-7-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-7-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-7-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-7.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-7.html new file mode 100644 index 0000000..e91710b6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-7.html
@@ -0,0 +1,58 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script src="../../inspector/sources-test.js"></script> + +<script> + +function test() { + var testJSFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/javascript'); + + TestRunner.runTestSuite([ + function semicolonAfterFunctionExpression(next) { + var mappingQueries = ['onClick', 'function', 'console', 'log', 'click!', 'done']; + testJSFormatter( + 'var onClick = function() { console.log(\'click!\'); };console.log(\'done\');', mappingQueries, next); + }, + + function semicolonAfterMultipleFunctionExpressions(next) { + var mappingQueries = ['onStart', 'onFinish', 'a()', 'b()']; + testJSFormatter('var onStart = function() { a(); }, onFinish = function() { b(); };', mappingQueries, next); + }, + + function semicolonAfterEmptyFunctionExpressions(next) { + var mappingQueries = ['onStart', 'delay', '1000', 'belay', 'activeElement']; + testJSFormatter('var onStart = function() {}, delay=1000, belay=document.activeElement;', mappingQueries, next); + }, + + function continueStatementFormatting(next) { + var mappingQueries = ['function', '1', 'continue', 'test']; + testJSFormatter('function foo(){while(1){if (a)continue;test();}}', mappingQueries, next); + }, + + function inconsistentSpaceAfterNull(next) { + var mappingQueries = ['||', 'null', ';']; + testJSFormatter('1||null;', mappingQueries, next); + }, + + function squashMultipleNewlines(next) { + var mappingQueries = ['a', 'b']; + testJSFormatter('a();\n\n\n\n\n\n\n\n\nb();', mappingQueries, next); + }, + + function ensureExponentialOperator(next) { + var mappingQueries = ['2', '**', '3']; + testJSFormatter('2**3', mappingQueries, next); + }, + ]); +} + +</script> + +</head> + +<body onload="runTest()"> +<p>Verifies JavaScript pretty-printing functionality.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-8-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-8-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-8-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-8-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-8.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-8.html new file mode 100644 index 0000000..6acf499 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-8.html
@@ -0,0 +1,27 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script src="../../inspector/sources-test.js"></script> + +<script> + +function test() { + var testJSFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/javascript'); + + TestRunner.runTestSuite([ + function asyncAwaitSupport(next) { + var mappingQueries = ['async', 'function', 'foo', 'return', 'Promise', 'resolve']; + testJSFormatter('async function foo() {return await Promise.resolve(1);}', mappingQueries, next); + }, + ]); +} + +</script> + +</head> + +<body onload="runTest()"> +<p>Verifies JavaScript pretty-printing functionality.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-9-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-9-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-9-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-9-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-9.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-9.html new file mode 100644 index 0000000..82f45a54 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-9.html
@@ -0,0 +1,36 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/sources-test.js"></script> + +<script> + +function test() { + var testJSFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/javascript'); + + TestRunner.runTestSuite([ + function parenthesizedExpressions(next) { + var mappingQueries = ['if', '((a))', '((b));', 'else', '(c)']; + testJSFormatter('if((a))((b));else (c);', mappingQueries, next); + }, + + function objectDesctructuring(next) { + var mappingQueries = ['let', 'y', 'getXYFromTouchOrPointer', 'e']; + testJSFormatter('let{x,y}=getXYFromTouchOrPointer(e);', mappingQueries, next); + }, + + function objectDesctructuringInFunctionExpression(next) { + var mappingQueries = ['test', 'function', 'foo']; + testJSFormatter('var test = function({x,y}){foo(x,y);}', mappingQueries, next); + }, + ]); +} + +</script> + +</head> + +<body onload="runTest()"> +<p>Verifies JavaScript pretty-printing functionality.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-classes-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-classes-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-classes-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-classes-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-classes.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-classes.html new file mode 100644 index 0000000..58aa15d --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-classes.html
@@ -0,0 +1,62 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script src="../../inspector/sources-test.js"></script> +<script src="debugger/resources/obfuscated.js"></script> + +<script> + +function test() { + var testJSFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/javascript'); + + TestRunner.runTestSuite([ + function emptyClass(next) { + var mappingQueries = ['Test', 'class']; + testJSFormatter('class Test{}', mappingQueries, next); + }, + + function emptyConstructor(next) { + var mappingQueries = ['Test', 'class', 'constructor']; + testJSFormatter('class Test{constructor(){}}', mappingQueries, next); + }, + + function simpleClass(next) { + var mappingQueries = ['Test', 'class', 'constructor']; + testJSFormatter('class Test{constructor(){this.bar=10;}givemebar(){return this.bar;}}', mappingQueries, next); + }, + + function extendedClass(next) { + var mappingQueries = ['Foo', 'Bar', 'extends', 'super', 'name']; + testJSFormatter( + 'class Foo extends Bar{constructor(name){super(name);}getName(){return super.getName();}}', mappingQueries, + next); + }, + + function twoConsecutiveClasses(next) { + var mappingQueries = ['B', 'extends', 'constructor', 'super']; + testJSFormatter('class A{}class B extends A{constructor(){super();}}', mappingQueries, next); + }, + + function staticMethod(next) { + var mappingQueries = ['Employer', 'static', '1', 'return']; + testJSFormatter( + 'class Employer{static count(){this._counter = (this._counter || 0) + 1; return this._counter;}}', + mappingQueries, next); + }, + + function classExpression(next) { + var mappingQueries = ['new', 'class', 'constructor', 'debugger']; + testJSFormatter('new(class{constructor(){debugger}})', mappingQueries, next); + }, + ]); +} + +</script> + +</head> + +<body onload="runTest()"> +<p>Verifies JavaScript pretty-printing functionality.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-template-literals-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-template-literals-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-template-literals-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-template-literals-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-template-literals.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-template-literals.html new file mode 100644 index 0000000..c2f6ba3f --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/pretty-print-javascript-template-literals.html
@@ -0,0 +1,53 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script src="../../inspector/sources-test.js"></script> +<script src="debugger/resources/obfuscated.js"></script> + +<script> + +function test() { + var testJSFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/javascript'); + + TestRunner.runTestSuite([ + function simpleLiteral(next) { + var mappingQueries = ['foo', 'bar']; + testJSFormatter('var foo = `bar`;', mappingQueries, next); + }, + + function multilineLiteral(next) { + var mappingQueries = ['foo', 'bar']; + testJSFormatter('var foo = `this\nbar`;', mappingQueries, next); + }, + + function stringSubstitution(next) { + var mappingQueries = ['credit', 'cash']; + testJSFormatter('var a=`I have ${credit+cash}$`;', mappingQueries, next); + }, + + function multipleStringSubstitution(next) { + var mappingQueries = ['credit', 'cash']; + testJSFormatter('var a=`${name} has ${credit+cash}${currency?currency:"$"}`;', mappingQueries, next); + }, + + function taggedTemplate(next) { + var mappingQueries = ['escapeHtml', 'width']; + testJSFormatter('escapeHtml`<div class=${classnName} width=${a+b}/>`;', mappingQueries, next); + }, + + function escapedApostrophe(next) { + var mappingQueries = ['That', 'great']; + testJSFormatter('var a=`That\`s great!`;', mappingQueries, next); + } + ]); +} + +</script> + +</head> + +<body onload="runTest()"> +<p>Verifies JavaScript pretty-printing functionality.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/resources/bezier.css b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/resources/bezier.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/resources/bezier.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/resources/bezier.css
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/resources/color.css b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/resources/color.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/resources/color.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/resources/color.css
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/resources/css-outline-column.css b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/resources/css-outline-column.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/resources/css-outline-column.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/resources/css-outline-column.css
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/resources/diff-after.css b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/resources/diff-after.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/resources/diff-after.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/resources/diff-after.css
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/resources/diff-before.css b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/resources/diff-before.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/resources/diff-before.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/resources/diff-before.css
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/resources/empty.css b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/resources/empty.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/resources/empty.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/resources/empty.css
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/resources/empty.css.map b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/resources/empty.css.map similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/resources/empty.css.map rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/resources/empty.css.map
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/resources/empty.scss b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/resources/empty.scss similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/resources/empty.scss rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/resources/empty.scss
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/resources/execution-context-iframe1.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/resources/execution-context-iframe1.html similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/resources/execution-context-iframe1.html rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/resources/execution-context-iframe1.html
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/resources/execution-context-iframe2.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/resources/execution-context-iframe2.html similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/resources/execution-context-iframe2.html rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/resources/execution-context-iframe2.html
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/resources/javascript-outline-dialog.js b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/resources/javascript-outline-dialog.js similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/resources/javascript-outline-dialog.js rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/resources/javascript-outline-dialog.js
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/resources/style-formatter-obfuscated.css b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/resources/style-formatter-obfuscated.css similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/resources/style-formatter-obfuscated.css rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/resources/style-formatter-obfuscated.css
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/sass-highlighter-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/sass-highlighter-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/sass-highlighter-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/sass-highlighter-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/sass-highlighter.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/sass-highlighter.html new file mode 100644 index 0000000..34a9f08 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/sass-highlighter.html
@@ -0,0 +1,26 @@ +<html> +<head> + +<link rel="stylesheet" href="resources/empty.css"> + +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script> + +function test() { + SourcesTestRunner.showScriptSource('empty.scss', onSourceShown); + function onSourceShown(uiSourceCodeFrame) { + var uiSourceCode = uiSourceCodeFrame.uiSourceCode(); + TestRunner.addResult(uiSourceCode.mimeType()); + TestRunner.completeTest(); + } +} + +</script> + +</head> + +<body onload="runTest()"> +<p>Verify that highlighter type for SCSS file loaded via sourceMap is correct.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/search-config-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/search-config-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/search-config-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/search-config-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/search-config.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/search-config.html new file mode 100644 index 0000000..ffe7f0d --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/search-config.html
@@ -0,0 +1,25 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script> +function test() { + function dumpParsedSearchQuery(query, isRegex) { + var searchConfig = new Workspace.SearchConfig(query, true, isRegex); + TestRunner.addResult('Dumping parsed search query [' + query + ']:'); + TestRunner.addResult(JSON.stringify(searchConfig.queries())); + } + + dumpParsedSearchQuery('function', false); + dumpParsedSearchQuery(' function', false); + dumpParsedSearchQuery(' function file:js', false); + dumpParsedSearchQuery('file:js function ', false); + dumpParsedSearchQuery('\s', true); + dumpParsedSearchQuery(' \s hello', true); + TestRunner.completeTest(); +}; +</script> +</head> +<body onload="runTest()"> +<p>Tests search query parsing.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/snippet-storage-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/snippet-storage-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/snippet-storage-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/snippet-storage-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/snippet-storage.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/snippet-storage.html new file mode 100644 index 0000000..d296808 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/snippet-storage.html
@@ -0,0 +1,63 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script> +function test() { + var settingPrefix = 'test'; + var namePrefix = 'Test snippet #'; + var snippetStorage = new Snippets.SnippetStorage(settingPrefix, namePrefix); + + function dumpSnippets(snippets) { + for (var i = 0; i < snippets.length; ++i) { + var snippet = snippets[i]; + TestRunner.addResult( + ' Snippet: id = ' + snippet.id + ', name = \'' + snippet.name + '\', content = \'' + snippet.content + + '\'.'); + } + } + + function dumpSavedSnippets() { + TestRunner.addResult('Dumping saved snippets:'); + dumpSnippets(snippetStorage._snippetsSetting.get()); + } + + function dumpStorageSnippets() { + TestRunner.addResult('Dumping storage snippets:'); + dumpSnippets(snippetStorage.snippets); + } + + dumpSavedSnippets(); + dumpStorageSnippets(); + var snippet = snippetStorage.createSnippet(); + TestRunner.addResult('Snippet created.'); + dumpSavedSnippets(); + dumpStorageSnippets(); + snippet.name = 'New snippet name'; + TestRunner.addResult('Snippet renamed.'); + dumpSavedSnippets(); + dumpStorageSnippets(); + snippet.content = 'New snippet content'; + TestRunner.addResult('Snippet content changed.'); + dumpSavedSnippets(); + dumpStorageSnippets(); + var anotherSnippet = snippetStorage.createSnippet(); + TestRunner.addResult('Another snippet created.'); + dumpSavedSnippets(); + dumpStorageSnippets(); + snippetStorage.deleteSnippet(snippet); + TestRunner.addResult('Snippet deleted.'); + dumpSavedSnippets(); + dumpStorageSnippets(); + snippetStorage.deleteSnippet(anotherSnippet); + TestRunner.addResult('Another snippet deleted.'); + dumpSavedSnippets(); + dumpStorageSnippets(); + + TestRunner.completeTest(); +}; +</script> +</head> +<body onload="runTest()"> +<p>Tests snippet storage.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/source-code-diff-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/source-code-diff-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/source-code-diff-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/source-code-diff-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/source-code-diff.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/source-code-diff.html new file mode 100644 index 0000000..4010f52 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/source-code-diff.html
@@ -0,0 +1,53 @@ +<html> +<head> + +<link rel="stylesheet" href="resources/diff-before.css"> +<link rel="stylesheet" href="resources/diff-after.css"> + +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script src="../../inspector/sources-test.js"></script> +<script> + +function test() { + Runtime.experiments.enableForTest('sourceDiff'); + var textAfter; + SourcesTestRunner.waitForScriptSource( + 'diff-after.css', uiSourceCode => uiSourceCode.requestContent().then(onAfterContent)); + + function onAfterContent(content) { + textAfter = content; + SourcesTestRunner.waitForScriptSource('diff-before.css', onBeforeUISourceCode); + } + + function onBeforeUISourceCode(uiSourceCode) { + uiSourceCode.setWorkingCopy(textAfter); + TestRunner.addSniffer(SourceFrame.SourceCodeDiff.prototype, '_decorationsSetForTest', decorationsSet); + SourcesTestRunner.showUISourceCodePromise(uiSourceCode); + } + + function decorationsSet(decorations) { + Array.from(decorations).sort((a, b) => a[0] - b[0]).forEach(print); + TestRunner.completeTest(); + + function print(decoration) { + var type = decoration[1].type; + var name = 'Unknown'; + if (type === SourceFrame.SourceCodeDiff.GutterDecorationType.Insert) + name = 'Insert'; + else if (type === SourceFrame.SourceCodeDiff.GutterDecorationType.Delete) + name = 'Delete'; + else if (type === SourceFrame.SourceCodeDiff.GutterDecorationType.Modify) + name = 'Modify'; + + TestRunner.addResult(decoration[0] + ':' + name); + } + } +} +</script> +</head> + +<body onload="runTest()"> +<p>Tests that diff markers correctly appear in the gutter.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/sources-panel-extension-names-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/sources-panel-extension-names-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/sources-panel-extension-names-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/sources-panel-extension-names-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/sources-panel-extension-names.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/sources-panel-extension-names.html new file mode 100644 index 0000000..8845c80 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/sources-panel-extension-names.html
@@ -0,0 +1,29 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script> +function test() { + var contentScriptsNavigatorView = new Sources.ContentScriptsNavigatorView(); + contentScriptsNavigatorView.show(UI.inspectorView.element); + + var mockExecutionContext = + {id: 1234567, isDefault: false, origin: 'chrome-extension://113581321345589144', name: 'FibExtension'}; + var mockContentScriptURL = mockExecutionContext.origin + '/script.js'; + + TestRunner.runTestSuite([ + async function testAddExecutionContextBeforeFile(next) { + TestRunner.runtimeModel._executionContextCreated(mockExecutionContext); + await SourcesTestRunner.addScriptUISourceCode(mockContentScriptURL, '', true, 1234567); + SourcesTestRunner.dumpNavigatorView(contentScriptsNavigatorView); + next(); + }, + ]); +} + +</script> +</head> +<body onload="runTest()"> +<p>The test verifies that extension names are resolved properly in navigator view.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/sources-panel-focus-editor-on-select-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/sources-panel-focus-editor-on-select-expected.txt similarity index 100% rename from third_party/WebKit/LayoutTests/inspector/sources/sources-panel-focus-editor-on-select-expected.txt rename to third_party/WebKit/LayoutTests/http/tests/devtools/sources/sources-panel-focus-editor-on-select-expected.txt
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/sources-panel-focus-editor-on-select.html b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/sources-panel-focus-editor-on-select.html new file mode 100644 index 0000000..4b368a6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/sources-panel-focus-editor-on-select.html
@@ -0,0 +1,25 @@ +<html> +<head> +<script src="../../inspector/inspector-test.js"></script> +<script src="../../inspector/debugger-test.js"></script> +<script> +function test() { + SourcesTestRunner.showScriptSource('inspector-test.js', onSourceFrame); + function onSourceFrame(sourceFrame) { + TestRunner.addResult('initial: focused = ' + sourceFrame.hasFocus()); + UI.inspectorView.showPanel('elements') + .then(() => UI.inspectorView.showPanel('sources')) + .then(onPanelReselected.bind(null, sourceFrame)); + } + + function onPanelReselected(sourceFrame) { + TestRunner.addResult('after panel reselected: focused = ' + sourceFrame.hasFocus()); + TestRunner.completeTest(); + } +}; +</script> +</head> +<body onload="runTest()"> +<p>Verifies that text editor has focus after panel re-selecting.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/cache-storage/cache-live-update-cache-content-expected.txt b/third_party/WebKit/LayoutTests/http/tests/inspector/cache-storage/cache-live-update-cache-content-expected.txt index a124865..ea42256 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/cache-storage/cache-live-update-cache-content-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/cache-storage/cache-live-update-cache-content-expected.txt
@@ -1,21 +1,16 @@ -Tests that cache content is marked dirty if it is modified. +Tests that cache view updates when the cache is changed. Dumping CacheStorage tree: (empty) Dumping CacheStorage tree: cache: testCache1 - http://127.0.0.1:8000 (cache empty) -Cache marked dirty = false Added entry -Cache marked dirty = true Dumping CacheStorage tree: cache: testCache1 - http://127.0.0.1:8000 1 -Cache marked dirty = false Deleted entry -Cache marked dirty = true Dumping CacheStorage tree: cache: testCache1 - http://127.0.0.1:8000 (cache empty) -Cache marked dirty = false
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/cache-storage/cache-live-update-cache-content.html b/third_party/WebKit/LayoutTests/http/tests/inspector/cache-storage/cache-live-update-cache-content.html index 8766425..f5633fa6 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/cache-storage/cache-live-update-cache-content.html +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/cache-storage/cache-live-update-cache-content.html
@@ -8,33 +8,27 @@ var cacheStorageModel = InspectorTest.mainTarget.model(SDK.ServiceWorkerCacheModel); cacheStorageModel.enable(); - function isMarkedDirty() { - var view = UI.panels.resources._sidebar.cacheStorageListTreeElement.childAt(0)._view; - InspectorTest.addResult('Cache marked dirty = ' + view._needsRefresh.visible()); - } - await new Promise(resolve => InspectorTest.waitForCacheRefresh(resolve)); await InspectorTest.clearAllCaches(); await InspectorTest.dumpCacheTree(); await InspectorTest.createCache('testCache1'); await InspectorTest.dumpCacheTree(); - isMarkedDirty(); + var promise = InspectorTest.addSnifferPromise(Resources.ServiceWorkerCacheView.prototype, '_updatedForTest'); await InspectorTest.addCacheEntry('testCache1', 'http://fake.request.com/1', 'OK'); - InspectorTest.addResult('Added entry'); - isMarkedDirty(); - await InspectorTest.dumpCacheTree(); - isMarkedDirty(); + await promise; + InspectorTest.addResult('Added entry') + await InspectorTest.dumpCacheTreeNoRefresh(); + promise = InspectorTest.addSnifferPromise(Resources.ServiceWorkerCacheView.prototype, '_updatedForTest'); await InspectorTest.deleteCacheEntry('testCache1', 'http://fake.request.com/1'); + await promise; InspectorTest.addResult('Deleted entry'); - isMarkedDirty(); - await InspectorTest.dumpCacheTree(); - isMarkedDirty(); + await InspectorTest.dumpCacheTreeNoRefresh(); await InspectorTest.clearAllCaches(); InspectorTest.completeTest(); } </script> </head> <body onload="runTest()"> -<p>Tests that cache content is marked dirty if it is modified.</p> +<p>Tests that cache view updates when the cache is changed.</p> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/cache-storage/cache-storage-test.js b/third_party/WebKit/LayoutTests/http/tests/inspector/cache-storage/cache-storage-test.js index 14e1e6e..e394ca9 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/cache-storage/cache-storage-test.js +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/cache-storage/cache-storage-test.js
@@ -8,12 +8,18 @@ InspectorTest.dumpCacheTree = async function() { UI.panels.resources._sidebar.cacheStorageListTreeElement.expand(); - InspectorTest.addResult("Dumping CacheStorage tree:"); var cachesTreeElement = UI.panels.resources._sidebar.cacheStorageListTreeElement; var promise = InspectorTest.addSnifferPromise(SDK.ServiceWorkerCacheModel.prototype, "_updateCacheNames"); UI.panels.resources._sidebar.cacheStorageListTreeElement._refreshCaches(); - await promise; + await InspectorTest.dumpCacheTreeNoRefresh(); +} + +InspectorTest.dumpCacheTreeNoRefresh = async function() +{ + UI.panels.resources._sidebar.cacheStorageListTreeElement.expand(); + InspectorTest.addResult("Dumping CacheStorage tree:"); + var cachesTreeElement = UI.panels.resources._sidebar.cacheStorageListTreeElement; if (!cachesTreeElement.childCount()) { InspectorTest.addResult(" (empty)");
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/extensions/extensions-events-expected.txt b/third_party/WebKit/LayoutTests/http/tests/inspector/extensions/extensions-events-expected.txt index 59f7fdb..76b95a9 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/extensions/extensions-events-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/extensions/extensions-events-expected.txt
@@ -2,6 +2,8 @@ Started extension. Running tests... +RUNNING TEST: extension_testElementsOnSelectionChanged +onSelectionChanged fired RUNNING TEST: extension_testOnNavigated Page reloaded. Page reloaded. @@ -9,8 +11,24 @@ Navigated to: extensions-events.html RUNNING TEST: extension_testOnRequestFinished onRequestFinished fired -RUNNING TEST: extension_testOnSelectionChanged -onSelectionChanged fired +RUNNING TEST: extension_testSourcesOnSelectionChangedShowFile +sources onSelectionChanged fired, selectionInfo: +{ + endColumn : 0 + endLine : 0 + startColumn : 0 + startLine : 0 + url : .../test-script.js +} +RUNNING TEST: extension_testSourcesOnSelectionChangedShowFileAndLine +sources onSelectionChanged fired, selectionInfo: +{ + endColumn : 0 + endLine : 2 + startColumn : 0 + startLine : 2 + url : .../test-script.js +} RUNNING TEST: extension_testViewShowHide Got onShown event for sidebar Sidebar shown, location: .../extension-sidebar.html
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/extensions/extensions-events.html b/third_party/WebKit/LayoutTests/http/tests/inspector/extensions/extensions-events.html index 3747e80c..7b42539 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector/extensions/extensions-events.html +++ b/third_party/WebKit/LayoutTests/http/tests/inspector/extensions/extensions-events.html
@@ -3,7 +3,7 @@ <script src="../inspector-test.js"></script> <script src="../extensions-test.js"></script> <script src="../debugger-test.js"></script> -<script src="../../../inspector/sources/debugger/resources/edit-me.js"></script> +<script src="resources/test-script.js"></script> <script type="text/javascript"> function initialize_extensionsSidebarTest() @@ -28,7 +28,7 @@ evaluateOnFrontend("InspectorTest.expandSidebar(reply);", callback); } -function extension_testOnSelectionChanged(nextTest) +function extension_testElementsOnSelectionChanged(nextTest) { function onSelectionChanged() { @@ -40,6 +40,36 @@ webInspector.inspectedWindow.eval("inspect(document.body.children[0]), 0"); } +function extension_testSourcesOnSelectionChangedShowFile(nextTest) +{ + function onSelectionChanged(selectionInfo) + { + webInspector.panels.sources.onSelectionChanged.removeListener(onSelectionChanged); + output("sources onSelectionChanged fired, selectionInfo:"); + dumpObject(selectionInfo, {url: "url"}); + nextTest(); + } + webInspector.panels.sources.onSelectionChanged.addListener(onSelectionChanged); + evaluateOnFrontend("InspectorTest.showScriptSource(\"test-script.js\")"); +} + +function extension_testSourcesOnSelectionChangedShowFileAndLine(nextTest) +{ + webInspector.inspectedWindow.eval("location.href", function(inspectedPageURL) { + function onSelectionChanged(selectionInfo) + { + webInspector.panels.sources.onSelectionChanged.removeListener(onSelectionChanged); + output("sources onSelectionChanged fired, selectionInfo:"); + dumpObject(selectionInfo, {url: "url"}); + nextTest(); + } + webInspector.panels.sources.onSelectionChanged.addListener(onSelectionChanged); + + var basePath = inspectedPageURL.replace(/\/[^/]*$/, "/"); + webInspector.panels.openResource(basePath + "resources/test-script.js", 2); + }); +} + function extension_testOnRequestFinished(nextTest) { function onRequestFinished()
diff --git a/third_party/WebKit/LayoutTests/http/tests/resources/permissions-helper.js b/third_party/WebKit/LayoutTests/http/tests/resources/permissions-helper.js index 286ff12..f3bc68e 100644 --- a/third_party/WebKit/LayoutTests/http/tests/resources/permissions-helper.js +++ b/third_party/WebKit/LayoutTests/http/tests/resources/permissions-helper.js
@@ -25,8 +25,6 @@ return {name: "geolocation"}; case "background-sync": return {name: "background-sync"}; - case "accessibility-events": - return {name: "accessibility-events"}; default: throw "Invalid permission name provided"; }
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/editor-test.js b/third_party/WebKit/LayoutTests/inspector/editor/editor-test.js deleted file mode 100644 index b0cc7eb..0000000 --- a/third_party/WebKit/LayoutTests/inspector/editor/editor-test.js +++ /dev/null
@@ -1,209 +0,0 @@ -function initialize_EditorTests() -{ - -InspectorTest.createTestEditor = function(clientHeight, textEditorDelegate) -{ - var textEditor = new SourceFrame.SourcesTextEditor(textEditorDelegate || new SourceFrame.SourcesTextEditorDelegate()); - clientHeight = clientHeight || 100; - textEditor.element.style.height = clientHeight + "px"; - textEditor.element.style.flex = "none"; - textEditor.show(UI.inspectorView.element); - return textEditor; -}; - -function textWithSelection(text, selections) -{ - if (!selections.length) - return text; - - function lineWithCursor(line, column, cursorChar) - { - return line.substring(0, column) + cursorChar + line.substring(column); - } - - var lines = text.split("\n"); - selections.sort(TextUtils.TextRange.comparator); - for (var i = selections.length - 1; i >= 0; --i) { - var selection = selections[i]; - selection = selection.normalize(); - var endCursorChar = selection.isEmpty() ? "|" : "<"; - lines[selection.endLine] = lineWithCursor(lines[selection.endLine], selection.endColumn, endCursorChar); - if (!selection.isEmpty()) { - lines[selection.startLine] = lineWithCursor(lines[selection.startLine], selection.startColumn, ">"); - } - } - return lines.join("\n"); -} - -InspectorTest.dumpTextWithSelection = function(textEditor, dumpWhiteSpaces) -{ - var text = textWithSelection(textEditor.text(), textEditor.selections()); - if (dumpWhiteSpaces) - text = text.replace(/ /g, "."); - InspectorTest.addResult(text); -} - -InspectorTest.setLineSelections = function(editor, selections) -{ - var coords = []; - for (var i = 0; i < selections.length; ++i) { - var selection = selections[i]; - if (typeof selection.column === "number") { - selection.from = selection.column; - selection.to = selection.column; - } - coords.push(new TextUtils.TextRange(selection.line, selection.from, selection.line, selection.to)); - } - editor.setSelections(coords); -} - -InspectorTest.typeIn = function(editor, typeText, callback) -{ - callback = callback || new Function(); - var noop = new Function(); - for(var charIndex = 0; charIndex < typeText.length; ++charIndex) { - // As soon as the last key event was processed, the whole text was processed. - var iterationCallback = charIndex + 1 === typeText.length ? callback : noop; - switch (typeText[charIndex]) { - case "\n": - InspectorTest.fakeKeyEvent(editor, "Enter", null, iterationCallback); - break; - case "L": - InspectorTest.fakeKeyEvent(editor, "ArrowLeft", null, iterationCallback); - break; - case "R": - InspectorTest.fakeKeyEvent(editor, "ArrowRight", null, iterationCallback); - break; - case "U": - InspectorTest.fakeKeyEvent(editor, "ArrowUp", null, iterationCallback); - break; - case "D": - InspectorTest.fakeKeyEvent(editor, "ArrowDown", null, iterationCallback); - break; - default: - InspectorTest.fakeKeyEvent(editor, typeText[charIndex], null, iterationCallback); - } - } -} - -var eventCodes = { - Enter: 13, - Home: 36, - ArrowLeft: 37, - ArrowUp: 38, - ArrowRight: 39, - ArrowDown: 40 -}; - -function createCodeMirrorFakeEvent(editor, eventType, code, charCode, modifiers) -{ - function eventPreventDefault() - { - this._handled = true; - } - var event = { - _handled: false, - type: eventType, - keyCode: code, - charCode: charCode, - preventDefault: eventPreventDefault, - stopPropagation: function(){}, - target: editor._codeMirror.display.input.textarea - }; - if (modifiers) { - for (var i = 0; i < modifiers.length; ++i) - event[modifiers[i]] = true; - } - return event; -} - -function fakeCodeMirrorKeyEvent(editor, eventType, code, charCode, modifiers) -{ - var event = createCodeMirrorFakeEvent(editor, eventType, code, charCode, modifiers); - switch(eventType) { - case "keydown": - editor._codeMirror.triggerOnKeyDown(event); - break; - case "keypress": - editor._codeMirror.triggerOnKeyPress(event); - break; - case "keyup": - editor._codeMirror.triggerOnKeyUp(event); - break; - default: - throw new Error("Unknown KeyEvent type"); - } - return event._handled; -} - -function fakeCodeMirrorInputEvent(editor, character) -{ - if (typeof character === "string") - editor._codeMirror.display.input.textarea.value += character; -} - -InspectorTest.fakeKeyEvent = function(editor, originalCode, modifiers, callback) -{ - modifiers = modifiers || []; - var code; - var charCode; - if (originalCode === "'") { - code = 222; - charCode = 0; - } else if (originalCode === "\"") { - code = 222; - modifiers.push("shiftKey"); - charCode = 34; - } else if (originalCode === "(") { - code = "9".charCodeAt(0); - modifiers.push("shiftKey"); - charCode = originalCode.charCodeAt(0); - } - var code = code || eventCodes[originalCode] || originalCode; - if (typeof code === "string") - code = code.charCodeAt(0); - if (fakeCodeMirrorKeyEvent(editor, "keydown", code, charCode, modifiers)) { - callback(); - return; - } - if (fakeCodeMirrorKeyEvent(editor, "keypress", code, charCode, modifiers)) { - callback(); - return; - } - fakeCodeMirrorInputEvent(editor, originalCode); - fakeCodeMirrorKeyEvent(editor, "keyup", code, charCode, modifiers); - - function callbackWrapper() - { - editor._codeMirror.off("inputRead", callbackWrapper); - callback(); - } - editor._codeMirror.on("inputRead", callbackWrapper); -} - -InspectorTest.dumpSelectionStats = function(textEditor) -{ - var listHashMap = {}; - var sortedKeys = []; - var selections = textEditor.selections(); - for (var i = 0; i < selections.length; ++i) { - var selection = selections[i]; - var text = textEditor.text(selection); - if (!listHashMap[text]) { - listHashMap[text] = 1; - sortedKeys.push(text); - } else { - ++listHashMap[text]; - } - } - for (var i = 0; i < sortedKeys.length; ++i) { - var keyName = sortedKeys[i]; - if (!keyName.length) - keyName = "<Empty string>"; - else - keyName = "'" + keyName + "'"; - InspectorTest.addResult(keyName + ": " + listHashMap[sortedKeys[i]]); - } -} - -}
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/php-highlighter.html b/third_party/WebKit/LayoutTests/inspector/editor/php-highlighter.html deleted file mode 100644 index 7d7af252..0000000 --- a/third_party/WebKit/LayoutTests/inspector/editor/php-highlighter.html +++ /dev/null
@@ -1,25 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="editor-test.js"></script> -<script> -function test() { - var mimeType = 'text/x-php'; - var textEditor = SourcesTestRunner.createTestEditor(); - TestRunner.addSnifferPromise(SourceFrame.SourcesTextEditor.prototype, 'rewriteMimeType').then(onModesLoaded); - textEditor.setMimeType(mimeType); - function onModesLoaded() { - TestRunner.addResult('Mode loaded: ' + !!CodeMirror.mimeModes[mimeType]); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that php highlighter loads successfully. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-auto-whitespace-removing.html b/third_party/WebKit/LayoutTests/inspector/editor/text-editor-auto-whitespace-removing.html deleted file mode 100644 index 420246ec..0000000 --- a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-auto-whitespace-removing.html +++ /dev/null
@@ -1,94 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="editor-test.js"></script> -<script> -function codeSnippet() { - return document.getElementById("codeSnippet").textContent; -} - -function test() { - var textEditor = SourcesTestRunner.createTestEditor(); - textEditor.setMimeType('text/javascript'); - textEditor.setReadOnly(false); - textEditor.element.focus(); - TestRunner.evaluateInPage('codeSnippet();', onCodeSnippet); - var codeSnippetText; - - function onCodeSnippet(result) { - codeSnippetText = result.value; - TestRunner.runTestSuite(testSuite); - } - - function dumpAndNext(next) { - function innerDumpAndNext() { - SourcesTestRunner.dumpTextWithSelection(textEditor, true); - next(); - } - return innerDumpAndNext; - } - - function doubleEnter(next) { - function onFirstEnter() { - SourcesTestRunner.fakeKeyEvent(textEditor, 'Enter', [], dumpAndNext(next)); - } - - SourcesTestRunner.fakeKeyEvent(textEditor, 'Enter', [], onFirstEnter); - } - - var testSuite = [ - function testCollapsedBlock(next) { - textEditor.setText(codeSnippetText); - SourcesTestRunner.setLineSelections(textEditor, [{line: 0, column: 12}]); - doubleEnter(next); - }, - - function testOpenCurlyBrace(next) { - textEditor.setText(codeSnippetText); - SourcesTestRunner.setLineSelections(textEditor, [{line: 1, column: 17}]); - doubleEnter(next); - }, - - function testSmartIndent(next) { - textEditor.setText(codeSnippetText); - SourcesTestRunner.setLineSelections(textEditor, [{line: 1, column: 2}]); - doubleEnter(next); - }, - - function testMultiCursorSelection(next) { - textEditor.setText(codeSnippetText); - SourcesTestRunner.setLineSelections(textEditor, [{line: 1, column: 2}, {line: 1, column: 4}]); - doubleEnter(next); - }, - - function testEditedAutoIndent(next) { - textEditor.setText(codeSnippetText); - SourcesTestRunner.setLineSelections(textEditor, [{line: 1, column: 17}]); - SourcesTestRunner.fakeKeyEvent(textEditor, 'Enter', [], onEnter); - - function onEnter() { - SourcesTestRunner.fakeKeyEvent(textEditor, 'W', [], onEditedText); - } - - function onEditedText() { - SourcesTestRunner.fakeKeyEvent(textEditor, 'Enter', [], dumpAndNext(next)); - } - }, - ]; -} - -</script> -</head> - -<body onload="runTest();"> -<p> -This test verifies that auto-appended spaces are removed on consequent enters. -</p> - -<pre id="codeSnippet"> -function (){} - if (a == b) { -</pre> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-block-indent.html b/third_party/WebKit/LayoutTests/inspector/editor/text-editor-block-indent.html deleted file mode 100644 index 3935bb8..0000000 --- a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-block-indent.html +++ /dev/null
@@ -1,89 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="editor-test.js"></script> -<script> -function codeSnippet() { - return document.getElementById("codeSnippet").textContent; -} - -function test() { - var textEditor = SourcesTestRunner.createTestEditor(); - textEditor.setMimeType('text/javascript'); - textEditor.setReadOnly(false); - textEditor.element.focus(); - TestRunner.evaluateInPage('codeSnippet();', onCodeSnippet); - var codeSnippetText; - - function onCodeSnippet(result) { - codeSnippetText = result.value; - TestRunner.runTestSuite(testSuite); - } - - function dumpAndNext(next) { - function innerDumpAndNext() { - SourcesTestRunner.dumpTextWithSelection(textEditor, true); - next(); - } - return innerDumpAndNext; - } - - var testSuite = [ - function testSimpleCollapsedBlockExpanding(next) { - textEditor.setText(codeSnippetText); - SourcesTestRunner.setLineSelections(textEditor, [{line: 0, column: 1}]); - SourcesTestRunner.fakeKeyEvent(textEditor, 'Enter', [], dumpAndNext(next)); - }, - - function testMulticursorCollapsedBlockExpanding(next) { - textEditor.setText(codeSnippetText); - SourcesTestRunner.setLineSelections( - textEditor, [{line: 0, column: 1}, {line: 0, column: 4}, {line: 1, column: 3}]); - SourcesTestRunner.fakeKeyEvent(textEditor, 'Enter', [], dumpAndNext(next)); - }, - - function testMulticursorCollapsedBlockNotExpanding(next) { - textEditor.setText(codeSnippetText); - SourcesTestRunner.setLineSelections(textEditor, [{line: 0, column: 1}, {line: 1, column: 2}]); - SourcesTestRunner.fakeKeyEvent(textEditor, 'Enter', [], dumpAndNext(next)); - }, - - function testSingleCursorClosingBracketIndent(next) { - textEditor.setText(codeSnippetText); - SourcesTestRunner.setLineSelections(textEditor, [{line: 3, column: 0}]); - SourcesTestRunner.fakeKeyEvent(textEditor, '}', [], dumpAndNext(next)); - }, - - function testMulticursorClosingBracketIndent(next) { - textEditor.setText(codeSnippetText); - SourcesTestRunner.setLineSelections(textEditor, [{line: 3, column: 5}, {line: 5, column: 9}]); - SourcesTestRunner.fakeKeyEvent(textEditor, '}', [], dumpAndNext(next)); - }, - - function testMulticursorClosingBracketIndentNotExecuted(next) { - textEditor.setText(codeSnippetText); - SourcesTestRunner.setLineSelections(textEditor, [{line: 3, column: 5}, {line: 4, column: 5}]); - SourcesTestRunner.fakeKeyEvent(textEditor, '}', [], dumpAndNext(next)); - } - ]; -} - -</script> -</head> - -<body onload="runTest();"> -<p> -This test verifies applied indentation whenever you hit enter in "{|}" or type in "}" while inside opened block. -</p> - -<pre id="codeSnippet"> -{} {} - {} - { - - { - -</pre> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-char-to-coordinates.html b/third_party/WebKit/LayoutTests/inspector/editor/text-editor-char-to-coordinates.html deleted file mode 100644 index a63c21b1..0000000 --- a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-char-to-coordinates.html +++ /dev/null
@@ -1,57 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="editor-test.js"></script> -<script> - -function test() { - var text = ['function foo(a, b) {', ' var f = /*.[a]/.test(a);', ' return f;']; - var textEditor = SourcesTestRunner.createTestEditor(); - textEditor.setText(text.join('\n')); - - TestRunner.runTestSuite([ - function testCoordinatesToCursorPositionOuter(next) { - TestRunner.addResult('Request char at (-1000, -1000)'); - TestRunner.addResult('Result:' + JSON.stringify(textEditor.coordinatesToCursorPosition(-1000, -1000))); - next(); - }, - - function testTextToCoordinatesCornerCases(next) { - TestRunner.addResult('Request (-1, 0):' + JSON.stringify(textEditor.cursorPositionToCoordinates(-1, 0))); - TestRunner.addResult('Request (100, 0):' + JSON.stringify(textEditor.cursorPositionToCoordinates(100, 0))); - TestRunner.addResult('Request (0, -1):' + JSON.stringify(textEditor.cursorPositionToCoordinates(0, -1))); - TestRunner.addResult('Request (0, 100):' + JSON.stringify(textEditor.cursorPositionToCoordinates(0, 100))); - TestRunner.addResult('Request (-100, -1100):' + JSON.stringify(textEditor.cursorPositionToCoordinates(0, 100))); - next(); - }, - - function testInverseRelationTextToCoordinates(next) { - for (var i = 0; i < textEditor.linesCount; ++i) { - var line = textEditor.line(i); - TestRunner.addResult('Testing line \'' + line + '\''); - for (var j = 0; j < textEditor.length; ++j) { - var xy = textEditor.cursorPositionToCoordinates(i, j); - if (!xy) { - TestRunner.addResult('Failed inversion for line=' + i + ' column=' + j); - continue; - } - - var range = textEditor.coordinatesToCursorPosition(xy.x, xy.y); - if (range.startLine !== i || range.startColumn !== j) - TestRunner.addResult('Failed inversion for line=' + i + ' column=' + j); - } - } - next(); - }, - ]); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Test editor cursorPositionToCoordinates and coordinatesToCursorPosition API -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-ctrl-d-1.html b/third_party/WebKit/LayoutTests/inspector/editor/text-editor-ctrl-d-1.html deleted file mode 100644 index fd5487fa..0000000 --- a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-ctrl-d-1.html +++ /dev/null
@@ -1,136 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="editor-test.js"></script> -<script> -function codeSnippet() { - return document.getElementById("codeSnippet").textContent; -} - -function test() { - var textEditor = SourcesTestRunner.createTestEditor(); - textEditor.setMimeType('text/javascript'); - textEditor.setReadOnly(false); - textEditor.element.focus(); - TestRunner.evaluateInPage('codeSnippet();', onCodeSnippet); - - function onCodeSnippet(result) { - var codeLines = result.value; - textEditor.setText(codeLines); - TestRunner.runTestSuite(testSuite); - } - - function nextOccurrence(times) { - for (var i = 0; i < times; ++i) - textEditor._selectNextOccurrenceController.selectNextOccurrence(); - } - - function undoLastSelection() { - textEditor._selectNextOccurrenceController.undoLastSelection(); - } - - function lineSelection(line, from, to) { - if (typeof to !== 'number') - to = from; - SourcesTestRunner.setLineSelections(textEditor, [{line: line, from: from, to: to}]); - } - - var testSuite = [ - function testNextFullWord(next) { - lineSelection(0, 3); - nextOccurrence(3); - SourcesTestRunner.dumpSelectionStats(textEditor); - next(); - }, - - function testCaseSensitive(next) { - lineSelection(0, 9, 13); - nextOccurrence(3); - SourcesTestRunner.dumpSelectionStats(textEditor); - next(); - }, - - function testOccurrencesOnTheSameLine(next) { - lineSelection(2, 13); - nextOccurrence(3); - SourcesTestRunner.dumpSelectionStats(textEditor); - next(); - }, - - function testUndoLastAddedSelection(next) { - lineSelection(2, 13); - nextOccurrence(3); - undoLastSelection(); - SourcesTestRunner.dumpSelectionStats(textEditor); - next(); - }, - - function testUndoSelectionPreservesFullWordState(next) { - lineSelection(2, 51); - nextOccurrence(3); - undoLastSelection(); - nextOccurrence(1); - SourcesTestRunner.dumpSelectionStats(textEditor); - var lastSelection = textEditor.selections().pop(); - TestRunner.addResult('Last selection: ' + lastSelection.toString()); - next(); - }, - - function testUndoSelectionPreservesPartialSelection(next) { - lineSelection(2, 48, 52); - nextOccurrence(2); - undoLastSelection(); - nextOccurrence(1); - SourcesTestRunner.dumpSelectionStats(textEditor); - var lastSelection = textEditor.selections().pop(); - TestRunner.addResult('Last selection: ' + lastSelection.toString()); - next(); - }, - - function testTwoCloseWords(next) { - lineSelection(17, 45); - nextOccurrence(5); - SourcesTestRunner.dumpSelectionStats(textEditor); - next(); - }, - ]; -} - -</script> -</head> - -<body onload="runTest();"> -<p> -This test verifies Ctrl-D functionality, which selects next occurrence of word. -</p> - -<pre id="codeSnippet"> -function wordData() { - return { - original: $(".entry.original > .input").text(), - translation: $(".entry.translation > .input").text(), - tags: $(".active-tags > .tagcloud > .tag").toArray().map(function(value) { return value.textContent; }) - }; -} - -function submitWord(url) { - var stub = new App.Stub($(".content")); - $.post(url, wordData()) - .done(function() { - var callback = $("meta[data-callback]").attr("data-callback"); - if (callback) { - window.location = callback; - } else { - stub.success(); - $(".entry.original > .input").text("").focus(); - $(".entry.translation > .input").text(""); - } - }) - .fail(function(obj, err, errDescr) { - stub.failure("Error: " + errDescr); - }) -} -</pre> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-ctrl-d-2.html b/third_party/WebKit/LayoutTests/inspector/editor/text-editor-ctrl-d-2.html deleted file mode 100644 index 7387768..0000000 --- a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-ctrl-d-2.html +++ /dev/null
@@ -1,137 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="editor-test.js"></script> -<script> -function codeSnippet() { - return document.getElementById("codeSnippet").textContent; -} - -function test() { - var textEditor = SourcesTestRunner.createTestEditor(); - textEditor.setMimeType('text/javascript'); - textEditor.setReadOnly(false); - textEditor.element.focus(); - TestRunner.evaluateInPage('codeSnippet();', onCodeSnippet); - - function onCodeSnippet(result) { - var codeLines = result.value; - textEditor.setText(codeLines); - TestRunner.runTestSuite(testSuite); - } - - function nextOccurrence(times) { - for (var i = 0; i < times; ++i) - textEditor._selectNextOccurrenceController.selectNextOccurrence(); - } - - function undoLastSelection() { - textEditor._selectNextOccurrenceController.undoLastSelection(); - } - - function lineSelection(line, from, to) { - if (typeof to !== 'number') - to = from; - SourcesTestRunner.setLineSelections(textEditor, [{line: line, from: from, to: to}]); - } - - var testSuite = [ - function testCursorInTheWordStart(next) { - lineSelection(8, 0); - nextOccurrence(1); - SourcesTestRunner.dumpSelectionStats(textEditor); - next(); - }, - - function testCursorInTheWordEnd(next) { - lineSelection(8, 8); - nextOccurrence(1); - SourcesTestRunner.dumpSelectionStats(textEditor); - next(); - }, - - function testNonWordSelection(next) { - lineSelection(18, 12, 14); - nextOccurrence(8); - SourcesTestRunner.dumpSelectionStats(textEditor); - next(); - }, - - function testNonWordSelection2(next) { - lineSelection(17, 30, 33); - nextOccurrence(8); - SourcesTestRunner.dumpSelectionStats(textEditor); - next(); - }, - - function testNonWordSelection3(next) { - SourcesTestRunner.setLineSelections(textEditor, [ - {line: 14, from: 15, to: 25}, - {line: 16, column: 21}, - {line: 17, from: 42, to: 47}, - ]); - var selections = textEditor.selections(); - nextOccurrence(3); - SourcesTestRunner.dumpSelectionStats(textEditor); - next(); - }, - - function testNonWordSelection4(next) { - SourcesTestRunner.setLineSelections(textEditor, [ - {line: 14, from: 15, to: 25}, - {line: 16, from: 21, to: 23}, - {line: 17, from: 42, to: 47}, - ]); - var selections = textEditor.selections(); - nextOccurrence(3); - SourcesTestRunner.dumpSelectionStats(textEditor); - next(); - }, - - function testTriggerWordSearchInMixedCase(next) { - SourcesTestRunner.setLineSelections(textEditor, [{line: 9, from: 10, to: 25}, {line: 14, column: 33}]); - nextOccurrence(5); - SourcesTestRunner.dumpSelectionStats(textEditor); - next(); - }, - ]; -} - -</script> -</head> - -<body onload="runTest();"> -<p> -This test verifies Ctrl-D functionality, which selects next occurrence of word. -</p> - -<pre id="codeSnippet"> -function wordData() { - return { - original: $(".entry.original > .input").text(), - translation: $(".entry.translation > .input").text(), - tags: $(".active-tags > .tagcloud > .tag").toArray().map(function(value) { return value.textContent; }) - }; -} - -function submitWord(url) { - var stub = new App.Stub($(".content")); - $.post(url, wordData()) - .done(function() { - var callback = $("meta[data-callback]").attr("data-callback"); - if (callback) { - window.location = callback; - } else { - stub.success(); - $(".entry.original > .input").text("").focus(); - $(".entry.translation > .input").text(""); - } - }) - .fail(function(obj, err, errDescr) { - stub.failure("Error: " + errDescr); - }) -} -</pre> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-enter-behaviour.html b/third_party/WebKit/LayoutTests/inspector/editor/text-editor-enter-behaviour.html deleted file mode 100644 index d745fc2..0000000 --- a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-enter-behaviour.html +++ /dev/null
@@ -1,118 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="editor-test.js"></script> -<script> -function codeSnippet() { - return document.getElementById("codeSnippet").textContent; -} - -function test() { - // clang-format off -function testFunction() -{ - var a = 100; - var b = 200; - var c = (a + b) / 2; - console.log(a); - console.log(b); - console.log(c); - if (a > b) { - console.log(a); - } - return c; -} - // clang-format on - - var textEditor = SourcesTestRunner.createTestEditor(); - textEditor.setMimeType('text/javascript'); - textEditor.setReadOnly(false); - textEditor.element.focus(); - - TestRunner.runTestSuite([ - function testEnterInTheLineEnd(next) { - textEditor.setText(testFunction.toString()); - var line = textEditor.line(2); - textEditor.setSelection(TextUtils.TextRange.createFromLocation(2, line.length)); - hitEnterDumpTextAndNext(next); - }, - - function testEnterAfterOpenCurlyBrace(next) { - textEditor.setText(testFunction.toString()); - var line = textEditor.line(1); - textEditor.setSelection(TextUtils.TextRange.createFromLocation(1, line.length)); - hitEnterDumpTextAndNext(next); - }, - - function testEnterInTheMiddleOfLine(next) { - textEditor.setText(testFunction.toString()); - var line = textEditor.line(2); - textEditor.setSelection(TextUtils.TextRange.createFromLocation(2, line.length / 2)); - hitEnterDumpTextAndNext(next); - }, - - function testEnterInTheBeginningOfTheLine(next) { - textEditor.setText(testFunction.toString()); - textEditor.setSelection(TextUtils.TextRange.createFromLocation(2, 0)); - hitEnterDumpTextAndNext(next); - }, - - function testEnterWithTheSelection(next) { - textEditor.setText(testFunction.toString()); - textEditor.setSelection(new TextUtils.TextRange(2, 2, 2, 4)); - hitEnterDumpTextAndNext(next); - }, - - function testEnterWithReversedSelection(next) { - textEditor.setText(testFunction.toString()); - textEditor.setSelection(new TextUtils.TextRange(2, 4, 2, 2)); - hitEnterDumpTextAndNext(next); - }, - - function testEnterWithTheMultiLineSelection(next) { - textEditor.setText(testFunction.toString()); - textEditor.setSelection(new TextUtils.TextRange(2, 0, 8, 4)); - hitEnterDumpTextAndNext(next); - }, - - function testEnterWithFullLineSelection(next) { - textEditor.setText(testFunction.toString()); - textEditor.setSelection(new TextUtils.TextRange(2, 0, 3, 0)); - hitEnterDumpTextAndNext(next); - }, - - function testEnterBeforeOpenBrace(next) { - textEditor.setText(testFunction.toString()); - textEditor.setSelection(new TextUtils.TextRange(8, 0, 8, 0)); - hitEnterDumpTextAndNext(next); - }, - - function testEnterMultiCursor(next) { - textEditor.setText(testFunction.toString()); - SourcesTestRunner.setLineSelections(textEditor, [ - {line: 3, column: 0}, - {line: 5, column: 1}, - {line: 6, column: 2}, - ]); - hitEnterDumpTextAndNext(next); - } - ]); - - function hitEnterDumpTextAndNext(next) { - SourcesTestRunner.fakeKeyEvent(textEditor, 'Enter', null, step2); - function step2() { - SourcesTestRunner.dumpTextWithSelection(textEditor, true); - next(); - } - } -} - -</script> -</head> - -<body onload="runTest();"> -<p> -This test checks text editor enter behaviour. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-formatter.html b/third_party/WebKit/LayoutTests/inspector/editor/text-editor-formatter.html deleted file mode 100644 index f10c626..0000000 --- a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-formatter.html +++ /dev/null
@@ -1,60 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="editor-test.js"></script> -<script> -function codeSnippet() { - return document.getElementById("codeSnippet").textContent; -} - -function test() { - var textEditor = SourcesTestRunner.createTestEditor(); - textEditor.setMimeType('text/javascript'); - textEditor.setReadOnly(false); - textEditor.element.focus(); - - function step2(result) { - var codeLines = result.value; - SourcesTestRunner.typeIn(textEditor, codeLines, step3); - } - - function step3() { - TestRunner.addResult('============ editor contents start ============'); - TestRunner.addResult(textEditor.text().replace(/ /g, '.')); - TestRunner.addResult('============ editor contents end ============'); - TestRunner.completeTest(); - } - - TestRunner.evaluateInPage('codeSnippet();', step2); -} - -</script> -</head> - -<body onload="runTest();"> -<p> -This test checks text editor javascript formatting. -</p> - -<pre id="codeSnippet">/** -* Multi-line comment -* -*/ -function foo(n) { -// one-line comment -function bar() { -return 42;D - -var sum = 0; -for (var i = 0; i < n; ++i) { -for (var j = 0; j < n; ++j) { -sum += i + j;DD - - -if (sum > 1000) { -while (sum > 0) { ---sum;DDD -</pre> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-goto-matching-bracket.html b/third_party/WebKit/LayoutTests/inspector/editor/text-editor-goto-matching-bracket.html deleted file mode 100644 index 068052f..0000000 --- a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-goto-matching-bracket.html +++ /dev/null
@@ -1,81 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="editor-test.js"></script> -<script> -function codeSnippet() { - return document.getElementById("codeSnippet").textContent; -} - -function test() { - var textEditor = SourcesTestRunner.createTestEditor(); - textEditor.setMimeType('text/javascript'); - textEditor.setReadOnly(false); - textEditor.element.focus(); - TestRunner.evaluateInPage('codeSnippet();', onCodeSnippet); - var codeSnippetText; - - function onCodeSnippet(result) { - codeSnippetText = result.value; - TestRunner.runTestSuite(testSuite); - } - - function dumpAndNext(next) { - function innerDumpAndNext() { - SourcesTestRunner.dumpTextWithSelection(textEditor, true); - next(); - } - return innerDumpAndNext; - } - - var testSuite = [ - function testSingleCursorFromOutsideOpenBracket(next) { - textEditor.setText(codeSnippetText); - SourcesTestRunner.setLineSelections(textEditor, [{line: 0, column: 16}]); - SourcesTestRunner.fakeKeyEvent(textEditor, 'M', ['ctrlKey'], dumpAndNext(next)); - }, - - function testSingleCursorFromInsideOpenBracket(next) { - textEditor.setText(codeSnippetText); - SourcesTestRunner.setLineSelections(textEditor, [{line: 0, column: 17}]); - SourcesTestRunner.fakeKeyEvent(textEditor, 'M', ['ctrlKey'], dumpAndNext(next)); - }, - - function testSingleCursorFromOutsideCloseBracket(next) { - textEditor.setText(codeSnippetText); - SourcesTestRunner.setLineSelections(textEditor, [{line: 3, column: 1}]); - SourcesTestRunner.fakeKeyEvent(textEditor, 'M', ['ctrlKey'], dumpAndNext(next)); - }, - - function testSingleCursorFromInsideCloseBracket(next) { - textEditor.setText(codeSnippetText); - SourcesTestRunner.setLineSelections(textEditor, [{line: 3, column: 0}]); - SourcesTestRunner.fakeKeyEvent(textEditor, 'M', ['ctrlKey'], dumpAndNext(next)); - }, - - function testMulticursor(next) { - textEditor.setText(codeSnippetText); - SourcesTestRunner.setLineSelections( - textEditor, [{line: 0, column: 16}, {line: 0, column: 21}, {line: 3, column: 0}, {line: 2, column: 10}]); - SourcesTestRunner.fakeKeyEvent(textEditor, 'M', ['ctrlKey'], dumpAndNext(next)); - }, - ]; -} - -</script> -</head> - -<body onload="runTest();"> -<p> -This test verifies editor's "Goto Matching Bracket" behavior, which is triggered via Ctrl-M shortcut. -</p> - -<pre id="codeSnippet"> -function MyClass(a, b) -{ - console.log("Test"); -} -</pre> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-home-button.html b/third_party/WebKit/LayoutTests/inspector/editor/text-editor-home-button.html deleted file mode 100644 index 873957c..0000000 --- a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-home-button.html +++ /dev/null
@@ -1,99 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="editor-test.js"></script> -<script> - -function test() { - // clang-format off -function foo() -{ - return 42; -} - // clang-format on - var textEditor = SourcesTestRunner.createTestEditor(); - textEditor.setMimeType('text/javascript'); - textEditor.setReadOnly(false); - textEditor.element.focus(); - - textEditor.setText(foo.toString()); - - TestRunner.addResult(textEditor.text()); - - function homeButton(shift, callback) { - var key = Host.isMac() ? 'ArrowLeft' : 'Home'; - var modifiers = Host.isMac() ? ['metaKey'] : []; - if (shift) - modifiers.push('shiftKey'); - SourcesTestRunner.fakeKeyEvent(textEditor, key, modifiers, callback); - } - - function hitHomeButton(shift, times, callback) { - function hitButtonCallback() { - --times; - SourcesTestRunner.dumpTextWithSelection(textEditor); - if (times > 0) { - homeButton(shift, hitButtonCallback); - return; - } - callback(); - } - homeButton(shift, hitButtonCallback); - } - - TestRunner.runTestSuite([ - function testFirstNonBlankCharacter(next) { - var selection = TextUtils.TextRange.createFromLocation(2, 8); - textEditor.setSelection(selection); - SourcesTestRunner.dumpTextWithSelection(textEditor); - hitHomeButton(false, 1, next); - }, - - function testFirstNonBlankCharacterFromWhitespace(next) { - var selection = TextUtils.TextRange.createFromLocation(2, 2); - textEditor.setSelection(selection); - SourcesTestRunner.dumpTextWithSelection(textEditor); - hitHomeButton(false, 1, next); - }, - - function testHomeButtonToggling(next) { - var selection = TextUtils.TextRange.createFromLocation(2, 2); - textEditor.setSelection(selection); - SourcesTestRunner.dumpTextWithSelection(textEditor); - hitHomeButton(false, 3, next); - }, - - function testHomeButtonDoesNotChangeCursor(next) { - var selection = TextUtils.TextRange.createFromLocation(0, 2); - textEditor.setSelection(selection); - SourcesTestRunner.dumpTextWithSelection(textEditor); - hitHomeButton(false, 2, next); - }, - - function testHomeButtonWithShift(next) { - var selection = new TextUtils.TextRange(0, 0, 2, 8); - textEditor.setSelection(selection); - SourcesTestRunner.dumpTextWithSelection(textEditor); - hitHomeButton(true, 3, next); - }, - - function testHomeButtonWithShiftInversed(next) { - var selection = new TextUtils.TextRange(3, 1, 2, 8); - textEditor.setSelection(selection); - SourcesTestRunner.dumpTextWithSelection(textEditor); - hitHomeButton(true, 3, next); - } - ]); -} - -</script> -</head> - -<body onload="runTest();"> -<p> -This test verifies that home button triggers selection between first symbol of the line -and first non-blank symbol of the line. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-indent-autodetection.html b/third_party/WebKit/LayoutTests/inspector/editor/text-editor-indent-autodetection.html deleted file mode 100644 index 70e2f35..0000000 --- a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-indent-autodetection.html +++ /dev/null
@@ -1,155 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="editor-test.js"></script> -<script> -function codeSnippet(name) { - return document.getElementById(name).textContent; -} - -function codeSnippetsNumber() { - return document.getElementsByClassName("test").length; -} - -function test() { - var textEditor = SourcesTestRunner.createTestEditor(); - textEditor.setMimeType('text/javascript'); - textEditor.setReadOnly(false); - textEditor.element.focus(); - Common.settingForTest('textEditorAutoDetectIndent').set(true); - function genericTest(snippetName, next) { - var command = 'codeSnippet(\'' + snippetName + '\');'; - TestRunner.evaluateInPage(command, step2); - function step2(result) { - textEditor.setText(result.value); - var indent = textEditor.indent(); - var description = indent === TextUtils.TextUtils.Indent.TabCharacter ? 'Tab' : indent.length + ' spaces'; - TestRunner.addResult('Autodetected indentation for ' + snippetName + ': ' + description); - next(); - } - } - - function onTestNumberReceived(result) { - var testSuite = []; - TestRunner.addResult('Tests number: ' + result.value); - for (var i = 1; i <= result.value; ++i) - testSuite.push(genericTest.bind(this, 'test' + i)); - - TestRunner.runTestSuite(testSuite); - } - - TestRunner.evaluateInPage('codeSnippetsNumber()', onTestNumberReceived); -} - -</script> -</head> - -<body onload="runTest();"> -<p> -This test checks text editor indent autodetection functionality -</p> -<div>--------------TEST 1--------------</div> -<pre id="test1" class="test">function foo() { - return 42; -} -</pre> -<div>--------------TEST 2--------------</div> -<pre id="test2" class="test">console.log("Hello!");</pre> -<div>--------------TEST 3--------------</div> -<pre id="test3" class="test">/** - * This is a header comment that spans - * for a lot of lines - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - */ -function foo() { - return 42; -} -</pre> -<div>--------------TEST 4--------------</div> -<pre id="test4" class="test"> -function MyClass() -{ - this._foo = "bar"; -} - -MyClass.prototype = { - method1: function() - { - var sum = 0; - for(var i = 0; i < 100; ++i) { - sum += i; - } - return sum; - }, - - method2: function() - { - while(true) { - break; - } - }, -} -</pre> -<div>--------------TEST 5--------------</div> -<pre id="test5" class="test"> - a - a - b - b - b -c -c -</pre> -<div>--------------TEST 6--------------</div> -<pre id="test6" class="test"> - tab - tab - tab - tab -</pre> -<div>--------------TEST 7-------------- (empty content)</div> -<pre id="test7" class="test"></pre> -<div>--------------TEST 8--------------</div> -<pre id="test8" class="test"> -function foo() { - var i = 0; - function bar() { - var a = []; - a.push(1); - a.push(12); - a.push(42); - a.push(44); - return a.join("!"); - } - - (function() { - var a = { - a: function() { - vbr b = []; - b.push(1); - b.push(12); - b.push(42); - b.push(44); - b.push(44 * 2); - return b.join("?"); - } - }; - })(); -} -</pre> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-line-breaks.html b/third_party/WebKit/LayoutTests/inspector/editor/text-editor-line-breaks.html deleted file mode 100644 index f668af7f..0000000 --- a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-line-breaks.html +++ /dev/null
@@ -1,50 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="editor-test.js"></script> -<script> - -function test() { - TestRunner.runTestSuite([ - function testCRInitial(next) { - var textEditor = SourcesTestRunner.createTestEditor(); - textEditor.setText('1\n2\n3\n'); - TestRunner.addResult(encodeURI(textEditor.text())); - next(); - }, - - function testCRLFInitial(next) { - var textEditor = SourcesTestRunner.createTestEditor(); - textEditor.setText('1\r\n2\r\n3\r\n'); - TestRunner.addResult(encodeURI(textEditor.text())); - next(); - }, - - function testCREdit(next) { - var textEditor = SourcesTestRunner.createTestEditor(); - textEditor.setText('1\n2\n3\n'); - textEditor.editRange(new TextUtils.TextRange(1, 0, 1, 0), 'foo\r\nbar'); - TestRunner.addResult(encodeURI(textEditor.text())); - next(); - }, - - function testCRLFEdit(next) { - var textEditor = SourcesTestRunner.createTestEditor(); - textEditor.setText('1\r\n2\r\n3\r\n'); - textEditor.editRange(new TextUtils.TextRange(1, 0, 1, 0), 'foo\r\nbar'); - TestRunner.addResult(encodeURI(textEditor.text())); - next(); - } - ]); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -This test checks that line endings are inferred from the initial text content, not incremental editing. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-mark-clean.html b/third_party/WebKit/LayoutTests/inspector/editor/text-editor-mark-clean.html deleted file mode 100644 index 11adcaa..0000000 --- a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-mark-clean.html +++ /dev/null
@@ -1,73 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="editor-test.js"></script> -<script> - -function test() { - var textEditor = SourcesTestRunner.createTestEditor(); - textEditor.setText('1\n2\n3\n4'); - - TestRunner.runTestSuite([ - function testMarkiningInitialStateAsClean(next) { - TestRunner.addResult('Initial state: clean=' + textEditor.isClean()); - textEditor.markClean(); - TestRunner.addResult('After marking clean: clean=' + textEditor.isClean()); - textEditor.editRange(TextUtils.TextRange.createFromLocation(0, 0), 'newText'); - TestRunner.addResult('EDIT; clean=' + textEditor.isClean()); - textEditor.undo(); - TestRunner.addResult('UNDO; clean=' + textEditor.isClean()); - textEditor.redo(); - TestRunner.addResult('REDO; clean=' + textEditor.isClean()); - textEditor.undo(); - TestRunner.addResult('UNDO; clean=' + textEditor.isClean()); - textEditor.editRange(TextUtils.TextRange.createFromLocation(1, 0), 'newText2'); - TestRunner.addResult('EDIT; clean=' + textEditor.isClean()); - textEditor.undo(); - TestRunner.addResult('UNDO; clean=' + textEditor.isClean()); - next(); - }, - - function testMiddleStateAsClean(next) { - TestRunner.addResult('Initial state: clean=' + textEditor.isClean()); - for (var i = 0; i < 3; ++i) { - textEditor.editRange(TextUtils.TextRange.createFromLocation(i, 0), 'newText' + i); - TestRunner.addResult('EDIT; clean=' + textEditor.isClean()); - } - textEditor.markClean(); - TestRunner.addResult('After marking clean: clean=' + textEditor.isClean()); - textEditor.editRange(TextUtils.TextRange.createFromLocation(3, 0), 'newText' + 3); - TestRunner.addResult('EDIT; clean=' + textEditor.isClean()); - for (var i = 0; i < 4; ++i) { - textEditor.undo(); - TestRunner.addResult('UNDO; clean=' + textEditor.isClean()); - } - for (var i = 0; i < 4; ++i) { - textEditor.redo(); - TestRunner.addResult('REDO; clean=' + textEditor.isClean()); - } - for (var i = 0; i < 2; ++i) { - textEditor.undo(); - TestRunner.addResult('UNDO; clean=' + textEditor.isClean()); - } - textEditor.editRange(TextUtils.TextRange.createFromLocation(1, 0), 'foo'); - TestRunner.addResult('EDIT; clean=' + textEditor.isClean()); - textEditor.undo(); - TestRunner.addResult('UNDO; clean=' + textEditor.isClean()); - textEditor.undo(); - TestRunner.addResult('UNDO; clean=' + textEditor.isClean()); - next(); - }, - ]); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -This test checks TextEditorModel.markClean/isClean methods -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-reveal-line.html b/third_party/WebKit/LayoutTests/inspector/editor/text-editor-reveal-line.html deleted file mode 100644 index 35596ec1..0000000 --- a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-reveal-line.html +++ /dev/null
@@ -1,48 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="editor-test.js"></script> -<script> -function test() { - var out = TestRunner.addResult; - var textEditor = SourcesTestRunner.createTestEditor(500); - textEditor.setMimeType('text/javascript'); - textEditor.setReadOnly(false); - textEditor.element.focus(); - - textEditor.setText(new Array(10000).join('\n')); - - testLineReveal(0); - testLineReveal(500); - testLineReveal(510); - testLineReveal(490); - testLineReveal(1000); - testLineReveal(100); - testLineReveal(9998); - testLineReveal(-100); - testLineReveal(textEditor.linesCount); - testLineReveal(-1); - testLineReveal(10100); - - function testLineReveal(lineNumber) { - textEditor.revealPosition(lineNumber); - var firstLine = textEditor.firstVisibleLine(); - var lastLine = textEditor.lastVisibleLine(); - var lineCentered = Math.abs(2 * lineNumber - firstLine - lastLine) <= 1; - out('======= Revealing line: ' + lineNumber); - out(' is line centered: ' + lineCentered); - out('\n'); - } - TestRunner.completeTest(); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -This test checks that text editor's revealLine centers line where needed. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-search-replace.html b/third_party/WebKit/LayoutTests/inspector/editor/text-editor-search-replace.html deleted file mode 100644 index 0740b1a..0000000 --- a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-search-replace.html +++ /dev/null
@@ -1,64 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script src="../sources/debugger/resources/edit-me.js"></script> - -<script> - -function test() { - var textEditor; - var panel = UI.panels.sources; - SourcesTestRunner.showScriptSource('edit-me.js', didShowScriptSource); - - function showReplaceField() { - var searchableView = UI.panels.sources.searchableView(); - searchableView.showSearchField(); - searchableView._replaceCheckboxElement.click(); - } - - function runReplaceAll(searchValue, replaceValue) { - panel.searchableView()._searchInputElement.value = searchValue; - panel.searchableView()._replaceInputElement.value = replaceValue; - panel.searchableView()._replaceAll(); - } - - function dumpTextEditor(message) { - TestRunner.addResult(message); - TestRunner.addResult(textEditor.text()); - } - - function didShowScriptSource(sourceFrame) { - textEditor = sourceFrame._textEditor; - showReplaceField(); - - TestRunner.runTestSuite([ - function testReplaceAll(next) { - var source = '// var a1, a2, a3;\nconst a1, a2, a3;\n'; - sourceFrame.setContent(source); - - dumpTextEditor('--- Before replace ---'); - - runReplaceAll('a1', 'a$$'); - runReplaceAll('a2', 'b$&'); - runReplaceAll('a3', 'a3 /* $0 $1 $2 $& $$ \\0 \\1 */'); - runReplaceAll('/\\b(const)(\\s)+/', '/** @$1 */ var$2'); - runReplaceAll('//', '//='); - - dumpTextEditor('--- After replace ---'); - - next(); - }, - ]); - } -}; - -</script> - -</head> - -<body onload="runTest()"> -<p>Tests the search replace functionality.</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-search-switch-editor.html b/third_party/WebKit/LayoutTests/inspector/editor/text-editor-search-switch-editor.html deleted file mode 100644 index 4c3d85d..0000000 --- a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-search-switch-editor.html +++ /dev/null
@@ -1,61 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script src="../sources/debugger/resources/edit-me.js"></script> -<script src="resources/search-me.js"></script> -<script> - -function test() { - var textEditor; - var searchString = 'FINDME'; - var searchableView = UI.panels.sources.searchableView(); - var sourceFrame; - SourcesTestRunner.showScriptSource('search-me.js', didShowScriptSource); - - function didShowScriptSource(shownSourceFrame) { - sourceFrame = shownSourceFrame; - textEditor = sourceFrame._textEditor; - // We are probably still updating the editor in current callstack, so postponing the test execution. - setImmediate(textEditorUpdated); - } - - function textEditorUpdated(sourceFrame) { - searchableView.showSearchField(); - - TestRunner.addResult('Performing search...'); - searchableView._searchInputElement.value = searchString; - searchableView._performSearch(true, true); - TestRunner.addResult('Recording editor viewport after searching...'); - - var originalViewport = {from: textEditor.firstVisibleLine(), to: textEditor.lastVisibleLine()}; - var originalSelectionRange = textEditor.selection(); - - SourcesTestRunner.showScriptSource('edit-me.js', didShowAnotherSource); - - function didShowAnotherSource(anotherSourceFrame) { - SourcesTestRunner.showScriptSource('search-me.js', didShowScriptSourceAgain); - } - - function didShowScriptSourceAgain(sourceFrame) { - TestRunner.addResult('Recording editor viewport after switching tabs...'); - var newViewport = {from: textEditor.firstVisibleLine(), to: textEditor.lastVisibleLine()}; - var newSelectionRange = textEditor.selection(); - TestRunner.addResult('Comparing viewports...'); - if (originalViewport.from === newViewport.from && originalViewport.to === newViewport.to) - TestRunner.addResult(' viewports match, SUCCESS'); - else - TestRunner.addResult(' viewports do not match, FAIL'); - TestRunner.addResult('Comparing selection ranges...'); - TestRunner.addResult(' original selection range: ' + originalSelectionRange.toString()); - TestRunner.addResult(' current selection range: ' + newSelectionRange.toString()); - TestRunner.completeTest(); - } - } -}; -</script> -</head> -<body onload="runTest()"> -<p>Tests that switching editor tabs after searching does not affect editor selection and viewport.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-selection-expected.txt b/third_party/WebKit/LayoutTests/inspector/editor/text-editor-selection-expected.txt deleted file mode 100644 index d5e67b2..0000000 --- a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-selection-expected.txt +++ /dev/null
@@ -1,23 +0,0 @@ -This test checks the text editor selection calculation. - -Chunk model -Chunk [0] 0:9 (expanded) -Chunk [1] 9:18 (expanded) -Chunk [2] 18:27 (collapsed) -Chunk [3] 27:34 (collapsed) - -Running: testSelectionAtStartOfCollapsedChunk -{"startLine":27,"startColumn":0,"endLine":27,"endColumn":0} - -Running: testSelectionAtEndOfCollapsedChunk -{"startLine":33,"startColumn":2,"endLine":33,"endColumn":2} - -Running: testSelectionAtMiddleOfCollapsedChunk -{"startLine":27,"startColumn":1,"endLine":30,"endColumn":2} - -Running: testSelectionAtStartAndEndOfExpandedRows -{"startLine":3,"startColumn":0,"endLine":4,"endColumn":1} - -Running: testSelectionAtMiddleOfExpandedRows -{"startLine":3,"startColumn":1,"endLine":4,"endColumn":1} -
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-selection-to-search.html b/third_party/WebKit/LayoutTests/inspector/editor/text-editor-selection-to-search.html deleted file mode 100644 index 377e39a..0000000 --- a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-selection-to-search.html +++ /dev/null
@@ -1,48 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script src="../sources/debugger/resources/edit-me.js"></script> - -<script> - -function test() { - var panel = UI.panels.sources; - - SourcesTestRunner.showScriptSource('edit-me.js', step1); - - function step1(sourceFrame) { - sourceFrame._textEditor.setSelection(findString(sourceFrame, 'return')); - setTimeout(step2); - } - - function step2() { - panel.searchableView().showSearchField(); - TestRunner.addResult('Search controller: \'' + panel.searchableView()._searchInputElement.value + '\''); - var action = new Sources.AdvancedSearchView.ActionDelegate(); - action._showSearch(); - var searchView = - /** @type {!Sources.AdvancedSearchView} */ (self.runtime.sharedInstance(Sources.AdvancedSearchView)); - TestRunner.addResult('Advanced search controller: \'' + searchView._search.value + '\''); - TestRunner.completeTest(); - } - - function findString(sourceFrame, string) { - for (var i = 0; i < sourceFrame._textEditor.linesCount; ++i) { - var line = sourceFrame._textEditor.line(i); - var column = line.indexOf(string); - if (column === -1) - continue; - return new TextUtils.TextRange(i, column, i, column + string.length); - } - } -} -</script> - -</head> - -<body onload="runTest()"> -<p>Tests synchronizing the search input field to the editor selection.</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-smart-braces.html b/third_party/WebKit/LayoutTests/inspector/editor/text-editor-smart-braces.html deleted file mode 100644 index 2b0063ad..0000000 --- a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-smart-braces.html +++ /dev/null
@@ -1,67 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="editor-test.js"></script> -<script> -function test() { - var textEditor = SourcesTestRunner.createTestEditor(); - textEditor.setMimeType('text/javascript'); - textEditor.setReadOnly(false); - textEditor.element.focus(); - - function clearEditor() { - textEditor.setText(''); - textEditor.setSelection(TextUtils.TextRange.createFromLocation(0, 0)); - } - - TestRunner.runTestSuite([ - function testTypeBraceSequence(next) { - clearEditor(); - SourcesTestRunner.typeIn(textEditor, '({[', onTypedIn); - function onTypedIn() { - SourcesTestRunner.dumpTextWithSelection(textEditor); - next(); - } - }, - - function testBraceOverride(next) { - clearEditor(); - SourcesTestRunner.typeIn(textEditor, '({[]})', onTypedIn); - function onTypedIn() { - SourcesTestRunner.dumpTextWithSelection(textEditor); - next(); - } - }, - - function testQuotesToCloseStringLiterals(next) { - textEditor.setText('\'Hello'); - textEditor.setSelection(TextUtils.TextRange.createFromLocation(0, 6)); - SourcesTestRunner.typeIn(textEditor, '"\'', onTypedIn); - function onTypedIn() { - SourcesTestRunner.dumpTextWithSelection(textEditor); - next(); - } - }, - - function testQuotesToCloseStringLiteralInsideLine(next) { - textEditor.setText('console.log("information");'); - textEditor.setSelection(TextUtils.TextRange.createFromLocation(0, 24)); - SourcesTestRunner.typeIn(textEditor, '"', onTypedIn); - function onTypedIn() { - SourcesTestRunner.dumpTextWithSelection(textEditor); - next(); - } - } - ]); -} - -</script> -</head> - -<body onload="runTest();"> -<p> -This test checks text editor smart braces functionality. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-token-at-position.html b/third_party/WebKit/LayoutTests/inspector/editor/text-editor-token-at-position.html deleted file mode 100644 index 1dac83b..0000000 --- a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-token-at-position.html +++ /dev/null
@@ -1,47 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="editor-test.js"></script> -<script> - -function test() { - var text = - ['function foo(a, b) {', ' var f = /.a/.test(a); /*', 'this is a comment */', ' return f + "looongword";']; - - var positions = [[0, 10, 13], [8, 14, 19], [0, 5], [5, 20]]; - function testTokenAtPosition(textEditor) { - for (var i = 0; i < positions.length; ++i) { - var columns = positions[i]; - TestRunner.addResult('Line: ' + text[i]); - for (var j = 0; j < columns.length; ++j) { - var column = columns[j]; - TestRunner.addResult( - 'Column #' + column + ' (char \'' + text[i].charAt(column) + - '\') - token: ' + JSON.stringify(textEditor.tokenAtTextPosition(i, column))); - } - } - } - - TestRunner.runTestSuite([ - function testHighlightedText(next) { - var textEditor = SourcesTestRunner.createTestEditor(); - TestRunner.addSnifferPromise(SourceFrame.SourcesTextEditor.prototype, 'rewriteMimeType').then(step1); - textEditor.setMimeType('text/javascript'); - function step1() { - textEditor.setText(text.join('\n')); - testTokenAtPosition(textEditor); - next(); - } - }, - ]); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Test editor tokenAtTextPosition method. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-word-jumps.html b/third_party/WebKit/LayoutTests/inspector/editor/text-editor-word-jumps.html deleted file mode 100644 index 3af7ef4..0000000 --- a/third_party/WebKit/LayoutTests/inspector/editor/text-editor-word-jumps.html +++ /dev/null
@@ -1,146 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="editor-test.js"></script> -<script> -function test() { - // clang-format off -function testFunction(foo, bar) -{ - someFunctionCall(bar); - var b = 42; - return a === 1 ? true : false; -} - -function testMyCamelMove(foo, bar) -{ - /* HelloWorld.TestSTRIng */ - - var a = e === 2; -{} -} - // clang-format on - var textEditor = SourcesTestRunner.createTestEditor(); - textEditor.setMimeType('text/javascript'); - textEditor.setReadOnly(false); - textEditor.setText(testFunction.toString()); - textEditor.element.focus(); - - TestRunner.addResult(textEditor.text()); - const wordJumpModifier = Host.isMac() ? 'altKey' : 'ctrlKey'; - const camelJumpModifier = Host.isMac() ? 'ctrlKey' : 'altKey'; - - function dumpEditorSelection() { - var selection = textEditor.selection(); - if (selection.isEmpty()) { - var line = textEditor.line(selection.startLine); - TestRunner.addResult(line.substring(0, selection.startColumn) + '|' + line.substring(selection.startColumn)); - } else { - TestRunner.addResult('>>' + textEditor.text(selection.normalize()) + '<<'); - } - return selection; - } - - function setCursorAtBeginning() { - textEditor.setSelection(TextUtils.TextRange.createFromLocation(0, 0)); - } - - function setCursorAtEnd() { - var lastLine = textEditor.linesCount - 1; - var lastColumn = textEditor.line(lastLine).length; - textEditor.setSelection(TextUtils.TextRange.createFromLocation(lastLine, lastColumn)); - } - - function fireEventWhileSelectionChanges(eventType, modifiers, callback) { - var oldSelection = textEditor.selection(); - - function eventCallback() { - var selection = dumpEditorSelection(); - if (selection.collapseToEnd().compareTo(oldSelection.collapseToEnd()) !== 0) { - oldSelection = selection; - SourcesTestRunner.fakeKeyEvent(textEditor, eventType, modifiers, eventCallback); - } else { - callback(); - } - } - SourcesTestRunner.fakeKeyEvent(textEditor, eventType, modifiers, eventCallback); - } - - TestRunner.runTestSuite([ - function testCtrlRightArrow(next) { - setCursorAtBeginning(); - dumpEditorSelection(); - fireEventWhileSelectionChanges('ArrowRight', [wordJumpModifier], next); - }, - - function testCtrlLeftArrow(next) { - setCursorAtEnd(); - dumpEditorSelection(); - fireEventWhileSelectionChanges('ArrowLeft', [wordJumpModifier], next); - }, - - function testCtrlShiftRightArrow(next) { - setCursorAtBeginning(); - dumpEditorSelection(); - fireEventWhileSelectionChanges('ArrowRight', [wordJumpModifier, 'shiftKey'], next); - }, - - function testCtrlShiftLeftArrow(next) { - setCursorAtEnd(); - var selection = dumpEditorSelection(); - fireEventWhileSelectionChanges('ArrowLeft', [wordJumpModifier, 'shiftKey'], next); - }, - - function testCtrlBackspace(next) { - setCursorAtEnd(); - TestRunner.addResult('==============='); - TestRunner.addResult(textEditor.text()); - function eventCallback() { - TestRunner.addResult('==============='); - TestRunner.addResult(textEditor.text() + '<<'); - if (textEditor.text() !== '') - SourcesTestRunner.fakeKeyEvent(textEditor, '\b', [wordJumpModifier], eventCallback); - else - next(); - } - SourcesTestRunner.fakeKeyEvent(textEditor, '\b', [wordJumpModifier], eventCallback); - }, - - function testAltRight(next) { - TestRunner.addResult('====== CAMEL CASE MOVEMENTS ======'); - textEditor.setText(testMyCamelMove.toString()); - setCursorAtBeginning(); - dumpEditorSelection(); - fireEventWhileSelectionChanges('ArrowRight', [camelJumpModifier], next); - }, - - function testAltLeft(next) { - setCursorAtEnd(); - dumpEditorSelection(); - fireEventWhileSelectionChanges('ArrowLeft', [camelJumpModifier], next); - }, - - function testAltShiftRight(next) { - setCursorAtBeginning(); - dumpEditorSelection(); - fireEventWhileSelectionChanges('ArrowRight', [camelJumpModifier, 'shiftKey'], next); - }, - - function testAltShiftLeft(next) { - setCursorAtEnd(); - dumpEditorSelection(); - fireEventWhileSelectionChanges('ArrowLeft', [camelJumpModifier, 'shiftKey'], next); - } - ]); -} - -</script> -</head> - -<body onload="runTest();"> -<p> -This test checks how text editor handles different movements: ctrl-left, ctrl-right, ctrl-shift-left, ctrl-backspace, alt-left, alt-right, alt-shift-left, alt-shift-right. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/accessibility/autocomplete-attribute.html b/third_party/WebKit/LayoutTests/inspector/elements/accessibility/autocomplete-attribute.html deleted file mode 100644 index fdd60e6..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/accessibility/autocomplete-attribute.html +++ /dev/null
@@ -1,78 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="accessibility-pane-test.js"></script> -<script> - -function test() { - UI.viewManager.showView('accessibility.view') - .then(() => AccessibilityTestRunner.selectNodeAndWaitForAccessibility('inspected')) - .then(runTests); - - function getPromptForAttribute(attribute) { - var treeElement = AccessibilityTestRunner.findARIAAttributeTreeElement(attribute); - treeElement._startEditing(); - return treeElement._prompt; - } - - function runTests() { - TestRunner.runTestSuite([ - function testCheckedEmptyValue(next) { - var prompt = getPromptForAttribute('aria-checked'); - testAgainstGolden(prompt, '', ['true', 'false', 'mixed'], next); - }, - - function testCheckedFirstCharacter(next) { - var prompt = getPromptForAttribute('aria-checked'); - testAgainstGolden(prompt, 't', ['true'], next); - }, - - function testRoleFirstCharacter(next) { - var prompt = getPromptForAttribute('role'); - testAgainstGolden(prompt, 'b', ['banner', 'button'], next); - } - ]); - } - - function testAgainstGolden(prompt, inputText, golden, callback) { - var proxyElement = document.createElement('div'); - document.body.appendChild(proxyElement); - proxyElement.style = 'webkit-user-select: text; -webkit-user-modify: read-write-plaintext-only'; - proxyElement.textContent = inputText; - var selectionRange = document.createRange(); - var textNode = proxyElement.childNodes[0]; - if (textNode) { - selectionRange.setStart(textNode, inputText.length); - selectionRange.setEnd(textNode, inputText.length); - } else { - selectionRange.selectNodeContents(proxyElement); - } - var range = selectionRange.startContainer.rangeOfWord( - selectionRange.startOffset, prompt._completionStopCharacters, proxyElement, 'backward'); - var prefix = range.toString(); - prompt._buildPropertyCompletions(inputText.substring(0, inputText.length - prefix.length), prefix, true) - .then(completions); - - function completions(result) { - var suggestions = new Set(result.map(s => s.text)); - var i; - for (i = 0; i < golden.length; ++i) { - if (!suggestions.has(golden[i])) - TestRunner.addResult('NOT FOUND: ' + golden[i]); - } - proxyElement.remove(); - callback(); - } - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that autocompletions are computed correctly when editing the ARIA pane. -</p> -<span id="inspected" aria-checked="true" role="checkbox"></span> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/accessibility/edit-aria-attributes.html b/third_party/WebKit/LayoutTests/inspector/elements/accessibility/edit-aria-attributes.html deleted file mode 100644 index 2c49b61..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/accessibility/edit-aria-attributes.html +++ /dev/null
@@ -1,55 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="accessibility-pane-test.js"></script> -<script> - -function test() { - UI.viewManager.showView('accessibility.view') - .then(() => AccessibilityTestRunner.selectNodeAndWaitForAccessibility('inspected')) - .then(editAriaChecked); - - function editAriaChecked() { - TestRunner.addResult('=== Before attribute modification ==='); - AccessibilityTestRunner.dumpSelectedElementAccessibilityNode(); - var treeElement = AccessibilityTestRunner.findARIAAttributeTreeElement('aria-checked'); - treeElement._startEditing(); - treeElement._prompt._element.textContent = 'false'; - treeElement._prompt._element.dispatchEvent(TestRunner.createKeyEvent('Enter')); - self.runtime.sharedInstance(Accessibility.AccessibilitySidebarView).doUpdate().then(() => { - editRole(); - }); - } - - function editRole() { - TestRunner.addResult('=== After attribute modification ==='); - AccessibilityTestRunner.dumpSelectedElementAccessibilityNode(); - var treeElement = AccessibilityTestRunner.findARIAAttributeTreeElement('role'); - treeElement._startEditing(); - treeElement._prompt._element.textContent = 'radio'; - treeElement._prompt._element.dispatchEvent(TestRunner.createKeyEvent('Enter')); - self.runtime.sharedInstance(Accessibility.AccessibilitySidebarView).doUpdate().then(() => { - postRoleChange(); - }); - } - - function postRoleChange() { - TestRunner.addResult('=== After role modification ==='); - AccessibilityTestRunner.dumpSelectedElementAccessibilityNode(); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that writing an ARIA attribute causes the accessibility node to be updated. -</p> - -<button id="inspected" role="checkbox" aria-checked="true">ARIA checkbox</button> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/attribute-modified-ns.html b/third_party/WebKit/LayoutTests/inspector/elements/attribute-modified-ns.html deleted file mode 100644 index b286833..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/attribute-modified-ns.html +++ /dev/null
@@ -1,65 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script> - -function setAttribute(namespace, name, value) -{ - var node = document.getElementById("node"); - node.setAttributeNS(namespace, name, value); -} - -function removeAttribute(name) -{ - var node = document.getElementById("node"); - node.removeAttribute(name); -} - -function test() { - var targetNode; - - TestRunner.runTestSuite([ - function testDumpInitial(next) { - function callback(node) { - targetNode = node; - TestRunner.addResult('========= Original ========'); - ElementsTestRunner.dumpElementsTree(targetNode); - next(); - } - ElementsTestRunner.selectNodeWithId('node', callback); - }, - - function testAttributeUpdated(next) { - function callback() { - TestRunner.domModel.removeEventListener(SDK.DOMModel.Events.AttrModified, callback); - TestRunner.addResult('===== On attribute set ====='); - ElementsTestRunner.dumpElementsTree(targetNode); - next(); - } - TestRunner.domModel.addEventListener(SDK.DOMModel.Events.AttrModified, callback); - TestRunner.evaluateInPage('setAttribute(\'http://www.w3.org/1999/xlink\', \'xlink:href\', \'changed-url\')'); - }, - - function testAttributeRemoved(next) { - function callback() { - TestRunner.domModel.removeEventListener(SDK.DOMModel.Events.AttrRemoved, callback); - TestRunner.addResult('=== On attribute removed ==='); - ElementsTestRunner.dumpElementsTree(targetNode); - next(); - } - TestRunner.domModel.addEventListener(SDK.DOMModel.Events.AttrRemoved, callback); - TestRunner.evaluateInPage('removeAttribute(\'xlink:href\')'); - }, - ]); -} - -</script> -</head> -<body onload="runTest()"> -<p>Tests that elements panel updates dom tree structure upon changing the attribute with namespace.</p> -<svg> - <a id="node" xlink:href="http://localhost">link</a> -</svg> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/bidi-dom-tree-expected.txt b/third_party/WebKit/LayoutTests/inspector/elements/bidi-dom-tree-expected.txt deleted file mode 100644 index 0a5c526..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/bidi-dom-tree-expected.txt +++ /dev/null
@@ -1,21 +0,0 @@ -Tests that elements panel correctly displays DOM tree structure for bi-di pages. - -ویکیپدیا:خوشآمدید - <!DOCTYPE html> -- <html> - - <head> - <meta charset="utf-8"> - <script src="../../http/tests/inspector/inspector-test.js"></script> - <script src="../../http/tests/inspector/elements-test.js"></script> - - <script> - \nfunction test() {\n // Warm up highlighter module.\n runtime.loadModulePromise('source_frame').then(function() {\n ElementsTestRunner.expandElementsTree(step1);\n });\n\n function step1() {\n ElementsTestRunner.dumpElementsTree();\n TestRunner.completeTest();\n }\n}\n\n - </script> - </head> - - <body onload="runTest()"> - - <p> - "\nTests that elements panel correctly displays DOM tree structure for bi-di pages.\n" - </p> - <div title="ویکی‌پدیا:خوش‌آمدید">ویکی‌پدیا:خوش‌آمدید</div> - </body> - </html> -
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/bidi-dom-tree.html b/third_party/WebKit/LayoutTests/inspector/elements/bidi-dom-tree.html deleted file mode 100644 index 2c850367..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/bidi-dom-tree.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta charset="utf-8"> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - // Warm up highlighter module. - runtime.loadModulePromise('source_frame').then(function() { - ElementsTestRunner.expandElementsTree(step1); - }); - - function step1() { - ElementsTestRunner.dumpElementsTree(); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that elements panel correctly displays DOM tree structure for bi-di pages. -</p> - -<div title="ویکیپدیا:خوشآمدید">ویکیپدیا:خوشآمدید</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/breadcrumb-updates.html b/third_party/WebKit/LayoutTests/inspector/elements/breadcrumb-updates.html deleted file mode 100644 index 3690fd9..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/breadcrumb-updates.html +++ /dev/null
@@ -1,57 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script> - -function changeClass() -{ - document.getElementsByClassName("firstClass")[0].className = "anotherClass"; -} - -function deleteClass() -{ - document.getElementsByClassName("anotherClass")[0].className = ""; -} - -function test() { - ElementsTestRunner.expandElementsTree(step0); - - function step0() { - TestRunner.addSniffer(Elements.ElementsBreadcrumbs.prototype, 'update', step1); - ElementsTestRunner.selectNodeWithId('target'); - } - - function step1() { - ElementsTestRunner.dumpBreadcrumb('Original breadcrumb'); - TestRunner.addSniffer(Elements.ElementsBreadcrumbs.prototype, 'update', step2); - TestRunner.evaluateInPage('changeClass()'); - } - - function step2() { - ElementsTestRunner.dumpBreadcrumb('After class change'); - TestRunner.addSniffer(Elements.ElementsBreadcrumbs.prototype, 'update', step3); - TestRunner.evaluateInPage('deleteClass()'); - } - - function step3() { - ElementsTestRunner.dumpBreadcrumb('After class removal'); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that breadcrumbs are updated upon involved element's attribute changes in the Elements panel. -</p> - -<div class="firstClass"> - <div id="target"></div> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/css-rule-hover-highlights-selectors.html b/third_party/WebKit/LayoutTests/inspector/elements/css-rule-hover-highlights-selectors.html deleted file mode 100644 index 5ef9038..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/css-rule-hover-highlights-selectors.html +++ /dev/null
@@ -1,127 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<style> -.border { - border: 1px solid black; -} -</style> -<script> - -function requestAnimationFramePromise() -{ - return new Promise(fulfill => requestAnimationFrame(fulfill)); -} - -function buildShadowDOM() -{ - var host = document.querySelector("body"); - var root = host.createShadowRoot(); - var template = document.querySelector("#dom-template"); - var clone = document.importNode(template.content, true); - root.appendChild(clone); - var second = root.querySelector("#fifth"); - second.id = "inspected-shadow"; - runTest(); -} - -function test() { - TestRunner.runTestSuite([ - function setupProxyOverlay(next) { - TestRunner.evaluateFunctionInOverlay(drawHighlightProxy, next); - }, - - function testRegularNodeSelection(next) { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', onSelected); - - function onSelected() { - resetHighlightCount(onHighlightCountReset); - } - - function onHighlightCountReset() { - var section = ElementsTestRunner.firstMatchedStyleSection(); - section._highlight(); - TestRunner.callFunctionInPageAsync('requestAnimationFramePromise').then(onHighlighted); - } - - function onHighlighted() { - dumpHighlightCount(next); - } - }, - - function testShadowDOMNodeSelection(next) { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected-shadow', onSelected); - - function onSelected() { - resetHighlightCount(onHighlightCountReset); - } - - function onHighlightCountReset() { - var section = ElementsTestRunner.firstMatchedStyleSection(); - section._highlight(); - TestRunner.callFunctionInPageAsync('requestAnimationFramePromise').then(onHighlighted); - } - - function onHighlighted() { - dumpHighlightCount(next); - } - }, - ]); - - function drawHighlightProxy() { - window._highlightsForTest = []; - var oldDrawHighlight = drawHighlight; - drawHighlight = proxy; - - function proxy(highlight, context) { - window._highlightsForTest.push(highlight); - oldDrawHighlight(highlight, context); - } - } - - function reportHighlights() { - var result = window._highlightsForTest.length; - window._highlightsForTest = []; - return result + ''; - } - - function dumpHighlightCount(next) { - TestRunner.evaluateFunctionInOverlay(reportHighlights, onResults); - - function onResults(count) { - TestRunner.addResult('Highlights drawn: ' + count); - next(); - } - } - - function resetHighlightCount(next) { - TestRunner.evaluateFunctionInOverlay(reportHighlights, next); - } -} - -</script> -</head> - -<body onload="buildShadowDOM()"> -<p> -Tests that long-hovering over StylesSidebar matched rule selector highlights -matching nodes in the page. -</p> -<div class="border">1st</div> -<div id="inspected" class="border">2nd</div> -<div class="border">3rd</div> -<template id="dom-template"> - <style> - .bck { - border: 1px solid black; - } - </style> - <div class="bck">1st</div> - <div class="bck">2nd</div> - <div class="bck">3rd</div> - <div class="bck">4th</div> - <div class="bck" id="fifth">5th</div> -</template> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/dom-agent-query-selector.html b/third_party/WebKit/LayoutTests/inspector/elements/dom-agent-query-selector.html deleted file mode 100644 index 73bef526..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/dom-agent-query-selector.html +++ /dev/null
@@ -1,73 +0,0 @@ -<html> -<head> - -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeWithId('container', step1); - - function step1(node) { - var containerId = node.id; - var documentId = node.ownerDocument.id; - - TestRunner.runTestSuite([ - function testDocumentQuerySelector(next) { - TestRunner.DOMAgent.querySelector(documentId, 'div.foo').then(dumpNodes.bind(null, next)); - }, - - function testDocumentQuerySelectorAll(next) { - TestRunner.DOMAgent.querySelectorAll(documentId, 'div.foo').then(dumpNodes.bind(null, next)); - }, - - function testQuerySelector(next) { - TestRunner.DOMAgent.querySelector(containerId, 'div.foo').then(dumpNodes.bind(null, next)); - }, - - function testQuerySelectorAll(next) { - TestRunner.DOMAgent.querySelectorAll(containerId, 'div.foo').then(dumpNodes.bind(null, next)); - } - ]); - } - - function dumpNodes(next, nodeIds) { - if (!nodeIds) { - next(); - return; - } - - if (!(nodeIds.constructor && nodeIds.constructor.name === 'Array')) - nodeIds = [nodeIds]; - - for (var i = 0; i < nodeIds.length; ++i) { - if (!nodeIds[i]) - TestRunner.addResult('no results'); - else { - var node = TestRunner.domModel.nodeForId(nodeIds[i]); - TestRunner.addResult('node id: ' + node.getAttribute('id')); - } - } - next(); - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests DOMAgent.querySelector and DOMAgent.querySelectorAll. -</p> - -<div id="id1" class="foo"></div> -<div id="id2" class="foo"></div> - -<div id="container"> - <div id="id3" class="foo"></div> - <div id="id4" class="foo"></div> - <div id="id5" class="foo"></div> - <div id="id6" class="foo"></div> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/dom-search-crash.html b/third_party/WebKit/LayoutTests/inspector/elements/dom-search-crash.html deleted file mode 100644 index fb94a0ec..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/dom-search-crash.html +++ /dev/null
@@ -1,25 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script> -function test() { - TestRunner.runTestSuite([ - function testSetUp(next) { - TestRunner.domModel.requestDocument(next); - }, - - function testNoCrash(next) { - TestRunner.domModel.performSearch('FooBar', false).then(next); - } - ]); -} -</script> -</head> - -<body> -<p> -Tests that elements panel search is not crashing on documentElement-less cases. -</p> -<iframe src="resources/dom-search-crash-iframe.html" onload="runTest()"></iframe> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/delete-from-document.html b/third_party/WebKit/LayoutTests/inspector/elements/edit/delete-from-document.html deleted file mode 100644 index 1156c97..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/edit/delete-from-document.html +++ /dev/null
@@ -1,38 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function removeDoctype() -{ - document.removeChild(document.firstChild); -} - -function test() { - ElementsTestRunner.expandElementsTree(step1); - - function step1() { - TestRunner.addResult('Before remove doctype'); - ElementsTestRunner.dumpElementsTree(null, 1); - TestRunner.evaluateInPage('removeDoctype()', step2); - } - - function step2() { - TestRunner.addResult('After remove doctype'); - ElementsTestRunner.dumpElementsTree(null, 1); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that removing child from the document is handled properly in the elements panel. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-1.html b/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-1.html deleted file mode 100644 index b7044ec8..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-1.html +++ /dev/null
@@ -1,82 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="edit-dom-test.js"></script> -<script> - -function test() { - // Save time on style updates. - Elements.StylesSidebarPane.prototype.update = function() {}; - Elements.MetricsSidebarPane.prototype.update = function() {}; - - TestRunner.runTestSuite([ - function testSetUp(next) { - ElementsTestRunner.expandElementsTree(next); - }, - - function testRemove(next) { - ElementsTestRunner.domActionTestForNodeId('testRemove', 'node-to-remove', testBody, next); - - function testBody(node, done) { - var treeElement = ElementsTestRunner.firstElementsTreeOutline().findTreeElement(node); - treeElement.remove(); - TestRunner.deprecatedRunAfterPendingDispatches(done); - } - }, - - function testSetNodeName(next) { - ElementsTestRunner.domActionTestForNodeId('testSetNodeName', 'node-to-set-name', testBody, next); - - function testBody(node, done) { - ElementsTestRunner.editNodePartAndRun(node, 'webkit-html-tag-name', 'span', done); - } - }, - - function testSetNodeNameInput(next) { - ElementsTestRunner.domActionTestForNodeId('testSetNodeNameInput', 'node-to-set-name-input', testBody, next); - - function testBody(node, done) { - ElementsTestRunner.editNodePartAndRun(node, 'webkit-html-tag-name', 'input', done); - } - }, - - function testSetNodeValue(next) { - ElementsTestRunner.domActionTestForNodeId('testSetNodeValue', 'node-to-set-value', testBody, next); - - function testBody(node, done) { - ElementsTestRunner.editNodePartAndRun(node, 'webkit-html-text-node', ' \n Edited Text \n ', done); - } - }, - ]); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that user can mutate DOM by means of elements panel. -</p> - -<div> - <div id="testRemove"> - <div id="node-to-remove"></div> - </div> - - <div id="testSetNodeName"> - <div id="node-to-set-name"></div> - </div> - - <div id="testSetNodeNameInput"> - <div id="node-to-set-name-input"></div> - </div> - - <div id="testSetNodeValue"> - <div id="node-to-set-value"> - Text - </div> - </div> -</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-2.html b/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-2.html deleted file mode 100644 index 0c705eca..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-2.html +++ /dev/null
@@ -1,84 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="edit-dom-test.js"></script> -<script> - -function test() { - // Save time on style updates. - Elements.StylesSidebarPane.prototype.update = function() {}; - Elements.MetricsSidebarPane.prototype.update = function() {}; - - TestRunner.runTestSuite([ - function testSetUp(next) { - ElementsTestRunner.expandElementsTree(next); - }, - - function testSetAttribute(next) { - ElementsTestRunner.domActionTestForNodeId('testSetAttribute', 'node-to-set-attribute', testBody, next); - - function testBody(node, done) { - ElementsTestRunner.editNodePartAndRun(node, 'webkit-html-attribute', 'bar="edited attribute"', done, true); - } - }, - - function testSetScriptableAttribute(next) { - ElementsTestRunner.domActionTestForNodeId( - 'testSetScriptableAttribute', 'node-to-set-scriptable-attribute', testBody, next); - - function testBody(node, done) { - ElementsTestRunner.editNodePartAndRun(node, 'webkit-html-attribute', 'onclick="alert(2)"', done, true); - } - }, - - function testRemoveAttribute(next) { - ElementsTestRunner.domActionTestForNodeId('testRemoveAttribute', 'node-to-remove-attribute', testBody, next); - - function testBody(node, done) { - ElementsTestRunner.editNodePartAndRun(node, 'webkit-html-attribute', '', done, true); - } - }, - - function testAddAttribute(next) { - ElementsTestRunner.doAddAttribute('testAddAttribute', 'node-to-add-attribute', 'newattr="new-value"', next); - }, - - function testAddAttributeUnquotedValue(next) { - ElementsTestRunner.doAddAttribute( - 'testAddAttributeUnquotedValue', 'node-to-add-attribute-unquoted-value', 'newattr=unquotedValue', next); - }, - ]); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that user can mutate DOM by means of elements panel. -</p> - -<div> - <div id="testSetAttribute"> - <div foo="attribute value" id="node-to-set-attribute"></div> - </div> - - <div id="testSetScriptableAttribute"> - <div onclick="alert(1)" id="node-to-set-scriptable-attribute"></div> - </div> - - <div id="testRemoveAttribute"> - <div foo="attribute value" id="node-to-remove-attribute"></div> - </div> - - <div id="testAddAttribute"> - <div id="node-to-add-attribute"></div> - </div> - - <div id="testAddAttributeUnquotedValue"> - <div id="node-to-add-attribute-unquoted-value"></div> - </div> -</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-3.html b/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-3.html deleted file mode 100644 index da6a883..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-3.html +++ /dev/null
@@ -1,91 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="edit-dom-test.js"></script> -<script> - -function test() { - // Save time on style updates. - Elements.StylesSidebarPane.prototype.update = function() {}; - Elements.MetricsSidebarPane.prototype.update = function() {}; - - TestRunner.runTestSuite([ - function testSetUp(next) { - ElementsTestRunner.expandElementsTree(next); - }, - - function testEditCommentAsHTML(next) { - function commentNodeSelectionCallback(testNode, callback) { - var childNodes = testNode.children(); - for (var i = 0; i < childNodes.length; ++i) { - if (childNodes[i].nodeType() === 8) { - Common.Revealer.reveal(childNodes[i]); - callback(childNodes[i]); - return; - } - } - TestRunner.addResult('Comment node not found'); - TestRunner.completeTest(); - } - ElementsTestRunner.domActionTest('testEditCommentAsHTML', commentNodeSelectionCallback, testBody, next); - - function testBody(node, done) { - var treeOutline = ElementsTestRunner.firstElementsTreeOutline(); - var treeElement = treeOutline.findTreeElement(node); - treeOutline.toggleEditAsHTML(node); - TestRunner.deprecatedRunAfterPendingDispatches(step2); - - function step2() { - TestRunner.addResult(treeElement._editing.editor.text()); - treeElement._editing.editor.setText('<div foo="bar-comment">Element</div>'); - var event = TestRunner.createKeyEvent('Enter'); - event.isMetaOrCtrlForTest = true; - treeElement._editing.editor.widget().element.dispatchEvent(event); - TestRunner.deprecatedRunAfterPendingDispatches(done); - } - } - }, - - function testEditAsHTML(next) { - ElementsTestRunner.domActionTestForNodeId('testEditAsHTML', 'node-to-edit-as-html', testBody, next); - - function testBody(node, done) { - var treeOutline = ElementsTestRunner.firstElementsTreeOutline(); - var treeElement = treeOutline.findTreeElement(node); - treeOutline.toggleEditAsHTML(node); - TestRunner.deprecatedRunAfterPendingDispatches(step2); - - function step2() { - TestRunner.addResult(treeElement._editing.editor.text()); - treeElement._editing.editor.setText('<span foo="bar"><span id="inner-span">Span contents</span></span>'); - var event = TestRunner.createKeyEvent('Enter'); - event.isMetaOrCtrlForTest = true; - treeElement._editing.editor.widget().element.dispatchEvent(event); - TestRunner.deprecatedRunAfterPendingDispatches( - ElementsTestRunner.expandElementsTree.bind(InspectorTest, done)); - } - } - }, - ]); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that user can mutate DOM by means of elements panel. -</p> - -<div> - <div id="testEditCommentAsHTML"> - <!-- Comment --> - </div> - - <div id="testEditAsHTML"> - <div id="node-to-edit-as-html"><span id="span">Text</span></div> - </div> -</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-4.html b/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-4.html deleted file mode 100644 index 3e9046c..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-4.html +++ /dev/null
@@ -1,104 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="edit-dom-test.js"></script> -<script> - -function test() { - // Save time on style updates. - Elements.StylesSidebarPane.prototype.update = function() {}; - Elements.MetricsSidebarPane.prototype.update = function() {}; - - TestRunner.runTestSuite([ - function testSetUp(next) { - ElementsTestRunner.expandElementsTree(next); - }, - - function testEditInvisibleCharsAsHTML(next) { - ElementsTestRunner.domActionTestForNodeId( - 'testEditInvisibleCharsAsHTML', 'node-with-invisible-chars', testBody, next); - - function testBody(node, done) { - var treeOutline = ElementsTestRunner.firstElementsTreeOutline(); - var treeElement = treeOutline.findTreeElement(node); - treeOutline.toggleEditAsHTML(node); - TestRunner.deprecatedRunAfterPendingDispatches(step2); - - function step2() { - var editor = treeElement._editing.editor; - TestRunner.addResult(editor.text()); - editor.setText(editor.text().replace(/&/g, '#')); - var event = TestRunner.createKeyEvent('Enter'); - event.isMetaOrCtrlForTest = true; - editor.widget().element.dispatchEvent(event); - TestRunner.deprecatedRunAfterPendingDispatches( - ElementsTestRunner.expandElementsTree.bind(InspectorTest, done)); - } - } - }, - - function testEditScript(next) { - ElementsTestRunner.domActionTestForNodeId('testEditScript', 'node-to-edit-script', testBody, next); - - function testBody(node, done) { - ElementsTestRunner.editNodePartAndRun(node, 'webkit-html-text-node', 'var i = 0;\n var j = 0;\n', done); - } - }, - - function testEditSVGAttribute(next) { - ElementsTestRunner.domActionTestForNodeId('testEditSVG', 'node-to-edit-svg-attribute', testBody, next); - - function testBody(node, done) { - var treeOutline = ElementsTestRunner.firstElementsTreeOutline(); - var treeElement = treeOutline.findTreeElement(node); - treeOutline.toggleEditAsHTML(node); - TestRunner.deprecatedRunAfterPendingDispatches(step2); - - function step2() { - var value = treeElement._editing.editor._codeMirror.getValue(); - TestRunner.addResult(value); - treeElement._editing.editor.setText(value.replace('100', '110')); - var event = TestRunner.createKeyEvent('Enter'); - event.isMetaOrCtrlForTest = true; - treeElement._editing.editor.widget().element.dispatchEvent(event); - TestRunner.deprecatedRunAfterPendingDispatches( - ElementsTestRunner.expandElementsTree.bind(InspectorTest, done)); - } - } - } - ]); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that user can mutate DOM by means of elements panel. -</p> - -<div> - <div id="testEditInvisibleCharsAsHTML"> - <div id="node-with-invisible-chars">A B C D E‌F‍G‏H‎I</div> - </div> - - <div id="testEditScript"> - <script id="node-to-edit-script"> - - var i = 0; - var j = 5; - for (; i < j; ++i) { - // Do nothing. - } - - </script> - </div> - - <div id="testEditSVG"> - <svg id="node-to-edit-svg-attribute" xmlns:xlink="test" width="100"> - </svg> - </div> -</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-shadow-1.html b/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-shadow-1.html deleted file mode 100644 index cd2fb266..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-shadow-1.html +++ /dev/null
@@ -1,53 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="edit-dom-test.js"></script> -<script> - -function test() { - // Save time on style updates. - UI.viewManager.showView('elements'); - - Elements.StylesSidebarPane.prototype.update = function() {}; - Elements.MetricsSidebarPane.prototype.update = function() {}; - - TestRunner.runTestSuite([ - function testSetUp(next) { - ElementsTestRunner.expandElementsTree(next); - }, - - function testSetAuthorShadowDOMElementAttribute(next) { - ElementsTestRunner.domActionTestForNodeId( - 'testSetAuthorShadowDOMElementAttribute', 'shadow-node-to-set-attribute', testBody, next); - - function testBody(node, done) { - ElementsTestRunner.editNodePartAndRun(node, 'webkit-html-attribute', 'bar="edited attribute"', done, true); - } - }, - ]); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that user can mutate author shadow DOM by means of elements panel. -</p> - -<div> - <div id="testSetAuthorShadowDOMElementAttribute"></div> -</div> -<script> -function createRootWithContents(id, html) -{ - var container = document.getElementById(id); - var root = container.createShadowRoot(); - root.innerHTML = html; -} - -createRootWithContents("testSetAuthorShadowDOMElementAttribute", "<div foo='attribute value' id='shadow-node-to-set-attribute'></div>"); -</script> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-shadow-2.html b/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-shadow-2.html deleted file mode 100644 index 39bf807..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-dom-actions-shadow-2.html +++ /dev/null
@@ -1,67 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="edit-dom-test.js"></script> -<script> - -function test() { - // Save time on style updates. - UI.viewManager.showView('elements'); - - Elements.StylesSidebarPane.prototype.update = function() {}; - Elements.MetricsSidebarPane.prototype.update = function() {}; - - TestRunner.runTestSuite([ - function testSetUp(next) { - ElementsTestRunner.expandElementsTree(next); - }, - - function testEditShadowDOMAsHTML(next) { - ElementsTestRunner.domActionTestForNodeId( - 'testEditAuthorShadowDOMAsHTML', 'authorShadowDOMElement', testBody, next); - - function testBody(node, done) { - var treeOutline = ElementsTestRunner.firstElementsTreeOutline(); - var treeElement = treeOutline.findTreeElement(node); - treeOutline.toggleEditAsHTML(node); - TestRunner.deprecatedRunAfterPendingDispatches(step2); - - function step2() { - TestRunner.addResult(treeElement._editing.editor.text()); - treeElement._editing.editor.setText( - '<span foo="shadow-span"><span id="inner-shadow-span">Shadow span contents</span></span>'); - var event = TestRunner.createKeyEvent('Enter'); - event.isMetaOrCtrlForTest = true; - treeElement._editing.editor.widget().element.dispatchEvent(event); - TestRunner.deprecatedRunAfterPendingDispatches( - ElementsTestRunner.expandElementsTree.bind(InspectorTest, done)); - } - } - } - ]); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that user can mutate author shadow DOM by means of elements panel. -</p> - -<div> - <div id="testEditAuthorShadowDOMAsHTML"></div> -</div> -<script> -function createRootWithContents(id, html) -{ - var container = document.getElementById(id); - var root = container.createShadowRoot(); - root.innerHTML = html; -} - -createRootWithContents("testEditAuthorShadowDOMAsHTML", "<div id='authorShadowDOMElement'></div>"); -</script> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-style-attribute.html b/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-style-attribute.html deleted file mode 100644 index 523b279..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-style-attribute.html +++ /dev/null
@@ -1,63 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function testSetNewValue() -{ - document.getElementById("node-set-new-value").style.setProperty("color", "blue"); -} - -function testSetSameValue() -{ - document.getElementById("node-set-same-value").style.setProperty("color", "red"); -} - -function test() { - // Save time on style updates. - Elements.StylesSidebarPane.prototype.update = function() {}; - Elements.MetricsSidebarPane.prototype.update = function() {}; - - TestRunner.runTestSuite([ - function testSetUp(next) { - ElementsTestRunner.expandElementsTree(next); - }, - - function testSetNewValue(next) { - TestRunner.evaluateInPage('testSetNewValue()'); - - TestRunner.domModel.addEventListener(SDK.DOMModel.Events.AttrModified, listener); - function listener(event) { - TestRunner.addResult('SDK.DOMModel.Events.AttrModified should be issued'); - TestRunner.domModel.removeEventListener(SDK.DOMModel.Events.AttrModified, listener); - next(); - } - }, - - function testSetSameValue(next) { - TestRunner.evaluateInPage('testSetSameValue()', next); - - TestRunner.domModel.addEventListener(SDK.DOMModel.Events.AttrModified, listener); - function listener(event) { - TestRunner.addResult('SDK.DOMModel.Events.AttrModified should not be issued'); - TestRunner.domModel.removeEventListener(SDK.DOMModel.Events.AttrModified, listener); - } - } - ]); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that style modification generates attribute updated event only when attribute is actually changed. -</p> - -<div id="container"> - <div id="node-set-new-value" style="color:red"></div> - <div id="node-set-same-value" style="color:red"></div> -</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-trimmed-attribute-value.html b/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-trimmed-attribute-value.html deleted file mode 100644 index 2fbcb77..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/edit/edit-trimmed-attribute-value.html +++ /dev/null
@@ -1,46 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeWithId('inspected', execute); - - function execute() { - var treeElement = ElementsTestRunner.firstElementsTreeOutline().findTreeElement( - ElementsTestRunner.expandedNodeWithId('inspected')); - var textElement = treeElement.listItemElement.getElementsByClassName('webkit-html-attribute')[0]; - TestRunner.addResult('Original textContent'); - TestRunner.addResult(treeElement.title.textContent); - - treeElement._startEditingTarget(textElement); - TestRunner.addResult('textContent when editing \'href\''); - TestRunner.addResult(treeElement.title.textContent); - - eventSender.keyDown('Tab'); - TestRunner.addResult('textContent after moving to \'id\''); - TestRunner.addResult(treeElement.title.textContent); - - textElement = treeElement.listItemElement.getElementsByClassName('webkit-html-attribute')[1]; - textElement.dispatchEvent(TestRunner.createKeyEvent('Escape')); - TestRunner.addResult('textContent after canceling the edit (equal to the original one)'); - TestRunner.addResult(treeElement.title.textContent); - - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that user can mutate DOM by means of elements panel. -</p> - -<div> - <a href="data:text/plain;,12345678901234567890123456789012345678901234567890123456789012345678901234567890/123456789012345678901234567890123456789012345678901234567890" id="inspected">Anchor</a> -</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/insert-node-collapsed.html b/third_party/WebKit/LayoutTests/inspector/elements/edit/insert-node-collapsed.html deleted file mode 100644 index b16e5188a..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/edit/insert-node-collapsed.html +++ /dev/null
@@ -1,55 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function appendChild() -{ - var container = document.getElementById("container"); - var child = document.createElement("div"); - child.setAttribute("id", "appended"); - container.appendChild(child); -} - -function test() { - var containerNode; - - TestRunner.runTestSuite([ - function testDumpInitial(next) { - function callback(node) { - containerNode = node; - TestRunner.addResult('========= Original ========'); - ElementsTestRunner.dumpElementsTree(containerNode); - next(); - } - ElementsTestRunner.selectNodeWithId('container', callback); - }, - - function testAppend(next) { - function callback() { - ElementsTestRunner.firstElementsTreeOutline().runPendingUpdates(); - TestRunner.deprecatedRunAfterPendingDispatches(function() { - TestRunner.addResult('======== Appended ========='); - ElementsTestRunner.dumpElementsTree(containerNode); - next(); - }); - } - TestRunner.evaluateInPage('appendChild()', callback); - } - ]); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that elements panel updates hasChildren flag upon adding children to collapsed nodes. -</p> - -<div id="container"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/mutate-unknown-node-expected.txt b/third_party/WebKit/LayoutTests/inspector/elements/edit/mutate-unknown-node-expected.txt deleted file mode 100644 index 24eccb51..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/edit/mutate-unknown-node-expected.txt +++ /dev/null
@@ -1,16 +0,0 @@ -Tests that elements panel does not receive events upon changes to the undiscovered nodes. - -Appended -DOMAgent event fired. Should only happen once for output node: DOMNodeInserted DIV#undefined -Removed -Attribute modified -========= Result DOMAgent tree ======== -#document[1] - HTML[2] - HEAD[3] - BODY[4] - P[5] - [6] - DIV[7] - DIV[8] -
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/mutate-unknown-node.html-disabled b/third_party/WebKit/LayoutTests/inspector/elements/edit/mutate-unknown-node.html-disabled deleted file mode 100644 index 65707e02..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/edit/mutate-unknown-node.html-disabled +++ /dev/null
@@ -1,88 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function appendChild() -{ - var hidden = document.getElementById("hidden"); - var child = document.createElement("div"); - child.setAttribute("id", "appended"); - hidden.appendChild(child); -} - -function removeChild() -{ - var child = document.getElementById("appended"); - child.parentNode.removeChild(child); -} - -function modifyAttribute() -{ - var hidden = document.getElementById("hidden"); - hidden.setAttribute("foo", "bar"); -} - -function test() -{ - function listener(type, event) - { - node = event.data.node || event.data; - InspectorTest.addResult("DOMAgent event fired. Should only happen once for output node: " + type + " " + event.data.nodeName() + "#" + event.data.getAttribute("id")); - } - - WebInspector.domAgent.addEventListener(WebInspector.DOMAgent.Events.AttrModified, listener.bind(this, "DOMAttrModified")); - WebInspector.domAgent.addEventListener(WebInspector.DOMAgent.Events.CharacterDataModified, listener.bind(this, "DOMCharacterDataModified")); - WebInspector.domAgent.addEventListener(WebInspector.DOMAgent.Events.NodeInserted, listener.bind(this, "DOMNodeInserted")); - WebInspector.domAgent.addEventListener(WebInspector.DOMAgent.Events.NodeRemoved, listener.bind(this, "DOMNodeRemoved")); - - WebInspector.domAgent.requestDocument(step0.bind(this)); - - function step0() - { - InspectorTest.evaluateInPage("appendChild()", step1); - } - - function step1() - { - InspectorTest.addResult("Appended"); - InspectorTest.evaluateInPage("removeChild()", step2); - } - - function step2() - { - InspectorTest.addResult("Removed"); - InspectorTest.evaluateInPage("modifyAttribute()", step3); - } - - function step3() - { - InspectorTest.addResult("Attribute modified"); - InspectorTest.evaluateInPage("true", step4); - } - - function step4() - { - InspectorTest.addResult("========= Result DOMAgent tree ========"); - InspectorTest.dumpDOMAgentTree(); - - InspectorTest.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that elements panel does not receive events upon changes to the undiscovered nodes. -</p> - -<div> -<div id="hidden"> -</div> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/perform-undo-undo.html b/third_party/WebKit/LayoutTests/inspector/elements/edit/perform-undo-undo.html deleted file mode 100644 index f77d1750..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/edit/perform-undo-undo.html +++ /dev/null
@@ -1,50 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - var containerNode; - ElementsTestRunner.expandElementsTree(step1); - - function step1(node) { - containerNode = ElementsTestRunner.expandedNodeWithId('container'); - TestRunner.addResult('========= Original ========'); - ElementsTestRunner.dumpElementsTree(containerNode); - step2(); - } - - function step2() { - function callback() { - TestRunner.addResult('===== Modified element ====='); - ElementsTestRunner.dumpElementsTree(containerNode); - step3(); - } - containerNode.setAttribute('', 'foo="bar"', callback); - } - - async function step3() { - await TestRunner.domModel.undo(); - TestRunner.addResult('===== Undo 1 ====='); - ElementsTestRunner.dumpElementsTree(containerNode); - - TestRunner.addResult('===== Undo 2 ====='); - ElementsTestRunner.dumpElementsTree(containerNode); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that client can call undo multiple times with non-empty history. -</p> - -<div style="display:none" id="container"> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/remove-node.html b/third_party/WebKit/LayoutTests/inspector/elements/edit/remove-node.html deleted file mode 100644 index 68ee109..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/edit/remove-node.html +++ /dev/null
@@ -1,91 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function removeNode(id) -{ - var child = document.getElementById(id); - child.parentNode.removeChild(child); -} - -function removeTextNode(id) -{ - document.getElementById(id).textContent = ""; -} - -function test() { - var containerNode; - - TestRunner.runTestSuite([ - function testDumpInitial(next) { - function callback(node) { - containerNode = ElementsTestRunner.expandedNodeWithId('container'); - - TestRunner.addResult('========= Original ========'); - ElementsTestRunner.dumpElementsTree(containerNode); - next(); - } - ElementsTestRunner.expandElementsTree(callback); - }, - - function testRemoveTextNode(next) { - function callback() { - TestRunner.addResult('===== Removed Text node ====='); - ElementsTestRunner.dumpElementsTree(containerNode); - next(); - } - TestRunner.evaluateInPage('removeTextNode(\'child1\')', callback); - }, - - function testRemoveFirst(next) { - function callback() { - TestRunner.addResult('===== Removed first ====='); - ElementsTestRunner.dumpElementsTree(containerNode); - next(); - } - TestRunner.evaluateInPage('removeNode(\'child1\')', callback); - }, - - function testRemoveMiddle(next) { - function callback() { - TestRunner.addResult('===== Removed middle ====='); - ElementsTestRunner.dumpElementsTree(containerNode); - next(); - } - TestRunner.evaluateInPage('removeNode(\'child3\')', callback); - }, - - function testRemoveLast(next) { - function callback() { - TestRunner.addResult('===== Removed last ====='); - ElementsTestRunner.dumpElementsTree(containerNode); - next(); - } - TestRunner.evaluateInPage('removeNode(\'child4\')', callback); - }, - - function testRemoveTheOnly(next) { - function callback() { - TestRunner.addResult('===== Removed the only ====='); - ElementsTestRunner.dumpElementsTree(containerNode); - next(); - } - TestRunner.evaluateInPage('removeNode(\'child2\')', callback); - } - ]); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that elements panel updates dom tree structure upon node removal. -</p> - -<div id="container"><div id="child1">Text</div><div id="child2"></div><div id="child3"></div><div id="child4"></div></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/set-attribute-non-html.svg b/third_party/WebKit/LayoutTests/inspector/elements/edit/set-attribute-non-html.svg deleted file mode 100644 index ebff5d3a..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/edit/set-attribute-non-html.svg +++ /dev/null
@@ -1,49 +0,0 @@ -<?xml version="1.0"?> -<svg xmlns="http://www.w3.org/2000/svg"> -<foreignObject> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script><![CDATA[ - -function test() -{ - var targetNode; - - InspectorTest.runTestSuite([ - function testDumpInitial(next) - { - function callback(node) - { - targetNode = node; - next(); - } - InspectorTest.selectNodeWithId("node", callback); - }, - - function testSetAttributeText(next) - { - function callback(error) - { - next(); - } - targetNode.setAttribute("foo", "foo2='baz2' foo3='baz3'", callback); - } - ]); -} -]]> -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that elements panel updates dom tree structure upon setting attribute on non HTML elements. PASSes if there is no crash. -</p> - -<div id="node"></div> - -</body> -</html> -</foreignObject> -</svg>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/set-attribute.html b/third_party/WebKit/LayoutTests/inspector/elements/edit/set-attribute.html deleted file mode 100644 index 9df1003a..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/edit/set-attribute.html +++ /dev/null
@@ -1,126 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function setAttribute(name, value) -{ - var node = document.getElementById("node"); - node.setAttribute(name, value); -} - -function removeAttribute(name) -{ - var node = document.getElementById("node"); - node.removeAttribute(name); -} - -function test() { - var targetNode; - - TestRunner.runTestSuite([ - function testDumpInitial(next) { - function callback(node) { - targetNode = node; - TestRunner.addResult('========= Original ========'); - ElementsTestRunner.dumpElementsTree(targetNode); - next(); - } - ElementsTestRunner.selectNodeWithId('node', callback); - }, - - function testAttributeUpdated(next) { - function callback() { - TestRunner.domModel.removeEventListener(SDK.DOMModel.Events.AttrModified, callback); - TestRunner.addResult('===== On attribute set ====='); - ElementsTestRunner.dumpElementsTree(targetNode); - next(); - } - TestRunner.domModel.addEventListener(SDK.DOMModel.Events.AttrModified, callback); - TestRunner.evaluateInPage('setAttribute(\'name\', \'value\')'); - }, - - function testAttributeSameValueNotUpdated(next) { - function callback() { - TestRunner.addResult('===== On attribute modified (should be \'newValue\') ====='); - ElementsTestRunner.dumpElementsTree(targetNode); - TestRunner.domModel.removeEventListener(SDK.DOMModel.Events.AttrModified, callback); - next(); - } - TestRunner.domModel.addEventListener(SDK.DOMModel.Events.AttrModified, callback); - // Setting the same property value should not result in the AttrModified event. - TestRunner.evaluateInPage('setAttribute(\'name\', \'value\')'); - TestRunner.evaluateInPage('setAttribute(\'name\', \'value\')'); - TestRunner.evaluateInPage('setAttribute(\'name\', \'newValue\')'); - }, - - function testAttributeRemoved(next) { - function callback() { - TestRunner.domModel.removeEventListener(SDK.DOMModel.Events.AttrRemoved, callback); - TestRunner.addResult('=== On attribute removed ==='); - ElementsTestRunner.dumpElementsTree(targetNode); - next(); - } - TestRunner.domModel.addEventListener(SDK.DOMModel.Events.AttrRemoved, callback); - TestRunner.evaluateInPage('removeAttribute(\'name\')'); - }, - - function testSetAttributeValue(next) { - function callback() { - TestRunner.domModel.removeEventListener(SDK.DOMModel.Events.AttrModified, callback); - TestRunner.addResult('=== Set attribute value ==='); - ElementsTestRunner.dumpElementsTree(targetNode); - next(); - } - TestRunner.domModel.addEventListener(SDK.DOMModel.Events.AttrModified, callback); - targetNode.setAttributeValue('foo', 'bar'); - }, - - function testSetAttributeText(next) { - function callback() { - TestRunner.domModel.removeEventListener(SDK.DOMModel.Events.AttrRemoved, callback); - TestRunner.addResult('=== Set attribute as text ==='); - ElementsTestRunner.dumpElementsTree(targetNode); - next(); - } - TestRunner.domModel.addEventListener(SDK.DOMModel.Events.AttrRemoved, callback); - targetNode.setAttribute('foo', 'foo2=\'baz2\' foo3=\'baz3\''); - }, - - function testRemoveAttributeAsText(next) { - function callback() { - TestRunner.domModel.removeEventListener(SDK.DOMModel.Events.AttrRemoved, callback); - TestRunner.addResult('=== Remove attribute as text ==='); - ElementsTestRunner.dumpElementsTree(targetNode); - next(); - } - TestRunner.domModel.addEventListener(SDK.DOMModel.Events.AttrRemoved, callback); - targetNode.setAttribute('foo3', ''); - }, - - function testSetMalformedAttributeText(next) { - function callback(error) { - TestRunner.addResult('Error: ' + error); - TestRunner.domModel.removeEventListener(SDK.DOMModel.Events.AttrModified, callback); - TestRunner.addResult('=== Set malformed attribute as text ==='); - ElementsTestRunner.dumpElementsTree(targetNode); - next(); - } - targetNode.setAttribute('foo2', 'foo2=\'missingquote', callback); - } - ]); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that elements panel updates dom tree structure upon setting attribute. -</p> - -<div id="node"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/set-outer-html-2.html b/third_party/WebKit/LayoutTests/inspector/elements/edit/set-outer-html-2.html deleted file mode 100644 index df025196..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/edit/set-outer-html-2.html +++ /dev/null
@@ -1,71 +0,0 @@ -<html> -<head> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="set-outer-html-test.js"></script> -<script> - -function onload() -{ - document.getElementById("identity").wrapperIdentity = "identity"; - runTest(); -} - -function test() { - TestRunner.runTestSuite([ - function testSetUp(next) { - ElementsTestRunner.setUpTestSuite(next); - }, - - function testChangeMultipleThings(next) { - var text = ElementsTestRunner.containerText.replace(/<li>.*<\/li>/, ''); - text = text.replace('<h2>', '<h2 foo="bar" bar="baz">'); - ElementsTestRunner.setOuterHTML(text, next); - }, - - function testChangeNestingLevel(next) { - var text = ElementsTestRunner.containerText.replace('<ul>', '<div><ul>'); - var text = text.replace('</ul>', '</ul></div>'); - ElementsTestRunner.setOuterHTML(text, next); - }, - - function testSwapNodes(next) { - var text = ElementsTestRunner.containerText.replace('<h2>Getting involved</h2>', ''); - var text = text.replace('</div>', '<h2>Getting involved</h2></div>'); - ElementsTestRunner.setOuterHTML(text, next); - }, - - function testEditTwoRoots(next) { - var text = ElementsTestRunner.containerText + '<div>Additional node</div>'; - ElementsTestRunner.setOuterHTML(text, next); - }, - - function testDupeNode(next) { - ElementsTestRunner.patchOuterHTML( - '<h2>Getting involved</h2>', '<h2>Getting involved</h2><h2>Getting involved</h2>', next); - } - ]); -} -</script> -</head> - -<body onload="onload()"> -<p> -Tests DOMAgent.setOuterHTML protocol method (part 2). -</p> - -<div id="container" style="display:none"> -<p>WebKit is used by <a href="http://www.apple.com/safari/">Safari</a>, Dashboard, etc..</p> -<h2>Getting involved</h2> -<p id="identity">There are many ways to get involved. You can:</p> -<ul> - <li></li> -</ul> -<ul> - <li></li> -</ul> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/set-outer-html-body.html b/third_party/WebKit/LayoutTests/inspector/elements/edit/set-outer-html-body.html deleted file mode 100644 index c0ccf445..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/edit/set-outer-html-body.html +++ /dev/null
@@ -1,65 +0,0 @@ -<html> -<head> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - var htmlNode; - var bodyNode; - var headNode; - - TestRunner.runTestSuite([ - function testSetUp(next) { - ElementsTestRunner.expandElementsTree(step1); - function step1() { - htmlNode = ElementsTestRunner.expandedNodeWithId('html'); - headNode = ElementsTestRunner.expandedNodeWithId('head'); - bodyNode = ElementsTestRunner.expandedNodeWithId('body'); - next(); - } - }, - - function testSetBody(next) { - TestRunner.DOMAgent.setOuterHTML(bodyNode.id, '<body>New body content</body>').then(dumpHTML(next)); - }, - - function testInsertComments(next) { - TestRunner.DOMAgent - .setOuterHTML(bodyNode.id, '<!-- new comment between head and body --><body>New body content</body>') - .then(dumpHTML(next)); - }, - - function testSetHead(next) { - TestRunner.DOMAgent.setOuterHTML(headNode.id, '<head><!-- new head content --></head>').then(dumpHTML(next)); - }, - - function testSetHTML(next) { - TestRunner.DOMAgent - .setOuterHTML( - htmlNode.id, - '<html><head><!-- new head content --></head><body>Setting body as a part of HTML.</body></html>') - .then(dumpHTML(next)); - } - ]); - - function dumpHTML(next) { - async function dump() { - var text = await TestRunner.DOMAgent.getOuterHTML(htmlNode.id); - TestRunner.addResult(text); - next(); - } - return dump; - } -} -</script> -</head> - -<body> -<p> -Tests DOMAgent.setOuterHTML invoked on body tag. See https://bugs.webkit.org/show_bug.cgi?id=62272. -<iframe src="../resources/set-outer-html-body-iframe.html" onload="runTest()"></iframe> -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/set-outer-html-for-xhtml.xhtml b/third_party/WebKit/LayoutTests/inspector/elements/edit/set-outer-html-for-xhtml.xhtml deleted file mode 100644 index b487af85..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/edit/set-outer-html-for-xhtml.xhtml +++ /dev/null
@@ -1,74 +0,0 @@ -<html id="html" xmlns="http://www.w3.org/1999/xhtml"> -<head> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="set-outer-html-test.js"></script> -<script> -//<![CDATA[ - -function onload() -{ - document.getElementById("identity").wrapperIdentity = "identity"; - runTest(); -} - -function test() -{ - TestRunner.runTestSuite([ - function testSetUp(next) - { - ElementsTestRunner.setUpTestSuite(next); - }, - - function testChangeCharacterData(next) - { - ElementsTestRunner.patchOuterHTML("Getting involved", "Getting not involved", next); - }, - - function testChangeAttributes(next) - { - ElementsTestRunner.patchOuterHTML("<a href", "<a foo=\"bar\" href", next); - }, - - function testRemoveLastChild(next) - { - ElementsTestRunner.patchOuterHTML("Getting involved", "", next); - }, - - function testSplitNode(next) - { - ElementsTestRunner.patchOuterHTML("Getting involved", "Getting</h2><h2>involved", next); - }, - - function testChangeNodeName(next) - { - ElementsTestRunner.patchOuterHTML("<h2>Getting involved</h2>", "<h3>Getting involved</h3>", next); - }, - - async function testInvalidDocumentDoesNotCrash(next) - { - var htmlId = ElementsTestRunner.expandedNodeWithId("html").id; - await TestRunner.DOMAgent.setOuterHTML(htmlId, "foo"); - TestRunner.addResult("PASS: No crash"); - next(); - } - ]); -} -//]]> -</script> -</head> - -<body onload="onload()"> -<p> -Tests DOMAgent.setOuterHTML protocol method against an XHTML document. -</p> - -<div id="container" style="display:none"> -<p>WebKit is used by <a href="http://www.apple.com/safari/">Safari</a>, Dashboard, etc.</p> -<h2>Getting involved</h2> -<p id="identity">There are many ways to get involved. You can:</p> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/set-outer-html.html b/third_party/WebKit/LayoutTests/inspector/elements/edit/set-outer-html.html deleted file mode 100644 index 80e74fc9..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/edit/set-outer-html.html +++ /dev/null
@@ -1,57 +0,0 @@ -<html> -<head> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="set-outer-html-test.js"></script> -<script> - -function onload() -{ - document.getElementById("identity").wrapperIdentity = "identity"; - runTest(); -} - -function test() { - TestRunner.runTestSuite([ - function testSetUp(next) { - ElementsTestRunner.setUpTestSuite(next); - }, - - function testChangeCharacterData(next) { - ElementsTestRunner.patchOuterHTML('Getting involved', 'Getting not involved', next); - }, - - function testChangeAttributes(next) { - ElementsTestRunner.patchOuterHTML('<a href', '<a foo="bar" href', next); - }, - - function testRemoveLastChild(next) { - ElementsTestRunner.patchOuterHTML('Getting involved', '', next); - }, - - function testSplitNode(next) { - ElementsTestRunner.patchOuterHTML('Getting involved', 'Getting</h2><h2>involved', next); - }, - - function testChangeNodeName(next) { - ElementsTestRunner.patchOuterHTML('<h2>Getting involved</h2>', '<h3>Getting involved</h3>', next); - } - ]); -} -</script> -</head> - -<body onload="onload()"> -<p> -Tests DOMAgent.setOuterHTML protocol method. -</p> - -<div id="container" style="display:none"> -<p>WebKit is used by <a href="http://www.apple.com/safari/">Safari</a>, Dashboard, etc.</a>.</p> -<h2>Getting involved</h2> -<p id="identity">There are many ways to get involved. You can:</p> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/shadow-dom-modify-chardata.html b/third_party/WebKit/LayoutTests/inspector/elements/edit/shadow-dom-modify-chardata.html deleted file mode 100644 index 60d3056..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/edit/shadow-dom-modify-chardata.html +++ /dev/null
@@ -1,53 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function typeText() -{ - var input = document.getElementById("input1"); - input.focus(); - eventSender.keyDown("B"); - eventSender.keyDown("a"); - eventSender.keyDown("r"); -} - -function test() { - var containerNode; - Common.settingForTest('showUAShadowDOM').set(true); - TestRunner.runTestSuite([ - function testDumpInitial(next) { - function callback(node) { - containerNode = ElementsTestRunner.expandedNodeWithId('container'); - TestRunner.addResult('========= Original ========'); - ElementsTestRunner.dumpElementsTree(containerNode); - next(); - } - ElementsTestRunner.expandElementsTree(callback); - }, - - function testAppend(next) { - TestRunner.evaluateInPage('typeText()', callback); - - function callback() { - TestRunner.addResult('======== Type text ========='); - ElementsTestRunner.dumpElementsTree(containerNode); - next(); - } - } - ]); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that elements panel updates shadow dom tree structure upon typing. -</p> - -<div id="container"><input type="text" id="input1"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/switch-panels-while-editing-as-html.html b/third_party/WebKit/LayoutTests/inspector/elements/edit/switch-panels-while-editing-as-html.html deleted file mode 100644 index be50f676..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/edit/switch-panels-while-editing-as-html.html +++ /dev/null
@@ -1,48 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="edit-dom-test.js"></script> -<script> - -function test() { - TestRunner.runTestSuite([ - function testSetUp(next) { - ElementsTestRunner.expandElementsTree(next); - }, - - function selectNode(next) { - ElementsTestRunner.selectNodeWithId('inspected', onNodeSelected); - - function onNodeSelected(node) { - var treeOutline = ElementsTestRunner.firstElementsTreeOutline(); - var treeElement = treeOutline.findTreeElement(node); - treeElement.toggleEditAsHTML(); - TestRunner.addSniffer(Elements.ElementsTreeOutline.prototype, 'setMultilineEditing', next); - } - }, - - function switchPanels(next) { - UI.inspectorView.showPanel('sources').then(next).catch(onError); - - function onError(error) { - TestRunner.addResult('FAILURE: exception caught while switching panels.'); - TestRunner.completeTest(); - } - } - ]); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Verifies inspector doesn't break when switching panels while editing as HTML. crbug.com/485457 -</p> - -<div> - <div id="inspected">Inspected Node</div> -</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/undo-dom-edits-2.html b/third_party/WebKit/LayoutTests/inspector/elements/edit/undo-dom-edits-2.html deleted file mode 100644 index 8700393..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/edit/undo-dom-edits-2.html +++ /dev/null
@@ -1,67 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - var testSuite = []; - - function testSetUp(next) { - TestRunner.addResult('Setting up'); - ElementsTestRunner.expandElementsTree(callback); - - function callback() { - ElementsTestRunner.expandElementsTree(next); - } - } - testSuite.push(testSetUp); - - function testSetAttribute(callback) { - var node = ElementsTestRunner.expandedNodeWithId('node-to-set-attribute'); - node.setAttribute('foo', 'bar="edited attribute"', callback); - } - testSuite.push(ElementsTestRunner.generateUndoTest(testSetAttribute)); - - - function testRemoveAttribute(callback) { - var node = ElementsTestRunner.expandedNodeWithId('node-to-remove-attribute'); - node.removeAttribute('foo').then(callback); - } - testSuite.push(ElementsTestRunner.generateUndoTest(testRemoveAttribute)); - - - function testAddAttribute(callback) { - var node = ElementsTestRunner.expandedNodeWithId('node-to-add-attribute'); - node.setAttribute('', 'newattr="new-value"', callback); - } - testSuite.push(ElementsTestRunner.generateUndoTest(testAddAttribute)); - - - TestRunner.runTestSuite(testSuite); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that DOM modifications done in the Elements panel are undoable (Part 2). -</p> - -<div style="display:none"> - <div id="testSetAttribute"> - <div foo="attribute value" id="node-to-set-attribute"></div> - </div> - - <div id="testRemoveAttribute"> - <div foo="attribute value" id="node-to-remove-attribute"></div> - </div> - - <div id="testAddAttribute"> - <div id="node-to-add-attribute"></div> - </div> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/undo-dom-edits.html b/third_party/WebKit/LayoutTests/inspector/elements/edit/undo-dom-edits.html deleted file mode 100644 index ae293c1..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/edit/undo-dom-edits.html +++ /dev/null
@@ -1,78 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - var testSuite = []; - - function testSetUp(next) { - TestRunner.addResult('Setting up'); - ElementsTestRunner.expandElementsTree(callback); - - function callback() { - ElementsTestRunner.expandElementsTree(next); - } - } - testSuite.push(testSetUp); - - - function testRemove(callback) { - var node = ElementsTestRunner.expandedNodeWithId('node-to-remove'); - node.removeNode(callback); - } - testSuite.push(ElementsTestRunner.generateUndoTest(testRemove)); - - - function testSetNodeName(callback) { - var node = ElementsTestRunner.expandedNodeWithId('node-to-set-name'); - node.setNodeName('span', callback); - } - testSuite.push(ElementsTestRunner.generateUndoTest(testSetNodeName)); - - - function testSetNodeValue(callback) { - var node = ElementsTestRunner.expandedNodeWithId('node-to-set-value'); - node.firstChild.setNodeValue('New Text', callback); - } - testSuite.push(ElementsTestRunner.generateUndoTest(testSetNodeValue)); - - function testEditAsHTML(callback) { - var node = ElementsTestRunner.expandedNodeWithId('node-to-edit-as-html'); - node.setOuterHTML( - '<div id="node-to-edit-as-html"><div id="span2">Text2</div></div><span>Second node</span>', callback); - } - testSuite.push(ElementsTestRunner.generateUndoTest(testEditAsHTML)); - - TestRunner.runTestSuite(testSuite); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that DOM modifications done in the Elements panel are undoable. -</p> - -<div style="display:none"> - <div id="testRemove"> - <div id="node-to-remove"></div> - </div> - - <div id="testSetNodeName"> - <div id="node-to-set-name"></div> - </div> - - <div id="testSetNodeValue"> - <div id="node-to-set-value">Text</div> - </div> - - <div id="testEditAsHTML"> - <div id="node-to-edit-as-html"><span id="span">Text</span></div> - </div> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/undo-set-outer-html-2.html b/third_party/WebKit/LayoutTests/inspector/elements/edit/undo-set-outer-html-2.html deleted file mode 100644 index dc3d474..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/edit/undo-set-outer-html-2.html +++ /dev/null
@@ -1,71 +0,0 @@ -<html> -<head> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="set-outer-html-test.js"></script> -<script> - -function onload() -{ - document.getElementById("identity").wrapperIdentity = "identity"; - runTest(); -} - -function test() { - TestRunner.runTestSuite([ - function testSetUp(next) { - ElementsTestRunner.setUpTestSuite(next); - }, - - function testChangeMultipleThings(next) { - var text = ElementsTestRunner.containerText.replace(/<li>.*<\/li>/, ''); - text = text.replace('<h2>', '<h2 foo="bar" bar="baz">'); - ElementsTestRunner.setOuterHTMLUseUndo(text, next); - }, - - function testChangeNestingLevel(next) { - var text = ElementsTestRunner.containerText.replace('<ul>', '<div><ul>'); - var text = text.replace('</ul>', '</ul></div>'); - ElementsTestRunner.setOuterHTMLUseUndo(text, next); - }, - - function testSwapNodes(next) { - var text = ElementsTestRunner.containerText.replace('<h2>Getting involved</h2>', ''); - var text = text.replace('</div>', '<h2>Getting involved</h2></div>'); - ElementsTestRunner.setOuterHTMLUseUndo(text, next); - }, - - function testEditTwoRoots(next) { - var text = ElementsTestRunner.containerText + '<div>Additional node</div>'; - ElementsTestRunner.setOuterHTMLUseUndo(text, next); - }, - - function testDupeNode(next) { - ElementsTestRunner.patchOuterHTML( - '<h2>Getting involved</h2>', '<h2>Getting involved</h2><h2>Getting involved</h2>', next); - } - ]); -} -</script> -</head> - -<body onload="onload()"> -<p> -Tests undo for the DOMAgent.setOuterHTML protocol method (part 2). -</p> - -<div id="container" style="display:none"> -<p>WebKit is used by <a href="http://www.apple.com/safari/">Safari</a>, Dashboard, etc..</p> -<h2>Getting involved</h2> -<p id="identity">There are many ways to get involved. You can:</p> -<ul> - <li></li> -</ul> -<ul> - <li></li> -</ul> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/edit/undo-set-outer-html.html b/third_party/WebKit/LayoutTests/inspector/elements/edit/undo-set-outer-html.html deleted file mode 100644 index 475efe7..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/edit/undo-set-outer-html.html +++ /dev/null
@@ -1,57 +0,0 @@ -<html> -<head> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="set-outer-html-test.js"></script> -<script> - -function onload() -{ - document.getElementById("identity").wrapperIdentity = "identity"; - runTest(); -} - -function test() { - TestRunner.runTestSuite([ - function testSetUp(next) { - ElementsTestRunner.setUpTestSuite(next); - }, - - function testChangeCharacterData(next) { - ElementsTestRunner.patchOuterHTMLUseUndo('Getting involved', 'Getting not involved', next); - }, - - function testChangeAttributes(next) { - ElementsTestRunner.patchOuterHTMLUseUndo('<a href', '<a foo="bar" href', next); - }, - - function testRemoveLastChild(next) { - ElementsTestRunner.patchOuterHTMLUseUndo('Getting involved', '', next); - }, - - function testSplitNode(next) { - ElementsTestRunner.patchOuterHTMLUseUndo('Getting involved', 'Getting</h2><h2>involved', next); - }, - - function testChangeNodeName(next) { - ElementsTestRunner.patchOuterHTMLUseUndo('<h2>Getting involved</h2>', '<h3>Getting involved</h3>', next); - } - ]); -} -</script> -</head> - -<body onload="onload()"> -<p> -Tests undo for the DOMAgent.setOuterHTML protocol method. -</p> - -<div id="container" style="display:none"> -<p>WebKit is used by <a href="http://www.apple.com/safari/">Safari</a>, Dashboard, etc.</a>.</p> -<h2>Getting involved</h2> -<p id="identity">There are many ways to get involved. You can:</p> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-css-path.html b/third_party/WebKit/LayoutTests/inspector/elements/elements-css-path.html deleted file mode 100644 index c0f7ee7..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/elements-css-path.html +++ /dev/null
@@ -1,139 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta charset="utf-8"> -<script src="../../http/tests/inspector/inspector-test.js" id="script-id"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script id="test-script"> -function matchingElements(selector) -{ - return document.querySelectorAll(selector).length; -} - -function test() { - var nodeQueue = []; - ElementsTestRunner.expandElementsTree(enqueueNodes); - - function enqueueNodes() { - enqueueNode('', getDocumentElement()); - dumpNodeData(); - } - - function dumpNodeData() { - var entry = nodeQueue.shift(); - if (!entry) { - TestRunner.completeTest(); - return; - } - var cssPath = Components.DOMPresentationUtils.cssPath(entry.node, true); - var result = entry.prefix + cssPath; - TestRunner.addResult(result.replace(/\n/g, '\\n')); - var escapedPath = cssPath.replace(/\\/g, '\\\\'); - TestRunner.evaluateInPage('matchingElements(\'' + escapedPath + '\')', callback); - - function callback(result) { - TestRunner.assertEquals(1, result.value); - dumpNodeData(); - } - } - - function getDocumentElement() { - var map = TestRunner.domModel._idToDOMNode; - for (var id in map) { - if (map[id].nodeName() === '#document') - return map[id]; - } - - return null; - } - - function enqueueNode(prefix, node) { - if (node.nodeType() === Node.ELEMENT_NODE) - nodeQueue.push({prefix: prefix, node: node}); - var children = node.children(); - for (var i = 0; children && i < children.length; ++i) - enqueueNode(prefix + ' ', children[i]); - } -} -</script> -</head> - -<body onload="runTest()"> -<p>Tests DOMNode.cssPath()</p> - -<article></article> -<article></article> -<input type="number"/> - -<!-- Comment node --> - -<div id="ids"> - <!-- Comment node --> - <div></div> - <div></div> - <div id="inner-id"></div> - <div id="__proto__"></div> - <div id='#"ridiculous".id'></div> - <div id="'quoted.value'"></div> - <div id=".foo.bar"></div> - <div id="-"></div> - <div id="-a"></div> - <div id="-0"></div> - <div id="7"></div> - <div id="ид">ид</div> - <input type="text" id="input-id"/> - <input type="text"/> - <p></p> -</div> - -<div id="classes"> - <!-- Comment node 1 --> - <div class="foo bar"></div> - <!-- Comment node 2 --> - <div class=" foo foo "></div> - <div class=".foo"></div> - <div class=".foo.bar"></div> - <div class="-"></div> - <div class="-a"></div> - <div class="-0"></div> - <div class="--a"></div> - <div class="---a"></div> - <div class="7"></div> - <div class="класс">класс</div> - <div class="__proto__"></div> - <div class="__proto__ foo"></div> - <span class="bar"></span> - <div id="id-with-class" class="moo"></div> - <input type="text" class="input-class-one"/> - <input type="text" class="input-class-two"/> - <!-- Comment node 3 --> -</div> - -<div id="non-unique-classes"> - <!-- Comment node 1 --> - <span class="c1"></span> - <!-- Comment node 2 --> - <span class="c1"></span> - <!-- Comment node 3 --> - <span class="c1 c2"></span> - <!-- Comment node 4 --> - <span class="c1 c2 c3"></span> - <!-- Comment node 5 --> - <span></span> - <!-- Comment node 6 --> - <div class="c1"></div> - <!-- Comment node 7 --> - <div class="c1 c2"></div> - <!-- Comment node 8 --> - <div class="c3 c2"></div> - <!-- Comment node 9 --> - <div class="c3 c4"></div> - <!-- Comment node 10 --> - <div class="c1 c4"></div> - <!-- Comment node 11 --> - <input type="text" class="input-class"/> - <input type="text" class="input-class"/> - <div></div> -</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-delete-inline-style.html b/third_party/WebKit/LayoutTests/inspector/elements/elements-delete-inline-style.html deleted file mode 100644 index 8506408..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/elements-delete-inline-style.html +++ /dev/null
@@ -1,33 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); - - function step1(node) { - TestRunner.addResult('Before style property removal:'); - ElementsTestRunner.dumpSelectedElementStyles(true); - node.removeAttribute('style'); - ElementsTestRunner.waitForStyles('inspected', step2); - } - - function step2() { - TestRunner.addResult('After style property removal:'); - ElementsTestRunner.dumpSelectedElementStyles(true); - TestRunner.completeTest(); - } -} - -</script> -</head> -<body onload="runTest()"> -<p> -Tests that the "style" attribute removal results in the Styles sidebar pane update (not a crash). <a href="http://bugs.webkit.org/show_bug.cgi?id=51478">Bug 51478</a> -</p> - -<div id="inspected" style="color: red"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-hide-html-comments.html b/third_party/WebKit/LayoutTests/inspector/elements/elements-hide-html-comments.html deleted file mode 100644 index ad82804..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/elements-hide-html-comments.html +++ /dev/null
@@ -1,36 +0,0 @@ -<!-- comment 1 --> -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.nodeWithId('inspect', onNode); - - function onNode(node) { - var commentNode = node.nextSibling; - ElementsTestRunner.selectNode(commentNode).then(onNodeSelected); - } - - function onNodeSelected() { - TestRunner.addResult('HTML comments shown:'); - ElementsTestRunner.dumpElementsTree(); - Common.settingForTest('showHTMLComments').set(false); - TestRunner.addResult('\nHTML comments hidden:'); - ElementsTestRunner.dumpElementsTree(); - TestRunner.completeTest(); - } -} - -</script> -</head> -<!-- comment 2 --> -<body onload="runTest()"> -<p> -Verifies show/hide HTML comments setting. -<span id="inspect"></span> -<!-- comment 3 --> -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-img-tooltip.html b/third_party/WebKit/LayoutTests/inspector/elements/elements-img-tooltip.html deleted file mode 100644 index 39353c9..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/elements-img-tooltip.html +++ /dev/null
@@ -1,52 +0,0 @@ -<html> -<head> - -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script> - -var test = function() { - - var treeElement; - ElementsTestRunner.nodeWithId('image', step1); - - function step1(node) { - ElementsTestRunner.firstElementsTreeOutline()._loadDimensionsForNode(node).then(step2); - } - - function step2(dimensions) { - const EXPECTED_WIDTH = 215; - const EXPECTED_HEIGHT = 174; - - if (!dimensions) - TestRunner.addResult('FAILED, no dimensions on treeElement.'); - else { - if (dimensions.offsetWidth === dimensions.naturalWidth && dimensions.offsetHeight == dimensions.naturalHeight && - dimensions.offsetWidth === EXPECTED_WIDTH && dimensions.offsetHeight === EXPECTED_HEIGHT) - TestRunner.addResult('PASSED, image dimensions for tooltip: ' + EXPECTED_WIDTH + 'x' + EXPECTED_HEIGHT + '.'); - else - TestRunner.addResult( - 'FAILED, image dimensions for tooltip: ' + formatDimensions(dimensions) + ' (should be ' + EXPECTED_WIDTH + - 'x' + EXPECTED_HEIGHT + ').'); - } - TestRunner.completeTest(); - } - - function formatDimensions(dimensions) { - return dimensions.offsetWidth + 'x' + dimensions.offsetHeight + ' (natural: ' + dimensions.naturalWidth + 'x' + - dimensions.naturalHeight + ')'; - } -}; - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests the tooltip for the image on hover. -</p> - -<img id="image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANcAAACuCAIAAAAqMg/rAAAAAXNSR0IArs4c6QAAAU9JREFUeNrt0jERAAAIxDDAv+dHAxNLIqHXTlLwaiTAheBCXAguxIXgQlwILsSF4EJcCC7EheBCXAguxIXgQlwILsSF4EJcCC7EheBCXAguxIXgQlwILsSF4EJcCC7EheBCXAguxIXgQlwILsSF4EJcCC7EheBCXAguxIXgQlwILsSF4EJcCC7EheBCXAguxIXgQlwILsSF4EJcCC7EheBCXAguxIXgQlwILsSF4EJcCC7EheBCXAguxIXgQlwILsSF4EJcCC7EheBCXAguxIXgQlwILsSF4EJcCC7EheBCXAguxIXgQlwILsSF4EJcCC7EheBCXAguxIXgQlwILsSFEuBCcCEuBBfiQnAhLgQX4kJwIS4EF+JCcCEuBBfiQnAhLgQX4kJwIS4EF+JCcCEuBBfiQnAhLgQX4kJwIS4EF+JCcCEuBBfiQnAhLoSDBZXqBFnkRyeqAAAAAElFTkSuQmCC"/> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-inspect-iframe-from-different-domain.html b/third_party/WebKit/LayoutTests/inspector/elements/elements-inspect-iframe-from-different-domain.html deleted file mode 100644 index 480aa4b..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/elements-inspect-iframe-from-different-domain.html +++ /dev/null
@@ -1,86 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/console-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script> -var el1; -var el2; -function createDynamicElements() -{ - var mainDoc = document; - var frameDoc = window.frames[0].document; - - el1 = mainDoc.createElement('div'); - el1.id = "main-frame-div"; - el2 = frameDoc.createElement('div'); - el2.id = "iframe-div"; - - el1.innerHTML = 'Element created via <main document>.createElement'; - el2.innerHTML = 'Element created via <frame document>.createElement'; - - frameDoc.body.appendChild(el1); - frameDoc.body.appendChild(el2); -} - -function test() { - TestRunner.evaluateInPage('createDynamicElements()', step1); - - function selectedNodeId() { - var selectedElement = ElementsTestRunner.firstElementsTreeOutline().selectedTreeElement; - if (!selectedElement) - return '<no selected node>'; - return selectedElement.node().getAttribute('id'); - } - - function step1() { - ConsoleTestRunner.evaluateInConsole('inspect(el1)', step2); - } - - function step2() { - TestRunner.deprecatedRunAfterPendingDispatches(step3); - } - - function step3() { - var id = selectedNodeId(); - if (id === 'main-frame-div') - TestRunner.addResult('PASS: selected node with id \'' + id + '\''); - else - TestRunner.addResult('FAIL: unexpected selection ' + id); - // Frame was changed to the iframe. Moving back to the top frame. - ConsoleTestRunner.evaluateInConsole('inspect(window.frameElement.parentElement)', step4); - } - - function step4() { - TestRunner.deprecatedRunAfterPendingDispatches(step5); - } - - function step5() { - ConsoleTestRunner.evaluateInConsole('inspect(el2)', step6); - } - - function step6() { - TestRunner.deprecatedRunAfterPendingDispatches(step7); - } - - function step7() { - var id = selectedNodeId(); - if (id === 'iframe-div') - TestRunner.addResult('PASS: selected node with id \'' + id + '\''); - else - TestRunner.addResult('FAIL: unexpected selection ' + id); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p>Test that web inspector can select element in an iframe even if the element was created -via <code>createElement</code> of <code>document</code> other than iframe's <code>document</code>. -<a href="https://bugs.webkit.org/show_bug.cgi?id=60031">Bug 60031</a> -</p> -<iframe style="width:400px"></iframe> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-correct-case-expected.txt b/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-correct-case-expected.txt deleted file mode 100644 index 7613417..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-correct-case-expected.txt +++ /dev/null
@@ -1,26 +0,0 @@ -Tests that elements panel shows all types of elements in the correct case. - - - <!DOCTYPE html> -- <html> - - <head> - <link rel="stylesheet" type="text/css" href="resources/elements-panel-styles.css"> - <script src="../../http/tests/inspector/inspector-test.js"></script> - <script src="../../http/tests/inspector/elements-test.js"></script> - - <script> - function test() {\n ElementsTestRunner.expandElementsTree(step1);\n\n function step1() {\n ElementsTestRunner.dumpElementsTree();\n TestRunner.completeTest();\n }\n}\n - </script> - </head> - - <body onload="runTest()"> - <p>\nTests that elements panel shows all types of elements in the correct case.\n</p> - - <svg> - <feComposite></feComposite> - </svg> - - <svg> - <circle></circle> - </svg> - <div></div> - <div></div> - </body> - </html> -
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-correct-case.html b/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-correct-case.html deleted file mode 100644 index c9b42321..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-correct-case.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<link rel="stylesheet" type="text/css" href="resources/elements-panel-styles.css"> - -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script> -function test() { - ElementsTestRunner.expandElementsTree(step1); - - function step1() { - ElementsTestRunner.dumpElementsTree(); - TestRunner.completeTest(); - } -} -</script> -</head> -<body onload="runTest()"> -<p> -Tests that elements panel shows all types of elements in the correct case. -</p> -<svg> - <feComposite></feComposite> -</svg> -<svg> - <circle></circle> -</svg> -<DIv></DIv> -<DIV></DIV> -</body> -</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-limited-children.html b/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-limited-children.html deleted file mode 100644 index f824afc..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-limited-children.html +++ /dev/null
@@ -1,74 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script> - -function insertNode() -{ - var dataElement = document.getElementById("data"); - dataElement.appendChild(document.createElement("a")); - dataElement.removeChild(document.getElementById("id2")); - var aElement = document.createElement("a"); - dataElement.insertBefore(aElement, document.getElementById("id1")); - dataElement.appendChild(aElement); - dataElement.insertBefore(aElement, document.getElementById("id1")); -} - -function test() { - var dataTreeElement; - ElementsTestRunner.nodeWithId('data', step1); - - function step1(node) { - dataTreeElement = ElementsTestRunner.firstElementsTreeOutline().findTreeElement(node); - dataTreeElement._expandedChildrenLimit = 5; - dataTreeElement.reveal(); - dataTreeElement.expand(); - TestRunner.deprecatedRunAfterPendingDispatches(step2); - } - - function step2() { - TestRunner.addResult('=========== Loaded 5 children ==========='); - dumpElementsTree(); - TestRunner.addSniffer(Elements.ElementsTreeOutline.prototype, '_updateModifiedNodes', step3); - TestRunner.evaluateInPage('insertNode()'); - } - - function step3() { - TestRunner.addResult('=========== Modified children ==========='); - dumpElementsTree(); - dataTreeElement.expandAllButtonElement.button.click(); - TestRunner.deprecatedRunAfterPendingDispatches(step4); - } - - function step4() { - TestRunner.addResult('=========== Loaded all children ==========='); - dumpElementsTree(); - TestRunner.completeTest(); - } - - function dumpElementsTree() { - ElementsTestRunner.dumpElementsTree(null, 0); - } -} -</script> -</head> - -<body onload="runTest()"> -<div id="data"> -<div id="id1">1</div> -<div id="id2">2</div> -<div id="id3">3</div> -<div id="id4">4</div> -<div id="id5">5</div> -<div id="id6">6</div> -<div id="id7">7</div> -<div id="id8">8</div> -<div id="id9">9</div> -<div id="id10">10</div> -</div> -<p> -Tests that src and href element targets are rewritten properly. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-reload-assert.html b/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-reload-assert.html deleted file mode 100644 index 60f7838..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-reload-assert.html +++ /dev/null
@@ -1,31 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.expandElementsTree(step1); - - function step1() { - TestRunner.reloadPage(step2); - } - - function step2() { - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that the inspected page does not crash in a debug build when reloading a page containing shadow DOM with open inspector. <a href="https://bugs.webkit.org/show_bug.cgi?id=84154">Bug 84154</a>. -</p> - -<input type="radio"> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-restore-selection-when-node-comes-later.html b/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-restore-selection-when-node-comes-later.html deleted file mode 100644 index a337ee4..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-restore-selection-when-node-comes-later.html +++ /dev/null
@@ -1,98 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script src="./shadow/elements-panel-shadow-selection-on-refresh.js"></script> -<script> - -function test() { - var node; - - TestRunner.runTestSuite([ - function selectNode(next) { - ElementsTestRunner.nodeWithId('inspected', onNodeFound); - - function onNodeFound(n) { - node = n; - ElementsTestRunner.selectNode(node).then(onNodeSelected); - } - - function onNodeSelected() { - dumpSelectedNode(); - next(); - } - }, - - function firstReloadWithoutNodeInDOM(next) { - TestRunner.addSniffer(Elements.ElementsPanel.prototype, '_lastSelectedNodeSelectedForTest', onNodeRestored); - // Do a reload and pretend page's DOM doesn't have a node to restore. - overridePushNodeForPath(node.path()); - TestRunner.reloadPage(function() {}); - - function onNodeRestored() { - dumpSelectedNode(); - next(); - } - }, - - function secondReloadWithNodeInDOM(next) { - var pageReloaded = false; - var nodeRestored = false; - TestRunner.addSniffer(Elements.ElementsPanel.prototype, '_lastSelectedNodeSelectedForTest', onNodeRestored); - TestRunner.reloadPage(onPageReloaded); - - function onPageReloaded() { - pageReloaded = true; - maybeNext(); - } - - function onNodeRestored() { - nodeRestored = true; - maybeNext(); - } - - function maybeNext() { - if (!nodeRestored || !pageReloaded) - return; - dumpSelectedNode(); - next(); - } - }, - - ]); - - function dumpSelectedNode() { - var selectedElement = ElementsTestRunner.firstElementsTreeOutline().selectedTreeElement; - var nodeName = selectedElement ? selectedElement.node().nodeNameInCorrectCase() : 'null'; - TestRunner.addResult('Selected node: \'' + nodeName + '\''); - } - - /** - * @param {string} pathToIgnore - */ - function overridePushNodeForPath(pathToIgnore) { - var original = TestRunner.override(SDK.DOMModel.prototype, 'pushNodeByPathToFrontend', override); - - function override(nodePath, callback) { - if (nodePath === pathToIgnore) { - setTimeout(callback.bind(null), 0); - return; - } - original(nodePath, callback); - } - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Verify that last selected element is restored properly later, even if -it failed to do so once. -</p> -<div> - <span id="inspected"></span> -</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-rewrite-href-expected.txt b/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-rewrite-href-expected.txt deleted file mode 100644 index 67fdede..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-rewrite-href-expected.txt +++ /dev/null
@@ -1,12 +0,0 @@ -Tests that src and href element targets are rewritten properly. - - - javascript:alert('foo') -,bogusSheet1.css -http://127.0.0.1/script.js -http://127.0.0.1/stylesheet.css -http://127.0.0.1/target.html -inspector,elements,bogusSheet2.css -tests,inspector,elements-test.js -tests,inspector,inspector-test.js -
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-rewrite-href.html b/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-rewrite-href.html deleted file mode 100644 index 18b0d43..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-rewrite-href.html +++ /dev/null
@@ -1,60 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html> -<head> -<link rel="stylesheet" src="/bogusSheet1.css"> -<link rel="stylesheet" src="bogusSheet2.css"> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.expandElementsTree(step1); - - function step1() { - var innerMapping = TestRunner.domModel._idToDOMNode; - - var outputLines = []; - for (var nodeId in innerMapping) { - var node = innerMapping[nodeId]; - if (node.nodeName() === 'LINK' || node.nodeName() === 'SCRIPT') { - var segments = []; - var href = node.resolveURL(node.getAttribute('src') || node.getAttribute('href')); - if (!href) { - segments.push('<empty>'); - continue; - } - if (href.startsWith('http:')) { - outputLines.push(href); - continue; - } - var parsedURL = href.asParsedURL(); - if (!parsedURL) { - testController.notifyDone('FAIL: no URL match for <' + href + '>'); - continue; - } - var split = parsedURL.path.split('/'); - for (var i = split.length - 1, j = 0; j < 3 && i >= 0; --i, ++j) - segments.push(split[i]); - outputLines.push(segments.reverse()); - } - if (node.nodeName() === 'A') - outputLines.push(node.resolveURL(node.getAttribute('href'))); - } - outputLines.sort(); - TestRunner.addResult(outputLines.join('\n')); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body> -<p> -Tests that src and href element targets are rewritten properly. -</p> - -<a style="display:none" href=" javascript:alert('foo') "></a> -<iframe src="resources/elements-panel-rewrite-href-iframe.html" onload="runTest()"></iframe> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-search.html b/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-search.html deleted file mode 100644 index 1ac6c9f..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-search.html +++ /dev/null
@@ -1,285 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html id="documentElement"> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script> -function initializeShadowDOM() -{ - var shadow = document.querySelector('#shadow-host').createShadowRoot(); - var template = document.querySelector('#shadow-dom-template'); - - // Avoid matching this function - shadow.appendChild(template.content.cloneNode(true)); -} - -function test() { - var omitInnerHTML; - - async function searchCallback(next, resultCount) { - if (resultCount == 0) { - TestRunner.addResult('Nothing found'); - SDK.DOMModel.cancelSearch(); - next(); - return; - } - - for (var i = 0; i < resultCount; ++i) { - var node = await TestRunner.domModel.searchResult(i); - var markupVa_lue = await node.getOuterHTML(); - if (omitInnerHTML) - markupVa_lue = markupVa_lue.substr(0, markupVa_lue.indexOf('>') + 1); - TestRunner.addResult(markupVa_lue.split('').join(' ')); - } - - SDK.DOMModel.cancelSearch(); - next(); - } - - function setUp(next) { - TestRunner.domModel.requestDocument(step2); - - function step2() { - TestRunner.evaluateInPage('initializeShadowDOM()', next); - } - } - - TestRunner.runTestSuite([ - function testSetUp(next) { - setUp(next); - }, - - function testPlainText(next) { - TestRunner.domModel - .performSearch( - 'Fo' + - 'o' + - 'Bar', - false) - .then(searchCallback.bind(this, next)); - }, - - function testPartialText(next) { - TestRunner.domModel - .performSearch( - 'oo' + - 'Ba', - false) - .then(searchCallback.bind(this, next)); - }, - - function testStartTag(next) { - TestRunner.domModel - .performSearch( - '<inpu' + - 't', - false) - .then(searchCallback.bind(this, next)); - }, - - function testEndTag(next) { - TestRunner.domModel - .performSearch( - 'npu' + - 't>', - false) - .then(searchCallback.bind(this, next)); - }, - - function testPartialTag(next) { - TestRunner.domModel - .performSearch( - 'npu' + - 't', - false) - .then(searchCallback.bind(this, next)); - }, - - function testPartialAbsentTagStart(next) { - TestRunner.domModel - .performSearch( - '<npu' + - 't', - false) - .then(searchCallback.bind(this, next)); - }, - - function testPartialAbsentTagEnd(next) { - TestRunner.domModel - .performSearch( - 'npu' + - '>', - false) - .then(searchCallback.bind(this, next)); - }, - - function testFullTag(next) { - TestRunner.domModel - .performSearch( - '<inpu' + - 't>', - false) - .then(searchCallback.bind(this, next)); - }, - - function testExactAttributeName(next) { - TestRunner.domModel - .performSearch( - 'valu' + - 'e', - false) - .then(searchCallback.bind(this, next)); - }, - - function testExactAttributeVal_ue(next) { - TestRunner.domModel - .performSearch( - 'In' + - 'putVa' + - 'l', - false) - .then(searchCallback.bind(this, next)); - }, - - function testExactAttributeVal_ueOnRoot(next) { - omitInnerHTML = true; - TestRunner.domModel - .performSearch( - 'documen' + - 'tElement', - false) - .then(searchCallback.bind(this, next)); - }, - - function testExactAttributeVal_ueWithQuotes(next) { - omitInnerHTML = false; - TestRunner.domModel - .performSearch( - '"fo' + - 'o"', - false) - .then(searchCallback.bind(this, next)); - }, - - function testPartialAttributeVal_ue(next) { - TestRunner.domModel - .performSearch( - 'n' + - 'putVa' + - 'l', - false) - .then(searchCallback.bind(this, next)); - }, - - function testXPathAttribute(next) { - TestRunner.domModel - .performSearch( - '//html' + - '//@attr', - false) - .then(searchCallback.bind(this, next)); - }, - - function testSelector(next) { - TestRunner.domModel - .performSearch( - 'd' + - 'iv.divclass span', - false) - .then(searchCallback.bind(this, next)); - }, - - function testCaseUpperFindsLower(next) { - TestRunner.domModel - .performSearch( - 'K' + - 'OO', - false) - .then(searchCallback.bind(this, next)); - }, - - function testCaseLowerFindsUpper(next) { - TestRunner.domModel - .performSearch( - 'c' + - 'aseless', - false) - .then(searchCallback.bind(this, next)); - }, - - function testCaseAttribute(next) { - TestRunner.domModel - .performSearch( - 'C' + - 'AMEL', - false) - .then(searchCallback.bind(this, next)); - }, - - function testSearchShadowDOM(next) { - TestRunner.domModel - .performSearch( - '<c' + - 'ontent', - false) - .then(searchCallback.bind(this, next)); - }, - - function testSearchUAShadowDOM(next) { - TestRunner.addResult('Searching UA shadow DOM with setting disabled:'); - TestRunner.domModel - .performSearch( - 'inne' + - 'r-editor', - false) - .then(searchCallback.bind(this, step2)); - - function step2() { - TestRunner.addResult('Searching UA shadow DOM with setting enabled:'); - TestRunner.domModel - .performSearch( - 'inne' + - 'r-editor', - true) - .then(searchCallback.bind(this, next)); - } - }, - - function testSearchShadowHostChildren(next) { - TestRunner.domModel - .performSearch( - 'shadow-host-c' + - 'ontent', - false) - .then(searchCallback.bind(this, next)); - }, - ]); -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that elements panel search is returning proper results. -</p> - -<div>FooBar</div> -<input value="InputVal"> -<div attr="foo"></div> -<div id="terminator"></div> -<div class="divclass"><span>Found by selector</span></div> -<span class="foo koo"></span> -<span class="CASELESS"></span> -<span data-camel="insenstive"></span> -<div id="shadow-host"> - <div id="shadow-host-content"></div> -</div> -<template id="shadow-dom-template"> - <div id="shadow-dom-outer"> - <content></content> - </div> -</div> -</template> -<textarea></textarea> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-selection-after-delete.html b/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-selection-after-delete.html deleted file mode 100644 index 69ea07a..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-selection-after-delete.html +++ /dev/null
@@ -1,166 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script> - -function prepareTestTree() -{ - var template = document.querySelector("#testTree"); - var testTreeContainer = document.querySelector("#testTreeContainer"); - testTreeContainer.textContent = ""; - testTreeContainer.appendChild(document.importNode(template.content, true)); -} - -function test() { - function selectNode(className, callback) { - var selector = '#testTreeContainer .' + className; - ElementsTestRunner.querySelector(selector, gotNode); - - function gotNode(node) { - ElementsTestRunner.selectNode(node).then(callback); - } - } - - function nodeToString(node) { - if (!node) - return 'null'; - var result = '<' + node.nodeName(); - var attributes = node.attributes(); - for (var attribute of attributes) { - result += ' ' + attribute.name; - if (attribute.value) - result += '="' + attribute.value + '"'; - } - result += '>'; - return result; - } - - function prepareTestTree(callback) { - TestRunner.evaluateInPage('prepareTestTree()', callback); - } - - function removeElementAsUser(element, callback) { - TestRunner.addSniffer(Elements.ElementsTreeOutline.prototype, '_updateModifiedNodes', callback); - element.remove(); - } - - function removeElementExternally(element, callback) { - var node = element.node(); - TestRunner.addSniffer(Elements.ElementsTreeOutline.prototype, '_updateChildren', callback); - node.removeNode(); - } - - function dumpSelectedNode() { - var selectedElement = ElementsTestRunner.firstElementsTreeOutline().selectedTreeElement; - var selectedNode = selectedElement ? selectedElement.node() : null; - TestRunner.addResult('The following node is now selected: ' + nodeToString(selectedNode)); - } - - TestRunner.runTestSuite([ - function testUserDelete(next) { - prepareTestTree(step2); - - function step2() { - TestRunner.addResult('Selecting node...'); - selectNode('child2', step3); - } - - function step3() { - dumpSelectedNode(); - - TestRunner.addResult('Deleting selected node like it was a user action...'); - var selectedElement = ElementsTestRunner.firstElementsTreeOutline().selectedTreeElement; - removeElementAsUser(selectedElement, step4); - } - - function step4() { - dumpSelectedNode(); - - TestRunner.addResult('Deleting selected node like it was a user action again...'); - var selectedElement = ElementsTestRunner.firstElementsTreeOutline().selectedTreeElement; - removeElementAsUser(selectedElement, step5); - } - - function step5() { - dumpSelectedNode(); - - TestRunner.addResult('Deleting last child like it was a user action...'); - var selectedElement = ElementsTestRunner.firstElementsTreeOutline().selectedTreeElement; - removeElementAsUser(selectedElement, step6); - } - - function step6() { - dumpSelectedNode(); - next(); - } - }, - - function testExternalDelete(next) { - // We should wait for container node to be updated since it is already populated. - TestRunner.addSniffer(Elements.ElementsTreeOutline.prototype, '_updateModifiedNodes', step2); - prepareTestTree(); - - function step2() { - TestRunner.addResult('Selecting node...'); - selectNode('child2', step3); - } - - function step3() { - dumpSelectedNode(); - - TestRunner.addResult('Deleting selected node externally...'); - var selectedElement = ElementsTestRunner.firstElementsTreeOutline().selectedTreeElement; - removeElementExternally(selectedElement, step4); - } - - function step4() { - dumpSelectedNode(); - - TestRunner.addResult('Deleting selected node externally again...'); - var selectedElement = ElementsTestRunner.firstElementsTreeOutline().selectedTreeElement; - removeElementExternally(selectedElement, step5); - } - - function step5() { - dumpSelectedNode(); - - TestRunner.addResult('Deleting last child externally...'); - var selectedElement = ElementsTestRunner.firstElementsTreeOutline().selectedTreeElement; - removeElementExternally(selectedElement, step6); - } - - function step6() { - dumpSelectedNode(); - next(); - } - }, - ]); -} - -</script> -</head> -<body onload="runTest()"> -<p>Tests that elements panel correctly updates selection on node removal.</p> -<template id="testTree"> - <div class="left"> - <div class="child1"> - </div> - <div class="child2"> - <div class="child5"> - </div> - <div class="child6"> - </div> - <div class="child7"> - </div> - <div class="child8"> - </div> - </div> - <div class="child3"> - </div> - </div> -</template> -<div id="testTreeContainer"> -</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-selection-on-refresh.html b/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-selection-on-refresh.html deleted file mode 100644 index 0628ca30..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-selection-on-refresh.html +++ /dev/null
@@ -1,36 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeWithId('test-topic', step1); - - function step1() { - TestRunner.reloadPage(step2); - } - - function step2() { - TestRunner.deprecatedRunAfterPendingDispatches(step3); - } - - function step3() { - // We should have "test-topic" element selected after refresh. - var selectedElement = ElementsTestRunner.firstElementsTreeOutline().selectedTreeElement; - var nodeName = selectedElement ? selectedElement.node().nodeName() : 'null'; - TestRunner.addResult('Selected element should be \'P\', was: \'' + nodeName + '\''); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p id="test-topic"> -Tests that elements panel preserves selected node on page refresh. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-structure-expected.txt b/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-structure-expected.txt deleted file mode 100644 index cb2d7f8e..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-structure-expected.txt +++ /dev/null
@@ -1,25 +0,0 @@ -Tests that elements panel shows DOM tree structure. - -"Quoted Text". Special characters: ><"' - - <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -- <html> - - <head> - <script src="../../http/tests/inspector/inspector-test.js"></script> - <script src="../../http/tests/inspector/elements-test.js"></script> - - <script> - \nfunction test() {\n // Warm up highlighter module.\n runtime.loadModulePromise('source_frame').then(function() {\n ElementsTestRunner.expandElementsTree(step1);\n });\n\n function step1() {\n ElementsTestRunner.dumpElementsTree();\n TestRunner.completeTest();\n }\n}\n\nfunction prepareTest()\n{\n document.querySelector("#control-character").textContent = "\ufeff\u0093";\n runTest();\n}\n\n - </script> - </head> - - <body onload="prepareTest()"> - <p>\nTests that elements panel shows DOM tree structure.\n</p> - - <div id="level1"> - - <div id="level2"> - ""Quoted Text". Special characters: ><"'     ​‌‍‎‏ ‪‫‬‭‮­" - <div id="level3"></div> - </div> - </div> - <div id="control-character">“</div> - </body> - </html> -
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-structure.html b/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-structure.html deleted file mode 100644 index 5020594..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-structure.html +++ /dev/null
@@ -1,41 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - // Warm up highlighter module. - runtime.loadModulePromise('source_frame').then(function() { - ElementsTestRunner.expandElementsTree(step1); - }); - - function step1() { - ElementsTestRunner.dumpElementsTree(); - TestRunner.completeTest(); - } -} - -function prepareTest() -{ - document.querySelector("#control-character").textContent = "\ufeff\u0093"; - runTest(); -} - -</script> -</head> - -<body onload="prepareTest()"> -<p> -Tests that elements panel shows DOM tree structure. -</p> - -<div id="level1"> - <div id="level2">"Quoted Text". Special characters: ><"'     ​‌‍‎‏ ‪‫‬‭‮­<div id="level3"></div> - </div> -</div> -<div id="control-character"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-xhtml-structure-expected.txt b/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-xhtml-structure-expected.txt deleted file mode 100644 index 8e4448b9..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-xhtml-structure-expected.txt +++ /dev/null
@@ -1,29 +0,0 @@ -Tests that elements panel shows XML dom tree structure with closing tags for all elements. - -Paragraph BR test -Next line - - -- <HTML xmlns="http://www.w3.org/1999/xhtml"> - - <Head> - <script src="../../http/tests/inspector/inspector-test.js"></script> - <script src="../../http/tests/inspector/elements-test.js"></script> - - <script> - <![CDATA[function test(){ ElementsTestRunner.expandElementsTree(step1); function step1() { ElementsTestRunner.dumpElementsTree(); TestRunner.completeTest(); }}]]> - </script> - </Head> - - <body onload="runTest()"> - - <p> - "Tests that elements panel shows XML dom tree structure with closing tags for all elements." - </p> - <hr></hr> - - <p> - "Paragraph BR test" - <br></br> - "Next line" - </p> - <![CDATA[ CData Content ]]> - <img alt="Random Image"></img> - </body> - </HTML> -
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-xhtml-structure.xhtml-disabled b/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-xhtml-structure.xhtml-disabled deleted file mode 100644 index 81f9a88..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/elements-panel-xhtml-structure.xhtml-disabled +++ /dev/null
@@ -1,34 +0,0 @@ -<HTML xmlns="http://www.w3.org/1999/xhtml"> -<Head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script> -<![CDATA[ -function test() -{ - InspectorTest.expandElementsTree(step1); - - function step1() - { - InspectorTest.dumpElementsTree(); - InspectorTest.completeTest(); - } -} -]]> -</script> -</Head> - -<body onload="runTest()"> -<p> -Tests that elements panel shows XML dom tree structure with closing tags for all elements. -</p> - -<hr></hr> -<p>Paragraph BR test<br/>Next line -</p> -<![CDATA[ CData Content ]]> - -<img alt="Random Image"></img> - -</body> -</HTML>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-tab-stops.html b/third_party/WebKit/LayoutTests/inspector/elements/elements-tab-stops.html deleted file mode 100644 index 06922cc..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/elements-tab-stops.html +++ /dev/null
@@ -1,67 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script type="text/javascript"> - -var test = function() { - - var maxElements = 1000; - var elements = 0; - - // Make sure the sidebar is loaded - - // make sure the tree is loaded - ElementsTestRunner.selectNodeAndWaitForStyles('node-to-select', nodeSelected); - function nodeSelected() { - eventSender.keyDown('Tab'); - var startElement = document.deepActiveElement(); - do { - dumpFocus(); - eventSender.keyDown('Tab'); - elements++; - } while (startElement !== document.deepActiveElement() && elements < maxElements); - - TestRunner.addResult(''); - TestRunner.addResult('Shift+Tab:'); - TestRunner.addResult(''); - startElement = document.deepActiveElement(); - do { - dumpFocus(); - eventSender.keyDown('Tab', ['shiftKey']); - elements++; - } while (startElement !== document.deepActiveElement() && elements < maxElements); - - if (elements >= maxElements) - TestRunner.addResult('FAIL: Unable to complete tab stop cycle.'); - - TestRunner.completeTest(); - } - - function dumpFocus() { - var element = document.deepActiveElement(); - if (!element) { - TestRunner.addResult('null'); - return; - } - var name = element.tagName; - if (element.id) - name += '#' + element.id; - if (element.getAttribute('aria-label')) - name += ':' + element.getAttribute('aria-label'); - else if (element.title) - name += ':' + element.title; - else if (element.textContent && element.textContent.length < 50) { - name += ':' + element.textContent.replace('\u200B', ''); - } else if (element.className) - name += '.' + element.className.split(' ').join('.'); - TestRunner.addResult(name); - } -}; -</script> -</head> -<body onload="runTest()"> -<p>Tests what elements have focus after pressing tab.</p> -<span id="node-to-select"></span> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/elements-treeoutline-copy.html b/third_party/WebKit/LayoutTests/inspector/elements/elements-treeoutline-copy.html deleted file mode 100644 index 03c70f0..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/elements-treeoutline-copy.html +++ /dev/null
@@ -1,30 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script type="text/javascript"> - -var test = function() { - - // make sure the tree is loaded - ElementsTestRunner.selectNodeAndWaitForStyles('node-to-copy', nodeSelected); - var input = document.body.createChild('input'); - - function nodeSelected() { - eventSender.keyDown('Copy'); - input.focus(); - setTimeout(next, 0); - } - function next() { - eventSender.keyDown('Paste'); - TestRunner.addResult(input.value); - TestRunner.completeTest(); - } -}; -</script> -</head> -<body onload="runTest()"> -<p>Tests that nodes can be copied in ElementsTreeOutline.</p> -<span id="node-to-copy">This should be <b>copied</b>.</span> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/event-listener-sidebar-custom-framework.html b/third_party/WebKit/LayoutTests/inspector/elements/event-listener-sidebar-custom-framework.html deleted file mode 100644 index ceb806e..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/event-listener-sidebar-custom-framework.html +++ /dev/null
@@ -1,136 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script src="../../http/tests/inspector/console-test.js"></script> -<script> -function setupNormalPath() -{ - var inspectedNode = document.getElementById("inspectedNode"); - - inspectedNode.addEventListener("click", internalHandler); - - function customFirstEventListener(e) - { - console.log("I'm first custom event listener"); - } - - function customSecondEventListener(e) - { - console.log("I'm second custom event listener"); - } - - function internalHandler(e) - { - console.log("I'm internal event handler"); - if (e.type === "customFirst") - customFirstEventListener(e); - if (e.type === "customSecond") - customSecondEventListener(e); - } - - // Example of API usage. - window.devtoolsFrameworkEventListeners = window.devtoolsFrameworkEventListeners || []; - window.devtoolsFrameworkEventListeners.push(frameworkEventListeners); - - function frameworkEventListeners(node) - { - if (node === inspectedNode) { - return {eventListeners: [{type: "customFirst", useCapture: true, passive: false, once: false, handler: customFirstEventListener}, - {type: "customSecond", useCapture: false, passive: false, once: false, handler: customSecondEventListener}], - internalHandlers: [internalHandler]}; - } - return {eventListeners: []}; - } -} - -function setupExceptionInGetter() -{ - Object.defineProperty(window, "devtoolsFrameworkEventListeners", { get: function() { throw "Error in getter" }}); -} - -function setupReturnIncorrectResult() -{ - window.devtoolsFrameworkEventListeners = window.devtoolsFrameworkEventListeners || []; - window.devtoolsFrameworkEventListeners.push(frameworkEventListenersWithException); - window.devtoolsFrameworkEventListeners.push(function(){ return null; }); - window.devtoolsFrameworkEventListeners.push(function(){ return undefined; }); - window.devtoolsFrameworkEventListeners.push(function(){ return {}; }); - window.devtoolsFrameworkEventListeners.push(function(){ return {eventListeners: null}; }); - window.devtoolsFrameworkEventListeners.push(function(){ return {eventListeners: undefined}; }); - window.devtoolsFrameworkEventListeners.push(function(){ return {eventListeners: [], internalHandlers: null}; }); - window.devtoolsFrameworkEventListeners.push(function(){ return {eventListeners: [], internalHandlers: undefined}; }); - window.devtoolsFrameworkEventListeners.push(function(){ return {eventListeners: [], internalHandlers: [undefined, null]}; }); - window.devtoolsFrameworkEventListeners.push(returnFrameworkEventListenersWithGetter); - window.devtoolsFrameworkEventListeners.push(returnIncrrectEventListeners); - - function frameworkEventListenersWithException() - { - throw "Error in fetcher"; - } - - function returnFrameworkEventListenersWithGetter() - { - var obj = {}; - Object.defineProperty(obj, "eventListeners", { get: function() { throw "Error in getter" }}); - return obj; - } - - function returnIncrrectEventListeners() - { - var listeners = []; - listeners.push({}); - var listener = {type: "type", useCapture: true}; - Object.defineProperty(listener, "handler", { get: function() { throw "Error in getter" }}); - listeners.push(listener); - listener = {type: "type", handler: (function(){})}; - Object.defineProperty(listener, "useCapture", { get: function() { throw "Error in getter"}}); - listeners.push(listener); - return {eventListeners: listeners, internalHandlers: [239, null, undefined]}; - } -} - -function test() { - Common.settingForTest('showEventListenersForAncestors').set(false); - ElementsTestRunner.selectNodeWithId('inspectedNode', step1); - - function step1() { - TestRunner.addResult('== Incorrect fetchers'); - ElementsTestRunner.expandAndDumpSelectedElementEventListeners(step2); - } - - function step2() { - TestRunner.evaluateInPage('setupExceptionInGetter()', step3); - } - - function step3() { - ElementsTestRunner.selectNodeWithId('inspectedNode', step4); - } - - function step4() { - TestRunner.addResult('== Exception in fetchers\' getter'); - ElementsTestRunner.expandAndDumpSelectedElementEventListeners(step5); - ElementsTestRunner.eventListenersWidget().doUpdate(); - } - - function step5() { - ConsoleTestRunner.dumpConsoleMessages(false, false, TestRunner.textContentWithLineBreaks); - TestRunner.completeTest(); - } -} - -function onloadHandler() -{ - setupReturnIncorrectResult(); - setupNormalPath(); - runTest(); -} -</script> -</head> -<body onload="onloadHandler()"> -<p> -Tests framework event listeners output in the Elements sidebar panel. -</p> -<button id="inspectedNode">Inspect Me</button> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/event-listener-sidebar-jquery1.html b/third_party/WebKit/LayoutTests/inspector/elements/event-listener-sidebar-jquery1.html deleted file mode 100644 index 0da0d4d..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/event-listener-sidebar-jquery1.html +++ /dev/null
@@ -1,40 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script src="resources/jquery-1.11.3.min.js"></script> -<script> -function setupEventListeners() -{ - var node = $("#node")[0]; - $("#node").click(function(){ console.log("first jquery"); }); - $("#node").click(function(){ console.log("second jquery"); }); - node.addEventListener("click", function() { console.log("addEventListener"); }); -} - -function test() { - Common.settingForTest('showEventListenersForAncestors').set(true); - ElementsTestRunner.selectNodeWithId('node', step1); - - function step1() { - ElementsTestRunner.showEventListenersWidget(); - ElementsTestRunner.expandAndDumpSelectedElementEventListeners(TestRunner.completeTest.bind(this)); - } -} - -function onloadHandler() -{ - setupEventListeners(); - runTest(); -} -</script> -</head> - - -<body onload="onloadHandler()"> -<p> -Tests event listeners output in the Elements sidebar panel. -</p> -<button id="node">Inspect Me</button> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/event-listener-sidebar-jquery2.html b/third_party/WebKit/LayoutTests/inspector/elements/event-listener-sidebar-jquery2.html deleted file mode 100644 index d3b718c..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/event-listener-sidebar-jquery2.html +++ /dev/null
@@ -1,55 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script src="resources/jquery-2.1.4.min.js"></script> -<script> -function setupEventListeners() -{ - var node = $("#node")[0]; - $("#node").click(function(){ console.log("first jquery"); }); - $("#node").click(function(){ console.log("second jquery"); }); - node.addEventListener("click", function() { console.log("addEventListener"); }); - node.onclick = function() { console.log("onclick"); } -} - -function test() { - Common.settingForTest('showEventListenersForAncestors').set(true); - ElementsTestRunner.selectNodeWithId('node', step1); - - function step1() { - ElementsTestRunner.showEventListenersWidget(); - ElementsTestRunner.expandAndDumpSelectedElementEventListeners(step2); - } - - function step2() { - TestRunner.addResult('Remove listeners..'); - var eventListenersWidget = ElementsTestRunner.eventListenersWidget(); - var listenerTypes = eventListenersWidget._eventListenersView._treeOutline.rootElement().children(); - var promises = []; - for (var i in listenerTypes) { - var listenersItems = listenerTypes[i].children(); - for (var j in listenersItems) - promises.push(listenersItems[j].eventListener().remove()); - } - ElementsTestRunner.expandAndDumpSelectedElementEventListeners(TestRunner.completeTest.bind(this)); - Promise.all(promises).then(() => eventListenersWidget.doUpdate()); - } -} - - -function onloadHandler() -{ - setupEventListeners(); - runTest(); -} -</script> -</head> - -<body onload="onloadHandler()"> -<p> -Tests event listeners output in the Elements sidebar panel. -</p> -<button id="node">Inspect Me</button> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/event-listener-sidebar-remove.html b/third_party/WebKit/LayoutTests/inspector/elements/event-listener-sidebar-remove.html deleted file mode 100644 index 179b8d23..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/event-listener-sidebar-remove.html +++ /dev/null
@@ -1,68 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script> - -function setupEventListeners() -{ - function f() {} - function g() {} - var button = document.getElementById("node"); - button.addEventListener("click", f, false); - button.addEventListener("mouseover", f, false); - var sibling = document.getElementById("node-sibling"); - sibling.addEventListener("click", g, false); - sibling.addEventListener("mouseover", g, false); -} - -function test() { - Common.settingForTest('showEventListenersForAncestors').set(false); - - - function step1() { - ElementsTestRunner.selectNodeWithId('node', function() { - ElementsTestRunner.expandAndDumpSelectedElementEventListeners(step2); - }); - } - - function step2() { - ElementsTestRunner.removeFirstEventListener(); - TestRunner.addResult('Listeners after removal:'); - ElementsTestRunner.expandAndDumpSelectedElementEventListeners(step3, true); - } - - function step3() { - ElementsTestRunner.selectNodeWithId('node-sibling', function() { - TestRunner.addResult('Listeners for sibling node:'); - ElementsTestRunner.expandAndDumpSelectedElementEventListeners(step4); - }); - } - - function step4() { - TestRunner.completeTest(); - } - - step1(); -} - -function onloadHandler() -{ - setupEventListeners(); - runTest(); -} -</script> -</head> - - - -<body onload="onloadHandler()"> -<p> -Tests removing event listeners in the Elements sidebar panel. -</p> - -<button id="node">Inspect Me</button> -<button id="node-sibling">Inspect Sibling</button> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/event-listener-sidebar.html b/third_party/WebKit/LayoutTests/inspector/elements/event-listener-sidebar.html deleted file mode 100644 index b2bdf4c..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/event-listener-sidebar.html +++ /dev/null
@@ -1,81 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script> -function documentClickHandler(event) { console.log("click - document - attribute"); } - -function setupEventListeners() -{ - function f() {} - var button = document.getElementById("node"); - function clickHandler(event) { console.log("click - button - bubbling (registered before attribute)"); } - button.addEventListener("click", clickHandler, false); - button.addEventListener("hover", function hoverHandler(event) { console.log("hover - button - bubbling"); }, false); - button.addEventListener("click", function(event) { console.log("click - button - capturing"); }, true); - button.onclick = function(event) { console.log("click - button - attribute"); } - button.addEventListener("click", function(event) { console.log("click - button - bubbling (registered after attribute)"); }, false); - document.onclick = documentClickHandler; - document.addEventListener("click", function(event) { console.log("click - document - capturing"); }, true); - document.addEventListener("mousedown", f, false); - document.removeEventListener("mousedown", f, false); - - document.body.addEventListener("custom event", f, {capture: true, once: true}); - - function ObjectHandler() { document.addEventListener("click", this, true); } - ObjectHandler.prototype.toString = function() { return "ObjectHandler"; } - new ObjectHandler(); - - function EventListenerImpl() { document.addEventListener("click", this, true); } - EventListenerImpl.prototype.toString = function() { return "EventListenerImpl"; } - EventListenerImpl.prototype.handleEvent = function() { console.log("click - document - handleEvent"); } - new EventListenerImpl(); - document.body.addEventListener("wheel", f, {"passive": true}); - document.body.addEventListener("wheel", f, {"passive": true, "capture": true}); - document.body.removeEventListener("wheel", f, {"passive": true, "capture": true}); -} - -function test() { - Common.settingForTest('showEventListenersForAncestors').set(true); - ElementsTestRunner.selectNodeWithId('node', step1); - - function step1() { - ElementsTestRunner.expandAndDumpSelectedElementEventListeners(step2); - } - - function step2() { - ElementsTestRunner.selectNodeWithId('node-without-listeners', step3); - } - - function step3() { - Common.settingForTest('showEventListenersForAncestors').set(false); - TestRunner.addResult('Listeners for selected node only(should be no listeners):'); - ElementsTestRunner.expandAndDumpSelectedElementEventListeners(step4); - } - - function step4() { - TestRunner.completeTest(); - } -} - -function onloadHandler() -{ - setupEventListeners(); - runTest(); -} -</script> -</head> - - - -<body onload="onloadHandler()"> -<p> -Tests event listeners output in the Elements sidebar panel. -</p> - -<button id="node">Inspect Me</button> - -<div id="node-without-listeners"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/event-listeners-about-blank.html b/third_party/WebKit/LayoutTests/inspector/elements/event-listeners-about-blank.html deleted file mode 100644 index 9425249..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/event-listeners-about-blank.html +++ /dev/null
@@ -1,44 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script> - -function setupEventListeners() -{ - function f() {} - var frame = document.getElementById("myframe"); - var body = frame.contentDocument.body; - body.addEventListener("click", f, true); - var div = frame.contentDocument.createElement("div"); - div.id = "div-in-iframe"; - div.addEventListener("hover", f, {capture: true, once: true}); - body.appendChild(div); - body.addEventListener("wheel", f, {"passive": true}); -} - -function test() { - Common.settingForTest('showEventListenersForAncestors').set(true); - TestRunner.evaluateInPage('setupEventListeners()', step1); - - function step1() { - ElementsTestRunner.selectNodeWithId('div-in-iframe', step2); - } - - function step2() { - ElementsTestRunner.expandAndDumpSelectedElementEventListeners(TestRunner.completeTest.bind(InspectorTest)); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests event listeners output in the Elements sidebar panel when the listeners are added on an element in about:blank page. -</p> - -<iframe id="myframe"></iframe> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/expand-recursively.html b/third_party/WebKit/LayoutTests/inspector/elements/expand-recursively.html deleted file mode 100644 index d6237348..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/expand-recursively.html +++ /dev/null
@@ -1,64 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - var treeOutline = ElementsTestRunner.firstElementsTreeOutline(); - ElementsTestRunner.findNode(function() { - return false; - }, firstStep); - - function firstStep() { - TestRunner.addResult('===== Initial state of tree outline =====\n'); - dump(); - - var topNode = treeOutline.rootElement().childAt(0).childAt(1).childAt(1); - topNode.expandRecursively(); - TestRunner.deprecatedRunAfterPendingDispatches(secondStep); - }; - - function secondStep() { - TestRunner.addResult('\n===== State of tree outline after calling .expandRecursively() =====\n'); - dump(); - - TestRunner.completeTest(); - }; - - function dump() { - var node = ElementsTestRunner.expandedNodeWithId('depth-1'); - ElementsTestRunner.dumpElementsTree(node); - }; -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that expanding elements recursively works. -</p> - -<div id="depth-1"> - <div id="depth-2"> - <div id="depth-3"> - <div id="depth-4"> - <div id="depth-5"> - <div id="depth-6"> - <div id="depth-7"> - <div id="depth-8"> - <div id="depth-9"> - <div id="depth-10"></div> - </div> - </div> - </div> - </div> - </div> - </div> - </div> - </div> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/hide-shortcut.html b/third_party/WebKit/LayoutTests/inspector/elements/hide-shortcut.html deleted file mode 100644 index c6ceaa9..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/hide-shortcut.html +++ /dev/null
@@ -1,161 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script> - -function pseudoVisibility(pseudo) -{ - var parentNode = document.getElementById("parent-node"); - return getComputedStyle(parentNode, ":" + pseudo).visibility; -} - -function pseudoIframeVisibility() -{ - var parentNode = frames[0].document.getElementById("frame-node"); - return getComputedStyle(parentNode).visibility; -} - -function test() { - var treeOutline; - var parentNode; - var childNode; - var frameNode; - - TestRunner.runTestSuite([ - function testSetUp(next) { - treeOutline = ElementsTestRunner.firstElementsTreeOutline(); - - ElementsTestRunner.nodeWithId('parent-node', callback); - - function callback(node) { - parentNode = node; - ElementsTestRunner.nodeWithId('child-node', callback2); - } - - function callback2(node) { - childNode = node; - ElementsTestRunner.nodeWithId('frame-node', callback3); - } - - function callback3(node) { - frameNode = node; - next(); - } - }, - - function testToggleHideShortcutOn(next) { - treeOutline.toggleHideElement(parentNode).then(callback); - - function callback() { - TestRunner.addResult('=== Added hide shortcut ==='); - TestRunner.cssModel.computedStylePromise(parentNode.id).then(callback2); - } - - function callback2(style) { - TestRunner.addResult('=== Parent node is hidden ==='); - TestRunner.addResult(getPropertyText(style, 'visibility')); - TestRunner.cssModel.computedStylePromise(childNode.id).then(callback3); - } - - function callback3(style) { - TestRunner.addResult('=== Child node is hidden ==='); - TestRunner.addResult(getPropertyText(style, 'visibility')); - next(); - } - }, - - function testToggleHideShortcutOff(next) { - treeOutline.toggleHideElement(parentNode).then(callback); - - function callback() { - TestRunner.addResult('=== Removed hide shortcut ==='); - TestRunner.cssModel.computedStylePromise(parentNode.id).then(callback2); - } - - function callback2(style) { - TestRunner.addResult('=== Parent node is visible ==='); - TestRunner.addResult(getPropertyText(style, 'visibility')); - TestRunner.cssModel.computedStylePromise(childNode.id).then(callback3); - } - - function callback3(style) { - TestRunner.addResult('=== Child node is visible ==='); - TestRunner.addResult(getPropertyText(style, 'visibility')); - next(); - } - }, - - function testToggleHideBeforePseudoShortcutOn(next) { - testPseudoToggle(parentNode.beforePseudoElement(), next); - }, - - function testToggleHideAfterPseudoShortcutOn(next) { - testPseudoToggle(parentNode.afterPseudoElement(), next); - }, - - function testToggleHideBeforePseudoShortcutOff(next) { - testPseudoToggle(parentNode.beforePseudoElement(), next); - }, - - function testToggleHideAfterPseudoShortcutOff(next) { - testPseudoToggle(parentNode.afterPseudoElement(), next); - }, - - function testToggleHideShortcutOnInFrame(next) { - treeOutline.toggleHideElement(frameNode).then(callback); - - function callback() { - TestRunner.evaluateInPagePromise('pseudoIframeVisibility()').then(function(result) { - TestRunner.addResult('=== Added hide shortcut in frame ==='); - TestRunner.addResult('=== Frame node is hidden ==='); - TestRunner.addResult('visibility: ' + result.value + ';'); - next(); - }); - } - } - ]); - - function getPropertyText(computedStyle, propertyName) { - return String.sprintf('%s: %s;', propertyName, computedStyle.get(propertyName)); - } - - function testPseudoToggle(pseudoNode, next) { - treeOutline.toggleHideElement(pseudoNode).then(callback); - function callback() { - var pseudoNodeTypeArg = pseudoNode.pseudoType() ? ('"' + pseudoNode.pseudoType() + '"') : 'undefined'; - TestRunner.evaluateInPagePromise('pseudoVisibility(' + pseudoNodeTypeArg + ')').then(function(result) { - TestRunner.addResult('::' + pseudoNode.pseudoType() + ' node visibility: \'' + result.value + '\''); - next(); - }); - } - } -} -</script> -<style> -#parent-node::before { - content: "before"; -} - -#parent-node::after { - content: "after"; -} -</style> -</head> - -<body> -<p> -Tests the hide shortcut, which toggles visibility:hidden on the node and it's ancestors. -<a href="https://bugs.webkit.org/show_bug.cgi?id=110641">Bug 110641</a> -</p> - -<div id="parent-node">parent - <div style="visibility:hidden">hidden - <div id="child-node" style="visibility:visible">child</div> - </div> -</div> - -<iframe src="resources/hide-shortcut-iframe.html" onload="runTest()"> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-css-grid.html b/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-css-grid.html deleted file mode 100644 index a83ae60..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-css-grid.html +++ /dev/null
@@ -1,83 +0,0 @@ -<html> -<head> - -<style> - -body { - width: 2000px; - height: 2000px; - background-color: grey; -} -.grid { - width: 1000px; - display: grid; - grid-template-columns: 50px 20%; - grid-auto-rows: 25px; -} -.padded { - padding: 50px 60px; - align-content: space-around; - justify-content: end; - grid-gap: 15px 25px; - border: 5px solid; - margin: 10px; -} -.parent { - width: 1300px; - display: grid; - grid-template-columns: 50px 1200px; - grid-auto-rows: 100px; - grid-gap: 20px 50px; -} -.fixed { - position: absolute; - top: 0; - left: 0; -} -</style> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function onload() -{ - runTest(); -} - -async function test() { - function dumpGridHighlight(id) { - return new Promise(resolve => ElementsTestRunner.dumpInspectorHighlightJSON(id, resolve)); - } - - await dumpGridHighlight('paddedGrid'); - await dumpGridHighlight('nestedGrid'); - - TestRunner.completeTest(); -} - -</script> -</head> - -<body onload="onload()"> - -<div id="paddedGrid" class="grid padded fixed"> - <div>c1</div> - <div>c2</div> - <div>c3</div> -</div> -<div id="parentGrid" class="parent fixed"> - <div>Parent Cell 1</div> - <div>Parent Cell 2</div> - <div>Parent Cell 3</div> - <div id="nestedGrid" class="grid"> - <div>c1</div> - <div>c2</div> - <div>c3</div> - </div> -</div> - -<p id="description">This test verifies the position and size of the highlight rectangles overlayed on an inspected CSS grid div.</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-css-shapes-outside-scroll.html b/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-css-shapes-outside-scroll.html deleted file mode 100644 index ed969a5..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-css-shapes-outside-scroll.html +++ /dev/null
@@ -1,45 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<style> - -.float { - width: 8em; - height: 8em; - float: left; - shape-margin: 2em; - margin: 1em; -} - -.circle { - background-color:blue; - shape-outside: circle(closest-side at center); - -webkit-clip-path: circle(closest-side at center); -} - -</style> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - var i = 0; - function dump() { - ElementsTestRunner.dumpInspectorHighlightJSON( - 'circle', i == 0 ? scroll : TestRunner.completeTest.bind(InspectorTest)); - } - function scroll() { - window.scrollTo(0, 100); - ++i; - dump(); - } - dump(); -} - -</script> -</head> - -<body onload="runTest()"> -<div class="float circle" id="circle"> </div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-css-shapes-outside.html b/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-css-shapes-outside.html deleted file mode 100644 index d03f5287..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-css-shapes-outside.html +++ /dev/null
@@ -1,87 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<style> - -.float { - width: 8em; - height: 8em; - float: left; - shape-margin: 2em; - margin: 1em; -} - -.circle { - background-color:blue; - shape-outside: circle(closest-side at center); - -webkit-clip-path: circle(closest-side at center); -} - -.contentBox { - background-color:blue; - border-radius: 2em 4em 2em 2em; - border-width: 3em 1em 2em 1em; - padding: 1em 1em 1em 2em; - margin: 2em 1em 1em 1em; - shape-outside: content-box; - -webkit-clip-path: content-box; -} - -.insetSimpleRound { - background-color:green; - shape-outside: inset(30% round 20%); - -webkit-clip-path: inset(30% round 20%); -} - -.insetComplexRound { - background-color:blue; - shape-outside: inset(10% round 10% 40% 10% 40%); - -webkit-clip-path: inset(10% round 10% 40% 10% 40%); -} - -.ellipse { - background-color:green; - height: 5em; - shape-outside: ellipse(closest-side closest-side); - -webkit-clip-path: ellipse(closest-side closest-side); -} - -.raster { - background-color: blue; - shape-outside: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100px' height='100px'><rect width='100' height='100' fill='green'/></svg>"); -} - -.polygon { - background-color: green; - shape-outside: polygon(0px 0px, 0px 200px, 200px 0px); -} - -</style> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - var list = ['circle', 'insetSimpleRound', 'insetComplexRound', 'ellipse', 'contentBox', 'polygon', 'raster']; - var index = 0; - function nextNode() { - var nodeId = String(list[index++]); - ElementsTestRunner.dumpInspectorHighlightJSON( - nodeId, (index == list.length) ? TestRunner.completeTest.bind(InspectorTest) : nextNode); - } - nextNode(); -} - -</script> -</head> - -<body onload="runTest()"> -<div class="float circle" id="circle"> </div> -<div class="float insetSimpleRound" id="insetSimpleRound"> </div> -<div class="float insetComplexRound" id="insetComplexRound"> </div> -<div class="float ellipse" id="ellipse"> </div> -<div class="float contentBox" id="contentBox"> </div> -<div class="float polygon" id="polygon"> </div> -<div class="float raster" id="raster"> </div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-dom-updates.html b/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-dom-updates.html deleted file mode 100644 index 0fdccb3..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-dom-updates.html +++ /dev/null
@@ -1,157 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="../../../http/tests/inspector/console-test.js"></script> -<script> - -function appendChild(parentId, id) -{ - var e = document.createElement("span"); - e.id = id; - document.getElementById(parentId).appendChild(e); -} - -function remove(id) -{ - document.getElementById(id).remove(); -} - -function removeFirstChild(id) -{ - document.getElementById(id).firstChild.remove(); -} - -function setAttribute(id, name, value) -{ - var e = document.getElementById(id); - if (value === undefined) - e.removeAttribute(name); - else - e.setAttribute(name, value); -} - -function setTextContent(id, content) -{ - document.getElementById(id).textContent = content; -} - -function setFirstChildTextContent(id, content) -{ - document.getElementById(id).firstChild.textContent = content; -} - -function test() { - var attrTestNode; - var childTestNode; - var textTestNode; - - TestRunner.runTestSuite([ - function testDumpInitial(next) { - function callback(node) { - attrTestNode = ElementsTestRunner.expandedNodeWithId('attrTest'); - childTestNode = ElementsTestRunner.expandedNodeWithId('childTest'); - textTestNode = ElementsTestRunner.expandedNodeWithId('textTest'); - next(); - } - TestRunner.addResult('========= Original ========'); - ElementsTestRunner.dumpDOMUpdateHighlights(null); - ElementsTestRunner.expandElementsTree(callback); - }, - - function testSetAttributeOtherValue(next) { - runAndDumpHighlights('setAttribute(\'attrTest\', \'attrFoo\', \'bar\')', attrTestNode, next); - }, - - function testSetAttributeEmpty(next) { - runAndDumpHighlights('setAttribute(\'attrTest\', \'attrFoo\', \'\')', attrTestNode, next); - }, - - function testAddAttribute(next) { - runAndDumpHighlights('setAttribute(\'attrTest\', \'attrBar\', \'newBar\')', attrTestNode, next); - }, - - function testRemoveAttribute(next) { - runAndDumpHighlights('setAttribute(\'attrTest\', \'attrFoo\')', attrTestNode, next); - }, - - function testAppendChildToEmpty(next) { - runAndDumpHighlights('appendChild(\'childTest\', \'child1\')', childTestNode, callback); - function callback() { - // Expand the #childTest node. - ElementsTestRunner.expandElementsTree(next); - } - }, - - function testAppendChildToExpanded(next) { - runAndDumpHighlights('appendChild(\'childTest\', \'child2\')', childTestNode, next); - }, - - function testRemoveChild1(next) { - runAndDumpHighlights('remove(\'child1\')', childTestNode, next); - }, - - function testRemoveChild2(next) { - runAndDumpHighlights('remove(\'child2\')', childTestNode, next); - }, - - function testSetTextContent(next) { - runAndDumpHighlights('setTextContent(\'textTest\', \'Text\')', textTestNode, next); - }, - - function testSetTextNodeTextContent(next) { - runAndDumpHighlights('setFirstChildTextContent(\'textTest\', \'NewText\')', textTestNode, next); - }, - - function testRemoveInlineTextNode(next) { - runAndDumpHighlights('removeFirstChild(\'textTest\')', textTestNode, next); - }, - - function testSetTextContentWithEmptyText(next) { - runAndDumpHighlights('setTextContent(\'textTest\', \'Text\')', textTestNode, next); - }, - - function testClearTextNodeTextContent(next) { - runAndDumpHighlights('setFirstChildTextContent(\'textTest\', \'\')', textTestNode, next); - }, - - function testAppendChildWhenHidden(next) { - UI.viewManager.showView('console'); - runAndDumpHighlights('appendChild(\'childTest\', \'child1\')', childTestNode, next); - } - ]); - - function runAndDumpHighlights(script, root, next) { - dumpHighlights(root, next); - TestRunner.evaluateInPage(script); - } - - function dumpHighlights(root, next) { - ElementsTestRunner.dumpDOMUpdateHighlights(root, callback); - - function callback() { - var treeOutline = ElementsTestRunner.firstElementsTreeOutline(); - var highlights = treeOutline._element.getElementsByClassName('dom-update-highlight'); - for (var i = 0; i < highlights.length; ++i) - highlights[i].classList.remove('dom-update-highlight'); - next(); - } - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests DOM update highlights in the DOM tree. -</p> - -<div id="container"> - <div id="attrTest" attrFoo="foo"></div> - <div id="childTest"></div> - <div id="textTest"></div> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-node-scaled-and-scrolled.html b/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-node-scaled-and-scrolled.html deleted file mode 100644 index 28249c0..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-node-scaled-and-scrolled.html +++ /dev/null
@@ -1,44 +0,0 @@ -<html> -<head> - -<style> - -body { - margin: 0; -} - -iframe { - position: absolute; - left: 83px; - top: 53px; - width: 200px; - height: 200px; -} - -</style> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="../../../http/tests/inspector/console-test.js"></script> -<script> - -function onload() -{ - if (window.internals) - window.internals.setPageScaleFactor(2); - // Fully scroll the visual viewport. - internals.setVisualViewportOffset(1000, 1000); - runTest(); -} - -function test() { - ElementsTestRunner.dumpInspectorHighlightJSON('div', TestRunner.completeTest.bind(InspectorTest)); -} - -</script> -</head> - -<body onload="onload()"> -<iframe id="scale-iframe" src="resources/highlight-node-scaled-iframe.html"></iframe> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-node-scaled.html b/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-node-scaled.html deleted file mode 100644 index fb65eb33..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-node-scaled.html +++ /dev/null
@@ -1,42 +0,0 @@ -<html> -<head> - -<style> - -body { - margin: 0; -} - -iframe { - position: absolute; - left: 83px; - top: 53px; - width: 200px; - height: 200px; -} - -</style> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="../../../http/tests/inspector/console-test.js"></script> -<script> - -function onload() -{ - if (window.internals) - window.internals.setPageScaleFactor(2); - runTest(); -} - -function test() { - ElementsTestRunner.dumpInspectorHighlightJSON('div', TestRunner.completeTest.bind(InspectorTest)); -} - -</script> -</head> - -<body onload="onload()"> -<iframe id="scale-iframe" src="resources/highlight-node-scaled-iframe.html"></iframe> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-node-scroll.html b/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-node-scroll.html deleted file mode 100644 index 19e86fc..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-node-scroll.html +++ /dev/null
@@ -1,67 +0,0 @@ -<html> -<head> - -<style> - -body { - width: 2000px; - height: 2000px; - background-color: grey; -} -.inspected { - margin: 5px; - border: solid 10px aqua; - padding: 15px; - width: 200px; - height: 200px; - background-color: blue; - float: left; -} -#scrollingContainer { - clear: both; - width: 100px; - height: 100px; - overflow: auto; -} -#description { - clear: both; -} - -</style> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function onload() -{ - window.scrollBy(50, 100); - scrollingContainer = document.getElementById("scrollingContainer"); - scrollingContainer.scrollTop = 50; - scrollingContainer.scrollLeft = 60; - runTest(); -} - -function test() { - ElementsTestRunner.dumpInspectorHighlightJSON('inspectedElement1', testNode2); - - function testNode2() { - ElementsTestRunner.dumpInspectorHighlightJSON('inspectedElement2', TestRunner.completeTest.bind(InspectorTest)); - } -} - -</script> -</head> - -<body onload="onload()"> - -<div id="inspectedElement1" class="inspected"></div> - -<div id="scrollingContainer"> - <div id="inspectedElement2" class="inspected"></div> -</div> - -<p id="description">This test verifies the position and size of the highlight rectangles overlayed on an inspected div in the scrolled view.</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-node-transformed.html b/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-node-transformed.html deleted file mode 100644 index 5c88436..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-node-transformed.html +++ /dev/null
@@ -1,40 +0,0 @@ -<html> -<head> - -<style> - -body { - margin: 0; -} - -iframe { - position: absolute; - left: 83px; - top: 53px; - width: 200px; - height: 200px; -} - -</style> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="../../../http/tests/inspector/console-test.js"></script> -<script> - -function onload() -{ - runTest(); -} - -function test() { - ElementsTestRunner.dumpInspectorHighlightJSON('div', TestRunner.completeTest.bind(InspectorTest)); -} - -</script> -</head> - -<body onload="onload()"> -<iframe id="transform-iframe" src="resources/highlight-node-transformed-iframe.html"></iframe> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-node.html b/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-node.html deleted file mode 100644 index 62389f7a..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-node.html +++ /dev/null
@@ -1,46 +0,0 @@ -<html> -<head> - -<style> - -body { - margin: 0; -} -#container { - width: 400px; - height: 400px; - background-color: grey; -} -#inspectedElement { - margin: 5px; - border: solid 10px aqua; - padding: 15px; - width: 200px; - height: 200px; - background-color: blue; - float: left; -} -#description { - clear: both; -} - -</style> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.dumpInspectorHighlightJSON('inspectedElement', TestRunner.completeTest.bind(InspectorTest)); -} - -</script> -</head> - -<body onload="runTest()"> - -<div id="inspectedElement"></div> -<p id="description">This test verifies the position and size of the highlight rectangles overlayed on an inspected div.</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-svg-content-inside-iframe.html b/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-svg-content-inside-iframe.html deleted file mode 100644 index f7661b4..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-svg-content-inside-iframe.html +++ /dev/null
@@ -1,41 +0,0 @@ -<html> -<head> - -<style> - -body { - margin: 0; -} - -#container { - position: absolute; - overflow: hidden; - left: 100px; - top: 200px; -} - -iframe { - width: 200px; - height: 200px; - border: none; -} - -</style> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.dumpInspectorHighlightJSON('svg-rect', TestRunner.completeTest.bind(InspectorTest), 'svg-iframe'); -} - -</script> -</head> - -<body onload="runTest()"> -<div id="container"> - <iframe id="svg-iframe" src="resources/highlight-svg-content-iframe.html"></iframe> -</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-svg-root-zoomed.html b/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-svg-root-zoomed.html deleted file mode 100644 index 9115c03e..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-svg-root-zoomed.html +++ /dev/null
@@ -1,71 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<style> - -body { - margin: 0; -} -#svg-root { - position: relative; - left: 10px; - top: 20px; - margin: 30px; - border: solid 40px aqua; - padding: 50px; - background-color: blue; -} - -</style> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function startTest() -{ - if (window.eventSender) - window.eventSender.zoomPageIn(); - runTest(); -} - -function test() { - ElementsTestRunner.dumpInspectorHighlightJSON('svg-root', TestRunner.completeTest.bind(InspectorTest)); -} - -</script> -</head> -<body onload="startTest()"> -<svg id="svg-root" width="100" height="200" viewbox="0 0 50 100"></svg> -<p id="description">This test verifies the position and size of the highlight rectangles overlayed on an SVG root element when the page is zoomed.</p> -<!-- - -Expected value calculations for #svg-root's highlight rectangles at 120% zoom: - -margin rect: - left: (10) * 1.2 == 12 - top: (20) * 1.2 == 24 - width: (100 + 2 * (30 + 40 + 50)) * 1.2 == 340 * 1.2 == 408 - height: (200 + 2 * (30 + 40 + 50)) * 1.2 == 440 * 1.2 == 528 - -border rect: - left: (10 + 30) * 1.2 == 40 * 1.2 == 48 - top: (20 + 30) * 1.2 == 50 * 1.2 == 60 - width: (100 + 2 * (40 + 50)) * 1.2 == 280 * 1.2 == 336 - height: (200 + 2 * (40 + 50)) * 1.2 == 380 * 1.2 == 456 - -padding rect: - left: (10 + 30 + 40) * 1.2 == 80 * 1.2 == 96 - top: (20 + 30 + 40) * 1.2 == 90 * 1.2 == 108 - width: (100 + 2 * (50)) * 1.2 == 200 * 1.2 == 240 - height: (200 + 2 * (50)) * 1.2 == 300 * 1.2 == 360 - -content rect: - left: (10 + 30 + 40 + 50) * 1.2 == 130 * 1.2 == 156 - top: (20 + 30 + 40 + 50) * 1.2 == 140 * 1.2 == 168 - width: (100) * 1.2 == 120 - height: (200) * 1.2 == 240 - ---> -<div id="console"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-svg-root.html b/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-svg-root.html deleted file mode 100644 index 925b333..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/highlight/highlight-svg-root.html +++ /dev/null
@@ -1,36 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - -<style> - -body { - margin: 0; -} -#svg-root { - margin: 5px; - border: solid 10px aqua; - padding: 15px; - background-color: blue; -} - -</style> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.dumpInspectorHighlightJSON('svg-root', TestRunner.completeTest.bind(InspectorTest)); -} - -</script> -</head> - -<body onload="runTest()"> - -<svg id="svg-root" width="100" height="100" viewbox="0 0 50 50"></svg> -<p id="description">This test verifies the position and size of the highlight rectangles overlayed on an SVG root element.</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/iframe-load-event-expected.txt b/third_party/WebKit/LayoutTests/inspector/elements/iframe-load-event-expected.txt deleted file mode 100644 index 1fff0b2..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/iframe-load-event-expected.txt +++ /dev/null
@@ -1,30 +0,0 @@ -Tests that iframe content is available after iframe's load event fired. See bug 76552. - - - - -After frame navigate -- <html> - - <head> - <script src="../../http/tests/inspector/inspector-test.js"></script> - <script src="../../http/tests/inspector/elements-test.js"></script> - <script src="resources/iframe-load-event-iframe.js"></script> - </head> - - <body> - - <p> - "\nTests that iframe content is available after iframe's load event fired. See " - <a href="http://webkit.org/b/76552">bug 76552</a> - ".\n" - </p> - - <iframe id="myframe" src="resources/iframe-load-event-iframe-2.html" onload="runTest()"> - - #document - - <html> - <head></head> - - <body> - <div id="iframe-2-element"></div> - </body> - </html> - </iframe> - </body> - </html> -
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/iframe-load-event.html b/third_party/WebKit/LayoutTests/inspector/elements/iframe-load-event.html deleted file mode 100644 index 240c278c..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/iframe-load-event.html +++ /dev/null
@@ -1,13 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script src="resources/iframe-load-event-iframe.js"></script> -</head> -<body> -<p> -Tests that iframe content is available after iframe's load event fired. See <a href="http://webkit.org/b/76552">bug 76552</a>. -</p> -<iframe id="myframe" src="resources/iframe-load-event-iframe-1.html" onload="runTest()"></iframe> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/inline-style-title.html b/third_party/WebKit/LayoutTests/inspector/elements/inline-style-title.html deleted file mode 100644 index 4503bc3e..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/inline-style-title.html +++ /dev/null
@@ -1,54 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<style id="inline-style"> - div { color: red } -</style> -<script> - -function updateStyleText() -{ - document.querySelector("#inline-style").textContent = "span { border: 1px solid black }"; -} - -function test() { - // Save time on style updates. - Elements.StylesSidebarPane.prototype.update = function() {}; - Elements.MetricsSidebarPane.prototype.update = function() {}; - - ElementsTestRunner.nodeWithId('inline-style', onInlineStyleQueried); - - var treeOutline = ElementsTestRunner.firstElementsTreeOutline(); - var treeElement; - - function onInlineStyleQueried(node) { - if (!node) { - TestRunner.addResult('Didn\'t find node with given ID'); - TestRunner.completeTest(); - return; - } - treeElement = treeOutline.findTreeElement(node); - TestRunner.addResult('=== initial inline style text ==='); - TestRunner.addResult(treeElement.title.textContent); - TestRunner.evaluateInPage('updateStyleText()', onStyleUpdated); - } - - function onStyleUpdated() { - ElementsTestRunner.firstElementsTreeOutline().runPendingUpdates(); - TestRunner.addResult('=== inline style text after change ==='); - TestRunner.addResult(treeElement.title.textContent); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Verifies that external change of inline style element updates its title. -</p> -</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/insert-node.html b/third_party/WebKit/LayoutTests/inspector/elements/insert-node.html deleted file mode 100644 index b11b6736..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/insert-node.html +++ /dev/null
@@ -1,135 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script> - -function insertBeforeFirst() -{ - var container = document.getElementById("container"); - var child = document.createElement("div"); - child.setAttribute("id", "child-before"); - container.insertBefore(child, container.firstChild); -} - -function insertNode() -{ - var container = document.getElementById("container"); - var child2 = document.getElementById("child2"); - var child = document.createElement("div"); - child.setAttribute("id", "child-middle"); - container.insertBefore(child, child2); -} - -function appendChild() -{ - var container = document.getElementById("container"); - var child = document.createElement("div"); - child.setAttribute("id", "child-after"); - container.appendChild(child); -} - -function appendChildWithText() -{ - var container = document.getElementById("container"); - var child = document.createElement("div"); - child.setAttribute("id", "child-with-text"); - child.setAttribute("style", "display: none;"); - child.innerText = "Text"; - container.appendChild(child); -} - -function insertFirstTextNode() -{ - var child3 = document.getElementById("child3"); - child3.innerText = "First text"; -} - -function test() { - var containerNode; - - TestRunner.runTestSuite([ - function testDumpInitial(next) { - function callback(node) { - containerNode = ElementsTestRunner.expandedNodeWithId('container'); - - TestRunner.addResult('========= Original ========'); - ElementsTestRunner.dumpElementsTree(containerNode); - next(); - } - ElementsTestRunner.expandElementsTree(callback); - }, - - function testInsertBefore(next) { - function callback() { - TestRunner.addResult('===== Inserted before ====='); - ElementsTestRunner.dumpElementsTree(containerNode); - next(); - } - TestRunner.evaluateInPage('insertBeforeFirst()', callback); - }, - - function testInsertMiddle(next) { - function callback() { - TestRunner.addResult('===== Inserted middle ====='); - ElementsTestRunner.dumpElementsTree(containerNode); - next(); - } - TestRunner.evaluateInPage('insertNode()', callback); - }, - - function testAppend(next) { - function callback() { - TestRunner.addResult('======== Appended ========='); - ElementsTestRunner.dumpElementsTree(containerNode); - next(); - } - TestRunner.evaluateInPage('appendChild()', callback); - }, - - function testAppendWithText(next) { - function callback() { - TestRunner.addResult('======== Appended with text========='); - ElementsTestRunner.dumpElementsTree(containerNode); - var newNode = ElementsTestRunner.expandedNodeWithId('child-with-text'); - if (TestRunner.domModel.nodeForId(newNode.firstChild.id)) - TestRunner.addResult('Success: child text is bound'); - else - TestRunner.addResult('Failed: child text is not bound'); - next(); - } - TestRunner.evaluateInPage('appendChildWithText()', callback); - }, - - function testInsertFirstTextNode(next) { - function callback() { - TestRunner.addResult('======== Inserted first text node ========='); - ElementsTestRunner.expandElementsTree(callback2); - } - - function callback2() { - ElementsTestRunner.dumpElementsTree(containerNode); - var newNode = ElementsTestRunner.expandedNodeWithId('child3'); - if (TestRunner.domModel.nodeForId(newNode.firstChild.id)) - TestRunner.addResult('Success: child text is bound'); - else - TestRunner.addResult('Failed: child text is not bound'); - next(); - } - TestRunner.evaluateInPage('insertFirstTextNode()', callback); - } - ]); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that elements panel updates dom tree structure upon node insertion. -</p> - -<div id="container"><div id="child1"></div><div id="child2"></div><div id="child3"></div></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/inspect-mode-after-profiling.html b/third_party/WebKit/LayoutTests/inspector/elements/inspect-mode-after-profiling.html deleted file mode 100644 index 3837bf3d..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/inspect-mode-after-profiling.html +++ /dev/null
@@ -1,46 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script> - -function click() -{ - var target = document.getElementById("inspected"); - var rect = target.getBoundingClientRect(); - // Simulate the mouse click over the target to trigger an event dispatch. - eventSender.mouseMoveTo(rect.left + 10, rect.top + 10); - eventSender.mouseDown(); - eventSender.mouseUp(); -} - -function test() { - TestRunner.cpuProfilerModel.startRecording(); - TestRunner.cpuProfilerModel.stopRecording(); - TestRunner.overlayModel.setInspectMode(Protocol.Overlay.InspectMode.SearchForNode).then(clickAtInspected); - - function clickAtInspected() { - ElementsTestRunner.firstElementsTreeOutline().addEventListener( - Elements.ElementsTreeOutline.Events.SelectedNodeChanged, dumpAndFinish); - TestRunner.evaluateInPage('click()'); - } - - function dumpAndFinish() { - ElementsTestRunner.firstElementsTreeOutline().removeEventListener( - Elements.ElementsTreeOutline.Events.SelectedNodeChanged, dumpAndFinish); - var selectedElement = ElementsTestRunner.firstElementsTreeOutline().selectedTreeElement; - TestRunner.addResult('Node selected: ' + selectedElement.node().getAttribute('id')); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that inspect mode works after profiling start/stop. -</p> -<div id="inspected" style="width:100px;height:100px;"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/inspect-mode-shadow-text.html b/third_party/WebKit/LayoutTests/inspector/elements/inspect-mode-shadow-text.html deleted file mode 100644 index d0809c5a..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/inspect-mode-shadow-text.html +++ /dev/null
@@ -1,53 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> - -<script> - -function click() -{ - var target = document.getElementById("host"); - var rect = target.getBoundingClientRect(); - // Simulate the mouse click over the target to trigger an event dispatch. - if (window.eventSender) { - window.eventSender.mouseMoveTo(rect.left + 10, rect.top + 10); - window.eventSender.mouseDown(); - window.eventSender.mouseUp(); - } -} - -function test() { - TestRunner.overlayModel.setInspectMode(Protocol.Overlay.InspectMode.SearchForNode).then(step2); - - function step2() { - ElementsTestRunner.firstElementsTreeOutline().addEventListener( - Elements.ElementsTreeOutline.Events.SelectedNodeChanged, step3); - TestRunner.evaluateInPage('click()'); - } - - function step3() { - ElementsTestRunner.firstElementsTreeOutline().removeEventListener( - Elements.ElementsTreeOutline.Events.SelectedNodeChanged, step3); - var selectedElement = ElementsTestRunner.firstElementsTreeOutline().selectedTreeElement; - TestRunner.addResult('Node selected: ' + selectedElement.node().getAttribute('id')); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> - -<p>Test that devtools can inspect text element under shadow root.</p> - -<div><div><div id="host"></div></div></div> -<script> - var host = document.querySelector('#host'); - var sr = host.createShadowRoot(); - sr.innerHTML = "Text Text Text<br>Text Text Text"; -</script> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/inspect-pointer-events-none.html b/third_party/WebKit/LayoutTests/inspector/elements/inspect-pointer-events-none.html deleted file mode 100644 index 34880d15..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/inspect-pointer-events-none.html +++ /dev/null
@@ -1,98 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<style> -div { - margin: 0; - padding: 0; - border: none; -} -#outer { - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; -} -#inner { - pointer-events: none; - position: absolute; - top: 10px; - left: 10px; - bottom: 10px; - right: 10px; -} -</style> -<script> - -function clickInner(withShift) -{ - var target = document.getElementById("inner"); - var rect = target.getBoundingClientRect(); - // Simulate the mouse click over the target to trigger an event dispatch. - if (window.eventSender) { - window.eventSender.mouseMoveTo(rect.left + rect.width / 2, rect.top + rect.height / 2, withShift ? "shiftKey" : ""); - window.eventSender.mouseDown(); - window.eventSender.mouseUp(); - } -} - -function test() { - function selectedNodeId() { - var selectedElement = ElementsTestRunner.firstElementsTreeOutline().selectedTreeElement; - if (!selectedElement) - return '<no selected node>'; - return selectedElement.node().getAttribute('id'); - } - - function expectSelectedNode(expectedId) { - var id = selectedNodeId(); - if (id === expectedId) - TestRunner.addResult('PASS: selected node with id \'' + id + '\''); - else - TestRunner.addResult('FAIL: unexpected selection ' + id); - } - - function step1() { - TestRunner.overlayModel.setInspectMode(Protocol.Overlay.InspectMode.SearchForNode).then(step2); - } - - function step2() { - ElementsTestRunner.firstElementsTreeOutline().addEventListener( - Elements.ElementsTreeOutline.Events.SelectedNodeChanged, step3); - TestRunner.evaluateInPage('clickInner(true)'); - } - - function step3() { - ElementsTestRunner.firstElementsTreeOutline().removeEventListener( - Elements.ElementsTreeOutline.Events.SelectedNodeChanged, step3); - expectSelectedNode('inner'); - TestRunner.overlayModel.setInspectMode(Protocol.Overlay.InspectMode.SearchForNode).then(step4); - } - - function step4() { - ElementsTestRunner.firstElementsTreeOutline().addEventListener( - Elements.ElementsTreeOutline.Events.SelectedNodeChanged, step5); - TestRunner.evaluateInPage('clickInner(false)'); - } - - function step5() { - ElementsTestRunner.firstElementsTreeOutline().removeEventListener( - Elements.ElementsTreeOutline.Events.SelectedNodeChanged, step5); - expectSelectedNode('outer'); - TestRunner.completeTest(); - } - - step1(); -} - -</script> -</head> - -<body onload="runTest()"> -<p>Test that Web Inspector can inspect element with <code>pointer-events:none</code>. -</p> -<div id="outer"><div id="inner"></div></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/inspect-pseudo-element.html b/third_party/WebKit/LayoutTests/inspector/elements/inspect-pseudo-element.html deleted file mode 100644 index 284da087..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/inspect-pseudo-element.html +++ /dev/null
@@ -1,52 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script> -function clickPseudo() -{ - if (!window.eventSender) { - console.log("This test requires test shell"); - return; - } - eventSender.mouseMoveTo(2, 2); - eventSender.mouseDown(0); - eventSender.mouseUp(0); -} - -function test() { - TestRunner.overlayModel.setInspectMode(Protocol.Overlay.InspectMode.SearchForNode).then(inspectModeEnabled); - - function inspectModeEnabled() { - UI.context.addFlavorChangeListener(SDK.DOMNode, selectedNodeChanged); - TestRunner.evaluateInPage('clickPseudo()'); - } - - function selectedNodeChanged() { - var selectedNode = ElementsTestRunner.firstElementsTreeOutline().selectedDOMNode(); - if (!selectedNode) - TestRunner.addResult('<no selected node>'); - else - TestRunner.addResult('Selected node pseudo type: ' + selectedNode.pseudoType()); - UI.context.removeFlavorChangeListener(SDK.DOMNode, selectedNodeChanged); - TestRunner.completeTest(); - } -} - -</script> -<style> -body { - margin: 0; - padding: 0; -} - -#inspected::before { - content: "BEFORE" -} -</style> -</head> - -<body onload="runTest()"> -<div id="inspected">Test</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/modify-chardata.html b/third_party/WebKit/LayoutTests/inspector/elements/modify-chardata.html deleted file mode 100644 index 56cba448..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/modify-chardata.html +++ /dev/null
@@ -1,81 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script> - -function modifyChars() -{ - var node = document.getElementById("node"); - node.firstChild.textContent = "Bar"; -} - -function modifyViaRange() -{ - var range = document.createRange(); - var referenceNode = document.getElementById("rangenode").firstChild; - range.selectNode(referenceNode); - range.setStart(referenceNode, 9); - range.setEnd(referenceNode, 9 + 5); - range.deleteContents(); - var span = range.startContainer.ownerDocument.createElement("span"); - span.innerHTML = "test"; - range.insertNode(span); -} - -function test() { - var targetNode; - - TestRunner.runTestSuite([ - function testDumpInitial(next) { - function callback(node) { - targetNode = node; - TestRunner.addResult('========= Original for normal mutation ========'); - ElementsTestRunner.dumpElementsTree(targetNode); - next(); - } - ElementsTestRunner.selectNodeWithId('node', callback); - }, - - function testSetAttribute(next) { - function callback() { - TestRunner.addResult('===== Mutated text node ====='); - ElementsTestRunner.dumpElementsTree(targetNode); - next(); - } - TestRunner.evaluateInPage('modifyChars()', callback); - }, - - function testModifyViaRange(next) { - function callback() { - TestRunner.addResult('===== Contents modified via Range ====='); - ElementsTestRunner.dumpElementsTree(targetNode); - next(); - } - function expandCallback() { - ElementsTestRunner.expandElementsTree(callback); - } - function selectCallback(node) { - targetNode = node; - TestRunner.addResult('========= Original for Range mutation ========'); - ElementsTestRunner.dumpElementsTree(targetNode); - TestRunner.evaluateInPage('modifyViaRange()', expandCallback); - } - ElementsTestRunner.selectNodeWithId('rangenode', selectCallback); - } - ]); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that elements panel updates dom tree structure upon changes to characters. -</p> - -<div id="node">Foo</div> -<div id="rangenode">Lorem ipsum dolor sit amet</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/move-node.html b/third_party/WebKit/LayoutTests/inspector/elements/move-node.html deleted file mode 100644 index 51d1a70a..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/move-node.html +++ /dev/null
@@ -1,59 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - var containerNode; - - TestRunner.runTestSuite([ - function testDumpInitial(next) { - function callback(node) { - containerNode = ElementsTestRunner.expandedNodeWithId('container'); - - TestRunner.addResult('========= Original ========'); - ElementsTestRunner.dumpElementsTree(containerNode); - next(); - } - ElementsTestRunner.expandElementsTree(callback); - }, - - function testDragAndDrop(next) { - var treeOutline = ElementsTestRunner.firstElementsTreeOutline(); - treeOutline.addEventListener(Elements.ElementsTreeOutline.Events.SelectedNodeChanged, selectionChanged); - - function selectionChanged() { - TestRunner.addResult('===== Moved child2 ====='); - ElementsTestRunner.dumpElementsTree(containerNode); - TestRunner.addResult( - 'Selection: ' + Components.DOMPresentationUtils.fullQualifiedSelector(treeOutline.selectedDOMNode())); - next(); - } - - var child2 = ElementsTestRunner.expandedNodeWithId('child2'); - var child4 = ElementsTestRunner.expandedNodeWithId('child4'); - treeOutline._treeElementBeingDragged = child2[treeOutline._treeElementSymbol]; - var treeElementToDropOn = child4[treeOutline._treeElementSymbol]; - treeOutline._doMove(treeElementToDropOn); - } - ]); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests elements drag and drop operation internals, verifies post-move selection. -</p> - -<div id="container"> - <div id="child1"></div> - <div id="child2"></div> - <div id="child3"></div> - <div id="child4"></div> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/node-reselect-on-append-child.html b/third_party/WebKit/LayoutTests/inspector/elements/node-reselect-on-append-child.html deleted file mode 100644 index fbbaa6c..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/node-reselect-on-append-child.html +++ /dev/null
@@ -1,45 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> - -<script> - -function appendNewNode() -{ - var element = document.querySelector("#first"); - var second = document.createElement("div"); - element.parentElement.appendChild(second); -} - -function test() { - ElementsTestRunner.selectNodeWithId('first', onNodeSelected); - - function onNodeSelected() { - ElementsTestRunner.firstElementsTreeOutline().addEventListener( - Elements.ElementsTreeOutline.Events.SelectedNodeChanged, onSelectionChangedEvent); - TestRunner.addSniffer(Elements.ElementsTreeOutline.prototype, '_updateChildren', onNodeAppended); - TestRunner.evaluateInPage('appendNewNode()'); - } - - function onSelectionChangedEvent() { - TestRunner.addResult('ERROR: erroneous selection changed event received.'); - TestRunner.completeTest(); - } - - function onNodeAppended() { - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p>The test verifies that SelectedNodeChanged event is not fired whenever a child gets added to the node.</p> -<div> - <div id="first">First Child</div> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/node-xpath.xhtml b/third_party/WebKit/LayoutTests/inspector/elements/node-xpath.xhtml deleted file mode 100644 index 1af12f0..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/node-xpath.xhtml +++ /dev/null
@@ -1,74 +0,0 @@ -<!-- Pre-comment --> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<script src="../../http/tests/inspector/inspector-test.js" id="script-id"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script id="test-script"> -//<![CDATA[ -function test() -{ - ElementsTestRunner.expandElementsTree(dumpNodes.bind(null, "")); - var doc; - - function dumpNodes(prefix, node) - { - if (!doc) { - doc = getDocumentElement(); - node = doc; - } - if (node.getAttribute("id") === "test-script") - return; - dumpNodeData(node, prefix); - var children = node.children(); - for (var i = 0; children && i < children.length; ++i) - dumpNodes(prefix + " ", children[i]); - if (node === doc) - TestRunner.completeTest(); - } - - function getDocumentElement() - { - var map = TestRunner.domModel._idToDOMNode; - for (var id in map) { - if (map[id].nodeName() === "#document") - return map[id]; - } - - return null; - } - - function dumpNodeData(node, prefix) - { - var result = prefix + "'" + node.nodeName() + "':'" + node.nodeValue() + "' - '" + Components.DOMPresentationUtils.xPath(node, true) + "'"; - TestRunner.addResult(result.replace(/\r?\n/g, "\\n")); - } -} -//]]> -</script> -<script> -// Comment -//<![CDATA[ -function f() -{ - document.write("<"); -} -//]]> -</script> -</head> - -<body onload="runTest()"> -<p>Tests node xPath construction</p> - -<div id="id1" class="foo"></div> -<div id="id2" class="foo"></div> - -<div id="container"> - <div id="id3" class="foo">3 Prefix <![CDATA[<greeting>Hello, world!</greeting>]]> Suffix</div> - <div id="id4" class="foo">4</div> - <div id="id5" class="foo">5</div> - <div id="id6" class="foo">6</div> -</div> - -</body> -</html> -<!-- Post-comment -->
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/resolve-alien-node.html b/third_party/WebKit/LayoutTests/inspector/elements/resolve-alien-node.html deleted file mode 100644 index bbfc824..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/resolve-alien-node.html +++ /dev/null
@@ -1,27 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script> - -async function test() { - var result = await TestRunner.RuntimeAgent.evaluate( - 'var doc = document.implementation.createHTMLDocument(\'\'); doc.lastChild.innerHTML = \'<span></span>\'; doc.lastChild'); - - var spanWrapper = TestRunner.runtimeModel.createRemoteObject(result); - var node = await TestRunner.domModel.pushObjectAsNodeToFrontend(spanWrapper); - TestRunner.assertTrue(node, 'Node object should be resovled'); - var remoteObject = await node.resolveToObject(); - TestRunner.addResult('Alien node should resolve to null: ' + remoteObject); - TestRunner.completeTest(); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that resolveNode from alien document does not crash. https://bugs.webkit.org/show_bug.cgi?id=71806. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/resolve-node-blocked.html b/third_party/WebKit/LayoutTests/inspector/elements/resolve-node-blocked.html deleted file mode 100644 index 7fb0fc2..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/resolve-node-blocked.html +++ /dev/null
@@ -1,25 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<meta http-equiv="Content-Security-Policy" content="script-src 'unsafe-inline'"> -<script> -function test() { - TestRunner.evaluateInPage('document', didReceiveDocumentObject); - async function didReceiveDocumentObject(remoteObject) { - TestRunner.addResult('didReceiveDocumentObject'); - var nodeId = await TestRunner.DOMAgent.requestNode(remoteObject.objectId); - TestRunner.addResult('didRequestNode error = ' + (nodeId ? 'null' : 'error')); - TestRunner.completeTest(); - } -} -</script> -</head> -<body onload="runTest()"> -<p> -Tests that JS object to node resolution still works even if script evals are prohibited by Content-Security-Policy. -The test passes if it doesn't crash. -<a href="https://bugs.webkit.org/show_bug.cgi?id=78705">Bug 78705.</a> -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/resources/elements-panel-styles.css b/third_party/WebKit/LayoutTests/inspector/elements/resources/elements-panel-styles.css deleted file mode 100644 index dcbefad..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/resources/elements-panel-styles.css +++ /dev/null
@@ -1,63 +0,0 @@ -body { - font-size: 12px; - text-indent: 20px !important; -} - -body .foo { - text-indent: 10px; -} - -#container { - font-family: serif; - font-size: 14px; - color: red; - padding: 2px !important; -} - -#container .foo { - font-style: italic !important; -} - -.foo { - color: black; - margin-left: 1px; - margin: 10px 0 2px; - border-radius: 5px; - font-style: normal !important; - font-weight: normal !important; - font-weight: bold; - padding: 4px; - padding-right: 1px; - text-indent: 0 !important; -} - -.foo, .foo::before { - content: "[before Foo]"; - color: blue; - display: block !important; -} - -.foo::before { - color: red; -} - -.foo::after { - content: "[after Foo]"; - color: green; -} -.foo::after { - font-family: courier; - content: "[after Foo 2]"; -} - -.foo { - /* Empty rule that should be reported in the Styles pane */ -} - -.foo::before { - /* Empty rule that should be reported in the Styles pane */ -} - -html { - color: magenta !important; -}
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/reveal-whitespace-text-node.html b/third_party/WebKit/LayoutTests/inspector/elements/reveal-whitespace-text-node.html deleted file mode 100644 index f3945c8..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/reveal-whitespace-text-node.html +++ /dev/null
@@ -1,38 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script> - -function whitespaceChild() -{ - return document.getElementById("test").firstChild; -} - -function test() { - TestRunner.evaluateInPage('whitespaceChild()', childCallback); - - function childCallback(childObject) { - ElementsTestRunner.firstElementsTreeOutline().addEventListener( - Elements.ElementsTreeOutline.Events.SelectedNodeChanged, selectedNodeChanged); - Common.Revealer.reveal(childObject); - } - - function selectedNodeChanged(event) { - var node = event.data.node; - TestRunner.addResult('SelectedNodeChanged: ' + node.localName()); - TestRunner.completeTest(); - } -} -</script> -</head> - -<body onload="runTest()"> - -<p id="description">This test verifies that revealing a whitespace text node RemoteObject reveals its parentElement DIV.</p> - -<div id="test"> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/selected-element-changes-execution-context.html b/third_party/WebKit/LayoutTests/inspector/elements/selected-element-changes-execution-context.html deleted file mode 100644 index 29a7dc4..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/selected-element-changes-execution-context.html +++ /dev/null
@@ -1,55 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script> -function test() { - var mainContext; - - TestRunner.runTestSuite([ - function initialize(next) { - ElementsTestRunner.expandElementsTree(onExpanded); - - function onExpanded() { - mainContext = UI.context.flavor(SDK.ExecutionContext); - dumpContextAndNext(next); - } - }, - - function selectIframeInnerNode(next) { - ElementsTestRunner.selectNodeWithId('head', dumpContextAndNext.bind(null, next)); - }, - - function selectMainFrameNode(next) { - ElementsTestRunner.selectNodeWithId('element', dumpContextAndNext.bind(null, next)); - }, - - function selectIframeNode(next) { - ElementsTestRunner.selectNodeWithId('iframe-per-se', dumpContextAndNext.bind(null, next)); - }, - - function selectIframeImmediateChild(next) { - var iframe = UI.context.flavor(SDK.DOMNode); - var child = iframe.firstChild; - ElementsTestRunner.selectNode(child).then(dumpContextAndNext.bind(null, next)); - }, - ]); - - function dumpContextAndNext(next) { - var context = UI.context.flavor(SDK.ExecutionContext); - var node = UI.context.flavor(SDK.DOMNode); - var contextName = context === mainContext ? 'main' : 'iframe'; - var matchesNode = context.frameId === node.frameId(); - TestRunner.addResult('Execution Context: ' + contextName); - TestRunner.addResult(' matches: ' + matchesNode); - next(); - } -} -</script> -</head> -<body> - <p>Tests that the execution context is changed to match new selected node.</p> - <iframe id="iframe-per-se" src="resources/set-outer-html-body-iframe.html" onload="runTest()"></iframe> - <div id="element"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/shadow/breadcrumb-shadow-roots.html b/third_party/WebKit/LayoutTests/inspector/elements/shadow/breadcrumb-shadow-roots.html deleted file mode 100644 index d3db9978..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/shadow/breadcrumb-shadow-roots.html +++ /dev/null
@@ -1,80 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function loaded() -{ - var template = document.querySelector("#tmpl"); - var root = document.querySelector("#host").createShadowRoot(); - root.appendChild(template.content.cloneNode(true)); - var rootClosed = document.querySelector("#hostClosed").attachShadow({mode: 'closed'}); - rootClosed.appendChild(template.content.cloneNode(true)); - runTest(); -} - -function test() { - Common.settingForTest('showUAShadowDOM').set(true); - ElementsTestRunner.expandElementsTree(step0); - - function step0() { - selectNode(matchUserAgentShadowRoot, step1); - } - - function step1() { - ElementsTestRunner.dumpBreadcrumb('User-agent shadow root breadcrumb'); - selectNode(matchOpenShadowRoot, step2); - } - - function step2() { - ElementsTestRunner.dumpBreadcrumb('Open shadow root breadcrumb'); - selectNode(matchClosedShadowRoot, step3); - } - - function step3() { - ElementsTestRunner.dumpBreadcrumb('Closed shadow root breadcrumb'); - TestRunner.completeTest(); - } - - function selectNode(matchFunction, next) { - ElementsTestRunner.findNode(matchFunction, callback); - function callback(node) { - TestRunner.addSniffer(Elements.ElementsBreadcrumbs.prototype, 'update', next); - Common.Revealer.revealPromise(node); - } - } - - function matchUserAgentShadowRoot(node) { - return node.shadowRootType() === SDK.DOMNode.ShadowRootTypes.UserAgent; - } - - function matchOpenShadowRoot(node) { - return node.shadowRootType() === SDK.DOMNode.ShadowRootTypes.Open; - } - - function matchClosedShadowRoot(node) { - return node.shadowRootType() === SDK.DOMNode.ShadowRootTypes.Closed; - } -} - -</script> -</head> - -<body onload="loaded()"> -<p> -Tests that shadow roots are displayed correctly in breadcrumbs. -</p> - -<input type="text"> -<div id="host"></div> -<div id="hostClosed"></div> -<template id="tmpl"> - <style>.red { color: red; }</style> - <div id="inner" class="red">inner</div> -</template> - - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/shadow/create-shadow-root.html b/third_party/WebKit/LayoutTests/inspector/elements/shadow/create-shadow-root.html deleted file mode 100644 index 99ad9f5..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/shadow/create-shadow-root.html +++ /dev/null
@@ -1,72 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function createShadowRoot(id) -{ - var container = document.getElementById("container"); - var root = container.createShadowRoot(); - root.innerHTML = "<div id='" + id + "'></div>"; -} - -function createShadowRootV1(containerId, id, mode) -{ - var container = document.getElementById(containerId); - var root = container.attachShadow({ mode: mode }); - root.innerHTML = "<div id='" + id + "'></div>"; -} - -function test() { - TestRunner.runTestSuite([ - function testCreateShadowRoot(next) { - testShadowRoot('container', 'createShadowRoot(\'shadow-1\')', next); - }, - - function testCreateSecondShadowRoot(next) { - testShadowRoot('container', 'createShadowRoot(\'shadow-2\')', next); - }, - - function testCreateOpenShadowRoot(next) { - testShadowRoot('containerOpen', 'createShadowRootV1(\'containerOpen\', \'shadow-3\', \'open\')', next); - }, - - function testCreateCloseShadowRoot(next) { - testShadowRoot('containerClosed', 'createShadowRootV1(\'containerClosed\', \'shadow-4\', \'closed\')', next); - }, - ]); - - function testShadowRoot(containerId, code, next) { - var containerNode; - ElementsTestRunner.expandElementsTree(dumpBefore); - - function dumpBefore() { - containerNode = ElementsTestRunner.expandedNodeWithId(containerId); - TestRunner.addResult('==== before ===='); - ElementsTestRunner.dumpElementsTree(containerNode); - TestRunner.evaluateInPage(code, ElementsTestRunner.expandElementsTree.bind(InspectorTest, dumpAfter)); - } - - function dumpAfter() { - TestRunner.addResult('==== after ===='); - ElementsTestRunner.dumpElementsTree(containerNode); - next(); - } - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that elements panel updates dom tree structure upon shadow root creation. -</p> - -<div id="container"><div id="child"></div></div> -<div id="containerOpen"><div id="childOpen"></div></div> -<div id="containerClosed"><div id="childClosed"></div></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/shadow/elements-panel-shadow-selection-on-refresh-1.html b/third_party/WebKit/LayoutTests/inspector/elements/shadow/elements-panel-shadow-selection-on-refresh-1.html deleted file mode 100644 index 523658c3..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/shadow/elements-panel-shadow-selection-on-refresh-1.html +++ /dev/null
@@ -1,48 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="./elements-panel-shadow-selection-on-refresh.js"></script> -<script> - -function test() { - TestRunner.runTestSuite([ - function setup(next) { - Common.settingForTest('showUAShadowDOM').set(true); - ElementsTestRunner.expandElementsTree(next); - }, - - function testOpenShadowRoot(next) { - ElementsTestRunner.findNode(isOpenShadowRoot, ElementsTestRunner.selectReloadAndDump.bind(null, next)); - }, - - function testClosedShadowRoot(next) { - ElementsTestRunner.findNode(isClosedShadowRoot, ElementsTestRunner.selectReloadAndDump.bind(null, next)); - }, - ]); - - function isOpenShadowRoot(node) { - return node && node.shadowRootType() === SDK.DOMNode.ShadowRootTypes.Open; - } - - function isClosedShadowRoot(node) { - return node && node.shadowRootType() === SDK.DOMNode.ShadowRootTypes.Closed; - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that elements panel preserves selected shadow DOM node on page refresh. -</p> -<span id="hostElement"></span><span id="closedHostElement"></span> -<script> -var root = document.getElementById("hostElement").createShadowRoot(); -root.innerHTML = "<input type='text'>"; -var closedRoot = document.getElementById("closedHostElement").attachShadow({mode: 'closed'}); -closedRoot.innerHTML = "<button></button>"; -</script> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/shadow/elements-panel-shadow-selection-on-refresh-2.html b/third_party/WebKit/LayoutTests/inspector/elements/shadow/elements-panel-shadow-selection-on-refresh-2.html deleted file mode 100644 index 8ac10db9..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/shadow/elements-panel-shadow-selection-on-refresh-2.html +++ /dev/null
@@ -1,52 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="./elements-panel-shadow-selection-on-refresh.js"></script> -<script> - -function test() { - TestRunner.runTestSuite([ - function setup(next) { - Common.settingForTest('showUAShadowDOM').set(true); - ElementsTestRunner.expandElementsTree(next); - }, - - function testUserAgentShadowRoot(next) { - ElementsTestRunner.findNode(isUserAgentShadowRoot, ElementsTestRunner.selectReloadAndDump.bind(null, next)); - }, - - function testOpenShadowRootChild(next) { - ElementsTestRunner.findNode(isOpenShadowRootChild, ElementsTestRunner.selectReloadAndDump.bind(null, next)); - }, - ]); - - function isOpenShadowRoot(node) { - return node && node.shadowRootType() === SDK.DOMNode.ShadowRootTypes.Open; - } - - function isUserAgentShadowRoot(node) { - return node && node.shadowRootType() === SDK.DOMNode.ShadowRootTypes.UserAgent; - } - - function isOpenShadowRootChild(node) { - return isOpenShadowRoot(node.parentNode); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that elements panel preserves selected shadow DOM node on page refresh. -</p> -<span id="hostElement"></span><span id="closedHostElement"></span> -<script> -var root = document.getElementById("hostElement").createShadowRoot(); -root.innerHTML = "<input type='text'>"; -var closedRoot = document.getElementById("closedHostElement").attachShadow({mode: 'closed'}); -closedRoot.innerHTML = "<button></button>"; -</script> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/shadow/elements-panel-shadow-selection-on-refresh-3.html b/third_party/WebKit/LayoutTests/inspector/elements/shadow/elements-panel-shadow-selection-on-refresh-3.html deleted file mode 100644 index 828a0b52..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/shadow/elements-panel-shadow-selection-on-refresh-3.html +++ /dev/null
@@ -1,56 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="./elements-panel-shadow-selection-on-refresh.js"></script> -<script> - -function test() { - TestRunner.runTestSuite([ - function setup(next) { - Common.settingForTest('showUAShadowDOM').set(true); - ElementsTestRunner.expandElementsTree(next); - }, - - function testClosedShadowRootChild(next) { - ElementsTestRunner.findNode(isClosedShadowRootChild, ElementsTestRunner.selectReloadAndDump.bind(null, next)); - }, - - function testUserAgentShadowRootChild(next) { - ElementsTestRunner.findNode(isUserAgentShadowRootChild, ElementsTestRunner.selectReloadAndDump.bind(null, next)); - }, - ]); - - function isClosedShadowRoot(node) { - return node && node.shadowRootType() === SDK.DOMNode.ShadowRootTypes.Closed; - } - - function isUserAgentShadowRoot(node) { - return node && node.shadowRootType() === SDK.DOMNode.ShadowRootTypes.UserAgent; - } - - function isClosedShadowRootChild(node) { - return isClosedShadowRoot(node.parentNode); - } - - function isUserAgentShadowRootChild(node) { - return isUserAgentShadowRoot(node.parentNode); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that elements panel preserves selected shadow DOM node on page refresh. -</p> -<span id="hostElement"></span><span id="closedHostElement"></span> -<script> -var root = document.getElementById("hostElement").createShadowRoot(); -root.innerHTML = "<input type='text'>"; -var closedRoot = document.getElementById("closedHostElement").attachShadow({mode: 'closed'}); -closedRoot.innerHTML = "<button></button>"; -</script> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/shadow/inspect-deep-shadow-element.html b/third_party/WebKit/LayoutTests/inspector/elements/shadow/inspect-deep-shadow-element.html deleted file mode 100644 index 5c2cc24..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/shadow/inspect-deep-shadow-element.html +++ /dev/null
@@ -1,60 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/console-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.firstElementsTreeOutline().addEventListener( - Elements.ElementsTreeOutline.Events.SelectedNodeChanged, selectedNodeChanged); - - var tests = [ - ['shadow', 'inspect(host.shadowRoot.firstChild.firstChild.firstChild)'], - ['shadow-open', 'inspect(hostOpen.shadowRoot.firstChild.firstChild.firstChild)'] - ]; - - function selectedNodeChanged(event) { - var node = event.data.node; - if (!node) - return; - if (node.getAttribute('id') == tests[0][0]) { - TestRunner.addResult(Components.DOMPresentationUtils.xPath(node, false)); - tests.shift(); - nextTest(); - } - } - - function nextTest() { - if (!tests.length) { - TestRunner.completeTest(); - return; - } - ConsoleTestRunner.evaluateInConsole(tests[0][1]); - } - - nextTest(); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that inspect element action works for deep shadow elements. -</p> - -<div> - <div> - <div id="host"></div> - <span id="hostOpen"></span> - </div> -</div> - -<script> - document.querySelector('#host').createShadowRoot().innerHTML = "<div><div><span id='shadow'>Shadow</span></div></div>"; - document.querySelector('#hostOpen').attachShadow({ mode: "open" }).innerHTML = "<div><div><span id='shadow-open'>Shadow</span></div></div>"; -</script> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/shadow/reveal-shadow-dom-node.html b/third_party/WebKit/LayoutTests/inspector/elements/shadow/reveal-shadow-dom-node.html deleted file mode 100644 index ccf48ae..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/shadow/reveal-shadow-dom-node.html +++ /dev/null
@@ -1,58 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.firstElementsTreeOutline().addEventListener( - Elements.ElementsTreeOutline.Events.SelectedNodeChanged, selectedNodeChanged); - - var nodeChangesRemaining = 2; - function selectedNodeChanged(event) { - var node = event.data.node; - if (node.nodeName() === 'BODY') - return; - TestRunner.addResult('SelectedNodeChanged: ' + node.localName() + ' ' + shadowDOMPart(node)); - if (!--nodeChangesRemaining) - TestRunner.completeTest(); - } - - function shadowDOMPart(node) { - if (!node.isInShadowTree()) - return '(not in shadow tree)'; - return '(in ' + (node.ancestorUserAgentShadowRoot() ? 'user-agent' : 'author') + ' shadow DOM)'; - } - - ElementsTestRunner.nodeWithId('nested-input', function(node) { - node.shadowRoots()[0].getChildNodes(childrenCallback); - - function childrenCallback(children) { - var shadowDiv = children[0]; - TestRunner.addResult('User-agent shadow DOM hidden:'); - UI.panels.elements.revealAndSelectNode(shadowDiv).then(() => { - Common.settingForTest('showUAShadowDOM').set(true); - TestRunner.addResult('User-agent shadow DOM shown:'); - UI.panels.elements.revealAndSelectNode(shadowDiv); - }); - } - }); -} -</script> -</head> - -<body onload="runTest()"> - -<p id="description">This test verifies that the correct node is revealed in the DOM tree when asked to reveal a user-agent shadow DOM node.</p> - -<p id="test1"></p> - -<script> -var input = document.createElement("input"); -input.id = "nested-input"; -input.value = "test"; -test1.createShadowRoot().appendChild(input); -</script> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/shadow/shadow-distribution.html b/third_party/WebKit/LayoutTests/inspector/elements/shadow/shadow-distribution.html deleted file mode 100644 index cda8fe6..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/shadow/shadow-distribution.html +++ /dev/null
@@ -1,151 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function createShadowRoot(hostId, slots) -{ - var host = document.createElement("div"); - host.id = hostId; - document.body.appendChild(host); - - var shadow = host.attachShadow({ mode: "open" }); - for (var i = 0; i < slots.length; i++) { - var slot = document.createElement("slot"); - slot.id = "slot" + (i + 1); - if (slots[i]) - slot.setAttribute("name", slots[i]); - shadow.appendChild(slot); - } -} - -function createChild(hostId, childId, tagName, slotName) -{ - var child = document.createElement(tagName); - child.id = childId; - if (slotName) - child.setAttribute("slot", slotName); - var host = document.getElementById(hostId); - host.appendChild(child); -} - -function resolveElement(elementId) -{ - var parts = elementId.split("."); - var root = document; - while (parts.length > 1) { - root = root.getElementById(parts[0]).shadowRoot; - parts.shift(); - } - return root.getElementById(parts[0]); -} - -function changeAttribute(elementId, name, value) -{ - var element = resolveElement(elementId); - if (value) - element.setAttribute(name, value); - else - element.removeAttribute(name); -} - -function removeElement(elementId) -{ - var element = resolveElement(elementId); - element.parentNode.removeChild(element); -} - -function reparentElement(elementId, parentId) -{ - var element = resolveElement(elementId); - var parent = resolveElement(parentId); - parent.appendChild(element); -} - -function test() { - TestRunner.runTestSuite([ - function createHost1(next) { - evalAndDump('createShadowRoot(\'host1\', [\'slot1\', \'slot2\', \'\'])', 'host1', next); - }, - - function createChild1(next) { - evalAndDump('createChild(\'host1\', \'child1\', \'span\', \'slot2\')', 'host1', next); - }, - - function createChild2(next) { - evalAndDump('createChild(\'host1\', \'child2\', \'div\', \'\')', 'host1', next); - }, - - function createChild3(next) { - evalAndDump('createChild(\'host1\', \'child3\', \'h1\', \'slot2\')', 'host1', next); - }, - - function createChild4(next) { - evalAndDump('createChild(\'host1\', \'child4\', \'h2\', \'slot1\')', 'host1', next); - }, - - function createChild5(next) { - evalAndDump('createChild(\'host1\', \'child5\', \'h3\', \'slot3\')', 'host1', next); - }, - - function modifyChild1(next) { - evalAndDump('changeAttribute(\'child1\', \'slot\', \'slot1\')', 'host1', next); - }, - - function modifyChild4(next) { - evalAndDump('changeAttribute(\'child4\', \'slot\', \'\')', 'host1', next); - }, - - function modifySlot1(next) { - evalAndDump('changeAttribute(\'host1.slot1\', \'name\', \'slot3\')', 'host1', next); - }, - - function modifySlot2(next) { - evalAndDump('changeAttribute(\'host1.slot2\', \'name\', \'slot1\')', 'host1', next); - }, - - function removeChild3(next) { - evalAndDump('removeElement(\'child3\')', 'host1', next); - }, - - function removeChild1(next) { - evalAndDump('removeElement(\'child1\')', 'host1', next); - }, - - function removeSlot1(next) { - evalAndDump('removeElement(\'host1.slot1\')', 'host1', next); - }, - - function createHost2(next) { - evalAndDump('createShadowRoot(\'host2\', [\'slot3\'])', 'host2', next); - }, - - function moveChild5FromHost1ToHost2(next) { - evalAndDump('reparentElement(\'child5\', \'host2\')', 'host2', next); - }, - - function modifyChild4(next) { - evalAndDump('changeAttribute(\'child4\', \'slot\', \'slot1\')', 'host1', next); - }, - ]); - - function evalAndDump(code, nodeId, next) { - TestRunner.evaluateInPage(code, ElementsTestRunner.expandElementsTree.bind(InspectorTest, dump)); - - function dump() { - ElementsTestRunner.dumpElementsTree(ElementsTestRunner.expandedNodeWithId(nodeId)); - next(); - } - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that elements panel updates dom tree structure upon distribution in shadow dom. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/shadow/shadow-host-display-modes.html b/third_party/WebKit/LayoutTests/inspector/elements/shadow/shadow-host-display-modes.html deleted file mode 100644 index 11fdb79..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/shadow/shadow-host-display-modes.html +++ /dev/null
@@ -1,154 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> -function createShadowRootFromTemplate(root, selector, templateId) -{ - var shadowHost = root.querySelector(selector); - var shadowRoot = shadowHost.createShadowRoot(); - var template = document.querySelector(templateId); - var clone = document.importNode(template.content, true); - shadowRoot.appendChild(clone); - return shadowHost; -} - -function initOldestShadowRoot() -{ - createShadowRootFromTemplate(document, "#shadowHost", "#oldestShadowRootTemplate"); -} - -function initYoungestShadowRoot() -{ - createShadowRootFromTemplate(document, "#shadowHost", "#youngestShadowRootTemplate"); -} - -function initInnerShadowRoot() -{ - var shadowHost = document.querySelector("#shadowHost"); - var innerShadowHost = createShadowRootFromTemplate(shadowHost.shadowRoot, ".innerShadowHost", "#innerShadowRootTemplate"); - innerShadowHost.id = "innerShadowHost"; -} - -var lastDistributedNodeId = 0; - -function addDistributedNode(oldest) -{ - var node = document.createElement("div"); - node.classList.add(oldest ? "distributeMeToOldest" : "distributeMeToYoungest"); - node.classList.add("distributeMeAsWell_" + (++lastDistributedNodeId)); - var shadowHost = document.querySelector("#shadowHost"); - shadowHost.appendChild(node); -} - -function addDistributedNodeToOldest() -{ - addDistributedNode(true); -} - -function test() { - var shadowHostNode; - var treeOutline; - var shadowHostTreeElement; - var innerShadowHostNode; - var innerShadowHostTreeElement; - - ElementsTestRunner.expandElementsTree(elementsTreeExpanded); - - function elementsTreeExpanded(node) { - treeOutline = ElementsTestRunner.firstElementsTreeOutline(); - shadowHostNode = ElementsTestRunner.expandedNodeWithId('shadowHost'); - shadowHostTreeElement = treeOutline.findTreeElement(shadowHostNode); - expandAndDumpShadowHostNode('========= Original ========', originalElementsTreeDumped); - } - - function originalElementsTreeDumped(node) { - TestRunner.evaluateInPage('initOldestShadowRoot()', onOldestShadowRootInitialized); - } - - function onOldestShadowRootInitialized() { - expandAndDumpShadowHostNode('========= After shadow root created ========', onOldestShadowRootDumped); - } - - function onOldestShadowRootDumped() { - waitForModifiedNodesUpdate('After adding distributed node', distributedNodeChangedAfterFirstAdding); - TestRunner.evaluateInPage('addDistributedNodeToOldest()'); - } - - function distributedNodeChangedAfterFirstAdding() { - waitForModifiedNodesUpdate('After adding another distributed node', distributedNodeChangedAfterSecondAdding); - TestRunner.evaluateInPage('addDistributedNodeToOldest()'); - } - - function distributedNodeChangedAfterSecondAdding() { - waitForModifiedNodesUpdate( - 'After adding youngest shadow root', distributedNodeChangedAfterAddingYoungestShadowRoot); - TestRunner.evaluateInPage('initYoungestShadowRoot()'); - } - - function distributedNodeChangedAfterAddingYoungestShadowRoot() { - waitForModifiedNodesUpdate('After adding inner shadow root node', distributedNodeChangedAfterAddingInnerShadowRoot); - TestRunner.evaluateInPage('initInnerShadowRoot()'); - } - - function distributedNodeChangedAfterAddingInnerShadowRoot() { - TestRunner.completeTest(); - } - - function waitForModifiedNodesUpdate(title, next) { - TestRunner.addSniffer(Elements.ElementsTreeOutline.prototype, '_updateModifiedNodes', callback); - - function callback() { - expandAndDumpShadowHostNode('========= ' + title + ' ========', next); - } - } - - function expandAndDumpShadowHostNode(title, next) { - TestRunner.addResult(title); - ElementsTestRunner.expandElementsTree(callback); - - function callback() { - ElementsTestRunner.dumpElementsTree(shadowHostNode); - next(); - } - } -} -</script> -</head> -<body onload="runTest()"> -<p>Tests that distributed nodes and their updates are correctly shown in different shadow host display modes.</p> -<template id="youngestShadowRootTemplate"> - <div class="youngestShadowMain"> - <shadow></shadow> - <content select=".distributeMeToYoungest"><div id="fallbackYoungest"></div></content> - <div class="innerShadowHost"> - <content in-youngest-shadow-root select=".distributeMeToInner"></content> - </div> - </div> -</template> -<template id="oldestShadowRootTemplate"> - <div class="oldestShadowMain"> - <content select=".distributeMeToOldest"><div id="fallbackOldest"></div></content> - </div> -</template> -<template id="innerShadowRootTemplate"> - <div class="innerShadowMain"> - <content in-inner-shadow-root select=".distributeMeToInner"></content> - </div> -</template> -<div id="shadowHost"> - <div class="distributeMeToYoungest original"> - youngest distributed text - </div> - <div class="distributeMeToOldest original"> - oldest distributed text - </div> - <div class="distributeMeToInner original"> - oldest distributed text - </div> - <div class="distributeMeToInner original2"> - oldest distributed text - </div> -</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/shadow/shadow-root.html b/third_party/WebKit/LayoutTests/inspector/elements/shadow/shadow-root.html deleted file mode 100644 index 80acf4dc..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/shadow/shadow-root.html +++ /dev/null
@@ -1,35 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.expandElementsTree(function() { - var container = ElementsTestRunner.expandedNodeWithId('container'); - ElementsTestRunner.dumpElementsTree(container); - TestRunner.completeTest(); - }); -} -</script> -</head> - -<body onload="runTest()"> - -<p id="description">This test verifies that author shadow root's #document-fragment is displayed and user-agent one is hidden by default.</p> - -<div id="container"> - <div id="test1"></div> - <div id="test2">only test</div> - <div id="test3">with <span>elements</span></div> - <input type="text" value="Test"> -</div> - -<script> -test1.createShadowRoot(); -test2.attachShadow({ mode: "open" }); -test3.attachShadow({ mode: "closed" }); -</script> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/shadow/update-shadowdom.html b/third_party/WebKit/LayoutTests/inspector/elements/shadow/update-shadowdom.html deleted file mode 100644 index f09fe70d..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/shadow/update-shadowdom.html +++ /dev/null
@@ -1,39 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> -function updateShadowDOM() -{ - shadowRoot.removeChild(shadowRoot.firstChild); -} - -function test() { - ElementsTestRunner.expandElementsTree(function() { - TestRunner.evaluateInPage('updateShadowDOM()', function() { - ElementsTestRunner.expandElementsTree(function() { - var containerElem = ElementsTestRunner.expandedNodeWithId('container'); - ElementsTestRunner.dumpElementsTree(containerElem); - TestRunner.completeTest(); - }); - }); - }); -} -</script> -</head> - -<body onload="runTest()"> - -<p id="description">This test confirms that updating the shadow dom is reflected to the Inspector.</p> - -<div id="container"> - <div id="host"></div> -</div> - -<script> -var shadowRoot = host.createShadowRoot(); -shadowRoot.innerHTML = "<div></div>"; -</script> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/add-new-rule-inline-style-csp.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-1/add-new-rule-inline-style-csp.html deleted file mode 100644 index 9d36c1d..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/add-new-rule-inline-style-csp.html +++ /dev/null
@@ -1,121 +0,0 @@ -<html> -<head> -<meta http-equiv="Content-Security-Policy" content="style-src https://*:443 'unsafe-eval'"> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - var nodeId; - var rule; - var matchedStyles; - - TestRunner.runTestSuite([ - function testSetUp(next) { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', next); - }, - - function testAddRule(next) { - ElementsTestRunner.nodeWithId('inspected', nodeCallback); - - function nodeCallback(node) { - nodeId = node.id; - ElementsTestRunner.addNewRule('#inspected', successCallback); - } - - function successCallback(section) { - rule = section.style().parentRule; - matchedStyles = section._matchedStyles; - TestRunner.addResult('=== Rule added ==='); - TestRunner.addResult(rule.selectorText() + ' {' + rule.style.cssText + '}'); - TestRunner.addResult( - 'Selectors matching the (#inspected) node: ' + ElementsTestRunner.matchingSelectors(matchedStyles, rule)); - next(); - } - }, - - function testAddProperty(next) { - rule.style.appendProperty('width', '100%', callback); - - function callback(success) { - TestRunner.addResult('=== Added rule modified ==='); - if (!success) { - TestRunner.addResult('[!] No valid rule style received'); - TestRunner.completeTest(); - } else { - dumpProperties(rule.style); - rule.setSelectorText('body').then(onSelectorUpdated).then(successCallback); - } - } - - function onSelectorUpdated(success) { - if (!success) { - TestRunner.addResult('[!] Failed to change selector'); - TestRunner.completeTest(); - return; - } - return matchedStyles.recomputeMatchingSelectors(rule); - } - - function successCallback() { - TestRunner.addResult('=== Selector changed ==='); - TestRunner.addResult(rule.selectorText() + ' {' + rule.style.cssText + '}'); - TestRunner.addResult( - 'Selectors matching the (#inspected) node: ' + ElementsTestRunner.matchingSelectors(matchedStyles, rule)); - - next(); - } - }, - - function testModifyInlineStyle(next) { - var inlineStyle; - TestRunner.cssModel.inlineStylesPromise(nodeId).then(stylesCallback); - TestRunner.cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetChanged, onStyleSheetChanged); - function onStyleSheetChanged(event) { - if (event.data && event.data.edit) - inlineStyle.rebase(event.data.edit); - } - - function stylesCallback(inlineStyleResult) { - if (!inlineStyleResult || !inlineStyleResult.inlineStyle) { - TestRunner.completeTest(); - return; - } - inlineStyle = inlineStyleResult.inlineStyle; - inlineStyle.appendProperty('font-size', '14px', appendCallback); - } - - function appendCallback(success) { - TestRunner.addResult('=== Inline style modified ==='); - if (!success) { - TestRunner.addResult('No valid inline style received'); - TestRunner.completeTest(); - return; - } - - dumpProperties(inlineStyle); - next(); - } - } - ]); - - function dumpProperties(style) { - if (!style) - return; - var allProperties = style.allProperties(); - for (var i = 0; i < allProperties.length; ++i) - TestRunner.addResult(allProperties[i].text); - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that adding a new rule does not crash the renderer and modifying an inline style does not report errors when forbidden by Content-Security-Policy. -</p> - -<div id="inspected">Text</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/add-new-rule-invalid-selector.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-1/add-new-rule-invalid-selector.html deleted file mode 100644 index 6c866ba..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/add-new-rule-invalid-selector.html +++ /dev/null
@@ -1,35 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - TestRunner.runTestSuite([ - function init(next) { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', next); - }, - - function keyframesRuleSelector(next) { - ElementsTestRunner.addNewRule('@-webkit-keyframes shake', callback); - - function callback() { - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - next(); - } - } - ]); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that adding a new rule with invalid selector works as expected. -</p> - -<div id="inspected">Text</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/add-new-rule-with-style-after-body.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-1/add-new-rule-with-style-after-body.html deleted file mode 100644 index 363c7cd8..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/add-new-rule-with-style-after-body.html +++ /dev/null
@@ -1,58 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> -function addStyle() -{ - var style = document.createElement("style"); - document.documentElement.appendChild(style); - style.sheet.insertRule("foo {display: none;}", 0); -} - -function test() { - TestRunner.cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetAdded, stylesheetAdded); - TestRunner.evaluateInPage('addStyle()'); - - function stylesheetAdded() { - TestRunner.cssModel.removeEventListener(SDK.CSSModel.Events.StyleSheetAdded, stylesheetAdded); - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); - } - - var treeElement; - var hasResourceChanged; - - function step1() { - ElementsTestRunner.addNewRule('inspected', step2); - } - - function step2() { - var section = ElementsTestRunner.firstMatchedStyleSection(); - var newProperty = section.addNewBlankProperty(); - newProperty.startEditing(); - newProperty.nameElement.textContent = 'color'; - newProperty.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - newProperty.valueElement.textContent = 'maroon'; - newProperty.valueElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - ElementsTestRunner.waitForStyles('inspected', step3); - } - - function step3() { - TestRunner.addResult('After adding new rule:'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that adding a new rule works when there is a STYLE element after BODY. TIMEOUT SHOULD NOT OCCUR! <a href="https://bugs.webkit.org/show_bug.cgi?id=111299">Bug 111299</a> -</p> - -<div id="inspected" style="font-size: 12px">Text</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/background-parsing-crash.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-1/background-parsing-crash.html deleted file mode 100644 index 7eca801..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/background-parsing-crash.html +++ /dev/null
@@ -1,22 +0,0 @@ -<html> -<head> -<style> -.absent { - background: #fff url(foo.png) no-repeat left 4px; -} - -body { - background: #fff; -} -</style> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script> -function test() { - TestRunner.completeTest(); -} -</script> -</head> -<body onload="runTest()"> -This test passes if it doesn't ASSERT. -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/cached-sync-computed-styles.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-1/cached-sync-computed-styles.html deleted file mode 100644 index cacff92..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/cached-sync-computed-styles.html +++ /dev/null
@@ -1,62 +0,0 @@ -<html> -<head> -<style id="style"> -#inspected { - background-color: green; -} -</style> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function updateStyle() -{ - document.getElementById("style").textContent = "#inspected { color: red }"; -} - -function test() { - ElementsTestRunner.nodeWithId('inspected', step1); - var backendCallCount = 0; - var nodeId; - - function onBackendCall(domain, method, params) { - if (method === 'CSS.getComputedStyleForNode' && params.nodeId === nodeId) - ++backendCallCount; - } - - function step1(node) { - var callsLeft = 2; - nodeId = node.id; - TestRunner.addSniffer(Protocol.TargetBase.prototype, '_wrapCallbackAndSendMessageObject', onBackendCall, true); - TestRunner.cssModel.computedStylePromise(nodeId).then(styleCallback); - TestRunner.cssModel.computedStylePromise(nodeId).then(styleCallback); - function styleCallback() { - if (--callsLeft) - return; - TestRunner.addResult('# of backend calls sent [2 requests]: ' + backendCallCount); - TestRunner.evaluateInPage('updateStyle()', step2); - } - } - - function step2() { - TestRunner.cssModel.computedStylePromise(nodeId).then(callback); - function callback() { - TestRunner.addResult('# of backend calls sent [style update + another request]: ' + backendCallCount); - TestRunner.completeTest(); - } - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that computed styles are cached across synchronous requests. -</p> - -<div> - <div id="inspected">Test</div> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/case-sensitive-suggestions.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-1/case-sensitive-suggestions.html deleted file mode 100644 index ff29efa..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/case-sensitive-suggestions.html +++ /dev/null
@@ -1,71 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - var prompt = new Elements.StylesSidebarPane.CSSPropertyPrompt(SDK.cssMetadata().allProperties(), [], null, true); - - TestRunner.runTestSuite([ - function testForUpperCase(next) { - testAutoCompletionsAgainstCase(prompt, 'C', next); - }, - - function testForLowerCase(next) { - testAutoCompletionsAgainstCase(prompt, 'b', next); - }, - - function testForMixedCase(next) { - testAutoCompletionsAgainstCase(prompt, 'bAcK', next); - } - ]); - - function testAutoCompletionsAgainstCase(prompt, inputText, callback) { - var proxyElement = document.body.createChild('span'); - proxyElement.textContent = inputText; - var selectionRange = document.createRange(); - selectionRange.selectNodeContents(proxyElement); - var prefix = selectionRange.toString(); - prompt._buildPropertyCompletions(inputText.substring(0, inputText.length - prefix.length), prefix, true) - .then(completions); - - function completions(result) { - function isUpperCase(str) { - return str === str.toUpperCase(); - } - - function isLowerCase(str) { - return str === str.toLowerCase(); - } - - var Case = {Upper: 0, Lower: 1, Mixed: 2}; - - var inputCase = isUpperCase(inputText) ? Case.Upper : isLowerCase(inputText) ? Case.Lower : Case.Mixed; - - for (var i = 0; i < result.length; ++i) { - switch (inputCase) { - case Case.Upper: - if (!isUpperCase(result[i].text)) - TestRunner.addResult('Error: Suggestion ' + result[i].text + ' must be in UPPERCASE.'); - break; - case Case.Lower: - if (!isLowerCase(result[i].text)) - TestRunner.addResult('Error: Suggestion ' + result[i].text + ' must be in lowercase.'); - break; - } - } - proxyElement.remove(); - callback(); - } - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that text prompt suggestions' casing follows that of the user input. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/color-aware-property-value-edit.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-1/color-aware-property-value-edit.html deleted file mode 100644 index 15d7df9..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/color-aware-property-value-edit.html +++ /dev/null
@@ -1,98 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - TestRunner.runTestSuite([ - function init(next) { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected1', next); - }, - - function editKeywordAsOriginal(next) { - startEditingAndDumpValue(Common.Color.Format.Original, 'border', next); - }, - - function editKeywordAsHex(next) { - startEditingAndDumpValue(Common.Color.Format.HEX, 'border', next); - }, - - function editKeywordAsHSL(next) { - startEditingAndDumpValue(Common.Color.Format.HSL, 'border', next); - }, - - function editKeywordAsRGB(next) { - startEditingAndDumpValue(Common.Color.Format.RGB, 'border', onValueDumped); - function onValueDumped() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected2', next); - } - }, - - function editHexAsOriginal(next) { - startEditingAndDumpValue(Common.Color.Format.Original, 'color', next); - }, - - function editHexAsHex(next) { - startEditingAndDumpValue(Common.Color.Format.HEX, 'color', next); - }, - - function editHexAsHSL(next) { - startEditingAndDumpValue(Common.Color.Format.HSL, 'color', next); - }, - - function editHexAsRGB(next) { - startEditingAndDumpValue(Common.Color.Format.RGB, 'color', next); - }, - - function editNewProperty(next) { - var section = ElementsTestRunner.inlineStyleSection(); - - treeElement = section.addNewBlankProperty(0); - treeElement.startEditing(); - treeElement.nameElement.textContent = 'border-color'; - treeElement.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - treeElement.valueElement.textContent = 'hsl(120, 100%, 25%)'; - treeElement.kickFreeFlowStyleEditForTest(); - ElementsTestRunner.waitForStyleApplied(kicked); - - function kicked() { - treeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('Tab', false, false, true)); - treeElement.nameElement.dispatchEvent(TestRunner.createKeyEvent('Tab')); - TestRunner.addResult(treeElement.valueElement.textContent); - next(); - } - } - ]); - - function setFormat(newFormat, callback) { - Common.settingForTest('colorFormat').set(newFormat); - UI.panels.elements._stylesWidget.doUpdate().then(callback); - } - - function startEditingAndDumpValue(format, propertyName, next) { - setFormat(format, onFormatSet); - - function onFormatSet() { - var treeElement = ElementsTestRunner.getElementStylePropertyTreeItem(propertyName); - treeElement.startEditing(treeElement.valueElement); - TestRunner.addResult(treeElement.valueElement.textContent); - treeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('Escape')); - next(); - } - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that property value being edited uses the user-specified color format. -</p> - -<div id="inspected1" style="border: 1px solid red">inspected1</div> -<div id="inspected2" style="color: #ffffee">inspected2</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/color-nicknames-lowercase.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-1/color-nicknames-lowercase.html deleted file mode 100644 index 92b0134..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/color-nicknames-lowercase.html +++ /dev/null
@@ -1,26 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script> - -function test() { - var badNames = []; - for (var nickname in Common.Color.Nicknames) { - if (nickname.toLowerCase() !== nickname) - badNames.push(nickname); - } - - if (badNames.length === 0) - TestRunner.addResult('PASSED'); - else - TestRunner.addResult('Non-lowercase color nicknames: ' + badNames.join(', ')); - - TestRunner.completeTest(); -} - -</script> -</head> -<body onload="runTest()"> -<p>Tests that all color nicknames are lowercase to facilitate lookup</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/color-swatch.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-1/color-swatch.html deleted file mode 100644 index 1a23d96..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/color-swatch.html +++ /dev/null
@@ -1,70 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<style> -#inspected { - color: red; - --variable: red; -} -</style> -<script> -function test() { - TestRunner.runTestSuite([ - function selectNode(next) { - ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('inspected', next); - }, - - function testColorSwatchInMatchRules(next) { - var treeItem = ElementsTestRunner.getMatchedStylePropertyTreeItem('color'); - TestRunner.addResult('Initial color value: ' + treeItem.valueElement.textContent); - var swatch = - treeItem.valueElement.querySelector('span[is=color-swatch]').shadowRoot.querySelector('.color-swatch-inner'); - swatch.dispatchEvent(createShiftClick()); - TestRunner.addResult('After shift-click: ' + treeItem.valueElement.textContent); - TestRunner.addResult('Has popover before click: ' + popoverVisible()); - - swatch.click(); - TestRunner.addResult('Has popover after click: ' + popoverVisible()); - next(); - }, - - function testColorSwatchInCustomProperty(next) { - var treeItem = ElementsTestRunner.getMatchedStylePropertyTreeItem('--variable'); - var swatch = treeItem.valueElement.querySelector('span[is=color-swatch]'); - TestRunner.addResult('Custom property has a color swatch: ' + !!swatch); - next(); - }, - - function testColorSwatchInComputedRules(next) { - var computedProperty = ElementsTestRunner.findComputedPropertyWithName('color').title; - var computedPropertyValue = computedProperty.querySelector('.value'); - TestRunner.addResult('Initial color value: ' + computedPropertyValue.textContent); - var swatch = - computedPropertyValue.querySelector('span[is=color-swatch]').shadowRoot.querySelector('.color-swatch-inner'); - swatch.dispatchEvent(createShiftClick()); - TestRunner.addResult('After shift-click color value: ' + computedPropertyValue.textContent); - next(); - } - ]); - - function createShiftClick() { - var event = document.createEvent('MouseEvent'); - event.initMouseEvent('click', true, true, null, 1, 0, 0, 0, 0, false, false, true, false, 0, null); - return event; - } - - function popoverVisible() { - return !!document.body.querySelector('* /deep/ .spectrum-color'); - } -} -</script> -</head> - -<body onload="runTest()"> -<p>The patch verifies that color swatch functions properly in matched and computed styles. crbug.com/461363</p> - -<div id="inspected">Inspected div</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/commit-selector-mark-matching.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-1/commit-selector-mark-matching.html deleted file mode 100644 index ae402fc..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/commit-selector-mark-matching.html +++ /dev/null
@@ -1,58 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - var nodeId; - var stylesPane; - - TestRunner.runTestSuite([ - function setUp(next) { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', next); - }, - - function addRule(next) { - ElementsTestRunner.nodeWithId('inspected', nodeCallback); - - function nodeCallback(node) { - nodeId = node.id; - stylesPane = UI.panels.elements._stylesWidget; - ElementsTestRunner.addNewRule('foo, #inspected, .bar, #inspected', callback); - } - - function callback() { - ElementsTestRunner.dumpSelectedElementStyles(true, false, false, true); - next(); - } - }, - - function changeSelector(next) { - var section = ElementsTestRunner.firstMatchedStyleSection(); - section.startEditingSelector(); - var selectorElement = section._selectorElement; - selectorElement.textContent = '#inspected, a, hr'; - ElementsTestRunner.waitForSelectorCommitted(callback); - selectorElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - - function callback() { - ElementsTestRunner.dumpSelectedElementStyles(true, false, false, true); - next(); - } - } - ]); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that matching selectors are marked properly after new rule creation and selector change. -</p> - -<div id="inspected"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/commit-selector.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-1/commit-selector.html deleted file mode 100644 index 9fe5a1ac..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/commit-selector.html +++ /dev/null
@@ -1,54 +0,0 @@ -<html> -<head> -<style> -#inspected { - color: green; -} -</style> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); - - function step1() { - TestRunner.addResult('=== Before selector modification ==='); - ElementsTestRunner.dumpSelectedElementStyles(true); - var section = ElementsTestRunner.firstMatchedStyleSection(); - section.startEditingSelector(); - section._selectorElement.textContent = 'hr, #inspected '; - ElementsTestRunner.waitForSelectorCommitted(step2); - section._selectorElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - } - - function step2() { - TestRunner.addResult('=== After non-affecting selector modification ==='); - ElementsTestRunner.dumpSelectedElementStyles(true); - var section = ElementsTestRunner.firstMatchedStyleSection(); - section.startEditingSelector(); - section._selectorElement.textContent = '#inspectedChanged'; - ElementsTestRunner.waitForSelectorCommitted(step3); - section._selectorElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - } - - function step3() { - TestRunner.addResult('=== After affecting selector modification ==='); - ElementsTestRunner.dumpSelectedElementStyles(true); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that renaming a selector updates element styles. <a href="https://bugs.webkit.org/show_bug.cgi?id=70018">Bug 70018</a>. -</p> - -<div id="inspected" style="color: red">Text</div> -<div id="other"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/css-live-edit.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-1/css-live-edit.html deleted file mode 100644 index 39b30c2..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/css-live-edit.html +++ /dev/null
@@ -1,39 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="../../../http/tests/inspector/live-edit-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<link rel="stylesheet" href="../styles/resources/css-live-edit.css"> -<div id=foo></div> -<script> - -function test() { - TestRunner.runTestSuite([function testLiveEdit(next) { - SourcesTestRunner.showScriptSource('css-live-edit.css', didShowResource); - - function didShowResource(sourceFrame) { - TestRunner.addSniffer(SDK.CSSModel.prototype, '_fireStyleSheetChanged', didEditResource); - SourcesTestRunner.replaceInSource(sourceFrame, 'font-size: 12px;', 'font-size: 20px;'); - } - - function didEditResource() { - ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('foo', didSelectElement); - } - - function didSelectElement() { - ElementsTestRunner.dumpSelectedElementStyles(false, true); - next(); - } - }]); -}; - -</script> - -</head> - -<body onload="runTest()"> -<p>Tests that styles are updated when live-editing css resource.</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/css-outline.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-1/css-outline.html deleted file mode 100644 index 0e9bffd..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/css-outline.html +++ /dev/null
@@ -1,87 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<style id="styler"> -@import url("some-url-to-load-css.css") print; -@charset "ISO-8859-15"; -@namespace svg url(http://www.w3.org/2000/svg); -@font-face { - font-family: "Example Font"; - src: url("/fonts/example"); -} - -@page { - margin: 1in 1.5in; -} -@page :right { - margin-right: 5cm; /* right pages only */ -} -@page :first { - margin-top: 8cm; /* extra top margin on the first page */ -} - -div { color: red } -#fluffy { - border: 1px solid black; - z-index: 1; - /* -webkit-disabled-property: rgb(1, 2, 3) */ -} -input:-moz-placeholder { text-overflow: ellipsis; } -.class-name, p /* style all paragraphs as well */ { - border-color: blue; - -lol-cats: "dogs" /* unexisting property */ -} - -@keyframes identifier { - 0% { top: 0; left: 0; } - 30% { top: 50px; } - 68%, 72% { left: 50px; } - 100% { top: 100px; left: 100%; } -} - -svg|a { - text-decoration: underline; -} - -@media (max-width:500px) { - span { -/* font-family: Times New Roman; */ - -webkit-border-radius: 10px; - font-family: "Example Font" - } -} -</style> -<script> - -function initialize_Formatter() { - InspectorTest.preloadModule('formatter'); -} - -function getCSS() -{ - return document.querySelector("#styler").textContent; -} - -function test() { - function onRulesParsed(isLastChunk, rules) { - for (var i = 0; i < rules.length; ++i) - TestRunner.addObject(rules[i]); - if (isLastChunk) - TestRunner.completeTest(); - } - - function onStyleFetched(result) { - Formatter.formatterWorkerPool().parseCSS(result.value, onRulesParsed); - } - - TestRunner.evaluateInPage('getCSS()', onStyleFetched); -} - -</script> - -</head> - -<body onload="runTest()"> -<p>The test verifies the CSS outline functionality.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/cssom-media-insert-crash.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-1/cssom-media-insert-crash.html deleted file mode 100644 index 3e667c7..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/cssom-media-insert-crash.html +++ /dev/null
@@ -1,36 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('box', step1); - - function step1() { - ElementsTestRunner.dumpSelectedElementStyles(true, false, true, false); - TestRunner.completeTest(); - } -} - -</script> -<style> -div { - border: 1px solid black; - background-color: white; - padding: 20px; -} -</style> -</head> - -<body onload="runTest()"> -Tests that the inspected page does not crash after inspecting element with CSSOM added rules. <a href="http://crbug.com/373508">Bug 373508</a> -<div id="box">Inspecting this element crashes DevTools</div> -<script> -var lastSheet = document.styleSheets[document.styleSheets.length - 1]; -var mediaIndex = lastSheet.insertRule('@media all { }', lastSheet.cssRules.length); -var mediaRule = lastSheet.cssRules[mediaIndex]; -mediaRule.insertRule('#box { background: red; color: white; }', mediaRule.cssRules.length); -</script> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/disable-property-workingcopy-update.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-1/disable-property-workingcopy-update.html deleted file mode 100644 index 7e59192..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/disable-property-workingcopy-update.html +++ /dev/null
@@ -1,81 +0,0 @@ -<html> -<head> -<link rel="stylesheet" href="../styles/resources/disable-property-workingcopy-update.css"> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - var cssSourceFrame; - Bindings.StylesSourceMapping.MinorChangeUpdateTimeoutMs = 10; - - TestRunner.runTestSuite([ - function selectContainer(next) { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', next); - }, - - function showEditor(next) { - var headers = TestRunner.cssModel.styleSheetHeaders(); - for (var i = 0; i < headers.length; ++i) { - if (headers[i].sourceURL.endsWith('.css')) { - var cssLocation = new SDK.CSSLocation(headers[i], 0); - SourcesTestRunner.showUISourceCode( - Bindings.cssWorkspaceBinding.rawLocationToUILocation(cssLocation).uiSourceCode, callback); - break; - } - } - - function callback(sourceFrame) { - cssSourceFrame = sourceFrame; - SourcesTestRunner.dumpSourceFrameContents(cssSourceFrame); - next(); - } - }, - - function togglePropertyOff(next) { - toggleProperty(false, next); - }, - - function dumpDisabledText(next) { - SourcesTestRunner.dumpSourceFrameContents(cssSourceFrame); - ElementsTestRunner.dumpSelectedElementStyles(true); - next(); - }, - - function togglePropertyOn(next) { - toggleProperty(true, next); - }, - - function dumpEnabledText(next) { - SourcesTestRunner.dumpSourceFrameContents(cssSourceFrame); - ElementsTestRunner.dumpSelectedElementStyles(true); - next(); - } - ]); - - function toggleProperty(value, next) { - TestRunner.addSniffer(Workspace.UISourceCode.prototype, 'addRevision', callback); - ElementsTestRunner.waitForStyles('inspected', callback); - ElementsTestRunner.toggleMatchedStyleProperty('font-weight', value); - - var barrierCounter = 2; - function callback() { - if (!--barrierCounter) - next(); - } - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that style property disablement is propagated into the stylesheet UISourceCode working copy. -</p> - -<div id="inspected"> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/dynamic-style-tag.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-1/dynamic-style-tag.html deleted file mode 100644 index 94eb5e29..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/dynamic-style-tag.html +++ /dev/null
@@ -1,55 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<style> -/* comment */.inline-style-added-by-parser { - color: red; -} -</style> -<style> -.inline-style-added-by-parser-with-source-url { - color: green; -} -/*# sourceURL=inlineStyleAddedByParser.css*/ -</style> -<script> -document.write("<style>\n.inline-style-added-by-parser-in-document-write {\n color: blue;\n}\n</style>"); -document.write("<style>\n.inline-style-added-by-document-write-with-source-url {\n color: yellow;\n}\n/*# sourceURL=inlineStyleAddedByDocumentWrite.css*/\n</style>"); -addStyleElement(".inline-style-created-by-script {\n color: orange;\n}"); -addStyleElement(".inline-style-created-by-script-with-source-url {\n color: grey;\n}\n/*# sourceURL=inlineStyleCreatedByScript.css*/"); - -function addStyleElement(styleContent) -{ - var styleElement = document.createElement("style"); - styleElement.textContent = styleContent; - document.head.appendChild(styleElement); -} - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); - - async function step1() { - var styleSheets = TestRunner.cssModel.allStyleSheets(); - styleSheets.sort(); - for (var header of styleSheets) { - var content = await TestRunner.CSSAgent.getStyleSheetText(header.id); - - TestRunner.addResult('Stylesheet added:'); - TestRunner.addResult(' - isInline: ' + header.isInline); - TestRunner.addResult(' - sourceURL: ' + header.sourceURL.substring(header.sourceURL.lastIndexOf('/') + 1)); - TestRunner.addResult(' - hasSourceURL: ' + header.hasSourceURL); - TestRunner.addResult(' - contents: ' + content); - } - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - TestRunner.completeTest(); - } -} -</script> -</head> -<body onload="runTest()"> -<p>Tests that different types of inline styles are correctly disambiguated and their sourceURL is correct. -<div id="inspected" style="color:red" class="inline-style-added-by-parser inline-style-added-by-parser-with-source-url inline-style-added-by-parser-in-document-write inline-style-added-by-document-write-with-source-url inline-style-created-by-script inline-style-created-by-script-with-source-url"></div> -</body> -</html> -
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-inspector-stylesheet.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-inspector-stylesheet.html deleted file mode 100644 index 10b114e..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-inspector-stylesheet.html +++ /dev/null
@@ -1,63 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', onStylesSelected); - - function onStylesSelected(node) { - Workspace.workspace.addEventListener(Workspace.Workspace.Events.WorkingCopyCommitted, onWorkingCopyCommitted); - ElementsTestRunner.addNewRule('#inspected', new Function()); - } - - function onWorkingCopyCommitted(event) { - Workspace.workspace.removeEventListener(Workspace.Workspace.Events.WorkingCopyCommitted, onWorkingCopyCommitted); - var uiSourceCode = event.data.uiSourceCode; - TestRunner.addResult('Inspector stylesheet URL: ' + uiSourceCode.displayName()); - uiSourceCode.requestContent().then(printContent(onContent)); - - function onContent() { - TestRunner.addResult('\nSetting new content'); - uiSourceCode.setWorkingCopy('#inspected { background-color: green; }'); - uiSourceCode.commitWorkingCopy(); - onUpdatedWorkingCopy(uiSourceCode); - } - } - - function onUpdatedWorkingCopy(uiSourceCode) { - uiSourceCode.requestContent().then(printContent(selectNode)); - function selectNode() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', dumpStyles); - } - - function dumpStyles() { - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - TestRunner.completeTest(); - } - } - - function printContent(next) { - function result(content) { - TestRunner.addResult('Inspector stylesheet content:'); - TestRunner.addResult(content); - if (next) - next(); - } - return result; - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that adding a new rule creates inspector stylesheet resource and allows its live editing. -</p> - -<div id="inspected">Text</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-media-text.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-media-text.html deleted file mode 100644 index eff2b1667..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-media-text.html +++ /dev/null
@@ -1,66 +0,0 @@ -<html> -<head> -<style> -@media screen and (max-device-width: 100000px) { - #inspected { - color: green; - } - #inspected { - color: blue; - } -} -@media screen and (max-device-width: 200000px) { - #other { - color: green; - } -} -</style> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); - - function step1() { - TestRunner.addResult('=== Before media text modification ==='); - ElementsTestRunner.dumpSelectedElementStyles(true); - var section = ElementsTestRunner.firstMatchedStyleSection(); - var mediaTextElement = ElementsTestRunner.firstMediaTextElementInSection(section); - mediaTextElement.click(); - mediaTextElement.textContent = 'screen and (max-device-width: 99999px)'; - ElementsTestRunner.waitForMediaTextCommitted(step2); - mediaTextElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - } - - function step2() { - TestRunner.addResult('=== After valid media text modification ==='); - ElementsTestRunner.dumpSelectedElementStyles(true); - var section = ElementsTestRunner.firstMatchedStyleSection(); - var mediaTextElement = ElementsTestRunner.firstMediaTextElementInSection(section); - mediaTextElement.click(); - mediaTextElement.textContent = 'something is wrong here'; - ElementsTestRunner.waitForMediaTextCommitted(step3); - mediaTextElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - } - - function step3() { - TestRunner.addResult('=== After invalid media text modification ==='); - ElementsTestRunner.dumpSelectedElementStyles(true); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that editing media text updates element styles. -</p> - -<div id="inspected" style="color: red">Text</div> -<div id="other"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-name-with-trimmed-value.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-name-with-trimmed-value.html deleted file mode 100644 index 3d7beab..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-name-with-trimmed-value.html +++ /dev/null
@@ -1,40 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); - - function step1() { - var treeElement = ElementsTestRunner.getElementStylePropertyTreeItem('background'); - TestRunner.addResult('Viewing \'background\' value in Styles:'); - TestRunner.addResult(treeElement.valueElement.textContent); - - treeElement.startEditing(treeElement.nameElement); - treeElement.nameElement.textContent = 'background-image'; - treeElement.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - ElementsTestRunner.waitForStyleApplied(step2); - } - - function step2() { - var treeElement = ElementsTestRunner.getElementStylePropertyTreeItem('background-image'); - TestRunner.addResult('Renamed \'background\' to \'background-image\' (edited value):'); - TestRunner.addResult(treeElement.valueElement.textContent); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that editing a CSS property name in the Styles pane retains its original, non-trimmed value text. -</p> - -<div id="inspected" style="background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC)" /> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-resource-referred-by-multiple-styletags.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-resource-referred-by-multiple-styletags.html deleted file mode 100644 index cf42c4d8..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-resource-referred-by-multiple-styletags.html +++ /dev/null
@@ -1,71 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script src="../../../http/tests/inspector/live-edit-test.js"></script> -<script src="../../../http/tests/inspector/bindings/bindings-test.js"></script> -<script> - -function prepareTest() -{ - runTest(); -} - -async function test() { - await BindingsTestRunner.attachShadowDOM('shadow1', '#template'), - await BindingsTestRunner.attachFrame('frame', './resources/frame.html'); - var uiSourceCode = await TestRunner.waitForUISourceCode('stylesheet.css'); - var headers = - TestRunner.cssModel.styleSheetHeaders().filter(header => header.resourceURL().endsWith('stylesheet.css')); - TestRunner.addResult('Headers count: ' + headers.length); - - TestRunner.markStep('Make edits with Sources Panel'); - var sourceFrame = await new Promise(x => SourcesTestRunner.showScriptSource('stylesheet.css', x)); - SourcesTestRunner.replaceInSource(sourceFrame, 'red', 'EDITED'); - await TestRunner.addSnifferPromise(Bindings.StyleFile.prototype, '_styleFileSyncedForTest'); - await checkHeadersContent(); - - - TestRunner.markStep('Make edits via css model'); - TestRunner.cssModel.setStyleSheetText(headers[0].id, '* { --foo: "bar" }'); - await TestRunner.addSnifferPromise(Bindings.StyleFile.prototype, '_styleFileSyncedForTest'); - await checkHeadersContent(); - TestRunner.completeTest(); - - - async function checkHeadersContent(expected) { - var contents = await Promise.all(headers.map(header => header.requestContent())); - contents.push(uiSourceCode.workingCopy()); - var dedup = new Set(contents); - if (dedup.size !== 1) { - TestRunner.addResult('ERROR: contents are out of sync!'); - TestRunner.completeTest(); - return; - } - TestRunner.addResult('Both headers and uiSourceCode content:'); - TestRunner.addResult(dedup.firstValue()); - } -} -</script> -</head> -<body onload="prepareTest()"> -<p> -Tests that editing sourcecode which is referred by multiple stylesheets (via sourceURL comment) updates all stylesheets. -</p> - -<div id="inspected">Inspected node</div> - -<style>div{color:red;} -/*# sourceURL=stylesheet.css */ -</style> - -<template id='template'> -<style>div{color:red;} -/*# sourceURL=stylesheet.css */ -</style> -<p>Hi! I'm ShadowDOM v1!</p> -</template> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-value-inside-property.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-value-inside-property.html deleted file mode 100644 index b97fdd1..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-value-inside-property.html +++ /dev/null
@@ -1,54 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', testEmulateKeypress); - - function testEmulateKeypress() { - var treeElement = ElementsTestRunner.getMatchedStylePropertyTreeItem('font-size'); - treeElement.startEditing(treeElement.valueElement); - var selection = treeElement.valueElement.getComponentSelection(); - var range = selection.getRangeAt(0); - var newRange = document.createRange(); - newRange.setStart(range.startContainer, 1); - newRange.setEnd(range.startContainer, 1); - selection.removeAllRanges(); - selection.addRange(newRange); - // Use eventSender to emit "input" event. - eventSender.keyDown('1'); - ElementsTestRunner.waitForStyleApplied(onStyleApplied); - } - - function onStyleApplied() { - ElementsTestRunner.nodeWithId('inspected', onNodeFound); - } - - function onNodeFound(node) { - TestRunner.cssModel.inlineStylesPromise(node.id).then(onInlineStyle); - } - - function onInlineStyle(inlineStyleResult) { - if (!inlineStyleResult || !inlineStyleResult.inlineStyle) { - TestRunner.addResult('Failed to get inline styles.').TestRunner.completeTest(); - return; - } - TestRunner.addResult('font-size: ' + inlineStyleResult.inlineStyle.getPropertyValue('font-size')); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Verifies that property value editing triggers style update in rendering engine. -</p> - -<div id="inspected" style="font-size: 19px"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-value-url-with-color.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-value-url-with-color.html deleted file mode 100644 index fe9cd5b..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-value-url-with-color.html +++ /dev/null
@@ -1,53 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - var maxIndex = 11; - var idIndex = 1; - - Common.Color.detectColorFormat = function() { - return Common.Color.Format.RGB; - }; - - selectDivAndEditValue(); - - function selectDivAndEditValue() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected' + idIndex++, editCallback); - } - - function editCallback() { - var treeElement = ElementsTestRunner.getMatchedStylePropertyTreeItem('background'); - treeElement.startEditing(treeElement.valueElement); - TestRunner.addResult(treeElement.valueElement.textContent); - if (idIndex <= maxIndex) - selectDivAndEditValue(); - else - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that colors are not re-formatted inside url(...) when editing property values. -</p> - -<div id="inspected1" style="background: white">"white" background</div> -<div id="inspected2" style="background: url( white )">"url( white )" background</div> -<div id="inspected3" style="background: url(white.png)">"url(white.png)" background</div> -<div id="inspected4" style="background: url(../foo/white.png)">"url(../foo/white.png)" background</div> -<div id="inspected5" style="background: green url(white)">"green url(white)" background</div> -<div id="inspected6" style="background: url(white) green">"url(white) green" background</div> -<div id="inspected7" style="background: url(white) green, url(green)">"url(white) green, url(green)" background</div> -<div id="inspected8" style="background: url(white), url(green)">"url(white), url(green)" background</div> -<div id="inspected9" style="background: hsl(0, 50%, 50%) url(white)">"hsl(0, 50%, 50%) url(white)" background</div> -<div id="inspected10" style="background: url(white) hsl(0, 50%, 50%)">"url(white) hsl(0, 50%, 50%)" background</div> -<div id="inspected11" style="background: url(../black/white.png)">"url(../black/white.png)" background</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-value-with-trimmed-url.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-value-with-trimmed-url.html deleted file mode 100644 index a5b96c3..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/edit-value-with-trimmed-url.html +++ /dev/null
@@ -1,33 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); - - function step1() { - var treeElement = ElementsTestRunner.getElementStylePropertyTreeItem('background'); - TestRunner.addResult('Viewing \'background\' value in Styles:'); - TestRunner.addResult(treeElement.valueElement.textContent); - - treeElement.startEditing(treeElement.valueElement); - TestRunner.addResult('Editing \'background\' value in Styles:'); - TestRunner.addResult(treeElement.valueElement.textContent); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that editing a CSS property value in the Styles pane restores the original, non-trimmed value text. <a href="https://bugs.webkit.org/show_bug.cgi?id=107936">Bug 107936</a>. -</p> - -<div id="inspected" style="background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC) repeat-y 50% top" /> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/empty-background-url.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-1/empty-background-url.html deleted file mode 100644 index 0fa1ff09..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/empty-background-url.html +++ /dev/null
@@ -1,21 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<link rel="stylesheet" href="../styles/resources/empty-background-url.css"> -<script> -function test() { - ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('inspected', step1); - - function step1() { - ElementsTestRunner.dumpSelectedElementStyles(true, false); - TestRunner.completeTest(); - } -} -</script> -</head> -<body onload="runTest()"> -<p>Tests that empty url in the property value does not break inspector.</p> -<div id="inspected"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/filter-matched-styles.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-1/filter-matched-styles.html deleted file mode 100644 index 878d914a..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-1/filter-matched-styles.html +++ /dev/null
@@ -1,48 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<style> -.mydiv { - border: 1px solid black; - padding: 10px 10px 10px 10px; -} - -#inspected { - border-size: 2px; -} - -</style> -<script> -function test() { - TestRunner.runTestSuite([ - function selectInitialNode(next) { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', next); - }, - - function testSimpleFiltering(next) { - ElementsTestRunner.filterMatchedStyles('padding'); - ElementsTestRunner.dumpRenderedMatchedStyles(); - next(); - }, - - function testLonghandsAreAutoExpanded(next) { - ElementsTestRunner.filterMatchedStyles('-top'); - ElementsTestRunner.dumpRenderedMatchedStyles(); - next(); - }, - - function testAutoExpandedLonghandsAreCollapsed(next) { - ElementsTestRunner.filterMatchedStyles(null); - ElementsTestRunner.dumpRenderedMatchedStyles(); - next(); - } - ]); -} -</script> -</head> -<body onload="runTest()"> -<p>Verifies that filtering in StylesSidebarPane works as expected.</p> -<div style="margin: 1px;" class="mydiv" id="inspected"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/add-import-rule.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-2/add-import-rule.html deleted file mode 100644 index 1830830..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/add-import-rule.html +++ /dev/null
@@ -1,36 +0,0 @@ -<!DOCTYPE html> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<style>span { color: red }</style> -<script> -function test() { - var nodeId; - var sheetId; - - ElementsTestRunner.selectNodeAndWaitForStyles('styled-span', nodeSelected); - - function nodeSelected(node) { - nodeId = node.id; - TestRunner.cssModel.matchedStylesPromise(nodeId).then(matchedStylesBefore); - } - - function matchedStylesBefore(matchedResult) { - sheetId = matchedResult.nodeStyles()[1].styleSheetId; - TestRunner.addResult('\n== Matched rules before @import added ==\n'); - ElementsTestRunner.dumpSelectedElementStyles(true); - TestRunner.CSSAgent.setStyleSheetText(sheetId, '@import \'data:text/css,span{color:green}\';').then(sheetTextSet); - } - - function sheetTextSet() { - ElementsTestRunner.selectNodeAndWaitForStyles('styled-span', matchedStylesAfter); - } - - function matchedStylesAfter() { - TestRunner.addResult('\n== Matched rules after @import added ==\n'); - ElementsTestRunner.dumpSelectedElementStyles(true); - TestRunner.completeTest(); - } -} -</script> -<body onload="runTest()"> -<span id="styled-span"></span>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/cssom-shorthand-important.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-2/cssom-shorthand-important.html deleted file mode 100644 index 5bacbd8..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/cssom-shorthand-important.html +++ /dev/null
@@ -1,30 +0,0 @@ -<html> -<head> -<style> -#inspected { - padding: 10px 50px !important; -} -</style> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -document.styleSheets[0].cssRules[0].style.marginTop = "10px" - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', dump); - - function dump() { - ElementsTestRunner.dumpSelectedElementStyles(true); - TestRunner.completeTest(); - } -} -</script> -</head> - -<body onload="runTest()"> -<p>Tests that CSSOM-modified shorthands are reporting their "important" bits.</p> -<div id="inspected">Text</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/filter-matched-styles-hides-separators.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-2/filter-matched-styles-hides-separators.html deleted file mode 100644 index 77f8f143..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/filter-matched-styles-hides-separators.html +++ /dev/null
@@ -1,82 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<style> -#first { - font-family: arial; - display: block; -} - -#second { - font-family: helvetica; -} - -#third { - font-family: times; - display: block; -} - -#third::before { - content: "uno-1"; -} - -#third::after { - content: "dos-2"; - display: block; -} - -</style> -<script> -function test() { - TestRunner.runTestSuite([ - function selectInitialNode(next) { - ElementsTestRunner.selectNodeAndWaitForStyles('third', next); - }, - - function onNodeSelected(next) { - ElementsTestRunner.dumpRenderedMatchedStyles(); - next(); - }, - - function testFilterFontFamily(next) { - ElementsTestRunner.filterMatchedStyles('font-family'); - dumpSidebarSeparators(); - next(); - }, - - function testContentProperty(next) { - ElementsTestRunner.filterMatchedStyles('content'); - dumpSidebarSeparators(); - next(); - }, - - function testDisplayProperty(next) { - ElementsTestRunner.filterMatchedStyles('display'); - dumpSidebarSeparators(); - next(); - } - ]); - - function dumpSidebarSeparators() { - var separators = UI.panels.elements._stylesWidget.contentElement.querySelectorAll('.sidebar-separator'); - for (var i = 0; i < separators.length; ++i) { - var separator = separators[i]; - var hidden = separator.classList.contains('hidden'); - var text = String.sprintf('%s %s', hidden ? '[ HIDDEN ] ' : '[ VISIBLE ]', separator.deepTextContent()); - TestRunner.addResult(text); - } - } -} -</script> -</head> -<body onload="runTest()"> -<p>Verifies that filtering in StylesSidebarPane hides sidebar separators.</p> -<div id="first"> - <div id="second"> - <div id="third"> - </div> - </div> -</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/force-pseudo-state.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-2/force-pseudo-state.html deleted file mode 100644 index b0bb330..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/force-pseudo-state.html +++ /dev/null
@@ -1,79 +0,0 @@ -<html> -<head> -<style> -div:hover, a:hover { - color: red; -} - -div:focus, a:focus { - border: 1px solid green; -} - -div:active, a:active { - font-weight: bold; -} - -</style> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.nodeWithId('div', foundDiv); - - var divNode; - - function dumpData() { - ElementsTestRunner.dumpSelectedElementStyles(true); - ElementsTestRunner.dumpElementsTree(); - } - - function foundDiv(node) { - divNode = node; - TestRunner.cssModel.forcePseudoState(divNode, 'hover', true); - TestRunner.cssModel.forcePseudoState(divNode, 'active', true); - ElementsTestRunner.selectNodeAndWaitForStyles('div', divSelected1); - } - - function divSelected1() { - TestRunner.addResult(''); - TestRunner.addResult('DIV with :hover and :active'); - dumpData(); - ElementsTestRunner.waitForStyles('div', hoverCallback, true); - TestRunner.cssModel.forcePseudoState(divNode, 'hover', false); - - function hoverCallback() { - ElementsTestRunner.waitForStyles('div', divSelected2, true); - TestRunner.cssModel.forcePseudoState(divNode, 'focus', true); - } - } - - function divSelected2() { - TestRunner.addResult(''); - TestRunner.addResult('DIV with :active and :focus'); - dumpData(); - ElementsTestRunner.waitForStyles('div', focusCallback, true); - TestRunner.cssModel.forcePseudoState(divNode, 'focus', false); - - function focusCallback() { - ElementsTestRunner.waitForStyles('div', divSelected3, true); - TestRunner.cssModel.forcePseudoState(divNode, 'active', false); - } - } - - function divSelected3(node) { - TestRunner.addResult(''); - TestRunner.addResult('DIV with no forced state'); - dumpData(); - TestRunner.completeTest(); - } -} -</script> -</head> -<body id="mainBody" class="main1 main2 mainpage" onload="runTest()" style="font-weight: normal; width: 85%; background-image: url(bar.png)"> -<p> -Tests that forced element state is reflected in the DOM tree and Styles pane. -</p> -<div id="div">Test text</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/get-set-stylesheet-text.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-2/get-set-stylesheet-text.html deleted file mode 100644 index 5ca9928..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/get-set-stylesheet-text.html +++ /dev/null
@@ -1,110 +0,0 @@ -<html> -<head> - -<style> - -/* An inline stylesheet */ -body.mainpage { - text-decoration: none; -} -</style> - -<link rel="stylesheet" href="../styles/resources/get-set-stylesheet-text.css"> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - var foundStyleSheetHeader; - var foundStyleSheetText; - - findStyleSheet(); - - function findStyleSheet() { - var styleSheetHeaders = TestRunner.cssModel.styleSheetHeaders(); - for (var i = 0; i < styleSheetHeaders.length; ++i) { - styleSheetHeader = styleSheetHeaders[i]; - if (styleSheetHeader.sourceURL.indexOf('get-set-stylesheet-text.css') >= 0) { - foundStyleSheetHeader = styleSheetHeader; - foundStyleSheetHeader.requestContent().then(callback); - } - if (!foundStyleSheetHeader) - TestRunner.cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetAdded, styleSheetAdded); - } - - function callback(content) { - foundStyleSheetText = content; - TestRunner.runTestSuite([testSetText, testNewElementStyles]); - } - - function styleSheetAdded() { - TestRunner.cssModel.removeEventListener(SDK.CSSModel.Events.StyleSheetAdded, styleSheetAdded); - findStyleSheet(); - } - } - - function testSetText(next) { - function callback(error) { - if (error) { - TestRunner.addResult('Failed to set stylesheet text: ' + error); - return; - } - } - - TestRunner.addResult('=== Original stylesheet text: ==='); - TestRunner.addResult(foundStyleSheetText); - TestRunner.cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetChanged, next, this); - TestRunner.cssModel.setStyleSheetText(foundStyleSheetHeader.id, 'h1 { COLOR: Red; }', true).then(callback); - } - - function testNewElementStyles() { - function callback(response) { - if (response[Protocol.Error]) { - TestRunner.addResult('error: ' + response[Protocol.Error]); - return; - } - - TestRunner.addResult('=== Matched rules for h1 after setText() ==='); - dumpMatchesArray(response.matchedCSSRules); - TestRunner.completeTest(); - } - - function nodeCallback(node) { - TestRunner.CSSAgent.invoke_getMatchedStylesForNode({nodeId: node.id}).then(callback); - } - - ElementsTestRunner.selectNodeWithId('inspected', nodeCallback); - } - - - // Data dumping - - function dumpMatchesArray(rules) { - if (!rules) - return; - for (var i = 0; i < rules.length; ++i) - dumpRuleOrStyle(rules[i].rule); - } - - function dumpRuleOrStyle(ruleOrStyle) { - if (!ruleOrStyle) - return; - var isRule = !!(ruleOrStyle.style); - var style = isRule ? ruleOrStyle.style : ruleOrStyle; - TestRunner.addResult(''); - TestRunner.addResult(isRule ? 'rule' : 'style'); - TestRunner.addResult((isRule ? (ruleOrStyle.selectorList.text + ': [' + ruleOrStyle.origin + ']') : 'raw style')); - ElementsTestRunner.dumpStyle(style); - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that WebInspector.CSSStyleSheet methods work as expected. -</p> -<h1 id="inspected">Inspect Me</h1> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/import-pseudoclass-crash.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-2/import-pseudoclass-crash.html deleted file mode 100644 index 444e599..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/import-pseudoclass-crash.html +++ /dev/null
@@ -1,49 +0,0 @@ -<html> -<head> -<link rel="stylesheet" href="../styles/resources/import-pseudoclass-crash.css"> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.nodeWithId('lastchild', nodeFound); - - function nodeFound(node) { - TestRunner.cssModel.matchedStylesPromise(node.id).then(matchedStylesCallback); - } - - var styleSheetId; - - function matchedStylesCallback(matchedResult) { - styleSheetId = matchedResult.nodeStyles()[1].styleSheetId; - TestRunner.CSSAgent - .setStyleSheetText( - styleSheetId, '@import url("import-pseudoclass-crash-empty.css");\n\n:last-child { color: #000001; }\n') - .then(modifiedCallback); - } - - function modifiedCallback() { - TestRunner.CSSAgent - .setStyleSheetText( - styleSheetId, '@import url("import-pseudoclass-crash-empty.css");\n\n:last-child { color: #002001; }\n') - .then(modifiedCallback2); - } - - function modifiedCallback2() { - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that modifying stylesheet text with @import and :last-child selector does not crash (<a href="https://bugs.webkit.org/show_bug.cgi?id=95324">Bug 95324</a>). -</p> - -<div> - <p id="lastchild">:last-child</p> -</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/inactive-properties.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-2/inactive-properties.html deleted file mode 100644 index ac09011..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/inactive-properties.html +++ /dev/null
@@ -1,36 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('inspected', step1); - - function step1() { - ElementsTestRunner.dumpSelectedElementStyles(false, false); - TestRunner.completeTest(); - } -} - -</script> -<style> -#inspected { - text-align: left; - text-align: bar; - text-align: right; -} -</style> -</head> - -<body onload="runTest()"> -<p> -Tests that effectively inactive properties are displayed correctly in the sidebar. -</p> - -<div id="container"> - <div id="inspected" align="left">Test</div> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/inherited-mixed-case-properties.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-2/inherited-mixed-case-properties.html deleted file mode 100644 index c6e0493c..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/inherited-mixed-case-properties.html +++ /dev/null
@@ -1,33 +0,0 @@ -<html> -<head> -<style> -#container { - -webkit-FONT-smoothing: antialiased; -} -</style> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('nested', step1); - - function step1() { - ElementsTestRunner.dumpSelectedElementStyles(); - TestRunner.completeTest(); - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that non-standard mixed-cased properties are displayed in the Styles pane. -</p> - -<div id="container" style="CoLoR: blAck"> - <div id="nested"></div> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/inject-stylesheet.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-2/inject-stylesheet.html deleted file mode 100644 index 1a2fdd4..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/inject-stylesheet.html +++ /dev/null
@@ -1,61 +0,0 @@ -<html> -<head> - -<style type="text/css" media="screen"> - #main { background:blue; } -</style> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function injectStyleSheet(context) -{ - var styleSheet = "#main { color: red; border-style: solid; -webkit-border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAiElEQVR42r2RsQrDMAxEBRdl8SDcX8lQPGg1GBI6lvz/h7QyRRXV0qUULwfvwZ1tenw5PxToRPWMC52eA9+WDnlh3HFQ/xBQl86NFYJqeGflkiogrOvVlIFhqURFVho3x1moGAa3deMs+LS30CAhBN5nNxeT5hbJ1zwmji2k+aF6NENIPf/hs54f0sZFUVAMigAAAABJRU5ErkJggg==) } #iframeBody { background: red }"; - if (context.testRunner) - context.testRunner.insertStyleSheet(styleSheet); -} - -function preRunTest() { - injectStyleSheet(window); - runTest(); -} - -function loadIframe() -{ - var iframe = document.createElement("iframe"); - iframe.src = "../styles/resources/inject-stylesheet-iframe-data.html"; - document.getElementById("main").appendChild(iframe); -} - -function test() { - ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('main', step0); - - function step0() { - TestRunner.addResult('Main frame style:'); - ElementsTestRunner.dumpSelectedElementStyles(); - TestRunner.evaluateInPage('loadIframe()'); - ConsoleTestRunner.addConsoleSniffer(step1); - } - - function step1() { - ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('iframeBody', step2); - } - - function step2() { - TestRunner.addResult('iframe style:'); - ElementsTestRunner.dumpSelectedElementStyles(); - TestRunner.completeTest(); - } -} -</script> -</head> - -<body onload="preRunTest()"> -<p> -Tests that injected user stylesheets are reflected in the Styles pane. -</p> - -<div id="main"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/keyframes-rules.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-2/keyframes-rules.html deleted file mode 100644 index 2fdde14..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/keyframes-rules.html +++ /dev/null
@@ -1,38 +0,0 @@ -<html> -<head> -<style> -@keyframes fadeout { - from { background-color: black; } - to { background-color: white; } -} - -* { - background-color: papayawhip; -} -</style> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> -function test() { - TestRunner.runTestSuite([ - function testInit(next) { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', next); - }, - - function testDumpStyles(next) { - ElementsTestRunner.dumpSelectedElementStyles(true); - next(); - } - ]); -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that source data is extracted correctly from stylesheets with @keyframes rules. -</p> - -<div id="inspected" style="background-color: white;">Content</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/lazy-computed-style.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-2/lazy-computed-style.html deleted file mode 100644 index 3f5a6b7..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/lazy-computed-style.html +++ /dev/null
@@ -1,51 +0,0 @@ -<html> -<head> -<style> - -#inspected { - background-color: green; - font-family: Times; -} - -#inspected { - background-color: black; - font-family: Courier; -} - -#inspected { - background: gray; -} - -</style> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); - - function step1() { - TestRunner.addResult('==== All styles (should be no computed) ===='); - ElementsTestRunner.dumpSelectedElementStyles(false, false); - ElementsTestRunner.computedStyleWidget().doUpdate().then(step2); - } - - function step2() { - TestRunner.addResult('==== All styles (computed should be there) ===='); - ElementsTestRunner.dumpSelectedElementStyles(false, false); - TestRunner.completeTest(); - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that computed styles expand and allow tracing to style rules. -</p> - -<div id="inspected"> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/media-emulation.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-2/media-emulation.html deleted file mode 100644 index e77565f..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/media-emulation.html +++ /dev/null
@@ -1,65 +0,0 @@ -<html> -<head> - -<style type="text/css"> -#main { color: red; } - -@media print { -#main { color: black; } -} - -@media tty { -#main { color: green; } -} -</style> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('main', step0); - - function step0() { - TestRunner.addResult('Original style:'); - ElementsTestRunner.dumpSelectedElementStyles(true); - applyEmulatedMedia('print'); - ElementsTestRunner.waitForStyles('main', step1); - } - - function step1() { - TestRunner.addResult('print media emulated:'); - ElementsTestRunner.dumpSelectedElementStyles(true); - applyEmulatedMedia('tty'); - ElementsTestRunner.waitForStyles('main', step2); - } - - function step2() { - TestRunner.addResult('tty media emulated:'); - ElementsTestRunner.dumpSelectedElementStyles(true); - applyEmulatedMedia(''); - ElementsTestRunner.waitForStyles('main', step3); - } - - function step3() { - TestRunner.addResult('No media emulated:'); - ElementsTestRunner.dumpSelectedElementStyles(true); - TestRunner.completeTest(); - } - - function applyEmulatedMedia(media) { - TestRunner.EmulationAgent.setEmulatedMedia(media); - TestRunner.cssModel.mediaQueryResultChanged(); - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that emulated CSS media is reflected in the Styles pane. -</p> - -<div id="main"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/media-queries.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-2/media-queries.html deleted file mode 100644 index d0f5c8c..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/media-queries.html +++ /dev/null
@@ -1,38 +0,0 @@ -<html> -<head> - -<style type="text/css" media="screen"> -@media not print { - #main { background:blue; } -} - -@media print { - #main { background: transparent; } -} -</style> - -<link rel="stylesheet" href="../styles/resources/media-queries.css" media="all"> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('main', step1); - - function step1() { - TestRunner.addResult('Main style:'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - TestRunner.completeTest(); - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that media query stack is rendered for associated rules. -</p> - -<div id="main"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/media-using-same-url.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-2/media-using-same-url.html deleted file mode 100644 index 57509633..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/media-using-same-url.html +++ /dev/null
@@ -1,43 +0,0 @@ -<html> -<head> - -<style type="text/css" media="screen"> -@media not print { -#main { - background: blue; -} -} -</style> - -<style type="text/css" media="screen"> -@media not print { -#main { - color: white; -} -} -</style> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('main', step1); - - function step1() { - TestRunner.addResult('Main style:'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - TestRunner.completeTest(); - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that media query stack is computed correctly when several stylesheets share the same URL. -</p> - -<div id="main"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/metrics-box-sizing.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-2/metrics-box-sizing.html deleted file mode 100644 index 84af52b..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/metrics-box-sizing.html +++ /dev/null
@@ -1,156 +0,0 @@ -<html> -<head> - -<style> -#border-box { - box-sizing: border-box; - width: 55px; - height: 55px; - margin: 1px; - padding: 7px; - border: 3px solid black; -} - -#content-box { - box-sizing: content-box; - width: 55px; - height: 55px; - margin: 1px; - padding: 7px; - border: 3px solid black; -} -</style> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -var initialize_AdditionalPreload = function() { - InspectorTest.preloadModule("source_frame"); -} - -function dumpDimensions() -{ - var element; - - element = document.getElementById("content-box"); - document.getElementById("output-content").textContent = "content-box rendered dimensions: " + element.offsetWidth + " x " + element.offsetHeight; - element = document.getElementById("border-box"); - document.getElementById("output-border").textContent = "border-box rendered dimensions: " + element.offsetWidth + " x " + element.offsetHeight; -} - -function test() { - var contentWidthElement; - var contentHeightElement; - - function getChildTextByClassName(element, className) { - var children = element.children; - for (var i = 0; i < children.length; ++i) { - if (children[i].classList && children[i].classList.contains(className)) - return children[i].textContent; - } - return null; - } - - function dumpMetrics(sectionElement) { - var marginElement = sectionElement.getElementsByClassName('margin')[0]; - var borderElement = sectionElement.getElementsByClassName('border')[0]; - var paddingElement = sectionElement.getElementsByClassName('padding')[0]; - var contentDimensions = sectionElement.getElementsByClassName('content')[0].getElementsByTagName('span'); - TestRunner.addResult( - 'margin: ' + getChildTextByClassName(marginElement, 'top') + ' ' + - getChildTextByClassName(marginElement, 'right') + ' ' + getChildTextByClassName(marginElement, 'bottom') + ' ' + - getChildTextByClassName(marginElement, 'left')); - TestRunner.addResult( - 'border: ' + getChildTextByClassName(borderElement, 'top') + ' ' + - getChildTextByClassName(borderElement, 'right') + ' ' + getChildTextByClassName(borderElement, 'bottom') + ' ' + - getChildTextByClassName(borderElement, 'left')); - TestRunner.addResult( - 'padding: ' + getChildTextByClassName(paddingElement, 'top') + ' ' + - getChildTextByClassName(paddingElement, 'right') + ' ' + getChildTextByClassName(paddingElement, 'bottom') + - ' ' + getChildTextByClassName(paddingElement, 'left')); - TestRunner.addResult('content: ' + contentDimensions[0].textContent + ' x ' + contentDimensions[1].textContent); - } - - function createDoubleClickEvent() { - var event = document.createEvent('MouseEvent'); - event.initMouseEvent('dblclick', true, true, null, 2, 0, 0, 0, 0, false, false, false, false, 0, null); - return event; - } - - TestRunner.runTestSuite([ - function testBorderBoxInit1(next) { - ElementsTestRunner.selectNodeAndWaitForStyles('border-box', next); - }, - - function testBorderBoxInit2(next) { - section = UI.panels.elements._metricsWidget; - section.expand(); - TestRunner.addSniffer(section._updateController._updateThrottler, '_processCompletedForTests', next); - }, - - function testInitialBorderBoxMetrics(next) { - var spanElements = section.element.getElementsByClassName('content')[0].getElementsByTagName('span'); - contentWidthElement = spanElements[0]; - contentHeightElement = spanElements[1]; - TestRunner.addResult('=== Initial border-box ==='); - dumpMetrics(section.element); - contentWidthElement.dispatchEvent(createDoubleClickEvent()); - contentWidthElement.textContent = '60'; - contentWidthElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - TestRunner.deprecatedRunAfterPendingDispatches(next); - }, - - function testModifiedBorderBoxMetrics(next) { - TestRunner.addResult('=== Modified border-box ==='); - dumpMetrics(section.element); - next(); - }, - - function testContentBoxInit1(next) { - ElementsTestRunner.selectNodeWithId('content-box', next); - }, - - function testContentBoxInit2(next) { - section = UI.panels.elements._metricsWidget; - section.expand(); - TestRunner.addSniffer(section._updateController._updateThrottler, '_processCompletedForTests', next); - }, - - function testInitialContentBoxMetrics(next) { - var spanElements = section.element.getElementsByClassName('content')[0].getElementsByTagName('span'); - contentWidthElement = spanElements[0]; - contentHeightElement = spanElements[1]; - TestRunner.addResult('=== Initial content-box ==='); - dumpMetrics(section.element); - contentWidthElement.dispatchEvent(createDoubleClickEvent()); - contentWidthElement.textContent = '60'; - contentWidthElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - TestRunner.deprecatedRunAfterPendingDispatches(next); - next(); - }, - - function testModifiedContentBoxMetrics(next) { - function callback() { - next(); - } - - TestRunner.addResult('=== Modified content-box ==='); - dumpMetrics(section.element); - TestRunner.evaluateInPage('dumpDimensions()', callback); - } - ]); -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that content-box and border-box content area dimensions are handled property by the Metrics pane. -</p> -<div id="content-box">content-box</div> -<div id="border-box">border-box</div> -<div id="output-content">zzz</div> -<div id="output-border">zzz</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/mixed-case-color-aware-properties.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-2/mixed-case-color-aware-properties.html deleted file mode 100644 index 047b975..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/mixed-case-color-aware-properties.html +++ /dev/null
@@ -1,23 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - var colorAwareProperties = ['bAckground-ColoR', 'COloR', 'Border-coLoR', 'border-right-color', 'BOX-SHADOW']; - for (var i = 0; i < colorAwareProperties.length; ++i) { - var isColorAware = SDK.cssMetadata().isColorAwareProperty(colorAwareProperties[i]); - TestRunner.addResult(colorAwareProperties[i] + (isColorAware ? ' is' : ' is NOT') + ' color aware'); - } - TestRunner.completeTest(); -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that color-related mix-cased CSS properties are actually color aware. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/multiple-imports-edit-crash.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-2/multiple-imports-edit-crash.html deleted file mode 100644 index 73e7049..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/multiple-imports-edit-crash.html +++ /dev/null
@@ -1,75 +0,0 @@ -<html> -<head> -<style> -@import url(../styles/resources/multiple-imports-edit-crash-1.css); -@import url(../styles/resources/multiple-imports-edit-crash-2.css); -@import url(../styles/resources/multiple-imports-edit-crash-1.css); -#inspected { - color: green; -} -</style> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - TestRunner.cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetAdded, styleSheetAdded, this); - TestRunner.cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetRemoved, styleSheetRemoved, this); - ElementsTestRunner.nodeWithId('inspected', nodeFound); - - function nodeFound(node) { - TestRunner.cssModel.matchedStylesPromise(node.id).then(matchedStylesCallback); - } - - var styleSheetId; - - function matchedStylesCallback(matchedResult) { - styleSheetId = matchedResult.nodeStyles()[1].styleSheetId; - TestRunner.addResult('Setting stylesheet text...'); - TestRunner.CSSAgent.setStyleSheetText( - styleSheetId, - '@import url(../styles/resources/multiple-imports-edit-crash-1.css);\n@import url(../styles/resources/multiple-imports-edit-crash-2.css);\n#inspected { color: black }\n'); - } - - var addsExpected = 2; - var removesExpected = 3; - var added = []; - var removed = []; - - function styleSheetAdded(event) { - added.push(resourceName(event.data.sourceURL)); - - if (!(--addsExpected)) { - added.sort(); - TestRunner.addResult('Added:'); - TestRunner.addResult(added.join('\n')); - TestRunner.completeTest(); - } - } - - function styleSheetRemoved(event) { - removed.push(resourceName(event.data.sourceURL)); - - if (!(--removesExpected)) { - removed.sort(); - TestRunner.addResult('Removed:'); - TestRunner.addResult(removed.join('\n')); - } - } - - function resourceName(url) { - return url.substring(url.lastIndexOf('/') + 1); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that modifying stylesheet text with multiple @import at-rules does not crash. -</p> - -<div id="inspected">Text</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/page-reload-update-sidebar.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-2/page-reload-update-sidebar.html deleted file mode 100644 index 8be468e..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/page-reload-update-sidebar.html +++ /dev/null
@@ -1,70 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function removeInspectedNode() -{ - document.querySelector("#inspected").remove(); -} - -function test() { - var stylesSidebarPane = UI.panels.elements._stylesWidget; - TestRunner.runTestSuite([ - function selectInspectedNode(next) { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', next); - }, - - function startEditingAndReloadPage(next) { - var treeElement = ElementsTestRunner.getElementStylePropertyTreeItem('color'); - var currentDocumentId = stylesSidebarPane.node().ownerDocument.id; - treeElement.startEditing(treeElement.valueElement); - var nodeRebuiltHappened = false; - var pageReloadHappened = false; - TestRunner.addSniffer(Elements.StylesSidebarPane.prototype, '_nodeStylesUpdatedForTest', onNodeRebuilt); - TestRunner.reloadPage(reloadedCallback); - - function onNodeRebuilt(node, rebuild) { - if (!node || node.ownerDocument.id === currentDocumentId) { - TestRunner.addResult('ERROR: A rebuild update happened for the same node.'); - TestRunner.completeTest(); - return; - } - nodeRebuiltHappened = true; - maybeNext(); - } - - function reloadedCallback() { - pageReloadHappened = true; - maybeNext(); - } - - function maybeNext() { - if (nodeRebuiltHappened && pageReloadHappened) - next(); - } - }, - - function onPageReloaded(next) { - if (stylesSidebarPane._isEditingStyle) { - TestRunner.addResult('StylesSidebarPane should not be locked in editing on page reload.'); - TestRunner.completeTest(); - return; - } - next(); - }, - ]); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that reloading page during styles sidebar pane editing cancels editing and re-renders the -sidebar pane. -</p> -<div id="inspected" style="color: blue">Text</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/parse-comments.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-2/parse-comments.html deleted file mode 100644 index 14764f2..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/parse-comments.html +++ /dev/null
@@ -1,58 +0,0 @@ -<html> -<head> - -<style type="text/css"> -/* color: red */ - -@media /* color: red */ not /* color: red */print /* color: red */ { - /* color: red */ - /* color: red */#main/* color: red */{/* color: red */ background /* color: red */ :/* color: red */blue/* color: red */;/* color: red */ } - /* color: red */ -} - -/* color: red */ - -@font-face { - /* color: red */ - /* color: red */font-family/* color: red */:/* color: red */ Example/* color: red */;/* color: red */ - /* color: red */ - /* color: red */src/* color: red */:/* color: red */ url(bogus-example-url)/* color: red */;/* color: red */ - /* color: red */ -} - -/* color: red */ - -#main /* color: red */{ - /* color: red */color/* color: red */:/* color: red */ green/* color: red */;/* color: red */ -} -/* color: red */ -@page /* color: red */:right /* color: red */{/* color: red */ - /* color: red */margin-left/* color: red */:/* color: red */ 3cm/* color: red */;/* color: red */ - /* color: red */margin-right /* color: red */: /* color: red */4cm /* color: red */ -}/*color: red*/ -</style> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('main', step1); - - function step1() { - TestRunner.addResult('Main style:'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - TestRunner.completeTest(); - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that comments in stylesheets are parsed correctly by the DevTools. -</p> - -<div id="main"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/parse-declaration-unterminated-comment.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-2/parse-declaration-unterminated-comment.html deleted file mode 100644 index 23ddc74..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/parse-declaration-unterminated-comment.html +++ /dev/null
@@ -1,30 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected1', dumpStylesFirst); - - function dumpStylesFirst() { - ElementsTestRunner.dumpSelectedElementStyles(true); - ElementsTestRunner.selectNodeAndWaitForStyles('inspected2', dumpStylesSecond); - } - - function dumpStylesSecond() { - ElementsTestRunner.dumpSelectedElementStyles(true); - TestRunner.completeTest(); - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that CSSParser correctly parses declarations with unterminated comments. - -<div id="inspected1" style="color: red /* foo: bar;"></div> -<div id="inspected2" style="color: green; /* foo: bar;"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/parse-declaration-with-quote.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-2/parse-declaration-with-quote.html deleted file mode 100644 index 5a3951f..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/parse-declaration-with-quote.html +++ /dev/null
@@ -1,24 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', dumpStyles); - - function dumpStyles() { - ElementsTestRunner.dumpSelectedElementStyles(true); - TestRunner.completeTest(); - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that CSSParser correctly parses declarations with unterminated strings. <a href="https://code.google.com/p/chromium/issues/detail?id=231127">Blink bug 231127</a> - -<div id="inspected" style="color: red'foo"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/parse-utf8-bom.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-2/parse-utf8-bom.html deleted file mode 100644 index 006c518..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/parse-utf8-bom.html +++ /dev/null
@@ -1,30 +0,0 @@ -<html> -<head> -<link rel="stylesheet" type="text/css" href="../styles/resources/parse-utf8-bom-main.css"> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); - - function step1() { - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that source data are extracted correctly from external stylesheets in UTF-8 with BOM. <a href="https://bugs.webkit.org/show_bug.cgi?id=59322">Bug 59322</a>. -</p> -<h1 id="inspected"> -I'm red. -</h1> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/paste-property.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-2/paste-property.html deleted file mode 100644 index 6029e4d..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/paste-property.html +++ /dev/null
@@ -1,73 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', pasteFirstProperty); - - function pasteFirstProperty() { - TestRunner.addResult('Before pasting:'); - ElementsTestRunner.dumpSelectedElementStyles(true); - var section = ElementsTestRunner.inlineStyleSection(); - - var treeElement = section.addNewBlankProperty(0); - pasteProperty(treeElement, 'margin-left: 1px', pasteTwoProperties); - } - - function pasteTwoProperties() { - TestRunner.addResult('After pasting \'margin-left: 1px\':'); - ElementsTestRunner.dumpSelectedElementStyles(true); - - var treeElement = ElementsTestRunner.inlineStyleSection().addNewBlankProperty(2); - pasteProperty(treeElement, 'margin-top: 1px; color: red;', pasteOverExistingProperty); - } - - function pasteOverExistingProperty() { - TestRunner.addResult('After pasting \'margin-top: 1px; color: red;\':'); - ElementsTestRunner.dumpSelectedElementStyles(true); - - var treeElement = ElementsTestRunner.getElementStylePropertyTreeItem('margin-top'); - pasteProperty(treeElement, 'foo: bar; moo: zoo', dumpAndComplete); - } - - function dumpAndComplete() { - TestRunner.addResult('After pasting \'foo: bar; moo: zoo\' over \'margin-top\':'); - ElementsTestRunner.dumpSelectedElementStyles(true); - - TestRunner.completeTest(); - } - - function pasteProperty(treeElement, propertyText, callback) { - treeElement.nameElement.textContent = propertyText; - treeElement.startEditing(); - - document.execCommand('SelectAll'); - document.execCommand('Copy'); - ElementsTestRunner.waitForStyleApplied(reloadStyles.bind(this, callback)); - document.execCommand('Paste'); - } - - function reloadStyles(callback) { - ElementsTestRunner.selectNodeAndWaitForStyles('other', otherCallback); - - function otherCallback() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', callback); - } - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that splitting properties when pasting works. -</p> - -<div id="inspected" style="font-size: 12px">Text</div> -<div id="other"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/perform-undo-perform-of-mergable-action.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-2/perform-undo-perform-of-mergable-action.html deleted file mode 100644 index b07e145..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/perform-undo-perform-of-mergable-action.html +++ /dev/null
@@ -1,61 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> - -<style> -.container { - font-weight: bold -} -</style> - -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('container', step1); - - function step1() { - TestRunner.addResult('Initial value'); - ElementsTestRunner.dumpSelectedElementStyles(true); - - var treeItem = ElementsTestRunner.getMatchedStylePropertyTreeItem('font-weight'); - treeItem.applyStyleText('font-weight: normal', false); - ElementsTestRunner.waitForStyles('container', step2); - } - - function step2() { - TestRunner.addResult('After changing property'); - ElementsTestRunner.dumpSelectedElementStyles(true); - - TestRunner.domModel.undo(); - ElementsTestRunner.waitForStyles('container', step3); - } - - function step3() { - TestRunner.addResult('After undo'); - ElementsTestRunner.dumpSelectedElementStyles(true); - - var treeItem = ElementsTestRunner.getMatchedStylePropertyTreeItem('font-weight'); - treeItem.applyStyleText('font-weight: normal', false); - ElementsTestRunner.waitForStyles('container', step4); - } - - function step4() { - TestRunner.addResult('After perform'); - ElementsTestRunner.dumpSelectedElementStyles(true); - TestRunner.completeTest(); - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that perform-undo-perform of the mergeable action does not crash. -</p> - -<div id="container" class="container"></div> -<div id="other" class="container"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/property-ui-location.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-2/property-ui-location.html deleted file mode 100644 index b7e46073..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/property-ui-location.html +++ /dev/null
@@ -1,59 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<link rel="stylesheet" href="../styles/resources/empty-background-url.css"> -<style> -#inspected { - color: blue; -} -</style> -<style>#inspected { margin: 10px; } -#inspected { - font-family: arial; - /* font-size: 20px; */ -} -/*# sourceURL=source-url.css */ -</style> -<script> -function test() { - SourcesTestRunner.waitForScriptSource('source-url.css', onUISourceCodeCreated); - - function onUISourceCodeCreated() { - ElementsTestRunner.nodeWithId('inspected', onNodeFound); - } - - function onNodeFound(node) { - TestRunner.cssModel.matchedStylesPromise(node.id).then(onMatchedStyles); - } - - function onMatchedStyles(matchedResult) { - var styles = matchedResult.nodeStyles(); - for (var style of styles) { - if (style.type !== SDK.CSSStyleDeclaration.Type.Regular) - continue; - var properties = style.allProperties(); - for (var property of properties) { - if (!property.range) - continue; - var uiLocation = Bindings.cssWorkspaceBinding.propertyUILocation(property, true); - TestRunner.addResult(String.sprintf( - '%s -> %s:%d:%d', property.name, uiLocation.uiSourceCode.name(), uiLocation.lineNumber, - uiLocation.columnNumber)); - var uiLocation = Bindings.cssWorkspaceBinding.propertyUILocation(property, false); - TestRunner.addResult(String.sprintf( - '%s -> %s:%d:%d', property.value, uiLocation.uiSourceCode.name(), uiLocation.lineNumber, - uiLocation.columnNumber)); - } - } - TestRunner.completeTest(); - } -} -</script> -</head> -<body onload="runTest()"> -<p>Verifies Bindings.cssWorkspaceBinding.propertyUILocation functionality</p> -<div id="inspected"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/pseudo-elements.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-2/pseudo-elements.html deleted file mode 100644 index 9c3b5fd..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/pseudo-elements.html +++ /dev/null
@@ -1,176 +0,0 @@ -<html> -<head> -<style> -#inspected:before, .some-other-selector { - content: "BEFORE"; -} - -#inspected:after { - content: "AFTER"; -} -</style> -<style> -#empty::before { - content: "EmptyBefore"; -} - -#empty::after { - content: "EmptyAfter"; -} -</style> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function removeLastRule() -{ - document.styleSheets[0].deleteRule(document.styleSheets[0].cssRules.length - 1); -} - -function addAfterRule() -{ - document.styleSheets[0].addRule("#inspected:after", "content: \"AFTER\""); -} - -function addBeforeRule() -{ - document.styleSheets[0].addRule("#inspected:before", "content: \"BEFORE\""); -} - -function modifyTextContent() -{ - document.getElementById("inspected").textContent = "bar"; -} - -function clearTextContent() -{ - document.getElementById("inspected").textContent = ""; -} - -function removeNode() -{ - document.getElementById("inspected").remove(); -} - -function test() { - var containerNode; - var inspectedNode; - - TestRunner.runTestSuite([ - function dumpOriginalTree(next) { - ElementsTestRunner.expandElementsTree(callback); - function callback() { - containerNode = ElementsTestRunner.expandedNodeWithId('container'); - inspectedNode = ElementsTestRunner.expandedNodeWithId('inspected'); - TestRunner.addResult('Original elements tree:'); - ElementsTestRunner.dumpElementsTree(containerNode); - next(); - } - }, - - function dumpNormalNodeStyles(next) { - selectNodeAndDumpStyles('inspected', '', next); - }, - - function dumpBeforeStyles(next) { - selectNodeAndDumpStyles('inspected', 'before', next); - }, - - function dumpAfterStyles(next) { - selectNodeAndDumpStyles('inspected', 'after', next); - }, - - function removeAfter(next) { - executeAndDumpTree('removeLastRule()', SDK.DOMModel.Events.NodeRemoved, next); - }, - - function removeBefore(next) { - executeAndDumpTree('removeLastRule()', SDK.DOMModel.Events.NodeRemoved, next); - }, - - function addAfter(next) { - executeAndDumpTree('addAfterRule()', SDK.DOMModel.Events.NodeInserted, expandAndDumpTree.bind(this, next)); - }, - - function addBefore(next) { - executeAndDumpTree('addBeforeRule()', SDK.DOMModel.Events.NodeInserted, next); - }, - - function modifyTextContent(next) { - executeAndDumpTree('modifyTextContent()', SDK.DOMModel.Events.NodeInserted, next); - }, - - function clearTextContent(next) { - executeAndDumpTree('clearTextContent()', SDK.DOMModel.Events.NodeRemoved, next); - }, - - function removeNodeAndCheckPseudoElementsUnbound(next) { - var inspectedBefore = inspectedNode.beforePseudoElement(); - var inspectedAfter = inspectedNode.afterPseudoElement(); - - executeAndDumpTree('removeNode()', SDK.DOMModel.Events.NodeRemoved, callback); - function callback() { - TestRunner.addResult( - 'inspected:before DOMNode in DOMAgent: ' + !!(TestRunner.domModel.nodeForId(inspectedBefore.id))); - TestRunner.addResult( - 'inspected:after DOMNode in DOMAgent: ' + !!(TestRunner.domModel.nodeForId(inspectedAfter.id))); - next(); - } - } - ]); - - function executeAndDumpTree(pageFunction, eventName, next) { - TestRunner.domModel.addEventListener(eventName, domCallback, this); - TestRunner.evaluateInPage(pageFunction); - - function domCallback() { - TestRunner.domModel.removeEventListener(eventName, domCallback, this); - ElementsTestRunner.firstElementsTreeOutline().addEventListener( - Elements.ElementsTreeOutline.Events.ElementsTreeUpdated, treeCallback, this); - } - - function treeCallback() { - ElementsTestRunner.firstElementsTreeOutline().removeEventListener( - Elements.ElementsTreeOutline.Events.ElementsTreeUpdated, treeCallback, this); - ElementsTestRunner.dumpElementsTree(containerNode); - next(); - } - } - - function expandAndDumpTree(next) { - TestRunner.addResult('== Expanding: =='); - ElementsTestRunner.expandElementsTree(callback); - function callback() { - ElementsTestRunner.dumpElementsTree(containerNode); - next(); - } - } - - function selectNodeAndDumpStyles(id, pseudoTypeName, callback) { - if (pseudoTypeName) - ElementsTestRunner.selectPseudoElementAndWaitForStyles('inspected', pseudoTypeName, stylesCallback); - else - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', stylesCallback); - - function stylesCallback() { - ElementsTestRunner.dumpSelectedElementStyles(true, false, false, true); - callback(); - } - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that pseudo elements and their styles are handled properly. -</p> - -<div id="container"> - <div id="inspected">Text</div> - <div id="empty"></div> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/region-style-crash.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-2/region-style-crash.html deleted file mode 100644 index 7c9dd6c..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-2/region-style-crash.html +++ /dev/null
@@ -1,39 +0,0 @@ -<html> -<head> -<style> -#article1 { -webkit-flow-into: flow1; } -#region1 { -webkit-flow-from: flow1; position: absolute; top: 10px; width: 350px; height: 25px;} -#p1 { color: #ff0000; } -@-webkit-region #region1 { - #p1 { color: #008000; } -} - -</style> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('p1', dumpAllStyles); - - function dumpAllStyles() { - ElementsTestRunner.dumpSelectedElementStyles(); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that webkit css region styling can be parsed correctly. Test passes if it doesn't crash. -</p> - -<div id="article1"> - <p id="p1">P color styled in region: #008000.</p> -</div> -<div id="region1" class="regionBox"></div> - -</body> -</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/computed-properties-retain-expanded.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-3/computed-properties-retain-expanded.html deleted file mode 100644 index c13e49b..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/computed-properties-retain-expanded.html +++ /dev/null
@@ -1,54 +0,0 @@ -<html> -<head> -<style> - -#inspected { - display: flex; - color: blue; -} - -#other { - display: inline; -} - -div { - display: block; - color: black; -} - -</style> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('inspected', step1); - - function step1() { - var treeElement = ElementsTestRunner.findComputedPropertyWithName('display'); - treeElement.expand(); - TestRunner.addResult('\n#inspected computed styles: '); - ElementsTestRunner.dumpComputedStyle(true); - ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('other', step2); - } - - function step2() { - TestRunner.addResult('\n#other computed styles: '); - ElementsTestRunner.dumpComputedStyle(true); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Verifies that Computed Style preserves property expansion on re-rendering. -</p> - -<div id="inspected">Inspected</div> -<div id="other">Other</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/remove-shadow-host.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-3/remove-shadow-host.html deleted file mode 100644 index e55b8f2..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/remove-shadow-host.html +++ /dev/null
@@ -1,28 +0,0 @@ -<!DOCTYPE html> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - function addShadow() { - var root = host.attachShadow({mode:"open"}); - root.innerHTML = '<link rel="stylesheet" href="data:text/css,#x{color:pink}">'; - } - - function test() { - TestRunner.cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetAdded, sheetAdded); - TestRunner.cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetRemoved, sheetRemoved); - TestRunner.evaluateInPage('addShadow()'); - - function sheetAdded(event) { - TestRunner.addResult('Sheet added: ' + event.data.sourceURL); - TestRunner.evaluateInPage('host.remove()'); - } - - function sheetRemoved(event) { - TestRunner.addResult('Sheet removed: ' + event.data.sourceURL); - TestRunner.completeTest(); - } -} -</script> -<body onload="runTest()"> -<div id="host"></div> -
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/selector-list.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-3/selector-list.html deleted file mode 100644 index 302d045..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/selector-list.html +++ /dev/null
@@ -1,48 +0,0 @@ -<html> -<head> -<style> -#inspected{ -} - -#InSpEcTeD { -} - -/* */#inspected/* */ { -} - -/* - */ FOO/*Single-line 1*/ bAr,/* Single-line 2*/#inspected/* - Multiline comment -*/ ,MOO>BAR, /*1*/htML /*2 -*/div/*3*/,/**/Foo~/**C*/Moo,/**/MOO /* Comment - */ -{ - color: green; -} - -</style> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); - - function step1() { - ElementsTestRunner.dumpSelectedElementStyles(true); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests representation of selector lists in the protocol. <a href="https://bugs.webkit.org/show_bug.cgi?id=103118">Bug 103118</a>. -</p> - -<div id="inspected">Text</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/selector-source-data.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-3/selector-source-data.html deleted file mode 100644 index 6967e7e..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/selector-source-data.html +++ /dev/null
@@ -1,40 +0,0 @@ -<html> -<head> - -<style> -/* c1 */ - html - #inspected.bar /* c2 */, - /* c3 */ b - /* c4 */ { - text-decoration: none; -} -</style> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.nodeWithId('inspected', nodeFound); - - async function nodeFound(node) { - var response = await TestRunner.CSSAgent.invoke_getMatchedStylesForNode({nodeId: node.id}); - if (response[Protocol.Error]) { - TestRunner.addResult('Failed to get styles: ' + response[Protocol.Error]); - return; - } - ElementsTestRunner.dumpRuleMatchesArray(response.matchedCSSRules); - TestRunner.completeTest(); - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that WebInspector.CSSStyleSheet methods work as expected. -</p> -<h1 id="inspected" class="bar">Inspect Me</h1> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/shadow-dom-rules.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-3/shadow-dom-rules.html deleted file mode 100644 index 7d36533..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/shadow-dom-rules.html +++ /dev/null
@@ -1,43 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function createShadowRoot() -{ - var template = document.querySelector('#tmpl'); - var root = document.querySelector('#host').createShadowRoot(); - root.appendChild(template.content.cloneNode(true)); -} - -function test() { - TestRunner.runTestSuite([ - function testInit(next) { - TestRunner.evaluateInPage('createShadowRoot()', callback); - function callback() { - ElementsTestRunner.selectNodeAndWaitForStyles('inner', next); - } - }, - - function testDumpStyles(next) { - ElementsTestRunner.dumpSelectedElementStyles(true); - next(); - } - ]); -} -</script> -</head> - -<body onload="runTest()"> -<p> -This test checks that style sheets hosted inside shadow roots -could be inspected. -</p> -<div id="host"></div> -<template id="tmpl"> - <style> .red { color: red; } </style> - <div id="inner" class="red">hi!</div> -</template> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/simple-selector.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-3/simple-selector.html deleted file mode 100644 index 8c4d34f7..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/simple-selector.html +++ /dev/null
@@ -1,38 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.expandElementsTree(onElementsTreeExpanded); - - function onElementsTreeExpanded() { - var container = ElementsTestRunner.expandedNodeWithId('container'); - var children = container.children(); - for (var i = 0; i < children.length; ++i) - TestRunner.addResult(Components.DOMPresentationUtils.simpleSelector(children[i])); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p>Verifies simple selector behavior.</p> -<div id="container" style="display: none"> - <div id="foo"></div> - <div id="bar" class="foo"></div> - <div class="title"></div> - <input></input> - <input type="text"></input> - <input type="text" class="text-input"></input> - <input type="text" id="text-input"></input> - <p class="article"></p> - <span></span> - <b></b> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/spectrum.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-3/spectrum.html deleted file mode 100644 index 43547794..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/spectrum.html +++ /dev/null
@@ -1,64 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script type="text/javascript"> - -var test = function() { - function setColor(inputColor, format) { - TestRunner.addResult('Testing: ' + inputColor); - var color = Common.Color.parse(inputColor); - spectrum.setColor(color, format); - } - - function checkColorString(inputColor, format) { - setColor(inputColor, format); - TestRunner.addResult(spectrum.colorString()); - } - - function checkAlphaChange(inputColor, format) { - setColor(inputColor, format); - spectrum._hsv[3] = 0; - spectrum._innerSetColor(spectrum._hsv, undefined, undefined, ColorPicker.Spectrum._ChangeSource.Other); - TestRunner.addResult(spectrum.colorString()); - } - - function checkNextFormat(inputColor, format) { - setColor(inputColor, format); - spectrum._formatViewSwitch(); - TestRunner.addResult(spectrum._colorFormat); - spectrum._formatViewSwitch(); - TestRunner.addResult(spectrum._colorFormat); - } - - var spectrum = new ColorPicker.Spectrum(); - var cf = Common.Color.Format; - var inputColors = [ - {string: 'red', format: cf.Nickname}, {string: '#ABC', format: cf.ShortHEX}, - {string: '#ABCA', format: cf.ShortHEXA}, {string: '#ABCDEF', format: cf.HEX}, - {string: '#ABCDEFAA', format: cf.HEXA}, {string: 'rgb(1, 2, 3)', format: cf.RGB}, - {string: 'rgba(1, 2, 3, 0.2)', format: cf.RGB}, {string: 'hsl(1, 100%, 50%)', format: cf.HSL}, - {string: 'hsla(1, 100%, 50%, 0.2)', format: cf.HSLA} - ]; - - TestRunner.addResult('--- Testing colorString()'); - for (var color of inputColors) - checkColorString(color.string, color.format); - - TestRunner.addResult('--- Testing alpha changes'); - for (var color of inputColors) - checkAlphaChange(color.string, color.format); - - TestRunner.addResult('--- Testing _formatViewSwitch()'); - for (var color of inputColors) - checkNextFormat(color.string, color.format); - - TestRunner.completeTest(); -}; - -</script> -</head> -<body onload="runTest()"> -<p>Tests ColorPicker.Spectrum</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/style-autocomplete.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-3/style-autocomplete.html deleted file mode 100644 index ab3efef..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/style-autocomplete.html +++ /dev/null
@@ -1,135 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<style> -#outer {--red-color: red} -#middle {--blue-color: blue} -</style> -<script> - -function test() { - var node = - ElementsTestRunner.nodeWithId('inner', node => TestRunner.cssModel.cachedMatchedCascadeForNode(node).then(step1)); - function step1(matchedStyles) { - var namePrompt = new Elements.StylesSidebarPane.CSSPropertyPrompt( - SDK.cssMetadata().allProperties(), matchedStyles.cssVariables(), null, true); - var valuePrompt = valuePromptFor('color'); - function valuePromptFor(name) { - return new Elements.StylesSidebarPane.CSSPropertyPrompt( - SDK.cssMetadata().propertyValues(name), matchedStyles.cssVariables(), null, false); - } - TestRunner.runTestSuite([ - function testEmptyName(next) { - testAgainstGolden(namePrompt, '', false, [], ['width'], next); - }, - - function testEmptyNameForce(next) { - testAgainstGolden(namePrompt, '', true, ['width'], [], next); - }, - - function testSingleCharName(next) { - testAgainstGolden(namePrompt, 'w', false, ['width'], [], next); - }, - - function testSubstringName(next) { - testAgainstGolden(namePrompt, 'size', false, ['font-size', 'background-size', 'resize'], ['font-align'], next); - }, - - function testEmptyValue(next) { - testAgainstGolden(valuePrompt, '', false, ['aliceblue', 'red', 'inherit'], [], next); - }, - - function testImportantDeclarationDoNotToggleOnExclamationMark(next) { - testAgainstGolden(valuePrompt, 'red !', false, [], ['!important'], next); - }, - - function testImportantDeclaration(next) { - testAgainstGolden(valuePrompt, 'red !i', false, ['!important'], [], next); - }, - - function testValueR(next) { - testAgainstGolden(valuePrompt, 'R', false, ['RED', 'ROSYBROWN'], ['aliceblue', 'inherit'], next); - }, - - function testValueWithParenthesis(next) { - testAgainstGolden(valuePrompt, 'saturate(0%)', false, [], ['inherit'], next); - }, - - function testValuePrefixed(next) { - testAgainstGolden( - valuePromptFor('-webkit-transform'), 'tr', false, ['translate', 'translateY', 'translate3d'], - ['initial', 'inherit'], next); - }, - - function testValueUnprefixed(next) { - testAgainstGolden( - valuePromptFor('transform'), 'tr', false, ['translate', 'translateY', 'translate3d'], - ['initial', 'inherit'], next); - }, - - function testValueSubstring(next) { - testAgainstGolden( - valuePromptFor('color'), 'blue', false, ['blue', 'darkblue', 'lightblue'], - ['darkred', 'yellow', 'initial', 'inherit'], next); - }, - - function testNameVariables(next) { - testAgainstGolden(namePrompt, '', true, ['--red-color', '--blue-color'], [], next); - }, - - function testValueVariables(next) { - testAgainstGolden(valuePromptFor('color'), 'var(', true, ['--red-color)', '--blue-color)'], ['width'], next); - } - ]); - } - - function testAgainstGolden(prompt, inputText, force, golden, antiGolden, callback) { - var proxyElement = document.createElement('div'); - document.body.appendChild(proxyElement); - proxyElement.style = 'webkit-user-select: text; -webkit-user-modify: read-write-plaintext-only'; - proxyElement.textContent = inputText; - var selectionRange = document.createRange(); - var textNode = proxyElement.childNodes[0]; - if (textNode) { - selectionRange.setStart(textNode, inputText.length); - selectionRange.setEnd(textNode, inputText.length); - } else { - selectionRange.selectNodeContents(proxyElement); - } - var range = selectionRange.startContainer.rangeOfWord( - selectionRange.startOffset, prompt._completionStopCharacters, proxyElement, 'backward'); - var prefix = range.toString(); - prompt._buildPropertyCompletions(inputText.substring(0, inputText.length - prefix.length), prefix, force) - .then(completions); - - function completions(result) { - var suggestions = new Set(result.map(s => s.text)); - var i; - for (i = 0; i < golden.length; ++i) { - if (!suggestions.has(golden[i])) - TestRunner.addResult('NOT FOUND: ' + golden[i]); - } - for (i = 0; i < antiGolden.length; ++i) { - if (suggestions.has(antiGolden[i])) - TestRunner.addResult('FOUND: ' + antiGolden[i]); - } - proxyElement.remove(); - callback(); - } - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that autocompletions are computed correctly when editing the Styles pane. -</p> -<div id="outer"> - <div id="middle"> - <div id="inner"></div> - </div> -</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/style-rule-from-imported-stylesheet.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-3/style-rule-from-imported-stylesheet.html deleted file mode 100644 index adb832a..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/style-rule-from-imported-stylesheet.html +++ /dev/null
@@ -1,31 +0,0 @@ -<html> -<head> -<link rel="import" href="../styles/resources/imported-stylesheet.html"/> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('square', step1); - - function step1() { - TestRunner.addResult('Rules before toggling:'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - ElementsTestRunner.waitForStyleApplied(step2); - ElementsTestRunner.toggleMatchedStyleProperty('background-color', false); - } - - function step2() { - TestRunner.addResult('Rules after toggling:'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - TestRunner.completeTest(); - } -} -</script> -</head> - -<body onload="runTest()"> -<p>Tests that rules from imported stylesheets are correctly shown and are editable in inspector.</p> -<div id="square" class="square"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-blank-property.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-blank-property.html deleted file mode 100644 index e782ab6..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-blank-property.html +++ /dev/null
@@ -1,103 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', addAndIncrementFirstProperty); - - var treeElement; - var section; - - function addAndIncrementFirstProperty() { - TestRunner.addResult('Before append:'); - ElementsTestRunner.dumpSelectedElementStyles(true); - section = ElementsTestRunner.inlineStyleSection(); - - // Create and increment. - treeElement = section.addNewBlankProperty(0); - treeElement.startEditing(); - treeElement.nameElement.textContent = 'margin-left'; - treeElement.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - - treeElement.valueElement.textContent = '1px'; - treeElement.valueElement.firstChild.select(); - treeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('ArrowUp')); - ElementsTestRunner.waitForStyleApplied(incrementProperty); - } - - function incrementProperty() { - // Increment again. - treeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('ArrowUp')); - ElementsTestRunner.waitForStyleApplied(commitProperty); - } - - function commitProperty() { - // Commit. - treeElement.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - reloadStyles(addAndChangeLastCompoundProperty); - } - - function addAndChangeLastCompoundProperty() { - TestRunner.addResult('After insertion at index 0:'); - ElementsTestRunner.dumpSelectedElementStyles(true); - - treeElement = ElementsTestRunner.inlineStyleSection().addNewBlankProperty(2); - treeElement.startEditing(); - treeElement.nameElement.textContent = 'color'; - treeElement.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - - treeElement.valueElement.textContent = 'green; font-weight: bold'; - treeElement.kickFreeFlowStyleEditForTest(); - - treeElement.valueElement.textContent = 'red; font-weight: bold'; - treeElement.kickFreeFlowStyleEditForTest(); - - treeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - ElementsTestRunner.waitForStyleApplied(reloadStyles.bind(this, addAndCommitMiddleProperty)); - } - - function addAndCommitMiddleProperty() { - TestRunner.addResult('After appending and changing a \'compound\' property:'); - ElementsTestRunner.dumpSelectedElementStyles(true); - - treeElement = ElementsTestRunner.inlineStyleSection().addNewBlankProperty(2); - treeElement.startEditing(); - treeElement.nameElement.textContent = 'third-property'; - treeElement.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - treeElement.valueElement.textContent = 'third-value'; - - treeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - ElementsTestRunner.waitForStyleApplied(reloadStyles.bind(this, dumpAndComplete)); - } - - function dumpAndComplete() { - TestRunner.addResult('After insertion at index 2:'); - ElementsTestRunner.dumpSelectedElementStyles(true); - - TestRunner.completeTest(); - } - - function reloadStyles(callback) { - ElementsTestRunner.selectNodeAndWaitForStyles('other', otherCallback); - - function otherCallback() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', callback); - } - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that adding a new blank property works. -</p> - -<div id="inspected" style="font-size: 12px">Text</div> -<div id="other"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-invalid-property.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-invalid-property.html deleted file mode 100644 index 8fe2621..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-invalid-property.html +++ /dev/null
@@ -1,64 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); - - var treeElement; - var section; - - function step1() { - TestRunner.addResult('Before append:'); - ElementsTestRunner.dumpSelectedElementStyles(true); - section = ElementsTestRunner.inlineStyleSection(); - - // Create and increment. - treeElement = section.addNewBlankProperty(); - treeElement.startEditing(); - treeElement.nameElement.textContent = 'color'; - treeElement.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - - // Update incrementally to a valid value. - treeElement.valueElement.textContent = 'rgb('; - treeElement.kickFreeFlowStyleEditForTest(); - ElementsTestRunner.waitForStyleApplied(step2); - } - - function step2() { - // Commit invalid value. - treeElement.valueElement.textContent = 'rgb(1'; - ElementsTestRunner.waitForStyleApplied(step3); - treeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - } - - function step3() { - ElementsTestRunner.selectNodeWithId('other', step4); - } - - function step4() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step5); - } - - function step5() { - TestRunner.addResult('After append:'); - ElementsTestRunner.dumpSelectedElementStyles(true); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that adding an invalid property retains its syntax. -</p> - -<div id="inspected" style="font-size: 12px">Text</div> -<div id="other"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-new-rule-colon.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-new-rule-colon.html deleted file mode 100644 index f8d83890..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-new-rule-colon.html +++ /dev/null
@@ -1,84 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); - TestRunner.addSniffer(Workspace.UISourceCode.prototype, 'addRevision', onRevisionAdded); - - var treeElement; - var hasResourceChanged; - - var revisionAdded = false; - var testFinished = false; - var displayName = ''; - - function step1() { - ElementsTestRunner.addNewRule('foo, div#inspected, bar', step2); - } - - function step2() { - var section = ElementsTestRunner.firstMatchedStyleSection(); - var newProperty = section.addNewBlankProperty(); - newProperty.startEditing(); - textInputController.insertText('color'); - eventSender.keyDown(':'); - textInputController.insertText('maroon'); - ElementsTestRunner.waitForStyleApplied(step3); - eventSender.keyDown(';'); - } - - function step3() { - ElementsTestRunner.selectNodeAndWaitForStyles('other', step4); - } - - function step4() { - ElementsTestRunner.addNewRule(null, onRuleAdded); - - function onRuleAdded() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step5); - } - } - - function step5() { - TestRunner.addResult('After adding new rule (inspected):'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true, true); - ElementsTestRunner.selectNodeAndWaitForStyles('other', step6); - } - - function step6() { - TestRunner.addResult('After adding new rule (other):'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - testFinished = true; - maybeCompleteTest(); - } - - function maybeCompleteTest() { - if (!testFinished || !revisionAdded) - return; - TestRunner.addResult('Revision added: ' + displayName); - TestRunner.completeTest(); - } - - function onRevisionAdded(revision) { - revisionAdded = true; - displayName = this.displayName(); - maybeCompleteTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that adding a new rule works after switching nodes. -</p> - -<div id="inspected" style="font-size: 12px">Text</div> -<div id="other" style="color:red"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-new-rule-tab.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-new-rule-tab.html deleted file mode 100644 index 7651097..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-new-rule-tab.html +++ /dev/null
@@ -1,86 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -var initialize_AdditionalPreload = function() { - InspectorTest.preloadModule("source_frame"); -} - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); - TestRunner.addSniffer(Workspace.UISourceCode.prototype, 'addRevision', onRevisionAdded); - - var treeElement; - var hasResourceChanged; - - var testFinished = false; - var revisionAdded = false; - var displayName = ''; - - function step1() { - // Click "Add new rule". - ElementsTestRunner.addNewRule('foo, div#inspected, bar', step2); - } - - function step2() { - var section = ElementsTestRunner.firstMatchedStyleSection(); - var newProperty = section.addNewBlankProperty(); - newProperty.startEditing(); - textInputController.insertText('color'); - newProperty.nameElement.dispatchEvent(TestRunner.createKeyEvent('Tab')); - textInputController.insertText('maroon'); - newProperty.valueElement.dispatchEvent(TestRunner.createKeyEvent('Tab')); - ElementsTestRunner.selectNodeAndWaitForStyles('other', step3); - } - - function step3() { - // Click "Add new rule". - ElementsTestRunner.addNewRule(null, onRuleAdded); - - function onRuleAdded() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step4); - } - } - - function step4() { - TestRunner.addResult('After adding new rule (inspected):'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true, true); - ElementsTestRunner.selectNodeAndWaitForStyles('other', step5); - } - - function step5() { - TestRunner.addResult('After adding new rule (other):'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - testFinished = true; - maybeCompleteTest(); - } - - function maybeCompleteTest() { - if (!testFinished || !revisionAdded) - return; - TestRunner.addResult('Revision added: ' + displayName); - TestRunner.completeTest(); - } - - function onRevisionAdded(revision) { - displayName = this.displayName(); - revisionAdded = true; - maybeCompleteTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that adding a new rule works after switching nodes. -</p> - -<div id="inspected" style="font-size: 12px">Text</div> -<div id="other" style="color:red"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-new-rule-to-stylesheet.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-new-rule-to-stylesheet.html deleted file mode 100644 index 4e50b46..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-new-rule-to-stylesheet.html +++ /dev/null
@@ -1,45 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<link rel="stylesheet" href="../styles/resources/different-rule-types.css"> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspect', fetchStyleSheet); - - function fetchStyleSheet() { - var styleSheets = TestRunner.cssModel.allStyleSheets(); - for (var i = 0; i < styleSheets.length; ++i) { - var styleSheetHeader = styleSheets[i]; - if (styleSheetHeader.sourceURL.indexOf('different-rule-types.css') === -1) - continue; - ElementsTestRunner.addNewRuleInStyleSheet(styleSheetHeader, '#other, div', onRuleAdded); - return; - } - } - - function onRuleAdded() { - ElementsTestRunner.selectNodeAndWaitForStyles('other', onNodeSelected); - } - - function onNodeSelected() { - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that adding new rule in the stylesheet end works as expected. -</p> - -<div class="inspected">Styled element</div> -<div id="inspect"></div> -<div id="other"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-new-rule.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-new-rule.html deleted file mode 100644 index d1baac25..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-add-new-rule.html +++ /dev/null
@@ -1,120 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -var initialize_AdditionalPreload = function() { - InspectorTest.preloadModule("source_frame"); -} - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); - - var treeElement; - var hasResourceChanged; - - var revisionAdded = false; - var testFinished = false; - var displayName = null; - - TestRunner.addSniffer(Workspace.UISourceCode.prototype, 'addRevision', onRevisionAdded); - - function step1() { - // Click "Add new rule". - ElementsTestRunner.addNewRule('foo, div#inspected, bar', step2); - } - - function step2() { - var section = ElementsTestRunner.firstMatchedStyleSection(); - var newProperty = section.addNewBlankProperty(); - newProperty.startEditing(); - textInputController.insertText('color'); - newProperty.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - textInputController.insertText('maroon'); - newProperty.valueElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - ElementsTestRunner.selectNodeAndWaitForStyles('other', step3); - } - - function step3() { - // Click "Add new rule". - ElementsTestRunner.addNewRule(null, onRuleAdded); - - function onRuleAdded() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step4); - } - } - - function step4() { - TestRunner.addResult('After adding new rule (inspected):'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true, true); - ElementsTestRunner.selectNodeAndWaitForStyles('other', step5); - } - - function step5() { - TestRunner.addResult('After adding new rule (other):'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - - ElementsTestRunner.waitForStylesForClass('my-class', onStylesReceived); - ElementsTestRunner.nodeWithClass('my-class', onNodeFound); - function onNodeFound(node) { - Common.Revealer.reveal(node); - } - - function onStylesReceived() { - ElementsTestRunner.addNewRule(null, step6); - } - } - - function step6() { - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - - ElementsTestRunner.waitForStylesForClass('class-1', onStylesReceived); - ElementsTestRunner.nodeWithClass('class-1', onNodeFound); - function onNodeFound(node) { - Common.Revealer.reveal(node); - } - - function onStylesReceived() { - ElementsTestRunner.addNewRule(null, function() { - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - testFinished = true; - maybeCompleteTest(); - }); - } - } - - function maybeCompleteTest() { - if (!revisionAdded || !testFinished) - return; - TestRunner.addResult('Revision added: ' + displayName); - TestRunner.completeTest(); - } - - function onRevisionAdded(revision) { - revisionAdded = true; - displayName = this.displayName(); - maybeCompleteTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that adding a new rule works after switching nodes. -</p> - -<div id="inspected" style="font-size: 12px">Text</div> -<div id="other" style="color:red"></div> -<div> - <div class="my-class"></div> - <div class="my-class"></div> - <div class="my-class"></div> -</div> - -<div class=" class-1 class-2 class-3 "></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-cancel-editing.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-cancel-editing.html deleted file mode 100644 index 0404685..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-cancel-editing.html +++ /dev/null
@@ -1,62 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); - - var treeElement; - var section; - - function step1() { - ElementsTestRunner.dumpSelectedElementStyles(true); - treeElement = ElementsTestRunner.getElementStylePropertyTreeItem('color'); - - treeElement.startEditing(); - treeElement.nameElement.textContent = 'color'; - treeElement.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - - // Update incrementally, do not commit. - treeElement.valueElement.textContent = 'green'; - treeElement.kickFreeFlowStyleEditForTest(); - - // Cancel editing. - treeElement.valueElement.firstChild.select(); - ElementsTestRunner.waitForStyleApplied(onStyleApplied); - - function onStyleApplied() { - treeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('Escape')); - ElementsTestRunner.waitForStyleApplied(onStyleReverted); - } - - function onStyleReverted() { - ElementsTestRunner.selectNodeWithId('other', step2); - } - } - - function step2() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step3); - } - - function step3() { - TestRunner.addResult('After append:'); - ElementsTestRunner.dumpSelectedElementStyles(true); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that editing is canceled properly after incremental editing. -</p> - -<div id="inspected" style="color: red">Text</div> -<div id="other"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-change-node-while-editing.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-change-node-while-editing.html deleted file mode 100644 index ff35ca9..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-change-node-while-editing.html +++ /dev/null
@@ -1,46 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); - - var treeElement; - var section; - - function step1() { - ElementsTestRunner.dumpSelectedElementStyles(true, true, true); - treeElement = ElementsTestRunner.getElementStylePropertyTreeItem('color'); - - treeElement.startEditing(); - treeElement.nameElement.textContent = 'background'; - - ElementsTestRunner.selectNodeAndWaitForStyles('other', step2); - } - - function step2() { - ElementsTestRunner.dumpSelectedElementStyles(true, true, true); - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step3); - } - - function step3() { - ElementsTestRunner.dumpSelectedElementStyles(true, true, true); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that changing selected node while editing style does update styles sidebar. -</p> - -<div id="inspected" style="color: red">Text</div> -<div id="other" style="color: blue"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-commit-editing.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-commit-editing.html deleted file mode 100644 index 3a1a0ecb..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-commit-editing.html +++ /dev/null
@@ -1,87 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - var treeElement; - var treeOutline; - var section; - - TestRunner.runTestSuite([ - function selectInitialNode(next) { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', next); - }, - - function testFreeFlowEdit(next) { - ElementsTestRunner.dumpSelectedElementStyles(true); - treeElement = ElementsTestRunner.getElementStylePropertyTreeItem('color'); - treeOutline = treeElement.treeOutline; - - treeElement.startEditing(); - treeElement.nameElement.textContent = 'color'; - treeElement.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - - // Update incrementally, do not commit. - treeElement.valueElement.textContent = 'rgb(/*'; - ElementsTestRunner.waitForStyleApplied(next); - treeElement.kickFreeFlowStyleEditForTest(); - }, - - function testCommitEditing(next) { - // Commit editing. - treeElement.valueElement.textContent = 'green'; - treeElement.valueElement.firstChild.select(); - TestRunner.addSniffer(Elements.StylePropertiesSection.prototype, '_afterUpdateFinishedForTest', next); - treeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - }, - - function testNewPropertyEditorIsCreated(next) { - var blankTreeElement = treeOutline.rootElement().childAt(1); - if (!UI.isBeingEdited(blankTreeElement.nameElement)) { - TestRunner.addResult('No new property editor active!'); - TestRunner.completeTest(); - return; - } - - // Test Styles pane editor looping. - TestRunner.addSniffer(Elements.StylePropertiesSection.prototype, '_afterUpdateFinishedForTest', next); - blankTreeElement.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - }, - - function testCycleThroughPropertyEditing(next) { - if (!UI.isBeingEdited(treeOutline.firstChild().nameElement)) { - TestRunner.addResult('Original property name editor not active!'); - TestRunner.completeTest(); - return; - } - - ElementsTestRunner.selectNodeWithId('other', next); - }, - - function testNodeStyles(next) { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', next); - }, - - function dumpStyles(next) { - TestRunner.addResult('After append:'); - ElementsTestRunner.dumpSelectedElementStyles(true); - next(); - } - ]); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that editing is canceled properly after incremental editing. -</p> - -<div id="inspected" style="color: red">Text</div> -<div id="other"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-computed-trace.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-computed-trace.html deleted file mode 100644 index aee6ec5..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-computed-trace.html +++ /dev/null
@@ -1,75 +0,0 @@ -<html> -<head> -<style> -body { - background-color: rgb(100, 0, 0); - font-family: Arial; -} - -div { - text-decoration: underline; -} - -#id1 { - background-color: green; - font-family: Times; -} - -#id1 { - background-color: black; - font-family: Courier; -} - -#id1 { - background: gray; -} - -#id2 { - background-color: blue; - font-family: Courier; - text-decoration: invalidvalue; -} - -</style> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('id1', step1); - - function step1() { - TestRunner.addResult('==== Computed style for ID1 ===='); - ElementsTestRunner.dumpSelectedElementStyles(false, true); - ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('id2', step2); - } - - function step2() { - TestRunner.addResult('==== Computed style for ID2 ===='); - ElementsTestRunner.dumpSelectedElementStyles(false, true); - ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('id3', step3); - } - - function step3() { - TestRunner.addResult('==== Style for ID3 ===='); - // The button[hidden] style specifies "display: none", which should not be /-- overloaded --/. - ElementsTestRunner.dumpSelectedElementStyles(true, true); - TestRunner.completeTest(); - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that computed styles expand and allow tracing to style rules. -</p> - -<div id="id1"> -<div id="id2"> -</div> -<button id="id3" hidden /> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-inherited.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-inherited.html deleted file mode 100644 index 460d2eb..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-inherited.html +++ /dev/null
@@ -1,46 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -var initialize_AdditionalPreload = function() { - InspectorTest.preloadModule("source_frame"); -} - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('nested', step1); - - function step1() { - var treeItem = ElementsTestRunner.getElementStylePropertyTreeItem('font-weight'); - TestRunner.addResult('Before disable'); - ElementsTestRunner.dumpSelectedElementStyles(true); - - ElementsTestRunner.selectNodeAndWaitForStyles('container', step2); - } - - function step2() { - ElementsTestRunner.toggleStyleProperty('font-weight', false); - ElementsTestRunner.selectNodeAndWaitForStyles('nested', step3); - } - - function step3() { - TestRunner.addResult('After disable:'); - ElementsTestRunner.dumpSelectedElementStyles(true); - TestRunner.completeTest(); - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that disabling inherited style property does not break further style inspection. -</p> - -<div id="container" style="font-weight:bold"> - <div id="nested"></div> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-property-after-selector-edit.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-property-after-selector-edit.html deleted file mode 100644 index d8c2d4a..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-property-after-selector-edit.html +++ /dev/null
@@ -1,50 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - TestRunner.runTestSuite([ - function selectInitialNode(next) { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', next); - }, - - function editSelector(next) { - var section = ElementsTestRunner.firstMatchedStyleSection(); - section.startEditingSelector(); - section._selectorElement.textContent = '#inspected, .INSERTED-OTHER-SELECTOR'; - ElementsTestRunner.waitForSelectorCommitted(next); - section._selectorElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - }, - - function testDisableProperty(next) { - var treeItem = ElementsTestRunner.getMatchedStylePropertyTreeItem('color'); - ElementsTestRunner.waitForStyleApplied(onPropertyDisabled); - treeItem._toggleEnabled({target: {checked: false}, consume: function() {}}); - - function onPropertyDisabled() { - TestRunner.addResult('\n\n#### AFTER PROPERTY DISABLED ####\n\n'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - next(); - } - } - ]); -} -</script> -<style> -#inspected { - color: red; -} -</style> -</head> - -<body onload="runTest()"> -<p> -Verifies that sequence of setting selector and disabling property works. -</p> - -<div id="inspected">Red text here.</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-then-change.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-then-change.html deleted file mode 100644 index 0294465e8..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-then-change.html +++ /dev/null
@@ -1,48 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('container', step1); - - function step1() { - TestRunner.addResult('Before disable'); - ElementsTestRunner.dumpSelectedElementStyles(true, true); - - ElementsTestRunner.toggleStyleProperty('font-weight', false); - ElementsTestRunner.waitForStyles('container', step2); - } - - function step2() { - TestRunner.addResult('After disable'); - ElementsTestRunner.dumpSelectedElementStyles(true, true); - - var treeItem = ElementsTestRunner.getElementStylePropertyTreeItem('font-weight'); - treeItem.applyStyleText('color: green', false); - ElementsTestRunner.waitForStyles('container', step3); - } - - function step3() { - TestRunner.addResult('After change'); - ElementsTestRunner.dumpSelectedElementStyles(true, true); - TestRunner.completeTest(); - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that changing a disabled property enables it as well. -</p> - -<div id="container" style="font-weight:bold"> -</div> - -<div id="other"> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-then-delete.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-then-delete.html deleted file mode 100644 index 5ab482e..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-then-delete.html +++ /dev/null
@@ -1,58 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('container', step1); - - function step1() { - // Disable property - TestRunner.addResult('Before disable'); - ElementsTestRunner.dumpSelectedElementStyles(true, true); - ElementsTestRunner.toggleStyleProperty('font-weight', false); - ElementsTestRunner.waitForStyleApplied(step2); - } - - function step2() { - // Delete style - TestRunner.addResult('After disable'); - ElementsTestRunner.dumpSelectedElementStyles(true, true); - - var treeItem = ElementsTestRunner.getElementStylePropertyTreeItem('font-weight'); - treeItem.applyStyleText('', false); - - ElementsTestRunner.waitForStyleApplied(step3); - } - - function step3() { - ElementsTestRunner.selectNodeWithId('other', step4); - } - - function step4() { - ElementsTestRunner.selectNodeAndWaitForStyles('container', step5); - } - - function step5(node) { - TestRunner.addResult('After delete'); - ElementsTestRunner.dumpSelectedElementStyles(true, true); - TestRunner.completeTest(); - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that removal of property following its disabling works. -</p> - -<div id="container" style="font-weight:bold"> -</div> - -<div id="other"> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-then-enable-overriden-ua.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-then-enable-overriden-ua.html deleted file mode 100644 index de2446749a..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-then-enable-overriden-ua.html +++ /dev/null
@@ -1,41 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> - -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('body-id', step1); - - function step1() { - TestRunner.addResult('Before disable'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - ElementsTestRunner.toggleStyleProperty('margin', false); - ElementsTestRunner.waitForStyles('body-id', step2); - } - - function step2() { - TestRunner.addResult('After disable'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - ElementsTestRunner.toggleStyleProperty('margin', true); - ElementsTestRunner.waitForStyles('body-id', step3); - } - - function step3() { - TestRunner.addResult('After enable'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - TestRunner.completeTest(); - } -} -</script> -</head> - -<body onload="runTest()" id="body-id" style="margin: 10px"> -<p> -Tests that disabling shorthand removes the "overriden" mark from the UA shorthand it overrides. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-then-enable.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-then-enable.html deleted file mode 100644 index 8d7c72f..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-disable-then-enable.html +++ /dev/null
@@ -1,48 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('container', step1); - - function step1(node) { - TestRunner.addResult('Before disable'); - var treeItem = ElementsTestRunner.getElementStylePropertyTreeItem('font-weight'); - ElementsTestRunner.dumpStyleTreeItem(treeItem, ''); - - ElementsTestRunner.toggleStyleProperty('font-weight', false); - ElementsTestRunner.waitForStyles('container', step2); - } - - function step2() { - TestRunner.addResult('After disable'); - var treeItem = ElementsTestRunner.getElementStylePropertyTreeItem('font-weight'); - ElementsTestRunner.dumpStyleTreeItem(treeItem, ''); - - ElementsTestRunner.toggleStyleProperty('font-weight', true); - ElementsTestRunner.waitForStyles('container', step3); - } - - function step3() { - TestRunner.addResult('After enable'); - var treeItem = ElementsTestRunner.getElementStylePropertyTreeItem('font-weight'); - ElementsTestRunner.dumpStyleTreeItem(treeItem, ''); - - TestRunner.completeTest(); - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that disabling style property works. -</p> - -<div id="container" style="font-weight:bold"> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-variables.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-variables.html deleted file mode 100644 index 45ef9ac..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-3/styles-variables.html +++ /dev/null
@@ -1,85 +0,0 @@ -<html> -<head> -<style> -body { - --a: red; -} - -#id1 { - --b: 44px; -} - -#id2 { - --a: green; -} - -#id3 { - --a: inherit; -} - -#id4 { - --a: var(--z); -} - -</style> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('id1', step1); - function step1(node) { - TestRunner.addResult('==== Computed style for ID1 ===='); - ElementsTestRunner.dumpSelectedElementStyles(false, false); - TestRunner.cssModel.computedStylePromise(node.id).then(function(style) { - TestRunner.addResult('value of --a: ' + style.get('--a')); - ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('id2', step2); - }); - } - - function step2(node) { - TestRunner.addResult('==== Computed style for ID2 ===='); - ElementsTestRunner.dumpSelectedElementStyles(false, false); - TestRunner.cssModel.computedStylePromise(node.id).then(function(style) { - TestRunner.addResult('value of --b: ' + style.get('--b')); - ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('id3', step3); - }); - } - - function step3(node) { - TestRunner.addResult('==== Computed style for ID3 ===='); - ElementsTestRunner.dumpSelectedElementStyles(false, false); - TestRunner.cssModel.computedStylePromise(node.id).then(function(style) { - TestRunner.addResult('value of --b: ' + style.get('--b')); - ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('id4', step4); - }); - } - - function step4(node) { - TestRunner.addResult('==== Computed style for ID4 ===='); - ElementsTestRunner.dumpSelectedElementStyles(false, false); - TestRunner.cssModel.computedStylePromise(node.id).then(function(style) { - TestRunner.addResult('value of --a: ' + style.get('--a')); - TestRunner.completeTest(); - }); - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that computed styles expand and allow tracing to style rules. -</p> - -<div id="id1"> -<div id="id2"> -<div id="id3"> -</div> -</div> -</div> -<div id="id4"> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/disable-last-property-without-semicolon.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/disable-last-property-without-semicolon.html deleted file mode 100644 index 2b4a068c..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/disable-last-property-without-semicolon.html +++ /dev/null
@@ -1,90 +0,0 @@ -<html> -<head> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - var formattedStyle; - - TestRunner.cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetChanged, onStyleSheetChanged, this); - - function onStyleSheetChanged(event) { - if (!event.data || !event.data.edit) - return; - formattedStyle.rebase(event.data.edit); - } - - TestRunner.runTestSuite([ - function initFormattedStyle(next) { - function callback(matchedResult) { - if (!matchedResult) { - TestRunner.addResult('empty styles'); - TestRunner.completeTest(); - return; - } - - formattedStyle = matchedResult.nodeStyles()[1]; - next(); - } - - function nodeCallback(node) { - TestRunner.cssModel.matchedStylesPromise(node.id, false, false).then(callback); - } - ElementsTestRunner.selectNodeWithId('formatted', nodeCallback); - }, - - function testFormattedDisableLast(next) { - formattedStyle.allProperties()[1].setDisabled(true).then(dumpFormattedAndCallNext.bind(null, next)); - }, - - function testFormattedInsertEnd(next) { - formattedStyle.insertPropertyAt(2, 'endProperty', 'endValue', dumpFormattedAndCallNext.bind(null, next)); - }, - - function testFormattedEnable(next) { - formattedStyle.allProperties()[1].setDisabled(false).then(dumpFormattedAndCallNext.bind(null, next)); - }, - ]); - - // Data dumping - - function dumpFormattedAndCallNext(next, success) { - if (!success) { - TestRunner.addResult('error: operation failed.'); - TestRunner.completeTest(); - return; - } - - dumpStyle(formattedStyle); - if (next) - next(); - } - - function dumpStyle(style) { - if (!style) - return; - TestRunner.addResult('raw cssText:'); - TestRunner.addResult('{' + style.cssText + '}'); - } -} -</script> - -<style> - -#formatted { - color: red; - margin: 0 -} - -</style> -</head> - -<body id="mainBody" onload="runTest()"> -<p> -Verifies that formatter adds a semicolon when enabling property. -</p> -<div id="formatted">Formatted</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/do-not-rebuild-styles-on-every-change.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/do-not-rebuild-styles-on-every-change.html deleted file mode 100644 index b0218e6..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/do-not-rebuild-styles-on-every-change.html +++ /dev/null
@@ -1,55 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<div id="parent"> - <div id=foo><div id="child"></div></div> - <div id="sibling"><div id="child-of-sibling"></div></div> -</div> -<script> - -function modify(id) -{ - document.getElementById(id).setAttribute("fake", "modified"); -} - -function test() { - TestRunner.runTestSuite([ - function setupTest(next) { - ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('foo', didSelectElement); - - function didSelectElement() { - TestRunner.addSniffer( - Elements.StylesSidebarPane.prototype, 'update', - TestRunner.addResult.bind(InspectorTest, 'Requested StyleSidebarPane update'), true); - next(); - } - }, - - function testModifySibling(next) { - TestRunner.evaluateInPage('modify("sibling")', next); - }, - - function testModifySiblingChild(next) { - TestRunner.evaluateInPage('modify("child-of-sibling")', next); - }, - - function testModifyParent(next) { - TestRunner.evaluateInPage('modify("parent")', next); - }, - - function testModifyChild(next) { - TestRunner.evaluateInPage('modify("child")', next); - } - ]); -}; - -</script> - -</head> - -<body onload="runTest()"> -<p>Tests show that ssp isn't rebuild on every dom mutation</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/inline-style-sourcemap.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/inline-style-sourcemap.html deleted file mode 100644 index 25f2075..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/inline-style-sourcemap.html +++ /dev/null
@@ -1,39 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function embedInlineStyleSheet() -{ - var style = document.createElement("style"); - style.type = "text/css"; - style.textContent = document.querySelector(".stylesheet-text").textContent; - document.head.appendChild(style); -} - -function test() { - SDK.targetManager.addModelListener(SDK.CSSModel, SDK.CSSModel.Events.StyleSheetAdded, function() {}); - TestRunner.evaluateInPage('embedInlineStyleSheet()', onEvaluated); - - function onEvaluated() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspect', onSelected); - } - - function onSelected() { - ElementsTestRunner.dumpSelectedElementStyles(true, false, false); - TestRunner.completeTest(); - } -}; - -</script> - -</head> - -<body id="inspect" onload="runTest()"> -<p>Verify that inline style sourceMappingURL is resolved properly.</p> -<pre class="stylesheet-text">.red,body{color:red}body{background-color:red} -/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1peGluLmxlc3MiLCJ0ZXN0Lmxlc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsS0NJQSxLREhFLE1BQUEsSUNHRixLQUVFLGlCQUFBIn0=*/</pre> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/keyframes-source-offsets.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/keyframes-source-offsets.html deleted file mode 100644 index cd7e4d4..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/keyframes-source-offsets.html +++ /dev/null
@@ -1,73 +0,0 @@ -<html> -<head> - -<link rel="stylesheet" href="../styles/resources/keyframes.css"> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<style> -@keyframes animName { - from, 20% { - height: 200px; - color: red; - } - to { - height: 500px; - } -} -</style> -<script> - -function test() { - function dumpRule(rule) { - TestRunner.addResult( - '\n' + rule.animationName.text + ' @' + ElementsTestRunner.rangeText(rule.animationName.range)); - for (var keyframe of rule.keyframes) { - TestRunner.addResult( - keyframe.keyText.text + ' @' + ElementsTestRunner.rangeText(keyframe.keyText.range) + ' {} @' + - ElementsTestRunner.rangeText(keyframe.style.range)); - var allProperties = keyframe.style.cssProperties; - for (var i = 0; i < allProperties.length; ++i) { - var property = allProperties[i]; - if (!property.range) - continue; - TestRunner.addResult( - property.name + ':' + property.value + (property.important ? ' !important' : '') + - (('parsedOk' in property) ? ' non-parsed' : '') + ' @' + ElementsTestRunner.rangeText(property.range)); - } - } - } - - ElementsTestRunner.selectNodeWithId('element', step1); - - async function step1(node) { - var response = await TestRunner.CSSAgent.invoke_getMatchedStylesForNode({nodeId: node.id}); - - for (var animation of response.cssKeyframesRules) - dumpRule(animation); - - TestRunner.addResult('\n>> Modifying keyframe rule'); - var style = new SDK.CSSStyleDeclaration( - TestRunner.cssModel, null, response.cssKeyframesRules[1].keyframes[0].style, - SDK.CSSStyleDeclaration.Type.Regular); - await style.setText('width: 123px'); - - response = await TestRunner.CSSAgent.invoke_getMatchedStylesForNode({nodeId: node.id}); - - for (var animation of response.cssKeyframesRules) - dumpRule(animation); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<div id="element"></div> -<p> -Tests that proper data and start/end offset positions are reported for CSS keyframes. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/style-update-during-selector-edit.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/style-update-during-selector-edit.html deleted file mode 100644 index 4569f90..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/style-update-during-selector-edit.html +++ /dev/null
@@ -1,66 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function addStyleClass() -{ - document.getElementById("inspected").className = "new-class"; -} - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); - var treeOutline = ElementsTestRunner.firstElementsTreeOutline(); - var seenRebuildUpdate; - var seenAttrModified; - var modifiedAttrNodes = []; - - function attributeChanged(event) { - if (event.data.node === treeOutline.selectedDOMNode()) - seenAttrModified = true; - } - - function rebuildUpdate() { - if (UI.panels.elements._stylesWidget.node === treeOutline.selectedDOMNode()) - seenRebuildUpdate = true; - } - - function step1() { - TestRunner.addSniffer(Elements.StylesSidebarPane.prototype, 'doUpdate', rebuildUpdate); - TestRunner.domModel.addEventListener(SDK.DOMModel.Events.AttrModified, attributeChanged, this); - // Click "Add new rule". - UI.panels.elements._stylesWidget.contentElement.querySelector('.styles-pane-toolbar') - .shadowRoot.querySelector('.largeicon-add') - .click(); - TestRunner.evaluateInPage('addStyleClass()', step2); - } - - function step2() { - if (!seenAttrModified) - TestRunner.addResult('FAIL: AttrModified event not received.'); - else if (seenRebuildUpdate) - TestRunner.addResult('FAIL: Styles pane updated while a selector editor was active.'); - else - TestRunner.addResult('SUCCESS: Styles pane not updated.'); - TestRunner.completeTest(); - } -} - -</script> -<style> -.new-class { - color: red; -} -</style> -</head> - -<body onload="runTest()"> -<p> -Tests that modification of element styles while editing a selector does not commit the editor. -</p> - -<div id="inspected"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-do-not-detach-sourcemap-on-edits.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-do-not-detach-sourcemap-on-edits.html deleted file mode 100644 index 8f08c4f..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-do-not-detach-sourcemap-on-edits.html +++ /dev/null
@@ -1,82 +0,0 @@ -<html> -<head> - -<link rel="stylesheet" href="./resources/styles-do-not-detach-sourcemap-on-edits.css"> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script> - -function test() { - SourcesTestRunner.waitForScriptSource('styles-do-not-detach-sourcemap-on-edits.scss', onSourceMapLoaded); - - function onSourceMapLoaded() { - ElementsTestRunner.selectNodeAndWaitForStyles('container', onNodeSelected); - } - - function onNodeSelected() { - TestRunner.runTestSuite(testSuite); - } - - var testSuite = [ - function editProperty(next) { - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - - var treeItem = ElementsTestRunner.getMatchedStylePropertyTreeItem('color'); - treeItem.applyStyleText('NAME: VALUE', true); - ElementsTestRunner.waitForStyles('container', next); - }, - - function editSelector(next) { - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - - var section = ElementsTestRunner.firstMatchedStyleSection(); - section.startEditingSelector(); - section._selectorElement.textContent = '#container, SELECTOR'; - ElementsTestRunner.waitForSelectorCommitted(next); - section._selectorElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - }, - - function editMedia(next) { - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - - var section = ElementsTestRunner.firstMatchedStyleSection(); - var mediaTextElement = ElementsTestRunner.firstMediaTextElementInSection(section); - mediaTextElement.click(); - mediaTextElement.textContent = '(max-width: 9999999px)'; - ElementsTestRunner.waitForMediaTextCommitted(next); - mediaTextElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - }, - - function addRule(next) { - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - - var styleSheetHeader = TestRunner.cssModel.styleSheetHeaders().find( - header => header.resourceURL().indexOf('styles-do-not-detach-sourcemap-on-edits.css') !== -1); - if (!styleSheetHeader) { - TestRunner.addResult('ERROR: failed to find style sheet!'); - TestRunner.completeTest(); - return; - } - ElementsTestRunner.addNewRuleInStyleSheet(styleSheetHeader, 'NEW-RULE', next); - }, - - function finish(next) { - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - next(); - }, - ]; -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that source map is not detached on edits. crbug.com/257778 -</p> - -<div id="container">container.</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-edit-property-after-invalid-rule.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-edit-property-after-invalid-rule.html deleted file mode 100644 index 6097cd1..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-edit-property-after-invalid-rule.html +++ /dev/null
@@ -1,49 +0,0 @@ -<html> -<head> - -<style type="text/css" media="screen"> -/* Invalid selector */ -.navbar-search .search-query:-moz-placeholder { - color: #cccccc; -} - -#container { - padding: 15px; -} -</style> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('container', step1); - - function step1() { - TestRunner.addResult('Initial value'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - - var treeItem = ElementsTestRunner.getMatchedStylePropertyTreeItem('padding'); - treeItem.applyStyleText('padding: 20px', false); - ElementsTestRunner.waitForStyles('container', step2); - } - - function step2() { - TestRunner.addResult('After changing property'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that proper source lines are reported for the styles after unrecognizer / invalid selector. -</p> - -<div id="container"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-formatting.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-formatting.html deleted file mode 100644 index bb75e44..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-formatting.html +++ /dev/null
@@ -1,242 +0,0 @@ -<html> -<head> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - var formattedStyle; - var unformattedStyle; - - - TestRunner.cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetChanged, onStyleSheetChanged, this); - - function onStyleSheetChanged(event) { - if (!event.data || !event.data.edit) - return; - if (formattedStyle) - formattedStyle.rebase(event.data.edit); - if (unformattedStyle) - unformattedStyle.rebase(event.data.edit); - } - - TestRunner.runTestSuite([ - function initFormattedStyle(next) { - function callback(matchedResult) { - if (!matchedResult) { - TestRunner.addResult('empty styles'); - TestRunner.completeTest(); - return; - } - - formattedStyle = matchedResult.nodeStyles()[1]; - next(); - } - - function nodeCallback(node) { - TestRunner.cssModel.matchedStylesPromise(node.id).then(callback); - } - ElementsTestRunner.selectNodeWithId('formatted', nodeCallback); - }, - - function testFormattedInsertStart(next) { - formattedStyle.insertPropertyAt( - 0, 'firstProperty', 'rgba(1, 2, 3, 0)', dumpFormattedAndCallNext.bind(null, next)); - }, - - function testFormattedRemoveStart(next) { - formattedStyle.allProperties()[0].setText('', true, true).then(dumpFormattedAndCallNext.bind(null, next)); - }, - - function testFormattedInsertMiddle(next) { - formattedStyle.insertPropertyAt( - 1, 'middleProperty', 'middleValue /* comment */', dumpFormattedAndCallNext.bind(null, next)); - }, - - function testFormattedRemoveMiddle(next) { - formattedStyle.allProperties()[1].setText('', true, true).then(dumpFormattedAndCallNext.bind(null, next)); - }, - - function testFormattedInsertEnd(next) { - formattedStyle.insertPropertyAt(3, 'endProperty', 'endValue', dumpFormattedAndCallNext.bind(null, next)); - }, - - function testFormattedRemoveEnd(next) { - formattedStyle.allProperties()[3].setText('', true, true).then(dumpFormattedAndCallNext.bind(null, next)); - }, - - function testFormattedDisableStart(next) { - formattedStyle.allProperties()[0].setDisabled(true).then(dumpFormattedAndCallNext.bind(null, next)); - }, - - function testFormattedDisableEnd(next) { - formattedStyle.allProperties()[2].setDisabled(true).then(dumpFormattedAndCallNext.bind(null, next)); - }, - - function testFormattedDisableMiddle(next) { - formattedStyle.allProperties()[1].setDisabled(true).then(dumpFormattedAndCallNext.bind(null, next)); - }, - - function testFormattedInsert1(next) { - formattedStyle.insertPropertyAt(0, 'propA', 'valA', dumpFormattedAndCallNext.bind(null, next)); - }, - - function testFormattedInsert2(next) { - formattedStyle.insertPropertyAt(2, 'propB', 'valB', dumpFormattedAndCallNext.bind(null, next)); - }, - - function testFormattedInsert3(next) { - formattedStyle.insertPropertyAt(5, 'propC', 'valC', dumpFormattedAndCallNext.bind(null, next)); - }, - - function testFormattedEnableStart(next) { - formattedStyle.allProperties()[1].setDisabled(false).then(dumpFormattedAndCallNext.bind(null, next)); - }, - - function testFormattedEnableEnd(next) { - formattedStyle.allProperties()[4].setDisabled(false).then(dumpFormattedAndCallNext.bind(null, next)); - }, - - function testFormattedEnableMiddle(next) { - formattedStyle.allProperties()[3].setDisabled(false).then(dumpFormattedAndCallNext.bind(null, next)); - }, - - function testFormattedWithMeta(next) { - formattedStyle.insertPropertyAt(0, '-webkit-animation', 'linear', dumpFormattedAndCallNext.bind(null, next)); - }, - - function testFormattedWithMetaValue(next) { - formattedStyle.insertPropertyAt(1, 'unicode-bidi', 'webkit-isolate', dumpFormattedAndCallNext.bind(null, next)); - }, - - function testFormattedWithAtoms(next) { - formattedStyle.insertPropertyAt( - 0, 'border-left', '1px solid rgb(1,1,1)', dumpFormattedAndCallNext.bind(null, next)); - }, - - function initUnformattedStyle(next) { - function callback(matchedResult) { - if (!matchedResult) { - TestRunner.addResult('empty styles'); - TestRunner.completeTest(); - return; - } - - unformattedStyle = matchedResult.nodeStyles()[1]; - next(); - } - - function nodeCallback(node) { - TestRunner.cssModel.matchedStylesPromise(node.id).then(callback); - } - ElementsTestRunner.selectNodeWithId('unformatted', nodeCallback); - }, - - function testUnformattedInsertStart(next) { - unformattedStyle.insertPropertyAt(0, 'firstProperty', 'firstValue', dumpUnformattedAndCallNext.bind(null, next)); - }, - - function testUnformattedRemoveStart(next) { - unformattedStyle.allProperties()[0].setText('', true, true).then(dumpUnformattedAndCallNext.bind(null, next)); - }, - - function testUnformattedInsertMiddle(next) { - unformattedStyle.insertPropertyAt( - 1, 'middleProperty', 'middleValue', dumpUnformattedAndCallNext.bind(null, next)); - }, - - function testUnformattedRemoveMiddle(next) { - unformattedStyle.allProperties()[1].setText('', true, true).then(dumpUnformattedAndCallNext.bind(null, next)); - }, - - function testUnformattedInsertEnd(next) { - unformattedStyle.insertPropertyAt(3, 'endProperty', 'endValue', dumpUnformattedAndCallNext.bind(null, next)); - }, - - function testUnformattedRemoveEnd(next) { - unformattedStyle.allProperties()[3].setText('', true, true).then(dumpUnformattedAndCallNext.bind(null, next)); - }, - - function testUnformattedDisableStart(next) { - unformattedStyle.allProperties()[0].setDisabled(true).then(dumpUnformattedAndCallNext.bind(null, next)); - }, - - function testUnformattedDisableEnd(next) { - unformattedStyle.allProperties()[2].setDisabled(true).then(dumpUnformattedAndCallNext.bind(null, next)); - }, - - function testUnformattedDisableMiddle(next) { - unformattedStyle.allProperties()[1].setDisabled(true).then(dumpUnformattedAndCallNext.bind(null, next)); - }, - - function testUnformattedEnableStart(next) { - unformattedStyle.allProperties()[0].setDisabled(false).then(dumpUnformattedAndCallNext.bind(null, next)); - }, - - function testUnformattedEnableEnd(next) { - unformattedStyle.allProperties()[2].setDisabled(false).then(dumpUnformattedAndCallNext.bind(null, next)); - }, - - function testUnformattedEnableMiddle(next) { - unformattedStyle.allProperties()[1].setDisabled(false).then(dumpUnformattedAndCallNext.bind(null, next)); - } - ]); - - // Data dumping - - function dumpFormattedAndCallNext(next, success) { - if (!success) { - TestRunner.addResult('error: operation failed.'); - TestRunner.completeTest(); - return; - } - - dumpStyle(formattedStyle); - if (next) - next(); - } - - function dumpUnformattedAndCallNext(next, success) { - if (!success) { - TestRunner.addResult('error: operation failed.'); - TestRunner.completeTest(); - return; - } - - dumpStyle(unformattedStyle); - if (next) - next(); - } - - function dumpStyle(style) { - if (!style) - return; - TestRunner.addResult('raw cssText:'); - TestRunner.addResult('{' + style.cssText + '}'); - } -} -</script> - -<style> - -#formatted { - /* leading comment */ - color: red; /* comment1 */ - zoom: 1;/* comment2 */ /* like: property */ - padding: 0 -} - -#unformatted {/*leading comment*/color:red;zoom:1;padding:0;} - -</style> -</head> - -<body id="mainBody" onload="runTest()"> -<p> -Tests that InspectorCSSAgent formats the CSS style text based on the CSS model modifications. -</p> -<div id="formatted">Formatted</div> -<div id="unformatted">Unformatted</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-history.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-history.html deleted file mode 100644 index ceeaa90..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-history.html +++ /dev/null
@@ -1,129 +0,0 @@ -<html> -<head> - -<link rel="stylesheet" href="../styles/resources/styles-history.css"> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="../../../http/tests/inspector/resources-test.js"></script> -<script> - -function test() { - ApplicationTestRunner.runAfterCachedResourcesProcessed(runTestSuite); - - var uiSourceCode; - - function runTestSuite() { - TestRunner.runTestSuite([ - function testSetUp(next) { - function visitUISourceCodes(currentUISourceCode) { - if (currentUISourceCode.url().indexOf('styles-history.css') === -1) - return; - uiSourceCode = currentUISourceCode; - next(); - } - Workspace.workspace.uiSourceCodes().forEach(visitUISourceCodes); - }, - - function testSetResourceContentMinor(next) { - TestRunner.addSniffer(Bindings.StyleFile.prototype, '_styleFileSyncedForTest', styleUpdatedMinor); - uiSourceCode.setWorkingCopy('body {\n margin: 15px;\n padding: 10px;\n}'); - - function styleUpdatedMinor() { - dumpHistory(next)(); - } - }, - - function testSetResourceContentMajor(next) { - TestRunner.addSniffer(Bindings.StyleFile.prototype, '_styleFileSyncedForTest', styleUpdatedMinor); - uiSourceCode.setWorkingCopy('body {\n margin: 20px;\n padding: 10px;\n}'); - - function styleUpdatedMinor() { - TestRunner.addSniffer(Bindings.StyleFile.prototype, '_styleFileSyncedForTest', styleUpdatedMajor); - uiSourceCode.commitWorkingCopy(function() {}); - - function styleUpdatedMajor() { - dumpHistory(next)(); - } - } - }, - - function testSetContentViaModelMinor(next) { - styleSheetForResource(step1); - - function step1(style) { - var property = getLiveProperty(style, 'margin'); - property.setText('margin:25px;', false, true).then(dumpHistory(next)); - } - }, - - function testSetContentViaModelMajor(next) { - styleSheetForResource(step1); - - function step1(style) { - var property = getLiveProperty(style, 'margin'); - TestRunner.addSniffer(Workspace.UISourceCode.prototype, 'addRevision', dumpHistory(next)); - property.setText('margin:30px;', true, true); - } - } - ]); - } - - function styleSheetForResource(callback) { - ElementsTestRunner.nodeWithId('mainBody', onNodeSelected); - - function onNodeSelected(node) { - TestRunner.CSSAgent.invoke_getMatchedStylesForNode({nodeId: node.id}).then(onMatchedStylesForNode); - } - - function onMatchedStylesForNode(response) { - var error = response[Protocol.Error]; - if (error) { - TestRunner.addResult('error: ' + error); - TestRunner.completeTest(); - return; - } - for (var matchedStyle of response.matchedCSSRules) { - var rule = matchedStyle.rule; - if (rule.origin !== 'regular') - continue; - callback(new SDK.CSSStyleDeclaration(TestRunner.cssModel, null, rule.style)); - return; - } - TestRunner.addResult('error: did not find any regular rule'); - TestRunner.completeTest(); - } - } - - function dumpHistory(next) { - function result() { - TestRunner.addResult('History length: ' + uiSourceCode.history().length); - for (var i = 0; i < uiSourceCode.history().length; ++i) { - TestRunner.addResult('Item ' + i + ':'); - TestRunner.addResult(uiSourceCode.history()[i].content); - } - next(); - } - return result; - } - - function getLiveProperty(style, name) { - for (var property of style.allProperties()) { - if (!property.activeInStyle()) - continue; - if (property.name === name) - return property; - } - return null; - } -} - -</script> -</head> - -<body id="mainBody" onload="runTest()"> -<p> -Tests resources panel history. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-iframe.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-iframe.html deleted file mode 100644 index 7f1f1a6d..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-iframe.html +++ /dev/null
@@ -1,51 +0,0 @@ -<html> -<head> - -<style type="text/css" media="screen"> - #main { background:blue; } - -/*# sourceURL=styles-iframe.html*/ -</style> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function loadIframe() -{ - var iframe = document.createElement("iframe"); - iframe.src = "../styles/resources/styles-iframe-data.html"; - document.getElementById("main").appendChild(iframe); -} - -function test() { - TestRunner.evaluateInPage('loadIframe()'); - ConsoleTestRunner.addConsoleSniffer(step0); - - function step0() { - ElementsTestRunner.selectNodeAndWaitForStyles('main', step1); - } - - function step1() { - TestRunner.addResult('Main frame style:'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - ElementsTestRunner.selectNodeAndWaitForStyles('iframeBody', step2); - } - - function step2() { - TestRunner.addResult('iframe style:'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - TestRunner.completeTest(); - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that proper (and different) styles are returned for body elements of main document and iframe. -</p> - -<div id="main"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-inline-element-style-changes-should-not-force-style-recalc.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-inline-element-style-changes-should-not-force-style-recalc.html deleted file mode 100644 index 28af8c17..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-inline-element-style-changes-should-not-force-style-recalc.html +++ /dev/null
@@ -1,27 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/timeline-test.js"></script> - -<script> - -function performActions() -{ - var testDiv = document.querySelector("#testDiv"); - for (var i = 0; i < 20; ++i) - testDiv.style.visibility = ""; -} - -function test() { - UI.context.setFlavor(Timeline.TimelinePanel, UI.panels.timeline); - PerformanceTestRunner.performActionsAndPrint('performActions()', 'RecalculateStyles'); -} - -</script> -</head> - -<body onload="runTest()"> -<p>Tests that inspector doesn't force styles recalc on operations with inline element styles that result in no changes.</p> -<div id="testDiv" style="color: green">testDiv</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-invalid-color-values.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-invalid-color-values.html deleted file mode 100644 index 88739c3c..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-invalid-color-values.html +++ /dev/null
@@ -1,93 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> -function test() { - var colors = [ - // Each of these is red. Some may need to be clipped to [0, 255]. - 'red', '#F00', '#F00F', '#FF0000', '#FF0000FF', 'rgb(255,0,0)', - 'rgb(300,0,0)', // clipped to rgb(255,0,0) - 'rgb(255,-10,0)', // clipped to rgb(255,0,0) - 'rgb(110%, 0%, 0%)', // clipped to rgb(100%,0%,0%) - - // Each of these are valid - 'rgba(0,0,0,0.5)', 'hsl(-120, 100%, 50%)', - 'hsl(-120, 200%, 200%)', // clipped to hsl(240,100%,100%) - 'hsl(-120, -200%, -200%)', // clipped to hsl(240,100%,100%) - 'hsla(-120, -200%, -200%, -5)', // clipped to hsla(0,0%,0%,0) - 'hsla(240,100%,50%,0.05)', 'hsl(200.5,0%,50%)', 'hsla(200,1.5%,50%,1)', 'rgba(0,0,0,.5)', 'hsla(.5,.5%,.5%,.5)', - 'hsla(100.5,50.5%,50.5%,.5)', - - // Each of these has their alpha clipped [0.0, 1.0]. - 'rgba(255, 0, 0, -5)', // clipped to rgba(255,0,0,0) - 'rgba(255, 0, 0, 5)', // clipped to rgba(255,0,0,1) - ]; - - var invalidColors = [ - // An invalid color, eg a value for a shorthand like 'border' which can have a color - 'none', '#00000', '#ggg', 'rgb(a,b,c)', 'rgb(a,b,c,d)', 'rgb(1,1,1.2)', 'rgba(0,0,0,1%)', 'rgba(0,0,0,)', - 'hsl(0,0,0)', 'hsl(0%, 0%, 0%)', 'hsla(0,,0,1)', 'hsl(0, 0%, 0)', 'hsl(a,b,c)', 'hsla(0,0,0,0)', 'hsla' - ]; - - TestRunner.runTestSuite([ - function testColors(next) { - for (var i = 0; i < colors.length; ++i) - dumpColorRepresentationsForColor(colors[i]); - next(); - }, - function testInvalidColors(next) { - for (var i = 0; i < invalidColors.length; ++i) - dumpErrorsForInvalidColor(invalidColors[i]); - next(); - }, - ]); - - function dumpErrorsForInvalidColor(colorString) { - var color = Common.Color.parse(colorString); - if (!color) { - TestRunner.addResult(''); - TestRunner.addResult('SUCCESS: parsed invalid color ' + colorString + ' to null'); - } else { - TestRunner.addResult(''); - TestRunner.addResult('FAIL: invalid color ' + colorString + ' did not parse to to null'); - } - } - - function dumpColorRepresentationsForColor(colorString) { - var color = Common.Color.parse(colorString); - if (!color) - return; - - TestRunner.addResult(''); - TestRunner.addResult('color: ' + colorString); - TestRunner.addResult(' simple: ' + !color.hasAlpha()); - var cf = Common.Color.Format; - for (var colorFormatKey in cf) { - var colorFormat = cf[colorFormatKey]; - // Simple colors do not have RGBA and HSLA representations. - if (!color.hasAlpha() && (colorFormat === cf.RGBA || colorFormat === cf.HSLA)) - continue; - // Advanced colors do not have HEX representations. - if (color.hasAlpha() && (colorFormat === cf.ShortHEX || colorFormat === cf.HEX)) - continue; - // If there is no ShortHEX then skip it. - if (colorFormat === cf.ShortHEX && color.detectHEXFormat() !== cf.ShortHEX) - continue; - // If there is no nickname, then skip it. - if (colorFormat === cf.Nickname && !color.nickname()) - continue; - TestRunner.addResult(' ' + colorFormat + ': ' + color.asString(colorFormat)); - } - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that the displayed string for colors correctly handles clipped CSS values and RGB percentages. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-keyframes-cssom-injected.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-keyframes-cssom-injected.html deleted file mode 100644 index 1d5cc44..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-keyframes-cssom-injected.html +++ /dev/null
@@ -1,28 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<style> -</style> -<script> -function injectAnimation() -{ - var styleSheet = document.styleSheets[0]; - styleSheet.insertRule("@keyframes injected { 0% {opacity:0} 100% {opacity:1} }", 0); -} - -function test() { - TestRunner.evaluateInPage('injectAnimation()'); - ElementsTestRunner.selectNodeAndWaitForStyles('element', TestRunner.completeTest.bind(InspectorTest)); -} -</script> -</head> - -<body onload="runTest()"> -<div id="element" style="animation: injected 1s infinite"></div> -<p> -Tests that inspecting keyframes injected via CSSOM doesn't crash. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-keyframes.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-keyframes.html deleted file mode 100644 index ce29622..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-keyframes.html +++ /dev/null
@@ -1,74 +0,0 @@ -<html> -<head> - -<link rel="stylesheet" href="../styles/resources/keyframes.css"> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<style> -@keyframes animName { - from, 20% { - margin-left: 200px; - color: red; - } - to { - margin-left: 500px; - } -} -</style> -<script> -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('element', step1); - - function step1() { - TestRunner.addResult('=== Before key modification ==='); - ElementsTestRunner.dumpSelectedElementStyles(true); - var section = UI.panels.elements._stylesWidget._sectionBlocks[1].sections[1]; - section.startEditingSelector(); - section._selectorElement.textContent = '1%'; - section._selectorElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - ElementsTestRunner.waitForSelectorCommitted(step2); - } - - function step2() { - TestRunner.addResult('=== After key modification ==='); - ElementsTestRunner.dumpSelectedElementStyles(true); - TestRunner.domModel.undo(); - ElementsTestRunner.waitForStyles('element', step3, true); - } - - function step3() { - TestRunner.addResult('=== After undo ==='); - ElementsTestRunner.dumpSelectedElementStyles(true); - - TestRunner.domModel.redo(); - ElementsTestRunner.waitForStyles('element', step4, true); - } - - function step4() { - TestRunner.addResult('=== After redo ==='); - ElementsTestRunner.dumpSelectedElementStyles(true); - var section = UI.panels.elements._stylesWidget._sectionBlocks[1].sections[1]; - section.startEditingSelector(); - section._selectorElement.textContent = '1% /*'; - section._selectorElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - ElementsTestRunner.waitForSelectorCommitted(step5); - } - - function step5() { - TestRunner.addResult('=== After invalid key modification ==='); - ElementsTestRunner.dumpSelectedElementStyles(true); - TestRunner.completeTest(); - } -} -</script> -</head> - -<body onload="runTest()"> -<div id="element"></div> -<p> -Tests that keyframes are shown in styles pane. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-live-locations-leak.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-live-locations-leak.html deleted file mode 100644 index 86b224a..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-live-locations-leak.html +++ /dev/null
@@ -1,81 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<style> -#first { - color: blue; -} - -#second { - line-height: 1em; - border: 1px solid black; -} - -#third { - margin: 1px 1px 0 0; - padding: 10px; - background-color: blue; - border: 1px solid black; -} -</style> -<script> -function test() { - var initialLiveLocationsCount; - TestRunner.runTestSuite([ - function selectInitialNode(next) { - ElementsTestRunner.selectNodeAndWaitForStylesWithComputed('first', next); - }, - - function saveInitialLiveLocationsCount(next) { - initialLiveLocationsCount = countLiveLocations(); - next(); - }, - - function rebuildStylesSidebarPaneMultipleTimes(next) { - var elementsToSelect = ['second', 'third', 'second', 'first', 'third', 'first']; - function loopThroughElements() { - if (!elementsToSelect.length) { - next(); - return; - } - ElementsTestRunner.selectNodeAndWaitForStylesWithComputed(elementsToSelect.shift(), loopThroughElements); - } - loopThroughElements(); - }, - - function compareLiveLocationsCount(next) { - var liveLocationsCount = countLiveLocations(); - if (liveLocationsCount !== initialLiveLocationsCount) - TestRunner.addResult(String.sprintf( - 'ERROR: LiveLocations count is growing! Expected: %d found: %d', initialLiveLocationsCount, - liveLocationsCount)); - else - TestRunner.addResult('SUCCESS: LiveLocations count do not grow.'); - next(); - } - ]); - - function countLiveLocations() { - var locationsCount = 0; - var modelInfos = Bindings.cssWorkspaceBinding._modelToInfo.valuesArray(); - for (var modelInfo of modelInfos) - locationsCount += modelInfo._locations.valuesArray().length; - return locationsCount; - } -} - -</script> - -</head> - -<body onload="runTest()"> - -<p> -Tests that styles sidebar pane does not leak any LiveLocations. -</p> -<div id="first">First element to select</div> -<div id="second">Second element to select</div> -<div id="third">Second element to select</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-new-API.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-new-API.html deleted file mode 100644 index 88e7f6b..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-new-API.html +++ /dev/null
@@ -1,218 +0,0 @@ -<html> -<head> - -<link rel="stylesheet" href="resources/styles-new-API.css"> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - var bodyId; - TestRunner.runTestSuite([ - function test_styles(next) { - function callback(styles) { - TestRunner.addResult(''); - TestRunner.addResult('=== Computed style property count for body ==='); - var propCount = styles.computedStyle.length; - TestRunner.addResult(propCount > 200 ? 'OK' : 'FAIL (' + propCount + ')'); - - TestRunner.addResult(''); - TestRunner.addResult('=== Matched rules for body ==='); - ElementsTestRunner.dumpRuleMatchesArray(styles.matchedCSSRules); - - TestRunner.addResult(''); - TestRunner.addResult('=== Pseudo rules for body ==='); - for (var i = 0; i < styles.pseudoElements.length; ++i) { - TestRunner.addResult('PseudoType=' + styles.pseudoElements[i].pseudoType); - ElementsTestRunner.dumpRuleMatchesArray(styles.pseudoElements[i].matches); - } - - TestRunner.addResult(''); - TestRunner.addResult('=== Inherited styles for body ==='); - for (var i = 0; i < styles.inherited.length; ++i) { - TestRunner.addResult('Level=' + (i + 1)); - ElementsTestRunner.dumpStyle(styles.inherited[i].inlineStyle); - ElementsTestRunner.dumpRuleMatchesArray(styles.inherited[i].matchedCSSRules); - } - - TestRunner.addResult(''); - TestRunner.addResult('=== Inline style for body ==='); - ElementsTestRunner.dumpStyle(styles.inlineStyle); - next(); - } - - var resultStyles = {}; - - function computedCallback(computedStyle) { - if (!computedStyle) { - TestRunner.addResult('Error'); - TestRunner.completeTest(); - return; - } - resultStyles.computedStyle = computedStyle; - } - - function matchedCallback(response) { - if (response[Protocol.Error]) { - TestRunner.addResult('error: ' + response[Protocol.Error]); - TestRunner.completeTest(); - return; - } - - resultStyles.inlineStyle = response.inlineStyle; - resultStyles.matchedCSSRules = response.matchedCSSRules; - resultStyles.pseudoElements = response.pseudoElements; - resultStyles.inherited = response.inherited; - } - - function nodeCallback(node) { - bodyId = node.id; - var promises = [ - TestRunner.CSSAgent.getComputedStyleForNode(node.id).then(computedCallback), - TestRunner.CSSAgent.invoke_getMatchedStylesForNode({nodeId: node.id}).then(matchedCallback) - ]; - Promise.all(promises).then(callback.bind(null, resultStyles)); - } - ElementsTestRunner.selectNodeWithId('mainBody', nodeCallback); - }, - - async function test_forcedState(next) { - TestRunner.CSSAgent.forcePseudoState(bodyId, ['hover']); - var response = await TestRunner.CSSAgent.invoke_getMatchedStylesForNode({nodeId: bodyId}); - - TestRunner.addResult('=== BODY with forced :hover ==='); - ElementsTestRunner.dumpRuleMatchesArray(response.matchedCSSRules); - TestRunner.CSSAgent.forcePseudoState(bodyId, ['hover']).then(next); - }, - - function test_textNodeComputedStyles(next) { - ElementsTestRunner.nodeWithId('toggle', nodeCallback); - - async function nodeCallback(node) { - var textNode = node.children()[0]; - if (textNode.nodeType() !== Node.TEXT_NODE) { - TestRunner.addResult('Failed to retrieve TextNode.'); - TestRunner.completeTest(); - return; - } - var computedStyle = await TestRunner.CSSAgent.getComputedStyleForNode(textNode.id); - if (!computedStyle) { - TestRunner.addResult('Error'); - return; - } - TestRunner.addResult(''); - TestRunner.addResult('=== Computed style property count for TextNode ==='); - var propCount = computedStyle.length; - TestRunner.addResult(propCount > 200 ? 'OK' : 'FAIL (' + propCount + ')'); - next(); - } - }, - - function test_tableStyles(next) { - async function nodeCallback(node) { - var response = await TestRunner.CSSAgent.invoke_getInlineStylesForNode({nodeId: node.id}); - if (response[Protocol.Error]) { - TestRunner.addResult('error: ' + response[Protocol.Error]); - next(); - return; - } - TestRunner.addResult(''); - TestRunner.addResult('=== Attributes style for table ==='); - ElementsTestRunner.dumpStyle(response.attributesStyle); - - var result = await TestRunner.CSSAgent.getStyleSheetText(response.inlineStyle.styleSheetId); - - TestRunner.addResult(''); - TestRunner.addResult('=== Stylesheet-for-inline-style text ==='); - TestRunner.addResult(result || ''); - - await TestRunner.CSSAgent.setStyleSheetText(response.inlineStyle.styleSheetId, ''); - - TestRunner.addResult(''); - TestRunner.addResult('=== Stylesheet-for-inline-style modification result ==='); - TestRunner.addResult(null); - next(); - } - ElementsTestRunner.nodeWithId('thetable', nodeCallback); - }, - - async function test_addRule(next) { - var frameId = TestRunner.resourceTreeModel.mainFrame.id; - var styleSheetId = await TestRunner.CSSAgent.createStyleSheet(frameId); - if (!styleSheetId) { - TestRunner.addResult('Error in CSS.createStyleSheet'); - next(); - return; - } - - var range = {startLine: 0, startColumn: 0, endLine: 0, endColumn: 0}; - - var rule = await TestRunner.CSSAgent.addRule(styleSheetId, 'body {}', range); - if (!rule) { - TestRunner.addResult('Error in CSS.addRule'); - next(); - return; - } - - var style = await TestRunner.CSSAgent.setStyleTexts([{ - styleSheetId: rule.style.styleSheetId, - range: { - startLine: rule.style.range.startLine, - startColumn: rule.style.range.startColumn, - endLine: rule.style.range.startLine, - endColumn: rule.style.range.startColumn - }, - text: 'font-family: serif;' - }]); - if (!style) { - TestRunner.addResult('Error in CSS.setStyleTexts'); - next(); - return; - } - - var response = await TestRunner.CSSAgent.invoke_getMatchedStylesForNode({nodeId: bodyId}); - if (response[Protocol.Error]) { - TestRunner.addResult('error: ' + response[Protocol.Error]); - next(); - return; - } - - TestRunner.addResult(''); - TestRunner.addResult('=== Matched rules after rule added ==='); - ElementsTestRunner.dumpRuleMatchesArray(response.matchedCSSRules); - next(); - }, - ]); -} - -</script> - -<style> - -/* An inline stylesheet */ -body.mainpage { - text-decoration: none; /* at least one valid property is necessary for WebCore to match a rule */ - ;badproperty: 1badvalue1; -} - -body.mainpage { - prop1: val1; - prop2: val2; -} - -body:hover { - color: #CDE; -} -</style> -</head> - -<body id="mainBody" class="main1 main2 mainpage" onload="runTest()" style="font-weight: normal; width: 85%; background-image: url(bar.png)"> -<p> -Tests that InspectorCSSAgent API methods work as expected. -</p> -<table width="50%" id="thetable"> -</table> -<h1 id="toggle">H1</h1> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-overriden-properties.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-overriden-properties.html deleted file mode 100644 index 4075fe2d..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-overriden-properties.html +++ /dev/null
@@ -1,41 +0,0 @@ -<html> -<head> -<style type="text/css"> -#main { - height: 100px; - background: #000; - background: #bada55; -} -#main { - -x: -} -#main { - -x: -} -</style> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('main', step1); - - function step1() { - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that overriding shorthands within rule are visible. -</p> - -<div id="main"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-properties-overload.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-properties-overload.html deleted file mode 100644 index 9caca70..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-properties-overload.html +++ /dev/null
@@ -1,46 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<style> -div { - margin: 1px; - border: 1px solid black; -} - -#inspect { - margin-top: 1px; - margin-left: 1px; - margin-right: 1px; - margin-bottom: 1px; - font: 10px Arial; -} - -.container { - font-size: 10px; - border: 0; -} - -</style> - -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspect', step2); - - function step2() { - ElementsTestRunner.dumpSelectedElementStyles(true, false, false); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p>Verifies that inspector figures out overloaded properties correctly.</p> -<div class="container"> - <div id="inspect">Text.</div> -</div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-rerequest-sourcemap-on-watchdog.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-rerequest-sourcemap-on-watchdog.html deleted file mode 100644 index 43bd663f..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-rerequest-sourcemap-on-watchdog.html +++ /dev/null
@@ -1,42 +0,0 @@ -<html> -<head> -<script type="text/javascript" src="../../../http/tests/inspector/inspector-test.js"></script> -<script type="text/javascript" src="../../../http/tests/inspector/debugger-test.js"></script> -<link rel="stylesheet"> -<script> - -function addStyleSheet() -{ - var link = document.querySelector("link"); - link.setAttribute("href", "./resources/styles-rerequest-sourcemap-on-watchdog.css"); -} - -function test() { - TestRunner.cssModel.sourceMapManager().addEventListener( - SDK.SourceMapManager.Events.SourceMapAttached, onInitialSourceMap); - - TestRunner.evaluateInPagePromise('addStyleSheet()'); - - function onInitialSourceMap() { - TestRunner.cssModel.removeEventListener(SDK.SourceMapManager.Events.SourceMapAttached, onInitialSourceMap); - SourcesTestRunner.waitForScriptSource('styles-rerequest-sourcemap-on-watchdog.css', onCSSFile); - } - - function onCSSFile(uiSourceCode) { - TestRunner.addSniffer(SDK.SourceMapManager.prototype, '_sourceMapLoadedForTest', onSourceMapRerequested); - uiSourceCode.addRevision( - 'div { color: blue; } /*# sourceMappingURL=styles-rerequest-sourcemap-on-watchdog.css.map */'); - } - - function onSourceMapRerequested() { - TestRunner.addResult('SourceMap successfully re-requested.'); - TestRunner.completeTest(); - } -} -</script> -</head> -<body onLoad="runTest();"> -<p>Verifies that the sourceMap is in fact re-requested from network as SASS watchdog updates the CSS file.</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-should-not-force-sync-style-recalc.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-should-not-force-sync-style-recalc.html deleted file mode 100644 index e657e1b6..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-should-not-force-sync-style-recalc.html +++ /dev/null
@@ -1,50 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/timeline-test.js"></script> - -<style id="testSheet"> -.test-0 { font-family: 'Arial'; } -.test-1 { font-family: 'Arial'; } -.test-2 { font-family: 'Arial'; } -.test-3 { font-family: 'Arial'; } -.test-4 { font-family: 'Arial'; } -.test-5 { font-family: 'Arial'; } -.test-6 { font-family: 'Arial'; } -.test-7 { font-family: 'Arial'; } -.test-8 { font-family: 'Arial'; } -.test-9 { font-family: 'Arial'; } -</style> - -<script> - -function performActions() -{ - var styleElement = document.querySelector("#testSheet"); - for (var i = 0; i < 10; ++i) - styleElement.sheet.deleteRule(0); -} - -function test() { - UI.context.setFlavor(Timeline.TimelinePanel, UI.panels.timeline); - PerformanceTestRunner.evaluateWithTimeline('performActions()', callback); - - function callback() { - PerformanceTestRunner.timelineModel().mainThreadEvents().forEach(event => { - if (event.name === TimelineModel.TimelineModel.RecordType.UpdateLayoutTree) - TestRunner.addResult(event.name); - }); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that inspector doesn't force sync layout on operations with CSSOM.<a href="https://code.google.com/p/chromium/issues/detail?id=315885">Bug 315885</a>. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-source-lines-inline.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-source-lines-inline.html deleted file mode 100644 index f135882..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-source-lines-inline.html +++ /dev/null
@@ -1,35 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> - -<style> -.foo { - color: blue; -} -</style> - -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('foo', step2); - - function step2() { - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that elements panel shows proper inline style locations in the sidebar panel. -</p> - -<div id="foo" class="foo" style="display:none">Foo</div> -<iframe src="../styles/resources/styles-source-lines-inline-iframe.html"> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-source-lines-recovery.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-source-lines-recovery.html deleted file mode 100644 index f117e52..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-source-lines-recovery.html +++ /dev/null
@@ -1,54 +0,0 @@ -<html> -<head> -<style> -@media all { - ::-moz-focus-inner {} -} -#main { - color: red; -} -</style> - -<style> -@-webkit-region x { - x ? {} -} -#main { - color: blue; -} -</style> - -<style> -@-webkit-region x { - ? {} -} -#main { - color: white; -} -</style> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('main', step1); - - function step1() { - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that invalid rule inside @-rule doesn't break source code matching (http://crbug.com/317499). -</p> - -<div id="main"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-source-lines.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-source-lines.html deleted file mode 100644 index 8fecd6e..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-source-lines.html +++ /dev/null
@@ -1,80 +0,0 @@ -<html> -<head> -<!-- - Line numbers are reported wrt the opened style tag baseline. - Allow some space here to align local line numbers to be style + 10. - Selector sourceLine is the line of the corresponding { following the - selector text. ---> - -<style type="text/css" media="screen"> -#main, .at_line_11::/* -Multiline comment -before pseudo element - */before -{ - color:red; - content: "Before" -} -/* - -Multiline comment followed with whitespace - - -*/ - -#main, .at_line_26 - - -{ - /* Comment in definition*/ - /* Comment in definition 2*/ - - /* Comment in definition 3 - */font-family:/* Comment in - value */courier; - color blue; -}/*Multiline comment - -followed by selector -*/#main, -.at_line_41 - -{ - font-size: - 10px; -} - - -#main, .at_line_49 -{ - border: 1px solid - red; -} -</style> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('main', step1); - - function step1() { - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that proper source lines are reported for the parsed styles. -</p> - -<div id="main"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-source-offsets.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-source-offsets.html deleted file mode 100644 index 4ff9569..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-source-offsets.html +++ /dev/null
@@ -1,76 +0,0 @@ -<html> -<head> - -<link rel="stylesheet" href="../styles/resources/styles-source-offsets.css"> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - function dumpStyleData(ruleOrStyle) { - var isRule = !!(ruleOrStyle.style); - var style; - var header = ''; - if (isRule) { - if (ruleOrStyle.origin !== 'regular') - return; - style = ruleOrStyle.style; - var selectorRanges = []; - var selectors = ruleOrStyle.selectorList.selectors; - var firstRange = selectors[0].range; - var lastRange = selectors[selectors.length - 1].range; - var range = { - startLine: firstRange.startLine, - startColumn: firstRange.startColumn, - endLine: lastRange.endLine, - endColumn: lastRange.endColumn - }; - header = ruleOrStyle.selectorList.text + ': ' + (range ? ElementsTestRunner.rangeText(range) : ''); - } else { - style = ruleOrStyle; - header = 'element.style:'; - } - TestRunner.addResult(header + ' ' + ElementsTestRunner.rangeText(style.range)); - var allProperties = style.cssProperties; - for (var i = 0; i < allProperties.length; ++i) { - var property = allProperties[i]; - if (!property.range) - continue; - TestRunner.addResult( - '[\'' + property.name + '\':\'' + property.value + '\'' + (property.important ? ' !important' : '') + - (('parsedOk' in property) ? ' non-parsed' : '') + '] @' + ElementsTestRunner.rangeText(property.range)); - } - } - - ElementsTestRunner.selectNodeWithId('mainBody', step1); - - async function step1(node) { - var response = await TestRunner.CSSAgent.invoke_getMatchedStylesForNode({nodeId: node.id}); - - for (var rule of response.matchedCSSRules) - dumpStyleData(rule.rule); - dumpStyleData(response.inlineStyle); - TestRunner.completeTest(); - } -} - -</script> - -<style> - -body.mainpage { - text-decoration: none; /* at least one valid property is necessary for WebCore to match a rule */ - badproperty: 1badvalue1; -} - -</style> -</head> - -<body id="mainBody" class="main1 main2 mainpage" onload="runTest()" style="font-weight: normal; width: 80%"> -<p> -Tests that proper data and start/end offset positions are reported for CSS style declarations and properties. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-update-from-js.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-update-from-js.html deleted file mode 100644 index e95ad523..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-update-from-js.html +++ /dev/null
@@ -1,123 +0,0 @@ -<html> -<head> -<style> -.red div:first-child { - background-color: red; -} - -div[foo="bar"] + div { - background-color: blue; -} - -</style> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> -function modifyStyleAttribute() -{ - document.getElementById("container").setAttribute("style", "color: #daC0DE; border: 1px solid black;"); -} - -function modifyCSSText() -{ - document.getElementById("container").style.cssText = "color: #C0FFEE"; -} - -function modifyParsedAttributes() -{ - var style = document.getElementById("container").style; - style.border = "2px dashed green"; - style.borderWidth = "3px"; -} - -function modifyContainerClass() -{ - document.getElementById("container").className = "red"; -} - -function modifyChildAttr() -{ - document.getElementById("child").setAttribute("foo", "bar"); -} - -function test() { - TestRunner.runTestSuite([ - function testInit(next) { - ElementsTestRunner.selectNodeAndWaitForStyles('container', next); - }, - - function testSetStyleAttribute(next) { - waitAndDumpAttributeAndStyles(next); - TestRunner.evaluateInPage('modifyStyleAttribute()'); - }, - - function testSetStyleCSSText(next) { - waitAndDumpAttributeAndStyles(next); - TestRunner.evaluateInPage('modifyCSSText()'); - }, - - function testSetViaParsedAttributes(next) { - waitAndDumpAttributeAndStyles(next); - TestRunner.evaluateInPage('modifyParsedAttributes()'); - }, - - function testSetViaAncestorClass(next) { - ElementsTestRunner.selectNodeAndWaitForStyles('child', callback); - - function callback() { - waitAndDumpAttributeAndStyles(next, 'child'); - TestRunner.evaluateInPage('modifyContainerClass()'); - } - }, - - function testSetViaSiblingAttr(next) { - ElementsTestRunner.selectNodeAndWaitForStyles('childSibling', callback); - - function callback() { - waitAndDumpAttributeAndStyles(next, 'childSibling'); - TestRunner.evaluateInPage('modifyChildAttr()'); - } - } - ]); - - function waitAndDumpAttributeAndStyles(next, id) { - id = id || 'container'; - function callback() { - dumpAttributeAndStyles(id); - next(); - } - ElementsTestRunner.waitForStyles(id, callback); - } - - function dumpAttributeAndStyles(id) { - var treeElement = findNodeTreeElement(id); - if (!treeElement) { - TestRunner.addResult('\'' + id + '\' tree element not found'); - return; - } - TestRunner.addResult(treeElement.listItemElement.textContent.replace(/\u200b/g, '')); - ElementsTestRunner.dumpSelectedElementStyles(true); - } - - function findNodeTreeElement(id) { - ElementsTestRunner.firstElementsTreeOutline().runPendingUpdates(); - var expandedNode = ElementsTestRunner.expandedNodeWithId(id); - if (!expandedNode) { - TestRunner.addResult('\'' + id + '\' node not found'); - TestRunner.completeTest(); - } - return ElementsTestRunner.firstElementsTreeOutline().findTreeElement(expandedNode); - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that changes to an inline style and ancestor/sibling className from JavaScript are reflected in the Styles pane and Elements tree. -</p> - -<div id="container" style="font-weight:bold"><div id="child"></div><div id="childSibling"></div></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-update-links-1.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-update-links-1.html deleted file mode 100644 index 382a37f..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-update-links-1.html +++ /dev/null
@@ -1,63 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="./styles-update-links.js"></script> -<style> -#pseudo::after { - pseudo-property: "12"; - color: red; -} - -#pseudo::after { - border: 1px solid black; -} - -#pseudo::before { - color: blue; -} -</style> -<script> - -function test() { - TestRunner.runTestSuite([ - function selectInitialNode(next) { - ElementsTestRunner.selectNodeAndWaitForStyles('container', next); - }, - - function testInsertProperty(next) { - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - var treeItem = ElementsTestRunner.getMatchedStylePropertyTreeItem('color'); - var treeElement = treeItem.section().addNewBlankProperty(1); - ElementsTestRunner.waitForStyleApplied(onPropertyInserted); - treeElement.applyStyleText('PROPERTY: INSERTED;', true); - - function onPropertyInserted() { - TestRunner.addResult('\n\n#### AFTER PROPERTY INSERTION ####\n\n'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - var rules = ElementsTestRunner.getMatchedRules(); - ElementsTestRunner.validateRuleRanges('container', rules, next); - } - } - ]); -} -</script> -<link rel="stylesheet" href="../styles/resources/styles-update-links-2.css"></link> -<link rel="stylesheet" href="../styles/resources/styles-update-links.css"></link> -</head> - -<body onload="runTest()"> -<p> -Tests that links are updated properly when inserting a new property. -</p> - -<div id="container" class="left-intact should-change"> -Red text here. -</div> - -<div id="other"></div> - -<section id="pseudo"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-update-links-2.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-update-links-2.html deleted file mode 100644 index 0740fab..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-update-links-2.html +++ /dev/null
@@ -1,63 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="./styles-update-links.js"></script> -<style> -#pseudo::after { - pseudo-property: "12"; - color: red; -} - -#pseudo::after { - border: 1px solid black; -} - -#pseudo::before { - color: blue; -} -</style> -<script> - -function test() { - TestRunner.runTestSuite([ - function selectInitialNode(next) { - ElementsTestRunner.selectNodeAndWaitForStyles('container', next); - }, - - function testEditSelector(next) { - var section = UI.panels.elements._stylesWidget._sectionBlocks[0].sections[3]; - section.startEditingSelector(); - section._selectorElement.textContent = '.should-change, .INSERTED-OTHER-SELECTOR'; - ElementsTestRunner.waitForSelectorCommitted(onSelectorEdited); - section._selectorElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - - function onSelectorEdited() { - TestRunner.addResult('\n\n#### AFTER SELECTOR EDIT ####\n\n'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - var rules = ElementsTestRunner.getMatchedRules(); - ElementsTestRunner.validateRuleRanges('container', rules, next); - } - } - ]); -} -</script> -<link rel="stylesheet" href="../styles/resources/styles-update-links-2.css"></link> -<link rel="stylesheet" href="../styles/resources/styles-update-links.css"></link> -</head> - -<body onload="runTest()"> -<p> -Tests that links are updated properly when editing selector. -</p> - -<div id="container" class="left-intact should-change"> -Red text here. -</div> - -<div id="other"></div> - -<section id="pseudo"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-update-links-3.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-update-links-3.html deleted file mode 100644 index 6efe295..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-update-links-3.html +++ /dev/null
@@ -1,61 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="./styles-update-links.js"></script> -<style> -#pseudo::after { - pseudo-property: "12"; - color: red; -} - -#pseudo::after { - border: 1px solid black; -} - -#pseudo::before { - color: blue; -} -</style> -<script> - -function test() { - TestRunner.runTestSuite([ - function selectInitialNode(next) { - ElementsTestRunner.selectNodeAndWaitForStyles('container', next); - }, - - function testDisableProperty(next) { - var treeItem = ElementsTestRunner.getMatchedStylePropertyTreeItem('border'); - ElementsTestRunner.waitForStyleApplied(onPropertyDisabled); - treeItem._toggleEnabled({target: {checked: false}, consume: function() {}}); - - function onPropertyDisabled() { - TestRunner.addResult('\n\n#### AFTER PROPERTY DISABLED ####\n\n'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - var rules = ElementsTestRunner.getMatchedRules(); - ElementsTestRunner.validateRuleRanges('container', rules, next); - } - } - ]); -} -</script> -<link rel="stylesheet" href="../styles/resources/styles-update-links-2.css"></link> -<link rel="stylesheet" href="../styles/resources/styles-update-links.css"></link> -</head> - -<body onload="runTest()"> -<p> -Tests that links are updated properly after disabling property. -</p> - -<div id="container" class="left-intact should-change"> -Red text here. -</div> - -<div id="other"></div> - -<section id="pseudo"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-update-links-4.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-update-links-4.html deleted file mode 100644 index eecec45..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-update-links-4.html +++ /dev/null
@@ -1,62 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="./styles-update-links.js"></script> -<style> -#pseudo::after { - pseudo-property: "12"; - color: red; -} - -#pseudo::after { - border: 1px solid black; -} - -#pseudo::before { - color: blue; -} -</style> -<script> - -function test() { - TestRunner.runTestSuite([ - function selectNodeWithPseudoElements(next) { - ElementsTestRunner.selectNodeAndWaitForStyles('pseudo', next); - }, - - function testPseudoSectionPropertyEdit(next) { - var treeItem = ElementsTestRunner.getMatchedStylePropertyTreeItem('pseudo-property'); - var treeElement = treeItem.section().addNewBlankProperty(1); - ElementsTestRunner.waitForStyleApplied(onPropertyInserted); - treeElement.applyStyleText('PROPERTY: INSERTED;', true); - - function onPropertyInserted() { - TestRunner.addResult('\n\n#### AFTER PROPERTY INSERTED ####\n\n'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - var rules = ElementsTestRunner.getMatchedRules(); - ElementsTestRunner.validateRuleRanges('pseudo', rules, next); - } - } - ]); -} -</script> -<link rel="stylesheet" href="../styles/resources/styles-update-links-2.css"></link> -<link rel="stylesheet" href="../styles/resources/styles-update-links.css"></link> -</head> - -<body onload="runTest()"> -<p> -Tests that links are updated property when editing pseudo element property. -</p> - -<div id="container" class="left-intact should-change"> -Red text here. -</div> - -<div id="other"></div> - -<section id="pseudo"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-url-linkify.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-url-linkify.html deleted file mode 100644 index 8864805..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-url-linkify.html +++ /dev/null
@@ -1,96 +0,0 @@ -<html> -<head> -<link rel="stylesheet" href="../styles/resources/styles-url-linkify.css"> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - function completeURL(baseURL, href) { - TestRunner.addResult(Common.ParsedURL.completeURL(baseURL, href)); - } - - TestRunner.addResult('URLs completed:'); - completeURL('http://example.com', '/'); - completeURL('http://example.com', 'moo'); - completeURL('http://example.com/', 'https://secure.com/moo'); - completeURL('https://example.com/foo', '//secure.com/moo'); - completeURL('http://example.com/foo/zoo', '/moo'); - completeURL('http://example.com/foo/zoo/', 'moo'); - completeURL('http://example.com/foo/zoo', 'boo/moo'); - completeURL('http://example.com/foo', 'moo'); - completeURL('http://example.com/foo', '?a=b'); - completeURL('http://example.com/foo', '?a=/b'); - completeURL('http://example.com/?c=/d#anchor', '?a=/b'); - completeURL('http://example.com/foo?c=d', '?a=b'); - completeURL('http://example.com/foo?c=d#anchor', '?a=/b'); - completeURL('http://example.com/foo?c=/d/e', '?a=b'); - completeURL('http://example.com/foo?c=/d/e', 'cat.jpeg'); - completeURL('http://example.com/foo#anchor', 'cat.jpeg'); - completeURL('http://example.com/', '/foo?bar=http://otherexample.com'); - - const dataURL = - 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAABCAgMAAACeOuh7AAAABGdBTUEAAK/INwWK6QAAAAlQTFRF////AAAA////fu+PTwAAAAF0Uk5TAEDm2GYAAACHSURBVDjLxdLbDYAgDAVQGELn0R3oEHYf2KGdUqtE46OFRCP3oyTng1xCnWsaD5JRRtCkQ2YmkBkHRXqWJBn0j0TICbrsWVoWhRShCdcGyZCtHxMaUnVPRZ9KSbmBJdsX2vJVnwqRD0Rb4rpzgIbE/AI5NTnWAMvy5l0dXrfuLh5OCe5BmmYGXhTUxlQ5xJ8AAAAASUVORK5CYII='; - const blobURL = 'blob:http://example.com/f91b7b00-00-0000-0000-3b7c87055d7a'; - completeURL('https://example.com/foo', dataURL); - completeURL('http://example.com/foo', 'javascript:alert(\'foo\');'); - completeURL('http://example.com/foo', blobURL); - completeURL('', blobURL); - - function dumpHref(dumpLinkClass) { - var hrefNode; - var valueChildNodes = - ElementsTestRunner.firstMatchedStyleSection().propertiesTreeOutline.firstChild().valueElement.childNodes; - for (var i = 0; i < valueChildNodes.length; ++i) { - if (valueChildNodes[i].href) { - hrefNode = valueChildNodes[i]; - break; - } - } - if (!hrefNode) { - TestRunner.addResult('href property not found'); - return; - } - - var styleClass = ''; - if (dumpLinkClass) { - if (hrefNode.classList.contains('devtools-link')) - styleClass += 'devtools-link '; - } - - var href = hrefNode.href; - var segments = href.split('/'); - var output = []; - for (var i = segments.length - 1, minSegment = i - 3; i >= 0 && i >= minSegment; --i) - output.unshift(segments[i]); - - TestRunner.addResult(styleClass + output.join('/')); - } - - ElementsTestRunner.selectNodeAndWaitForStyles('local', step1); - - function step1() { - TestRunner.addResult('Link for a URI from CSS document:'); - dumpHref(true); - ElementsTestRunner.selectNodeAndWaitForStyles('iframed', step2); - } - - function step2() { - TestRunner.addResult('Link for a URI from iframe inline stylesheet:'); - dumpHref(); - TestRunner.completeTest(); - } -} - -</script> -</head> -<body onload="runAfterIframeIsLoaded()"> -<p> -Tests that URLs are linked to and completed correctly. Bugs <a href="http://bugs.webkit.org/show_bug.cgi?id=51663">51663</a>, <a href="http://bugs.webkit.org/show_bug.cgi?id=53171">53171</a>, <a href="http://bugs.webkit.org/show_bug.cgi?id=62643">62643</a>, <a href="http://bugs.webkit.org/show_bug.cgi?id=72373">72373</a>, <a href="http://bugs.webkit.org/show_bug.cgi?id=79905">79905</a> -</p> -<div id="local"></div> -<iframe src="../styles/resources/styles-url-linkify-iframe.html"></iframe> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-with-spaces-in-sourceURL.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-with-spaces-in-sourceURL.html deleted file mode 100644 index cceee73..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/styles-with-spaces-in-sourceURL.html +++ /dev/null
@@ -1,29 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<link rel="stylesheet" href="../styles/resources/style-with-spaces-in-sourceURL.css"> - -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', onNodeSelected); - - function onNodeSelected() { - ElementsTestRunner.dumpSelectedElementStyles(true); - TestRunner.completeTest(); - } -} -</script> - -</head> - -<body onload="runTest()"> -<p> -Verifies that links for URLs with spaces displayed properly for matched styles. -</p> - -<div id="inspected"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/stylesheet-source-url-comment.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/stylesheet-source-url-comment.html deleted file mode 100644 index 4a0c6e3..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/stylesheet-source-url-comment.html +++ /dev/null
@@ -1,121 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<style> -body { - color: green; -} - -/*# sourceURL=inlineStyleSheet.css */ -</style> -<script> -function addInlineStyleSheet() -{ - var styleElement = document.createElement("style"); - styleElement.textContent = "body { color: black; }\n/*# sourceURL=css/addedInlineStylesheet.css */"; - document.head.appendChild(styleElement); -} - -function addInlineStyleSheetNonRelative() -{ - var styleElement = document.createElement("style"); - styleElement.textContent = "body { color: red; }\n/*# sourceURL=css/nonRelativeInlineStylesheet.css */"; - document.head.appendChild(styleElement); -} - -function addInlineStyleSheetMultiple() -{ - var styleElement = document.createElement("style"); - styleElement.textContent = "\n/*# sourceURL=1.css */\nbody { color: red; }\n/*# sourceURL=2.css*/\n/*# sourceURL=css/addedInlineStylesheetMultiple.css */"; - document.head.appendChild(styleElement); -} - -function addInlineStyleSheetDeprecated() -{ - var styleElement = document.createElement("style"); - styleElement.textContent = "body { color: black; }\n/*@ sourceURL=css/addedInlineStylesheetDeprecated.css */"; - document.head.appendChild(styleElement); -} - -function test() { - function forEachHeaderMatchingURL(url, handler) { - var headers = TestRunner.cssModel.styleSheetHeaders(); - for (var i = 0; i < headers.length; ++i) { - if (headers[i].sourceURL.indexOf(url) !== -1) - handler(headers[i]); - } - } - - function checkHeaderHasSourceURL(header) { - TestRunner.assertTrue(header.hasSourceURL); - } - - TestRunner.runTestSuite([ - function testSourceURLCommentInInlineScript(next) { - SourcesTestRunner.showScriptSource('stylesheet-source-url-comment.html', didShowSource); - - function didShowSource(sourceFrame) { - function checkHeaderDoesNotHaveSourceURL(header) { - TestRunner.assertTrue(!header.hasSourceURL, 'hasSourceURL flag is set for inline stylesheet'); - } - - forEachHeaderMatchingURL('source-url-comment.html', checkHeaderDoesNotHaveSourceURL); - next(); - } - }, - - function testSourceURLComment(next) { - SourcesTestRunner.showScriptSource('css/addedInlineStylesheet.css', didShowSource); - TestRunner.evaluateInPage('setTimeout(addInlineStyleSheet, 0)'); - - function didShowSource(sourceFrame) { - TestRunner.addResult(sourceFrame.textEditor.text()); - forEachHeaderMatchingURL('addedInlineStylesheet', checkHeaderHasSourceURL); - next(); - } - }, - - function testDeprecatedSourceURLComment(next) { - SourcesTestRunner.showScriptSource('css/addedInlineStylesheetDeprecated.css', didShowSource); - TestRunner.evaluateInPage('setTimeout(addInlineStyleSheetDeprecated, 0)'); - - function didShowSource(sourceFrame) { - TestRunner.addResult(sourceFrame.textEditor.text()); - forEachHeaderMatchingURL('addedInlineStylesheetDeprecated', checkHeaderHasSourceURL); - next(); - } - }, - - function testNonRelativeURL(next) { - SourcesTestRunner.showScriptSource('css/nonRelativeInlineStylesheet.css', didShowSource); - TestRunner.evaluateInPage('setTimeout(addInlineStyleSheetNonRelative, 0)'); - - function didShowSource(sourceFrame) { - TestRunner.addResult(sourceFrame.textEditor.text()); - forEachHeaderMatchingURL('nonRelativeInlineStyleSheet.css', checkHeaderHasSourceURL); - next(); - } - }, - - function testMultiple(next) { - SourcesTestRunner.showScriptSource('css/addedInlineStylesheetMultiple.css', didShowSource); - TestRunner.evaluateInPage('setTimeout(addInlineStyleSheetMultiple, 0)'); - - function didShowSource(sourceFrame) { - TestRunner.addResult(sourceFrame.textEditor.text()); - forEachHeaderMatchingURL('addInlineStyleSheetMultiple.css', checkHeaderHasSourceURL); - next(); - } - } - ]); -}; - -</script> - -</head> - -<body onload="runTest()"> -<p>Tests that stylesheets with sourceURL comment are shown in the Sources panel.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/supported-css-properties.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/supported-css-properties.html deleted file mode 100644 index 78f28e6..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/supported-css-properties.html +++ /dev/null
@@ -1,16 +0,0 @@ -<html> -<head> -<script type="text/javascript" src="../../../http/tests/inspector/inspector-test.js"></script> -<script> -function test() { - var marginLonghands = SDK.cssMetadata().longhands('margin'); - marginLonghands.sort(); - TestRunner.addResult('Margin longhands: ' + marginLonghands.join(', ')); - TestRunner.completeTest(); -} -</script> -</head> -<body onLoad="runTest();"> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/svg-style.xhtml b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/svg-style.xhtml deleted file mode 100644 index 61222fd4..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/svg-style.xhtml +++ /dev/null
@@ -1,36 +0,0 @@ -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() -{ - ElementsTestRunner.selectNodeAndWaitForStyles("main", step1); - - function step1() - { - TestRunner.addResult("Main style:"); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - TestRunner.completeTest(); - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that svg:style does not crash when the related element is inspected. -</p> - -<svg:svg xmlns:svg="http://www.w3.org/2000/svg" version="1.1"> - <svg:defs> - <svg:style type="text/css"> - rect {fill: red} - </svg:style> - </svg:defs> - <svg:rect id="main" width="100" height="100"/> -</svg:svg> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/undo-add-new-rule.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/undo-add-new-rule.html deleted file mode 100644 index 6975e75..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/undo-add-new-rule.html +++ /dev/null
@@ -1,83 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); - - var treeElement; - - function step1() { - addNewRuleAndSelectNode('other', step2); - } - - function step2() { - addNewRuleAndSelectNode('inspected', step3); - } - - function step3() { - TestRunner.addResult('After adding new rule:'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - printStyleSheetAndCall(step4); - } - - function step4() { - TestRunner.domModel.undo(); - ElementsTestRunner.selectNodeAndWaitForStyles('other', step5); - } - - function step5() { - TestRunner.addResult('After undo:'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - printStyleSheetAndCall(step6); - } - - function step6() { - TestRunner.domModel.redo(); - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step7); - } - - function step7() { - TestRunner.addResult('After redo:'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - printStyleSheetAndCall(step8); - } - - function step8() { - TestRunner.completeTest(); - } - - function addNewRuleAndSelectNode(nodeId, next) { - function selectNode() { - ElementsTestRunner.selectNodeAndWaitForStyles(nodeId, next); - } - - ElementsTestRunner.addNewRule('div.foo', selectNode); - } - - async function printStyleSheetAndCall(next) { - var section = ElementsTestRunner.firstMatchedStyleSection(); - var id = section.style().styleSheetId; - var styleSheetText = await TestRunner.CSSAgent.getStyleSheetText(id); - TestRunner.addResult('===== Style sheet text: ====='); - TestRunner.addResult(styleSheetText); - TestRunner.addResult('============================='); - next(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that adding a new rule can be undone. -</p> - -<div class="foo" id="inspected" style="font-size: 12px">Text</div> -<div class="foo" id="other" style="color:red"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/undo-add-property.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/undo-add-property.html deleted file mode 100644 index c2586e6..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/undo-add-property.html +++ /dev/null
@@ -1,76 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> - -<style> -.container { - font-weight: bold -} -</style> - -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('container', testAppendProperty); - - function testAppendProperty() { - TestRunner.addResult('=== Last property ==='); - testAddProperty('margin-left: 2px', undefined, testInsertBegin); - } - - function testInsertBegin() { - TestRunner.addResult('=== First property ==='); - testAddProperty('margin-top: 0px', 0, testInsertMiddle); - } - - function testInsertMiddle() { - TestRunner.addResult('=== Middle property ==='); - testAddProperty('margin-right: 1px', 1, TestRunner.completeTest.bind(InspectorTest)); - } - - function testAddProperty(propertyText, index, callback) { - TestRunner.addResult('(Initial value)'); - ElementsTestRunner.dumpSelectedElementStyles(true); - - var treeItem = ElementsTestRunner.getMatchedStylePropertyTreeItem('font-weight'); - var treeElement = treeItem.section().addNewBlankProperty(index); - treeElement.applyStyleText(propertyText, true); - ElementsTestRunner.waitForStyles('container', step1); - - function step1() { - TestRunner.addResult('(After adding property)'); - ElementsTestRunner.dumpSelectedElementStyles(true); - - TestRunner.domModel.undo(); - ElementsTestRunner.selectNodeAndWaitForStyles('other', step2); - } - - function step2() { - TestRunner.addResult('(After undo)'); - ElementsTestRunner.dumpSelectedElementStyles(true); - - TestRunner.domModel.redo(); - ElementsTestRunner.selectNodeAndWaitForStyles('container', step3); - } - - function step3() { - TestRunner.addResult('(After redo)'); - ElementsTestRunner.dumpSelectedElementStyles(true); - callback(); - } - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that adding a property is undone properly. -</p> - -<div id="container" class="container"></div> -<div id="other" class="container"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/undo-add-rule-crash.html b/third_party/WebKit/LayoutTests/inspector/elements/styles-4/undo-add-rule-crash.html deleted file mode 100644 index 138d82f9d..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles-4/undo-add-rule-crash.html +++ /dev/null
@@ -1,44 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); - - function step1() { - addNewRuleAndSelectNode('other', step2); - } - - function step2() { - TestRunner.domModel.undo(); - ElementsTestRunner.waitForStyles('other', step3); - } - - function step3() { - TestRunner.completeTest(); - } - - function addNewRuleAndSelectNode(nodeId, next) { - ElementsTestRunner.addNewRule(null, ruleAdded); - - function ruleAdded() { - ElementsTestRunner.selectNodeAndWaitForStyles(nodeId, next); - } - } -} - -</script> -</head> - -<body onload="runTest()"> -Tests that the inspected page does not crash after undoing a new rule addition. <a href="https://bugs.webkit.org/show_bug.cgi?id=104806">Bug 104806</a> - -<p>The test has passed (no crash).</p> -<div id="inspected"><div id="other" /></div> -<style> -@keyframes cfpulse1 { 0% { opacity: 0.1; } } -.c1 { animation-name: cfpulse1; } -</style> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/cancel-upon-invalid-property.html b/third_party/WebKit/LayoutTests/inspector/elements/styles/cancel-upon-invalid-property.html deleted file mode 100644 index 6ecb2908..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles/cancel-upon-invalid-property.html +++ /dev/null
@@ -1,54 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<style> -#inspected { - color: blue; -} -</style> -<script> - -function test() { - var treeElement; - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', editProperty); - - function editProperty() { - treeElement = ElementsTestRunner.getMatchedStylePropertyTreeItem('color'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - treeElement.startEditing(); - treeElement.nameElement.textContent = 'color'; - treeElement.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - treeElement.valueElement.textContent = 'red'; - ElementsTestRunner.waitForStyleApplied(commitInvalidProperty); - treeElement.kickFreeFlowStyleEditForTest(); - } - - function commitInvalidProperty() { - treeElement.valueElement.textContent = 'red/*'; - treeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - ElementsTestRunner.waitForStyleApplied(invalidCommitted); - } - - function invalidCommitted() { - ElementsTestRunner.waitForStyleApplied(dumpAndExit); - } - - function dumpAndExit() { - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Verifies that entering poor property value restores original text. -</p> - -<div id="inspected">Text</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/original-content-provider.html b/third_party/WebKit/LayoutTests/inspector/elements/styles/original-content-provider.html deleted file mode 100644 index 6487a0e..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles/original-content-provider.html +++ /dev/null
@@ -1,118 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<style> -div { color: red; } -/*# sourceURL=set-style.css */ -</style> - -<style> -div {} -/*# sourceURL=set-selector.css */ -</style> - -<style> -@media (all) { } -/*# sourceURL=set-media.css */ -</style> - -<style> -@keyframes animation { 100% { color: red; } } -/*# sourceURL=set-keyframe-key.css */ -</style> - -<style> -div {} -/*# sourceURL=add-rule.css */ -</style> - -<style> -div {} -/*# sourceURL=set-text.css */ -</style> - -<script> - -function test() { - TestRunner.addSniffer(SDK.CSSModel.prototype, '_originalContentRequestedForTest', onOriginalContentRequested, true); - function onOriginalContentRequested(header) { - TestRunner.addResult('original content loaded for header: ' + header.sourceURL); - } - - var headers = TestRunner.cssModel.styleSheetHeaders(); - TestRunner.runTestSuite([ - function testSetStyle(next) { - var header = headers.find(header => header.sourceURL.endsWith('set-style.css')); - TestRunner.cssModel.setStyleText(header.id, new TextUtils.TextRange(1, 5, 1, 18), 'EDITED: EDITED', true) - .then(success => onEdit(header, success)) - .then(next); - }, - - function testSetSelector(next) { - var header = headers.find(header => header.sourceURL.endsWith('set-selector.css')); - TestRunner.cssModel.setSelectorText(header.id, new TextUtils.TextRange(1, 0, 1, 3), 'EDITED') - .then(success => onEdit(header, success)) - .then(next); - }, - - function testSetMedia(next) { - var header = headers.find(header => header.sourceURL.endsWith('set-media.css')); - TestRunner.cssModel.setMediaText(header.id, new TextUtils.TextRange(1, 7, 1, 12), 'EDITED') - .then(success => onEdit(header, success)) - .then(next); - }, - - function testSetKeyframeKey(next) { - var header = headers.find(header => header.sourceURL.endsWith('set-keyframe-key.css')); - TestRunner.cssModel.setKeyframeKey(header.id, new TextUtils.TextRange(1, 23, 1, 27), 'from') - .then(success => onEdit(header, success)) - .then(next); - }, - - function testAddRule(next) { - var header = headers.find(header => header.sourceURL.endsWith('add-rule.css')); - TestRunner.cssModel.addRule(header.id, 'EDITED {}\n', new TextUtils.TextRange(1, 0, 1, 0)) - .then(success => onEdit(header, success)) - .then(next); - }, - - function testSetStyleSheetText(next) { - var header = headers.find(header => header.sourceURL.endsWith('set-text.css')); - TestRunner.cssModel.setStyleSheetText(header.id, 'EDITED {}', true) - .then(success => onEdit(header, success)) - .then(next); - }, - ]); - - function onEdit(header, success) { - if (success !== null && !success) { - TestRunner.addResult('Failed to run edit operation.'); - TestRunner.completeTest(); - return; - } - var contents = [ - header.originalContentProvider().requestContent(), - header.requestContent(), - ]; - return Promise.all(contents).then(onContents); - } - - function onContents(contents) { - TestRunner.addResult('== Original =='); - TestRunner.addResult(contents[0].trim()); - TestRunner.addResult('== Current =='); - TestRunner.addResult(contents[1].trim()); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p>Verifies that CSSStyleSheetHeader.originalContentProvider() indeed returns original content.</p> - -<div id="inspected"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/undo-after-cancelled-editing.html b/third_party/WebKit/LayoutTests/inspector/elements/styles/undo-after-cancelled-editing.html deleted file mode 100644 index 9df20236..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles/undo-after-cancelled-editing.html +++ /dev/null
@@ -1,72 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<style> -#inspected { -} -</style> -<script> - -function test() { - var treeElement; - TestRunner.runTestSuite([ - function selectNode(next) { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', next); - }, - - function addNewProperty(next) { - var section = ElementsTestRunner.firstMatchedStyleSection(); - var newProperty = section.addNewBlankProperty(); - newProperty.startEditing(); - newProperty.nameElement.textContent = 'color'; - newProperty.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - newProperty.valueElement.textContent = 'blue'; - newProperty.valueElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - ElementsTestRunner.waitForStyleApplied(next); - }, - - function editProperty(next) { - treeElement = ElementsTestRunner.getMatchedStylePropertyTreeItem('color'); - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - treeElement.startEditing(); - treeElement.nameElement.textContent = 'color'; - treeElement.nameElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - - // Update incrementally, do not commit. - treeElement.valueElement.textContent = 'red'; - treeElement.kickFreeFlowStyleEditForTest(); - ElementsTestRunner.waitForStyleApplied(next); - }, - - function cancelEditing(next) { - treeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('Escape')); - ElementsTestRunner.waitForStyleApplied(next); - }, - - function undoStyles(next) { - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - TestRunner.domModel.undo(); - ElementsTestRunner.waitForStyles('inspected', next, true); - }, - - function onUndoedProperty(next) { - ElementsTestRunner.dumpSelectedElementStyles(true, false, true); - next(); - } - ]); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Verifies that cancelling property value editing doesn't affect -undo stack. -</p> - -<div id="inspected">Text</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/undo-change-property.html b/third_party/WebKit/LayoutTests/inspector/elements/styles/undo-change-property.html deleted file mode 100644 index 93364ee..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles/undo-change-property.html +++ /dev/null
@@ -1,60 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> - -<style> -.container { - font-weight: bold -} -</style> - -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('container', step1); - - function step1() { - TestRunner.addResult('Initial value'); - ElementsTestRunner.dumpSelectedElementStyles(true); - - var treeItem = ElementsTestRunner.getMatchedStylePropertyTreeItem('font-weight'); - treeItem.applyStyleText('font-weight: normal', false); - ElementsTestRunner.waitForStyles('container', step2); - } - - function step2() { - TestRunner.addResult('After changing property'); - ElementsTestRunner.dumpSelectedElementStyles(true); - - TestRunner.domModel.undo(); - ElementsTestRunner.selectNodeAndWaitForStyles('other', step3); - } - - function step3() { - TestRunner.addResult('After undo'); - ElementsTestRunner.dumpSelectedElementStyles(true); - - TestRunner.domModel.redo(); - ElementsTestRunner.selectNodeAndWaitForStyles('container', step4); - } - - function step4() { - TestRunner.addResult('After redo'); - ElementsTestRunner.dumpSelectedElementStyles(true); - TestRunner.completeTest(); - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that changing a property is undone properly. -</p> - -<div id="container" class="container"></div> -<div id="other" class="container"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/undo-property-toggle.html b/third_party/WebKit/LayoutTests/inspector/elements/styles/undo-property-toggle.html deleted file mode 100644 index ecdba17..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles/undo-property-toggle.html +++ /dev/null
@@ -1,56 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('container', step1); - - function step1(node) { - TestRunner.addResult('Before disable'); - var treeItem = ElementsTestRunner.getElementStylePropertyTreeItem('font-weight'); - ElementsTestRunner.dumpStyleTreeItem(treeItem, ''); - - ElementsTestRunner.toggleStyleProperty('font-weight', false); - ElementsTestRunner.waitForStyles('container', step2); - } - - function step2() { - TestRunner.addResult('After disable'); - var treeItem = ElementsTestRunner.getElementStylePropertyTreeItem('font-weight'); - ElementsTestRunner.dumpStyleTreeItem(treeItem, ''); - - TestRunner.domModel.undo(); - ElementsTestRunner.waitForStyles('container', step3); - } - - function step3() { - TestRunner.addResult('After undo'); - var treeItem = ElementsTestRunner.getElementStylePropertyTreeItem('font-weight'); - ElementsTestRunner.dumpStyleTreeItem(treeItem, ''); - - TestRunner.domModel.redo(); - ElementsTestRunner.waitForStyles('container', step4); - } - - function step4() { - TestRunner.addResult('After redo'); - var treeItem = ElementsTestRunner.getElementStylePropertyTreeItem('font-weight'); - ElementsTestRunner.dumpStyleTreeItem(treeItem, ''); - TestRunner.completeTest(); - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that disabling style is undone properly. -</p> - -<div id="container" style="font-weight:bold"> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/undo-set-selector-text.html b/third_party/WebKit/LayoutTests/inspector/elements/styles/undo-set-selector-text.html deleted file mode 100644 index 56c85fd..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles/undo-set-selector-text.html +++ /dev/null
@@ -1,59 +0,0 @@ -<html> -<head> -<style> -#inspected { - color: green; -} -</style> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); - - function step1() { - TestRunner.addResult('=== Before selector modification ==='); - ElementsTestRunner.dumpSelectedElementStyles(true); - var section = ElementsTestRunner.firstMatchedStyleSection(); - section.startEditingSelector(); - section._selectorElement.textContent = '#inspected, #other'; - section._selectorElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - ElementsTestRunner.selectNodeAndWaitForStyles('other', step2); - } - - function step2() { - TestRunner.addResult('=== After selector modification ==='); - ElementsTestRunner.dumpSelectedElementStyles(true); - TestRunner.domModel.undo(); - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step3); - } - - function step3() { - TestRunner.addResult('=== After undo ==='); - ElementsTestRunner.dumpSelectedElementStyles(true); - - TestRunner.domModel.redo(); - ElementsTestRunner.selectNodeAndWaitForStyles('other', step4); - } - - function step4() { - TestRunner.addResult('=== After redo ==='); - ElementsTestRunner.dumpSelectedElementStyles(true); - TestRunner.completeTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that setting selector text can be undone. -</p> - -<div id="inspected"></div> -<div id="other"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/up-down-numerics-and-colors.html b/third_party/WebKit/LayoutTests/inspector/elements/styles/up-down-numerics-and-colors.html deleted file mode 100644 index a4f48f932..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles/up-down-numerics-and-colors.html +++ /dev/null
@@ -1,81 +0,0 @@ -<html> -<head> - -<style> -h1 { - color: #FF2; - opacity: .5; - transform: rotate(1000000000000000065537deg); -} -</style> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - TestRunner.runTestSuite([ - function testInit(next) { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', next); - }, - - function testAlterColor(next) { - var colorTreeElement = ElementsTestRunner.getMatchedStylePropertyTreeItem('color'); - colorTreeElement.startEditing(colorTreeElement.valueElement); - - // PageUp should change to 'FF3' - colorTreeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('PageUp')); - // Ctrl/Meta + Shift Down should change to 'EE3' - if (Host.isMac()) - colorTreeElement.valueElement.dispatchEvent( - TestRunner.createKeyEvent('ArrowDown', /*Ctrl*/ false, /*Alt*/ false, /*Shift*/ true, /*Meta*/ true)); - else - colorTreeElement.valueElement.dispatchEvent( - TestRunner.createKeyEvent('ArrowDown', /*Ctrl*/ true, /*Alt*/ false, /*Shift*/ true, /*Meta*/ false)); - - TestRunner.addResult(colorTreeElement.listItemElement.textContent); - next(); - }, - - function testAlterNumber(next) { - var opacityTreeElement = ElementsTestRunner.getMatchedStylePropertyTreeItem('opacity'); - opacityTreeElement.startEditing(opacityTreeElement.valueElement); - // 0.5 (initial). Alt + Up should change to 0.6 - opacityTreeElement.valueElement.dispatchEvent( - TestRunner.createKeyEvent('ArrowUp', /*Ctrl*/ false, /*Alt*/ true, /*Shift*/ false)); - // Up should change to 1.6 - opacityTreeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('ArrowUp')); - // Shift + PageUp should change to 11.6 - opacityTreeElement.valueElement.dispatchEvent( - TestRunner.createKeyEvent('PageUp', /*Ctrl*/ false, /*Alt*/ false, /*Shift*/ true)); - TestRunner.addResult(opacityTreeElement.listItemElement.textContent); - next(); - }, - - function testAlterBigNumber(next) { - var treeElement = ElementsTestRunner.getMatchedStylePropertyTreeItem('transform'); - treeElement.startEditing(treeElement.valueElement); - var selection = treeElement.valueElement.getComponentSelection(); - var range = selection.getRangeAt(0); - var newRange = document.createRange(); - newRange.setStart(range.startContainer, 10); - newRange.setEnd(range.startContainer, 10); - selection.removeAllRanges(); - selection.addRange(newRange); - treeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('ArrowUp')); - treeElement.valueElement.dispatchEvent(TestRunner.createKeyEvent('PageUp')); - TestRunner.addResult(treeElement.listItemElement.textContent); - next(); - } - ]); -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that numeric and color values are incremented/decremented correctly. -</p> -<h1 id="inspected">Inspect Me</h1> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/updates-during-dom-traversal.html b/third_party/WebKit/LayoutTests/inspector/elements/styles/updates-during-dom-traversal.html deleted file mode 100644 index dd93d8f..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles/updates-during-dom-traversal.html +++ /dev/null
@@ -1,50 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - var updateCount = 0; - var keydownCount = 5; - - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', selectCallback); - function selectCallback() { - TestRunner.addSniffer(Elements.StylesSidebarPane.prototype, '_innerRebuildUpdate', sniffUpdate, true); - var element = ElementsTestRunner.firstElementsTreeOutline().element; - for (var i = 0; i < keydownCount; ++i) - element.dispatchEvent(TestRunner.createKeyEvent('ArrowUp')); - - TestRunner.deprecatedRunAfterPendingDispatches(completeCallback); - } - - function completeCallback() { - if (updateCount >= keydownCount) - TestRunner.addResult('ERROR: got ' + updateCount + ' updates for ' + keydownCount + ' consecutive keydowns'); - else - TestRunner.addResult('OK: updates throttled'); - TestRunner.completeTest(); - } - - function sniffUpdate() { - ++updateCount; - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that style updates are throttled during DOM traversal. <a href="https://bugs.webkit.org/show_bug.cgi?id=77643">Bug 77643</a>. -</p> - -<div></div> -<div></div> -<div></div> -<div></div> -<div></div> -<div id="inspected"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/updates-throttled.html b/third_party/WebKit/LayoutTests/inspector/elements/styles/updates-throttled.html deleted file mode 100644 index 93d81825..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles/updates-throttled.html +++ /dev/null
@@ -1,45 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - var UPDATE_COUNT = 5; - var rebuildCount = 0; - - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', selectCallback); - function selectCallback() { - TestRunner.addSniffer(Elements.StylesSidebarPane.prototype, '_innerRebuildUpdate', sniffRebuild, true); - var stylesPane = UI.panels.elements._stylesWidget; - for (var i = 0; i < UPDATE_COUNT; ++i) - UI.context.setFlavor(SDK.DOMNode, stylesPane.node()); - - TestRunner.deprecatedRunAfterPendingDispatches(completeCallback); - } - - function completeCallback() { - if (rebuildCount >= UPDATE_COUNT) - TestRunner.addResult('ERROR: got ' + rebuildCount + ' rebuilds for ' + UPDATE_COUNT + ' consecutive updates'); - else - TestRunner.addResult('OK: rebuilds throttled'); - TestRunner.completeTest(); - } - - function sniffRebuild() { - ++rebuildCount; - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that Styles sidebar DOM rebuilds are throttled during consecutive updates. <a href="https://bugs.webkit.org/show_bug.cgi?id=78086">Bug 78086</a>. -</p> - -<div id="inspected"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/url-color-swatch.html b/third_party/WebKit/LayoutTests/inspector/elements/styles/url-color-swatch.html deleted file mode 100644 index c9779c0..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles/url-color-swatch.html +++ /dev/null
@@ -1,60 +0,0 @@ -<html> -<head> -<style> -#inspected { - background-image: url("red green blue.jpg"); - color: red; - --blue: blue; - border-color: var(--blue); -} -</style> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); - - function step1() { - dumpDOM(ElementsTestRunner.getMatchedStylePropertyTreeItem('background-image')); - dumpDOM(ElementsTestRunner.getMatchedStylePropertyTreeItem('color')); - dumpDOM(ElementsTestRunner.getMatchedStylePropertyTreeItem('border-color')); - TestRunner.completeTest(); - } - - function dumpDOM(treeItem) { - var element = treeItem.listItemElement.getElementsByClassName('value')[0]; - var result = []; - dumpNode(element, result); - TestRunner.addResult(result.join('')); - } - - function dumpNode(parentNode, result) { - var childNodes = parentNode.childNodes; - for (var i = 0; i < childNodes.length; ++i) { - var node = childNodes[i]; - switch (node.nodeType) { - case Node.ELEMENT_NODE: - if (node.getAttribute('is') === 'color-swatch') - result.push('[] ' + node.textContent); - else - dumpNode(node, result); - break; - case Node.TEXT_NODE: - result.push(node.nodeValue); - break; - } - } - } -} - -</script> -</head> -<body onload="runTest()"> -<p> -Tests that url(...) with space-delimited color names as filename segments do not contain color swatches. Bug <a href="http://bugs.webkit.org/show_bug.cgi?id=106770">106770</a>. -Also tests that CSS variables such as var(--blue) do not contain color swatches. Bug <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=595231">595231</a>. -</p> -<div id="inspected"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/styles/url-multiple-collapsing.html b/third_party/WebKit/LayoutTests/inspector/elements/styles/url-multiple-collapsing.html deleted file mode 100644 index dad83b6..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/styles/url-multiple-collapsing.html +++ /dev/null
@@ -1,52 +0,0 @@ -<html> -<head> -<style> -#inspected { - background: -webkit-image-set(url("chrome-search://theme/IDR_THEME_NTP_BACKGROUND?pfncmbjabnpldlfbnmhnhblapoibfbei") 1x, url("chrome-search://theme/IDR_THEME_NTP_BACKGROUND@2x?pfncmbjabnpldlfbnmhnhblapoibfbei") 2x); - color: red; -} -</style> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> - -function test() { - ElementsTestRunner.selectNodeAndWaitForStyles('inspected', step1); - - function step1() { - dumpDOM(ElementsTestRunner.getMatchedStylePropertyTreeItem('background')); - TestRunner.completeTest(); - } - - function dumpDOM(treeItem) { - var element = treeItem.listItemElement.getElementsByClassName('value')[0]; - var result = []; - dumpNode(element, result); - TestRunner.addResult(result.join('')); - } - - function dumpNode(parentNode, result) { - var childNodes = parentNode.childNodes; - for (var i = 0; i < childNodes.length; ++i) { - var node = childNodes[i]; - switch (node.nodeType) { - case Node.ELEMENT_NODE: - dumpNode(node, result); - break; - case Node.TEXT_NODE: - result.push(node.nodeValue); - break; - } - } - } -} - -</script> -</head> -<body onload="runTest()"> -<p> -Tests that multiple URLs which are long are not squashed into a single URL. Bug <a href="http://crbug.com/590172">590172</a>. -</p> -<div id="inspected"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/user-properties-expected.txt b/third_party/WebKit/LayoutTests/inspector/elements/user-properties-expected.txt deleted file mode 100644 index b06f9e1..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/user-properties-expected.txt +++ /dev/null
@@ -1,142 +0,0 @@ -Tests that DOMNode properly tracks own and descendants' user properties. - -attr1 set on aNode - <!DOCTYPE html> -- <html> [subtreeMarkerCount:1] - - <head> - <script src="../../http/tests/inspector/inspector-test.js"></script> - <script src="../../http/tests/inspector/elements-test.js"></script> - <script src="resources/user-properties.js"></script> - </head> - - <body onload="runTest()"> [subtreeMarkerCount:1] - <p>\nTests that DOMNode properly tracks own and descendants' user properties.\n</p> - - <div id="container"> [subtreeMarkerCount:1] - <div id="child1"></div> - - <div id="child2"> [subtreeMarkerCount:1] - <a href="#" id="aNode">Third-level node</a> [markers:[attr1=true], subtreeMarkerCount:1] - </div> - </div> - </body> - </html> -attr2 set on child2 - <!DOCTYPE html> -- <html> [subtreeMarkerCount:2] - - <head> - <script src="../../http/tests/inspector/inspector-test.js"></script> - <script src="../../http/tests/inspector/elements-test.js"></script> - <script src="resources/user-properties.js"></script> - </head> - - <body onload="runTest()"> [subtreeMarkerCount:2] - <p>\nTests that DOMNode properly tracks own and descendants' user properties.\n</p> - - <div id="container"> [subtreeMarkerCount:2] - <div id="child1"></div> - - <div id="child2"> [markers:[attr2=value], subtreeMarkerCount:2] - <a href="#" id="aNode">Third-level node</a> [markers:[attr1=true], subtreeMarkerCount:1] - </div> - </div> - </body> - </html> -attr1 set on child2 - <!DOCTYPE html> -- <html> [subtreeMarkerCount:3] - - <head> - <script src="../../http/tests/inspector/inspector-test.js"></script> - <script src="../../http/tests/inspector/elements-test.js"></script> - <script src="resources/user-properties.js"></script> - </head> - - <body onload="runTest()"> [subtreeMarkerCount:3] - <p>\nTests that DOMNode properly tracks own and descendants' user properties.\n</p> - - <div id="container"> [subtreeMarkerCount:3] - <div id="child1"></div> - - <div id="child2"> [markers:[attr2=value,attr1=true], subtreeMarkerCount:3] - <a href="#" id="aNode">Third-level node</a> [markers:[attr1=true], subtreeMarkerCount:1] - </div> - </div> - </body> - </html> -attr1 modified on aNode - <!DOCTYPE html> -- <html> [subtreeMarkerCount:3] - - <head> - <script src="../../http/tests/inspector/inspector-test.js"></script> - <script src="../../http/tests/inspector/elements-test.js"></script> - <script src="resources/user-properties.js"></script> - </head> - - <body onload="runTest()"> [subtreeMarkerCount:3] - <p>\nTests that DOMNode properly tracks own and descendants' user properties.\n</p> - - <div id="container"> [subtreeMarkerCount:3] - <div id="child1"></div> - - <div id="child2"> [markers:[attr2=value,attr1=true], subtreeMarkerCount:3] - <a href="#" id="aNode">Third-level node</a> [markers:[attr1=anotherValue], subtreeMarkerCount:1] - </div> - </div> - </body> - </html> -attr2 modified on child2 - <!DOCTYPE html> -- <html> [subtreeMarkerCount:3] - - <head> - <script src="../../http/tests/inspector/inspector-test.js"></script> - <script src="../../http/tests/inspector/elements-test.js"></script> - <script src="resources/user-properties.js"></script> - </head> - - <body onload="runTest()"> [subtreeMarkerCount:3] - <p>\nTests that DOMNode properly tracks own and descendants' user properties.\n</p> - - <div id="container"> [subtreeMarkerCount:3] - <div id="child1"></div> - - <div id="child2"> [markers:[attr2=anotherValue,attr1=true], subtreeMarkerCount:3] - <a href="#" id="aNode">Third-level node</a> [markers:[attr1=anotherValue], subtreeMarkerCount:1] - </div> - </div> - </body> - </html> -attr1 removed from aNode - <!DOCTYPE html> -- <html> [subtreeMarkerCount:2] - - <head> - <script src="../../http/tests/inspector/inspector-test.js"></script> - <script src="../../http/tests/inspector/elements-test.js"></script> - <script src="resources/user-properties.js"></script> - </head> - - <body onload="runTest()"> [subtreeMarkerCount:2] - <p>\nTests that DOMNode properly tracks own and descendants' user properties.\n</p> - - <div id="container"> [subtreeMarkerCount:2] - <div id="child1"></div> - - <div id="child2"> [markers:[attr2=anotherValue,attr1=true], subtreeMarkerCount:2] - <a href="#" id="aNode">Third-level node</a> - </div> - </div> - </body> - </html> -aNode removed - <!DOCTYPE html> -- <html> [subtreeMarkerCount:2] - - <head> - <script src="../../http/tests/inspector/inspector-test.js"></script> - <script src="../../http/tests/inspector/elements-test.js"></script> - <script src="resources/user-properties.js"></script> - </head> - - <body onload="runTest()"> [subtreeMarkerCount:2] - <p>\nTests that DOMNode properly tracks own and descendants' user properties.\n</p> - - <div id="container"> [subtreeMarkerCount:2] - <div id="child1"></div> - <div id="child2"></div> [markers:[attr2=anotherValue,attr1=true], subtreeMarkerCount:2] - </div> - </body> - </html> -child2 removed - <!DOCTYPE html> -- <html> [subtreeMarkerCount:2] - - <head> - <script src="../../http/tests/inspector/inspector-test.js"></script> - <script src="../../http/tests/inspector/elements-test.js"></script> - <script src="resources/user-properties.js"></script> - </head> - - <body onload="runTest()"> [subtreeMarkerCount:2] - <p>\nTests that DOMNode properly tracks own and descendants' user properties.\n</p> - - <div id="container"> - <div id="child1"></div> - </div> - </body> - </html> -
diff --git a/third_party/WebKit/LayoutTests/inspector/elements/user-properties.html b/third_party/WebKit/LayoutTests/inspector/elements/user-properties.html deleted file mode 100644 index 215c570..0000000 --- a/third_party/WebKit/LayoutTests/inspector/elements/user-properties.html +++ /dev/null
@@ -1,20 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/elements-test.js"></script> -<script src="resources/user-properties.js"></script> -</head> - -<body onload="runTest()"> -<p> -Tests that DOMNode properly tracks own and descendants' user properties. -</p> - -<div id="container"> - <div id="child1"></div> - <div id="child2"><a href="#" id="aNode">Third-level node</a></div> -</div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/jump-to-previous-editing-location.html b/third_party/WebKit/LayoutTests/inspector/jump-to-previous-editing-location.html index 23c59861..9924e73 100644 --- a/third_party/WebKit/LayoutTests/inspector/jump-to-previous-editing-location.html +++ b/third_party/WebKit/LayoutTests/inspector/jump-to-previous-editing-location.html
@@ -4,7 +4,7 @@ <script src="../http/tests/inspector/console-test.js"></script> <script src="../http/tests/inspector/debugger-test.js"></script> <script src="resources/example-fileset-for-test.js"></script> -<script src="editor/editor-test.js"></script> +<script src="../http/tests/devtools/resources/editor-test.js"></script> <script> function test() { var panel = UI.panels.sources;
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/autocomplete-css.html b/third_party/WebKit/LayoutTests/inspector/sources/autocomplete-css.html deleted file mode 100644 index 54a007a..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/autocomplete-css.html +++ /dev/null
@@ -1,82 +0,0 @@ -<html> -<head> -<link rel="stylesheet" href="./resources/empty.css"> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script src="./autocomplete-test.js"></script> -<script src="../editor/editor-test.js"></script> -<script> -function test() { - SourcesTestRunner.showScriptSource('empty.css', onSourceFrame); - - var textEditor; - var dumpSuggestions; - function onSourceFrame(sourceFrame) { - textEditor = sourceFrame.textEditor; - dumpSuggestions = SourcesTestRunner.dumpSuggestions.bind(InspectorTest, textEditor); - TestRunner.runTestSuite(testSuite); - } - - var testSuite = [ - function testClassNameAutocomplete(next) { - dumpSuggestions(['.red { color: red }', '.blue { color: blue }', '.|']).then(next); - }, - - function testPropertyNameAutocomplete1(next) { - dumpSuggestions(['.red { color: red }', '.blue { c|']).then(next); - }, - - function testPropertyNameAutocomplete2(next) { - dumpSuggestions([ - '.my-class { -|webkit-border: 1px solid black; -webkit-color: blue;', 'text-align: }' - ]).then(next); - }, - - function testPropertyValueAutocomplete1(next) { - dumpSuggestions(['.red { border-style: |', '/* some other words to mess up */']).then(next); - }, - - function testPropertyValueAutocomplete2(next) { - dumpSuggestions(['.red { border-style: d|', '/* dial drummer dig */']).then(next); - }, - - function testPropertyValueAutocomplete3(next) { - dumpSuggestions(['.red { border-style: z|', '/* zipper zorro zion */']).then(next); - }, - - function testPropertyValueAutocomplete4(next) { - dumpSuggestions(['.red { border-style/* comment */: /* comment */|']).then(next); - }, - - function testPropertyValueAutocomplete5(next) { - dumpSuggestions([ - '.my-class { -webkit-border: 1px solid black; -webkit-color: blue;', 'text-align: |}' - ]).then(next); - }, - - function verifySuggestionsOnColumnTypedIn(next) { - textEditor.element.focus(); - textEditor.setText(['.green {', ' display'].join('\n')); - textEditor.setSelection(TextUtils.TextRange.createFromLocation(1, 10)); - SourcesTestRunner.dumpTextWithSelection(textEditor); - TestRunner.addSniffer( - TextEditor.TextEditorAutocompleteController.prototype, '_onSuggestionsShownForTest', suggestionsShown); - SourcesTestRunner.typeIn(textEditor, ':'); - - function suggestionsShown(words) { - TestRunner.addResult('Suggestions displayed on \':\' symbol typed in:'); - TestRunner.addResult('[' + words.map(item => item.text).join(', ') + ']'); - next(); - } - }, - ]; -} -</script> -</head> - -<body onload="runTest();"> -<p> -The test verifies autocomplete suggestions for CSS file. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/autocomplete-general.html b/third_party/WebKit/LayoutTests/inspector/sources/autocomplete-general.html deleted file mode 100644 index 63cf7017..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/autocomplete-general.html +++ /dev/null
@@ -1,86 +0,0 @@ -<html> -<head> -<script src="../sources/debugger/resources/edit-me.js"></script> -<script src="../editor/editor-test.js"></script> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script> -function test() { - SourcesTestRunner.showScriptSource('edit-me.js', onSourceFrame); - - var textEditor; - function onSourceFrame(sourceFrame) { - textEditor = sourceFrame.textEditor; - textEditor.element.focus(); - TestRunner.runTestSuite(testSuite); - } - - var testSuite = [ - // This test has to be the first. It validates that autocompletion controller - // will initialize as a key will be pressed. - function testCompletionsShowUpOnKeyPress(next) { - textEditor.setText('name1 name2 name3 name4\nna'); - textEditor.setSelection(TextUtils.TextRange.createFromLocation(1, 2)); - TestRunner.addSniffer( - TextEditor.TextEditorAutocompleteController.prototype, '_onSuggestionsShownForTest', - onAutocompletionSuggestBox); - SourcesTestRunner.typeIn(textEditor, 'm'); - function onAutocompletionSuggestBox() { - document.activeElement.dispatchEvent(TestRunner.createKeyEvent('Enter')); - dumpDictionary(next); - } - }, - - function testSetInitialText(next) { - textEditor.setText('one two three3_\nfour five\na_b\nsix\n123foo\n132\nseven'); - dumpDictionary(next); - }, - - function testAlphaNumericWords(next) { - textEditor.setText('2 2foo foo2 2foo4 foo3bar'); - dumpDictionary(next); - }, - - function testRemoveDuplicate(next) { - textEditor.setText('one\none'); - textEditor.setSelection(new TextUtils.TextRange(0, 0, 0, 3)); - SourcesTestRunner.typeIn(textEditor, '\b', dumpDictionary.bind(null, next)); - }, - - function testSetText(next) { - textEditor.setText('dog cat \'mouse\';dog bird'); - dumpDictionary(next); - }, - - function testSimpleEdit(next) { - textEditor.setSelection(TextUtils.TextRange.createFromLocation(0, 3)); - SourcesTestRunner.typeIn(textEditor, '\b', dumpDictionary.bind(null, next)); - }, - - function testDeleteOneDogAndOneCat(next) { - textEditor.setSelection(TextUtils.TextRange.createFromLocation(0, 6)); - SourcesTestRunner.typeIn(textEditor, '\b\b\b\b\b\b', dumpDictionary.bind(null, next)); - } - ]; - - function dumpDictionary(next) { - var wordsInDictionary = textEditor._autocompleteController._dictionary.wordsWithPrefix(''); - TestRunner.addResult('========= Text in editor ========='); - SourcesTestRunner.dumpTextWithSelection(textEditor); - TestRunner.addResult('======= Words in dictionary ======='); - TestRunner.addResult('[' + wordsInDictionary.sort().join(', ') + ']'); - TestRunner.addResult('============='); - next(); - } -} - -</script> -</head> - -<body onload="runTest();"> -<p> -This test checks how text editor updates autocompletion dictionary in a response -to user input. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/autocomplete-hide-on-smart-brace.html b/third_party/WebKit/LayoutTests/inspector/sources/autocomplete-hide-on-smart-brace.html deleted file mode 100644 index 04204242..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/autocomplete-hide-on-smart-brace.html +++ /dev/null
@@ -1,55 +0,0 @@ -<html> -<head> -<script src="../sources/debugger/resources/edit-me.js"></script> -<script src="../editor/editor-test.js"></script> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script> - -function test() { - SourcesTestRunner.showScriptSource('edit-me.js', onSourceFrame); - - var textEditor; - function onSourceFrame(sourceFrame) { - textEditor = sourceFrame.textEditor; - textEditor.element.focus(); - TestRunner.runTestSuite(testSuite); - } - - var testSuite = [ - function testSummonSuggestBox(next) { - TestRunner.addSniffer( - TextEditor.TextEditorAutocompleteController.prototype, '_onSuggestionsShownForTest', onSuggestionsShown); - - textEditor.setText('one\n()'); - textEditor.setSelection(TextUtils.TextRange.createFromLocation(1, 1)); - SourcesTestRunner.typeIn(textEditor, 'o', function() {}); - - function onSuggestionsShown() { - TestRunner.addResult('Suggestions shown.'); - next(); - } - }, - - function testTypeSmartBrace(next) { - TestRunner.addSniffer( - TextEditor.TextEditorAutocompleteController.prototype, '_onSuggestionsHiddenForTest', onSuggestionsHidden); - SourcesTestRunner.typeIn(textEditor, ')', function() {}); - - function onSuggestionsHidden() { - TestRunner.addResult('Suggestions hidden.'); - next(); - } - }, - ]; -} - -</script> -</head> - -<body onload="runTest();"> -<p> -Verify that suggest box gets hidden whenever a cursor jumps over smart brace. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/autocomplete-scss.html b/third_party/WebKit/LayoutTests/inspector/sources/autocomplete-scss.html deleted file mode 100644 index b3aa6ba..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/autocomplete-scss.html +++ /dev/null
@@ -1,37 +0,0 @@ -<html> -<head> -<link rel="stylesheet" href="./resources/empty.css"> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script src="./autocomplete-test.js"></script> -<script src="../editor/editor-test.js"></script> -<script> -function test() { - SourcesTestRunner.showScriptSource('empty.scss', onSourceFrame); - - var dumpSuggestions; - function onSourceFrame(sourceFrame) { - dumpSuggestions = SourcesTestRunner.dumpSuggestions.bind(InspectorTest, sourceFrame.textEditor); - TestRunner.runTestSuite(testSuite); - } - - var testSuite = [ - function testPropertyValueSuggestionsBefore$(next) { - dumpSuggestions(['@mixin my-border-style($style) {', ' border-style: |$;', '}']).then(next); - }, - - function testPropertyValueSuggestionsAfter$(next) { - dumpSuggestions(['@mixin my-border-style($style) {', ' border-style: $|;', '}']).then(next); - }, - ]; -} - -</script> -</head> - -<body onload="runTest();"> -<p> -The test verifies autocomplete suggestions for SCSS file. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/bezier-swatch-position.html b/third_party/WebKit/LayoutTests/inspector/sources/bezier-swatch-position.html deleted file mode 100644 index c1377f7..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/bezier-swatch-position.html +++ /dev/null
@@ -1,52 +0,0 @@ -<html> -<head> - -<link rel="stylesheet" href="resources/bezier.css"> - -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script src="../../http/tests/inspector/sources-test.js"></script> -<script> -function test() { - SourcesTestRunner.showScriptSource('bezier.css', onSourceFrame); - - function onSourceFrame(sourceFrame) { - TestRunner.addResult('Initial swatch positions:'); - SourcesTestRunner.dumpSwatchPositions(sourceFrame, Sources.CSSSourceFrame.SwatchBookmark); - - TestRunner.runTestSuite([ - function testEditBezier(next) { - var swatch = sourceFrame.textEditor._codeMirrorElement.querySelector('span[is=bezier-swatch]'); - swatch.shadowRoot.querySelector('.bezier-swatch-icon').click(); - sourceFrame._bezierEditor.setBezier(UI.Geometry.CubicBezier.parse('linear')); - sourceFrame._bezierEditor._onchange(); - sourceFrame._swatchPopoverHelper.hide(true); - SourcesTestRunner.dumpSwatchPositions(sourceFrame, Sources.CSSSourceFrame.SwatchBookmark); - next(); - }, - - function testAddBezier(next) { - var bodyLineEnd = new TextUtils.TextRange(1, 37, 1, 37); - sourceFrame.textEditor.editRange(bodyLineEnd, ' transition: height 1s cubic-bezier(0, 0.5, 1, 1);'); - SourcesTestRunner.dumpSwatchPositions(sourceFrame, Sources.CSSSourceFrame.SwatchBookmark); - next(); - }, - - function testInvalidateBezier(next) { - var startParenthesis = new TextUtils.TextRange(1, 67, 1, 68); - sourceFrame.textEditor.editRange(startParenthesis, '['); - SourcesTestRunner.dumpSwatchPositions(sourceFrame, Sources.CSSSourceFrame.SwatchBookmark); - next(); - } - ]); - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that bezier swatches are updated properly in CSS Sources. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/color-swatch-position.html b/third_party/WebKit/LayoutTests/inspector/sources/color-swatch-position.html deleted file mode 100644 index 9b76fbd..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/color-swatch-position.html +++ /dev/null
@@ -1,74 +0,0 @@ -<html> -<head> - -<link rel="stylesheet" href="resources/color.css"> - -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script src="../../http/tests/inspector/sources-test.js"></script> -<script> -function test() { - SourcesTestRunner.showScriptSource('color.css', onSourceFrame); - - function onSourceFrame(sourceFrame) { - TestRunner.addResult('Initial swatch positions:'); - SourcesTestRunner.dumpSwatchPositions(sourceFrame, Sources.CSSSourceFrame.SwatchBookmark); - - TestRunner.runTestSuite([ - function testEditSpectrum(next) { - var swatch = sourceFrame.textEditor._codeMirrorElement.querySelector('span[is=color-swatch]'); - swatch.shadowRoot.querySelector('.color-swatch-inner').click(); - sourceFrame._spectrum._innerSetColor( - Common.Color.parse('#008000').hsva(), '', Common.Color.Format.HEX, - ColorPicker.Spectrum._ChangeSource.Other); - sourceFrame._swatchPopoverHelper.hide(true); - SourcesTestRunner.dumpSwatchPositions(sourceFrame, Sources.CSSSourceFrame.SwatchBookmark); - next(); - }, - - function testAddLine(next) { - var start = TextUtils.TextRange.createFromLocation(0, 0); - sourceFrame.textEditor.editRange(start, '/* New line */\n'); - SourcesTestRunner.dumpSwatchPositions(sourceFrame, Sources.CSSSourceFrame.SwatchBookmark); - next(); - }, - - function testDeleteLine(next) { - var bodyLine = new TextUtils.TextRange(2, 0, 3, 0); - sourceFrame.textEditor.editRange(bodyLine, ''); - SourcesTestRunner.dumpSwatchPositions(sourceFrame, Sources.CSSSourceFrame.SwatchBookmark); - next(); - }, - - function testAddColor(next) { - var emptyBodyLine = new TextUtils.TextRange(2, 0, 2, 0); - sourceFrame.textEditor.editRange(emptyBodyLine, 'color: hsl(300, 100%, 35%);'); - SourcesTestRunner.dumpSwatchPositions(sourceFrame, Sources.CSSSourceFrame.SwatchBookmark); - next(); - }, - - function testInvalidateColor(next) { - var endParenthesis = new TextUtils.TextRange(2, 25, 2, 26); - sourceFrame.textEditor.editRange(endParenthesis, ']'); - SourcesTestRunner.dumpSwatchPositions(sourceFrame, Sources.CSSSourceFrame.SwatchBookmark); - next(); - }, - - function testBookmarksAtLineStart(next) { - var lineStart = new TextUtils.TextRange(5, 0, 5, 0); - sourceFrame.textEditor.editRange(lineStart, 'background color:\n#ff0;\n'); - SourcesTestRunner.dumpSwatchPositions(sourceFrame, Sources.CSSSourceFrame.SwatchBookmark); - next(); - } - ]); - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that color swatch positions are updated properly. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/compile-javascript.html b/third_party/WebKit/LayoutTests/inspector/sources/compile-javascript.html deleted file mode 100644 index f776669..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/compile-javascript.html +++ /dev/null
@@ -1,33 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script src="../editor/editor-test.js"></script> -<script src="./debugger/resources/edit-me.js"></script> -<script> - -function test() { - SourcesTestRunner.showScriptSource('edit-me.js', onSourceFrame); - - function onSourceFrame(sourceFrame) { - TestRunner.addSniffer( - Sources.JavaScriptCompiler.prototype, '_compilationFinishedForTest', - onCompilationFinished.bind(null, sourceFrame)); - sourceFrame.textEditor.setSelection(TextUtils.TextRange.createFromLocation(0, 0)); - SourcesTestRunner.typeIn(sourceFrame.textEditor, 'test!'); - } - - function onCompilationFinished(sourceFrame) { - SourcesTestRunner.dumpSourceFrameMessages(sourceFrame); - TestRunner.completeTest(); - } -} - -</script> - -</head> - -<body onload="runTest()"> -<p>Verifies proactive javascript compilation.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/css-inline-sourcemap.html b/third_party/WebKit/LayoutTests/inspector/sources/css-inline-sourcemap.html deleted file mode 100644 index 29bdb2d..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/css-inline-sourcemap.html +++ /dev/null
@@ -1,26 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<style>/*# sourceMappingURL=data:application/json;charset=utf-8;base64,ew0KICAidmVyc2lvbiI6IDMsDQogICJmaWxlIjogIiIsDQogICJzb3VyY2VzIjogWyIuL3Jlc291cmNlcy9lbXB0eS5zY3NzIl0sDQogICJuYW1lcyI6IFtdLA0KICAibWFwcGluZ3MiOiAiIg0KfQ== */</style> -<script> -function test() { - SourcesTestRunner.showScriptSource('empty.scss', onSourceFrame); - - function onSourceFrame(sourceFrame) { - TestRunner.addResult('Source mapping loaded.'); - TestRunner.completeTest(); - dumpSuggestions = SourcesTestRunner.dumpSuggestions.bind(InspectorTest, sourceFrame.textEditor); - TestRunner.runTestSuite(testSuite); - } -} - -</script> -</head> - -<body onload="runTest();"> -<p> -The test verifies that source maps are loaded if specified inside style tag. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/css-outline-dialog.html b/third_party/WebKit/LayoutTests/inspector/sources/css-outline-dialog.html deleted file mode 100644 index fc28eab..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/css-outline-dialog.html +++ /dev/null
@@ -1,44 +0,0 @@ -<html> -<head> - -<link rel="stylesheet" href="resources/css-outline-column.css"> - -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script> - -function test() { - SourcesTestRunner.showScriptSource('css-outline-column.css', onSourceShown); - var textEditor; - function onSourceShown(sourceFrame) { - textEditor = sourceFrame.textEditor; - TestRunner.addSniffer(Sources.OutlineQuickOpen.prototype, 'refresh', onQuickOpenFulfilled); - UI.panels.sources._sourcesView._showOutlineQuickOpen(); - } - - function onQuickOpenFulfilled() { - TestRunner.addSniffer(Common.Revealer, 'revealPromise', (revealable, omitFocus, promise) => promise.then(revealed)); - this.selectItem(1, ''); - } - - function revealed() { - var selection = textEditor.selection(); - if (!selection.isEmpty()) { - TestRunner.addResult('ERROR: selection is not empty.'); - TestRunner.completeTest(); - return; - } - TestRunner.addResult( - String.sprintf('Cursor position: line %d, column %d', selection.startLine, selection.startColumn)); - TestRunner.completeTest(); - } -} - -</script> - -</head> - -<body onload="runTest()"> -<p>Top-down test to verify css outline dialog.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-change-variable.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-change-variable.html deleted file mode 100644 index e30b98d4..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-change-variable.html +++ /dev/null
@@ -1,71 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/console-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function slave(x) -{ - var y = 20; - debugger; -} - -function testFunction() -{ - var localObject1 = { a: 310 }; - var localObject2 = 42; - slave(4000); -} - -var test = function() { - SourcesTestRunner.startDebuggerTest(step1, true); - - function evalLocalVariables(callback) { - ConsoleTestRunner.evaluateInConsoleAndDump('localObject1.a', next); - function next() { - ConsoleTestRunner.evaluateInConsoleAndDump('localObject2', callback); - } - } - - function localScopeObject() { - var localsSection = SourcesTestRunner.scopeChainSections()[0]; - return localsSection._object; - } - - function step1() { - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); - } - - function step2(callFrames) { - var pane = self.runtime.sharedInstance(Sources.CallStackSidebarPane); - pane._list.selectItem(pane._list._model.at(1)); - TestRunner.deprecatedRunAfterPendingDispatches(step3); - } - - function step3() { - TestRunner.addResult('\nEvaluated before modification:'); - evalLocalVariables(step4); - } - - async function step4() { - await localScopeObject().setPropertyValue('localObject1', '({ a: -290})'); - await localScopeObject().setPropertyValue({value: 'localObject2'}, '123'); - TestRunner.addResult('\nEvaluated after modification:'); - evalLocalVariables(step7); - } - - function step7() { - SourcesTestRunner.completeDebuggerTest(); - } -}; - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that modifying local variables works fine. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-eval-on-call-frame-inside-iframe.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-eval-on-call-frame-inside-iframe.html deleted file mode 100644 index c73df06..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-eval-on-call-frame-inside-iframe.html +++ /dev/null
@@ -1,95 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/console-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function dirxml() { return "overridden dirxml() in top frame"; } - -function onload() -{ - var iframe = document.getElementById("iframe"); - var doc = iframe.contentWindow.document; - - var html = "<html><head><script>\n" + - "function dir() { return 'overridden dir() in iframe'; }\n" + - "function pauseInsideIframe()\n" + - "{\n" + - " var table = 'local in iframe';\n" + - " debugger;\n" + - " dir;\n" + - "}\n" + - "</" + "script></" + "head><" + "body></" + "body></" + "html>"; - doc.open(); - doc.write(html); - doc.close(); - - runTest(); -} - -function testFunction() -{ - var clear = "local in top frame"; - var iframe = document.getElementById("iframe"); - iframe.contentWindow.pauseInsideIframe.call({foo: 42}); -} - -function test() { - var expressions = [ - 'dir()', 'dirxml()', 'table', 'clear', - 'x:', // print correct syntax error: crbug.com/110163 - ]; - - function evaluateInConsoleAndDump(callback) { - var copy = expressions.slice(); - inner(); - - function inner() { - var expression = copy.shift(); - if (expression) - ConsoleTestRunner.evaluateInConsoleAndDump(expression, inner, true); - else - callback(); - } - } - - SourcesTestRunner.startDebuggerTest(step1, true); - - function step1() { - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); - } - - function step2(callFrames) { - SourcesTestRunner.captureStackTrace(callFrames); - TestRunner.addResult('\n=== Evaluating on iframe ==='); - evaluateInConsoleAndDump(step3); - } - - function step3() { - var pane = self.runtime.sharedInstance(Sources.CallStackSidebarPane); - pane._list.selectItem(pane._list._model.at(1)); - TestRunner.deprecatedRunAfterPendingDispatches(step4); - } - - function step4() { - TestRunner.addResult('\n=== Evaluating on top frame ==='); - evaluateInConsoleAndDump(step5); - } - - function step5() { - SourcesTestRunner.completeDebuggerTest(); - } -} - -</script> -</head> - -<body onload="onload()"> -<iframe id="iframe"></iframe> -<p> -Test that evaluation on call frame works across all inspected windows in the call stack. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-eval-on-call-frame.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-eval-on-call-frame.html deleted file mode 100644 index db78d6f..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-eval-on-call-frame.html +++ /dev/null
@@ -1,44 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/console-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -var a = 1; -function testFunction() -{ - var a = 2; - debugger; -} - -var test = function() { - SourcesTestRunner.startDebuggerTest(step1); - - function step1() { - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); - } - - function step2() { - ConsoleTestRunner.evaluateInConsole('a', step3); - } - - function step3(result) { - TestRunner.addResult('Evaluated in console in the top frame context: a = ' + result); - SourcesTestRunner.completeDebuggerTest(); - } -}; - -</script> -</head> - -<body onload="runTest()"> -<p> -Test that evaluation in the context of top frame will see values -of its local variables, even if there are global variables with -same names. On success the test will print a = 2(value of the -local variable a). <a href="https://bugs.webkit.org/show_bug.cgi?id=47358">Bug 47358.</a> -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-eval-while-paused-throws.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-eval-while-paused-throws.html deleted file mode 100644 index ffe43ad..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-eval-while-paused-throws.html +++ /dev/null
@@ -1,75 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/console-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -var globalObj = { - func: function() - { - throw new Error("globalObj.func"); - } -}; - -function testFunction() -{ - var localObj = { - func: function() - { - throw new Error("localObj.func"); - } - }; - debugger; -} - -var test = function() { - SourcesTestRunner.startDebuggerTest(step1, true); - - function injectedFunction() { - var injectedObj = { - func: function() { - throw new Error('injectedObj.func'); - } - }; - return injectedObj.func(); - } - - function step1() { - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); - } - - function step2() { - TestRunner.evaluateInPage(String(injectedFunction), step3); - } - - function step3() { - ConsoleTestRunner.evaluateInConsole('injectedFunction()', step4); - } - - function step4() { - ConsoleTestRunner.evaluateInConsole('localObj.func()', step5); - } - - function step5() { - ConsoleTestRunner.evaluateInConsole('globalObj.func()', dumpConsoleMessages); - } - - function dumpConsoleMessages() { - TestRunner.deprecatedRunAfterPendingDispatches(() => { - TestRunner.addResult('Dumping console messages:\n'); - ConsoleTestRunner.dumpConsoleMessages(); - SourcesTestRunner.completeDebuggerTest(); - }); - } -}; -//# sourceURL=test.js -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that evaluation in console that throws works fine when script is paused. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-eval-while-paused.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-eval-while-paused.html deleted file mode 100644 index e1b9dd6..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-eval-while-paused.html +++ /dev/null
@@ -1,60 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/console-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -var globalVar = { b: 1 }; - -function slave(x) -{ - var y = 20; - debugger; -} - -function testFunction() -{ - var localObject = { a: 300 }; - slave(4000); -} - -var test = function() { - SourcesTestRunner.startDebuggerTest(step1); - - function step1() { - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); - } - - function step2(callFrames) { - ConsoleTestRunner.evaluateInConsole('x + y + globalVar.b', step3.bind(null, callFrames)); - } - - function step3(callFrames, result) { - TestRunner.addResult('Evaluated script on the top frame: ' + result); - var pane = self.runtime.sharedInstance(Sources.CallStackSidebarPane); - pane._list.selectItem(pane._list._model.at(1)); - TestRunner.deprecatedRunAfterPendingDispatches(step4); - } - - function step4() { - ConsoleTestRunner.evaluateInConsole('localObject.a + globalVar.b', step5); - } - - function step5(result) { - TestRunner.addResult('Evaluated script on the calling frame: ' + result); - SourcesTestRunner.completeDebuggerTest(); - } -}; - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that evaluation in console works fine when script is paused. It also checks that -stack and global variables are accessible from the console. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-mute-exception.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-mute-exception.html deleted file mode 100644 index 947e7bc..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-mute-exception.html +++ /dev/null
@@ -1,59 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function throwAnException() -{ - var a; - try { - a.foo = 1; // Should not stop here. - } catch (e) { - } - - debugger; // Should not stop here. - - try { - a.bar = 1; // Should stop here. - } catch (e) { - } -} - -function handleClick() -{ - throwAnException(); -} - -var test = function() { - SourcesTestRunner.startDebuggerTest(step1); - - function step1() { - TestRunner.DebuggerAgent.setPauseOnExceptions(SDK.DebuggerModel.PauseOnExceptionsState.PauseOnAllExceptions); - SourcesTestRunner.showScriptSource('debugger-mute-exception.html', step2); - } - - function step2(sourceFrame) { - TestRunner.addResult('Script source was shown.'); - SourcesTestRunner.setBreakpoint(sourceFrame, 10, 'false', true); - SourcesTestRunner.setBreakpoint(sourceFrame, 14, 'false', true); - TestRunner.evaluateInPage('setTimeout(handleClick, 0)'); - SourcesTestRunner.waitUntilPausedAndDumpStackAndResume(step3); - } - - function step3() { - TestRunner.DebuggerAgent.setPauseOnExceptions(SDK.DebuggerModel.PauseOnExceptionsState.DontPauseOnExceptions); - SourcesTestRunner.completeDebuggerTest(); - } -}; - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that pause on exception is muted when conditional breakpoint is set to "false". -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-no-nested-pause.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-no-nested-pause.html deleted file mode 100644 index cf5952e5..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-no-nested-pause.html +++ /dev/null
@@ -1,43 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/console-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function testFunction() -{ - testFunction.invocationCount++; - debugger; -} - -testFunction.invocationCount = 0; - -var test = function() { - SourcesTestRunner.startDebuggerTest(step1); - - function step1() { - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); - } - - function step2() { - ConsoleTestRunner.evaluateInConsole('testFunction(); testFunction.invocationCount', step3); - TestRunner.addResult('Set timer for test function.'); - } - - function step3(result) { - TestRunner.addResult('testFunction.invocationCount = ' + result); - SourcesTestRunner.completeDebuggerTest(); - } -}; - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that debugger will skip breakpoint hit when script execution is already paused. <a href="https://bugs.webkit.org/show_bug.cgi?id=41768">See bug</a> -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-in-eval-script.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-in-eval-script.html deleted file mode 100644 index ed0954d..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-in-eval-script.html +++ /dev/null
@@ -1,38 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - - -var test = function() { - var scriptToEvaluate = 'function testFunction() {\n' + - ' debugger;\n' + - '}\n' + - 'setTimeout(testFunction, 0);\n'; - - SourcesTestRunner.startDebuggerTest(step1); - - function step1() { - TestRunner.evaluateInPage( - scriptToEvaluate, TestRunner.addResult.bind(InspectorTest, 'Evaluated script in console.')); - SourcesTestRunner.waitUntilPaused(step2); - } - - function step2(callFrames) { - SourcesTestRunner.captureStackTrace(callFrames); - SourcesTestRunner.completeDebuggerTest(); - } -}; - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that debugger will stop on "debugger" statement in a function that was added -to the inspected page via evaluation in Web Inspector console.<a href="https://bugs.webkit.org/show_bug.cgi?id=41058">Bug 41058</a> -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-in-internal.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-in-internal.html deleted file mode 100644 index 9b3d507..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-in-internal.html +++ /dev/null
@@ -1,46 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function throwException() -{ - new Function("return ()"); -} - -function handleClick() -{ - throwException(); -} - -var test = function() { - SourcesTestRunner.startDebuggerTest(step1); - - function step1() { - TestRunner.DebuggerAgent.setPauseOnExceptions(SDK.DebuggerModel.PauseOnExceptionsState.PauseOnUncaughtExceptions); - SourcesTestRunner.showScriptSource('debugger-pause-in-internal.html', step2); - } - - function step2() { - TestRunner.addResult('Script source was shown.'); - TestRunner.evaluateInPage('setTimeout(handleClick, 0)'); - SourcesTestRunner.waitUntilPaused(step3); - } - - function step3(callFrames) { - SourcesTestRunner.captureStackTrace(callFrames); - SourcesTestRunner.completeDebuggerTest(); - } -}; - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that pause on exception in internal script does not crash. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-on-debugger-statement.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-on-debugger-statement.html deleted file mode 100644 index 3740845..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-on-debugger-statement.html +++ /dev/null
@@ -1,33 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function testFunction() -{ - debugger; -} - -var test = function() { - SourcesTestRunner.startDebuggerTest(step1); - - function step1() { - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); - } - - function step2() { - SourcesTestRunner.completeDebuggerTest(); - } -}; - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that debugger will stop on "debugger" statement. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-on-exception.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-on-exception.html deleted file mode 100644 index 857aae0..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-on-exception.html +++ /dev/null
@@ -1,46 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function throwAnException() -{ - return unknown_var; -} - -function handleClick() -{ - throwAnException(); -} - -var test = function() { - SourcesTestRunner.startDebuggerTest(step1); - - function step1() { - TestRunner.DebuggerAgent.setPauseOnExceptions(SDK.DebuggerModel.PauseOnExceptionsState.PauseOnUncaughtExceptions); - SourcesTestRunner.showScriptSource('debugger-pause-on-exception.html', step2); - } - - function step2() { - TestRunner.addResult('Script source was shown.'); - TestRunner.evaluateInPage('setTimeout(handleClick, 0)'); - SourcesTestRunner.waitUntilPausedAndDumpStackAndResume(step3); - } - - function step3() { - TestRunner.DebuggerAgent.setPauseOnExceptions(SDK.DebuggerModel.PauseOnExceptionsState.DontPauseOnExceptions); - SourcesTestRunner.completeDebuggerTest(); - } -}; - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that pause on exception works. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-on-failed-assertion.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-on-failed-assertion.html deleted file mode 100644 index 848a456..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-on-failed-assertion.html +++ /dev/null
@@ -1,46 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function failAssertion() -{ - console.assert(false); -} - -function handleClick() -{ - failAssertion(); -} - -var test = function() { - SourcesTestRunner.startDebuggerTest(step1); - - function step1() { - TestRunner.DebuggerAgent.setPauseOnExceptions(SDK.DebuggerModel.PauseOnExceptionsState.PauseOnUncaughtExceptions); - SourcesTestRunner.showScriptSource('debugger-pause-on-failed-assertion.html', step2); - } - - function step2() { - TestRunner.addResult('Script source was shown.'); - TestRunner.evaluateInPage('setTimeout(handleClick, 0)'); - SourcesTestRunner.waitUntilPaused(step3); - } - - function step3(callFrames) { - SourcesTestRunner.captureStackTrace(callFrames); - SourcesTestRunner.completeDebuggerTest(); - } -}; - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that debugger breaks on failed assertion when pause on exception mode is enabled. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-on-promise-rejection.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-on-promise-rejection.html deleted file mode 100644 index cb6ffeea..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-on-promise-rejection.html +++ /dev/null
@@ -1,85 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function createPromise() -{ - var result = {}; - var p = new Promise(function(resolve, reject) { - result.resolve = resolve; - result.reject = reject; - }); - result.promise = p; - return result; -} - -function testFunction() -{ - var resolved = createPromise(); - var caught = createPromise(); - var uncaught = createPromise(); - - caught.promise - .then(function c1() {}) - .then(function c2() {}) - .catch(function c3() {}); - uncaught.promise - .then(function f1() {}) - .then(function f2() {}) - .then(function f3() {}); // Last is uncaught. - - resolved.resolve(42); // Should not pause. - caught.reject(new Error("caught")); - uncaught.reject(new Error("uncaught")); -} - -var test = function() { - SourcesTestRunner.setQuiet(true); - SourcesTestRunner.startDebuggerTest(step1); - - function waitUntilPausedNTimes(count, callback) { - function inner() { - if (count--) - SourcesTestRunner.waitUntilPausedAndDumpStackAndResume(inner); - else - callback(); - } - inner(); - } - - function step1() { - TestRunner.DebuggerAgent.setPauseOnExceptions(SDK.DebuggerModel.PauseOnExceptionsState.PauseOnUncaughtExceptions); - SourcesTestRunner.showScriptSource('debugger-pause-on-promise-rejection.html', step2); - } - - function step2() { - TestRunner.addResult('=== Pausing only on uncaught exceptions ==='); - SourcesTestRunner.runTestFunction(); - waitUntilPausedNTimes(1, step3); - } - - function step3() { - TestRunner.DebuggerAgent.setPauseOnExceptions(SDK.DebuggerModel.PauseOnExceptionsState.PauseOnAllExceptions); - TestRunner.addResult('\n=== Pausing on all exceptions ==='); - SourcesTestRunner.runTestFunction(); - waitUntilPausedNTimes(2, step4); - } - - function step4() { - TestRunner.DebuggerAgent.setPauseOnExceptions(SDK.DebuggerModel.PauseOnExceptionsState.DontPauseOnExceptions); - SourcesTestRunner.completeDebuggerTest(); - } -}; - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that pause on promise rejection works. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-with-overrides.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-with-overrides.html deleted file mode 100644 index b558076..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-pause-with-overrides.html +++ /dev/null
@@ -1,35 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function testFunction() -{ - String = "aa"; - debugger; -} - -var test = function() { - SourcesTestRunner.startDebuggerTest(step1); - - function step1() { - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); - } - - function step2(callFrames) { - SourcesTestRunner.captureStackTrace(callFrames); - SourcesTestRunner.completeDebuggerTest(); - } -}; - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that debugger will stop on "debugger" statement w/ overriden string, etc. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-resume-button-in-overlay.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-resume-button-in-overlay.html deleted file mode 100644 index 81eafd3..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/debugger-resume-button-in-overlay.html +++ /dev/null
@@ -1,58 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/console-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function testFunction() -{ - debugger; -} - -function clickAt(x, y) -{ - eventSender.mouseMoveTo(x, y); - eventSender.mouseDown(); - eventSender.mouseUp(); -} - -var test = function() { - SourcesTestRunner.startDebuggerTest(step1); - - function step1() { - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); - } - - function inOverlay() { - var resumeButton = document.getElementById('resume-button'); - var centerX = resumeButton.offsetLeft + resumeButton.offsetWidth / 2; - var centerY = resumeButton.offsetTop + resumeButton.offsetHeight / 2; - return JSON.stringify({x: centerX, y: centerY}); - } - - function step2(callFrames) { - TestRunner.evaluateFunctionInOverlay(inOverlay, step3); - } - - function step3(val) { - TestRunner.addResult('Make a click'); - var resumeButtonCenter = JSON.parse(val); - SourcesTestRunner.waitUntilResumed(step4); - ConsoleTestRunner.evaluateInConsole('clickAt(' + resumeButtonCenter.x + ', ' + resumeButtonCenter.y + ');'); - } - - function step4() { - SourcesTestRunner.completeDebuggerTest(); - } -}; - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that resume button in overlay works -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/eval-on-pause-blocked.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/eval-on-pause-blocked.html deleted file mode 100644 index 659727ba..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/eval-on-pause-blocked.html +++ /dev/null
@@ -1,40 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/console-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<meta http-equiv="Content-Security-Policy" content="script-src 'unsafe-inline'"> -<script> -function testFunction() -{ - var foo = 2012; - debugger; -} - -var test = function() { - SourcesTestRunner.startDebuggerTest(step1); - - function step1() { - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); - } - - function step2() { - ConsoleTestRunner.evaluateInConsole('foo', step3); - } - - function step3(result) { - TestRunner.addResult('Evaluated in console in the top frame context: foo = ' + result); - SourcesTestRunner.completeDebuggerTest(); - } -}; - -</script> -</head> -<body onload="runTest()"> -<p> -Test that evaluation in the context of top frame will not be blocked by Content-Security-Policy. -<a href="https://bugs.webkit.org/show_bug.cgi?id=77203">Bug 77203.</a> -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/function-name-in-callstack.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/function-name-in-callstack.html deleted file mode 100644 index 402c19ff..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/function-name-in-callstack.html +++ /dev/null
@@ -1,56 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> -var foo = function () -{ - debugger; -} - -foo.displayName = 'foo.displayName'; -Object.defineProperty(foo, 'name', { value: 'foo.function.name' } ); - -var bar = function() -{ - foo(); -} - -bar.displayName = 'bar.displayName'; - -var baz = function() -{ - bar(); -} - -Object.defineProperty(baz, 'name', { value: 'baz.function.name' } ); - -function testFunction() -{ - baz(); -} - -function test() { - SourcesTestRunner.startDebuggerTest(step1); - - function step1() { - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); - } - - function step2(callFrames) { - TestRunner.addResult('callFrames.length = ' + callFrames.length); - for (var i = 0; i < callFrames.length; ++i) - TestRunner.addResult('functionName: ' + callFrames[i].functionName); - SourcesTestRunner.completeDebuggerTest(); - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that callFrames on pause contains function name taking into account displayName and Function.name. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/pause-in-inline-script.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/pause-in-inline-script.html deleted file mode 100644 index a38224e..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/pause-in-inline-script.html +++ /dev/null
@@ -1,91 +0,0 @@ -<html> -<head> -<script>function foo() { }; -</script> -<script> -function bar() { }; -</script><script>function f1() { debugger; }</script> -<script> -function f2() { return f1(); } -</script> - -<script type="module"> -function f3() -{ - return f2(); -} -f3(); -</script> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> - -<script> - -var test = function() { - var testName = TestRunner.mainTarget.inspectedURL(); - testName = testName.substring(testName.lastIndexOf('/') + 1); - - SourcesTestRunner.startDebuggerTest(step1); - - function step1() { - TestRunner.addResult('Did load front-end'); - TestRunner.addResult('Paused: ' + !!TestRunner.debuggerModel.debuggerPausedDetails()); - TestRunner.reloadPage(didReload.bind(this)); - TestRunner.debuggerModel.addEventListener(SDK.DebuggerModel.Events.DebuggerPaused, didPauseAfterReload, this); - } - - function didReload() { - TestRunner.addResult('didReload'); - SourcesTestRunner.completeDebuggerTest(); - } - - function didPauseAfterReload(details) { - TestRunner.addResult('didPauseAfterReload'); - TestRunner.addResult('Source strings corresponding to the call stack:'); - dumpNextCallFrame(didDump); - } - - var callFrameIndex = 0; - function dumpNextCallFrame(next) { - var callFrames = TestRunner.debuggerModel.callFrames; - if (callFrameIndex === callFrames.length) { - next(); - return; - } - var frame = callFrames[callFrameIndex]; - var uiLocation = Bindings.debuggerWorkspaceBinding.rawLocationToUILocation(frame.location()); - SourcesTestRunner.showUISourceCode(uiLocation.uiSourceCode, dumpCallFrameLine); - - function dumpCallFrameLine(sourceFrame) { - var resourceText = sourceFrame._textEditor.text(); - var lines = resourceText.split('\n'); - var lineNumber = uiLocation.lineNumber; - TestRunner.addResult( - 'Frame ' + callFrameIndex + ') line ' + lineNumber + ', content: ' + lines[lineNumber] + - ' (must be part of function \'' + frame.functionName + '\')'); - callFrameIndex++; - dumpNextCallFrame(next); - } - } - - function didDump() { - SourcesTestRunner.resumeExecution(didResume); - } - - function didResume() { - TestRunner.addResult('didResume'); - } -}; -</script> - -</head> - -<body onload="runTest()"> -<p> -Tests that main resource script text is correct when paused in inline script on reload. -<a href="https://bugs.webkit.org/show_bug.cgi?id=77548">Bug 77548.</a> -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/pause-in-internal-script.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/pause-in-internal-script.html deleted file mode 100644 index 5286893..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/pause-in-internal-script.html +++ /dev/null
@@ -1,50 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> - -<script> - -function testFunction() -{ - var array = [2, 5, 7]; - var sum = 0; - array.forEach(function(key) - { - sum += array[key]; - }); - return sum; -} - -function test() { - SourcesTestRunner.runDebuggerTestSuite([function testSetBreakpoint(next) { - SourcesTestRunner.showScriptSource('pause-in-internal-script.html', didShowScriptSource); - - var breakpointFunctionFrame = null; - - function didShowScriptSource(sourceFrame) { - breakpointFunctionFrame = sourceFrame; - TestRunner.addResult('Script source was shown.'); - SourcesTestRunner.setBreakpoint(sourceFrame, 13, '', true); - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(didPause); - } - - function didPause(callFrames) { - SourcesTestRunner.captureStackTrace(callFrames); - SourcesTestRunner.removeBreakpoint(breakpointFunctionFrame, 13); - next(); - } - }]); -}; - -</script> - -</head> - -<body onload="runTest()"> -<p>Tests that internal scripts unknown to front-end are processed correctly when appear in debugger call frames. -<a href="https://bugs.webkit.org/show_bug.cgi?id=64995">Bug 64995</a> -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/pause-on-elements-panel.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/pause-on-elements-panel.html deleted file mode 100644 index 41aa20d..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/pause-on-elements-panel.html +++ /dev/null
@@ -1,55 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function callback() -{ - return 0; -} - -function test() { - SourcesTestRunner.startDebuggerTest(step1, true); - - function step1() { - UI.inspectorView.showPanel('sources').then(step2); - } - - function step2() { - ElementsTestRunner.nodeWithId('test', step3); - } - - function step3(node) { - TestRunner.assertTrue(!!node); - TestRunner.evaluateInPage('setTimeout(callback, 200)', step4.bind(null, node)); - } - - function step4(node) { - TestRunner.assertTrue(!UI.panels.sources.paused()); - SourcesTestRunner.togglePause(); - - // This used to skip the pause request (the test used to timeout). - node.highlight(); - - SourcesTestRunner.waitUntilPaused(step5); - } - - function step5(callFrames) { - SourcesTestRunner.captureStackTrace(callFrames); - TestRunner.addResult('PASS: Debugger paused.'); - SourcesTestRunner.completeDebuggerTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<div id="test"></div> -<p> -Tests that debugger pause button works on Elements panel after a DOM node highlighting. <a href="https://code.google.com/p/chromium/issues/detail?id=433366">Chromium bug 433366</a> -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/skip-pauses-until-reload.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/skip-pauses-until-reload.html deleted file mode 100644 index a1394d1..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-pause/skip-pauses-until-reload.html +++ /dev/null
@@ -1,140 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function testFunction() -{ - console.log("Begin"); - debugger; // Reload follows, nothing below should break. - console.log("Middle: Breakpoint 1"); // Breakpoint - console.log("Middle: Breakpoint 2"); // Breakpoint - console.assert(false, "Assertion failed!"); - console.error("Some console.error message"); - debugger; // Should skip this also. - var element = document.getElementById("element"); - var parent = element.parentElement; - var child = document.createElement("span"); - element.setAttribute("foo", "bar"); // DOM breakpoint: AttributeModified - element.appendChild(child); // DOM breakpoint: SubtreeModified - parent.removeChild(element); // DOM breakpoint: NodeRemoved - parent.appendChild(element); - element.click(); // Event breakpoint - console.log("End"); - // Should be last. - eval("throwException()"); -} - -function throwException() -{ - function inner() - { - try { - if (window.foo === 1) - throw new Error("error message"); - } finally { - ++window.foo; - } - } - try { - window.foo = 1; - inner(); - } finally { - ++window.foo; - } -} - -function test() { - SourcesTestRunner.startDebuggerTest(step1); - - function step1() { - SourcesTestRunner.showScriptSource('skip-pauses-until-reload.html', didShowScriptSource); - } - - function didShowScriptSource(sourceFrame) { - TestRunner.addResult('Script source was shown.'); - TestRunner.addResult('Set up breakpoints.'); - SourcesTestRunner.setBreakpoint(sourceFrame, 11, '', true); - SourcesTestRunner.setBreakpoint(sourceFrame, 12, '', true); - TestRunner.addResult('Set up to pause on all exceptions.'); - // FIXME: Test is flaky with PauseOnAllExceptions due to races in debugger. - TestRunner.DebuggerAgent.setPauseOnExceptions(SDK.DebuggerModel.PauseOnExceptionsState.DontPauseOnExceptions); - ElementsTestRunner.nodeWithId('element', didResolveNode); - testRunner.logToStderr('didShowScriptSource'); - } - - function didResolveNode(node) { - testRunner.logToStderr('didResolveNode'); - TestRunner.addResult('Set up DOM breakpoints.'); - TestRunner.domDebuggerModel.setDOMBreakpoint(node, SDK.DOMDebuggerModel.DOMBreakpoint.Type.SubtreeModified); - TestRunner.domDebuggerModel.setDOMBreakpoint(node, SDK.DOMDebuggerModel.DOMBreakpoint.Type.AttributeModified); - TestRunner.domDebuggerModel.setDOMBreakpoint(node, SDK.DOMDebuggerModel.DOMBreakpoint.Type.NodeRemoved); - setUpEventBreakpoints(); - } - - function setUpEventBreakpoints() { - testRunner.logToStderr('setUpEventBreakpoints'); - TestRunner.addResult('Set up Event breakpoints.'); - SourcesTestRunner.setEventListenerBreakpoint('listener:click', true); - TestRunner.deprecatedRunAfterPendingDispatches(didSetUp); - } - - function didSetUp() { - testRunner.logToStderr('didSetUp'); - TestRunner.addResult('Did set up.'); - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(didPause); - } - - function didPause(callFrames) { - testRunner.logToStderr('didPause'); - SourcesTestRunner.captureStackTrace(callFrames); - TestRunner.DebuggerAgent.setSkipAllPauses(true).then(didSetSkipAllPauses); - } - - function didSetSkipAllPauses() { - testRunner.logToStderr('didSetSkipAllPauses'); - TestRunner.addResult('Set up to skip all pauses.'); - doReloadPage(); - } - - function doReloadPage() { - testRunner.logToStderr('doReloadPage'); - TestRunner.addResult('Reloading the page...'); - SourcesTestRunner.waitUntilPausedNextTime(didPauseAfterReload); - TestRunner.reloadPage(didReloadPage); - } - - function didReloadPage() { - testRunner.logToStderr('didReloadPage'); - TestRunner.addResult('PASS: Reloaded without hitting breakpoints.'); - completeTest(); - } - - function didPauseAfterReload(callFrames) { - testRunner.logToStderr('didPauseAfterReload'); - TestRunner.addResult('FAIL: Should not pause while reloading the page!'); - SourcesTestRunner.captureStackTrace(callFrames); - SourcesTestRunner.waitUntilPausedNextTime(didPauseAfterReload); - SourcesTestRunner.resumeExecution(); - } - - function completeTest() { - testRunner.logToStderr('completeTest'); - SourcesTestRunner.setEventListenerBreakpoint('listener:click', false); - SourcesTestRunner.completeDebuggerTest(); - } -}; - -</script> - -</head> - -<body onload="runTest()"> -<p>Tests that 'skip all pauses' mode blocks breakpoint and gets cancelled right at page reload. -</p> - -<div id="element" onclick="return 0;"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-in-ignore-injected-script.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-in-ignore-injected-script.html deleted file mode 100644 index e84b592..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-in-ignore-injected-script.html +++ /dev/null
@@ -1,36 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> -function testFunction() -{ - debugger; - console.log(123); - return 239; // stack result should point here -} -</script> -<script> - -function test() { - SourcesTestRunner.startDebuggerTestPromise(/* quiet */ true) - .then(() => SourcesTestRunner.runTestFunctionAndWaitUntilPausedPromise()) - .then(() => stepIntoPromise()) - .then(() => stepIntoPromise()) - .then((callFrames) => SourcesTestRunner.captureStackTrace(callFrames)) - .then(() => SourcesTestRunner.completeDebuggerTest()); - - function stepIntoPromise() { - var cb; - var p = new Promise(fullfill => cb = fullfill); - SourcesTestRunner.stepInto(); - SourcesTestRunner.waitUntilResumed(() => SourcesTestRunner.waitUntilPaused(cb)); - return p; - } -} -</script> -</head> -<body onload="runTest()"> -<p>Tests that stepInto doesn't pause in InjectedScriptSource.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-in.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-in.html deleted file mode 100644 index c7a10a4f..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-in.html +++ /dev/null
@@ -1,47 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function d() -{ - var i = 10; -} - -function testFunction() -{ - debugger; - d(); -} - -var test = function() { - SourcesTestRunner.startDebuggerTest(step1); - - function step1() { - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); - } - - var stepCount = 0; - function step2(callFrames) { - SourcesTestRunner.captureStackTrace(callFrames); - if (stepCount < 2) { - TestRunner.addResult('Stepping into...'); - SourcesTestRunner.stepInto(); - SourcesTestRunner.waitUntilResumed(SourcesTestRunner.waitUntilPaused.bind(InspectorTest, step2)); - } else - SourcesTestRunner.completeDebuggerTest(); - stepCount++; - } -}; - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests "step in" functionality in debugger. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-into-across-timeouts.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-into-across-timeouts.html deleted file mode 100644 index 708b98b..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-into-across-timeouts.html +++ /dev/null
@@ -1,57 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function testFunction() -{ - setTimeout(callback1, 0); -} - -function callback1() -{ - setTimeout(callback2, 0); - debugger; -} - -function callback2() -{ - var dummy = 42; // Should pause here. - (function FAIL_Should_Not_Pause_Here() { debugger; })(); - - if (window.testRunner) - testRunner.evaluateInWebInspector(0, "(SourcesTestRunner.completeDebuggerTest())") -} - -var test = function() { - SourcesTestRunner.startDebuggerTest(step1, true); - - function step1() { - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); - } - - function step2() { - var actions = [ - 'Print', // "debugger" in callback1 - 'StepInto', - 'StepInto', - 'Print', - ]; - SourcesTestRunner.waitUntilPausedAndPerformSteppingActions(actions, resume); - } - - function resume() { - SourcesTestRunner.resumeExecution(SourcesTestRunner.waitUntilPaused.bind(InspectorTest, resume)); - } -}; - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that debugger StepInto will stop inside next timeout handler. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-into-custom-element-callbacks.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-into-custom-element-callbacks.html deleted file mode 100644 index e2a8d39b..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-into-custom-element-callbacks.html +++ /dev/null
@@ -1,107 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function testFunction() -{ - var proto = Object.create(HTMLElement.prototype); - proto.createdCallback = function createdCallback() - { - output('Invoked createdCallback.'); - }; - proto.attachedCallback = function attachedCallback() - { - output('Invoked attachedCallback.'); - }; - proto.detachedCallback = function detachedCallback() - { - output('Invoked detachedCallback.'); - }; - proto.attributeChangedCallback = function attributeChangedCallback() - { - output('Invoked attributeChangedCallback.'); - }; - var FooElement = document.registerElement('x-foo', { prototype: proto }); - debugger; - var foo = new FooElement(); - debugger; - foo.setAttribute('a', 'b'); - debugger; - document.body.appendChild(foo); - debugger; - foo.remove(); -} - -function test() { - SourcesTestRunner.startDebuggerTest(step1, true); - - function step1() { - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); - } - - function checkTopFrameFunction(callFrames, expectedName) { - var topFunctionName = callFrames[0].functionName; - if (expectedName === topFunctionName) - TestRunner.addResult('PASS: Did step into event listener(' + expectedName + ').'); - else - TestRunner.addResult('FAIL: Unexpected top function: expected ' + expectedName + ', found ' + topFunctionName); - } - - function stepOverThenIn(name, callback) { - TestRunner.addResult('Stepping to ' + name + '...'); - SourcesTestRunner.stepOver(); - SourcesTestRunner.waitUntilResumed(SourcesTestRunner.waitUntilPaused.bind(InspectorTest, function() { - TestRunner.addResult('Stepping into ' + name + '...'); - SourcesTestRunner.stepInto(); - SourcesTestRunner.waitUntilResumed(SourcesTestRunner.waitUntilPaused.bind(InspectorTest, callback)); - })); - } - - function step2() { - stepOverThenIn('constructor', step3); - } - - function step3(callFrames) { - checkTopFrameFunction(callFrames, 'createdCallback'); - SourcesTestRunner.resumeExecution(SourcesTestRunner.waitUntilPaused.bind(InspectorTest, step4)); - } - - function step4() { - stepOverThenIn('setAttribute', step5); - } - - function step5(callFrames) { - checkTopFrameFunction(callFrames, 'attributeChangedCallback'); - SourcesTestRunner.resumeExecution(SourcesTestRunner.waitUntilPaused.bind(InspectorTest, step6)); - } - - function step6() { - stepOverThenIn('attachedCallback', step7); - } - - function step7(callFrames) { - checkTopFrameFunction(callFrames, 'attachedCallback'); - SourcesTestRunner.resumeExecution(SourcesTestRunner.waitUntilPaused.bind(InspectorTest, step8)); - } - - function step8() { - stepOverThenIn('detachedCallback', step9); - } - - function step9(callFrames) { - checkTopFrameFunction(callFrames, 'detachedCallback'); - SourcesTestRunner.completeDebuggerTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that stepping into custom element methods will lead to a pause in the callbacks. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-into-document-write.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-into-document-write.html deleted file mode 100644 index b0e5e1f..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-into-document-write.html +++ /dev/null
@@ -1,53 +0,0 @@ -<html> -<head> -<script> - document.writeln("<script>\nfunction f1() {\n window.foo = true;\n}\nf1();\n <" + "/script>"); -</script> - -<script> - console.assert(window.foo, "FAIL"); -</script> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> - -<script> - -function test() { - var numberOfStepInto = 7; - - SourcesTestRunner.startDebuggerTest(step1, true); - - function step1() { - SourcesTestRunner.showScriptSource('debugger-step-into-document-write.html', step2); - } - - function step2(sourceFrame) { - TestRunner.addResult('Script source was shown.'); - SourcesTestRunner.setBreakpoint(sourceFrame, 3, '', true); - SourcesTestRunner.waitUntilPaused(step3); - TestRunner.reloadPage(completeTest); - } - - function step3() { - var actions = ['Print']; // First pause on breakpoint. - for (var i = 0; i < numberOfStepInto; ++i) - actions.push('StepInto', 'Print'); - actions.push('Resume'); - SourcesTestRunner.waitUntilPausedAndPerformSteppingActions(actions); - } - - function completeTest() { - SourcesTestRunner.completeDebuggerTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that debugger StepInto will step into inlined scripts created by document.write(). -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-into-event-listener.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-into-event-listener.html deleted file mode 100644 index 98c9f4da..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-into-event-listener.html +++ /dev/null
@@ -1,71 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function testFunction() -{ - var div = document.getElementById("myDiv"); - function fooEventHandler1() - { - div.textContent += "Recieved foo event(1)!\n"; - } - div.addEventListener("foo", fooEventHandler1); - - function fooEventHandler2() - { - div.textContent += "Recieved foo event(2)!\n"; - } - div.addEventListener("foo", fooEventHandler2); - - var e = new CustomEvent("foo"); - debugger; - div.dispatchEvent(e); -} - -var test = function() { - SourcesTestRunner.startDebuggerTest(step1, true); - - function step1() { - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); - } - - function checkTopFrameFunction(callFrames, expectedName, reason) { - var topFunctionName = callFrames[0].functionName; - if (expectedName === topFunctionName) - TestRunner.addResult('SUCCESS: Did step into event listener(' + expectedName + ').'); - else - TestRunner.addResult('FAIL: Unexpected top function: expected ' + expectedName + ', found ' + topFunctionName); - TestRunner.assertEquals(SDK.DebuggerModel.BreakReason.Other, reason, 'FAIL: wrong pause reason: ' + reason); - } - - var stepCount = 0; - function step2(callFrames, reason) { - if (stepCount === 2) - checkTopFrameFunction(callFrames, 'fooEventHandler1', reason); - else if (stepCount === 5) - checkTopFrameFunction(callFrames, 'fooEventHandler2', reason); - - if (stepCount < 5) { - TestRunner.addResult('Stepping into...'); - SourcesTestRunner.stepInto(); - SourcesTestRunner.waitUntilResumed(SourcesTestRunner.waitUntilPaused.bind(InspectorTest, step2)); - } else { - SourcesTestRunner.completeDebuggerTest(); - } - stepCount++; - } -}; - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that stepping into dispatchEvent() method will lead to a pause in the first event listener. -</p> -<div id="myDiv"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-into-inlined-scripts.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-into-inlined-scripts.html deleted file mode 100644 index 50ac1509..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-into-inlined-scripts.html +++ /dev/null
@@ -1,62 +0,0 @@ -<html> -<head> - -<script> -function f1() -{ - return 1; // Breakpoint. -} -f1(); -</script> - -<script> -function f2() -{ - return 2; -} -f2(); -</script> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> - -<script> - -function test() { - var numberOfStepInto = 6; - - SourcesTestRunner.startDebuggerTest(step1, true); - - function step1() { - SourcesTestRunner.showScriptSource('debugger-step-into-inlined-scripts.html', step2); - } - - function step2(sourceFrame) { - TestRunner.addResult('Script source was shown.'); - SourcesTestRunner.setBreakpoint(sourceFrame, 6, '', true); - SourcesTestRunner.waitUntilPaused(step3); - TestRunner.reloadPage(completeTest); - } - - function step3() { - var actions = ['Print']; // First pause on breakpoint. - for (var i = 0; i < numberOfStepInto; ++i) - actions.push('StepInto', 'Print'); - actions.push('Resume'); - SourcesTestRunner.waitUntilPausedAndPerformSteppingActions(actions); - } - - function completeTest() { - SourcesTestRunner.completeDebuggerTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that debugger StepInto will step through inlined scripts. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-out-across-timeouts.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-out-across-timeouts.html deleted file mode 100644 index d88f351..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-out-across-timeouts.html +++ /dev/null
@@ -1,57 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function testFunction() -{ - setTimeout(callback1, 0); -} - -function callback1() -{ - setTimeout(callback2, 0); - debugger; - return 1; -} - -function callback2() -{ - var dummy = 42; // Should pause here. - (function FAIL_Should_Not_Pause_Here() { debugger; })(); - - if (window.testRunner) - testRunner.evaluateInWebInspector(0, "(SourcesTestRunner.completeDebuggerTest())") -} - -var test = function() { - SourcesTestRunner.startDebuggerTest(step1, true); - - function step1() { - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); - } - - function step2() { - var actions = [ - 'Print', // "debugger" in callback1 - 'StepOut', - 'Print', - ]; - SourcesTestRunner.waitUntilPausedAndPerformSteppingActions(actions, resume); - } - - function resume() { - SourcesTestRunner.resumeExecution(SourcesTestRunner.waitUntilPaused.bind(InspectorTest, resume)); - } -}; - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that debugger StepOut will stop inside next timeout handler. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-out-custom-element-callbacks.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-out-custom-element-callbacks.html deleted file mode 100644 index eddd1aa..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-out-custom-element-callbacks.html +++ /dev/null
@@ -1,68 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function testFunction() -{ - var proto = Object.create(HTMLElement.prototype); - proto.createdCallback = function createdCallback() - { - debugger; - output('Invoked createdCallback.'); - }; - proto.attachedCallback = function attachedCallback() - { - output('Invoked attachedCallback.'); - }; - proto.detachedCallback = function detachedCallback() - { - output('Invoked detachedCallback.'); - }; - proto.attributeChangedCallback = function attributeChangedCallback() - { - output('Invoked attributeChangedCallback.'); - }; - var FooElement = document.registerElement('x-foo', { prototype: proto }); - var foo = new FooElement(); - foo.setAttribute('a', 'b'); - document.body.appendChild(foo); - foo.remove(); -} - -function test() { - SourcesTestRunner.startDebuggerTest(step1, true); - - function step1() { - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); - } - - function step2() { - var actions = [ - 'Print', // debugger; in createdCallback - 'StepOut', 'Print', // at foo.setAttribute() - 'StepInto', 'Print', // at attributeChangedCallback - 'StepOut', 'Print', // at document.body.appendChild() - 'StepInto', 'Print', // at attachedCallback - 'StepOut', 'Print', // at foo.remove() - 'StepInto', 'Print', // at detachedCallback - 'StepOut', 'Print', // at testFunction() return point - ]; - SourcesTestRunner.waitUntilPausedAndPerformSteppingActions(actions, step3); - } - - function step3() { - SourcesTestRunner.completeDebuggerTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests stepping out from custom element callbacks. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-out-document-write.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-out-document-write.html deleted file mode 100644 index 35336c54..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-out-document-write.html +++ /dev/null
@@ -1,61 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> - -<script> - document.writeln("<script>\nfunction f1() {\n window.foo1 = true;\n}\nf1();\n <" + "/script>"); -</script> -<script> - console.assert(window.foo1, "FAIL: foo1"); -</script> -<script> -function global1() -{ - debugger; - document.writeln("<script>\nfunction f2() {\n window.foo2 = true;\n}\nf2();\n <" + "/script>"); -} -var x = global1(); -</script> -<script> - console.assert(window.foo2, "FAIL: foo2"); -</script> - -<script> -function test() { - var numberOfStepOut = 5; - - SourcesTestRunner.startDebuggerTest(step1, true); - - function step1() { - SourcesTestRunner.showScriptSource('debugger-step-out-document-write.html', step2); - } - - function step2(sourceFrame) { - TestRunner.addResult('Script source was shown.'); - SourcesTestRunner.setBreakpoint(sourceFrame, 6, '', true); - SourcesTestRunner.waitUntilPaused(step3); - TestRunner.reloadPage(completeTest); - } - - function step3() { - var actions = ['Print']; // First pause on breakpoint. - for (var i = 0; i < numberOfStepOut; ++i) - actions.push('StepOut', 'Print'); - actions.push('Resume'); - SourcesTestRunner.waitUntilPausedAndPerformSteppingActions(actions); - } - - function completeTest() { - SourcesTestRunner.completeDebuggerTest(); - } -} -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that debugger StepOut will skip inlined scripts created by document.write(). -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-out-event-listener.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-out-event-listener.html deleted file mode 100644 index ec4033d..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-out-event-listener.html +++ /dev/null
@@ -1,87 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function testFunction() -{ - function inner() - { - var div = document.getElementById("myDiv"); - function fooEventHandler1() - { - div.textContent += "Recieved foo event(1)!\n"; - } - - function fooEventHandler2() - { - div.textContent += "Recieved foo event(2)!\n"; - } - - div.addEventListener("foo", fooEventHandler1); - div.addEventListener("foo", fooEventHandler2); - - var e = new CustomEvent("foo"); - debugger; - div.dispatchEvent(e); - - div.removeEventListener("foo", fooEventHandler1); - div.removeEventListener("foo", fooEventHandler2); - } - inner(); -} - -var test = function() { - SourcesTestRunner.startDebuggerTest(step1, true); - - function step1() { - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); - } - - function step2() { - var actions = [ - 'Print', // debugger; - 'StepInto', - 'StepInto', - 'StepInto', - 'Print', // at fooEventHandler1 - 'StepOut', - 'Print', // should be at fooEventHandler2 - 'StepOut', - 'Print', - ]; - SourcesTestRunner.waitUntilPausedAndPerformSteppingActions(actions, step3); - } - - function step3() { - SourcesTestRunner.resumeExecution(step4); - } - - function step4() { - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step5); - } - - function step5() { - var actions = [ - 'Print', // debugger; - 'StepOut', 'Print', // should be at inner() - ]; - SourcesTestRunner.waitUntilPausedAndPerformSteppingActions(actions, step6); - } - - function step6() { - SourcesTestRunner.completeDebuggerTest(); - } -}; - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that stepping out of an event listener will lead to a pause in the next event listener. -</p> -<div id="myDiv"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-out.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-out.html deleted file mode 100644 index 9e882a3..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-out.html +++ /dev/null
@@ -1,46 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function d() -{ - debugger; -} - -function testFunction() -{ - d(); -} - -var test = function() { - SourcesTestRunner.startDebuggerTest(step1); - - function step1() { - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); - } - - function step2(callFrames) { - SourcesTestRunner.captureStackTrace(callFrames); - TestRunner.addResult('Stepping out...'); - SourcesTestRunner.waitUntilResumed(SourcesTestRunner.waitUntilPaused.bind(InspectorTest, step3)); - SourcesTestRunner.stepOut(); - } - - function step3(callFrames) { - SourcesTestRunner.captureStackTrace(callFrames); - SourcesTestRunner.completeDebuggerTest(); - } -}; - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests "step out" functionality in debugger. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-over-across-timeouts.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-over-across-timeouts.html deleted file mode 100644 index f6dcf7d..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-over-across-timeouts.html +++ /dev/null
@@ -1,57 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function testFunction() -{ - setTimeout(callback1, 0); -} - -function callback1() -{ - setTimeout(callback2, 0); - debugger; -} - -function callback2() -{ - var dummy = 42; // Should pause here. - (function FAIL_Should_Not_Pause_Here() { debugger; })(); - - if (window.testRunner) - testRunner.evaluateInWebInspector(0, "(SourcesTestRunner.completeDebuggerTest())") -} - -var test = function() { - SourcesTestRunner.startDebuggerTest(step1, true); - - function step1() { - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); - } - - function step2() { - var actions = [ - 'Print', // "debugger" in callback1 - 'StepOver', - 'StepOver', - 'Print', - ]; - SourcesTestRunner.waitUntilPausedAndPerformSteppingActions(actions, resume); - } - - function resume() { - SourcesTestRunner.resumeExecution(SourcesTestRunner.waitUntilPaused.bind(InspectorTest, resume)); - } -}; - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that debugger StepOver will stop inside next timeout handler. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-over-document-write.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-over-document-write.html deleted file mode 100644 index 8eeb221c..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-over-document-write.html +++ /dev/null
@@ -1,53 +0,0 @@ -<html> -<head> -<script> - document.writeln("<script>\nfunction f1() {\n window.foo = true;\n}\nf1();\n <" + "/script>"); -</script> - -<script> - console.assert(window.foo, "FAIL"); -</script> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> - -<script> - -function test() { - var numberOfStepOver = 3; - - SourcesTestRunner.startDebuggerTest(step1, true); - - function step1() { - SourcesTestRunner.showScriptSource('debugger-step-over-document-write.html', step2); - } - - function step2(sourceFrame) { - TestRunner.addResult('Script source was shown.'); - SourcesTestRunner.setBreakpoint(sourceFrame, 3, '', true); - SourcesTestRunner.waitUntilPaused(step3); - TestRunner.reloadPage(completeTest); - } - - function step3() { - var actions = ['Print']; // First pause on breakpoint. - for (var i = 0; i < numberOfStepOver; ++i) - actions.push('StepOver', 'Print'); - actions.push('Resume'); - SourcesTestRunner.waitUntilPausedAndPerformSteppingActions(actions); - } - - function completeTest() { - SourcesTestRunner.completeDebuggerTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that debugger StepOver will skip inlined scripts created by document.write(). -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-over-inlined-scripts.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-over-inlined-scripts.html deleted file mode 100644 index 02d8eee..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-over-inlined-scripts.html +++ /dev/null
@@ -1,62 +0,0 @@ -<html> -<head> - -<script> -function f1() -{ - return 1; // Breakpoint. -} -f1(); -</script> - -<script> -function f2() -{ - return 2; -} -f2(); -</script> - -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> - -<script> - -function test() { - var numberOfStepOver = 4; - - SourcesTestRunner.startDebuggerTest(step1, true); - - function step1() { - SourcesTestRunner.showScriptSource('debugger-step-over-inlined-scripts.html', step2); - } - - function step2(sourceFrame) { - TestRunner.addResult('Script source was shown.'); - SourcesTestRunner.setBreakpoint(sourceFrame, 6, '', true); - SourcesTestRunner.waitUntilPaused(step3); - TestRunner.reloadPage(completeTest); - } - - function step3() { - var actions = ['Print']; // First pause on breakpoint. - for (var i = 0; i < numberOfStepOver; ++i) - actions.push('StepOver', 'Print'); - actions.push('Resume'); - SourcesTestRunner.waitUntilPausedAndPerformSteppingActions(actions); - } - - function completeTest() { - SourcesTestRunner.completeDebuggerTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that debugger StepOver will step through inlined scripts. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-over.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-over.html deleted file mode 100644 index fbf67c9..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-over.html +++ /dev/null
@@ -1,52 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function f() -{ - var i = 10; -} - -function d() -{ - debugger; - f(); -} - -function testFunction() -{ - d(); -} - -var test = function() { - SourcesTestRunner.startDebuggerTest(step1); - - function step1() { - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); - } - - var stepCount = 0; - function step2(callFrames) { - SourcesTestRunner.captureStackTrace(callFrames); - if (stepCount < 2) { - TestRunner.addResult('Stepping over...'); - SourcesTestRunner.stepOver(); - SourcesTestRunner.waitUntilResumed(SourcesTestRunner.waitUntilPaused.bind(InspectorTest, step2)); - } else - SourcesTestRunner.completeDebuggerTest(); - stepCount++; - } -}; - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests "step over" functionality in debugger. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-through-promises.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-through-promises.html deleted file mode 100644 index cc2a01d..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/debugger-step-through-promises.html +++ /dev/null
@@ -1,67 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function testFunction() -{ - Promise.resolve(42).then( - function p1() - { - debugger; - } - ).then( - function p2() - { - return window.foo || 1; - } - ).then( - function p3() - { - return window.foo || 2; - } - ).catch(function(e) { - console.error("FAIL: Unexpected exception: " + e); - }); -} - -function test() { - SourcesTestRunner.startDebuggerTest(step1, true); - - function step1() { - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); - } - - function step2() { - var actions = [ - 'Print', // debugger; at p1 - 'StepInto', - 'Print', - 'StepInto', - 'Print', // entered p2 - 'StepOver', - 'Print', - 'StepOver', - 'Print', // entered p3 - 'StepOver', - 'Print', - ]; - SourcesTestRunner.waitUntilPausedAndPerformSteppingActions(actions, step3); - } - - function step3() { - SourcesTestRunner.completeDebuggerTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<input type='button' onclick='testFunction()' value='Test'/> -<p> -Tests that debugger will step through Promise handlers while not stepping into V8 internal scripts. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/step-through-event-listeners.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/step-through-event-listeners.html deleted file mode 100644 index 0078c5a..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-step/step-through-event-listeners.html +++ /dev/null
@@ -1,82 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function listener1() -{ -} - -function listener2() -{ -} - -function listener3() -{ -} - -function addListenerAndClick() -{ - var element = document.getElementById("test"); - element.addEventListener("click", listener1, true); - element.addEventListener("click", listener2, true); - document.body.addEventListener("click", listener3, true); - document.body.addEventListener("click", listener3, false); - element.click(); -} - -function test() { - SourcesTestRunner.runDebuggerTestSuite([function testClickBreakpoint(next) { - SourcesTestRunner.setEventListenerBreakpoint('listener:click', true); - SourcesTestRunner.waitUntilPaused(paused1); - TestRunner.evaluateInPageWithTimeout('addListenerAndClick()'); - - function paused1(callFrames) { - SourcesTestRunner.captureStackTrace(callFrames); - SourcesTestRunner.resumeExecution(resumed1); - } - - function resumed1() { - SourcesTestRunner.waitUntilPaused(paused2); - } - - function paused2(callFrames) { - SourcesTestRunner.captureStackTrace(callFrames); - SourcesTestRunner.resumeExecution(resumed2); - } - - function resumed2() { - SourcesTestRunner.waitUntilPaused(paused3); - } - - function paused3(callFrames) { - SourcesTestRunner.captureStackTrace(callFrames); - SourcesTestRunner.resumeExecution(resumed3); - } - - function resumed3() { - SourcesTestRunner.waitUntilPaused(paused4); - } - - function paused4(callFrames) { - SourcesTestRunner.captureStackTrace(callFrames); - SourcesTestRunner.setEventListenerBreakpoint('listener:click', false); - SourcesTestRunner.resumeExecution(next); - } - }]); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Test that debugger will pause in all event listeners when corresponding breakpoint is set. -<a href="https://bugs.webkit.org/show_bug.cgi?id=77331">Bug 77331.</a> -</p> - -<input type=button id="test"></input> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/async-call-stack-async-function.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/async-call-stack-async-function.html deleted file mode 100644 index 4cf7b5d9..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/async-call-stack-async-function.html +++ /dev/null
@@ -1,47 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> -async function foo() -{ - await Promise.resolve(1); - await Promise.resolve(2); - debugger; -} - -async function boo() -{ - await Promise.resolve(3); - await foo(); -} - -async function testFunction() -{ - await Promise.resolve(4); - await boo(); -} -//# sourceURL=test.js -</script> -<script> -var test = function() { - TestRunner.DebuggerAgent.setAsyncCallStackDepth(200); - - SourcesTestRunner.startDebuggerTestPromise(/* quiet */ true) - .then(() => SourcesTestRunner.runTestFunctionAndWaitUntilPausedPromise()) - .then(() => dumpCallStackSidebarPane()) - .then(() => SourcesTestRunner.completeDebuggerTest()); - - function dumpCallStackSidebarPane() { - var pane = self.runtime.sharedInstance(Sources.CallStackSidebarPane); - for (var element of pane.contentElement.querySelectorAll('.call-frame-item')) - TestRunner.addResult(element.deepTextContent().replace(/VM\d+/g, 'VM')); - } -}; - -</script> -</head> -<body onload="runTest()"> -<p>Tests that call stack sidebar contains correct labels for async await functions.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/async-call-stack-url.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/async-call-stack-url.html deleted file mode 100644 index b421308a..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/async-call-stack-url.html +++ /dev/null
@@ -1,46 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script src="../debugger/resources/unformatted-async.js"></script> -<script> - -function testFunction() -{ - setTimeout(f2, 0); -} - -async function test() { - await TestRunner.DebuggerAgent.setAsyncCallStackDepth(200); - - var scriptFormatter = await SourcesTestRunner.scriptFormatter(); - - SourcesTestRunner.startDebuggerTest(step3); - - function step3() { - SourcesTestRunner.showScriptSource('unformatted-async.js', step4); - } - - function step4() { - TestRunner.addSniffer(Sources.ScriptFormatterEditorAction.prototype, '_updateButton', step5); - scriptFormatter._toggleFormatScriptSource(); - } - - function step5() { - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step6); - } - - function step6() { - var pane = self.runtime.sharedInstance(Sources.CallStackSidebarPane); - for (var element of pane.contentElement.querySelectorAll('.call-frame-item')) - TestRunner.addResult(element.deepTextContent().replace(/VM\d+/g, 'VM')); - SourcesTestRunner.completeDebuggerTest(); - } -} - -</script> -</head> -<body onload="runTest()"> -<p>Tests that call stack sidebar contains correct urls for call frames.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/break-on-empty-event-listener.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/break-on-empty-event-listener.html deleted file mode 100644 index 9dcdc5e..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/break-on-empty-event-listener.html +++ /dev/null
@@ -1,47 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function SHOULD_NOT_STOP_HERE() -{ - return 239; -} - -function addEmptyEventListenerAndClick() -{ - // this event listener won't execute any JS code. - var div = document.getElementById("myDiv"); - div.addEventListener("click", {}); - div.click(); - SHOULD_NOT_STOP_HERE(); - debugger; -} - -var test = function() { - SourcesTestRunner.startDebuggerTest(step1, true); - - function step1() { - var actions = ['Print']; - SourcesTestRunner.waitUntilPausedAndPerformSteppingActions(actions, step2); - SourcesTestRunner.setEventListenerBreakpoint('listener:click', true); - TestRunner.evaluateInPageWithTimeout('addEmptyEventListenerAndClick()'); - } - - function step2() { - SourcesTestRunner.setEventListenerBreakpoint('listener:click', false); - SourcesTestRunner.completeDebuggerTest(); - } -}; - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that scheduled pause is cleared after processing event with empty handler. -</p> -<div id="myDiv"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/break-on-set-timeout-with-syntax-error.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/break-on-set-timeout-with-syntax-error.html deleted file mode 100644 index 8c52f25..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/break-on-set-timeout-with-syntax-error.html +++ /dev/null
@@ -1,48 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script src="../../../http/tests/inspector/console-test.js"></script> -<script> - -function runSetTimeoutWithSyntaxError() -{ - setTimeout({}, 0); -} - -function executeSomeCode() -{ - debugger; // should stop here not earlier -} - -var test = function() { - SourcesTestRunner.startDebuggerTest(step1, true); - - function step1() { - SourcesTestRunner.setEventListenerBreakpoint('instrumentation:setTimeout.callback', true); - TestRunner.evaluateInPage( - 'runSetTimeoutWithSyntaxError()', ConsoleTestRunner.waitUntilMessageReceived.bind(this, step2)); - } - - function step2() { - var actions = ['Print']; - SourcesTestRunner.waitUntilPausedAndPerformSteppingActions(actions, step3); - TestRunner.evaluateInPage('executeSomeCode()'); - } - - function step3() { - SourcesTestRunner.setEventListenerBreakpoint('instrumentation:setTimeout.callback', false); - SourcesTestRunner.completeDebuggerTest(); - } -}; - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that scheduled pause is cleared after processing event with empty handler. -</p> -<div id="myDiv"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/callstack-placards-discarded.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/callstack-placards-discarded.html deleted file mode 100644 index eb0dcb7e..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/callstack-placards-discarded.html +++ /dev/null
@@ -1,68 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function testFunction() -{ - debugger; -} - -var test = function() { - SourcesTestRunner.runDebuggerTestSuite([ - function testCallStackPlacardsDiscarded(next) { - TestRunner.debuggerModel.addEventListener(SDK.DebuggerModel.Events.DebuggerPaused, didPause, this); - var previousCount = undefined; - function didPause(event) { - TestRunner.addResult('Received DebuggerPaused event.'); - var callFrame = event.data.callFrames[0]; - TestRunner.addResult('Function name: ' + callFrame.functionName); - var count = liveLocationsCount(); - if (previousCount !== undefined && count !== previousCount) - TestRunner.addResult('FAILED: Live locations count has changed!'); - previousCount = count; - } - - SourcesTestRunner.showScriptSource('callstack-placards-discarded.html', didShowScriptSource); - function didShowScriptSource(sourceFrame) { - TestRunner.addResult('Script source was shown.'); - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(didPause1); - } - function didPause1() { - SourcesTestRunner.resumeExecution(didResume1); - } - function didResume1() { - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(didPause2); - } - function didPause2() { - SourcesTestRunner.resumeExecution(didResume2); - } - function didResume2() { - next(); - } - }, - ]); - - function liveLocationsCount() { - var count = 0; - var infos = Object.values(TestRunner.debuggerModel.scripts) - .map(script => script[Bindings.DebuggerWorkspaceBinding._ScriptInfoSymbol]) - .filter(info => !!info); - infos.forEach(function(info) { - count += info._locations ? info._locations.size : 0; - }); - return count; - } -}; - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that RawSourceCode listeners count won't grow on each script pause. <a href="https://bugs.webkit.org/show_bug.cgi?id=70996">Bug 70996</a> -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/click-gutter-breakpoint.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/click-gutter-breakpoint.html deleted file mode 100644 index 5520db2..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/click-gutter-breakpoint.html +++ /dev/null
@@ -1,59 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script src="../debugger/resources/click-breakpoints.js"></script> -<script> -function test() { - function clickCodeMirrorLineNumber(lineNumber, isRemove, sourceFrame) { - var element = Array.from(document.getElementsByClassName('CodeMirror-linenumber')) - .filter(x => x.textContent === (lineNumber + 1).toString())[0]; - if (!element) { - TestRunner.addResult('CodeMirror Gutter Not Found:' + lineNumber); - SourcesTestRunner.completeDebuggerTest(); - return Promise.resolve(); - } - var rect = element.getBoundingClientRect(); - eventSender.mouseMoveTo(rect.left + rect.width / 2, rect.top + rect.height / 2); - eventSender.mouseDown(); - eventSender.mouseUp(); - if (!isRemove) - return new Promise( - resolve => TestRunner.addSniffer(sourceFrame.__proto__, '_breakpointWasSetForTest', resolve, false)); - return Promise.resolve(); - } - - Bindings.breakpointManager._storage._breakpoints = {}; - var panel = UI.panels.sources; - var scriptFormatter; - var formattedSourceFrame; - - SourcesTestRunner.startDebuggerTest( - () => SourcesTestRunner.showScriptSource('click-breakpoints.js', didShowScriptSource)); - - - function didShowScriptSource(sourceFrame) { - clickCodeMirrorLineNumber(2, false, sourceFrame) - .then(() => clickCodeMirrorLineNumber(2, true, sourceFrame)) - .then(() => clickCodeMirrorLineNumber(3, false, sourceFrame)) - .then(runScript); - } - - function runScript() { - Promise - .all([ - SourcesTestRunner.waitBreakpointSidebarPane(), - new Promise(resolve => SourcesTestRunner.waitUntilPaused(resolve)) - ]) - .then(() => SourcesTestRunner.dumpBreakpointSidebarPane('while paused')) - .then(() => SourcesTestRunner.completeDebuggerTest()); - TestRunner.evaluateInPageWithTimeout('f2()'); - } -} -</script> -</head> -<body onload="runTest()"> -<p>Tests that breakpoints can be added and removed by clicking the gutter. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/continue-to-location-markers.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/continue-to-location-markers.html deleted file mode 100644 index 52b2d99..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/continue-to-location-markers.html +++ /dev/null
@@ -1,117 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - function foo1() { - return 10; - } - - function foo2() { - return {a:x => 2 * x}; - } - - async function bar1() { - return 10; - } - - async function bar2(x) { - return 2 * x; - } - - async function foo3() { - debugger; - var a = foo1() + foo1(); - var b = foo2(); - if (a) { - a = b.a(a); - } - - bar1().then((xxx, yyy) => console.log(xxx)); - bar1().then( (xxx, yyy) => console.log(xxx)); - bar1().then( (xxx, /*zzz*/ yyy /* xyz */) => console.log(xxx)); - bar1().then ( bar2 ); - bar1().then ( console.log() ); - bar1().then ( console.log ); - bar1().then(function(x) { - console.log(x); - }); - bar1().then( async /* comment */ function(x) { - console.log(x); - }); - bar1().then( async function(x) { - console.log(x); - }); - bar1().then(bar2.bind(null)); - bar1().then(() => bar2(5)); - bar1().then(async () => await bar2(5)); - bar1().then(async (x, y) => await bar2(x)); - setTimeout(bar1, 2000); - a = await bar1(); - bar1().then((x, - y) => console.log(x)); - bar1().then(( - x, y) => console.log(x)); - bar1().then(async ( - x, y) => console.log(x)); - bar1().then( - async (x, y) => console.log(x)); - bar1().then( - bar2); - bar1().then((bar2)); - bar1().then(Promise.resolve()); - bar1().then(Promise.resolve(42).then(bar2)); - bar1().then((Promise.resolve())); - - var False = false; - if (False) - bar1().then(bar2); - bar1().then(bar2); - - bar1().then(/* comment */ bar2.bind(null)); - return 10; - } -</script> -<script> - -function testFunction() -{ - foo3(); -} - -var test = function() { - SourcesTestRunner.startDebuggerTest(step1, true); - - function step1() { - TestRunner.addSnifferPromise(Sources.JavaScriptSourceFrame.prototype, '_continueToLocationRenderedForTest') - .then(step2); - TestRunner.addSniffer(Sources.JavaScriptSourceFrame.prototype, 'setExecutionLocation', function() { - SourcesTestRunner.showUISourceCodePromise(this.uiSourceCode()).then(() => { - this._showContinueToLocations(); - }); - }); - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(); - } - - function step2() { - var currentFrame = UI.panels.sources.visibleView; - var decorations = currentFrame._continueToLocationDecorations; - var lines = []; - for (var decoration of decorations.keysArray()) { - var find = decoration.find(); - var line = find.from.line; - var text = currentFrame.textEditor.line(line).substring(find.from.ch, find.to.ch); - lines.push(`${decoration.className} @${line + 1}:${find.from.ch} = '${text}'`); - } - lines.sort(); - TestRunner.addResults(lines); - SourcesTestRunner.completeDebuggerTest(); - } -}; - -</script> -</head> -<body onload="runTest()"> -<p>Tests that continue to location markers are computed correctly.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/copy-stack-trace.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/copy-stack-trace.html deleted file mode 100644 index 8424e7b..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/copy-stack-trace.html +++ /dev/null
@@ -1,45 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function testFunction() -{ - functionBar(); -} - -function functionBar() -{ - functionBaz(); -} - -function functionBaz() -{ - debugger; -} - -var test = function() { - SourcesTestRunner.startDebuggerTest(step1); - - function step1() { - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); - } - - function step2() { - InspectorFrontendHost.copyText = text => TestRunner.addResult(TestRunner.clearSpecificInfoFromStackFrames(text)); - self.runtime.sharedInstance(Sources.CallStackSidebarPane)._copyStackTrace(); - SourcesTestRunner.completeDebuggerTest(); - } -}; - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that debugger will copy valid stack trace upon context menu action. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/custom-element-lifecycle-events.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/custom-element-lifecycle-events.html deleted file mode 100644 index 2f9f814..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/custom-element-lifecycle-events.html +++ /dev/null
@@ -1,57 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/console-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function test() { - var setup = [ - 'var proto = Object.create(HTMLElement.prototype);', - 'proto.createdCallback = function() { output(\'Invoked createdCallback.\'); };', - 'proto.attachedCallback = function() { output(\'Invoked attachedCallback.\'); };', - 'proto.detachedCallback = function() { output(\'Invoked detachedCallback.\'); };', - 'proto.attributeChangedCallback = function() { output(\'Invoked attributeChangedCallback.\'); };', - 'CustomElement = document.registerElement(\'x-foo\', {prototype: proto});', - ].join('\n'); - - var lifecycleCallbacks = [ - 'created = new CustomElement();', - 'created.setAttribute(\'x\', \'1\');', - 'document.body.appendChild(created);', - 'created.remove();', - ].join('\n'); - - SourcesTestRunner.startDebuggerTest(step1); - - function step1() { - ConsoleTestRunner.evaluateInConsole(setup, function() { - TestRunner.addResult('Custom element registered.'); - ConsoleTestRunner.evaluateInConsoleAndDump('new CustomElement() instanceof CustomElement', step2); - }); - } - - function step2() { - ConsoleTestRunner.evaluateInConsole('debugger;'); - SourcesTestRunner.waitUntilPaused(step3); - } - - function step3() { - ConsoleTestRunner.evaluateInConsoleAndDump('new CustomElement() instanceof CustomElement', step4); - } - - function step4() { - ConsoleTestRunner.evaluateInConsole(lifecycleCallbacks, SourcesTestRunner.completeDebuggerTest); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that custom element lifecycle events fire while debugger is paused. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/debugger-expand-scope.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/debugger-expand-scope.html deleted file mode 100644 index 62dbf03..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/debugger-expand-scope.html +++ /dev/null
@@ -1,61 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function makeClosure(n) -{ - var makeClosureLocalVar = "local." + n; - return function innerFunction(x) - { - var innerFunctionLocalVar = x + 2; - var negInf = -Infinity; - var negZero = 1 / negInf; - try { - throw new Error("An exception"); - } catch (e) { - e.toString(); - debugger; - } - return n + makeClosureLocalVar + x + innerFunctionLocalVar; - } -} - -function testFunction() -{ - var f = makeClosure("TextParam"); - f(2010); -} - -function test() { - SourcesTestRunner.startDebuggerTest(onTestStarted); - - function onTestStarted() { - TestRunner.addSniffer( - Sources.ScopeChainSidebarPane.prototype, '_sidebarPaneUpdatedForTest', onSidebarRendered, true); - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(() => {}); - } - - function onSidebarRendered() { - SourcesTestRunner.expandScopeVariablesSidebarPane(onScopeVariablesExpanded); - } - - function onScopeVariablesExpanded() { - TestRunner.addResult(''); - SourcesTestRunner.dumpScopeVariablesSidebarPane(); - SourcesTestRunner.completeDebuggerTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<input type='button' onclick='testFunction()' value='Test'/> -<p> -Test that sections representing scopes of the current call frame are expandable -and contain correct data. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/debugger-inline-values.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/debugger-inline-values.html deleted file mode 100644 index 28d0b30..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/debugger-inline-values.html +++ /dev/null
@@ -1,62 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function testFunction() -{ - debugger; - var a = { k: 1 }; - var b = [1, 2, 3, 4, 5]; - var c = new Array(100); c[10] = 1; - a.k = 2; - a.l = window; - b[1]++; - b[2] = document.body; -} - -function test() { - SourcesTestRunner.startDebuggerTest(runTestFunction); - SourcesTestRunner.setQuiet(true); - - var stepCount = 0; - - function runTestFunction() { - TestRunner.addSniffer(Sources.JavaScriptSourceFrame.prototype, 'setExecutionLocation', onSetExecutionLocation); - TestRunner.evaluateInPage('setTimeout(testFunction, 0)'); - } - - function onSetExecutionLocation(uiLocation) { - TestRunner.deprecatedRunAfterPendingDispatches(dumpAndContinue.bind(null, this.textEditor, uiLocation.lineNumber)); - } - - function dumpAndContinue(textEditor, lineNumber) { - TestRunner.addResult('=========== 8< =========='); - for (var i = 8; i < 18; ++i) { - var output = ['[' + (i < 10 ? ' ' : '') + i + ']']; - output.push(i == lineNumber ? '>' : ' '); - output.push(textEditor.line(i)); - output.push('\t'); - textEditor._decorations.get(i).forEach(decoration => output.push(decoration.element.deepTextContent())); - TestRunner.addResult(output.join(' ')); - } - - TestRunner.addSniffer(Sources.JavaScriptSourceFrame.prototype, 'setExecutionLocation', onSetExecutionLocation); - if (++stepCount < 10) - SourcesTestRunner.stepOver(); - else - SourcesTestRunner.completeDebuggerTest(); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests inline values rendering in the sources panel. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/debugger-save-to-temp-var.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/debugger-save-to-temp-var.html deleted file mode 100644 index 4c9f1e5..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/debugger-save-to-temp-var.html +++ /dev/null
@@ -1,101 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/console-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -var thisObj; - -function testFunction() -{ - function inner() - { - debugger; - } - - thisObj = { foo: 42, __proto__: null }; - for (var i = 1; i < 6; ++i) - thisObj["temp" + i] = "FAIL"; - - inner.call(thisObj); -} - -function checkThisObject() -{ - for (var key in thisObj) { - if (key === "foo") - console.assert(thisObj[key] === 42); - else if (key.substr(0, 4) === "temp") - console.assert(thisObj[key] === "FAIL"); - else - console.error("FAIL: Unexpected property " + key); - } -} - -function onload() -{ - for (var i = 3; i < 8; ++i) - window["temp" + i] = "Reserved"; - - runTest(); -} - -function test() { - var expressions = [ - '42', '\'foo string\'', 'NaN', 'Infinity', '-Infinity', '-0', '[1, 2, NaN, -0, null, undefined]', - '({ foo: \'bar\' })', '(function(){ return arguments; })(1,2,3,4)', '(function func() {})', 'new Error(\'errr\')' - ]; - - SourcesTestRunner.setQuiet(true); - SourcesTestRunner.startDebuggerTest(step1); - - TestRunner.addResult('Number of expressions: ' + expressions.length); - TestRunner.addResult('Names [temp3..temp7] are reserved\n'); - - function step1() { - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(didPause); - } - - function didPause() { - evaluateNext(); - } - - function evaluateNext() { - var expression = expressions.shift(); - if (!expression) { - ConsoleTestRunner.waitForRemoteObjectsConsoleMessages(tearDown); - return; - } - - function didEvaluate(result) { - TestRunner.assertTrue(!result.exceptionDetails, 'FAIL: was thrown. Expression: ' + expression); - UI.panels.sources._saveToTempVariable(result.object); - ConsoleTestRunner.waitUntilNthMessageReceived(2, evaluateNext); - } - - UI.context.flavor(SDK.ExecutionContext) - .evaluate({expression: expression, objectGroup: 'console'}) - .then(didEvaluate); - } - - function tearDown() { - TestRunner.evaluateInPage('checkThisObject()', dumpConsoleMessages); - } - - function dumpConsoleMessages() { - ConsoleTestRunner.dumpConsoleMessagesIgnoreErrorStackFrames(); - SourcesTestRunner.completeDebuggerTest(); - } -} - -</script> -</head> - -<body onload="onload()"> -<p> -Tests saving objects to temporary variables while paused. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/error-in-watch-expressions.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/error-in-watch-expressions.html deleted file mode 100644 index 3f43d14..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/error-in-watch-expressions.html +++ /dev/null
@@ -1,37 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script> - -var foo = 123 - -var test = function() { - var watchExpressionsPane = self.runtime.sharedInstance(Sources.WatchExpressionsSidebarPane); - UI.panels.sources._sidebarPaneStack.showView(UI.panels.sources._watchSidebarPane).then(() => { - watchExpressionsPane.doUpdate(); - watchExpressionsPane._createWatchExpression('#$%'); - watchExpressionsPane._saveExpressions(); - TestRunner.deprecatedRunAfterPendingDispatches(step1); - }); - - - function step1() { - TestRunner.addResult( - watchExpressionsPane.contentElement.textContent.indexOf('<not available>') !== -1 ? 'SUCCESS' : 'FAILED'); - - // Clear watch expressions after execution. - watchExpressionsPane._deleteAllButtonClicked(); - TestRunner.completeTest(); - } -}; - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that watches pane renders errors in red. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/execution-context-sorted.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/execution-context-sorted.html deleted file mode 100644 index 46b83ef..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/execution-context-sorted.html +++ /dev/null
@@ -1,23 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script> - -function test() { - var contexts = TestRunner.runtimeModel.executionContexts(); - for (var c of contexts) - TestRunner.addResult(TestRunner.resourceTreeModel.frameForId(c.frameId).displayName()); - TestRunner.completeTest(); -} - -</script> -</head> - -<body onload="runTest()"> - <iframe src="../resources/execution-context-iframe1.html"></iframe> -<p> -Tests how execution context and target are selected. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/function-details.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/function-details.html deleted file mode 100644 index a116cc4..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/function-details.html +++ /dev/null
@@ -1,171 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> - -<script> function firstLineFunction() - -{ -} - - function notFirstLineFunction() - -{ -} - -var obj = { - m: function() {} -} - -function functionWithDisplayName() {} -functionWithDisplayName.displayName = "user-friendly name"; - -function functionWithDisplayNameGetter() {} -functionWithDisplayNameGetter.__defineGetter__("displayName", function() { return "FAIL_should_not_execute"; }); - -var smallClosure = (function(p) { return function() { return p; }; })("Capybara"); - -var bigClosure = (function(p) { - var o = { - e: 7, - f: 5, - get u() { return 3; }, - set v(value) { } - }; - with (o) { - try { - throw Error("Test"); - } catch (ex) { - return function() { - return String(p) + String(ex) + u + e; - }; - } - } -})({}); - -function* gen() { yield [1,2,3] } - -function test() { - function dumpFunctionDetails(properties) { - var location = properties.get('[[FunctionLocation]]').value.value; - TestRunner.addResult('Function details: '); - TestRunner.addResult('lineNumber: ' + location.lineNumber); - TestRunner.addResult('columnNumber: ' + location.columnNumber); - TestRunner.addResult('scriptId is valid: ' + !!location.scriptId); - TestRunner.addResult('functionName: ' + properties.get('name').value.value); - if (properties.has('[[IsGenerator]]')) - TestRunner.addResult('isGenerator: ' + properties.get('[[IsGenerator]]').value.value); - } - - function dumpFunctionNoScopes() { - TestRunner.addResult('scopeChain: n/a'); - } - - function dumpFunctionScope(pos, type, propertyDescriptors) { - var variables; - if (type == 'Global') { - variables = '<global object properties omitted>'; - } else { - var varArray = []; - for (var i = 0; i < propertyDescriptors.length; i++) { - var d = propertyDescriptors[i]; - var valueStr; - if (d.value) { - if (d.value.value) - valueStr = JSON.stringify(d.value.value); - else - valueStr = '<no string representation>'; - } else { - valueStr = '<no value>'; - } - varArray.push(d.name + ': ' + valueStr); - } - varArray.sort(); - variables = varArray.join(); - } - TestRunner.addResult('scopeChain #' + pos + ': ' + type + '; ' + variables); - } - - async function loadAndDumpScopeObjects(scopeChain, end) { - if (!scopeChain) { - dumpFunctionNoScopes(); - end(); - return; - } - - var properties = await TestRunner.RuntimeAgent.getProperties(scopeChain.value.objectId, true); - var scopes = []; - for (var prop of properties) { - if (String(prop.name >>> 0) === prop.name) - scopes.push(prop.value); - } - - for (var pos = 0; pos < scopes.length; ++pos) { - var propertyDescriptors = await TestRunner.RuntimeAgent.getProperties(scopes[pos].objectId, true); - dumpFunctionScope(pos, scopes[pos].description, propertyDescriptors); - } - - end(); - } - - function performStandardTestCase(pageExpression, next) { - TestRunner.evaluateInPage(pageExpression, didEvaluate); - - async function didEvaluate(remote) { - TestRunner.addResult(pageExpression + ' type = ' + remote.type); - var response = - await TestRunner.RuntimeAgent.invoke_getProperties({objectId: remote.objectId, isOwnProperty: false}); - - var propertiesMap = new Map(); - for (var prop of response.internalProperties) - propertiesMap.set(prop.name, prop); - for (var prop of response.result) { - if (prop.name === 'name' && prop.value && prop.value.type === 'string') - propertiesMap.set('name', prop); - if (prop.name === 'displayName' && prop.value && prop.value.type === 'string') { - propertiesMap.set('name', prop); - break; - } - } - dumpFunctionDetails(propertiesMap); - loadAndDumpScopeObjects(propertiesMap.get('[[Scopes]]'), next); - } - } - - SourcesTestRunner.runDebuggerTestSuite([ - function testGetFirstLineFunctionDetails(next) { - performStandardTestCase('firstLineFunction', next); - }, - function testGetNonFirstLineFunctionDetails(next) { - performStandardTestCase('notFirstLineFunction', next); - }, - function testGetDetailsOfFunctionWithInferredName(next) { - performStandardTestCase('obj.m', next); - }, - function testGetDetailsOfFunctionWithDisplayName(next) { - performStandardTestCase('functionWithDisplayName', next); - }, - function testGetDetailsOfFunctionWithDisplayNameGetter(next) { - performStandardTestCase('functionWithDisplayNameGetter', next); - }, - function testSmallClosure(next) { - performStandardTestCase('smallClosure', next); - }, - function testBigClosure(next) { - performStandardTestCase('bigClosure', next); - }, - function testGenFunction(next) { - performStandardTestCase('gen', next); - } - ]); -}; - -</script> -</head> - -<body onload="runTest()"> -<p>Tests that Debugger.getFunctionDetails command returns correct location. -<a href="https://bugs.webkit.org/show_bug.cgi?id=71808">Bug 71808</a> -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/function-display-name-call-stack.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/function-display-name-call-stack.html deleted file mode 100644 index c931e57..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/function-display-name-call-stack.html +++ /dev/null
@@ -1,66 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> -var error = false; - -function func1() -{ - debugger; -} -func1.displayName = "my.framework.foo"; - -var func2 = (function() { - var f = function() { func1(); } - f.displayName = "my.framework.bar"; - return f; -})(); - -var func3 = function() { func2(); } -func3.__defineGetter__("displayName", function() { error = true; throw new Error("Should not crash!"); }); - -function func4() { func3(); } -func4.__defineGetter__("displayName", function() { error = true; return "FAIL: Should not execute getters!"; }); - -function func5() { func4(); } -func5.displayName = "my.framework.func5"; -func5.__defineSetter__("displayName", function() { error = true; throw new Error("FAIL: Should not call setter!"); }); - -function func6() { func5(); } -func6.displayName = { "foo": 6, toString: function() { error = true; return "FAIL: Should not call toString!"; } }; - -function testFunction() -{ - (function() { - arguments.callee.displayName = "<anonymous_inside_testFunction>"; - func6(); - })(); - console.assert(!error, "FAIL: No getter or setter or toString should have been called!"); -} -testFunction.displayName = "<InspectorTest::testFunction>"; - -function test() { - SourcesTestRunner.startDebuggerTest(step1); - - function step1() { - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step2); - } - - function step2(callFrames) { - SourcesTestRunner.captureStackTrace(callFrames); - SourcesTestRunner.completeDebuggerTest(); - } -}; - -</script> - -</head> - -<body onload="runTest()"> -<p>Tests that we display function's "displayName" property in the call stack. -<a href="http://code.google.com/p/chromium/issues/detail?id=17356">CrBug 17356</a> -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/function-generator-details.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/function-generator-details.html deleted file mode 100644 index c355ddf..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/function-generator-details.html +++ /dev/null
@@ -1,99 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function forward(iter, step) -{ - while (step-- > 0) - iter.next(); - return iter; -} - -function* gen() -{ - yield 1; - yield 2; - yield 3; -} - -var obj = { - generator: function*() - { - yield 11; - yield 12; - yield 13; - } -}; - -var iterNotStarted = gen(); -var iterSuspended = forward(gen(), 1); -var iterClosed = forward(gen(), 5); - -var iterObjGenerator = forward(obj.generator(), 2); - -var anonymousGenIter = (function*() { - yield 21; - yield 22; - yield 23; -})(); -forward(anonymousGenIter, 3); - -function test() { - function performStandardTestCase(pageExpression, next) { - TestRunner.evaluateInPage(pageExpression, didEvaluate); - - function didEvaluate(remote) { - TestRunner.addResult(pageExpression + ': type = ' + remote.type + ', subtype = ' + remote.subtype); - remote.getOwnPropertiesPromise().then(dumpInternalProperties); - } - - function dumpInternalProperties(properties) { - TestRunner.assertTrue(properties && properties.internalProperties, 'FAIL: no properties'); - for (var prop of properties.internalProperties) { - if (prop.name !== '[[GeneratorLocation]]') - TestRunner.addResult(prop.name + ' = ' + prop.value.description); - else - dumpLocation(prop.value.value); - } - next(); - } - - function dumpLocation(location) { - TestRunner.addResult('lineNumber = ' + location.lineNumber); - TestRunner.addResult('columnNumber = ' + location.columnNumber); - TestRunner.addResult('script is valid: ' + (location.scriptId ? 'yes' : 'no')); - } - } - - var expressions = [ - 'iterNotStarted', - 'iterSuspended', - 'iterClosed', - 'iterObjGenerator', - 'anonymousGenIter', - ]; - - function createTestSuiteFunction(expression) { - var functionName = 'test' + expression.toTitleCase(); - return eval( - 'function ' + functionName + '(next)\n' + - '{\n' + - ' performStandardTestCase(\'' + expression + '\', next);\n' + - '}; ' + functionName); - } - - SourcesTestRunner.runDebuggerTestSuite(expressions.map(createTestSuiteFunction)); -}; - -</script> - -</head> - -<body onload="runTest()"> -<p> -Tests that Debugger.getGeneratorObjectDetails command returns correct result. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/inline-scope-variables.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/inline-scope-variables.html deleted file mode 100644 index 8ae3501..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/inline-scope-variables.html +++ /dev/null
@@ -1,44 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function testFunction() -{ - var length = 123; - var a = [1, 2, 3]; - if (a.length) { - var b = 42; - console.log(a.length); - debugger; - return b; - } -} - -var test = function() { - SourcesTestRunner.startDebuggerTest(step1, true); - - function step1() { - TestRunner.addSnifferPromise(Sources.JavaScriptSourceFrame.prototype, '_renderDecorations').then(step2); - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(); - } - - function step2() { - var currentFrame = UI.panels.sources.visibleView; - var decorations = currentFrame.textEditor._decorations; - for (var line of decorations.keysArray()) { - var lineDecorations = - Array.from(decorations.get(line)).map(decoration => decoration.element.textContent).join(', '); - TestRunner.addResult(`${line + 1}: ${lineDecorations}`); - } - SourcesTestRunner.completeDebuggerTest(); - } -}; - -</script> -</head> -<body onload="runTest()"> -<p>Tests that inline scope variables are rendering correctly.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/last-execution-context.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/last-execution-context.html deleted file mode 100644 index bbc4cb69..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/last-execution-context.html +++ /dev/null
@@ -1,129 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script> - -function test() { - var mockTargetId = 1; - function createMockTarget(name, capabilities, dontAttachToMain) { - return SDK.targetManager.createTarget( - 'mock-target-' + mockTargetId++, name, capabilities, params => new SDK.StubConnection(params), - dontAttachToMain ? null : TestRunner.mainTarget); - } - - var context = new UI.Context(); - context.addFlavorChangeListener(SDK.ExecutionContext, executionContextChanged, this); - context.addFlavorChangeListener(SDK.Target, targetChanged, this); - new Main.ExecutionContextSelector(SDK.targetManager, context); - - function executionContextChanged(event) { - var executionContext = event.data; - TestRunner.addResult( - 'Execution context selected: ' + - (executionContext.isDefault ? executionContext.target().name() + ':' + executionContext.frameId : - executionContext.name)); - } - - function targetChanged(event) { - TestRunner.addResult('Target selected: ' + event.data.name()); - } - - TestRunner.runtimeModel._executionContextsCleared(); - - - TestRunner.addResult(''); - TestRunner.addResult('Adding page target'); - var pageTarget = createMockTarget('page-target', SDK.Target.Capability.AllForTests, true /* dontAttachToMain */); - var pageRuntimeModel = pageTarget.model(SDK.RuntimeModel); - pageTarget.model(SDK.ResourceTreeModel)._frameAttached('42', ''); - pageTarget.model(SDK.ResourceTreeModel)._frameNavigated({ - id: '42', - parentId: '', - loaderId: '', - name: 'mock-frame', - url: 'mock-url.com/frame.html', - securityOrigin: 'mock-security-origin', - mineType: 'mimeType' - }); - pageRuntimeModel._executionContextCreated( - {id: 'cs1', auxData: {isDefault: false, frameId: '42'}, origin: 'origin', name: 'contentScript1'}); - pageRuntimeModel._executionContextCreated( - {id: 'if1', auxData: {isDefault: true, frameId: 'iframe1'}, origin: 'origin', name: 'iframeContext1'}); - pageRuntimeModel._executionContextCreated( - {id: 'p1', auxData: {isDefault: true, frameId: '42'}, origin: 'origin', name: 'pageContext1Name'}); - - TestRunner.addResult(''); - TestRunner.addResult('Adding sw target'); - var swTarget = createMockTarget( - 'sw-target', SDK.Target.Capability.Network | SDK.Target.Capability.Worker | SDK.Target.Capability.JS); - swTarget.model(SDK.RuntimeModel) - ._executionContextCreated( - {id: 'sw1', auxData: {isDefault: true, frameId: ''}, origin: 'origin', name: 'swContext1Name'}); - - TestRunner.addResult(''); - TestRunner.addResult('Removing page main frame'); - pageRuntimeModel._executionContextDestroyed('p1'); - - TestRunner.addResult(''); - TestRunner.addResult('Readding page main frame'); - pageRuntimeModel._executionContextCreated( - {id: 'p2', auxData: {isDefault: true, frameId: '42'}, origin: 'origin', name: 'pageContext1Name'}); - - TestRunner.addResult(''); - TestRunner.addResult('Switching to sw target'); - context.setFlavor(SDK.Target, swTarget); - - TestRunner.addResult(''); - TestRunner.addResult('Switching to page target'); - context.setFlavor(SDK.Target, pageTarget); - - TestRunner.addResult(''); - TestRunner.addResult('User selected content script'); - context.setFlavor(SDK.ExecutionContext, pageRuntimeModel.executionContexts()[2]); - - TestRunner.addResult(''); - TestRunner.addResult('Switching to sw target'); - context.setFlavor(SDK.Target, swTarget); - - TestRunner.addResult(''); - TestRunner.addResult('Switching to page target'); - context.setFlavor(SDK.Target, pageTarget); - - TestRunner.addResult(''); - TestRunner.addResult('User selected iframe1'); - context.setFlavor(SDK.ExecutionContext, pageRuntimeModel.executionContexts()[0]); - - TestRunner.addResult(''); - TestRunner.addResult('Switching to sw target'); - context.setFlavor(SDK.Target, swTarget); - - TestRunner.addResult(''); - TestRunner.addResult('Switching to page target'); - context.setFlavor(SDK.Target, pageTarget); - - TestRunner.addResult(''); - TestRunner.addResult('Switching to sw target'); - context.setFlavor(SDK.Target, swTarget); - - TestRunner.addResult(''); - TestRunner.addResult('Removing page main frame'); - pageRuntimeModel._executionContextDestroyed('p2'); - - TestRunner.addResult(''); - TestRunner.addResult('Readding page main frame'); - pageRuntimeModel._executionContextCreated( - {id: 'p3', auxData: {isDefault: true, frameId: '42'}, origin: 'origin', name: 'pageContext1Name'}); - - TestRunner.completeTest(); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests how execution context and target are selected. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/monitor-console-command.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/monitor-console-command.html deleted file mode 100644 index fe9564d..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/monitor-console-command.html +++ /dev/null
@@ -1,85 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script src="../../../http/tests/inspector/console-test.js"></script> - -<script> -function simpleTestFunction() -{ - return 0; -} -</script> - -<script> -function simpleTestFunction2() -{ - return simpleTestFunction3(); -} - -function simpleTestFunction3() -{ - return 0; -} -</script> - -<script> -var test = function() { - var currentSourceFrame; - SourcesTestRunner.setQuiet(true); - SourcesTestRunner.runDebuggerTestSuite([ - function testSimpleMonitor(next) { - monitorAndRun(next, 'simpleTestFunction', 'simpleTestFunction();'); - }, - - function testSimpleMonitorWith1Arg(next) { - monitorAndRun(next, 'simpleTestFunction', 'simpleTestFunction(1);'); - }, - - function testSimpleMonitorWithManyArgs(next) { - monitorAndRun(next, 'simpleTestFunction', 'simpleTestFunction(1, 2, 3, 4 ,5);'); - }, - - function testSimpleUnmonitor(next) { - ConsoleTestRunner.evaluateInConsole('monitor(simpleTestFunction2)'); - ConsoleTestRunner.evaluateInConsole('unmonitor(simpleTestFunction2)'); - monitorAndRun(next, 'simpleTestFunction3', 'simpleTestFunction2();'); - }, - - function testUnmonitorFuntionNotMonitored(next) { - ConsoleTestRunner.evaluateInConsole('monitor(simpleTestFunction)', next); - } - ]); - - function monitorAndRun(next, functionName, runCmd) { - ConsoleTestRunner.evaluateInConsole('monitor(' + functionName + ')'); - TestRunner.addResult('Start monitoring function.'); - - ConsoleTestRunner.evaluateInConsole('setTimeout(function() { ' + runCmd + ' }, 0)'); - TestRunner.addResult('Set timer for test function.'); - ConsoleTestRunner.waitUntilMessageReceived(didReceive); - - function didReceive(message) { - if (message.type === ConsoleModel.ConsoleMessage.MessageType.Result) { - ConsoleTestRunner.waitUntilMessageReceived(didReceive); - return; - } - - TestRunner.addResult('Console message received: ' + message.messageText); - ConsoleTestRunner.evaluateInConsole('unmonitor(' + functionName + ')'); - TestRunner.addResult('Stop monitoring.'); - next(); - } - } -}; - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests traceCalls(fn) console command. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/reveal-execution-line.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/reveal-execution-line.html deleted file mode 100644 index 551ef7c1..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/reveal-execution-line.html +++ /dev/null
@@ -1,53 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> -function testFunction() -{ - debugger; -} - -var test = function() { - SourcesTestRunner.setQuiet(true); - SourcesTestRunner.runDebuggerTestSuite([function testRevealAndHighlightExecutionLine(next) { - var executionLineSet = false; - var executionLineRevealed = false; - TestRunner.addSniffer(SourceFrame.SourceFrame.prototype, 'revealPosition', didRevealLine); - TestRunner.addSniffer(Sources.JavaScriptSourceFrame.prototype, 'setExecutionLocation', didSetExecutionLocation); - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(didPause); - - function didPause(callFrames) { - } - - function didSetExecutionLocation(uiLocation) { - if (executionLineSet) - return; - executionLineSet = true; - maybeNext(); - } - - function didRevealLine(line) { - if (executionLineRevealed) - return; - if (this.isShowing()) { - executionLineRevealed = true; - maybeNext(); - } - } - - function maybeNext() { - if (executionLineRevealed && executionLineSet) { - TestRunner.addResult('Execution line revealed and highlighted.'); - SourcesTestRunner.resumeExecution(next); - } - } - }]); -}; -</script> -</head> -<body onload="runTest()"> -<p>Tests that execution line is revealed and highlighted when debugger is paused.</p> -<a href="https://bugs.webkit.org/show_bug.cgi?id=80306">Bug 80306</a> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/reveal-not-skipped.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/reveal-not-skipped.html deleted file mode 100644 index ed161a8..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/reveal-not-skipped.html +++ /dev/null
@@ -1,84 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script src="../debugger/resources/script1.js"></script> -<script> -function throwAnException() -{ - var i = 0; var j = i + 2; var k = j + i; - - return unknown_var; -} - -var test = function() { - var panel = UI.panels.sources; - TestRunner.DebuggerAgent.setPauseOnExceptions(SDK.DebuggerModel.PauseOnExceptionsState.PauseOnUncaughtExceptions); - - SourcesTestRunner.runDebuggerTestSuite([ - function testRevealAfterPausedOnException(next) { - TestRunner.addResult('Showing script1 source...'); - SourcesTestRunner.showScriptSource('script1.js', step2); - - function step2() { - TestRunner.addResult('Script source was shown for \'' + panel.visibleView._uiSourceCode.name() + '\'.'); - TestRunner.addResult('Throwing exception...'); - TestRunner.evaluateInPage('setTimeout(throwAnException, 0)'); - TestRunner.addSniffer(Sources.TabbedEditorContainer.prototype, 'showFile', step3); - } - - function step3() { - TestRunner.addResult('Script source was shown for \'' + panel.visibleView._uiSourceCode.name() + '\'.'); - TestRunner.addResult('Reloading page...'); - TestRunner.reloadPage(step4); - } - - function step4() { - TestRunner.addResult('Showing script1 source...'); - SourcesTestRunner.showScriptSource('script1.js', step5); - } - - function step5() { - TestRunner.addResult('Script source was shown for \'' + panel.visibleView._uiSourceCode.name() + '\'.'); - TestRunner.addResult('Throwing exception...'); - TestRunner.evaluateInPage('setTimeout(throwAnException, 0)'); - TestRunner.addSniffer(Sources.TabbedEditorContainer.prototype, 'showFile', step6); - } - - function step6() { - TestRunner.addResult('Script source was shown for \'' + panel.visibleView._uiSourceCode.name() + '\'.'); - next(); - } - }, - - function testRevealAfterPrettyPrintWhenPaused(next) { - TestRunner.addResult('Throwing exception...'); - SourcesTestRunner.waitUntilPaused(step2); - function step2() { - TestRunner.addResult('Showing script1 source...'); - SourcesTestRunner.showScriptSource('script1.js', step3); - } - - function step3() { - TestRunner.addResult('Script source was shown for \'' + panel.visibleView._uiSourceCode.name() + '\'.'); - TestRunner.addResult('Formatting...'); - SourcesTestRunner.scriptFormatter().then(function(scriptFormatter) { - TestRunner.addSniffer( - Sources.ScriptFormatterEditorAction.prototype, '_updateButton', uiSourceCodeScriptFormatted); - scriptFormatter._toggleFormatScriptSource(); - }); - } - - function uiSourceCodeScriptFormatted() { - TestRunner.addResult('Script source was shown for \'' + panel.visibleView._uiSourceCode.name() + '\'.'); - next(); - } - } - ]); -}; -</script> -</head> -<body onload="runTest()"> -<p>Tests that certain user actions in scripts panel reveal execution line.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-formatter-breakpoints-2.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-formatter-breakpoints-2.html deleted file mode 100644 index 60cbe3d6..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-formatter-breakpoints-2.html +++ /dev/null
@@ -1,59 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script src="../debugger/resources/unformatted2.js"></script> -<script> -var test = function() { - Bindings.breakpointManager._storage._breakpoints = {}; - var panel = UI.panels.sources; - var scriptFormatter; - var formattedSourceFrame; - - SourcesTestRunner.runDebuggerTestSuite([ - function testSetup(next) { - SourcesTestRunner.scriptFormatter().then(function(sf) { - scriptFormatter = sf; - next(); - }); - }, - - function testBreakpointsSetAndRemoveInFormattedSource(next) { - SourcesTestRunner.showScriptSource('unformatted2.js', didShowScriptSource); - - function didShowScriptSource(frame) { - TestRunner.addSniffer( - Sources.ScriptFormatterEditorAction.prototype, '_updateButton', uiSourceCodeScriptFormatted); - scriptFormatter._toggleFormatScriptSource(); - } - - function uiSourceCodeScriptFormatted() { - formattedSourceFrame = panel.visibleView; - SourcesTestRunner.setBreakpoint(formattedSourceFrame, 3, '', true); - SourcesTestRunner.waitBreakpointSidebarPane().then(evaluateF2); - } - - function evaluateF2() { - SourcesTestRunner.waitUntilPaused(pausedInF2); - TestRunner.evaluateInPageWithTimeout('f2()'); - } - - function pausedInF2(callFrames) { - SourcesTestRunner.dumpBreakpointSidebarPane('while paused in pretty printed'); - SourcesTestRunner.waitBreakpointSidebarPane() - .then(() => SourcesTestRunner.dumpBreakpointSidebarPane('while paused in raw')) - .then(() => SourcesTestRunner.resumeExecution(next)); - SourcesTestRunner.removeBreakpoint(formattedSourceFrame, 3); - Sources.sourceFormatter.discardFormattedUISourceCode(panel.visibleView.uiSourceCode()); - } - } - ]); - -}; -</script> -</head> -<body onload="runTest()"> -<p>Tests the script formatting is working fine with breakpoints. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-formatter-breakpoints-3.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-formatter-breakpoints-3.html deleted file mode 100644 index 1d73064e..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-formatter-breakpoints-3.html +++ /dev/null
@@ -1,59 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script src="../debugger/resources/unformatted3.js"></script> -<script> -var test = function() { - Bindings.breakpointManager._storage._breakpoints = {}; - var panel = UI.panels.sources; - var scriptFormatter; - - SourcesTestRunner.runDebuggerTestSuite([ - function testSetup(next) { - SourcesTestRunner.scriptFormatter().then(function(sf) { - scriptFormatter = sf; - next(); - }); - }, - - function testBreakpointsSetInFormattedAndRemoveInOriginalSource(next) { - SourcesTestRunner.showScriptSource('unformatted3.js', didShowScriptSource); - - function didShowScriptSource(frame) { - TestRunner.addSniffer( - Sources.ScriptFormatterEditorAction.prototype, '_updateButton', uiSourceCodeScriptFormatted); - scriptFormatter._toggleFormatScriptSource(); - } - - function uiSourceCodeScriptFormatted() { - var formattedSourceFrame = panel.visibleView; - SourcesTestRunner.setBreakpoint(formattedSourceFrame, 3, '', true); - SourcesTestRunner.waitBreakpointSidebarPane().then(evaluateF2); - } - - function evaluateF2() { - SourcesTestRunner.waitUntilPaused(pausedInF2); - TestRunner.evaluateInPageWithTimeout('f2()'); - } - - - function pausedInF2(callFrames) { - SourcesTestRunner.dumpBreakpointSidebarPane('while paused in pretty printed'); - SourcesTestRunner.waitBreakpointSidebarPane() - .then(() => SourcesTestRunner.dumpBreakpointSidebarPane('while paused in raw')) - .then(() => SourcesTestRunner.resumeExecution(next)); - // No need to remove breakpoint since formattedUISourceCode was removed. - Sources.sourceFormatter.discardFormattedUISourceCode(panel.visibleView.uiSourceCode()); - } - } - ]); - -}; -</script> -</head> -<body onload="runTest()"> -<p>Tests the script formatting is working fine with breakpoints. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-formatter-search.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-formatter-search.html deleted file mode 100644 index 1477849..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-formatter-search.html +++ /dev/null
@@ -1,52 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script src="../../../http/tests/inspector/search/search-test.js"></script> -<script> - -function nonFormattedFunction() { var i = 2 + 2; var a = 4; return a + i; } - -var test = function() { - var scriptSource; - var shouldRequestContent = false; - SourcesTestRunner.scriptFormatter().then(startDebuggerTest); - var scriptFormatter; - - function startDebuggerTest(sf) { - scriptFormatter = sf; - SourcesTestRunner.startDebuggerTest(started); - } - - function started() { - SourcesTestRunner.showScriptSource('script-formatter-search.html', didShowScriptSource); - } - - async function didShowScriptSource(frame) { - scriptSource = frame._uiSourceCode; - var matches = await scriptSource.searchInContent('magic-string', true, false); - TestRunner.addResult('Pre-format search results:'); - SourcesTestRunner.dumpSearchMatches(matches); - shouldRequestContent = true; - TestRunner.addSniffer(Sources.ScriptFormatterEditorAction.prototype, '_updateButton', uiSourceCodeScriptFormatted); - scriptFormatter._toggleFormatScriptSource(); - } - - async function uiSourceCodeScriptFormatted() { - var matches = await scriptSource.searchInContent('magic-string', true, false); - TestRunner.addResult('Post-format search results:'); - SourcesTestRunner.dumpSearchMatches(matches); - TestRunner.completeTest(); - } -}; - -</script> - -</head> - -<body onload="runTest()"> -<p>Tests that search across files works with formatted scripts. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-snippet-model.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-snippet-model.html deleted file mode 100644 index 66ac8eba..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/script-snippet-model.html +++ /dev/null
@@ -1,282 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> -function startWorker() -{ - var workerScript = "postMessage('Done.');"; - var blob = new Blob([workerScript], { type: "text/javascript" }); - var worker = new Worker(URL.createObjectURL(blob)); -} - -function test() { - function evaluateSnippetAndDumpEvaluationDetails(uiSourceCode, context, callback) { - TestRunner.addSniffer(Snippets.ScriptSnippetModel.prototype, '_printRunScriptResult', dumpResult); - Snippets.scriptSnippetModel.evaluateScriptSnippet(context, uiSourceCode); - var target = context.target(); - var mapping = Snippets.scriptSnippetModel._mappingForDebuggerModel.get(target.model(SDK.DebuggerModel)); - var evaluationSourceURL = mapping._evaluationSourceURL(uiSourceCode); - var snippetId = Snippets.scriptSnippetModel._snippetIdForUISourceCode.get(uiSourceCode); - TestRunner.addResult('Last evaluation source url for snippet: ' + evaluationSourceURL); - TestRunner.assertEquals( - snippetId, Snippets.scriptSnippetModel._snippetIdForSourceURL(evaluationSourceURL), - 'Snippet can not be identified by its evaluation sourceURL.'); - - - function dumpResult(target, result) { - TestRunner.addResult('Snippet execution result: ' + result.description); - callback(); - } - } - - function resetSnippetsSettings() { - Snippets.scriptSnippetModel._snippetStorage._lastSnippetIdentifierSetting.set(0); - Snippets.scriptSnippetModel._snippetStorage._snippetsSetting.set([]); - Snippets.scriptSnippetModel._lastSnippetEvaluationIndexSetting.set(0); - Snippets.scriptSnippetModel._project.removeProject(); - Snippets.scriptSnippetModel = new Snippets.ScriptSnippetModel(Workspace.workspace); - } - - var workspace = Workspace.workspace; - SourcesTestRunner.runDebuggerTestSuite([ - function testCreateEditRenameRemove(next) { - var uiSourceCode1; - - function filterSnippet(uiSourceCode) { - return uiSourceCode.project().type() === Workspace.projectTypes.Snippets; - } - - function uiSourceCodeAdded(event) { - var uiSourceCode = event.data; - TestRunner.addResult('UISourceCodeAdded: ' + uiSourceCode.name()); - } - - function uiSourceCodeRemoved(event) { - var uiSourceCode = event.data; - TestRunner.addResult('UISourceCodeRemoved: ' + uiSourceCode.name()); - } - - workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeAdded, uiSourceCodeAdded); - workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeRemoved, uiSourceCodeRemoved); - - async function renameSnippetAndCheckWorkspace(uiSourceCode, snippetName) { - TestRunner.addResult('Renaming snippet to \'' + snippetName + '\' ...'); - await uiSourceCode.rename(snippetName).then(success => renameCallback(success)); - - function renameCallback(success) { - if (success) - TestRunner.addResult('Snippet renamed successfully.'); - else - TestRunner.addResult('Snippet was not renamed.'); - } - TestRunner.addResult('UISourceCode name is \'' + uiSourceCode.name() + '\' now.'); - TestRunner.addResult( - 'Number of uiSourceCodes in workspace: ' + workspace.uiSourceCodes().filter(filterSnippet).length); - var storageSnippetsCount = Snippets.scriptSnippetModel._snippetStorage.snippets().length; - TestRunner.addResult('Number of snippets in the storage: ' + storageSnippetsCount); - } - - function contentCallback(content) { - TestRunner.addResult('Snippet content: ' + content); - } - - resetSnippetsSettings(); - - Snippets.scriptSnippetModel.project().createFile('', null, '', step2.bind(this)); - - function step2(uiSourceCode) { - uiSourceCode1 = uiSourceCode; - - uiSourceCode1.requestContent().then(contentCallback).then(contentDumped1); - - function contentDumped1() { - uiSourceCode1.addRevision('<snippet content>'); - TestRunner.addResult('Snippet content set.'); - uiSourceCode1._requestContentPromise = null; - uiSourceCode1.contentLoaded = false; - uiSourceCode1.requestContent().then(contentCallback).then(contentDumped2); - } - - function contentDumped2() { - TestRunner.addResult('Snippet1 created.'); - Snippets.scriptSnippetModel.project().createFile('', null, '', step3.bind(this)); - } - } - - async function step3(uiSourceCode) { - var uiSourceCode2 = uiSourceCode; - TestRunner.addResult('Snippet2 created.'); - await renameSnippetAndCheckWorkspace(uiSourceCode1, 'foo'); - await renameSnippetAndCheckWorkspace(uiSourceCode1, ' '); - await renameSnippetAndCheckWorkspace(uiSourceCode1, ' bar '); - await renameSnippetAndCheckWorkspace(uiSourceCode1, 'foo'); - await renameSnippetAndCheckWorkspace(uiSourceCode2, 'bar'); - await renameSnippetAndCheckWorkspace(uiSourceCode2, 'foo'); - uiSourceCode1._requestContentPromise = null; - uiSourceCode1.contentLoaded = false; - uiSourceCode1.requestContent().then(contentCallback).then(onContentDumped); - - function onContentDumped() { - Snippets.scriptSnippetModel.project().deleteFile(uiSourceCode1); - Snippets.scriptSnippetModel.project().deleteFile(uiSourceCode2); - Snippets.scriptSnippetModel.project().createFile('', null, '', step4.bind(this)); - } - } - - function step4(uiSourceCode) { - var uiSourceCode3 = uiSourceCode; - TestRunner.addResult('Snippet3 created.'); - Snippets.scriptSnippetModel.project().deleteFile(uiSourceCode3); - TestRunner.addResult('Snippet3 deleted.'); - - TestRunner.addResult( - 'Number of uiSourceCodes in workspace: ' + workspace.uiSourceCodes().filter(filterSnippet).length); - var storageSnippetsCount = Snippets.scriptSnippetModel._snippetStorage.snippets().length; - TestRunner.addResult('Number of snippets in the storage: ' + storageSnippetsCount); - - workspace.removeEventListener(Workspace.Workspace.Events.UISourceCodeAdded, uiSourceCodeAdded); - workspace.removeEventListener(Workspace.Workspace.Events.UISourceCodeRemoved, uiSourceCodeRemoved); - - next(); - } - }, - - function testEvaluate(next) { - var uiSourceCode1; - var uiSourceCode2; - var uiSourceCode3; - var context = UI.context.flavor(SDK.ExecutionContext); - - resetSnippetsSettings(); - var snippetScriptMapping = - Snippets.scriptSnippetModel.snippetScriptMapping(SDK.targetManager.models(SDK.DebuggerModel)[0]); - - Snippets.scriptSnippetModel.project().createFile('', null, '', step2.bind(this)); - - function step2(uiSourceCode) { - uiSourceCode1 = uiSourceCode; - uiSourceCode1.rename('Snippet1'); - var content = ''; - content += '// This snippet does nothing.\n'; - content += 'var i = 2+2;\n'; - uiSourceCode1.setWorkingCopy(content); - Snippets.scriptSnippetModel.project().createFile('', null, '', step3.bind(this)); - } - - function step3(uiSourceCode) { - uiSourceCode2 = uiSourceCode; - uiSourceCode2.rename('Snippet2'); - content = ''; - content += '// This snippet creates a function that does nothing and returns it.\n'; - content += 'function doesNothing() {\n'; - content += ' var i = 2+2;\n'; - content += '};\n'; - content += 'doesNothing;\n'; - uiSourceCode2.setWorkingCopy(content); - Snippets.scriptSnippetModel.project().createFile('', null, '', step4.bind(this)); - } - - function step4(uiSourceCode) { - uiSourceCode3 = uiSourceCode; - uiSourceCode3.rename('Snippet3'); - content = ''; - content += '// This snippet uses Command Line API.\n'; - content += '$$("p").length'; - uiSourceCode3.setWorkingCopy(content); - evaluateSnippetAndDumpEvaluationDetails(uiSourceCode1, context, step5); - } - - function step5() { - evaluateSnippetAndDumpEvaluationDetails(uiSourceCode2, context, step6); - } - - function step6() { - evaluateSnippetAndDumpEvaluationDetails(uiSourceCode1, context, step7); - } - - function step7() { - evaluateSnippetAndDumpEvaluationDetails(uiSourceCode3, context, next); - } - }, - - function testEvaluateEditReload(next) { - function evaluateSnippetAndReloadPage(uiSourceCode, callback) { - TestRunner.addSniffer(Snippets.ScriptSnippetModel.prototype, '_printRunScriptResult', snippetFinished); - Snippets.scriptSnippetModel.evaluateScriptSnippet(UI.context.flavor(SDK.ExecutionContext), uiSourceCode); - - function snippetFinished(result) { - var script = snippetScriptMapping._scriptForUISourceCode.get(uiSourceCode); - TestRunner.addResult('Snippet execution result: ' + result.description); - - TestRunner.reloadPage(callback); - } - } - - resetSnippetsSettings(); - var snippetScriptMapping = - Snippets.scriptSnippetModel.snippetScriptMapping(SDK.targetManager.models(SDK.DebuggerModel)[0]); - - Snippets.scriptSnippetModel.project().createFile('', null, '', step3.bind(this)); - - function step3(uiSourceCode) { - var uiSourceCode1 = uiSourceCode; - uiSourceCode1.rename('Snippet1'); - var content = ''; - content += '// This snippet does nothing.\n'; - content += 'var i = 2+2;\n'; - uiSourceCode1.setWorkingCopy(content); - - evaluateSnippetAndReloadPage(uiSourceCode1, next); - } - }, - - function testEvaluateInWorker(next) { - var context; - - TestRunner.addSniffer(SDK.RuntimeModel.prototype, '_executionContextCreated', contextCreated); - TestRunner.evaluateInPage('startWorker()'); - - function contextCreated() { - // Take the only execution context from the worker's RuntimeModel. - context = this.executionContexts()[0]; - - resetSnippetsSettings(); - Snippets.scriptSnippetModel.project().createFile('', null, '', step2.bind(this)); - } - - function step2(uiSourceCode) { - uiSourceCode.rename('Snippet1'); - var content = '2+2;\n'; - uiSourceCode.setWorkingCopy(content); - evaluateSnippetAndDumpEvaluationDetails(uiSourceCode, context, next); - } - }, - - function testDangerousNames(next) { - resetSnippetsSettings(); - - Snippets.scriptSnippetModel.project().createFile('', null, '', step2.bind(this)); - - function step2(uiSourceCode) { - uiSourceCode.rename('toString'); - SourcesTestRunner.showUISourceCode(uiSourceCode, step3.bind(this)); - } - - function step3() { - Snippets.scriptSnippetModel.project().createFile('', null, '', step4.bind(this)); - } - - function step4(uiSourceCode) { - uiSourceCode.rename('myfile.toString'); - SourcesTestRunner.showUISourceCode(uiSourceCode, next); - } - } - ]); -}; -</script> -</head> -<body onload="runTest()"> -<p>Tests script snippet model.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/scripts-panel.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/scripts-panel.html deleted file mode 100644 index ea7550e..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/scripts-panel.html +++ /dev/null
@@ -1,105 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script src="../../../http/tests/inspector/page-mock.js"></script> -<script> -function test() { - function dumpNavigator(sourcesNavigatorView) { - TestRunner.addResult('Navigator:'); - SourcesTestRunner.dumpNavigatorView(sourcesNavigatorView); - } - - function createNavigatorView() { - var navigatorView = new Sources.SourcesNavigatorView(); - navigatorView.show(UI.inspectorView.element); - return navigatorView; - } - - TestRunner.addSniffer(Workspace.UISourceCode.prototype, 'requestContent', onRequestContent, true); - - function onRequestContent() { - TestRunner.addResult('Source requested for ' + this.url()); - } - - Bindings.NetworkProject.forTarget(TestRunner.mainTarget)._resetForTest(); - Bindings.resourceMapping._resetForTest(TestRunner.mainTarget); - var page = new TestRunner.PageMock('http://example.com'); - TestRunner.connectToPage('mock-page', page, true /* makeMainTarget */); - - function addNetworkFile(url) { - page.evalScript(url, '', false /* isContentScript */); - return TestRunner.waitForUISourceCode(url); - } - - function reload() { - page.reload(); - return new Promise(fulfill => TestRunner.addSniffer(SDK.ResourceTreeModel.prototype, '_frameNavigated', fulfill)); - } - - TestRunner.runTestSuite([ - async function testInitialLoad(next) { - await reload(); - await addNetworkFile('foobar.js'); - - var sourcesNavigatorView = createNavigatorView(); - - await addNetworkFile('foo.js'); - await addNetworkFile('bar.js'); - var uiSourceCode = await addNetworkFile('baz.js'); - sourcesNavigatorView.revealUISourceCode(uiSourceCode); - - dumpNavigator(sourcesNavigatorView); - next(); - }, - - async function testReset(next) { - await reload(); - var sourcesNavigatorView = createNavigatorView(); - - var uiSourceCode = await addNetworkFile('foo.js'); - await addNetworkFile('bar.js'); - await addNetworkFile('baz.js'); - - dumpNavigator(sourcesNavigatorView); - TestRunner.addResult('Revealing in navigator.'); - sourcesNavigatorView.revealUISourceCode(uiSourceCode); - dumpNavigator(sourcesNavigatorView); - - await reload(); - dumpNavigator(sourcesNavigatorView); - uiSourceCode = await addNetworkFile('bar.js'); - sourcesNavigatorView.revealUISourceCode(uiSourceCode); - dumpNavigator(sourcesNavigatorView); - - next(); - }, - - async function testDebuggerUISourceCodeAddedAndRemoved(next) { - await reload(); - var sourcesNavigatorView = createNavigatorView(); - - var uiSourceCode = await addNetworkFile('foo.js'); - TestRunner.waitForUISourceCode().then(onUISourceCode); - TestRunner.evaluateInPage('function foo() {}'); - - async function onUISourceCode(debuggerUISourceCode) { - sourcesNavigatorView.revealUISourceCode(uiSourceCode); - sourcesNavigatorView.revealUISourceCode(debuggerUISourceCode); - dumpNavigator(sourcesNavigatorView); - - // Plug compiler source mapping. - await addNetworkFile('source.js'); - - dumpNavigator(sourcesNavigatorView); - next(); - } - } - ]); -}; -</script> -</head> -<body onload="runTest()"> -<p>Tests that scripts panel UI elements work as intended.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/scripts-sorting.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/scripts-sorting.html deleted file mode 100644 index 496d3d0..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/scripts-sorting.html +++ /dev/null
@@ -1,74 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script src="../../../http/tests/inspector/page-mock.js"></script> - -<script> -async function test() { - function createNavigatorView(constructor) { - var navigatorView = new constructor(); - navigatorView.show(UI.inspectorView.element); - return navigatorView; - } - - sourcesNavigatorView = createNavigatorView(Sources.SourcesNavigatorView); - contentScriptsNavigatorView = createNavigatorView(Sources.ContentScriptsNavigatorView); - - Bindings.NetworkProject.forTarget(TestRunner.mainTarget)._resetForTest(); - Bindings.resourceMapping._resetForTest(TestRunner.mainTarget); - - var pageMock = new TestRunner.PageMock('http://example.com'); - pageMock.disableDOMCapability(); - TestRunner.connectToPage('mock-target-1', pageMock); - - var uiSourceCodes = []; - async function addUISourceCode(url, isContentScript) { - pageMock.evalScript(url, '', isContentScript); - var uiSourceCode = await TestRunner.waitForUISourceCode(url); - uiSourceCodes.push(uiSourceCode); - } - - function dumpScriptsList() { - SourcesTestRunner.dumpNavigatorViewInAllModes(sourcesNavigatorView); - SourcesTestRunner.dumpNavigatorViewInAllModes(contentScriptsNavigatorView); - - for (var i = 0; i < uiSourceCodes.length; ++i) { - sourcesNavigatorView.revealUISourceCode(uiSourceCodes[i]); - contentScriptsNavigatorView.revealUISourceCode(uiSourceCodes[i]); - } - - SourcesTestRunner.dumpNavigatorViewInAllModes(sourcesNavigatorView); - SourcesTestRunner.dumpNavigatorViewInAllModes(contentScriptsNavigatorView); - } - - var scripts = [ - 'block.js?block=foo', 'ga.js', 'lenta.ban?pg=4883&ifr=1', 'lenta.ban?pg=5309&ifr=1', 'top100.jcn?80674', - '_js/production/motor.js?1308927432', 'i/xgemius.js', 'i/js/jquery-1.5.1.min.js', 'i/js/jquery.cookie.js', - 'foo/path/bar.js?file=bar/zzz.js', 'foo/path/foo.js?file=bar/aaa.js' - ]; - for (var i = 0; i < scripts.length; ++i) - await addUISourceCode('http://foo.com/' + scripts[i]); - - var scripts2 = ['foo/path/bar.js?file=bar/zzz.js', 'foo/path/foo.js?file=bar/aaa.js']; - for (var i = 0; i < scripts2.length; ++i) - await addUISourceCode('http://bar.com/' + scripts2[i]); - await addUISourceCode('*Non*URL*path'); - - var extensions = ['extension-schema://extension-name/bar.js', 'extension-schema://extension-name/folder/baz.js']; - for (var i = 0; i < extensions.length; ++i) - await addUISourceCode(extensions[i], true); - await addUISourceCode('*Another*Non*URL*path', true); - dumpScriptsList(); - TestRunner.completeTest(); -} -</script> - -</head> -<body onload="runTest()"> -<p> -Tests scripts sorting in the scripts panel. -</p> -</body> - -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/scripts-with-same-source-url.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/scripts-with-same-source-url.html deleted file mode 100644 index 222fafe9b..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/scripts-with-same-source-url.html +++ /dev/null
@@ -1,50 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> -function injectScript(value) -{ - eval("function foo() { return " + value + "; } //# sourceURL=MyScript.js"); -} - -function test() { - TestRunner.evaluateInPage('injectScript(1);'); - TestRunner.evaluateInPage('injectScript(2);'); - - Workspace.workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeAdded, reportAdded); - Workspace.workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeRemoved, reportRemoved); - - var iteration = 0; - - function reportAdded(event) { - if (event.data.url().indexOf('MyScript.js') === -1) - return; - TestRunner.addResult( - 'Added: ' + event.data.url().replace(/VM[\d]+/, 'VMXX') + ' to ' + event.data.project().type()); - if (event.data.project().type() !== 'network') - return; - event.data.requestContent().then(function(it, content) { - TestRunner.addResult('Content: ' + content); - if (it) - TestRunner.completeTest(); - }.bind(null, iteration++)); - } - - function reportRemoved(event) { - if (event.data.url() !== 'MyScript.js') - return; - TestRunner.addResult('Removed: ' + event.data.url() + ' from ' + event.data.project().type()); - } -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that script is replaced with the newer version when the names match. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/selected-call-frame-after-formatting-source.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/selected-call-frame-after-formatting-source.html deleted file mode 100644 index 96f6aef..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/selected-call-frame-after-formatting-source.html +++ /dev/null
@@ -1,58 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script> -function testFunction() -{ - return testFunction2(); -} - -function testFunction2() -{ - var x = Math.sqrt(10); - debugger; - return x; -} - -var test = function() { - SourcesTestRunner.startDebuggerTest(step1); - var panel = UI.panels.sources; - var sourceFrame; - - function step1() { - var testName = TestRunner.mainTarget.inspectedURL(); - testName = testName.substring(testName.lastIndexOf('/') + 1); - SourcesTestRunner.showScriptSource(testName, step2); - } - - function step2(frame) { - sourceFrame = frame; - SourcesTestRunner.runTestFunctionAndWaitUntilPaused(step3); - } - - function step3() { - SourcesTestRunner.completeDebuggerTest(); - return; - TestRunner.debuggerModel.setSelectedCallFrame(TestRunner.debuggerModel.debuggerPausedDetails().callFrames[1]); - sourceFrame._toggleFormatSource(step4); - } - - function step4() { - TestRunner.assertEquals('testFunction', UI.context.flavor(SDK.DebuggerModel.CallFrame).functionName); - sourceFrame._toggleFormatSource(step5); - } - - function step5() { - SourcesTestRunner.completeDebuggerTest(); - } -}; - -</script> -</head> -<body onload="runTest()"> -<p>Tests selected call frame does not change when pretty-print is toggled.</p> -<a href="https://bugs.webkit.org/show_bug.cgi?id=70906">Bug 70906</a> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/show-function-definition.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/show-function-definition.html deleted file mode 100644 index 099344c..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/show-function-definition.html +++ /dev/null
@@ -1,68 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/console-test.js"></script> -<script> - -function jumpToMe() -{ - var result = 12345; - return window.foo || result; -} - -function test() { - var panel = UI.panels.sources; - - TestRunner.runTestSuite([ - function testRevealFunctionDefinition(next) { - TestRunner.addSniffer(panel, 'showUISourceCode', showUISourceCodeHook); - UI.context.flavor(SDK.ExecutionContext).evaluate({expression: 'jumpToMe', silent: true}).then(didGetFunction); - - function didGetFunction(result) { - var error = !result.object || !!result.exceptionDetails; - TestRunner.assertTrue(!error); - panel._showFunctionDefinition(result.object); - } - - function showUISourceCodeHook(uiSourceCode, lineNumber, columnNumber, forceShowInPanel) { - // lineNumber and columnNumber are 0-based - ++lineNumber; - ++columnNumber; - TestRunner.addResult('Function location revealed: [' + lineNumber + ':' + columnNumber + ']'); - next(); - } - }, - - function testDumpFunctionDefinition(next) { - TestRunner.addSniffer(ObjectUI.ObjectPropertiesSection, 'formatObjectAsFunction', onConsoleMessagesReceived); - var consoleView = Console.ConsoleView.instance(); - consoleView._prompt._appendCommand('jumpToMe', true); - - function onConsoleMessagesReceived() { - TestRunner.deprecatedRunAfterPendingDispatches(function() { - var messages = []; - ConsoleTestRunner.disableConsoleViewport(); - var viewMessages = Console.ConsoleView.instance()._visibleViewMessages; - for (var i = 0; i < viewMessages.length; ++i) { - var uiMessage = viewMessages[i]; - var element = uiMessage.contentElement(); - messages.push(element.deepTextContent()); - } - TestRunner.addResult(messages.join('\n')); - next(); - }); - } - } - ]); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that "Show Function Definition" jumps to the correct location. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/show-generator-location.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/show-generator-location.html deleted file mode 100644 index 5797c13..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/show-generator-location.html +++ /dev/null
@@ -1,87 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/console-test.js"></script> -<script> - -function forward(iter, step) -{ - while (step-- > 0) - iter.next(); - return iter; -} - -function* gen() -{ - yield 1; - yield 2; - yield 3; -} - -var iterNotStarted = gen(); -var iterSuspended1 = forward(gen(), 1); -var iterSuspended2 = forward(gen(), 2); -var iterSuspended3 = forward(gen(), 3); -var iterClosed = forward(gen(), 4); - -function test() { - var panel = UI.panels.sources; - - function performStandardTestCase(pageExpression, next) { - TestRunner.addSniffer(panel, 'showUISourceCode', showUISourceCodeHook); - TestRunner.evaluateInPage(pageExpression, didEvaluate); - - function didEvaluate(remote) { - remote.getOwnPropertiesPromise().then(revealLocation.bind(null, remote)); - } - - function revealLocation(remote, properties) { - var loc; - for (var prop of properties.internalProperties) { - if (prop.name === '[[GeneratorLocation]]') { - loc = prop.value.value; - break; - } - } - Common.Revealer.reveal( - remote.debuggerModel().createRawLocationByScriptId(loc.scriptId, loc.lineNumber, loc.columnNumber)); - } - - function showUISourceCodeHook(uiSourceCode, lineNumber, columnNumber, forceShowInPanel) { - // lineNumber and columnNumber are 0-based - ++lineNumber; - ++columnNumber; - TestRunner.addResult('Generator location revealed: [' + lineNumber + ':' + columnNumber + ']'); - next(); - } - } - - var expressions = [ - 'iterNotStarted', - 'iterSuspended1', - 'iterSuspended2', - 'iterSuspended3', - 'iterClosed', - ]; - - function createTestSuiteFunction(expression) { - var functionName = 'test' + expression.toTitleCase(); - return eval( - 'function ' + functionName + '(next)\n' + - '{\n' + - ' performStandardTestCase(\'' + expression + '\', next);\n' + - '}; ' + functionName); - } - - TestRunner.runTestSuite(expressions.map(createTestSuiteFunction)); -} - -</script> -</head> - -<body onload="runTest()"> -<p> -Tests that "Show Generator Location" jumps to the correct location. -</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/source-frame-count.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/source-frame-count.html deleted file mode 100644 index 2077a22..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/source-frame-count.html +++ /dev/null
@@ -1,80 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> - -<script> -function createScriptsAndRun() -{ - eval("window.foo1 = function() {}\n//# sourceURL=script1.js"); - eval("window.foo2 = function() {}\n//# sourceURL=script2.js"); - eval("window.foo3 = function() {}\n//# sourceURL=script3.js"); - eval("window.foo4 = function() {}\n//# sourceURL=script4.js"); - eval("window.foo5 = function() {}\n//# sourceURL=script5.js"); - - runTest(); -} - -function test() { - var framesOpened = 0; - - SourcesTestRunner.runDebuggerTestSuite([function testSourceFramesCount(next) { - var panel = UI.panels.sources; - - SourcesTestRunner.showScriptSource('source-frame-count.html', function() {}); - SourcesTestRunner.showScriptSource('script1.js', function() {}); - SourcesTestRunner.showScriptSource('script2.js', function() {}); - SourcesTestRunner.showScriptSource('script3.js', function() {}); - SourcesTestRunner.showScriptSource('script4.js', function() {}); - SourcesTestRunner.showScriptSource('script5.js', reloadThePage); - - function reloadThePage() { - TestRunner.addResult('Reloading page...'); - TestRunner.reloadPage(didReload); - function didCreateSourceFrame() { - framesOpened++; - } - TestRunner.addSniffer(SourceFrame.SourceFrame.prototype, 'wasShown', didCreateSourceFrame, true); - } - - function didReload() { - if (framesOpened > 3) - TestRunner.addResult('Too many frames opened: ' + framesOpened); - else - TestRunner.addResult('Less than 3 frames opened'); - TestRunner.addResult('Visible view: ' + panel.visibleView._uiSourceCode.name()); - next(); - } - }]); -}; - -</script> - -<script> -function secondInlinedScriptInPage() -{ - return 0; -} -</script> - -<script> -function thirdInlinedScriptInPage() -{ - return 0; -} -</script> - -<script> -function fourthInlinedScriptInPage() -{ - return 0; -} -</script> - -</head> - -<body onload="createScriptsAndRun()"> -<p>Tests that scripts panel does not create too many source frames.</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/source-frame.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/source-frame.html deleted file mode 100644 index cbe7b54..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/source-frame.html +++ /dev/null
@@ -1,80 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/console-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script src="../../../http/tests/inspector/network-test.js"></script> -<script src="../../../http/tests/inspector/resources-test.js"></script> -<script> -function addErrorToConsole() -{ - console.error("test error message"); -} - -function methodForBreakpoint() -{ - alert("Hello world"); -} - -function test() { - UI.viewManager.showView('resources'); - SourcesTestRunner.runDebuggerTestSuite([ - function testConsoleMessage(next) { - SourcesTestRunner.showScriptSource('source-frame.html', didShowScriptSource); - - var shownSourceFrame; - function didShowScriptSource(sourceFrame) { - TestRunner.addResult('Script source was shown.'); - shownSourceFrame = sourceFrame; - TestRunner.addSniffer(SourceFrame.UISourceCodeFrame.prototype, '_addMessageToSource', didAddMessage); - TestRunner.addSniffer(SourceFrame.UISourceCodeFrame.prototype, '_removeMessageFromSource', didRemoveMessage); - TestRunner.evaluateInPage('addErrorToConsole()'); - } - - function didAddMessage(message) { - if (this !== shownSourceFrame) - return; - TestRunner.addResult('Message added to source frame: ' + message.text()); - setImmediate(function() { - Console.ConsoleView.clearConsole(); - }); - } - - function didRemoveMessage(message) { - if (this !== shownSourceFrame) - return; - TestRunner.addResult('Message removed from source frame: ' + message.text()); - next(); - } - }, - - function testShowResource(next) { - UI.viewManager.showView('network'); - TestRunner.addSniffer(SourceFrame.SourceFrame.prototype, 'show', didShowSourceFrame); - - TestRunner.resourceTreeModel.forAllResources(visit); - function visit(resource) { - if (resource.url.indexOf('debugger-test.js') !== -1) { - UI.panels.resources._sidebar.showResource(resource, 1); - return true; - } - } - - function didShowSourceFrame() { - next(); - } - } - ]); -}; - -</script> - -</head> - -<body onload="runTest()"> -<p>Tests that it's possible to set breakpoint in source frame, and that -source frame displays breakpoints and console errors. -</p> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/source-url-comment.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/source-url-comment.html deleted file mode 100644 index 9e16063..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/source-url-comment.html +++ /dev/null
@@ -1,179 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> -function keepAliveInInlineScript() { } - -//# sourceURL=inlineScriptURL.js -</script> -<script> -function doEval() -{ - eval("function keepAlive() {}\n//# sourceURL=evalURL.js"); -} - -function doEvalWithNonRelativeURL() -{ - eval("function relativeURLScript() {}\n//# sourceURL=js/nonRelativeURL.js"); -} - -function doDynamicScript() -{ - var scriptElement = document.createElement("script"); - scriptElement.textContent = "function keepAliveInDynamicScript() {}\n//# sourceURL=dynamicScriptURL.js"; - document.body.appendChild(scriptElement); -} - -function doURLAndMappingURL() -{ - eval("function keepAlive() {}\n//# sourceMappingURL=sourceMappingURL.map\n//# sourceURL=sourceURL.js"); -} - -function doEvalWithMultipleSourceURL() -{ - eval("\n//# sourceURL=evalURL2.js\nfunction keepAlive() {}\n//# sourceURL=evalMultipleURL.js"); -} - -function addScriptWithURL() -{ - var script = document.createElement("script"); - script.src = "../debugger/resources/script-with-url.js"; - document.head.appendChild(script); -} - -function addScriptWithPoorURL() -{ - var script = document.createElement("script"); - script.src = "../debugger/resources/script-with-poor-url.js"; - document.head.appendChild(script); -} - -function test() - -{ - function forEachScriptMatchingURL(url, handler) { - for (var script of TestRunner.debuggerModel.scripts()) { - if (script.sourceURL.indexOf(url) !== -1) - handler(script); - } - } - - SourcesTestRunner.runDebuggerTestSuite([ - function testSourceURLCommentInInlineScript(next) { - SourcesTestRunner.showScriptSource('source-url-comment.html', didShowScriptSource); - - function didShowScriptSource(sourceFrame) { - var panel = UI.panels.sources; - var uiSourceCodes = panel._workspace.uiSourceCodes(); - var ignored = true; - for (var i = 0; i < uiSourceCodes.length && ignored; ++i) { - if (uiSourceCodes[i].url().indexOf('inlineScriptURL.js') !== -1) - ignored = false; - } - if (ignored) - TestRunner.addResult('FAILED: sourceURL comment in inline script was ignored'); - next(); - } - }, - - function testSourceURLCommentInScript(next) { - SourcesTestRunner.showScriptSource('scriptWithSourceURL.js', didShowScriptSource); - TestRunner.evaluateInPage('setTimeout(addScriptWithURL, 0)'); - - function didShowScriptSource(sourceFrame) { - TestRunner.addResult(sourceFrame.textEditor.text().trim()); - forEachScriptMatchingURL('scriptWithSourceURL.js', checkScriptSourceURL); - next(); - } - }, - - function testPoorSourceURLCommentInScript(next) { - SourcesTestRunner.showScriptSource('source-url-comment.html', didShowScriptSource); - TestRunner.evaluateInPage('setTimeout(addScriptWithPoorURL, 0)'); - - function didShowScriptSource(sourceFrame) { - var panel = UI.panels.sources; - var uiSourceCodes = panel._workspace.uiSourceCodes(); - for (var i = 0; i < uiSourceCodes.length; ++i) { - if (uiSourceCodes[i].url().indexOf('scriptWithPoorSourceURL.js') !== -1) - TestRunner.addResult('FAILED: poor sourceURL comment in script was used as a script name'); - } - next(); - } - }, - - function testSourceURLComment(next) { - SourcesTestRunner.showScriptSource('evalURL.js', didShowScriptSource); - TestRunner.evaluateInPage('setTimeout(doEval, 0)'); - - function didShowScriptSource(sourceFrame) { - TestRunner.addResult(sourceFrame.textEditor.text()); - forEachScriptMatchingURL('evalURL.js', checkScriptSourceURL); - next(); - } - }, - - function testSourceURLAndMappingURLComment(next) { - SourcesTestRunner.showScriptSource('sourceURL.js', didShowScriptSource); - TestRunner.evaluateInPage('setTimeout(doURLAndMappingURL, 0)'); - - function didShowScriptSource(sourceFrame) { - function checkScriptSourceURLAndMappingURL(script) { - TestRunner.addResult('hasSourceURL: ' + script.hasSourceURL); - TestRunner.addResult('sourceMapURL: ' + script.sourceMapURL); - } - - TestRunner.addResult(sourceFrame.textEditor.text()); - forEachScriptMatchingURL('sourceURL.js', checkScriptSourceURLAndMappingURL); - next(); - } - }, - - function testSourceURLCommentInDynamicScript(next) { - SourcesTestRunner.showScriptSource('dynamicScriptURL.js', didShowScriptSource); - TestRunner.evaluateInPage('setTimeout(doDynamicScript, 0)'); - - function didShowScriptSource(sourceFrame) { - TestRunner.addResult(sourceFrame.textEditor.text()); - forEachScriptMatchingURL('dynamicScriptURL.js', checkScriptSourceURL); - next(); - } - }, - - function testNonRelativeURL(next) { - SourcesTestRunner.showScriptSource('js/nonRelativeURL.js', didShowScriptSource); - TestRunner.evaluateInPage('setTimeout(doEvalWithNonRelativeURL, 0)'); - - function didShowScriptSource(sourceFrame) { - TestRunner.addResult(sourceFrame.textEditor.text()); - forEachScriptMatchingURL('nonRelativeURL.js', checkScriptSourceURL); - next(); - } - }, - - function testMultipleSourceURLComment(next) { - SourcesTestRunner.showScriptSource('evalMultipleURL.js', didShowScriptSource); - TestRunner.evaluateInPage('setTimeout(doEvalWithMultipleSourceURL, 0)'); - - function didShowScriptSource(sourceFrame) { - TestRunner.addResult(sourceFrame.textEditor.text()); - forEachScriptMatchingURL('evalMultipleURL.js', checkScriptSourceURL); - next(); - } - } - ]); - - function checkScriptSourceURL(script) { - TestRunner.addResult('hasSourceURL: ' + script.hasSourceURL); - } -}; - -</script> - -</head> - -<body onload="runTest()"> -<p>Tests that evals with sourceURL comment are shown in scripts panel.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/switch-file.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/switch-file.html deleted file mode 100644 index 8c41089..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/switch-file.html +++ /dev/null
@@ -1,43 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/page-mock.js"></script> -<script> - -async function test() { - var files = [ - 'foo.css', 'foo.js', 'foo.js.map', 'foo.ts', - - 'bar.css', 'bar.js', 'bar.js.map', 'bar.ts', - - 'baz.css', 'baz2', - - 'foo/foo.css', 'foo/foo.js', 'foo/foo.js.map', 'foo/foo.ts', 'foo/foo', - - 'bar/foo.css', 'bar/foo.js', 'bar/foo.js.map', 'bar/foo.ts', 'bar/foo' - ]; - files = files.map(file => 'http://example.com/' + file); - - var page = new TestRunner.PageMock('http://example.com'); - TestRunner.connectToPage('mock-page', page); - - var uiSourceCodes = []; - for (var i = 0; i < files.length; ++i) { - page.evalScript(files[i], '', false /* isContentScript */); - uiSourceCodes.push(await TestRunner.waitForUISourceCode(files[i])); - } - - TestRunner.addResult('Dumping next file for each file:'); - for (var uiSourceCode of uiSourceCodes) { - var nextUISourceCode = Sources.SourcesView.SwitchFileActionDelegate._nextFile(uiSourceCode); - var nextURI = nextUISourceCode ? nextUISourceCode.url() : '<none>'; - TestRunner.addResult(`Next file for ${uiSourceCode.url()} is ${nextURI}.`); - } - TestRunner.completeTest(); -} -</script> -</head> -<body onload="runTest()"> -<p>Tests how switch to next file with the same name and different extension feature works.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/ui-source-code-display-name.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/ui-source-code-display-name.html deleted file mode 100644 index 9693357..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/ui-source-code-display-name.html +++ /dev/null
@@ -1,26 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script> -async function test() { - async function dumpUISourceCodeDisplayName(url) { - var uiSourceCode = await SourcesTestRunner.addScriptUISourceCode(url, ''); - TestRunner.addResult( - 'UISourceCode display name for url "' + url + '" is "' + - Sources.TabbedEditorContainer.prototype._titleForFile(uiSourceCode) + '".'); - } - - const baseURL = 'http://localhost:8080/folder/'; - await dumpUISourceCodeDisplayName(baseURL + 'filename?parameter=value&nnn=1'); - await dumpUISourceCodeDisplayName(baseURL + 'very-long-filename-123456?nn=1'); - await dumpUISourceCodeDisplayName(baseURL + 'too-long-filename-1234567890?nn=1'); - await dumpUISourceCodeDisplayName(baseURL + 'long-filename?parameter=value&nnn=1'); - await dumpUISourceCodeDisplayName(baseURL + 'too-long-filename-1234567890?parameter=value&nnn=1'); - TestRunner.completeTest(); -}; -</script> -</head> -<body onload="runTest()"> -<p>Tests UISourceCode display name.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/ui-source-code.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/ui-source-code.html deleted file mode 100644 index fd853ab..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/ui-source-code.html +++ /dev/null
@@ -1,61 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> - -<script> - -function test() { - var MockProject = class extends Workspace.ProjectStore { - requestFileContent(uri, callback) { - TestRunner.addResult('Content is requested from SourceCodeProvider.'); - setTimeout(callback.bind(null, 'var x = 0;'), 0); - } - - mimeType() { - return 'text/javascript'; - } - - isServiceProject() { - return false; - } - - type() { - return Workspace.projectTypes.Debugger; - } - - url() { - return 'mock://debugger-ui/'; - } - }; - - TestRunner.runTestSuite([function testUISourceCode(next) { - var uiSourceCode = new Workspace.UISourceCode(new MockProject(), 'url', Common.resourceTypes.Script); - function didRequestContent(callNumber, content) { - TestRunner.addResult('Callback ' + callNumber + ' is invoked.'); - TestRunner.assertEquals('text/javascript', uiSourceCode.mimeType()); - TestRunner.assertEquals('var x = 0;', content); - - if (callNumber === 3) { - // Check that sourceCodeProvider.requestContent won't be called anymore. - uiSourceCode.requestContent().then(function(content) { - TestRunner.assertEquals('text/javascript', uiSourceCode.mimeType()); - TestRunner.assertEquals('var x = 0;', content); - next(); - }); - } - } - // Check that all callbacks will be invoked. - uiSourceCode.requestContent().then(didRequestContent.bind(null, 1)); - uiSourceCode.requestContent().then(didRequestContent.bind(null, 2)); - uiSourceCode.requestContent().then(didRequestContent.bind(null, 3)); - }]); -}; - -</script> - -</head> - -<body onload="runTest()"> -<p>Tests UISourceCode class.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/watch-expressions-panel-switch.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/watch-expressions-panel-switch.html deleted file mode 100644 index 5dc4b7a..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/watch-expressions-panel-switch.html +++ /dev/null
@@ -1,44 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="../../../http/tests/inspector/network-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -function testFunction() -{ - var x = Math.sqrt(16); - debugger; - return x; -} - -function test() { - SourcesTestRunner.setQuiet(true); - SourcesTestRunner.startDebuggerTest(step1); - var updateCount = 8; - - Common.settings.createLocalSetting('watchExpressions', []).set(['x', 'y.foo']); - - function step1() { - watchExpressionsPane = self.runtime.sharedInstance(Sources.WatchExpressionsSidebarPane); - UI.panels.sources._sidebarPaneStack.showView(UI.panels.sources._watchSidebarPane).then(() => { - TestRunner.addSniffer(Sources.WatchExpression.prototype, '_createWatchExpression', watchExpressionsUpdated, true); - TestRunner.evaluateInPage('testFunction()'); - }); - } - - function watchExpressionsUpdated(result, wasThrown) { - TestRunner.addResult(this._element.deepTextContent()); - if (--updateCount === 0) - SourcesTestRunner.completeDebuggerTest(); - } -} - -</script> -</head> -<body onload="runTest()"> -<p>Tests debugger does not fail when stopped while a panel other than scripts was opened. Both valid and invalid expressions are added to watch expressions.</p> -<a href="https://bugs.webkit.org/show_bug.cgi?id=70718">Bug 70718</a> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/watch-expressions-preserve-expansion.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/watch-expressions-preserve-expansion.html deleted file mode 100644 index 53f8310c..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/watch-expressions-preserve-expansion.html +++ /dev/null
@@ -1,124 +0,0 @@ -<html> -<head> -<script src="../../../http/tests/inspector/inspector-test.js"></script> -<script src="../../../http/tests/inspector/elements-test.js"></script> -<script src="../../../http/tests/inspector/debugger-test.js"></script> -<script> - -var globalObject = { - foo: { - bar: { - baz: 2012 - } - } -}; -var windowAlias = window; -var array = []; -for (var i = 0; i < 300; ++i) - array[i] = i; - -(function() -{ - var a = 10; - var b = 100; - window.func = function() {return a + b;} -}()); - -var test = function() { - var watchExpressionsPane = self.runtime.sharedInstance(Sources.WatchExpressionsSidebarPane); - UI.panels.sources._sidebarPaneStack.showView(UI.panels.sources._watchSidebarPane).then(() => { - watchExpressionsPane.doUpdate(); - watchExpressionsPane._createWatchExpression('globalObject'); - watchExpressionsPane._createWatchExpression('windowAlias'); - watchExpressionsPane._createWatchExpression('array'); - watchExpressionsPane._createWatchExpression('func'); - watchExpressionsPane._saveExpressions(); - TestRunner.deprecatedRunAfterPendingDispatches(step2); - }); - - function step2() { - TestRunner.addResult('Watch expressions added.'); - var expandArray = expandWatchExpression.bind(null, ['array', '[200 \u2026 299]', '299'], step3); - var expandFunc = expandWatchExpression.bind(null, ['func', '[[Scopes]]', '0', 'a'], expandArray); - expandWatchExpression(['globalObject', 'foo', 'bar'], expandFunc); - } - - function step3() { - TestRunner.addResult('Watch expressions expanded.'); - dumpWatchExpressions(); - TestRunner.reloadPage(step4); - } - - function step4() { - TestRunner.addResult('Watch expressions after page reload:'); - dumpWatchExpressions(); - TestRunner.completeTest(); - } - - function dumpWatchExpressions() { - var pane = self.runtime.sharedInstance(Sources.WatchExpressionsSidebarPane); - - for (var i = 0; i < pane._watchExpressions.length; i++) { - var watch = pane._watchExpressions[i]; - TestRunner.addResult(watch.expression() + ': ' + watch._objectPropertiesSection._object._description); - dumpObjectPropertiesTreeElement(watch._objectPropertiesSection.objectTreeElement(), ' '); - } - } - - function dumpObjectPropertiesTreeElement(treeElement, indent) { - if (treeElement.property) - addResult(indent + treeElement.property.name + ': ' + treeElement.property.value._description); - else if (typeof treeElement.title === 'string') - addResult(indent + treeElement.title); - - for (var i = 0; i < treeElement.children().length; i++) - dumpObjectPropertiesTreeElement(treeElement.children()[i], ' ' + indent); - } - - function expandProperties(treeoutline, path, callback) { - treeoutline.addEventListener(UI.TreeOutline.Events.ElementAttached, elementAttached); - treeoutline.expand(); - - function elementAttached(event) { - var treeElement = event.data; - var currentName = treeElement.property ? treeElement.property.name : treeElement.title; - if (currentName !== path[0]) - return; - - var childName = path.shift(); - addResult('expanded ' + childName + ' ' + (treeElement.property ? treeElement.property.value : '')); - - if (path.length) { - treeElement.expand(); - return; - } - - treeoutline.removeEventListener(UI.TreeOutline.Events.ElementAttached, elementAttached); - callback(); - } - } - - function expandWatchExpression(path, callback) { - var pane = self.runtime.sharedInstance(Sources.WatchExpressionsSidebarPane); - var expression = path.shift(); - for (var i = 0; i < pane._watchExpressions.length; i++) { - var watch = pane._watchExpressions[i]; - if (watch.expression() === expression) { - expandProperties(watch._objectPropertiesSection, path, callback); - break; - } - } - } - - function addResult(string) { - TestRunner.addResult(string.replace('\u2026', '..')); - } -}; - -</script> -</head> -<body onload="runTest()"> -<p>Test that watch expressions expansion state is restored after update.</p> -<a href="https://bugs.webkit.org/show_bug.cgi?id=99304">Bug 99304</a> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/click-breakpoints.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/click-breakpoints.js deleted file mode 100644 index 93ed146..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/click-breakpoints.js +++ /dev/null
@@ -1,11 +0,0 @@ -function f2() -{ - var a = 0; // This is too early for the breakpoint - var b = 1; // The breakpoint should happen here - var c = 3; - var d = 4; - var e = 5; - var f = "The code went past the breakpoint!"; - debugger; // So if it fails, the test doesn't hang - return 0; -}
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/dynamic-script.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/dynamic-script.js deleted file mode 100644 index fb9fb81..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/dynamic-script.js +++ /dev/null
@@ -1,5 +0,0 @@ -function fooDynamicScript() -{ -} - -scriptLoaded();
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/edit-me-2.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/edit-me-2.js deleted file mode 100644 index ff9dc4a2..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/edit-me-2.js +++ /dev/null
@@ -1,4 +0,0 @@ -function editMe2F() -{ - return 0; -}
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/edit-me-breakpoints.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/edit-me-breakpoints.js deleted file mode 100644 index 36ed3f8..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/edit-me-breakpoints.js +++ /dev/null
@@ -1,4 +0,0 @@ -function f() -{ - return 0; -}
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/edit-me-syntax-error.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/edit-me-syntax-error.js deleted file mode 100644 index 7f7c8bd9..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/edit-me-syntax-error.js +++ /dev/null
@@ -1,4 +0,0 @@ -function syntaxError() -{ - return ,"I'm good"; -}
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/edit-me-when-paused-no-reveal.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/edit-me-when-paused-no-reveal.js deleted file mode 100644 index 2b322b9..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/edit-me-when-paused-no-reveal.js +++ /dev/null
@@ -1,10 +0,0 @@ -function f2() -{ - return 1; -} - -function f1() -{ - var x = 1; - return x + f2(); -}
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/edit-me-when-paused.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/edit-me-when-paused.js deleted file mode 100644 index 58b9c8e3..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/edit-me-when-paused.js +++ /dev/null
@@ -1,11 +0,0 @@ -function f2() -{ - return 1; -} - -function f1() -{ - var x = 1; - debugger; - return x + f2(); -}
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/edit-me.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/edit-me.js deleted file mode 100644 index 36ed3f8..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/edit-me.js +++ /dev/null
@@ -1,4 +0,0 @@ -function f() -{ - return 0; -}
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/framework-with-sourcemap.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/framework-with-sourcemap.js deleted file mode 100644 index daf21fa88..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/framework-with-sourcemap.js +++ /dev/null
@@ -1,9 +0,0 @@ -"use strict"; - -function foo(callback) { - var i = 239; - var result = callback(i + 42); - return result; -} - -//# sourceMappingURL=framework-with-sourcemap.js.map \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/framework-with-sourcemap.js.map b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/framework-with-sourcemap.js.map deleted file mode 100644 index a7f5a51..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/framework-with-sourcemap.js.map +++ /dev/null
@@ -1 +0,0 @@ -{"version":3,"sources":["framework.js"],"names":[],"mappings":";;AAAA,SAAS,GAAG,CAAC,QAAQ,EACrB;AACI,QAAI,CAAC,GAAG,GAAG,CAAC;AACZ,QAAI,MAAM,GAAG,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9B,WAAO,MAAM,CAAC;CACjB","file":"framework-with-sourcemap.js","sourcesContent":["function foo(callback)\n{\n var i = 239;\n var result = callback(i + 42);\n return result;\n}\n"]} \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/framework.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/framework.js deleted file mode 100644 index 39b9665..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/framework.js +++ /dev/null
@@ -1,175 +0,0 @@ -// A framework for testing. - -var Framework = {}; - -Framework.safeRun = function(callback, onSuccess, onException, breakOnUncaught) -{ - try { - callback(); - if (onSuccess) - Framework.safeRun(onSuccess, undefined, onException, breakOnUncaught); - } catch (e) { - if (onException) - Framework.safeRun(onException, undefined, breakOnUncaught ? Framework.breakInFramework : undefined); - else if (breakOnUncaught) - Framework.breakInFramework(); - } -} - -Framework.throwFrameworkException = function(msg) -{ - throw Error("FrameworkException" + (msg ? ": " + msg : "")); -} - -Framework.breakInFramework = function() -{ - debugger; -} - -Framework.empty = function() -{ -} - -Framework.doSomeWork = function() -{ - const numberOfSteps = 50; - for (var i = 0; i < numberOfSteps; ++i) { - if (window["dummy property should not exist!" + i]) // Prevent optimizations. - return i; - Framework.safeRun(Framework.empty, Framework.empty, Framework.empty, true); - } -} - -Framework.schedule = function(callback, delay) -{ - setTimeout(callback, delay || 0); -} - -Framework.willSchedule = function(callback, delay) -{ - return function Framework_willSchedule() { - return Framework.schedule(callback, delay); - }; -} - -Framework.doSomeAsyncChainCalls = function(callback) -{ - var func1 = Framework.willSchedule(function Framework_inner1() { - if (callback) - callback(); - }); - var func2 = Framework.willSchedule(function Framework_inner2() { - if (window.callbackFromFramework) - window.callbackFromFramework(func1); - else - func1(); - }); - Framework.schedule(func2); -} - -Framework.appendChild = function(parent, child) -{ - parent.appendChild(child); -} - -Framework.sendXHR = function(url) -{ - var request = new XMLHttpRequest(); - request.open("GET", url, true); - try { request.send(); } catch (e) {} -} - -Framework.addEventListener = function(element, eventType, listener, capture) -{ - function Framework_eventListener() - { - var result = listener ? listener() : void 0; - return result; - } - - function Framework_remover() - { - element.removeEventListener(eventType, Framework_eventListener, capture); - } - - element.addEventListener(eventType, Framework_eventListener, capture); - return Framework_remover; -} - -Framework.bind = function(func, thisObject, var_args) -{ - var args = Array.prototype.slice.call(arguments, 2); - - function Framework_bound(var_args) - { - return func.apply(thisObject, args.concat(Array.prototype.slice.call(arguments))); - } - Framework_bound.toString = function() - { - return "Framework_bound: " + func; - }; - return Framework_bound; -} - -Framework.throwInNative = function() -{ - var wrongJson = "})"; - window["dummy"] = JSON.parse(wrongJson); -} - -Framework.throwInNativeAndCatch = function() -{ - try { - Framework.throwInNative(); - } catch(e) { - } -} - -Framework.throwFrameworkExceptionAndCatch = function() -{ - try { - Framework.throwFrameworkException(); - } catch(e) { - } -} - -Framework.scheduleUntilDone = function(callback, delay) -{ - Framework.schedule(Framework_scheduleUntilDone, delay); - - function Framework_scheduleUntilDone() - { - if (callback && callback()) - return; - Framework.schedule(Framework_scheduleUntilDone, delay); - } -} - -Framework.doSomeWorkDoNotChangeTopCallFrame = function() -{ - const numberOfSteps = 5000; - for (var i = 0; i < numberOfSteps; ++i) { - if (window["dummy property should not exist!" + i]) // Prevent optimizations. - return i; - } - return -1; -} - -Framework.assert = function(var_args) -{ - var args = Array.prototype.slice.call(arguments, 0); - return console.assert.apply(console, args); -} - -Framework.createButtonWithEventListenersAndClick = function(eventListener) -{ - var button = document.createElement("input"); - button.type = "button"; - Framework.addEventListener(button, "click", Framework.empty, true); - Framework.addEventListener(button, "click", Framework.bind(Framework.empty, null), false); - Framework.addEventListener(button, "click", Framework.bind(Framework.safeRun, null, Framework.empty, Framework.empty, Framework.empty), true); - if (eventListener) - Framework.addEventListener(button, "click", eventListener, true); - button.click(); - return button; -}
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/jquery-1.11.1.min.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/jquery-1.11.1.min.js deleted file mode 100644 index ab28a24..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/jquery-1.11.1.min.js +++ /dev/null
@@ -1,4 +0,0 @@ -/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h; -if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==cb()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===cb()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ab:bb):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:bb,isPropagationStopped:bb,isImmediatePropagationStopped:bb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ab,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ab,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ab,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=bb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=bb),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function db(a){var b=eb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var eb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fb=/ jQuery\d+="(?:null|\d+)"/g,gb=new RegExp("<(?:"+eb+")[\\s/>]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/<tbody/i,lb=/<|&#?\w+;/,mb=/<(?:script|style|link)/i,nb=/checked\s*(?:[^=]|=\s*.checked.)/i,ob=/^$|\/(?:java|ecma)script/i,pb=/^true\/(.*)/,qb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,rb={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?"<table>"!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Cb[0].contentWindow||Cb[0].contentDocument).document,b.write(),b.close(),c=Eb(a,b),Cb.detach()),Db[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Gb=/^margin/,Hb=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ib,Jb,Kb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ib=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Hb.test(g)&&Gb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ib=function(a){return a.currentStyle},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Hb.test(g)&&!Kb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Lb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Mb=/alpha\([^)]*\)/i,Nb=/opacity\s*=\s*([^)]*)/,Ob=/^(none|table(?!-c[ea]).+)/,Pb=new RegExp("^("+S+")(.*)$","i"),Qb=new RegExp("^([+-])=("+S+")","i"),Rb={position:"absolute",visibility:"hidden",display:"block"},Sb={letterSpacing:"0",fontWeight:"400"},Tb=["Webkit","O","Moz","ms"];function Ub(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Tb.length;while(e--)if(b=Tb[e]+c,b in a)return b;return d}function Vb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fb(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wb(a,b,c){var d=Pb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Yb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ib(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Jb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Hb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xb(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Jb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ub(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ub(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Jb(a,b,d)),"normal"===f&&b in Sb&&(f=Sb[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Ob.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Rb,function(){return Yb(a,b,d)}):Yb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ib(a);return Wb(a,c,d?Xb(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Nb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Mb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Mb.test(f)?f.replace(Mb,e):f+" "+e)}}),m.cssHooks.marginRight=Lb(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Jb,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Gb.test(a)||(m.cssHooks[a+b].set=Wb)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ib(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Vb(this,!0)},hide:function(){return Vb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Zb(a,b,c,d,e){return new Zb.prototype.init(a,b,c,d,e)}m.Tween=Zb,Zb.prototype={constructor:Zb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px") -},cur:function(){var a=Zb.propHooks[this.prop];return a&&a.get?a.get(this):Zb.propHooks._default.get(this)},run:function(a){var b,c=Zb.propHooks[this.prop];return this.pos=b=this.options.duration?m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Zb.propHooks._default.set(this),this}},Zb.prototype.init.prototype=Zb.prototype,Zb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Zb.propHooks.scrollTop=Zb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Zb.prototype.init,m.fx.step={};var $b,_b,ac=/^(?:toggle|show|hide)$/,bc=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cc=/queueHooks$/,dc=[ic],ec={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bc.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bc.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fc(){return setTimeout(function(){$b=void 0}),$b=m.now()}function gc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hc(a,b,c){for(var d,e=(ec[b]||[]).concat(ec["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ic(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fb(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fb(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ac.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fb(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hc(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jc(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kc(a,b,c){var d,e,f=0,g=dc.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$b||fc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$b||fc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jc(k,j.opts.specialEasing);g>f;f++)if(d=dc[f].call(j,a,k,j.opts))return d;return m.map(k,hc,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kc,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],ec[c]=ec[c]||[],ec[c].unshift(b)},prefilter:function(a,b){b?dc.unshift(a):dc.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kc(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gc(b,!0),a,d,e)}}),m.each({slideDown:gc("show"),slideUp:gc("hide"),slideToggle:gc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($b=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$b=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_b||(_b=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_b),_b=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lc=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lc,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mc,nc,oc=m.expr.attrHandle,pc=/^(?:checked|selected)$/i,qc=k.getSetAttribute,rc=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nc:mc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rc&&qc||!pc.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qc?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nc={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rc&&qc||!pc.test(c)?a.setAttribute(!qc&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=oc[b]||m.find.attr;oc[b]=rc&&qc||!pc.test(b)?function(a,b,d){var e,f;return d||(f=oc[b],oc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,oc[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rc&&qc||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mc&&mc.set(a,b,c)}}),qc||(mc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},oc.id=oc.name=oc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mc.set},m.attrHooks.contenteditable={set:function(a,b,c){mc.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sc=/^(?:input|select|textarea|button|object)$/i,tc=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sc.test(a.nodeName)||tc.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var uc=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(uc," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vc=m.now(),wc=/\?/,xc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yc,zc,Ac=/#.*$/,Bc=/([?&])_=[^&]*/,Cc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Dc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ec=/^(?:GET|HEAD)$/,Fc=/^\/\//,Gc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hc={},Ic={},Jc="*/".concat("*");try{zc=location.href}catch(Kc){zc=y.createElement("a"),zc.href="",zc=zc.href}yc=Gc.exec(zc.toLowerCase())||[];function Lc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mc(a,b,c,d){var e={},f=a===Ic;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nc(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Oc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zc,type:"GET",isLocal:Dc.test(yc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nc(Nc(a,m.ajaxSettings),b):Nc(m.ajaxSettings,a)},ajaxPrefilter:Lc(Hc),ajaxTransport:Lc(Ic),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zc)+"").replace(Ac,"").replace(Fc,yc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yc[1]&&c[2]===yc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yc[3]||("http:"===yc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mc(Hc,k,b,v),2===t)return v;h=k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Ec.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bc.test(e)?e.replace(Bc,"$1_="+vc++):e+(wc.test(e)?"&":"?")+"_="+vc++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mc(Ic,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Oc(k,v,c)),u=Pc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qc=/%20/g,Rc=/\[\]$/,Sc=/\r?\n/g,Tc=/^(?:submit|button|image|reset|file)$/i,Uc=/^(?:input|select|textarea|keygen)/i;function Vc(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rc.test(a)?d(a,e):Vc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vc(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vc(c,a[c],b,e);return d.join("&").replace(Qc,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Uc.test(this.nodeName)&&!Tc.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sc,"\r\n")}}):{name:b.name,value:c.replace(Sc,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zc()||$c()}:Zc;var Wc=0,Xc={},Yc=m.ajaxSettings.xhr();a.ActiveXObject&&m(a).on("unload",function(){for(var a in Xc)Xc[a](void 0,!0)}),k.cors=!!Yc&&"withCredentials"in Yc,Yc=k.ajax=!!Yc,Yc&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xc[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zc(){try{return new a.XMLHttpRequest}catch(b){}}function $c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _c=[],ad=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_c.pop()||m.expando+"_"+vc++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ad.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ad.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ad,"$1"+e):b.jsonp!==!1&&(b.url+=(wc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_c.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bd=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bd)return bd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cd=a.document.documentElement;function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dd(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cd;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cd})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dd(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=Lb(k.pixelPosition,function(a,c){return c?(c=Jb(a,b),Hb.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ed=a.jQuery,fd=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fd),b&&a.jQuery===m&&(a.jQuery=ed),m},typeof b===K&&(a.jQuery=a.$=m),m});
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/load-dynamic-script.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/load-dynamic-script.js deleted file mode 100644 index 772beee..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/load-dynamic-script.js +++ /dev/null
@@ -1,9 +0,0 @@ -function loadDynamicScript() -{ - var scriptElement = document.createElement("script"); - scriptElement.textContent = "function bar() { } \nconsole.log(\"DYNAMIC <script>\");"; - document.head.appendChild(scriptElement); -} - -document.write("<scrip" + "t>function foo() { } \nconsole.log(\"DYNAMIC document.write()\");</sc" + "ript>"); -loadDynamicScript(); \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/multiple-scripts.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/multiple-scripts.html deleted file mode 100644 index b102fb2c..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/multiple-scripts.html +++ /dev/null
@@ -1,21 +0,0 @@ -<body> - - -<script> - window.x = 1; - - var foo = 1; - foo = 2; -</script> - - - <script> -var bar = 1; - bar = 2; -// If we put next two tags on the same line, script ranges overlap and frontend gets wrong uiLocationToRawLocation. -</script> -<script>var baz = 3;baz = 2;</script> - - - -</body> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/obfuscated.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/obfuscated.js deleted file mode 100644 index f3403d5..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/obfuscated.js +++ /dev/null
@@ -1,20 +0,0 @@ -function formatted1() -{ - var variable1 = 0; -} - -function withComments() -{ -// comment - return "functionWithComments"; -} - -try{onmessage=function(event){var source=event.data;var formattedSource=beautify(source);var mapping=buildMapping(source,formattedSource);postMessage({formattedSource:formattedSource,mapping:mapping})};function beautify(source){var ast=parse.parse(source);var beautifyOptions= -{indent_level:4,indent_start:0,quote_keys:false,space_colon:false};return process.gen_code(ast,beautifyOptions)}function buildMapping(source,formattedSource){var mapping={original:[],formatted:[]};var lastPosition=0;var regexp=/(^|[^\\])\b((?=\D)[\$\.\w]+)\b/g;while(true) -{var match=regexp.exec(formattedSource);if(!match)break;var position=source.indexOf(match[2],lastPosition);if(position===-1)throw"No match found in original source for "+match[2];mapping.original.push(position);mapping.formatted.push(match.index+match[1].length); -lastPosition=position+match[2].length}return mapping}function require(){return parse}var exports={};importScripts("UglifyJS/parse-js.js");var parse=exports;var exports={};importScripts("UglifyJS/process.js");var process=exports;}catch(e){} - -function formatted2() -{ - var variable2 = 0; -}
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/post-message-listener.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/post-message-listener.html deleted file mode 100644 index ee46a27..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/post-message-listener.html +++ /dev/null
@@ -1,19 +0,0 @@ -<!DOCTYPE html> -<html> -<body> -<script> -function onMessageReceivedInFrame(e) { - var msg = 'Received message: data="' + e.data + '" origin="' + e.origin + '"'; - if (e.data !== "skip debugger") debugger; - postMessageToParent(msg); -} - -function postMessageToParent(msg) -{ - top.postMessage(msg, "*"); -} - -window.addEventListener("message", onMessageReceivedInFrame, false); -</script> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-expressions-compressed.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-expressions-compressed.js deleted file mode 100644 index 7fda8be2..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-expressions-compressed.js +++ /dev/null
@@ -1,2 +0,0 @@ -function foo(o,p){var r=new ClassA;r.prop1=o;this.prop2=p;r["prop3"]="property";debugger;return r.prop1+this.prop2}function testFunction(){foo.call({},"param1","param2")}function ClassA(){} -//# sourceMappingURL=resolve-expressions.js.map
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-expressions-origin.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-expressions-origin.js deleted file mode 100644 index 1a70a743..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-expressions-origin.js +++ /dev/null
@@ -1,18 +0,0 @@ -function foo(parameter1, parameter2) -{ - var object = new ClassA(); - object.prop1 = parameter1; - this.prop2 = parameter2; - object["prop3"] = "property"; - debugger; - return object.prop1 + this.prop2; -} - -function testFunction() -{ - foo.call({}, "param1", "param2"); -} - -function ClassA() -{ -} \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-expressions.js.map b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-expressions.js.map deleted file mode 100644 index 23609cb8..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-expressions.js.map +++ /dev/null
@@ -1 +0,0 @@ -{"version":3,"sources":["resolve-expressions-origin.js"],"names":["foo","parameter1","parameter2","object","ClassA","prop1","this","prop2","testFunction","call"],"mappings":"AAAA,QAASA,KAAIC,EAAYC,GAErB,GAAIC,GAAU,GAAIC,OAClBD,GAAOE,MAAQJ,CACfK,MAAKC,MAAQL,CACbC,GAAO,SAAW,UAClB,SACA,OAAOA,GAAOE,MAAQC,KAAKC,MAG/B,QAASC,gBAELR,IAAIS,QAAS,SAAU,UAG3B,QAASL"} \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-identifiers.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-identifiers.js deleted file mode 100644 index 92eca8e..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-identifiers.js +++ /dev/null
@@ -1,8 +0,0 @@ -function testFunction() { - var pos = 10; - for (var pos_1 = 0; pos_1 < 1; pos_1++) { - console.log(pos_1); - debugger; - } -} -//# sourceMappingURL=resolve-identifiers.js.map
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-identifiers.js.map b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-identifiers.js.map deleted file mode 100644 index debfb39..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-identifiers.js.map +++ /dev/null
@@ -1 +0,0 @@ -{"version":3,"file":"resolve-identifiers.js","sourceRoot":"","sources":["resolve-identifiers.ts"],"names":[],"mappings":"AAAA;IACI,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,GAAG,CAAC,CAAC,IAAI,KAAG,GAAG,CAAC,EAAE,KAAG,GAAG,CAAC,EAAE,KAAG,EAAE,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAG,CAAC,CAAC;QACjB,QAAQ,CAAC;IACb,CAAC;AACL,CAAC"} \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-identifiers.ts b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-identifiers.ts deleted file mode 100644 index d0e277c..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-identifiers.ts +++ /dev/null
@@ -1,7 +0,0 @@ -function testFunction() { - let pos = 10; - for (let pos = 0; pos < 1; pos++) { - console.log(pos); - debugger; - } -}
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-this.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-this.js deleted file mode 100644 index 73fdadaf..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-this.js +++ /dev/null
@@ -1,17 +0,0 @@ -var Foo = (function () { - function Foo() { - } - Foo.prototype.bar = function () { - var _this = this; - var test = function () { - console.log(_this); - debugger; - }; - test(); - }; - return Foo; -}()); -function testFunction() { - new Foo().bar(); -} -//# sourceMappingURL=resolve-this.js.map \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-this.js.map b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-this.js.map deleted file mode 100644 index 825d824f..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-this.js.map +++ /dev/null
@@ -1 +0,0 @@ -{"version":3,"file":"resolve-this.js","sourceRoot":"","sources":["resolve-this.ts"],"names":[],"mappings":"AAAA;IACI;IACA,CAAC;IAED,iBAAG,GAAH;QAAA,iBAMC;QALG,IAAI,IAAI,GAAG;YACP,OAAO,CAAC,GAAG,CAAC,KAAI,CAAC,CAAC;YAClB,QAAQ,CAAC;QACb,CAAC,CAAC;QACF,IAAI,EAAE,CAAC;IACX,CAAC;IACL,UAAC;AAAD,CAAC,AAXD,IAWC;AAED;IACI,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AACpB,CAAC"} \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-this.ts b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-this.ts deleted file mode 100644 index 29b3761..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-this.ts +++ /dev/null
@@ -1,16 +0,0 @@ -class Foo { - constructor() { - } - - bar() { - let test = () => { - console.log(this); - debugger; - }; - test(); - } -} - -function testFunction() { - new Foo().bar(); -}
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-variable-names-compressed.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-variable-names-compressed.js deleted file mode 100644 index 3149880..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-variable-names-compressed.js +++ /dev/null
@@ -1,2 +0,0 @@ -function foo(o,t){try{throw"boom!"}catch(e){var n={};var r=new Map;r.set(o,t);debugger;return r.get(n)}}function testFunction(){foo(100,"hello")} -//# sourceMappingURL=resolve-variable.js.map
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-variable-names-origin.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-variable-names-origin.js deleted file mode 100644 index 33e9253..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-variable-names-origin.js +++ /dev/null
@@ -1,17 +0,0 @@ -function foo(parameter1, parameter2) -{ - try { - throw "boom!"; - } catch (error) { - var longObject = {}; - var longMap = new Map(); - longMap.set(parameter1, parameter2); - debugger; - return longMap.get(longObject); - } -} - -function testFunction() -{ - foo(100, "hello"); -} \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-variable.js.map b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-variable.js.map deleted file mode 100644 index 92de634f..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/resolve-variable.js.map +++ /dev/null
@@ -1 +0,0 @@ -{"version":3,"sources":["resolve-variable-names-origin.js"],"names":["foo","parameter1","parameter2","error","longObject","longMap","Map","set","get","testFunction"],"mappings":"AAAA,QAASA,KAAIC,EAAYC,GAErB,IACI,KAAM,QACR,MAAOC,GACL,GAAIC,KACJ,IAAIC,GAAU,GAAIC,IAClBD,GAAQE,IAAIN,EAAYC,EACxB,SACA,OAAOG,GAAQG,IAAIJ,IAI3B,QAASK,gBAELT,IAAI,IAAK"} \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/script-failed-to-parse.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/script-failed-to-parse.js deleted file mode 100644 index 5c34318c..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/script-failed-to-parse.js +++ /dev/null
@@ -1 +0,0 @@ -}
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/script-with-poor-url.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/script-with-poor-url.js deleted file mode 100644 index 59eb424..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/script-with-poor-url.js +++ /dev/null
@@ -1,3 +0,0 @@ -function scriptWithPoorSourceURL() {} - -//# sourceURL=scriptWithPoorSourceURL.js more text
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/script-with-url.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/script-with-url.js deleted file mode 100644 index bf9f428..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/script-with-url.js +++ /dev/null
@@ -1,3 +0,0 @@ -function scriptWithSourceURL() {} - -//# sourceURL=scriptWithSourceURL.js
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/script1.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/script1.js deleted file mode 100644 index a6fe4c3a..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/script1.js +++ /dev/null
@@ -1 +0,0 @@ -function f1() {} \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/script2.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/script2.js deleted file mode 100644 index 8665a0f2..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/script2.js +++ /dev/null
@@ -1 +0,0 @@ -function f2() {} \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/script3.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/script3.js deleted file mode 100644 index e3fb3436..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/script3.js +++ /dev/null
@@ -1 +0,0 @@ -function f3() {} \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/style1.css b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/style1.css deleted file mode 100644 index 208d16d4..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/style1.css +++ /dev/null
@@ -1 +0,0 @@ -body {}
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/syntax-error.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/syntax-error.html deleted file mode 100644 index 5aee214..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/syntax-error.html +++ /dev/null
@@ -1,10 +0,0 @@ -<html> -<head> -<script> -) -</script> -</head> - -<body onload="console.log('Iframe loaded');"> -</body> -</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/unformatted-async.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/unformatted-async.js deleted file mode 100644 index 4ce0f018..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/unformatted-async.js +++ /dev/null
@@ -1,10 +0,0 @@ -function f2() -{ - var a=0;var b=1;var c=3;var d=4;var e=5; - var f=0;setTimeout(f3, 0); -} - -function f3() -{ - debugger; -}
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/unformatted.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/unformatted.js deleted file mode 100644 index da4cef7c2..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/unformatted.js +++ /dev/null
@@ -1,6 +0,0 @@ -function f2() -{ - var a=0;var b=1;var c=3;var d=4;var e=5; - var f=0; - return 0; -}
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/unformatted2.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/unformatted2.js deleted file mode 100644 index da4cef7c2..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/unformatted2.js +++ /dev/null
@@ -1,6 +0,0 @@ -function f2() -{ - var a=0;var b=1;var c=3;var d=4;var e=5; - var f=0; - return 0; -}
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/unformatted3.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/unformatted3.js deleted file mode 100644 index da4cef7c2..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/unformatted3.js +++ /dev/null
@@ -1,6 +0,0 @@ -function f2() -{ - var a=0;var b=1;var c=3;var d=4;var e=5; - var f=0; - return 0; -}
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/unformatted4.js b/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/unformatted4.js deleted file mode 100644 index da4cef7c2..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/resources/unformatted4.js +++ /dev/null
@@ -1,6 +0,0 @@ -function f2() -{ - var a=0;var b=1;var c=3;var d=4;var e=5; - var f=0; - return 0; -}
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/dont-diverge-script-evaluated-twice.html b/third_party/WebKit/LayoutTests/inspector/sources/dont-diverge-script-evaluated-twice.html deleted file mode 100644 index 9a9147a..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/dont-diverge-script-evaluated-twice.html +++ /dev/null
@@ -1,53 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script> - -var test = function() { - const scriptSource = '239\n//# sourceURL=test.js'; - const changedScriptSource = '42\n//# sourceURL=test.js'; - - SourcesTestRunner.startDebuggerTest(step1); - - function step1() { - SourcesTestRunner.waitForScriptSource('test.js', step2); - TestRunner.evaluateInPage(scriptSource); - } - - function step2(uiSourceCode) { - TestRunner.addSnifferPromise(Bindings.ResourceScriptFile.prototype, '_mappingCheckedForTest') - .then(() => step3(uiSourceCode)); - SourcesTestRunner.showScriptSource('test.js'); - } - - function step3(uiSourceCode) { - var debuggerModel = TestRunner.debuggerModel; - var scriptFile = Bindings.debuggerWorkspaceBinding.scriptFile(uiSourceCode, debuggerModel); - if (!scriptFile) { - TestRunner.addResult('[FAIL]: no script file for test.js'); - SourcesTestRunner.completeDebuggerTest(); - return; - } - if (scriptFile.hasDivergedFromVM() || scriptFile.isDivergingFromVM()) { - TestRunner.addResult('[FAIL]: script file is diverged from VM'); - SourcesTestRunner.completeDebuggerTest(); - return; - } - - TestRunner.addSnifferPromise(Sources.JavaScriptSourceFrame.prototype, '_didDivergeFromVM').then(dumpDivergeFromVM); - TestRunner.addSnifferPromise(Bindings.ResourceScriptFile.prototype, '_mappingCheckedForTest') - .then(() => SourcesTestRunner.completeDebuggerTest()); - TestRunner.evaluateInPage(changedScriptSource); - } - - function dumpDivergeFromVM() { - TestRunner.addResult('[FAIL]: script file was diverged from VM'); - } -}; -</script> -</head> -<body onload="runTest()"> -<p>Checks that script evaluated twice with different source and the same sourceURL won't be diverged from VM.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/formatter-css.html b/third_party/WebKit/LayoutTests/inspector/sources/formatter-css.html deleted file mode 100644 index 733ff30..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/formatter-css.html +++ /dev/null
@@ -1,65 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<link rel="stylesheet" href="resources/style-formatter-obfuscated.css"> - -<script> -async function test() { - var uiSourceCode = await TestRunner.waitForUISourceCode('style-formatter-obfuscated.css'); - var formatData = await Sources.sourceFormatter.format(uiSourceCode); - var targetContent = await formatData.formattedSourceCode.requestContent(); - - TestRunner.addResult(`Formatted:\n${targetContent}`); - - var originalContent = await uiSourceCode.requestContent(); - var styleHeader = Bindings.cssWorkspaceBinding.uiLocationToRawLocations(uiSourceCode.uiLocation(0, 0))[0].header(); - var text = new TextUtils.Text(originalContent); - var liveLocationsPool = new Bindings.LiveLocationPool(); - var locationUpdateCount = 0; - var rawLocations = []; - var liveLocations = []; - for (var offset = originalContent.indexOf('{'); offset >= 0; offset = originalContent.indexOf('{', offset + 1)) { - var position = text.positionFromOffset(offset); - var rawLocation = new SDK.CSSLocation(styleHeader, position.lineNumber, position.columnNumber); - rawLocations.push(rawLocation); - liveLocations.push(Bindings.cssWorkspaceBinding.createLiveLocation(rawLocation, () => { - locationUpdateCount++; - }, liveLocationsPool)); - } - - TestRunner.addResult('Location mapping with formatted source:'); - dumpLocations(); - - Sources.sourceFormatter.discardFormattedUISourceCode(formatData.formattedSourceCode); - - TestRunner.addResult('Location mapping without formatted source:'); - dumpLocations(); - - TestRunner.completeTest(); - - function dumpLocations() { - TestRunner.addResult('Mapped locations:'); - for (var rawLocation of rawLocations) { - var uiLocation = Bindings.cssWorkspaceBinding.rawLocationToUILocation(rawLocation); - var reverseRawLocation = Bindings.cssWorkspaceBinding.uiLocationToRawLocations(uiLocation)[0]; - TestRunner.addResult( - `${rawLocation.lineNumber}:${rawLocation.columnNumber} -> ${uiLocation.lineNumber}:${ - uiLocation.columnNumber - } ` + - `-> ${reverseRawLocation.lineNumber}:${reverseRawLocation.columnNumber}`); - } - TestRunner.addResult(`Live locations (updated: ${locationUpdateCount}):`); - for (var liveLocation of liveLocations) { - var uiLocation = liveLocation.uiLocation(); - TestRunner.addResult(`${uiLocation.lineNumber}:${uiLocation.columnNumber}`); - } - } -} -</script> - -</head> -<body onload="runTest()"> -<p>Tests how SourceFormatter handles CSS sources</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/formatter-js.html b/third_party/WebKit/LayoutTests/inspector/sources/formatter-js.html deleted file mode 100644 index 9e2be40..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/formatter-js.html +++ /dev/null
@@ -1,52 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script src="debugger/resources/obfuscated.js"></script> - -<script> -async function test() { - var uiSourceCode = await TestRunner.waitForUISourceCode('obfuscated.js'); - var formatData = await Sources.sourceFormatter.format(uiSourceCode); - var targetContent = await formatData.formattedSourceCode.requestContent(); - - TestRunner.addResult(`Formatted:\n${targetContent}`); - - var originalContent = await uiSourceCode.requestContent(); - var text = new TextUtils.Text(originalContent); - var positions = []; - for (var offset = originalContent.indexOf('{'); offset >= 0; offset = originalContent.indexOf('{', offset + 1)) - positions.push(text.positionFromOffset(offset)); - var script = Bindings.debuggerWorkspaceBinding.uiLocationToRawLocation(uiSourceCode, 0, 0).script(); - - TestRunner.addResult('Location mapping with formatted source:'); - dumpLocations(positions); - - Sources.sourceFormatter.discardFormattedUISourceCode(formatData.formattedSourceCode); - - TestRunner.addResult('Location mapping without formatted source:'); - dumpLocations(positions); - - TestRunner.completeTest(); - - function dumpLocations(positions) { - for (var position of positions) { - var rawLocation = TestRunner.debuggerModel.createRawLocation(script, position.lineNumber, position.columnNumber); - var uiLocation = Bindings.debuggerWorkspaceBinding.rawLocationToUILocation(rawLocation); - var reverseRawLocation = Bindings.debuggerWorkspaceBinding.uiLocationToRawLocation( - uiLocation.uiSourceCode, uiLocation.lineNumber, uiLocation.columnNumber); - TestRunner.addResult( - `${rawLocation.lineNumber}:${rawLocation.columnNumber} -> ${uiLocation.lineNumber}:${ - uiLocation.columnNumber - }` + - ` -> ${reverseRawLocation.lineNumber}:${reverseRawLocation.columnNumber}`); - } - } -} -</script> - -</head> -<body onload="runTest()"> -<p>Tests how SourceFormatter handles JS sources</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/inspect-function.html b/third_party/WebKit/LayoutTests/inspector/sources/inspect-function.html deleted file mode 100644 index 62b4d13..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/inspect-function.html +++ /dev/null
@@ -1,26 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/console-test.js"></script> -<script> -function test() { - var revealed = 0; - TestRunner.addSniffer(Sources.SourcesView.prototype, 'showSourceLocation', didReveal, true); - ConsoleTestRunner.evaluateInConsole('function foo() { }; inspect(foo.bind());inspect(foo);'); - - function didReveal(uiSourceCode, lineNumber, columnNumber) { - TestRunner.addResult('Function was revealed:'); - TestRunner.addResult('lineNumber: ' + lineNumber); - TestRunner.addResult('columnNumber: ' + columnNumber); - if (revealed == 0) - ++revealed; - else - TestRunner.completeTest(); - } -} -</script> -</head> -<body onload="runTest()"> - <p>Tests that inspect object action works for function and resolve bound function location.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/javascript-outline-dialog.html b/third_party/WebKit/LayoutTests/inspector/sources/javascript-outline-dialog.html deleted file mode 100644 index 41a5cf5..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/javascript-outline-dialog.html +++ /dev/null
@@ -1,46 +0,0 @@ -<html> -<head> - - -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script src="./resources/javascript-outline-dialog.js"></script> -<script> - -function test() { - SourcesTestRunner.showScriptSource('javascript-outline-dialog.js', onSourceShown); - var provider; - function onSourceShown(sourceFrame) { - TestRunner.addSniffer(Sources.OutlineQuickOpen.prototype, 'refresh', onQuickOpenFulfilled); - UI.panels.sources._sourcesView._showOutlineQuickOpen(); - } - - function onQuickOpenFulfilled() { - provider = this; - dumpScores('te'); - dumpScores('test'); - dumpScores('test('); - dumpScores('test(arg'); - TestRunner.completeTest(); - } - - function dumpScores(query) { - TestRunner.addResult(`Scores for query="${query}"`); - var keys = []; - for (var i = 0; i < provider.itemCount(); ++i) { - keys.push({key: provider.itemKeyAt(i), score: provider.itemScoreAt(i, query)}); - } - keys.sort((a, b) => b.score - a.score); - TestRunner.addResult(keys.map(a => a.key + ' ' + a.score).join('\n')); - TestRunner.addResult(''); - } -} - -</script> - -</head> - -<body onload="runTest()"> -<p>Verify JavaScriptOutlineDialog scoring.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-1.html b/third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-1.html deleted file mode 100644 index 2d7928b3..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-1.html +++ /dev/null
@@ -1,36 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/sources-test.js"></script> - -<script> - -async function test() { - var test = SourcesTestRunner.testJavascriptOutline; - - TestRunner.markStep('testSimpleFunction'); - await test('function foo(a, b, c) {}'); - - TestRunner.markStep('testSpreadOperator'); - await test('function foo(a, b, ...c) {}'); - - TestRunner.markStep('testVariableDeclaration'); - await test('var a = function(a,b) { }'); - - TestRunner.markStep('testMultipleVariableDeclaration'); - await test('var a = function(a,b) { }, b = function(c,d) { }'); - - TestRunner.markStep('testObjectProperty'); - await test('a.b.c = function(d, e) { }'); - - TestRunner.completeTest(); -} - -</script> - -</head> - -<body onload="runTest()"> -<p>Verify javascript outline</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-2.html b/third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-2.html deleted file mode 100644 index 40a3d29..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-2.html +++ /dev/null
@@ -1,36 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/sources-test.js"></script> - -<script> - -async function test() { - var test = SourcesTestRunner.testJavascriptOutline; - - TestRunner.markStep('testNamedFunctionVariableAssignment'); - await test('var a = function foo(...bar) { }'); - - TestRunner.markStep('testArrowFunction'); - await test('var a = x => x + 2'); - - TestRunner.markStep('testArrowFunctionWithMultipleArguments'); - await test('var a = (x, y) => x + y'); - - TestRunner.markStep('testInnerFunctions'); - await test('function foo(){ function bar() {} function baz() { }}'); - - TestRunner.markStep('testObjectProperties'); - await test('x = { run: function() { }, get count() { }, set count(value) { }}'); - - TestRunner.completeTest(); -} - -</script> - -</head> - -<body onload="runTest()"> -<p>Verify javascript outline</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-3.html b/third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-3.html deleted file mode 100644 index b9de1881..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-3.html +++ /dev/null
@@ -1,36 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/sources-test.js"></script> - -<script> - -async function test() { - var test = SourcesTestRunner.testJavascriptOutline; - - TestRunner.markStep('testClassConstructor'); - await test('class Test { constructor(foo, bar) { }}'); - - TestRunner.markStep('testClassMethods'); - await test('class Test { foo() {} bar() { }}'); - - TestRunner.markStep('testAnonymousClass'); - await test('var test = class { constructor(foo, bar) { }}'); - - TestRunner.markStep('testClassExtends'); - await test('var A = class extends B { foo() { }}'); - - TestRunner.markStep('testStaticMethod'); - await test('class Test { static foo() { }}'); - - TestRunner.completeTest(); -} - -</script> - -</head> - -<body onload="runTest()"> -<p>Verify javascript outline</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-4.html b/third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-4.html deleted file mode 100644 index df47d88..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-4.html +++ /dev/null
@@ -1,48 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/sources-test.js"></script> - -<script> - -async function test() { - var test = SourcesTestRunner.testJavascriptOutline; - - TestRunner.markStep('testAsyncFunction'); - await test('async function foo() { }'); - - TestRunner.markStep('testAsyncArrowFunction'); - await test('var sum = async (x, y) => x + y;'); - - TestRunner.markStep('testGeneratorFunction'); - await test('function* foo() { }'); - - TestRunner.markStep('testMismatchBrackets'); - await test(` -function foo(a, b) { - if (a > b) { - return a; -} - -function bar(eee) { - foo(eee, 2 * eee); -} -`); - - TestRunner.markStep('testSyntaxError'); - await test(` -function notAGenerator(a, b) { - yield 10; -}`); - - TestRunner.completeTest(); -} - -</script> - -</head> - -<body onload="runTest()"> -<p>Verify javascript outline</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-5.html b/third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-5.html deleted file mode 100644 index 41e8555..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-5.html +++ /dev/null
@@ -1,36 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/sources-test.js"></script> - -<script> - -async function test() { - var test = SourcesTestRunner.testJavascriptOutline; - - TestRunner.markStep('testComputedProperty'); - await test('a.b[c] = function() { };'); - - TestRunner.markStep('testComputedPropertyInTheMiddle'); - await test('a.b[c].d = function() { };'); - - TestRunner.markStep('testComputedPropertyForExpression'); - await test('(a || b).c = function() { };'); - - TestRunner.markStep('testPropertyStringLiteral'); - await test('var foo = { "bar": function() { }}'); - - TestRunner.markStep('testPropertyNumberLiteral'); - await test('var foo = { 42: function() { }}'); - - TestRunner.completeTest(); -} - -</script> - -</head> - -<body onload="runTest()"> -<p>Verify javascript outline</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-6.html b/third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-6.html deleted file mode 100644 index ec7d96d7..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/outline-javascript-6.html +++ /dev/null
@@ -1,30 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/sources-test.js"></script> - -<script> - -async function test() { - var test = SourcesTestRunner.testJavascriptOutline; - - TestRunner.markStep('testClassAsNumberLiteralProperty'); - await test('var foo = { 42: class { }};'); - - TestRunner.markStep('testClassAsStringLiteralProperty'); - await test('var foo = { "foo": class { }};'); - - TestRunner.markStep('testClassAsIdentifierProperty'); - await test('var foo = { foo: class { }};'); - - TestRunner.completeTest(); -} - -</script> - -</head> - -<body onload="runTest()"> -<p>Verify javascript outline</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-css-1.html b/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-css-1.html deleted file mode 100644 index 7cba8af..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-css-1.html +++ /dev/null
@@ -1,65 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script src="../../http/tests/inspector/sources-test.js"></script> -<link rel="stylesheet" href="resources/style-formatter-obfuscated.css"> - -<script> - -function test() { - var testCSSFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/css'); - - TestRunner.runTestSuite([ - function testSimpleCSS(next) { - var content = 'a { /* pre-comment */ color /* after name */ : /* before value */ red /* post-comment */ }'; - testCSSFormatter(content, ['pre-comment', 'post-comment'], next); - }, - - function testComplexCSS(next) { - SourcesTestRunner.showScriptSource('style-formatter-obfuscated.css', didShowScriptSource); - - function didShowScriptSource(sourceFrame) { - var mappingQueries = [ - '@media', - 'screen', - 'html', - 'color', - 'green', - 'foo-property', - 'bar-value', - 'body', - 'background', - 'black', - ]; - testCSSFormatter(sourceFrame._textEditor.text(), mappingQueries, next); - } - }, - - function testFormatInlinedStyles(next) { - var content = - '<html><body><style>@-webkit-keyframes{from{left: 0} to{left:100px;}}</style><style>badbraces { }} @media screen{a.b{color:red;text-decoration: none}}</style></body></html>'; - SourcesTestRunner.testPrettyPrint('text/html', content, [], next); - }, - - function testNonZeroLineMapping(next) { - var mappingQueries = ['div', 'color', 'red']; - testCSSFormatter('\n\ndiv { color: red; }', mappingQueries, next); - }, - - function testComplexSelector(next) { - var css = 'a.b.c:hover,.d.e.f.g::before,h.i{color:red;}'; - var mappingQueries = ['a', '.b', '.c', '.d', '.e', '.f', '.g', 'h', '.i', 'color', 'red']; - testCSSFormatter(css, mappingQueries, next); - }, - ]); -} - -</script> - -</head> - -<body onload="runTest()"> -<p>Verifies CSS pretty-printing functionality.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-css-2.html b/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-css-2.html deleted file mode 100644 index c08b8b1..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-css-2.html +++ /dev/null
@@ -1,55 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script src="../../http/tests/inspector/sources-test.js"></script> -<link rel="stylesheet" href="resources/style-formatter-obfuscated.css"> - -<script> - -function test() { - var testCSSFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/css'); - - TestRunner.runTestSuite([ - function testFontFace(next) { - var css = - '@font-face{font-family:MyHelvetica;src:local(\'Helvetica Neue Bold\'),local(\'HelveticaNeue-Bold\'),url(MgOpenModernaBold.ttf);font-weight:bold;}div{color:red}'; - var mappingQueries = ['font-face', 'red']; - testCSSFormatter(css, mappingQueries, next); - }, - - function testCharsetRule(next) { - var css = '@charset \'iso-8859-15\';p{margin:0}'; - var mappingQueries = ['charset', 'iso', 'margin']; - testCSSFormatter(css, mappingQueries, next); - }, - - function testImportRule(next) { - var css = '@import url(\'bluish.css\') projection,tv;span{border:1px solid black}'; - var mappingQueries = ['import', 'bluish', 'projection', 'span', 'border', 'black']; - testCSSFormatter(css, mappingQueries, next); - }, - - function testImportWithMediaQueryRule(next) { - var css = '@import url(\'landscape.css\') screen and (orientation:landscape);article{background:yellow}'; - var mappingQueries = ['import', 'url', 'orientation', 'article', 'background', 'yellow']; - testCSSFormatter(css, mappingQueries, next); - }, - - function testKeyframesRule(next) { - var css = - 'p{animation-duration:3s;}@keyframes slidein{from{margin-left:100%;width:300%;}to{margin-left:0%;width:100%;}}p{animation-name:slidein}'; - var mappingQueries = ['animation-duration', '3s', 'keyframes', 'from', '300%', 'animation-name']; - testCSSFormatter(css, mappingQueries, next); - }, - ]); -} - -</script> - -</head> - -<body onload="runTest()"> -<p>Verifies CSS pretty-printing functionality.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-css-3.html b/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-css-3.html deleted file mode 100644 index b14628cb..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-css-3.html +++ /dev/null
@@ -1,53 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script src="../../http/tests/inspector/sources-test.js"></script> -<link rel="stylesheet" href="resources/style-formatter-obfuscated.css"> - -<script> - -function test() { - var testCSSFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/css'); - - TestRunner.runTestSuite([ - function testMediaRule(next) { - var css = '@media screen,print{body{line-height:1.2}}span{line-height:10px}'; - var mappingQueries = ['@media', 'screen', 'print', 'body', 'line-height', '1.2']; - testCSSFormatter(css, mappingQueries, next); - }, - - function testNamespaceRule(next) { - var css = '@namespace svg url(http://www.w3.org/2000/svg);g{color:red}'; - var mappingQueries = ['namespace', 'url', 'color', 'red']; - testCSSFormatter(css, mappingQueries, next); - }, - - function testPageRule(next) { - var css = '@page :first{margin:2in 3in;}span{color:blue}'; - var mappingQueries = ['page', 'first', 'margin', '3in']; - testCSSFormatter(css, mappingQueries, next); - }, - - function testSupportsRule(next) { - var css = '@supports(--foo:green){body{color:green;}}#content{font-size:14px}'; - var mappingQueries = ['supports', 'foo', 'body', 'color']; - testCSSFormatter(css, mappingQueries, next); - }, - - function testViewportRule(next) { - var css = '@viewport{zoom:0.75;min-zoom:0.5;max-zoom:0.9;}footer{position:fixed;bottom:0;}'; - var mappingQueries = ['viewport', 'zoom', '0.5', '0.9']; - testCSSFormatter(css, mappingQueries, next); - }, - ]); -} - -</script> - -</head> - -<body onload="runTest()"> -<p>Verifies CSS pretty-printing functionality.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-html-1.html b/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-html-1.html deleted file mode 100644 index 73b291f..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-html-1.html +++ /dev/null
@@ -1,50 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script src="../../http/tests/inspector/sources-test.js"></script> - -<script> - -function test() { - var testFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/html'); - - TestRunner.runTestSuite([ - function simpleHTML(next) { - var mappingQueries = ['</head>', 'test', '</title>']; - testFormatter('<html><head><title>test</title></head></html>', mappingQueries, next); - }, - - function selfClosingTags(next) { - var mappingQueries = ['meta', 'hr', '<html>', '</html>']; - testFormatter('<html><head><meta></head><img><hr/></html>', mappingQueries, next); - }, - - function erroneousSelfClosingTags(next) { - var mappingQueries = ['<br/>', '<title>', 'test', '</head>']; - testFormatter('<head><meta><meta></meta><br/></br><link></link><title>test</title></head>', mappingQueries, next); - }, - - function testAttributes(next) { - var mappingQueries = ['<body>', 'width', 'height', '</body>']; - testFormatter( - '<body><canvas width=100 height=100 data-bad-attr=\'</canvas>\'></canvas></body>', mappingQueries, next); - }, - - function testCustomElements(next) { - var mappingQueries = ['<body>', 'custom-time', 'year', 'month', '</body>']; - testFormatter( - '<body><custom-time year=2016 day=1 month=1><div>minutes/seconds</div></custom-time></body>', mappingQueries, - next); - } - ]); -} - -</script> - -</head> - -<body onload="runTest()"> -<p>Verifies JavaScript pretty-printing functionality.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-html-2.html b/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-html-2.html deleted file mode 100644 index c399ae3..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-html-2.html +++ /dev/null
@@ -1,51 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script src="../../http/tests/inspector/sources-test.js"></script> - -<script> - -function test() { - var testFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/html'); - - TestRunner.runTestSuite([ - function testDocType(next) { - var mappingQueries = ['<body>', 'hello', '</body>']; - testFormatter('<!DOCTYPE HTML><body>hello, world</body>', mappingQueries, next); - }, - - function testComment(next) { - var mappingQueries = ['<body>', 'comment 1', 'comment 2', 'comment 3', 'link']; - testFormatter( - '<!-- comment 1 --><html><!-- comment 2--><meta/><body><!-- comment 3--><a>link</a></body></html>', - mappingQueries, next); - }, - - function testNonJavascriptScriptTag(next) { - var mappingQueries = ['type', 'R', '</div>', '<\/script>']; - testFormatter('<div><script type=\'text/K\'>2_&{&/x!/:2_!x}\'!R<\/script></div>', mappingQueries, next); - }, - - function testList(next) { - var mappingQueries = ['foo', 'bar', 'baz', 'hello', 'world', 'another']; - testFormatter( - '<ul><li>foo<li> hello <b>world</b>!<li> hello <b>world</b> <b>i\'m here</b><li>bar<li>baz<li>hello <b>world</b><li>another</ul>', - mappingQueries, next); - }, - - function testAutomaticClosingTags(next) { - var mappingQueries = ['aaaa', 'bbbb1', 'bbbb2', 'cccc', 'dddd']; - testFormatter('<a>aaaa<b>bbbb1<c>cccc<d>dddd</c>bbbb2</a>', mappingQueries, next); - }, - ]); -} - -</script> - -</head> - -<body onload="runTest()"> -<p>Verifies JavaScript pretty-printing functionality.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-html-3.html b/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-html-3.html deleted file mode 100644 index e40b3e6d..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-html-3.html +++ /dev/null
@@ -1,55 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script src="../../http/tests/inspector/sources-test.js"></script> - -<script> - -function test() { - var testFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/html'); - - TestRunner.runTestSuite([ - function testLinkFollowedByComment(next) { - var mappingQueries = ['stylesheet', 'some', 'comment']; - testFormatter('<link href=\'a/b/c.css\' rel=\'stylesheet\'><!-- some comment -->', mappingQueries, next); - }, - - function testInlineJavascript(next) { - var mappingQueries = ['console', 'test', '</html']; - testFormatter( - '<html><script>for(var i=0;i<10;++i)console.log(\'test \'+i);<\/script></html>', mappingQueries, next); - }, - - function testInlineCSS(next) { - var mappingQueries = ['<html>', 'red', 'black']; - testFormatter('<html><style>div{color:red;border:1px solid black;}</style></html>', mappingQueries, next); - }, - - function testMultilineInput(next) { - var html = `<html> -<head> -<meta name=\"ROBOTS\" content=\"NOODP\"> -<meta name='viewport' content='text/html'> -<title>foobar</title> -<body> -<script>if(1<2){if(2<3){if(3<4){if(4<5){console.log("magic")}}}}<\/script> -<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIA..."> -<style>div{display:flex;align-items:center;justify-content:center;}body{width:100%}*{border:1px solid black}</style> -</body> -</html> -`; - var mappingQueries = ['ROBOTS', 'image', '...', '</body>', '</html>', '</style>']; - testFormatter(html, mappingQueries, next); - }, - ]); -} - -</script> - -</head> - -<body onload="runTest()"> -<p>Verifies JavaScript pretty-printing functionality.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-1.html b/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-1.html deleted file mode 100644 index 9b5fdb3..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-1.html +++ /dev/null
@@ -1,49 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script src="../../http/tests/inspector/sources-test.js"></script> -<script src="debugger/resources/obfuscated.js"></script> - -<script> - -function test() { - var testJSFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/javascript'); - - TestRunner.runTestSuite([ - function multipleVariableDeclarations(next) { - var mappingQueries = ['{}', 'hello', ';']; - testJSFormatter('var a=1,b={},c=2,d="hello world";var a,b,c,d=2,e,f=3;', mappingQueries, next); - }, - - function emptyObjectExpression(next) { - var mappingQueries = ['{', '}', 'a']; - testJSFormatter('var a={}', mappingQueries, next); - }, - - function breakContinueStatements(next) { - var mappingQueries = ['break', 'continue', '2', 'else']; - testJSFormatter('for(var i in set)if(i%2===0)break;else continue;', mappingQueries, next); - }, - - function chainedIfStatements(next) { - var mappingQueries = ['7', '9', '3', '++']; - testJSFormatter( - 'if(a%7===0)b=1;else if(a%9===1) b = 2;else if(a%5===3){b=a/2;b++;} else b= 3;', mappingQueries, next); - }, - - function tryCatchStatement(next) { - var mappingQueries = ['try', 'catch', 'finally']; - testJSFormatter('try{a(b());}catch(e){f()}finally{f();}', mappingQueries, next); - }, - ]); -} - -</script> - -</head> - -<body onload="runTest()"> -<p>Verifies JavaScript pretty-printing functionality.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-2.html b/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-2.html deleted file mode 100644 index d44419c..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-2.html +++ /dev/null
@@ -1,48 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script src="../../http/tests/inspector/sources-test.js"></script> -<script src="debugger/resources/obfuscated.js"></script> - -<script> - -function test() { - var testJSFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/javascript'); - - TestRunner.runTestSuite([ - function forLoopWithIfStatementWithoutBlockStatements(next) { - var mappingQueries = ['length', 'console', 'of']; - testJSFormatter('for(var value of map)if (value.length%3===0)console.log(value);', mappingQueries, next); - }, - - function objectExpressionProperties(next) { - var mappingQueries = ['mapping', 'original', 'formatted']; - testJSFormatter('var mapping={original:[1,2,3],formatted:[],count:0}', mappingQueries, next); - }, - - function blockFormatting(next) { - var mappingQueries = ['(1)', '(2)']; - testJSFormatter('{ print(1); print(2); }', mappingQueries, next); - }, - - function assignmentFormatting(next) { - var mappingQueries = ['string']; - testJSFormatter('var exp=\'a string\';c=+a+(0>a?b:0);c=(1);var a=(1);', mappingQueries, next); - }, - - function objectLiteralFormatting(next) { - var mappingQueries = ['dog', '1989', 'foo']; - testJSFormatter('var obj={\'foo\':1,bar:"2",cat:{dog:\'1989\'}}', mappingQueries, next); - }, - ]); -} - -</script> - -</head> - -<body onload="runTest()"> -<p>Verifies JavaScript pretty-printing functionality.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-3.html b/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-3.html deleted file mode 100644 index 60c97e8..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-3.html +++ /dev/null
@@ -1,50 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script src="../../http/tests/inspector/sources-test.js"></script> -<script src="debugger/resources/obfuscated.js"></script> - -<script> - -function test() { - var testJSFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/javascript'); - - TestRunner.runTestSuite([ - function ifStatements(next) { - var mappingQueries = ['===', '!==', 'non-eq']; - testJSFormatter( - 'if(a<b)log(a);else log(b);if(a<b){log(a)}else{log(b);}if(a===b)log(\'equals\');if(a!==b){log(\'non-eq\');}', - mappingQueries, next); - }, - - function arrayLiteralFormatting(next) { - var mappingQueries = ['3', '2', '1', '0']; - testJSFormatter('var arr=[3,2,1,0]', mappingQueries, next); - }, - - function ifFormatting(next) { - var mappingQueries = ['&&', 'print(a)']; - testJSFormatter('if(a>b&&b>c){print(a);print(b);}', mappingQueries, next); - }, - - function ternarOperatorFormatting(next) { - var mappingQueries = ['?', ':']; - testJSFormatter('a>b?a:b', mappingQueries, next); - }, - - function labeledStatementFormatting(next) { - var mappingQueries = ['break', 'continue', 'while']; - testJSFormatter('firstLoop:while(true){break firstLoop;continue firstLoop;}', mappingQueries, next); - }, - ]); -} - -</script> - -</head> - -<body onload="runTest()"> -<p>Verifies JavaScript pretty-printing functionality.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-4.html b/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-4.html deleted file mode 100644 index d760ffb..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-4.html +++ /dev/null
@@ -1,50 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script src="../../http/tests/inspector/sources-test.js"></script> -<script src="debugger/resources/obfuscated.js"></script> - -<script> - -function test() { - var testJSFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/javascript'); - - TestRunner.runTestSuite([ - function withStatementFormatting(next) { - var mappingQueries = ['first', 'obj', 'nice', '1', '2', 'done']; - testJSFormatter('with(obj)log(\'first\');with(nice){log(1);log(2);}done();', mappingQueries, next); - }, - - function switchStatementFormatting(next) { - var mappingQueries = ['even', 'odd', '89', 'done']; - testJSFormatter( - 'switch (a) { case 1, 3: log("odd");break;case 2:log("even");break;case 42:case 89: log(a);default:log("interesting");log(a);}log("done");', - mappingQueries, next); - }, - - function whileFormatting(next) { - var mappingQueries = ['while', 'infinity', ');']; - testJSFormatter('while(true){print(\'infinity\');}', mappingQueries, next); - }, - - function doWhileFormatting(next) { - var mappingQueries = ['while', 'infinity']; - testJSFormatter('do{print(\'infinity\');}while(true);', mappingQueries, next); - }, - - function functionFormatting(next) { - var mappingQueries = ['return', '*=']; - testJSFormatter('function test(a,b,c){a*=b;return c+a;}', mappingQueries, next); - }, - ]); -} - -</script> - -</head> - -<body onload="runTest()"> -<p>Verifies JavaScript pretty-printing functionality.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-5.html b/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-5.html deleted file mode 100644 index 8272eed..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-5.html +++ /dev/null
@@ -1,55 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script src="../../http/tests/inspector/sources-test.js"></script> -<script src="debugger/resources/obfuscated.js"></script> - -<script> - -function test() { - var testJSFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/javascript'); - - TestRunner.runTestSuite([ - function forInFormatting(next) { - var mappingQueries = ['myMap', 'print']; - testJSFormatter('for(var key in myMap)print(key);', mappingQueries, next); - }, - - function forOfFormatting(next) { - var mappingQueries = ['myMap', 'print']; - testJSFormatter('for(var value of myMap)print(value);', mappingQueries, next); - }, - - function commaBetweenStatementsFormatting(next) { - var mappingQueries = ['noop', 'hasNew']; - testJSFormatter('rebuild(),show(),hasNew?refresh():noop();', mappingQueries, next); - }, - - function complexScriptFormatting(next) { - SourcesTestRunner.showScriptSource('obfuscated.js', didShowScriptSource); - - function didShowScriptSource(sourceFrame) { - var mappingQueries = [ - 'function', 'formatted1', 'variable1', ' return "functionWithComments"', 'onmessage', 'indent_start', - 'function require', 'var regexp', 'importScripts', 'formatted2' - ]; - testJSFormatter(sourceFrame._textEditor.text(), mappingQueries, next); - } - }, - - function ifStatementIndentRegression(next) { - var mappingQueries = ['pretty', 'reset']; - testJSFormatter('{if (a>b){a();pretty();}else if (a+b)e();reset();}', mappingQueries, next); - }, - ]); -} - -</script> - -</head> - -<body onload="runTest()"> -<p>Verifies JavaScript pretty-printing functionality.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-6.html b/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-6.html deleted file mode 100644 index 4df5cb5..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-6.html +++ /dev/null
@@ -1,62 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script src="../../http/tests/inspector/sources-test.js"></script> -<script src="debugger/resources/obfuscated.js"></script> - -<script> - -function test() { - var testJSFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/javascript'); - - TestRunner.runTestSuite([ - function trailingCommentsTest(next) { - var mappingQueries = []; - testJSFormatter('noop(); //#sourceMappingURL=program.js.map', mappingQueries, next); - }, - - function inlinedScriptFormatting(next) { - var content = '<html><body><script>function f(){}<' + - '/script><script>function g(){var a;window.return = 10;if (a) return;}<' + - '/script></body></html>'; - SourcesTestRunner.testPrettyPrint('text/html', content, [], next); - }, - - function generatorFormatter(next) { - var mappingQueries = ['max', '*', 'else']; - testJSFormatter( - 'function *max(){var a=yield;var b=yield 10;if(a>b)return a;else return b;}', mappingQueries, next); - }, - - function blockCommentFormatter(next) { - var mappingQueries = ['this', 'is', 'block', 'comment', 'var', '10']; - testJSFormatter('/** this\n * is\n * block\n * comment\n */\nvar a=10;', mappingQueries, next); - }, - - function lexicalScoping(next) { - var mappingQueries = ['for', 'person', 'name', '}']; - testJSFormatter( - 'for(var i=0;i<names.length;++i){let name=names[i];let person=persons[i];}', mappingQueries, next); - }, - - function anonimousFunctionAsParameter(next) { - var mappingQueries = ['setTimeout', 'function', 'alert', '2000']; - testJSFormatter('setTimeout(function(){alert(1);},2000);', mappingQueries, next); - }, - - function arrowFunction(next) { - var mappingQueries = ['function', 'console', '=>', '2']; - testJSFormatter('function test(arg){console.log(arg);}test(a=>a+2);', mappingQueries, next); - } - ]); -} - -</script> - -</head> - -<body onload="runTest()"> -<p>Verifies JavaScript pretty-printing functionality.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-7.html b/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-7.html deleted file mode 100644 index 139c201..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-7.html +++ /dev/null
@@ -1,58 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script src="../../http/tests/inspector/sources-test.js"></script> - -<script> - -function test() { - var testJSFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/javascript'); - - TestRunner.runTestSuite([ - function semicolonAfterFunctionExpression(next) { - var mappingQueries = ['onClick', 'function', 'console', 'log', 'click!', 'done']; - testJSFormatter( - 'var onClick = function() { console.log(\'click!\'); };console.log(\'done\');', mappingQueries, next); - }, - - function semicolonAfterMultipleFunctionExpressions(next) { - var mappingQueries = ['onStart', 'onFinish', 'a()', 'b()']; - testJSFormatter('var onStart = function() { a(); }, onFinish = function() { b(); };', mappingQueries, next); - }, - - function semicolonAfterEmptyFunctionExpressions(next) { - var mappingQueries = ['onStart', 'delay', '1000', 'belay', 'activeElement']; - testJSFormatter('var onStart = function() {}, delay=1000, belay=document.activeElement;', mappingQueries, next); - }, - - function continueStatementFormatting(next) { - var mappingQueries = ['function', '1', 'continue', 'test']; - testJSFormatter('function foo(){while(1){if (a)continue;test();}}', mappingQueries, next); - }, - - function inconsistentSpaceAfterNull(next) { - var mappingQueries = ['||', 'null', ';']; - testJSFormatter('1||null;', mappingQueries, next); - }, - - function squashMultipleNewlines(next) { - var mappingQueries = ['a', 'b']; - testJSFormatter('a();\n\n\n\n\n\n\n\n\nb();', mappingQueries, next); - }, - - function ensureExponentialOperator(next) { - var mappingQueries = ['2', '**', '3']; - testJSFormatter('2**3', mappingQueries, next); - }, - ]); -} - -</script> - -</head> - -<body onload="runTest()"> -<p>Verifies JavaScript pretty-printing functionality.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-8.html b/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-8.html deleted file mode 100644 index 940f95a..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-8.html +++ /dev/null
@@ -1,27 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script src="../../http/tests/inspector/sources-test.js"></script> - -<script> - -function test() { - var testJSFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/javascript'); - - TestRunner.runTestSuite([ - function asyncAwaitSupport(next) { - var mappingQueries = ['async', 'function', 'foo', 'return', 'Promise', 'resolve']; - testJSFormatter('async function foo() {return await Promise.resolve(1);}', mappingQueries, next); - }, - ]); -} - -</script> - -</head> - -<body onload="runTest()"> -<p>Verifies JavaScript pretty-printing functionality.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-9.html b/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-9.html deleted file mode 100644 index 7df23fdbb..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-9.html +++ /dev/null
@@ -1,36 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/sources-test.js"></script> - -<script> - -function test() { - var testJSFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/javascript'); - - TestRunner.runTestSuite([ - function parenthesizedExpressions(next) { - var mappingQueries = ['if', '((a))', '((b));', 'else', '(c)']; - testJSFormatter('if((a))((b));else (c);', mappingQueries, next); - }, - - function objectDesctructuring(next) { - var mappingQueries = ['let', 'y', 'getXYFromTouchOrPointer', 'e']; - testJSFormatter('let{x,y}=getXYFromTouchOrPointer(e);', mappingQueries, next); - }, - - function objectDesctructuringInFunctionExpression(next) { - var mappingQueries = ['test', 'function', 'foo']; - testJSFormatter('var test = function({x,y}){foo(x,y);}', mappingQueries, next); - }, - ]); -} - -</script> - -</head> - -<body onload="runTest()"> -<p>Verifies JavaScript pretty-printing functionality.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-classes.html b/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-classes.html deleted file mode 100644 index 9831441..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-classes.html +++ /dev/null
@@ -1,62 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script src="../../http/tests/inspector/sources-test.js"></script> -<script src="debugger/resources/obfuscated.js"></script> - -<script> - -function test() { - var testJSFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/javascript'); - - TestRunner.runTestSuite([ - function emptyClass(next) { - var mappingQueries = ['Test', 'class']; - testJSFormatter('class Test{}', mappingQueries, next); - }, - - function emptyConstructor(next) { - var mappingQueries = ['Test', 'class', 'constructor']; - testJSFormatter('class Test{constructor(){}}', mappingQueries, next); - }, - - function simpleClass(next) { - var mappingQueries = ['Test', 'class', 'constructor']; - testJSFormatter('class Test{constructor(){this.bar=10;}givemebar(){return this.bar;}}', mappingQueries, next); - }, - - function extendedClass(next) { - var mappingQueries = ['Foo', 'Bar', 'extends', 'super', 'name']; - testJSFormatter( - 'class Foo extends Bar{constructor(name){super(name);}getName(){return super.getName();}}', mappingQueries, - next); - }, - - function twoConsecutiveClasses(next) { - var mappingQueries = ['B', 'extends', 'constructor', 'super']; - testJSFormatter('class A{}class B extends A{constructor(){super();}}', mappingQueries, next); - }, - - function staticMethod(next) { - var mappingQueries = ['Employer', 'static', '1', 'return']; - testJSFormatter( - 'class Employer{static count(){this._counter = (this._counter || 0) + 1; return this._counter;}}', - mappingQueries, next); - }, - - function classExpression(next) { - var mappingQueries = ['new', 'class', 'constructor', 'debugger']; - testJSFormatter('new(class{constructor(){debugger}})', mappingQueries, next); - }, - ]); -} - -</script> - -</head> - -<body onload="runTest()"> -<p>Verifies JavaScript pretty-printing functionality.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-template-literals.html b/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-template-literals.html deleted file mode 100644 index e77b15b..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/pretty-print-javascript-template-literals.html +++ /dev/null
@@ -1,53 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script src="../../http/tests/inspector/sources-test.js"></script> -<script src="debugger/resources/obfuscated.js"></script> - -<script> - -function test() { - var testJSFormatter = SourcesTestRunner.testPrettyPrint.bind(InspectorTest, 'text/javascript'); - - TestRunner.runTestSuite([ - function simpleLiteral(next) { - var mappingQueries = ['foo', 'bar']; - testJSFormatter('var foo = `bar`;', mappingQueries, next); - }, - - function multilineLiteral(next) { - var mappingQueries = ['foo', 'bar']; - testJSFormatter('var foo = `this\nbar`;', mappingQueries, next); - }, - - function stringSubstitution(next) { - var mappingQueries = ['credit', 'cash']; - testJSFormatter('var a=`I have ${credit+cash}$`;', mappingQueries, next); - }, - - function multipleStringSubstitution(next) { - var mappingQueries = ['credit', 'cash']; - testJSFormatter('var a=`${name} has ${credit+cash}${currency?currency:"$"}`;', mappingQueries, next); - }, - - function taggedTemplate(next) { - var mappingQueries = ['escapeHtml', 'width']; - testJSFormatter('escapeHtml`<div class=${classnName} width=${a+b}/>`;', mappingQueries, next); - }, - - function escapedApostrophe(next) { - var mappingQueries = ['That', 'great']; - testJSFormatter('var a=`That\`s great!`;', mappingQueries, next); - } - ]); -} - -</script> - -</head> - -<body onload="runTest()"> -<p>Verifies JavaScript pretty-printing functionality.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/resources/worker-source.js b/third_party/WebKit/LayoutTests/inspector/sources/resources/worker-source.js deleted file mode 100644 index b34c8020..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/resources/worker-source.js +++ /dev/null
@@ -1,6 +0,0 @@ -debugger; -eval("(function(){\n\ - var a = 239;\n\ - ++a; })()\n//# sourceURL=foo.js"); -var b = 42; -++b;
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/sass-highlighter.html b/third_party/WebKit/LayoutTests/inspector/sources/sass-highlighter.html deleted file mode 100644 index 500fa41..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/sass-highlighter.html +++ /dev/null
@@ -1,26 +0,0 @@ -<html> -<head> - -<link rel="stylesheet" href="resources/empty.css"> - -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script> - -function test() { - SourcesTestRunner.showScriptSource('empty.scss', onSourceShown); - function onSourceShown(uiSourceCodeFrame) { - var uiSourceCode = uiSourceCodeFrame.uiSourceCode(); - TestRunner.addResult(uiSourceCode.mimeType()); - TestRunner.completeTest(); - } -} - -</script> - -</head> - -<body onload="runTest()"> -<p>Verify that highlighter type for SCSS file loaded via sourceMap is correct.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/search-config.html b/third_party/WebKit/LayoutTests/inspector/sources/search-config.html deleted file mode 100644 index aa7567e..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/search-config.html +++ /dev/null
@@ -1,25 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script> -function test() { - function dumpParsedSearchQuery(query, isRegex) { - var searchConfig = new Workspace.SearchConfig(query, true, isRegex); - TestRunner.addResult('Dumping parsed search query [' + query + ']:'); - TestRunner.addResult(JSON.stringify(searchConfig.queries())); - } - - dumpParsedSearchQuery('function', false); - dumpParsedSearchQuery(' function', false); - dumpParsedSearchQuery(' function file:js', false); - dumpParsedSearchQuery('file:js function ', false); - dumpParsedSearchQuery('\s', true); - dumpParsedSearchQuery(' \s hello', true); - TestRunner.completeTest(); -}; -</script> -</head> -<body onload="runTest()"> -<p>Tests search query parsing.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/snippet-storage.html b/third_party/WebKit/LayoutTests/inspector/sources/snippet-storage.html deleted file mode 100644 index e2167d7..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/snippet-storage.html +++ /dev/null
@@ -1,63 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script> -function test() { - var settingPrefix = 'test'; - var namePrefix = 'Test snippet #'; - var snippetStorage = new Snippets.SnippetStorage(settingPrefix, namePrefix); - - function dumpSnippets(snippets) { - for (var i = 0; i < snippets.length; ++i) { - var snippet = snippets[i]; - TestRunner.addResult( - ' Snippet: id = ' + snippet.id + ', name = \'' + snippet.name + '\', content = \'' + snippet.content + - '\'.'); - } - } - - function dumpSavedSnippets() { - TestRunner.addResult('Dumping saved snippets:'); - dumpSnippets(snippetStorage._snippetsSetting.get()); - } - - function dumpStorageSnippets() { - TestRunner.addResult('Dumping storage snippets:'); - dumpSnippets(snippetStorage.snippets); - } - - dumpSavedSnippets(); - dumpStorageSnippets(); - var snippet = snippetStorage.createSnippet(); - TestRunner.addResult('Snippet created.'); - dumpSavedSnippets(); - dumpStorageSnippets(); - snippet.name = 'New snippet name'; - TestRunner.addResult('Snippet renamed.'); - dumpSavedSnippets(); - dumpStorageSnippets(); - snippet.content = 'New snippet content'; - TestRunner.addResult('Snippet content changed.'); - dumpSavedSnippets(); - dumpStorageSnippets(); - var anotherSnippet = snippetStorage.createSnippet(); - TestRunner.addResult('Another snippet created.'); - dumpSavedSnippets(); - dumpStorageSnippets(); - snippetStorage.deleteSnippet(snippet); - TestRunner.addResult('Snippet deleted.'); - dumpSavedSnippets(); - dumpStorageSnippets(); - snippetStorage.deleteSnippet(anotherSnippet); - TestRunner.addResult('Another snippet deleted.'); - dumpSavedSnippets(); - dumpStorageSnippets(); - - TestRunner.completeTest(); -}; -</script> -</head> -<body onload="runTest()"> -<p>Tests snippet storage.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/source-code-diff.html b/third_party/WebKit/LayoutTests/inspector/sources/source-code-diff.html deleted file mode 100644 index cb87b61b..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/source-code-diff.html +++ /dev/null
@@ -1,53 +0,0 @@ -<html> -<head> - -<link rel="stylesheet" href="resources/diff-before.css"> -<link rel="stylesheet" href="resources/diff-after.css"> - -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script src="../../http/tests/inspector/sources-test.js"></script> -<script> - -function test() { - Runtime.experiments.enableForTest('sourceDiff'); - var textAfter; - SourcesTestRunner.waitForScriptSource( - 'diff-after.css', uiSourceCode => uiSourceCode.requestContent().then(onAfterContent)); - - function onAfterContent(content) { - textAfter = content; - SourcesTestRunner.waitForScriptSource('diff-before.css', onBeforeUISourceCode); - } - - function onBeforeUISourceCode(uiSourceCode) { - uiSourceCode.setWorkingCopy(textAfter); - TestRunner.addSniffer(SourceFrame.SourceCodeDiff.prototype, '_decorationsSetForTest', decorationsSet); - SourcesTestRunner.showUISourceCodePromise(uiSourceCode); - } - - function decorationsSet(decorations) { - Array.from(decorations).sort((a, b) => a[0] - b[0]).forEach(print); - TestRunner.completeTest(); - - function print(decoration) { - var type = decoration[1].type; - var name = 'Unknown'; - if (type === SourceFrame.SourceCodeDiff.GutterDecorationType.Insert) - name = 'Insert'; - else if (type === SourceFrame.SourceCodeDiff.GutterDecorationType.Delete) - name = 'Delete'; - else if (type === SourceFrame.SourceCodeDiff.GutterDecorationType.Modify) - name = 'Modify'; - - TestRunner.addResult(decoration[0] + ':' + name); - } - } -} -</script> -</head> - -<body onload="runTest()"> -<p>Tests that diff markers correctly appear in the gutter.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/sources-panel-extension-names.html b/third_party/WebKit/LayoutTests/inspector/sources/sources-panel-extension-names.html deleted file mode 100644 index efa27097..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/sources-panel-extension-names.html +++ /dev/null
@@ -1,29 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script> -function test() { - var contentScriptsNavigatorView = new Sources.ContentScriptsNavigatorView(); - contentScriptsNavigatorView.show(UI.inspectorView.element); - - var mockExecutionContext = - {id: 1234567, isDefault: false, origin: 'chrome-extension://113581321345589144', name: 'FibExtension'}; - var mockContentScriptURL = mockExecutionContext.origin + '/script.js'; - - TestRunner.runTestSuite([ - async function testAddExecutionContextBeforeFile(next) { - TestRunner.runtimeModel._executionContextCreated(mockExecutionContext); - await SourcesTestRunner.addScriptUISourceCode(mockContentScriptURL, '', true, 1234567); - SourcesTestRunner.dumpNavigatorView(contentScriptsNavigatorView); - next(); - }, - ]); -} - -</script> -</head> -<body onload="runTest()"> -<p>The test verifies that extension names are resolved properly in navigator view.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/sources-panel-focus-editor-on-select.html b/third_party/WebKit/LayoutTests/inspector/sources/sources-panel-focus-editor-on-select.html deleted file mode 100644 index e68781bb..0000000 --- a/third_party/WebKit/LayoutTests/inspector/sources/sources-panel-focus-editor-on-select.html +++ /dev/null
@@ -1,25 +0,0 @@ -<html> -<head> -<script src="../../http/tests/inspector/inspector-test.js"></script> -<script src="../../http/tests/inspector/debugger-test.js"></script> -<script> -function test() { - SourcesTestRunner.showScriptSource('inspector-test.js', onSourceFrame); - function onSourceFrame(sourceFrame) { - TestRunner.addResult('initial: focused = ' + sourceFrame.hasFocus()); - UI.inspectorView.showPanel('elements') - .then(() => UI.inspectorView.showPanel('sources')) - .then(onPanelReselected.bind(null, sourceFrame)); - } - - function onPanelReselected(sourceFrame) { - TestRunner.addResult('after panel reselected: focused = ' + sourceFrame.hasFocus()); - TestRunner.completeTest(); - } -}; -</script> -</head> -<body onload="runTest()"> -<p>Verifies that text editor has focus after panel re-selecting.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css/line-height-determined-by-primary-font-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css/line-height-determined-by-primary-font-expected.png index 7fd2b70..4c3e0e3 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css/line-height-determined-by-primary-font-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css/line-height-determined-by-primary-font-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css/line-height-determined-by-primary-font-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/css/line-height-determined-by-primary-font-expected.txt index d3e585d..0306fc6 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css/line-height-determined-by-primary-font-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css/line-height-determined-by-primary-font-expected.txt
@@ -17,23 +17,23 @@ LayoutInline {A} at (0,0) size 54x20 LayoutText {#text} at (12,5) size 54x20 text run at (12,5) width 54: "\x{8521}\x{4F9D}\x{6797}" - LayoutBlockFlow (floating) {LI} at (174,0) size 76x31 [border: none (1px solid #FF0000) none] - LayoutInline {A} at (0,0) size 54x27 - LayoutText {#text} at (12,1) size 54x27 - text run at (12,1) width 54: "\x{9648}\x{7EEE}\x{8D1E}" - LayoutBlockFlow (floating) {LI} at (250,0) size 72x31 [border: none (1px solid #FF0000) none] - LayoutInline {A} at (0,0) size 50x20 - LayoutText {#text} at (12,5) size 50x20 - text run at (12,5) width 50: "\x{9648}\x{5955}\x{8FC5}" - LayoutBlockFlow (floating) {LI} at (322,0) size 52x31 [border: none (1px solid #FF0000) none] - LayoutInline {A} at (0,0) size 30x15 - LayoutText {#text} at (12,7) size 30x15 - text run at (12,7) width 30: "\x{9ED1}\x{9E2D}\x{5B50}" - LayoutBlockFlow (floating) {LI} at (374,0) size 64x31 [border: none (1px solid #FF0000) none] + LayoutBlockFlow (floating) {LI} at (174,0) size 64x31 [border: none (1px solid #FF0000) none] + LayoutInline {A} at (0,0) size 42x27 + LayoutText {#text} at (12,1) size 42x27 + text run at (12,1) width 42: "\x{9648}\x{7EEE}\x{8D1E}" + LayoutBlockFlow (floating) {LI} at (238,0) size 69x31 [border: none (1px solid #FF0000) none] + LayoutInline {A} at (0,0) size 47x20 + LayoutText {#text} at (12,5) size 47x20 + text run at (12,5) width 47: "\x{9648}\x{5955}\x{8FC5}" + LayoutBlockFlow (floating) {LI} at (307,0) size 53x31 [border: none (1px solid #FF0000) none] + LayoutInline {A} at (0,0) size 31x15 + LayoutText {#text} at (12,7) size 31x15 + text run at (12,7) width 31: "\x{9ED1}\x{9E2D}\x{5B50}" + LayoutBlockFlow (floating) {LI} at (360,0) size 64x31 [border: none (1px solid #FF0000) none] LayoutInline {A} at (0,0) size 42x16 LayoutText {#text} at (12,7) size 42x16 text run at (12,7) width 42: "\x{674E}\x{5B87}\x{6625}" - LayoutBlockFlow (floating) {LI} at (438,0) size 64x31 [border: none (1px solid #FF0000) none] + LayoutBlockFlow (floating) {LI} at (424,0) size 64x31 [border: none (1px solid #FF0000) none] LayoutInline {A} at (0,0) size 42x16 LayoutText {#text} at (12,7) size 42x16 text run at (12,7) width 42: "\x{6881}\x{9759}\x{8339}" @@ -45,18 +45,18 @@ LayoutBlockFlow (floating) {LI} at (98,0) size 76x31 [border: none (1px solid #FF0000) none] LayoutText {#text} at (12,5) size 54x20 text run at (12,5) width 54: "\x{8521}\x{4F9D}\x{6797}" - LayoutBlockFlow (floating) {LI} at (174,0) size 76x31 [border: none (1px solid #FF0000) none] - LayoutText {#text} at (12,1) size 54x27 - text run at (12,1) width 54: "\x{9648}\x{7EEE}\x{8D1E}" - LayoutBlockFlow (floating) {LI} at (250,0) size 72x31 [border: none (1px solid #FF0000) none] - LayoutText {#text} at (12,5) size 50x20 - text run at (12,5) width 50: "\x{9648}\x{5955}\x{8FC5}" - LayoutBlockFlow (floating) {LI} at (322,0) size 52x31 [border: none (1px solid #FF0000) none] - LayoutText {#text} at (12,7) size 30x15 - text run at (12,7) width 30: "\x{9ED1}\x{9E2D}\x{5B50}" - LayoutBlockFlow (floating) {LI} at (374,0) size 64x31 [border: none (1px solid #FF0000) none] + LayoutBlockFlow (floating) {LI} at (174,0) size 64x31 [border: none (1px solid #FF0000) none] + LayoutText {#text} at (12,1) size 42x27 + text run at (12,1) width 42: "\x{9648}\x{7EEE}\x{8D1E}" + LayoutBlockFlow (floating) {LI} at (238,0) size 69x31 [border: none (1px solid #FF0000) none] + LayoutText {#text} at (12,5) size 47x20 + text run at (12,5) width 47: "\x{9648}\x{5955}\x{8FC5}" + LayoutBlockFlow (floating) {LI} at (307,0) size 53x31 [border: none (1px solid #FF0000) none] + LayoutText {#text} at (12,7) size 31x15 + text run at (12,7) width 31: "\x{9ED1}\x{9E2D}\x{5B50}" + LayoutBlockFlow (floating) {LI} at (360,0) size 64x31 [border: none (1px solid #FF0000) none] LayoutText {#text} at (12,7) size 42x16 text run at (12,7) width 42: "\x{674E}\x{5B87}\x{6625}" - LayoutBlockFlow (floating) {LI} at (438,0) size 64x31 [border: none (1px solid #FF0000) none] + LayoutBlockFlow (floating) {LI} at (424,0) size 64x31 [border: none (1px solid #FF0000) none] LayoutText {#text} at (12,7) size 42x16 text run at (12,7) width 42: "\x{6881}\x{9759}\x{8339}"
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-underline-position/text-underline-position-cjk-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-underline-position/text-underline-position-cjk-expected.png index 5e144336..adbb54e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-underline-position/text-underline-position-cjk-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css3-text/css3-text-decoration/text-underline-position/text-underline-position-cjk-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/dom/52776-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/dom/52776-expected.txt index 2425eec..a329d4a 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/dom/52776-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/dom/52776-expected.txt
@@ -128,9 +128,9 @@ text run at (749,0) width 0 RTL: "\x{202A}" text run at (749,0) width 20 RTL: "\x{683}\x{684}\x{202C}" LayoutBlockFlow {DIV} at (0,804) size 769x20 - LayoutText {#text} at (757,0) size 12x19 - text run at (757,0) width 0 RTL: "\x{202A}" - text run at (757,0) width 12 RTL: "\x{1}\x{202C}" + LayoutText {#text} at (759,0) size 10x19 + text run at (759,0) width 0 RTL: "\x{202A}" + text run at (759,0) width 10 RTL: "\x{1}\x{202C}" LayoutBlockFlow {DIV} at (0,824) size 769x20 LayoutText {#text} at (747,0) size 22x19 text run at (747,0) width 22: "abc\x{202C}" @@ -251,9 +251,9 @@ text run at (20,0) width 0: "\x{202C}" text run at (20,0) width 0: "\x{202A}" LayoutBlockFlow {DIV} at (0,804) size 769x20 - LayoutText {#text} at (0,0) size 12x19 - text run at (0,0) width 12: "\x{1}\x{202C}" - text run at (12,0) width 0: "\x{202A}" + LayoutText {#text} at (0,0) size 10x19 + text run at (0,0) width 10: "\x{1}\x{202C}" + text run at (10,0) width 0: "\x{202A}" LayoutBlockFlow {DIV} at (0,824) size 769x20 LayoutText {#text} at (0,0) size 22x19 text run at (0,0) width 22: "abc\x{202C}"
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/dynamic/text-combine-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/dynamic/text-combine-expected.png index b0173a36..c5cd27d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/dynamic/text-combine-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/dynamic/text-combine-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/encoding/invalid-UTF-8-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/encoding/invalid-UTF-8-expected.png index ea5bd67..f01a1b0f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/encoding/invalid-UTF-8-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/encoding/invalid-UTF-8-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/encoding/invalid-UTF-8-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/encoding/invalid-UTF-8-expected.txt index cee56e07..25088f8d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/encoding/invalid-UTF-8-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/encoding/invalid-UTF-8-expected.txt
@@ -9,8 +9,8 @@ LayoutBlockFlow {P} at (0,36) size 784x20 LayoutText {#text} at (0,0) size 502x19 text run at (0,0) width 502: "The output should be: \"\x{442}??\x{442}\" (with black diamonds in place of question marks)." - LayoutBlockFlow {P} at (0,90) size 784x28 - LayoutText {#text} at (0,3) size 36x19 - text run at (0,3) width 36: "\x{442}\x{FFFD}\x{FFFD}\x{442}" + LayoutBlockFlow {P} at (0,90) size 784x20 + LayoutText {#text} at (0,0) size 46x19 + text run at (0,0) width 46: "\x{442}\x{FFFD}\x{FFFD}\x{442}" layer at (8,80) size 784x2 clip at (0,0) size 0x0 LayoutBlockFlow {HR} at (0,72) size 784x2 [border: (1px inset #EEEEEE)]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png index 2114911b..fd43a1d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/datetimelocal/datetimelocal-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/month/month-appearance-l10n-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/month/month-appearance-l10n-expected.png index 2c54578..9cc393f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/month/month-appearance-l10n-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/month/month-appearance-l10n-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/placeholder-position-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/placeholder-position-expected.png index a9074dd..81fbe95e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/placeholder-position-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/placeholder-position-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/text-font-height-mismatch-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/text-font-height-mismatch-expected.png index 1336101f..910f037e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/text-font-height-mismatch-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/text-font-height-mismatch-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/inline/justify-emphasis-inline-box-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/inline/justify-emphasis-inline-box-expected.png index d2856bc..2c3861cc 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/inline/justify-emphasis-inline-box-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/inline/justify-emphasis-inline-box-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/inline/vertical-align-with-fallback-fonts-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/inline/vertical-align-with-fallback-fonts-expected.png index d252171..aae43e1 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/inline/vertical-align-with-fallback-fonts-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/inline/vertical-align-with-fallback-fonts-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/ruby/base-shorter-than-text-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/ruby/base-shorter-than-text-expected.png index 5b3ec769..43012e4d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/ruby/base-shorter-than-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/ruby/base-shorter-than-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/ruby/nested-ruby-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/ruby/nested-ruby-expected.png index 50ca9cb..e8b0604 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/ruby/nested-ruby-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/ruby/nested-ruby-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/capitalize-boundaries-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/capitalize-boundaries-expected.png index 9b86307..ab21a4e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/capitalize-boundaries-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/capitalize-boundaries-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/color-emoji-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/color-emoji-expected.png index b60f24e..ab9f365 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/color-emoji-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/color-emoji-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/decorations-with-text-combine-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/decorations-with-text-combine-expected.png index d1a8c6b9..a24e93c3e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/decorations-with-text-combine-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/decorations-with-text-combine-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/emphasis-combined-text-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/emphasis-combined-text-expected.png index c19ac23c..f5cb9179 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/emphasis-combined-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/emphasis-combined-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/emphasis-complex-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/emphasis-complex-expected.png index b60a32d..8d5b67d5 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/emphasis-complex-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/emphasis-complex-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/font-fallback-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/font-fallback-expected.png index e793589..86ba052f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/font-fallback-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/font-fallback-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/001-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/001-expected.png index d39925c..b70abdc3 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/001-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/001-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/002-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/002-expected.png index 6c9fd93c..8510f4d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/002-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/002-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/003-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/003-expected.png index 18a0f2f..189200e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/003-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/003-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/combining-marks-position-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/combining-marks-position-expected.txt new file mode 100644 index 0000000..d5d9c8b --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/combining-marks-position-expected.txt
@@ -0,0 +1,12 @@ +This test ensures that combining marks apper over the previous (or next) character by comparing the length of words (one has marks, and the other doesn't have marks). + +test проверка +tèst провѐрка +خانه +خانهٔ +FAIL +reference1.offsetWidth = 99 +target1.offsetWidth = 99 +reference2.offsetWidth = 22 +target2.offsetWidth = 25 +
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/khmer-selection-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/khmer-selection-expected.png index 3d728ea..25767c8 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/khmer-selection-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/khmer-selection-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/lang-glyph-cache-separation-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/lang-glyph-cache-separation-expected.png index 6d9ca0b..e5efa79 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/lang-glyph-cache-separation-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/lang-glyph-cache-separation-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/plane2-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/plane2-expected.png index d708380..2ae96613 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/plane2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/plane2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/text-combine-image-test-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/text-combine-image-test-expected.png index 1ff7b3e..36b43e1 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/text-combine-image-test-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/text-combine-image-test-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/text-spliced-font-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/text-spliced-font-expected.png index bfd62bb..f937660 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/text-spliced-font-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/text-spliced-font-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/thai-baht-space-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/thai-baht-space-expected.png index 8fd602e..15343dd 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/thai-baht-space-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/thai-baht-space-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/vertical-text-glyph-test-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/vertical-text-glyph-test-expected.png index 29ea9e3..bfbf484 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/vertical-text-glyph-test-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/vertical-text-glyph-test-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/wrap-CJK-001-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/wrap-CJK-001-expected.png index 567bec0c..3393063 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/wrap-CJK-001-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/international/wrap-CJK-001-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/justify-ideograph-complex-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/justify-ideograph-complex-expected.png index f166fecf3..3b4fc5b0 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/justify-ideograph-complex-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/justify-ideograph-complex-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/justify-ideograph-leading-expansion-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/justify-ideograph-leading-expansion-expected.png index 3827a97..dde2bb2 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/justify-ideograph-leading-expansion-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/justify-ideograph-leading-expansion-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/justify-ideograph-simple-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/justify-ideograph-simple-expected.png index f166fecf3..3b4fc5b0 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/justify-ideograph-simple-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/justify-ideograph-simple-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/justify-ideograph-vertical-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/justify-ideograph-vertical-expected.png index 3f7fdff8..7590b912 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/justify-ideograph-vertical-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/justify-ideograph-vertical-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/midword-break-before-surrogate-pair-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/midword-break-before-surrogate-pair-expected.png index 539d519..4f7bc0a 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/midword-break-before-surrogate-pair-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/midword-break-before-surrogate-pair-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/orientation-sideways-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/orientation-sideways-expected.png index f76faff..8836364 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/orientation-sideways-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/orientation-sideways-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/selection-multiple-runs-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/selection-multiple-runs-expected.png index e1202ae..8b3e6fd 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/selection-multiple-runs-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/selection-multiple-runs-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/unicode-fallback-font-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/unicode-fallback-font-expected.png index 129fd86..cf634e6f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/unicode-fallback-font-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/unicode-fallback-font-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/text/vertical-surrogate-pair-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/text/vertical-surrogate-pair-expected.png index cde2c65c..9a98d91 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/text/vertical-surrogate-pair-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/text/vertical-surrogate-pair-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/Kusa-Makura-background-canvas-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/Kusa-Makura-background-canvas-expected.png index 8c5c1e9..40ce391 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/Kusa-Makura-background-canvas-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/Kusa-Makura-background-canvas-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/border-vertical-lr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/border-vertical-lr-expected.png index 18e3721..d260298 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/border-vertical-lr-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/border-vertical-lr-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/fallback-orientation-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/fallback-orientation-expected.png index 345e2b82..f5657ec 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/fallback-orientation-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/fallback-orientation-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/japanese-lr-selection-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/japanese-lr-selection-expected.png index 7eb78ca..cca380e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/japanese-lr-selection-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/japanese-lr-selection-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/japanese-lr-text-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/japanese-lr-text-expected.png index bd4029fd..cd7d97e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/japanese-lr-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/japanese-lr-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/japanese-rl-selection-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/japanese-rl-selection-expected.png index 5fcc967..6eb44cf 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/japanese-rl-selection-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/japanese-rl-selection-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/japanese-rl-text-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/japanese-rl-text-expected.png index 9681f15b..c34576a 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/japanese-rl-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/japanese-rl-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/japanese-ruby-vertical-lr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/japanese-ruby-vertical-lr-expected.png index 1e2f3acb..0de8e994 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/japanese-ruby-vertical-lr-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/japanese-ruby-vertical-lr-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/japanese-ruby-vertical-rl-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/japanese-ruby-vertical-rl-expected.png index e0491b6..eaa949f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/japanese-ruby-vertical-rl-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/japanese-ruby-vertical-rl-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/text-combine-various-fonts-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/text-combine-various-fonts-expected.png index 8f86433a..be9ba04 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/text-combine-various-fonts-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/text-combine-various-fonts-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/vertical-align-table-baseline-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/vertical-align-table-baseline-expected.png index 6b46355..eeaf6bd 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/vertical-align-table-baseline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/vertical-align-table-baseline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/vertical-baseline-alignment-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/vertical-baseline-alignment-expected.png index 5c049ff..cec50fe 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/vertical-baseline-alignment-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/vertical-baseline-alignment-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/vertical-font-fallback-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/vertical-font-fallback-expected.png index 9520a3c..67b80ce8 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/vertical-font-fallback-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/writing-mode/vertical-font-fallback-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/hdr/color-jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/linux/hdr/color-jpeg-with-color-profile-expected.png new file mode 100644 index 0000000..dc798e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/hdr/color-jpeg-with-color-profile-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/hdr/color-profile-video-expected.png b/third_party/WebKit/LayoutTests/platform/linux/hdr/color-profile-video-expected.png new file mode 100644 index 0000000..85f7439 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/hdr/color-profile-video-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/hdr/video-canvas-alpha-expected.png b/third_party/WebKit/LayoutTests/platform/linux/hdr/video-canvas-alpha-expected.png new file mode 100644 index 0000000..1d92b9de --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/hdr/video-canvas-alpha-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/inspector-protocol/layout-fonts/cjk-ideograph-fallback-by-lang-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/inspector-protocol/layout-fonts/cjk-ideograph-fallback-by-lang-expected.txt index 6b524d7c..faa008a7 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/inspector-protocol/layout-fonts/cjk-ideograph-fallback-by-lang-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/inspector-protocol/layout-fonts/cjk-ideograph-fallback-by-lang-expected.txt
@@ -1,86 +1,86 @@ zh-CN: 誤過骨 #zh-CN: "Times New Roman" : 7, -"Kochi Mincho" : 3 +"IPAGothic" : 3 zh-TW: 誤過骨 #zh-TW: "Times New Roman" : 7, -"Kochi Mincho" : 3 +"IPAGothic" : 3 zh-HK: 誤過骨 #zh-HK: "Times New Roman" : 7, -"Kochi Mincho" : 3 +"IPAGothic" : 3 ja: 誤過骨 #ja: "Times New Roman" : 4, -"Kochi Mincho" : 3 +"IPAGothic" : 3 ja-JP: 誤過骨 #ja-JP: "Times New Roman" : 7, -"Kochi Mincho" : 3 +"IPAGothic" : 3 ko: 誤過骨 #ko: "Times New Roman" : 4, -"Kochi Mincho" : 3 +"IPAGothic" : 3 ko-KR: 誤過骨 #ko-KR: "Times New Roman" : 7, -"Kochi Mincho" : 3 +"IPAGothic" : 3 en-CN: 誤過骨 #en-CN: "Times New Roman" : 7, -"Kochi Mincho" : 3 +"IPAGothic" : 3 en-JP: 誤過骨 #en-JP: "Times New Roman" : 7, -"Kochi Mincho" : 3 +"IPAGothic" : 3 en-KR: 誤過骨 #en-KR: "Times New Roman" : 7, -"Kochi Mincho" : 3 +"IPAGothic" : 3 en-HK: 誤過骨 #en-HK: "Times New Roman" : 7, -"Kochi Mincho" : 3 +"IPAGothic" : 3 en-TW: 誤過骨 #en-TW: "Times New Roman" : 7, -"Kochi Mincho" : 3 +"IPAGothic" : 3 en-HanS: 誤過骨 #en-HanS: "Times New Roman" : 9, -"Kochi Mincho" : 3 +"IPAGothic" : 3 en-HanT: 誤過骨 #en-HanT: "Times New Roman" : 9, -"Kochi Mincho" : 3 +"IPAGothic" : 3 en-HanS-JP: 誤過骨 #en-HanS-JP: "Times New Roman" : 12, -"Kochi Mincho" : 3 +"IPAGothic" : 3 en-HanT-JP: 誤過骨 #en-HanT-JP: "Times New Roman" : 12, -"Kochi Mincho" : 3 +"IPAGothic" : 3 en-US: 誤過骨 #en-US: "Times New Roman" : 7, -"Kochi Mincho" : 3 +"IPAGothic" : 3
diff --git a/third_party/WebKit/LayoutTests/platform/linux/inspector-protocol/layout-fonts/languages-emoji-rare-glyphs-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/inspector-protocol/layout-fonts/languages-emoji-rare-glyphs-expected.txt index c86fe60..08f43ea 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/inspector-protocol/layout-fonts/languages-emoji-rare-glyphs-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/inspector-protocol/layout-fonts/languages-emoji-rare-glyphs-expected.txt
@@ -1,17 +1,17 @@ 百家姓 趙錢孫李 周吳鄭王 馮陳褚衛 蔣沈韓楊 朱秦尤許 何呂施張 孔曹嚴華 金魏陶薑 戚謝鄒喻 柏水竇章 雲蘇潘葛 奚範彭郎 魯韋昌馬 苗鳳花方 俞任袁柳 酆鮑史唐 費廉岑薛 雷賀倪湯 滕殷羅畢 郝鄔安常 樂於時傅 皮卞齊康 伍餘元蔔 顧孟平黃 和穆蕭尹 姚邵堪汪 祁毛禹狄 米貝明臧 計伏成戴 談宋茅龐 熊紀舒屈 項祝董梁 杜阮藍閔 席季麻強 賈路婁危 江童顏郭 梅盛林刁 鍾徐邱駱 高夏蔡田 樊胡淩霍 虞萬支柯 昝管盧莫 經房裘繆 幹解應宗 丁宣賁鄧 鬱單杭洪 包諸左石 崔吉鈕龔 程嵇邢滑 裴陸榮翁 荀羊於惠 甄曲家封 芮羿儲靳 汲邴糜松 井段富巫 烏焦巴弓 牧隗山穀 車侯宓蓬 全郗班仰 秋仲伊宮 寧仇欒暴 甘鈄厲戎 祖武符劉 景詹束龍 葉幸司韶 郜黎薊薄 印宿白懷 蒲台從鄂 索鹹籍賴 卓藺屠蒙 池喬陰鬱 胥能蒼雙 聞莘黨翟 譚貢勞逄 姬申扶堵 冉宰酈雍 卻璩桑桂 濮牛壽通 邊扈燕冀 郟浦尚農 溫別莊晏 柴瞿閻充 慕連茹習 宦艾魚容 向古易慎 戈廖庚終 暨居衡步 都耿滿弘 匡國文寇 廣祿闕東 毆殳沃利 蔚越夔隆 師鞏厙聶 晁勾敖融 冷訾辛闞 那簡饒空 曾毋沙乜 養鞠須豐 巢關蒯相 查後荊紅 遊竺權逯 蓋益桓公 萬俟司馬 上官歐陽 夏侯諸葛 聞人東方 赫連皇甫 尉遲公羊 澹台公冶 宗政濮陽 淳於單於 太叔申屠 公孫仲孫 軒轅令狐 鐘離宇文 長孫慕容 鮮於閭丘 司徒司空 亓官司寇 仉督子車 顓孫端木 巫馬公西 漆雕樂正 壤駟公良 拓拔夾穀 宰父穀粱 晉楚閆法 汝鄢塗欽 段幹百里 東郭南門 呼延歸海 羊舌微生 嶽帥緱亢 況後有琴 梁丘左丘 東門西門 商牟佘佴 伯賞南宮 墨哈譙笪 年愛陽佟 #hundred_chinese_surnames: -"Kochi Mincho" : 546, -"Times New Roman" : 140, -"Arial" : 17 +"IPAGothic" : 547, +"Times New Roman" : 136, +"DejaVu Sans" : 16 いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさき ゆめみし ゑひもせす(ん)色は匂へど 散りぬるを 我が世誰ぞ 常ならむ 有為の奥山 今日越えて 浅き夢見じ 酔ひもせず(ん) #japanese_iroha: -"Kochi Mincho" : 92, +"IPAGothic" : 92, "Times New Roman" : 15 키스의 고유조건은 입술끼리 만나야 하고 특별한 기술은 필요치 않다. #korean_pangram: -"Arial" : 28, +"DejaVu Sans" : 28, "Times New Roman" : 9 ऋषियों को सताने वाले दुष्ट राक्षसों के राजा रावण का सर्वनाश करने वाले विष्णुवतार भगवान श्रीराम, अयोध्या के महाराज दशरथ के बड़े सपुत्र थे। @@ -25,10 +25,10 @@ 🌱🌲🌳🌴🌵🌷🌸🌹🌺🌻🌼💐🌾🌿🍀🍁🍂🍃🍄🌰 #emoji: -"Arial" : 20 +"DejaVu Sans" : 20 𓀀𓀁𓀂𓀃𓀄𓀅𓀆𓀇𓀈𓀉𓀊𓀋𓀌𓀍𓀎𓀏 #egyptian_hieroglyphs: -"Arial" : 16 +"DejaVu Sans" : 16
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/track/track-cue-rendering-vertical-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/track/track-cue-rendering-vertical-expected.png index 9b6320d..1511e75e8 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/media/track/track-cue-rendering-vertical-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/media/track/track-cue-rendering-vertical-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/japanese-rl-selection-clear-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/japanese-rl-selection-clear-expected.png index bb5ec77..41c2e3bc 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/japanese-rl-selection-clear-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/japanese-rl-selection-clear-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/japanese-rl-selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/japanese-rl-selection-clear-expected.txt index 30954f7..ec585d70 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/japanese-rl-selection-clear-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/japanese-rl-selection-clear-expected.txt
@@ -8,7 +8,7 @@ "paintInvalidations": [ { "object": "LayoutText #text", - "rect": [442, 123, 335, 404], + "rect": [418, 123, 359, 394], "reason": "geometry" } ] @@ -20,59 +20,63 @@ "reason": "geometry" }, { - "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B'", + "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053'", "reason": "geometry" }, { - "object": "InlineTextBox '\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B'", + "object": "InlineTextBox '\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E'", "reason": "geometry" }, { - "object": "InlineTextBox '\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'", + "object": "InlineTextBox '\u3059\u304B\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A'", "reason": "geometry" }, { - "object": "InlineTextBox '\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22'", + "object": "InlineTextBox '\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4'", "reason": "geometry" }, { - "object": "InlineTextBox '\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059'", + "object": "InlineTextBox '\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B'", "reason": "geometry" }, { - "object": "InlineTextBox '\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E'", + "object": "InlineTextBox '\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063'", "reason": "geometry" }, { - "object": "InlineTextBox '\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2'", + "object": "InlineTextBox '\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A'", "reason": "geometry" }, { - "object": "InlineTextBox '\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8'", + "object": "InlineTextBox '\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'", "reason": "geometry" }, { - "object": "InlineTextBox '\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E'", + "object": "InlineTextBox '\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C'", "reason": "geometry" }, { - "object": "InlineTextBox '\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B'", + "object": "InlineTextBox '\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6'", "reason": "geometry" }, { - "object": "InlineTextBox '\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B'", + "object": "InlineTextBox '\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068'", "reason": "geometry" }, { - "object": "InlineTextBox '\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8'", + "object": "InlineTextBox '\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057'", "reason": "geometry" }, { - "object": "InlineTextBox '\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4'", + "object": "InlineTextBox '\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F'", "reason": "geometry" }, { - "object": "InlineTextBox '\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'", + "object": "InlineTextBox '\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC'", + "reason": "geometry" + }, + { + "object": "InlineTextBox '\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'", "reason": "geometry" } ]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/japanese-rl-selection-repaint-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/japanese-rl-selection-repaint-expected.png index f608f8a..42f80b6a 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/japanese-rl-selection-repaint-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/japanese-rl-selection-repaint-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/japanese-rl-selection-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/japanese-rl-selection-repaint-expected.txt index b44c5e2..90f1dabd 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/japanese-rl-selection-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/japanese-rl-selection-repaint-expected.txt
@@ -8,7 +8,7 @@ "paintInvalidations": [ { "object": "LayoutText #text", - "rect": [538, 23, 239, 556], + "rect": [514, 23, 263, 544], "reason": "geometry" } ] @@ -28,43 +28,47 @@ "reason": "geometry" }, { - "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066'", + "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C'", "reason": "geometry" }, { - "object": "InlineTextBox '\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067'", + "object": "InlineTextBox '\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060'", "reason": "geometry" }, { - "object": "InlineTextBox '\u306A\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B'", + "object": "InlineTextBox '\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C'", "reason": "geometry" }, { - "object": "InlineTextBox '\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053'", + "object": "InlineTextBox '\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18'", "reason": "geometry" }, { - "object": "InlineTextBox '\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB'", + "object": "InlineTextBox '\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A'", "reason": "geometry" }, { - "object": "InlineTextBox '\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3'", + "object": "InlineTextBox '\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC'", "reason": "geometry" }, { - "object": "InlineTextBox '\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8'", + "object": "InlineTextBox '\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u8A2A\u554F\u3057'", "reason": "geometry" }, { - "object": "InlineTextBox '\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B'", + "object": "InlineTextBox '\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D'", "reason": "geometry" }, { - "object": "InlineTextBox '\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C'", + "object": "InlineTextBox '\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F'", "reason": "geometry" }, { - "object": "InlineTextBox '\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'", + "object": "InlineTextBox '\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9'", + "reason": "geometry" + }, + { + "object": "InlineTextBox '\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'", "reason": "geometry" } ]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/repaint-across-writing-mode-boundary-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/repaint-across-writing-mode-boundary-expected.png index 1147a83..9340f52 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/repaint-across-writing-mode-boundary-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/repaint-across-writing-mode-boundary-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-align-08-b-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-align-08-b-expected.png index f816572..b6bba66 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-align-08-b-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-align-08-b-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-align-08-b-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-align-08-b-expected.txt index 7ccd2b61..705684b 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-align-08-b-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-align-08-b-expected.txt
@@ -2,17 +2,17 @@ LayoutView at (0,0) size 480x360 layer at (0,0) size 480x360 LayoutSVGRoot {svg} at (0,0) size 480x360 - LayoutSVGContainer {g} at (50,66) size 473x170 + LayoutSVGContainer {g} at (50,66) size 434x170 LayoutSVGHiddenContainer {defs} at (0,0) size 0x0 - LayoutSVGText {text} at (50,66) size 473x170 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (50,66) size 281x170 - chunk 1 text run 1 at (50.00,200.00) startOffset 0 endOffset 3 width 278.00: "a\x{729C}\x{923}" - LayoutSVGTSpan {tspan} at (50,66) size 473x170 - LayoutSVGInlineText {#text} at (328,133) size 140x85 - chunk 1 text run 1 at (328.00,200.00) startOffset 0 endOffset 3 width 138.00: "a\x{729C}\x{923}" - LayoutSVGTSpan {tspan} at (50,66) size 473x170 - LayoutSVGInlineText {#text} at (466,173) size 57x34 - chunk 1 text run 1 at (466.00,200.00) startOffset 0 endOffset 3 width 56.00: "a\x{729C}\x{923}" + LayoutSVGText {text} at (50,66) size 434x170 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (50,66) size 258x170 + chunk 1 text run 1 at (50.00,200.00) startOffset 0 endOffset 3 width 255.00: "a\x{729C}\x{923}" + LayoutSVGTSpan {tspan} at (50,66) size 434x170 + LayoutSVGInlineText {#text} at (305,133) size 129x85 + chunk 1 text run 1 at (305.00,200.00) startOffset 0 endOffset 3 width 127.00: "a\x{729C}\x{923}" + LayoutSVGTSpan {tspan} at (50,66) size 434x170 + LayoutSVGInlineText {#text} at (432,173) size 52x34 + chunk 1 text run 1 at (432.00,200.00) startOffset 0 endOffset 3 width 51.00: "a\x{729C}\x{923}" LayoutSVGInlineText {#text} at (0,0) size 0x0 LayoutSVGPath {line} at (50,200) size 383x0 [stroke={[type=SOLID] [color=#0000FF]}] [fill={[type=SOLID] [color=#000000]}] [x1=50.00] [y1=200.00] [x2=433.00] [y2=200.00] LayoutSVGPath {line} at (50,230) size 383x0 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#000000]}] [x1=50.00] [y1=230.00] [x2=433.00] [y2=230.00]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-fonts-01-t-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-fonts-01-t-expected.png index a9207e03..56805cc3 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-fonts-01-t-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-fonts-01-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-intro-01-t-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-intro-01-t-expected.png index aa4d695..d63038d8 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-intro-01-t-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-intro-01-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-intro-01-t-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-intro-01-t-expected.txt index 60ada7d..0d721a82 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-intro-01-t-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-intro-01-t-expected.txt
@@ -27,10 +27,10 @@ chunk 1 text run 1 at (10.00,215.00) startOffset 0 endOffset 9 width 64.06: "Yiddish: " chunk 1 text run 1 at (74.06,215.00) startOffset 0 endOffset 21 width 123.00 RTL: "\x{5D0}\x{5D9}\x{5DA} \x{5E7}\x{5E2}\x{5DF} \x{5E2}\x{5E1}\x{5DF} \x{5D2}\x{5DC}\x{5D0}\x{5B8}\x{5D6} \x{5D0}\x{5D5}\x{5DF}" chunk 1 text run 1 at (197.06,215.00) startOffset 0 endOffset 4 width 16.00: " ..." - LayoutSVGContainer {g} at (10,235) size 258x19 - LayoutSVGText {text} at (10,235) size 258x19 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (10,235) size 258x19 - chunk 1 text run 1 at (10.00,250.00) startOffset 0 endOffset 20 width 258.00: "Chinese:\x{6211}\x{80FD}\x{541E}\x{4E0B}\x{73BB}\x{7483}\x{800C}\x{4E0D}\x{4F24}\x{8EAB}\x{4F53}\x{3002}" + LayoutSVGContainer {g} at (10,235) size 259x19 + LayoutSVGText {text} at (10,235) size 259x19 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (10,235) size 259x19 + chunk 1 text run 1 at (10.00,250.00) startOffset 0 endOffset 20 width 259.00: "Chinese:\x{6211}\x{80FD}\x{541E}\x{4E0B}\x{73BB}\x{7483}\x{800C}\x{4E0D}\x{4F24}\x{8EAB}\x{4F53}\x{3002}" LayoutSVGContainer {g} at (10,270) size 260x19 LayoutSVGText {text} at (10,270) size 260x19 contains 1 chunk(s) LayoutSVGInlineText {#text} at (10,270) size 260x19
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-intro-03-b-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-intro-03-b-expected.png index aff26f2..9f1ee55 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-intro-03-b-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-intro-03-b-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-intro-03-b-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-intro-03-b-expected.txt index 6ea462e..608f5eed 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-intro-03-b-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-intro-03-b-expected.txt
@@ -37,8 +37,8 @@ chunk 1 (vertical) text run 28 at (65.00,289.02) startOffset 27 endOffset 28 height 16.00: "e" chunk 1 (vertical) text run 29 at (65.00,295.02) startOffset 28 endOffset 29 height 16.00: "s" chunk 1 (vertical) text run 30 at (65.00,300.02) startOffset 29 endOffset 30 height 16.00: "e" - LayoutSVGText {text} at (222,10) size 15.50x428 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (222,10) size 15.50x428 + LayoutSVGText {text} at (222.50,10) size 15x428 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (222.50,10) size 15x428 chunk 1 (vertical) text run 1 at (225.50,10.00) startOffset 0 endOffset 1 height 15.00: "J" chunk 1 (vertical) text run 2 at (225.50,15.00) startOffset 1 endOffset 2 height 15.00: "a" chunk 1 (vertical) text run 3 at (225.50,21.00) startOffset 2 endOffset 3 height 15.00: "p" @@ -111,8 +111,8 @@ chunk 1 (vertical) text run 33 at (366.00,397.00) startOffset 32 endOffset 33 height 12.00: "\x{305B}" chunk 1 (vertical) text run 34 at (366.00,409.00) startOffset 33 endOffset 34 height 12.00: "\x{3093}" chunk 1 (vertical) text run 35 at (366.00,421.00) startOffset 34 endOffset 35 height 12.00: "\x{3002}" - LayoutSVGText {text} at (102,80) size 36x154 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (102,80) size 36x154 + LayoutSVGText {text} at (102,80) size 36x150 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (102,80) size 36x150 chunk 1 (vertical) text run 1 at (110.00,80.00) startOffset 0 endOffset 1 height 36.00: "x" chunk 1 (vertical) text run 2 at (110.00,96.00) startOffset 1 endOffset 2 height 36.00: "t" chunk 1 (vertical) text run 3 at (110.00,105.00) startOffset 2 endOffset 3 height 36.00: " " @@ -128,8 +128,8 @@ chunk 1 (vertical) text run 4 at (268.50,120.00) startOffset 3 endOffset 4 height 41.00: " " chunk 1 (vertical) text run 5 at (268.50,129.00) startOffset 4 endOffset 5 height 41.00: "\x{79C1}" chunk 1 (vertical) text run 6 at (268.50,170.00) startOffset 5 endOffset 6 height 41.00: "\x{306F}" - LayoutSVGText {text} at (402,80) size 36x213 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (402,80) size 36x213 + LayoutSVGText {text} at (402,80) size 36x212 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (402,80) size 36x212 chunk 1 (vertical) text run 1 at (410.00,80.00) startOffset 0 endOffset 1 height 36.00: "s" chunk 1 (vertical) text run 2 at (410.00,116.00) startOffset 1 endOffset 2 height 36.00: "e" chunk 1 (vertical) text run 3 at (410.00,152.00) startOffset 2 endOffset 3 height 36.00: ":"
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-intro-04-t-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-intro-04-t-expected.png index 252d674..0099c71 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-intro-04-t-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-intro-04-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-intro-04-t-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-intro-04-t-expected.txt index 81398a44..bb35844 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-intro-04-t-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-intro-04-t-expected.txt
@@ -27,9 +27,9 @@ chunk 1 text run 1 at (10.00,180.00) startOffset 0 endOffset 9 width 64.06: "Yiddish: " chunk 1 text run 1 at (74.06,180.00) startOffset 0 endOffset 40 width 247.00 RTL: "\x{5D0}\x{5D9}\x{5DA} \x{5E7}\x{5E2}\x{5DF} \x{5E2}\x{5E1}\x{5DF} \x{5D2}\x{5DC}\x{5D0}\x{5B8}\x{5D6} \x{5D0}\x{5D5}\x{5DF} \x{5E2}\x{5E1} \x{5D8}\x{5D5}\x{5D8} \x{5DE}\x{5D9}\x{5E8} \x{5E0}\x{5D9}\x{5E9}\x{5D8} \x{5F0}\x{5F2}" chunk 1 text run 1 at (321.06,180.00) startOffset 0 endOffset 1 width 4.00: "." - LayoutSVGText {text} at (10,195) size 258x19 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (10,195) size 258x19 - chunk 1 text run 1 at (10.00,210.00) startOffset 0 endOffset 20 width 258.00: "Chinese:\x{6211}\x{80FD}\x{541E}\x{4E0B}\x{73BB}\x{7483}\x{800C}\x{4E0D}\x{4F24}\x{8EAB}\x{4F53}\x{3002}" + LayoutSVGText {text} at (10,195) size 259x19 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (10,195) size 259x19 + chunk 1 text run 1 at (10.00,210.00) startOffset 0 endOffset 20 width 259.00: "Chinese:\x{6211}\x{80FD}\x{541E}\x{4E0B}\x{73BB}\x{7483}\x{800C}\x{4E0D}\x{4F24}\x{8EAB}\x{4F53}\x{3002}" LayoutSVGText {text} at (10,227) size 439x17 contains 1 chunk(s) LayoutSVGInlineText {#text} at (10,227) size 439x17 chunk 1 text run 1 at (10.00,240.00) startOffset 0 endOffset 35 width 439.00: "Japanese: \x{79C1}\x{306F}\x{30AC}\x{30E9}\x{30B9}\x{3092}\x{98DF}\x{3079}\x{3089}\x{308C}\x{307E}\x{3059}\x{3002}\x{305D}\x{308C}\x{306F}\x{79C1}\x{3092}\x{50B7}\x{3064}\x{3051}\x{307E}\x{305B}\x{3093}\x{3002}"
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/batik/text/verticalText-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/batik/text/verticalText-expected.png index ce65dc6..a2071c2 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/batik/text/verticalText-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/batik/text/verticalText-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/combining-character-queries-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/text/combining-character-queries-expected.png index f2fe2db..39744bf4 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/combining-character-queries-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/combining-character-queries-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/combining-character-queries-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/text/combining-character-queries-expected.txt index e1b64e1..b6d5998 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/combining-character-queries-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/combining-character-queries-expected.txt
@@ -4,115 +4,115 @@ LayoutBlockFlow {HTML} at (0,0) size 800x521 LayoutBlockFlow {BODY} at (8,8) size 784x505 LayoutSVGRoot {svg} at (0,0) size 600x500 - LayoutSVGContainer {g} at (40,11) size 383.74x356 - LayoutSVGRect {rect} at (50,11) size 18x49 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=50.00] [y=11.00] [width=18.00] [height=49.00] - LayoutSVGText {text} at (57,57) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (57,57) size 4x10 - chunk 1 (middle anchor) text run 1 at (57.00,65.00) startOffset 0 endOffset 1 width 4.00: "0" - LayoutSVGRect {rect} at (68,11) size 10.50x49 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=68.00] [y=11.00] [width=10.50] [height=49.00] - LayoutSVGText {text} at (71.25,57) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (71.25,57) size 4x10 - chunk 1 (middle anchor) text run 1 at (71.25,65.00) startOffset 0 endOffset 1 width 4.00: "1" - LayoutSVGRect {rect} at (78.50,11) size 10.50x49 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.30]}] [x=78.50] [y=11.00] [width=10.50] [height=49.00] - LayoutSVGText {text} at (81.75,57) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (81.75,57) size 4x10 - chunk 1 (middle anchor) text run 1 at (81.75,65.00) startOffset 0 endOffset 1 width 4.00: "2" - LayoutSVGRect {rect} at (89,11) size 7x49 [fill={[type=SOLID] [color=#008000] [opacity=0.30]}] [x=89.00] [y=11.00] [width=7.00] [height=49.00] - LayoutSVGText {text} at (90.50,57) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (90.50,57) size 4x10 - chunk 1 (middle anchor) text run 1 at (90.50,65.00) startOffset 0 endOffset 1 width 4.00: "3" - LayoutSVGRect {rect} at (96,11) size 7x49 [fill={[type=SOLID] [color=#0000FF] [opacity=0.30]}] [x=96.00] [y=11.00] [width=7.00] [height=49.00] - LayoutSVGText {text} at (97.50,57) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (97.50,57) size 4x10 - chunk 1 (middle anchor) text run 1 at (97.50,65.00) startOffset 0 endOffset 1 width 4.00: "4" - LayoutSVGRect {rect} at (103,11) size 7x49 [fill={[type=SOLID] [color=#4B0082] [opacity=0.30]}] [x=103.00] [y=11.00] [width=7.00] [height=49.00] - LayoutSVGText {text} at (104.50,57) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (104.50,57) size 4x10 - chunk 1 (middle anchor) text run 1 at (104.50,65.00) startOffset 0 endOffset 1 width 4.00: "5" - LayoutSVGRect {rect} at (200,18) size 16x40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=200.00] [y=18.00] [width=16.00] [height=40.00] - LayoutSVGText {text} at (206,55) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (206,55) size 4x10 - chunk 1 (middle anchor) text run 1 at (206.00,63.00) startOffset 0 endOffset 1 width 4.00: "0" - LayoutSVGRect {rect} at (216,18) size 9x40 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=216.00] [y=18.00] [width=9.00] [height=40.00] - LayoutSVGText {text} at (218.50,55) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (218.50,55) size 4x10 - chunk 1 (middle anchor) text run 1 at (218.50,63.00) startOffset 0 endOffset 1 width 4.00: "1" - LayoutSVGRect {rect} at (225,18) size 9x40 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.30]}] [x=225.00] [y=18.00] [width=9.00] [height=40.00] - LayoutSVGText {text} at (227.50,55) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (227.50,55) size 4x10 - chunk 1 (middle anchor) text run 1 at (227.50,63.00) startOffset 0 endOffset 1 width 4.00: "2" - LayoutSVGRect {rect} at (234,18) size 5.33x40 [fill={[type=SOLID] [color=#008000] [opacity=0.30]}] [x=234.00] [y=18.00] [width=5.33] [height=40.00] - LayoutSVGText {text} at (234.66,55) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (234.66,55) size 4x10 - chunk 1 (middle anchor) text run 1 at (234.67,63.00) startOffset 0 endOffset 1 width 4.00: "3" - LayoutSVGRect {rect} at (239.33,18) size 5.33x40 [fill={[type=SOLID] [color=#0000FF] [opacity=0.30]}] [x=239.33] [y=18.00] [width=5.33] [height=40.00] - LayoutSVGText {text} at (240,55) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (240,55) size 4x10 - chunk 1 (middle anchor) text run 1 at (240.00,63.00) startOffset 0 endOffset 1 width 4.00: "4" - LayoutSVGRect {rect} at (244.67,18) size 5.33x40 [fill={[type=SOLID] [color=#4B0082] [opacity=0.30]}] [x=244.67] [y=18.00] [width=5.33] [height=40.00] - LayoutSVGText {text} at (245.33,55) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (245.33,55) size 4x10 - chunk 1 (middle anchor) text run 1 at (245.33,63.00) startOffset 0 endOffset 1 width 4.00: "5" - LayoutSVGRect {rect} at (350,18) size 19x40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=350.00] [y=18.00] [width=19.00] [height=40.00] - LayoutSVGText {text} at (357.50,55) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (357.50,55) size 4x10 - chunk 1 (middle anchor) text run 1 at (357.50,63.00) startOffset 0 endOffset 1 width 4.00: "0" - LayoutSVGRect {rect} at (369,18) size 9.50x40 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=369.00] [y=18.00] [width=9.50] [height=40.00] - LayoutSVGText {text} at (371.75,55) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (371.75,55) size 4x10 - chunk 1 (middle anchor) text run 1 at (371.75,63.00) startOffset 0 endOffset 1 width 4.00: "1" - LayoutSVGRect {rect} at (378.50,18) size 9.50x40 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.30]}] [x=378.50] [y=18.00] [width=9.50] [height=40.00] - LayoutSVGText {text} at (381.25,55) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (381.25,55) size 4x10 - chunk 1 (middle anchor) text run 1 at (381.25,63.00) startOffset 0 endOffset 1 width 4.00: "2" - LayoutSVGRect {rect} at (388,18) size 6x40 [fill={[type=SOLID] [color=#008000] [opacity=0.30]}] [x=388.00] [y=18.00] [width=6.00] [height=40.00] - LayoutSVGText {text} at (389,55) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (389,55) size 4x10 - chunk 1 (middle anchor) text run 1 at (389.00,63.00) startOffset 0 endOffset 1 width 4.00: "3" - LayoutSVGRect {rect} at (394,18) size 6x40 [fill={[type=SOLID] [color=#0000FF] [opacity=0.30]}] [x=394.00] [y=18.00] [width=6.00] [height=40.00] - LayoutSVGText {text} at (395,55) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (395,55) size 4x10 - chunk 1 (middle anchor) text run 1 at (395.00,63.00) startOffset 0 endOffset 1 width 4.00: "4" - LayoutSVGRect {rect} at (400,18) size 6x40 [fill={[type=SOLID] [color=#4B0082] [opacity=0.30]}] [x=400.00] [y=18.00] [width=6.00] [height=40.00] - LayoutSVGText {text} at (401,55) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (401,55) size 4x10 - chunk 1 (middle anchor) text run 1 at (401.00,63.00) startOffset 0 endOffset 1 width 4.00: "5" + LayoutSVGContainer {g} at (41,11) size 392x356 + LayoutSVGRect {rect} at (50,11) size 21x49 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=50.00] [y=11.00] [width=21.00] [height=49.00] + LayoutSVGText {text} at (58.50,57) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (58.50,57) size 4x10 + chunk 1 (middle anchor) text run 1 at (58.50,65.00) startOffset 0 endOffset 1 width 4.00: "0" + LayoutSVGRect {rect} at (71,11) size 11x49 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=71.00] [y=11.00] [width=11.00] [height=49.00] + LayoutSVGText {text} at (74.50,57) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (74.50,57) size 4x10 + chunk 1 (middle anchor) text run 1 at (74.50,65.00) startOffset 0 endOffset 1 width 4.00: "1" + LayoutSVGRect {rect} at (82,11) size 11x49 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.30]}] [x=82.00] [y=11.00] [width=11.00] [height=49.00] + LayoutSVGText {text} at (85.50,57) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (85.50,57) size 4x10 + chunk 1 (middle anchor) text run 1 at (85.50,65.00) startOffset 0 endOffset 1 width 4.00: "2" + LayoutSVGRect {rect} at (93,11) size 6.33x49 [fill={[type=SOLID] [color=#008000] [opacity=0.30]}] [x=93.00] [y=11.00] [width=6.33] [height=49.00] + LayoutSVGText {text} at (94.16,57) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (94.16,57) size 4x10 + chunk 1 (middle anchor) text run 1 at (94.17,65.00) startOffset 0 endOffset 1 width 4.00: "3" + LayoutSVGRect {rect} at (99.33,11) size 6.33x49 [fill={[type=SOLID] [color=#0000FF] [opacity=0.30]}] [x=99.33] [y=11.00] [width=6.33] [height=49.00] + LayoutSVGText {text} at (100.48,57) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (100.48,57) size 4x10 + chunk 1 (middle anchor) text run 1 at (100.50,65.00) startOffset 0 endOffset 1 width 4.00: "4" + LayoutSVGRect {rect} at (105.67,11) size 6.33x49 [fill={[type=SOLID] [color=#4B0082] [opacity=0.30]}] [x=105.67] [y=11.00] [width=6.33] [height=49.00] + LayoutSVGText {text} at (106.83,57) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (106.83,57) size 4x10 + chunk 1 (middle anchor) text run 1 at (106.83,65.00) startOffset 0 endOffset 1 width 4.00: "5" + LayoutSVGRect {rect} at (200,18) size 21x40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=200.00] [y=18.00] [width=21.00] [height=40.00] + LayoutSVGText {text} at (208.50,55) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (208.50,55) size 4x10 + chunk 1 (middle anchor) text run 1 at (208.50,63.00) startOffset 0 endOffset 1 width 4.00: "0" + LayoutSVGRect {rect} at (221,18) size 11x40 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=221.00] [y=18.00] [width=11.00] [height=40.00] + LayoutSVGText {text} at (224.50,55) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (224.50,55) size 4x10 + chunk 1 (middle anchor) text run 1 at (224.50,63.00) startOffset 0 endOffset 1 width 4.00: "1" + LayoutSVGRect {rect} at (232,18) size 11x40 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.30]}] [x=232.00] [y=18.00] [width=11.00] [height=40.00] + LayoutSVGText {text} at (235.50,55) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (235.50,55) size 4x10 + chunk 1 (middle anchor) text run 1 at (235.50,63.00) startOffset 0 endOffset 1 width 4.00: "2" + LayoutSVGRect {rect} at (243,18) size 6.33x40 [fill={[type=SOLID] [color=#008000] [opacity=0.30]}] [x=243.00] [y=18.00] [width=6.33] [height=40.00] + LayoutSVGText {text} at (244.16,55) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (244.16,55) size 4x10 + chunk 1 (middle anchor) text run 1 at (244.17,63.00) startOffset 0 endOffset 1 width 4.00: "3" + LayoutSVGRect {rect} at (249.33,18) size 6.33x40 [fill={[type=SOLID] [color=#0000FF] [opacity=0.30]}] [x=249.33] [y=18.00] [width=6.33] [height=40.00] + LayoutSVGText {text} at (250.50,55) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (250.50,55) size 4x10 + chunk 1 (middle anchor) text run 1 at (250.50,63.00) startOffset 0 endOffset 1 width 4.00: "4" + LayoutSVGRect {rect} at (255.67,18) size 6.33x40 [fill={[type=SOLID] [color=#4B0082] [opacity=0.30]}] [x=255.67] [y=18.00] [width=6.33] [height=40.00] + LayoutSVGText {text} at (256.83,55) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (256.83,55) size 4x10 + chunk 1 (middle anchor) text run 1 at (256.83,63.00) startOffset 0 endOffset 1 width 4.00: "5" + LayoutSVGRect {rect} at (350,18) size 21x40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=350.00] [y=18.00] [width=21.00] [height=40.00] + LayoutSVGText {text} at (358.50,55) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (358.50,55) size 4x10 + chunk 1 (middle anchor) text run 1 at (358.50,63.00) startOffset 0 endOffset 1 width 4.00: "0" + LayoutSVGRect {rect} at (371,18) size 11x40 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=371.00] [y=18.00] [width=11.00] [height=40.00] + LayoutSVGText {text} at (374.50,55) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (374.50,55) size 4x10 + chunk 1 (middle anchor) text run 1 at (374.50,63.00) startOffset 0 endOffset 1 width 4.00: "1" + LayoutSVGRect {rect} at (382,18) size 11x40 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.30]}] [x=382.00] [y=18.00] [width=11.00] [height=40.00] + LayoutSVGText {text} at (385.50,55) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (385.50,55) size 4x10 + chunk 1 (middle anchor) text run 1 at (385.50,63.00) startOffset 0 endOffset 1 width 4.00: "2" + LayoutSVGRect {rect} at (393,18) size 6.33x40 [fill={[type=SOLID] [color=#008000] [opacity=0.30]}] [x=393.00] [y=18.00] [width=6.33] [height=40.00] + LayoutSVGText {text} at (394.16,55) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (394.16,55) size 4x10 + chunk 1 (middle anchor) text run 1 at (394.17,63.00) startOffset 0 endOffset 1 width 4.00: "3" + LayoutSVGRect {rect} at (399.33,18) size 6.33x40 [fill={[type=SOLID] [color=#0000FF] [opacity=0.30]}] [x=399.33] [y=18.00] [width=6.33] [height=40.00] + LayoutSVGText {text} at (400.50,55) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (400.50,55) size 4x10 + chunk 1 (middle anchor) text run 1 at (400.50,63.00) startOffset 0 endOffset 1 width 4.00: "4" + LayoutSVGRect {rect} at (405.67,18) size 6.33x40 [fill={[type=SOLID] [color=#4B0082] [opacity=0.30]}] [x=405.67] [y=18.00] [width=6.33] [height=40.00] + LayoutSVGText {text} at (406.83,55) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (406.83,55) size 4x10 + chunk 1 (middle anchor) text run 1 at (406.83,63.00) startOffset 0 endOffset 1 width 4.00: "5" LayoutSVGRect {rect} at (100,86) size 0x49 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=100.00] [y=86.00] [width=0.00] [height=49.00] - LayoutSVGText {text} at (98,132) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (98,132) size 4x10 + LayoutSVGText {text} at (97.98,132) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (97.98,132) size 4x10 chunk 1 (middle anchor) text run 1 at (98.00,140.00) startOffset 0 endOffset 1 width 4.00: "0" LayoutSVGRect {rect} at (82,86) size 18x49 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=82.00] [y=86.00] [width=18.00] [height=49.00] - LayoutSVGText {text} at (89,132) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (89,132) size 4x10 + LayoutSVGText {text} at (88.98,132) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (88.98,132) size 4x10 chunk 1 (middle anchor) text run 1 at (89.00,140.00) startOffset 0 endOffset 1 width 4.00: "1" LayoutSVGRect {rect} at (82,86) size 0x49 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.30]}] [x=82.00] [y=86.00] [width=0.00] [height=49.00] - LayoutSVGText {text} at (80,132) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (80,132) size 4x10 + LayoutSVGText {text} at (79.98,132) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (79.98,132) size 4x10 chunk 1 (middle anchor) text run 1 at (80.00,140.00) startOffset 0 endOffset 1 width 4.00: "2" - LayoutSVGRect {rect} at (61,86) size 10.50x49 [fill={[type=SOLID] [color=#008000] [opacity=0.30]}] [x=61.00] [y=86.00] [width=10.50] [height=49.00] - LayoutSVGText {text} at (64.25,132) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (64.25,132) size 4x10 - chunk 1 (middle anchor) text run 1 at (64.25,140.00) startOffset 0 endOffset 1 width 4.00: "3" - LayoutSVGRect {rect} at (71.50,86) size 10.50x49 [fill={[type=SOLID] [color=#0000FF] [opacity=0.30]}] [x=71.50] [y=86.00] [width=10.50] [height=49.00] - LayoutSVGText {text} at (74.75,132) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (74.75,132) size 4x10 - chunk 1 (middle anchor) text run 1 at (74.75,140.00) startOffset 0 endOffset 1 width 4.00: "4" - LayoutSVGRect {rect} at (61,86) size 0x49 [fill={[type=SOLID] [color=#4B0082] [opacity=0.30]}] [x=61.00] [y=86.00] [width=0.00] [height=49.00] - LayoutSVGText {text} at (59,132) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (59,132) size 4x10 - chunk 1 (middle anchor) text run 1 at (59.00,140.00) startOffset 0 endOffset 1 width 4.00: "5" - LayoutSVGRect {rect} at (40,86) size 7x49 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.30]}] [x=40.00] [y=86.00] [width=7.00] [height=49.00] - LayoutSVGText {text} at (41.50,132) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (41.50,132) size 4x10 - chunk 1 (middle anchor) text run 1 at (41.50,140.00) startOffset 0 endOffset 1 width 4.00: "6" - LayoutSVGRect {rect} at (47,86) size 7x49 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=47.00] [y=86.00] [width=7.00] [height=49.00] - LayoutSVGText {text} at (48.50,132) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (48.50,132) size 4x10 + LayoutSVGRect {rect} at (60,86) size 11x49 [fill={[type=SOLID] [color=#008000] [opacity=0.30]}] [x=60.00] [y=86.00] [width=11.00] [height=49.00] + LayoutSVGText {text} at (63.50,132) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (63.50,132) size 4x10 + chunk 1 (middle anchor) text run 1 at (63.50,140.00) startOffset 0 endOffset 1 width 4.00: "3" + LayoutSVGRect {rect} at (71,86) size 11x49 [fill={[type=SOLID] [color=#0000FF] [opacity=0.30]}] [x=71.00] [y=86.00] [width=11.00] [height=49.00] + LayoutSVGText {text} at (74.50,132) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (74.50,132) size 4x10 + chunk 1 (middle anchor) text run 1 at (74.50,140.00) startOffset 0 endOffset 1 width 4.00: "4" + LayoutSVGRect {rect} at (60,86) size 0x49 [fill={[type=SOLID] [color=#4B0082] [opacity=0.30]}] [x=60.00] [y=86.00] [width=0.00] [height=49.00] + LayoutSVGText {text} at (58,132) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (58,132) size 4x10 + chunk 1 (middle anchor) text run 1 at (58.00,140.00) startOffset 0 endOffset 1 width 4.00: "5" + LayoutSVGRect {rect} at (41,86) size 6.33x49 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.30]}] [x=41.00] [y=86.00] [width=6.33] [height=49.00] + LayoutSVGText {text} at (42.16,132) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (42.16,132) size 4x10 + chunk 1 (middle anchor) text run 1 at (42.17,140.00) startOffset 0 endOffset 1 width 4.00: "6" + LayoutSVGRect {rect} at (47.33,86) size 6.33x49 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=47.33] [y=86.00] [width=6.33] [height=49.00] + LayoutSVGText {text} at (48.48,132) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (48.48,132) size 4x10 chunk 1 (middle anchor) text run 1 at (48.50,140.00) startOffset 0 endOffset 1 width 4.00: "7" - LayoutSVGRect {rect} at (54,86) size 7x49 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=54.00] [y=86.00] [width=7.00] [height=49.00] - LayoutSVGText {text} at (55.50,132) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (55.50,132) size 4x10 - chunk 1 (middle anchor) text run 1 at (55.50,140.00) startOffset 0 endOffset 1 width 4.00: "8" + LayoutSVGRect {rect} at (53.67,86) size 6.33x49 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=53.67] [y=86.00] [width=6.33] [height=49.00] + LayoutSVGText {text} at (54.83,132) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (54.83,132) size 4x10 + chunk 1 (middle anchor) text run 1 at (54.83,140.00) startOffset 0 endOffset 1 width 4.00: "8" LayoutSVGRect {rect} at (250,93) size 0x40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=250.00] [y=93.00] [width=0.00] [height=40.00] LayoutSVGText {text} at (248,130) size 4x10 contains 1 chunk(s) LayoutSVGInlineText {#text} at (248,130) size 4x10 @@ -125,30 +125,30 @@ LayoutSVGText {text} at (232,130) size 4x10 contains 1 chunk(s) LayoutSVGInlineText {#text} at (232,130) size 4x10 chunk 1 (middle anchor) text run 1 at (232.00,138.00) startOffset 0 endOffset 1 width 4.00: "2" - LayoutSVGRect {rect} at (216,93) size 9x40 [fill={[type=SOLID] [color=#008000] [opacity=0.30]}] [x=216.00] [y=93.00] [width=9.00] [height=40.00] - LayoutSVGText {text} at (218.50,130) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (218.50,130) size 4x10 - chunk 1 (middle anchor) text run 1 at (218.50,138.00) startOffset 0 endOffset 1 width 4.00: "3" - LayoutSVGRect {rect} at (225,93) size 9x40 [fill={[type=SOLID] [color=#0000FF] [opacity=0.30]}] [x=225.00] [y=93.00] [width=9.00] [height=40.00] - LayoutSVGText {text} at (227.50,130) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (227.50,130) size 4x10 - chunk 1 (middle anchor) text run 1 at (227.50,138.00) startOffset 0 endOffset 1 width 4.00: "4" - LayoutSVGRect {rect} at (216,93) size 0x40 [fill={[type=SOLID] [color=#4B0082] [opacity=0.30]}] [x=216.00] [y=93.00] [width=0.00] [height=40.00] - LayoutSVGText {text} at (214,130) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (214,130) size 4x10 - chunk 1 (middle anchor) text run 1 at (214.00,138.00) startOffset 0 endOffset 1 width 4.00: "5" - LayoutSVGRect {rect} at (200,93) size 5.33x40 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.30]}] [x=200.00] [y=93.00] [width=5.33] [height=40.00] - LayoutSVGText {text} at (200.66,130) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (200.66,130) size 4x10 - chunk 1 (middle anchor) text run 1 at (200.67,138.00) startOffset 0 endOffset 1 width 4.00: "6" - LayoutSVGRect {rect} at (205.33,93) size 5.33x40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=205.33] [y=93.00] [width=5.33] [height=40.00] - LayoutSVGText {text} at (206,130) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (206,130) size 4x10 - chunk 1 (middle anchor) text run 1 at (206.00,138.00) startOffset 0 endOffset 1 width 4.00: "7" - LayoutSVGRect {rect} at (210.67,93) size 5.33x40 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=210.67] [y=93.00] [width=5.33] [height=40.00] - LayoutSVGText {text} at (211.33,130) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (211.33,130) size 4x10 - chunk 1 (middle anchor) text run 1 at (211.33,138.00) startOffset 0 endOffset 1 width 4.00: "8" + LayoutSVGRect {rect} at (212,93) size 11x40 [fill={[type=SOLID] [color=#008000] [opacity=0.30]}] [x=212.00] [y=93.00] [width=11.00] [height=40.00] + LayoutSVGText {text} at (215.50,130) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (215.50,130) size 4x10 + chunk 1 (middle anchor) text run 1 at (215.50,138.00) startOffset 0 endOffset 1 width 4.00: "3" + LayoutSVGRect {rect} at (223,93) size 11x40 [fill={[type=SOLID] [color=#0000FF] [opacity=0.30]}] [x=223.00] [y=93.00] [width=11.00] [height=40.00] + LayoutSVGText {text} at (226.50,130) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (226.50,130) size 4x10 + chunk 1 (middle anchor) text run 1 at (226.50,138.00) startOffset 0 endOffset 1 width 4.00: "4" + LayoutSVGRect {rect} at (212,93) size 0x40 [fill={[type=SOLID] [color=#4B0082] [opacity=0.30]}] [x=212.00] [y=93.00] [width=0.00] [height=40.00] + LayoutSVGText {text} at (210,130) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (210,130) size 4x10 + chunk 1 (middle anchor) text run 1 at (210.00,138.00) startOffset 0 endOffset 1 width 4.00: "5" + LayoutSVGRect {rect} at (193,93) size 6.33x40 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.30]}] [x=193.00] [y=93.00] [width=6.33] [height=40.00] + LayoutSVGText {text} at (194.16,130) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (194.16,130) size 4x10 + chunk 1 (middle anchor) text run 1 at (194.17,138.00) startOffset 0 endOffset 1 width 4.00: "6" + LayoutSVGRect {rect} at (199.33,93) size 6.33x40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=199.33] [y=93.00] [width=6.33] [height=40.00] + LayoutSVGText {text} at (200.48,130) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (200.48,130) size 4x10 + chunk 1 (middle anchor) text run 1 at (200.50,138.00) startOffset 0 endOffset 1 width 4.00: "7" + LayoutSVGRect {rect} at (205.67,93) size 6.33x40 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=205.67] [y=93.00] [width=6.33] [height=40.00] + LayoutSVGText {text} at (206.83,130) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (206.83,130) size 4x10 + chunk 1 (middle anchor) text run 1 at (206.83,138.00) startOffset 0 endOffset 1 width 4.00: "8" LayoutSVGRect {rect} at (400,93) size 0x40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=400.00] [y=93.00] [width=0.00] [height=40.00] LayoutSVGText {text} at (398,130) size 4x10 contains 1 chunk(s) LayoutSVGInlineText {#text} at (398,130) size 4x10 @@ -161,30 +161,30 @@ LayoutSVGText {text} at (379,130) size 4x10 contains 1 chunk(s) LayoutSVGInlineText {#text} at (379,130) size 4x10 chunk 1 (middle anchor) text run 1 at (379.00,138.00) startOffset 0 endOffset 1 width 4.00: "2" - LayoutSVGRect {rect} at (362,93) size 9.50x40 [fill={[type=SOLID] [color=#008000] [opacity=0.30]}] [x=362.00] [y=93.00] [width=9.50] [height=40.00] - LayoutSVGText {text} at (364.75,130) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (364.75,130) size 4x10 - chunk 1 (middle anchor) text run 1 at (364.75,138.00) startOffset 0 endOffset 1 width 4.00: "3" - LayoutSVGRect {rect} at (371.50,93) size 9.50x40 [fill={[type=SOLID] [color=#0000FF] [opacity=0.30]}] [x=371.50] [y=93.00] [width=9.50] [height=40.00] - LayoutSVGText {text} at (374.25,130) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (374.25,130) size 4x10 - chunk 1 (middle anchor) text run 1 at (374.25,138.00) startOffset 0 endOffset 1 width 4.00: "4" - LayoutSVGRect {rect} at (362,93) size 0x40 [fill={[type=SOLID] [color=#4B0082] [opacity=0.30]}] [x=362.00] [y=93.00] [width=0.00] [height=40.00] - LayoutSVGText {text} at (360,130) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (360,130) size 4x10 - chunk 1 (middle anchor) text run 1 at (360.00,138.00) startOffset 0 endOffset 1 width 4.00: "5" - LayoutSVGRect {rect} at (344,93) size 6x40 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.30]}] [x=344.00] [y=93.00] [width=6.00] [height=40.00] - LayoutSVGText {text} at (345,130) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (345,130) size 4x10 - chunk 1 (middle anchor) text run 1 at (345.00,138.00) startOffset 0 endOffset 1 width 4.00: "6" - LayoutSVGRect {rect} at (350,93) size 6x40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=350.00] [y=93.00] [width=6.00] [height=40.00] - LayoutSVGText {text} at (351,130) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (351,130) size 4x10 - chunk 1 (middle anchor) text run 1 at (351.00,138.00) startOffset 0 endOffset 1 width 4.00: "7" - LayoutSVGRect {rect} at (356,93) size 6x40 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=356.00] [y=93.00] [width=6.00] [height=40.00] + LayoutSVGRect {rect} at (359,93) size 11x40 [fill={[type=SOLID] [color=#008000] [opacity=0.30]}] [x=359.00] [y=93.00] [width=11.00] [height=40.00] + LayoutSVGText {text} at (362.50,130) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (362.50,130) size 4x10 + chunk 1 (middle anchor) text run 1 at (362.50,138.00) startOffset 0 endOffset 1 width 4.00: "3" + LayoutSVGRect {rect} at (370,93) size 11x40 [fill={[type=SOLID] [color=#0000FF] [opacity=0.30]}] [x=370.00] [y=93.00] [width=11.00] [height=40.00] + LayoutSVGText {text} at (373.50,130) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (373.50,130) size 4x10 + chunk 1 (middle anchor) text run 1 at (373.50,138.00) startOffset 0 endOffset 1 width 4.00: "4" + LayoutSVGRect {rect} at (359,93) size 0x40 [fill={[type=SOLID] [color=#4B0082] [opacity=0.30]}] [x=359.00] [y=93.00] [width=0.00] [height=40.00] LayoutSVGText {text} at (357,130) size 4x10 contains 1 chunk(s) LayoutSVGInlineText {#text} at (357,130) size 4x10 - chunk 1 (middle anchor) text run 1 at (357.00,138.00) startOffset 0 endOffset 1 width 4.00: "8" + chunk 1 (middle anchor) text run 1 at (357.00,138.00) startOffset 0 endOffset 1 width 4.00: "5" + LayoutSVGRect {rect} at (340,93) size 6.33x40 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.30]}] [x=340.00] [y=93.00] [width=6.33] [height=40.00] + LayoutSVGText {text} at (341.16,130) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (341.16,130) size 4x10 + chunk 1 (middle anchor) text run 1 at (341.17,138.00) startOffset 0 endOffset 1 width 4.00: "6" + LayoutSVGRect {rect} at (346.33,93) size 6.33x40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=346.33] [y=93.00] [width=6.33] [height=40.00] + LayoutSVGText {text} at (347.48,130) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (347.48,130) size 4x10 + chunk 1 (middle anchor) text run 1 at (347.50,138.00) startOffset 0 endOffset 1 width 4.00: "7" + LayoutSVGRect {rect} at (352.67,93) size 6.33x40 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=352.67] [y=93.00] [width=6.33] [height=40.00] + LayoutSVGText {text} at (353.83,130) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (353.83,130) size 4x10 + chunk 1 (middle anchor) text run 1 at (353.83,138.00) startOffset 0 endOffset 1 width 4.00: "8" LayoutSVGRect {rect} at (200,168) size 12x40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=200.00] [y=168.00] [width=12.00] [height=40.00] LayoutSVGText {text} at (204,205) size 4x10 contains 1 chunk(s) LayoutSVGInlineText {#text} at (204,205) size 4x10 @@ -201,26 +201,26 @@ LayoutSVGText {text} at (224.50,205) size 4x10 contains 1 chunk(s) LayoutSVGInlineText {#text} at (224.50,205) size 4x10 chunk 1 (middle anchor) text run 1 at (224.50,213.00) startOffset 0 endOffset 1 width 4.00: "3" - LayoutSVGRect {rect} at (231,168) size 11.68x40 [fill={[type=SOLID] [color=#0000FF] [opacity=0.30]}] [x=231.00] [y=168.00] [width=11.68] [height=40.00] - LayoutSVGText {text} at (234.83,205) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (234.83,205) size 4x10 - chunk 1 (middle anchor) text run 1 at (234.84,213.00) startOffset 0 endOffset 1 width 4.00: "4" - LayoutSVGRect {rect} at (242.68,168) size 11.68x40 [fill={[type=SOLID] [color=#4B0082] [opacity=0.30]}] [x=242.68] [y=168.00] [width=11.68] [height=40.00] - LayoutSVGText {text} at (246.52,205) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (246.52,205) size 4x10 - chunk 1 (middle anchor) text run 1 at (246.53,213.00) startOffset 0 endOffset 1 width 4.00: "5" - LayoutSVGRect {rect} at (254.37,168) size 3.33x40 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.30]}] [x=254.37] [y=168.00] [width=3.33] [height=40.00] - LayoutSVGText {text} at (254.03,205) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (254.03,205) size 4x10 - chunk 1 (middle anchor) text run 1 at (254.03,213.00) startOffset 0 endOffset 1 width 4.00: "6" - LayoutSVGRect {rect} at (257.70,168) size 3.33x40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=257.70] [y=168.00] [width=3.33] [height=40.00] - LayoutSVGText {text} at (257.36,205) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (257.36,205) size 4x10 - chunk 1 (middle anchor) text run 1 at (257.37,213.00) startOffset 0 endOffset 1 width 4.00: "7" - LayoutSVGRect {rect} at (261.03,168) size 3.33x40 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=261.03] [y=168.00] [width=3.33] [height=40.00] - LayoutSVGText {text} at (260.69,205) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (260.69,205) size 4x10 - chunk 1 (middle anchor) text run 1 at (260.70,213.00) startOffset 0 endOffset 1 width 4.00: "8" + LayoutSVGRect {rect} at (231,168) size 12x40 [fill={[type=SOLID] [color=#0000FF] [opacity=0.30]}] [x=231.00] [y=168.00] [width=12.00] [height=40.00] + LayoutSVGText {text} at (235,205) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (235,205) size 4x10 + chunk 1 (middle anchor) text run 1 at (235.00,213.00) startOffset 0 endOffset 1 width 4.00: "4" + LayoutSVGRect {rect} at (243,168) size 12x40 [fill={[type=SOLID] [color=#4B0082] [opacity=0.30]}] [x=243.00] [y=168.00] [width=12.00] [height=40.00] + LayoutSVGText {text} at (247,205) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (247,205) size 4x10 + chunk 1 (middle anchor) text run 1 at (247.00,213.00) startOffset 0 endOffset 1 width 4.00: "5" + LayoutSVGRect {rect} at (255,168) size 3.33x40 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.30]}] [x=255.00] [y=168.00] [width=3.33] [height=40.00] + LayoutSVGText {text} at (254.66,205) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (254.66,205) size 4x10 + chunk 1 (middle anchor) text run 1 at (254.67,213.00) startOffset 0 endOffset 1 width 4.00: "6" + LayoutSVGRect {rect} at (258.33,168) size 3.33x40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=258.33] [y=168.00] [width=3.33] [height=40.00] + LayoutSVGText {text} at (258,205) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (258,205) size 4x10 + chunk 1 (middle anchor) text run 1 at (258.00,213.00) startOffset 0 endOffset 1 width 4.00: "7" + LayoutSVGRect {rect} at (261.67,168) size 3.33x40 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=261.67] [y=168.00] [width=3.33] [height=40.00] + LayoutSVGText {text} at (261.33,205) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (261.33,205) size 4x10 + chunk 1 (middle anchor) text run 1 at (261.33,213.00) startOffset 0 endOffset 1 width 4.00: "8" LayoutSVGRect {rect} at (350,168) size 10x40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=350.00] [y=168.00] [width=10.00] [height=40.00] LayoutSVGText {text} at (353,205) size 4x10 contains 1 chunk(s) LayoutSVGInlineText {#text} at (353,205) size 4x10 @@ -237,146 +237,146 @@ LayoutSVGText {text} at (371,205) size 4x10 contains 1 chunk(s) LayoutSVGInlineText {#text} at (371,205) size 4x10 chunk 1 (middle anchor) text run 1 at (371.00,213.00) startOffset 0 endOffset 1 width 4.00: "3" - LayoutSVGRect {rect} at (378,168) size 9.68x40 [fill={[type=SOLID] [color=#0000FF] [opacity=0.30]}] [x=378.00] [y=168.00] [width=9.68] [height=40.00] - LayoutSVGText {text} at (380.83,205) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (380.83,205) size 4x10 - chunk 1 (middle anchor) text run 1 at (380.84,213.00) startOffset 0 endOffset 1 width 4.00: "4" - LayoutSVGRect {rect} at (387.68,168) size 9.68x40 [fill={[type=SOLID] [color=#4B0082] [opacity=0.30]}] [x=387.68] [y=168.00] [width=9.68] [height=40.00] - LayoutSVGText {text} at (390.52,205) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (390.52,205) size 4x10 - chunk 1 (middle anchor) text run 1 at (390.53,213.00) startOffset 0 endOffset 1 width 4.00: "5" - LayoutSVGRect {rect} at (397.37,168) size 2.67x40 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.30]}] [x=397.37] [y=168.00] [width=2.67] [height=40.00] - LayoutSVGText {text} at (396.69,205) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (396.69,205) size 4x10 - chunk 1 (middle anchor) text run 1 at (396.70,213.00) startOffset 0 endOffset 1 width 4.00: "6" - LayoutSVGRect {rect} at (400.03,168) size 2.67x40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=400.03] [y=168.00] [width=2.67] [height=40.00] - LayoutSVGText {text} at (399.36,205) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (399.36,205) size 4x10 - chunk 1 (middle anchor) text run 1 at (399.37,213.00) startOffset 0 endOffset 1 width 4.00: "7" - LayoutSVGRect {rect} at (402.70,168) size 2.67x40 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=402.70] [y=168.00] [width=2.67] [height=40.00] - LayoutSVGText {text} at (402.03,205) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (402.03,205) size 4x10 - chunk 1 (middle anchor) text run 1 at (402.03,213.00) startOffset 0 endOffset 1 width 4.00: "8" - LayoutSVGRect {rect} at (50,236) size 18x49 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=50.00] [y=236.00] [width=18.00] [height=49.00] - LayoutSVGText {text} at (57,282) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (57,282) size 4x10 - chunk 1 (middle anchor) text run 1 at (57.00,290.00) startOffset 0 endOffset 1 width 4.00: "0" - LayoutSVGRect {rect} at (68,236) size 9x49 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=68.00] [y=236.00] [width=9.00] [height=49.00] - LayoutSVGText {text} at (70.50,282) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (70.50,282) size 4x10 - chunk 1 (middle anchor) text run 1 at (70.50,290.00) startOffset 0 endOffset 1 width 4.00: "1" - LayoutSVGRect {rect} at (77,236) size 9x49 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.30]}] [x=77.00] [y=236.00] [width=9.00] [height=49.00] - LayoutSVGText {text} at (79.50,282) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (79.50,282) size 4x10 - chunk 1 (middle anchor) text run 1 at (79.50,290.00) startOffset 0 endOffset 1 width 4.00: "2" - LayoutSVGRect {rect} at (114,236) size 7x49 [fill={[type=SOLID] [color=#008000] [opacity=0.30]}] [x=114.00] [y=236.00] [width=7.00] [height=49.00] - LayoutSVGText {text} at (115.50,282) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (115.50,282) size 4x10 - chunk 1 (middle anchor) text run 1 at (115.50,290.00) startOffset 0 endOffset 1 width 4.00: "3" - LayoutSVGRect {rect} at (107,236) size 7x49 [fill={[type=SOLID] [color=#0000FF] [opacity=0.30]}] [x=107.00] [y=236.00] [width=7.00] [height=49.00] - LayoutSVGText {text} at (108.50,282) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (108.50,282) size 4x10 - chunk 1 (middle anchor) text run 1 at (108.50,290.00) startOffset 0 endOffset 1 width 4.00: "4" - LayoutSVGRect {rect} at (96.50,236) size 10.50x49 [fill={[type=SOLID] [color=#4B0082] [opacity=0.30]}] [x=96.50] [y=236.00] [width=10.50] [height=49.00] - LayoutSVGText {text} at (99.75,282) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (99.75,282) size 4x10 - chunk 1 (middle anchor) text run 1 at (99.75,290.00) startOffset 0 endOffset 1 width 4.00: "5" - LayoutSVGRect {rect} at (86,236) size 10.50x49 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.30]}] [x=86.00] [y=236.00] [width=10.50] [height=49.00] - LayoutSVGText {text} at (89.25,282) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (89.25,282) size 4x10 - chunk 1 (middle anchor) text run 1 at (89.25,290.00) startOffset 0 endOffset 1 width 4.00: "6" - LayoutSVGRect {rect} at (121,236) size 18x49 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=121.00] [y=236.00] [width=18.00] [height=49.00] - LayoutSVGText {text} at (128,282) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (128,282) size 4x10 - chunk 1 (middle anchor) text run 1 at (128.00,290.00) startOffset 0 endOffset 1 width 4.00: "7" - LayoutSVGRect {rect} at (139,236) size 9x49 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=139.00] [y=236.00] [width=9.00] [height=49.00] - LayoutSVGText {text} at (141.50,282) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (141.50,282) size 4x10 - chunk 1 (middle anchor) text run 1 at (141.50,290.00) startOffset 0 endOffset 1 width 4.00: "8" - LayoutSVGRect {rect} at (148,236) size 9x49 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.30]}] [x=148.00] [y=236.00] [width=9.00] [height=49.00] - LayoutSVGText {text} at (150.50,282) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (150.50,282) size 4x10 - chunk 1 (middle anchor) text run 1 at (150.50,290.00) startOffset 0 endOffset 1 width 4.00: "9" - LayoutSVGRect {rect} at (200,243) size 11.68x40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=200.00] [y=243.00] [width=11.68] [height=40.00] - LayoutSVGText {text} at (203.83,280) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (203.83,280) size 4x10 - chunk 1 (middle anchor) text run 1 at (203.84,288.00) startOffset 0 endOffset 1 width 4.00: "0" - LayoutSVGRect {rect} at (211.68,243) size 5.84x40 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=211.68] [y=243.00] [width=5.84] [height=40.00] - LayoutSVGText {text} at (212.59,280) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (212.59,280) size 4x10 - chunk 1 (middle anchor) text run 1 at (212.60,288.00) startOffset 0 endOffset 1 width 4.00: "1" - LayoutSVGRect {rect} at (217.53,243) size 5.84x40 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.30]}] [x=217.53] [y=243.00] [width=5.84] [height=40.00] - LayoutSVGText {text} at (218.44,280) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (218.44,280) size 4x10 - chunk 1 (middle anchor) text run 1 at (218.45,288.00) startOffset 0 endOffset 1 width 4.00: "2" - LayoutSVGRect {rect} at (251.37,243) size 7x40 [fill={[type=SOLID] [color=#008000] [opacity=0.30]}] [x=251.37] [y=243.00] [width=7.00] [height=40.00] - LayoutSVGText {text} at (252.86,280) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (252.86,280) size 4x10 - chunk 1 (middle anchor) text run 1 at (252.87,288.00) startOffset 0 endOffset 1 width 4.00: "3" - LayoutSVGRect {rect} at (244.37,243) size 7x40 [fill={[type=SOLID] [color=#0000FF] [opacity=0.30]}] [x=244.37] [y=243.00] [width=7.00] [height=40.00] - LayoutSVGText {text} at (245.86,280) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (245.86,280) size 4x10 - chunk 1 (middle anchor) text run 1 at (245.87,288.00) startOffset 0 endOffset 1 width 4.00: "4" - LayoutSVGRect {rect} at (233.87,243) size 10.50x40 [fill={[type=SOLID] [color=#4B0082] [opacity=0.30]}] [x=233.87] [y=243.00] [width=10.50] [height=40.00] - LayoutSVGText {text} at (237.11,280) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (237.11,280) size 4x10 - chunk 1 (middle anchor) text run 1 at (237.12,288.00) startOffset 0 endOffset 1 width 4.00: "5" - LayoutSVGRect {rect} at (223.37,243) size 10.50x40 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.30]}] [x=223.37] [y=243.00] [width=10.50] [height=40.00] - LayoutSVGText {text} at (226.61,280) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (226.61,280) size 4x10 - chunk 1 (middle anchor) text run 1 at (226.62,288.00) startOffset 0 endOffset 1 width 4.00: "6" - LayoutSVGRect {rect} at (258.37,243) size 11.68x40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=258.37] [y=243.00] [width=11.68] [height=40.00] - LayoutSVGText {text} at (262.20,280) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (262.20,280) size 4x10 - chunk 1 (middle anchor) text run 1 at (262.21,288.00) startOffset 0 endOffset 1 width 4.00: "7" - LayoutSVGRect {rect} at (270.05,243) size 5.84x40 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=270.05] [y=243.00] [width=5.84] [height=40.00] - LayoutSVGText {text} at (270.97,280) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (270.97,280) size 4x10 - chunk 1 (middle anchor) text run 1 at (270.97,288.00) startOffset 0 endOffset 1 width 4.00: "8" - LayoutSVGRect {rect} at (275.89,243) size 5.84x40 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.30]}] [x=275.89] [y=243.00] [width=5.84] [height=40.00] - LayoutSVGText {text} at (276.81,280) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (276.81,280) size 4x10 - chunk 1 (middle anchor) text run 1 at (276.81,288.00) startOffset 0 endOffset 1 width 4.00: "9" - LayoutSVGRect {rect} at (350,243) size 9.68x40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=350.00] [y=243.00] [width=9.68] [height=40.00] - LayoutSVGText {text} at (352.83,280) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (352.83,280) size 4x10 - chunk 1 (middle anchor) text run 1 at (352.84,288.00) startOffset 0 endOffset 1 width 4.00: "0" - LayoutSVGRect {rect} at (359.68,243) size 4.84x40 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=359.68] [y=243.00] [width=4.84] [height=40.00] - LayoutSVGText {text} at (360.09,280) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (360.09,280) size 4x10 - chunk 1 (middle anchor) text run 1 at (360.10,288.00) startOffset 0 endOffset 1 width 4.00: "1" - LayoutSVGRect {rect} at (364.53,243) size 4.84x40 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.30]}] [x=364.53] [y=243.00] [width=4.84] [height=40.00] - LayoutSVGText {text} at (364.94,280) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (364.94,280) size 4x10 - chunk 1 (middle anchor) text run 1 at (364.95,288.00) startOffset 0 endOffset 1 width 4.00: "2" - LayoutSVGRect {rect} at (397.37,243) size 7x40 [fill={[type=SOLID] [color=#008000] [opacity=0.30]}] [x=397.37] [y=243.00] [width=7.00] [height=40.00] - LayoutSVGText {text} at (398.86,280) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (398.86,280) size 4x10 - chunk 1 (middle anchor) text run 1 at (398.87,288.00) startOffset 0 endOffset 1 width 4.00: "3" - LayoutSVGRect {rect} at (390.37,243) size 7x40 [fill={[type=SOLID] [color=#0000FF] [opacity=0.30]}] [x=390.37] [y=243.00] [width=7.00] [height=40.00] - LayoutSVGText {text} at (391.86,280) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (391.86,280) size 4x10 - chunk 1 (middle anchor) text run 1 at (391.87,288.00) startOffset 0 endOffset 1 width 4.00: "4" - LayoutSVGRect {rect} at (379.87,243) size 10.50x40 [fill={[type=SOLID] [color=#4B0082] [opacity=0.30]}] [x=379.87] [y=243.00] [width=10.50] [height=40.00] - LayoutSVGText {text} at (383.11,280) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (383.11,280) size 4x10 - chunk 1 (middle anchor) text run 1 at (383.12,288.00) startOffset 0 endOffset 1 width 4.00: "5" - LayoutSVGRect {rect} at (369.37,243) size 10.50x40 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.30]}] [x=369.37] [y=243.00] [width=10.50] [height=40.00] - LayoutSVGText {text} at (372.61,280) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (372.61,280) size 4x10 - chunk 1 (middle anchor) text run 1 at (372.62,288.00) startOffset 0 endOffset 1 width 4.00: "6" - LayoutSVGRect {rect} at (404.37,243) size 9.68x40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=404.37] [y=243.00] [width=9.68] [height=40.00] - LayoutSVGText {text} at (407.20,280) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (407.20,280) size 4x10 - chunk 1 (middle anchor) text run 1 at (407.21,288.00) startOffset 0 endOffset 1 width 4.00: "7" - LayoutSVGRect {rect} at (414.05,243) size 4.84x40 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=414.05] [y=243.00] [width=4.84] [height=40.00] - LayoutSVGText {text} at (414.47,280) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (414.47,280) size 4x10 - chunk 1 (middle anchor) text run 1 at (414.47,288.00) startOffset 0 endOffset 1 width 4.00: "8" - LayoutSVGRect {rect} at (418.89,243) size 4.84x40 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.30]}] [x=418.89] [y=243.00] [width=4.84] [height=40.00] - LayoutSVGText {text} at (419.31,280) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (419.31,280) size 4x10 - chunk 1 (middle anchor) text run 1 at (419.31,288.00) startOffset 0 endOffset 1 width 4.00: "9" + LayoutSVGRect {rect} at (378,168) size 12x40 [fill={[type=SOLID] [color=#0000FF] [opacity=0.30]}] [x=378.00] [y=168.00] [width=12.00] [height=40.00] + LayoutSVGText {text} at (382,205) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (382,205) size 4x10 + chunk 1 (middle anchor) text run 1 at (382.00,213.00) startOffset 0 endOffset 1 width 4.00: "4" + LayoutSVGRect {rect} at (390,168) size 12x40 [fill={[type=SOLID] [color=#4B0082] [opacity=0.30]}] [x=390.00] [y=168.00] [width=12.00] [height=40.00] + LayoutSVGText {text} at (394,205) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (394,205) size 4x10 + chunk 1 (middle anchor) text run 1 at (394.00,213.00) startOffset 0 endOffset 1 width 4.00: "5" + LayoutSVGRect {rect} at (402,168) size 3.33x40 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.30]}] [x=402.00] [y=168.00] [width=3.33] [height=40.00] + LayoutSVGText {text} at (401.66,205) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (401.66,205) size 4x10 + chunk 1 (middle anchor) text run 1 at (401.67,213.00) startOffset 0 endOffset 1 width 4.00: "6" + LayoutSVGRect {rect} at (405.33,168) size 3.33x40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=405.33] [y=168.00] [width=3.33] [height=40.00] + LayoutSVGText {text} at (405,205) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (405,205) size 4x10 + chunk 1 (middle anchor) text run 1 at (405.00,213.00) startOffset 0 endOffset 1 width 4.00: "7" + LayoutSVGRect {rect} at (408.67,168) size 3.33x40 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=408.67] [y=168.00] [width=3.33] [height=40.00] + LayoutSVGText {text} at (408.33,205) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (408.33,205) size 4x10 + chunk 1 (middle anchor) text run 1 at (408.33,213.00) startOffset 0 endOffset 1 width 4.00: "8" + LayoutSVGRect {rect} at (50,236) size 8x49 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=50.00] [y=236.00] [width=8.00] [height=49.00] + LayoutSVGText {text} at (52,282) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (52,282) size 4x10 + chunk 1 (middle anchor) text run 1 at (52.00,290.00) startOffset 0 endOffset 1 width 4.00: "0" + LayoutSVGRect {rect} at (58,236) size 8x49 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=58.00] [y=236.00] [width=8.00] [height=49.00] + LayoutSVGText {text} at (60,282) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (60,282) size 4x10 + chunk 1 (middle anchor) text run 1 at (60.00,290.00) startOffset 0 endOffset 1 width 4.00: "1" + LayoutSVGRect {rect} at (66,236) size 8x49 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.30]}] [x=66.00] [y=236.00] [width=8.00] [height=49.00] + LayoutSVGText {text} at (68,282) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (68,282) size 4x10 + chunk 1 (middle anchor) text run 1 at (68.00,290.00) startOffset 0 endOffset 1 width 4.00: "2" + LayoutSVGRect {rect} at (102,236) size 7x49 [fill={[type=SOLID] [color=#008000] [opacity=0.30]}] [x=102.00] [y=236.00] [width=7.00] [height=49.00] + LayoutSVGText {text} at (103.50,282) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (103.50,282) size 4x10 + chunk 1 (middle anchor) text run 1 at (103.50,290.00) startOffset 0 endOffset 1 width 4.00: "3" + LayoutSVGRect {rect} at (95,236) size 7x49 [fill={[type=SOLID] [color=#0000FF] [opacity=0.30]}] [x=95.00] [y=236.00] [width=7.00] [height=49.00] + LayoutSVGText {text} at (96.50,282) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (96.50,282) size 4x10 + chunk 1 (middle anchor) text run 1 at (96.50,290.00) startOffset 0 endOffset 1 width 4.00: "4" + LayoutSVGRect {rect} at (84.50,236) size 10.50x49 [fill={[type=SOLID] [color=#4B0082] [opacity=0.30]}] [x=84.50] [y=236.00] [width=10.50] [height=49.00] + LayoutSVGText {text} at (87.75,282) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (87.75,282) size 4x10 + chunk 1 (middle anchor) text run 1 at (87.75,290.00) startOffset 0 endOffset 1 width 4.00: "5" + LayoutSVGRect {rect} at (74,236) size 10.50x49 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.30]}] [x=74.00] [y=236.00] [width=10.50] [height=49.00] + LayoutSVGText {text} at (77.25,282) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (77.25,282) size 4x10 + chunk 1 (middle anchor) text run 1 at (77.25,290.00) startOffset 0 endOffset 1 width 4.00: "6" + LayoutSVGRect {rect} at (109,236) size 8x49 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=109.00] [y=236.00] [width=8.00] [height=49.00] + LayoutSVGText {text} at (111,282) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (111,282) size 4x10 + chunk 1 (middle anchor) text run 1 at (111.00,290.00) startOffset 0 endOffset 1 width 4.00: "7" + LayoutSVGRect {rect} at (117,236) size 8x49 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=117.00] [y=236.00] [width=8.00] [height=49.00] + LayoutSVGText {text} at (119,282) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (119,282) size 4x10 + chunk 1 (middle anchor) text run 1 at (119.00,290.00) startOffset 0 endOffset 1 width 4.00: "8" + LayoutSVGRect {rect} at (125,236) size 8x49 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.30]}] [x=125.00] [y=236.00] [width=8.00] [height=49.00] + LayoutSVGText {text} at (127,282) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (127,282) size 4x10 + chunk 1 (middle anchor) text run 1 at (127.00,290.00) startOffset 0 endOffset 1 width 4.00: "9" + LayoutSVGRect {rect} at (200,243) size 8x40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=200.00] [y=243.00] [width=8.00] [height=40.00] + LayoutSVGText {text} at (202,280) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (202,280) size 4x10 + chunk 1 (middle anchor) text run 1 at (202.00,288.00) startOffset 0 endOffset 1 width 4.00: "0" + LayoutSVGRect {rect} at (208,243) size 8x40 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=208.00] [y=243.00] [width=8.00] [height=40.00] + LayoutSVGText {text} at (210,280) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (210,280) size 4x10 + chunk 1 (middle anchor) text run 1 at (210.00,288.00) startOffset 0 endOffset 1 width 4.00: "1" + LayoutSVGRect {rect} at (216,243) size 8x40 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.30]}] [x=216.00] [y=243.00] [width=8.00] [height=40.00] + LayoutSVGText {text} at (218,280) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (218,280) size 4x10 + chunk 1 (middle anchor) text run 1 at (218.00,288.00) startOffset 0 endOffset 1 width 4.00: "2" + LayoutSVGRect {rect} at (252,243) size 7x40 [fill={[type=SOLID] [color=#008000] [opacity=0.30]}] [x=252.00] [y=243.00] [width=7.00] [height=40.00] + LayoutSVGText {text} at (253.50,280) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (253.50,280) size 4x10 + chunk 1 (middle anchor) text run 1 at (253.50,288.00) startOffset 0 endOffset 1 width 4.00: "3" + LayoutSVGRect {rect} at (245,243) size 7x40 [fill={[type=SOLID] [color=#0000FF] [opacity=0.30]}] [x=245.00] [y=243.00] [width=7.00] [height=40.00] + LayoutSVGText {text} at (246.50,280) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (246.50,280) size 4x10 + chunk 1 (middle anchor) text run 1 at (246.50,288.00) startOffset 0 endOffset 1 width 4.00: "4" + LayoutSVGRect {rect} at (234.50,243) size 10.50x40 [fill={[type=SOLID] [color=#4B0082] [opacity=0.30]}] [x=234.50] [y=243.00] [width=10.50] [height=40.00] + LayoutSVGText {text} at (237.75,280) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (237.75,280) size 4x10 + chunk 1 (middle anchor) text run 1 at (237.75,288.00) startOffset 0 endOffset 1 width 4.00: "5" + LayoutSVGRect {rect} at (224,243) size 10.50x40 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.30]}] [x=224.00] [y=243.00] [width=10.50] [height=40.00] + LayoutSVGText {text} at (227.25,280) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (227.25,280) size 4x10 + chunk 1 (middle anchor) text run 1 at (227.25,288.00) startOffset 0 endOffset 1 width 4.00: "6" + LayoutSVGRect {rect} at (259,243) size 8x40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=259.00] [y=243.00] [width=8.00] [height=40.00] + LayoutSVGText {text} at (261,280) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (261,280) size 4x10 + chunk 1 (middle anchor) text run 1 at (261.00,288.00) startOffset 0 endOffset 1 width 4.00: "7" + LayoutSVGRect {rect} at (267,243) size 8x40 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=267.00] [y=243.00] [width=8.00] [height=40.00] + LayoutSVGText {text} at (269,280) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (269,280) size 4x10 + chunk 1 (middle anchor) text run 1 at (269.00,288.00) startOffset 0 endOffset 1 width 4.00: "8" + LayoutSVGRect {rect} at (275,243) size 8x40 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.30]}] [x=275.00] [y=243.00] [width=8.00] [height=40.00] + LayoutSVGText {text} at (277,280) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (277,280) size 4x10 + chunk 1 (middle anchor) text run 1 at (277.00,288.00) startOffset 0 endOffset 1 width 4.00: "9" + LayoutSVGRect {rect} at (350,243) size 8x40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=350.00] [y=243.00] [width=8.00] [height=40.00] + LayoutSVGText {text} at (352,280) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (352,280) size 4x10 + chunk 1 (middle anchor) text run 1 at (352.00,288.00) startOffset 0 endOffset 1 width 4.00: "0" + LayoutSVGRect {rect} at (358,243) size 8x40 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=358.00] [y=243.00] [width=8.00] [height=40.00] + LayoutSVGText {text} at (360,280) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (360,280) size 4x10 + chunk 1 (middle anchor) text run 1 at (360.00,288.00) startOffset 0 endOffset 1 width 4.00: "1" + LayoutSVGRect {rect} at (366,243) size 8x40 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.30]}] [x=366.00] [y=243.00] [width=8.00] [height=40.00] + LayoutSVGText {text} at (368,280) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (368,280) size 4x10 + chunk 1 (middle anchor) text run 1 at (368.00,288.00) startOffset 0 endOffset 1 width 4.00: "2" + LayoutSVGRect {rect} at (402,243) size 7x40 [fill={[type=SOLID] [color=#008000] [opacity=0.30]}] [x=402.00] [y=243.00] [width=7.00] [height=40.00] + LayoutSVGText {text} at (403.50,280) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (403.50,280) size 4x10 + chunk 1 (middle anchor) text run 1 at (403.50,288.00) startOffset 0 endOffset 1 width 4.00: "3" + LayoutSVGRect {rect} at (395,243) size 7x40 [fill={[type=SOLID] [color=#0000FF] [opacity=0.30]}] [x=395.00] [y=243.00] [width=7.00] [height=40.00] + LayoutSVGText {text} at (396.50,280) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (396.50,280) size 4x10 + chunk 1 (middle anchor) text run 1 at (396.50,288.00) startOffset 0 endOffset 1 width 4.00: "4" + LayoutSVGRect {rect} at (384.50,243) size 10.50x40 [fill={[type=SOLID] [color=#4B0082] [opacity=0.30]}] [x=384.50] [y=243.00] [width=10.50] [height=40.00] + LayoutSVGText {text} at (387.75,280) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (387.75,280) size 4x10 + chunk 1 (middle anchor) text run 1 at (387.75,288.00) startOffset 0 endOffset 1 width 4.00: "5" + LayoutSVGRect {rect} at (374,243) size 10.50x40 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.30]}] [x=374.00] [y=243.00] [width=10.50] [height=40.00] + LayoutSVGText {text} at (377.25,280) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (377.25,280) size 4x10 + chunk 1 (middle anchor) text run 1 at (377.25,288.00) startOffset 0 endOffset 1 width 4.00: "6" + LayoutSVGRect {rect} at (409,243) size 8x40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=409.00] [y=243.00] [width=8.00] [height=40.00] + LayoutSVGText {text} at (411,280) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (411,280) size 4x10 + chunk 1 (middle anchor) text run 1 at (411.00,288.00) startOffset 0 endOffset 1 width 4.00: "7" + LayoutSVGRect {rect} at (417,243) size 8x40 [fill={[type=SOLID] [color=#FFA500] [opacity=0.30]}] [x=417.00] [y=243.00] [width=8.00] [height=40.00] + LayoutSVGText {text} at (419,280) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (419,280) size 4x10 + chunk 1 (middle anchor) text run 1 at (419.00,288.00) startOffset 0 endOffset 1 width 4.00: "8" + LayoutSVGRect {rect} at (425,243) size 8x40 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.30]}] [x=425.00] [y=243.00] [width=8.00] [height=40.00] + LayoutSVGText {text} at (427,280) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (427,280) size 4x10 + chunk 1 (middle anchor) text run 1 at (427.00,288.00) startOffset 0 endOffset 1 width 4.00: "9" LayoutSVGRect {rect} at (50,311) size 5x49 [fill={[type=SOLID] [color=#FF0000] [opacity=0.30]}] [x=50.00] [y=311.00] [width=5.00] [height=49.00] LayoutSVGText {text} at (50.50,357) size 4x10 contains 1 chunk(s) LayoutSVGInlineText {#text} at (50.50,357) size 4x10 @@ -425,81 +425,81 @@ LayoutSVGText {text} at (371,355) size 4x10 contains 1 chunk(s) LayoutSVGInlineText {#text} at (371,355) size 4x10 chunk 1 (middle anchor) text run 1 at (371.00,363.00) startOffset 0 endOffset 1 width 4.00: "2" - LayoutSVGRect {rect} at (386,318) size 4x40 [fill={[type=SOLID] [color=#008000] [opacity=0.30]}] [x=386.00] [y=318.00] [width=4.00] [height=40.00] - LayoutSVGText {text} at (386,355) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (386,355) size 4x10 - chunk 1 (middle anchor) text run 1 at (386.00,363.00) startOffset 0 endOffset 1 width 4.00: "3" - LayoutSVGRect {rect} at (390,318) size 4x40 [fill={[type=SOLID] [color=#0000FF] [opacity=0.30]}] [x=390.00] [y=318.00] [width=4.00] [height=40.00] - LayoutSVGText {text} at (390,355) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (390,355) size 4x10 - chunk 1 (middle anchor) text run 1 at (390.00,363.00) startOffset 0 endOffset 1 width 4.00: "4" - LayoutSVGText {text} at (50,-9.19) size 60x69.19 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (50,-9.19) size 60x69.19 - chunk 1 text run 1 at (50.00,50.00) startOffset 0 endOffset 6 width 60.00: "ab\x{30C}c\x{30C}\x{30C}" - LayoutSVGText {text} at (200,0.81) size 51x57.19 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (200,0.81) size 51x57.19 - chunk 1 text run 1 at (200.00,50.00) startOffset 0 endOffset 6 width 50.00: "ab\x{30C}c\x{30C}\x{30C}" - LayoutSVGText {text} at (350,0.81) size 56.50x57.19 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (350,0.81) size 56.50x57.19 - chunk 1 text run 1 at (350.00,50.00) startOffset 0 endOffset 6 width 56.00: "ab\x{30C}c\x{30C}\x{30C}" - LayoutSVGText {text} at (40,65.81) size 60x69.19 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (40,65.81) size 60x69.19 - chunk 1 text run 1 at (40.00,125.00) startOffset 0 endOffset 3 width 21.00: "c\x{30C}\x{30C}" - chunk 1 text run 1 at (61.00,125.00) startOffset 0 endOffset 1 width 0.00 RTL: "\x{200F}" - chunk 1 text run 1 at (61.00,125.00) startOffset 0 endOffset 2 width 21.00: "b\x{30C}" + LayoutSVGRect {rect} at (386,318) size 5x40 [fill={[type=SOLID] [color=#008000] [opacity=0.30]}] [x=386.00] [y=318.00] [width=5.00] [height=40.00] + LayoutSVGText {text} at (386.50,355) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (386.50,355) size 4x10 + chunk 1 (middle anchor) text run 1 at (386.50,363.00) startOffset 0 endOffset 1 width 4.00: "3" + LayoutSVGRect {rect} at (391,318) size 5x40 [fill={[type=SOLID] [color=#0000FF] [opacity=0.30]}] [x=391.00] [y=318.00] [width=5.00] [height=40.00] + LayoutSVGText {text} at (391.50,355) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (391.50,355) size 4x10 + chunk 1 (middle anchor) text run 1 at (391.50,363.00) startOffset 0 endOffset 1 width 4.00: "4" + LayoutSVGText {text} at (50,11) size 62x49 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (50,11) size 62x49 + chunk 1 text run 1 at (50.00,50.00) startOffset 0 endOffset 6 width 62.00: "ab\x{30C}c\x{30C}\x{30C}" + LayoutSVGText {text} at (200,16.63) size 62x41.36 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (200,16.63) size 62x41.36 + chunk 1 text run 1 at (200.00,50.00) startOffset 0 endOffset 6 width 62.00: "ab\x{30C}c\x{30C}\x{30C}" + LayoutSVGText {text} at (350,16.63) size 62x41.36 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (350,16.63) size 62x41.36 + chunk 1 text run 1 at (350.00,50.00) startOffset 0 endOffset 6 width 62.00: "ab\x{30C}c\x{30C}\x{30C}" + LayoutSVGText {text} at (40.98,86) size 59x49 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (40.98,86) size 59x49 + chunk 1 text run 1 at (41.00,125.00) startOffset 0 endOffset 3 width 19.00: "c\x{30C}\x{30C}" + chunk 1 text run 1 at (60.00,125.00) startOffset 0 endOffset 1 width 0.00 RTL: "\x{200F}" + chunk 1 text run 1 at (60.00,125.00) startOffset 0 endOffset 2 width 22.00: "b\x{30C}" chunk 1 text run 1 at (82.00,125.00) startOffset 0 endOffset 1 width 0.00 RTL: "\x{200F}" chunk 1 text run 1 at (82.00,125.00) startOffset 0 endOffset 1 width 18.00: "a" chunk 1 text run 1 at (100.00,125.00) startOffset 0 endOffset 1 width 0.00 RTL: "\x{200F}" - LayoutSVGText {text} at (199,75.81) size 51x57.19 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (199,75.81) size 51x57.19 - chunk 1 text run 1 at (200.00,125.00) startOffset 0 endOffset 3 width 16.00: "c\x{30C}\x{30C}" - chunk 1 text run 1 at (216.00,125.00) startOffset 0 endOffset 1 width 0.00 RTL: "\x{200F}" - chunk 1 text run 1 at (216.00,125.00) startOffset 0 endOffset 2 width 18.00: "b\x{30C}" + LayoutSVGText {text} at (192.98,91.63) size 57.02x41.38 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (192.98,91.63) size 57.02x41.38 + chunk 1 text run 1 at (193.00,125.00) startOffset 0 endOffset 3 width 19.00: "c\x{30C}\x{30C}" + chunk 1 text run 1 at (212.00,125.00) startOffset 0 endOffset 1 width 0.00 RTL: "\x{200F}" + chunk 1 text run 1 at (212.00,125.00) startOffset 0 endOffset 2 width 22.00: "b\x{30C}" chunk 1 text run 1 at (234.00,125.00) startOffset 0 endOffset 1 width 0.00 RTL: "\x{200F}" chunk 1 text run 1 at (234.00,125.00) startOffset 0 endOffset 1 width 16.00: "a" chunk 1 text run 1 at (250.00,125.00) startOffset 0 endOffset 1 width 0.00 RTL: "\x{200F}" - LayoutSVGText {text} at (344,75.81) size 56x57.19 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (344,75.81) size 56x57.19 - chunk 1 text run 1 at (344.00,125.00) startOffset 0 endOffset 3 width 18.00: "c\x{30C}\x{30C}" - chunk 1 text run 1 at (362.00,125.00) startOffset 0 endOffset 1 width 0.00 RTL: "\x{200F}" - chunk 1 text run 1 at (362.00,125.00) startOffset 0 endOffset 2 width 19.00: "b\x{30C}" + LayoutSVGText {text} at (339.98,91.63) size 60.02x41.38 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (339.98,91.63) size 60.02x41.38 + chunk 1 text run 1 at (340.00,125.00) startOffset 0 endOffset 3 width 19.00: "c\x{30C}\x{30C}" + chunk 1 text run 1 at (359.00,125.00) startOffset 0 endOffset 1 width 0.00 RTL: "\x{200F}" + chunk 1 text run 1 at (359.00,125.00) startOffset 0 endOffset 2 width 22.00: "b\x{30C}" chunk 1 text run 1 at (381.00,125.00) startOffset 0 endOffset 1 width 0.00 RTL: "\x{200F}" chunk 1 text run 1 at (381.00,125.00) startOffset 0 endOffset 1 width 19.00: "a" chunk 1 text run 1 at (400.00,125.00) startOffset 0 endOffset 1 width 0.00 RTL: "\x{200F}" - LayoutSVGText {text} at (200,151.81) size 68.36x56.19 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (200,151.81) size 68.36x56.19 - chunk 1 text run 1 at (200.00,200.00) startOffset 0 endOffset 9 width 64.37: "fi\x{30C} ffi\x{30C}\x{30C}" - LayoutSVGText {text} at (350,149.81) size 60.36x58.19 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (350,149.81) size 60.36x58.19 - chunk 1 text run 1 at (350.00,200.00) startOffset 0 endOffset 9 width 55.37: "fi\x{30C} ffi\x{30C}\x{30C}" - LayoutSVGText {text} at (50,216.81) size 107x68.19 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (50,216.81) size 107x68.19 - chunk 1 text run 1 at (50.00,275.00) startOffset 0 endOffset 3 width 36.00: "ff\x{30C}" - chunk 1 text run 1 at (86.00,275.00) startOffset 0 endOffset 4 width 35.00 RTL: "\x{640}\x{640}\x{644}\x{627}" - chunk 1 text run 1 at (121.00,275.00) startOffset 0 endOffset 3 width 36.00: "ff\x{30C}" - LayoutSVGText {text} at (200,225.81) size 87.22x57.19 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (200,225.81) size 87.22x57.19 - chunk 1 text run 1 at (200.00,275.00) startOffset 0 endOffset 3 width 23.37: "ff\x{30C}" - chunk 1 text run 1 at (223.37,275.00) startOffset 0 endOffset 4 width 35.00 RTL: "\x{640}\x{640}\x{644}\x{627}" - chunk 1 text run 1 at (258.37,275.00) startOffset 0 endOffset 3 width 23.37: "ff\x{30C}" - LayoutSVGText {text} at (350,225.81) size 78.22x57.19 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (350,225.81) size 78.22x57.19 - chunk 1 text run 1 at (350.00,275.00) startOffset 0 endOffset 3 width 19.37: "ff\x{30C}" - chunk 1 text run 1 at (369.37,275.00) startOffset 0 endOffset 4 width 35.00 RTL: "\x{640}\x{640}\x{644}\x{627}" - chunk 1 text run 1 at (404.37,275.00) startOffset 0 endOffset 3 width 19.37: "ff\x{30C}" - LayoutSVGText {text} at (35,311) size 50.50x69.19 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (35,311) size 50.50x69.19 + LayoutSVGText {text} at (200,168) size 66x40 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (200,168) size 66x40 + chunk 1 text run 1 at (200.00,200.00) startOffset 0 endOffset 9 width 65.00: "fi\x{30C} ffi\x{30C}\x{30C}" + LayoutSVGText {text} at (350,168) size 63x40 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (350,168) size 63x40 + chunk 1 text run 1 at (350.00,200.00) startOffset 0 endOffset 9 width 62.00: "fi\x{30C} ffi\x{30C}\x{30C}" + LayoutSVGText {text} at (50,236) size 84x49 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (50,236) size 84x49 + chunk 1 text run 1 at (50.00,275.00) startOffset 0 endOffset 3 width 24.00: "ff\x{30C}" + chunk 1 text run 1 at (74.00,275.00) startOffset 0 endOffset 4 width 35.00 RTL: "\x{640}\x{640}\x{644}\x{627}" + chunk 1 text run 1 at (109.00,275.00) startOffset 0 endOffset 3 width 24.00: "ff\x{30C}" + LayoutSVGText {text} at (200,243) size 84x40 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (200,243) size 84x40 + chunk 1 text run 1 at (200.00,275.00) startOffset 0 endOffset 3 width 24.00: "ff\x{30C}" + chunk 1 text run 1 at (224.00,275.00) startOffset 0 endOffset 4 width 35.00 RTL: "\x{640}\x{640}\x{644}\x{627}" + chunk 1 text run 1 at (259.00,275.00) startOffset 0 endOffset 3 width 24.00: "ff\x{30C}" + LayoutSVGText {text} at (350,243) size 84x40 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (350,243) size 84x40 + chunk 1 text run 1 at (350.00,275.00) startOffset 0 endOffset 3 width 24.00: "ff\x{30C}" + chunk 1 text run 1 at (374.00,275.00) startOffset 0 endOffset 4 width 35.00 RTL: "\x{640}\x{640}\x{644}\x{627}" + chunk 1 text run 1 at (409.00,275.00) startOffset 0 endOffset 3 width 24.00: "ff\x{30C}" + LayoutSVGText {text} at (35,311) size 52.64x49 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (35,311) size 52.64x49 chunk 1 text run 1 at (50.00,350.00) startOffset 0 endOffset 1 width 0.00: "\x{30C}" chunk 1 text run 1 at (55.00,350.00) startOffset 0 endOffset 1 width 18.00 RTL: "\x{FDB0}" chunk 1 text run 1 at (73.00,350.00) startOffset 0 endOffset 2 width 10.00: "i\x{333}" - LayoutSVGText {text} at (195.50,318) size 54.50x56.19 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (195.50,318) size 54.50x56.19 - chunk 1 text run 1 at (200.00,350.00) startOffset 0 endOffset 2 width 9.00: ".\x{30C}" + LayoutSVGText {text} at (196,318) size 54.64x40 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (196,318) size 54.64x40 + chunk 1 text run 1 at (200.00,350.00) startOffset 0 endOffset 2 width 11.00: ".\x{30C}" chunk 1 text run 1 at (209.00,350.00) startOffset 0 endOffset 1 width 27.00 RTL: "\x{FDB0}" chunk 1 text run 1 at (236.00,350.00) startOffset 0 endOffset 2 width 10.00: "i\x{333}" - LayoutSVGText {text} at (346,318) size 53x56.19 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (346,318) size 53x56.19 - chunk 1 text run 1 at (350.00,350.00) startOffset 0 endOffset 2 width 10.00: ".\x{30C}" + LayoutSVGText {text} at (346,318) size 54.64x40 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (346,318) size 54.64x40 + chunk 1 text run 1 at (350.00,350.00) startOffset 0 endOffset 2 width 11.00: ".\x{30C}" chunk 1 text run 1 at (360.00,350.00) startOffset 0 endOffset 1 width 26.00 RTL: "\x{FDB0}" - chunk 1 text run 1 at (386.00,350.00) startOffset 0 endOffset 2 width 8.00: "i\x{333}" + chunk 1 text run 1 at (386.00,350.00) startOffset 0 endOffset 2 width 10.00: "i\x{333}" LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/ligature-queries-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/text/ligature-queries-expected.png index 76de06d..f61e03b 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/ligature-queries-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/ligature-queries-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/ligature-queries-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/text/ligature-queries-expected.txt index ed75d5a..1525235 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/ligature-queries-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/ligature-queries-expected.txt
@@ -6,7 +6,7 @@ LayoutSVGRoot {svg} at (0,0) size 600x500 LayoutSVGHiddenContainer {defs} at (25,200) size 475x250 LayoutSVGPath {path} at (25,200) size 475x250 [fill={[type=SOLID] [color=#000000]}] [data="M 25 400 C 300 400 200 200 500 450"] - LayoutSVGContainer {g} at (-5,-6) size 595x471.30 + LayoutSVGContainer {g} at (-5,-6) size 599x471.30 LayoutSVGRect {rect} at (25,-6) size 26x71 [fill={[type=SOLID] [color=#FF0000] [opacity=0.50]}] [x=25.00] [y=-6.00] [width=26.00] [height=71.00] LayoutSVGText {text} at (35.50,60) size 5x12 contains 1 chunk(s) LayoutSVGInlineText {#text} at (35.50,60) size 5x12 @@ -19,98 +19,98 @@ LayoutSVGText {text} at (85,60) size 5x12 contains 1 chunk(s) LayoutSVGInlineText {#text} at (85,60) size 5x12 chunk 1 (middle anchor) text run 1 at (85.00,70.00) startOffset 0 endOffset 1 width 5.00: "2" - LayoutSVGRect {rect} at (95,-6) size 13x71 [fill={[type=SOLID] [color=#008000] [opacity=0.50]}] [x=95.00] [y=-6.00] [width=13.00] [height=71.00] - LayoutSVGText {text} at (99,60) size 5x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (99,60) size 5x12 - chunk 1 (middle anchor) text run 1 at (99.00,70.00) startOffset 0 endOffset 1 width 5.00: "3" - LayoutSVGRect {rect} at (108,-6) size 13x71 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=108.00] [y=-6.00] [width=13.00] [height=71.00] - LayoutSVGText {text} at (112,60) size 5x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (112,60) size 5x12 - chunk 1 (middle anchor) text run 1 at (112.00,70.00) startOffset 0 endOffset 1 width 5.00: "4" - LayoutSVGRect {rect} at (121,-6) size 27x71 [fill={[type=SOLID] [color=#4B0082] [opacity=0.50]}] [x=121.00] [y=-6.00] [width=27.00] [height=71.00] - LayoutSVGText {text} at (132,60) size 5x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (132,60) size 5x12 - chunk 1 (middle anchor) text run 1 at (132.00,70.00) startOffset 0 endOffset 1 width 5.00: "5" - LayoutSVGRect {rect} at (148,-6) size 26x71 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.50]}] [x=148.00] [y=-6.00] [width=26.00] [height=71.00] - LayoutSVGText {text} at (158.50,60) size 5x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (158.50,60) size 5x12 - chunk 1 (middle anchor) text run 1 at (158.50,70.00) startOffset 0 endOffset 1 width 5.00: "6" - LayoutSVGRect {rect} at (174,-6) size 29x71 [fill={[type=SOLID] [color=#FF0000] [opacity=0.50]}] [x=174.00] [y=-6.00] [width=29.00] [height=71.00] - LayoutSVGText {text} at (186,60) size 5x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (186,60) size 5x12 - chunk 1 (middle anchor) text run 1 at (186.00,70.00) startOffset 0 endOffset 1 width 5.00: "7" - LayoutSVGRect {rect} at (203,-6) size 12x71 [fill={[type=SOLID] [color=#FFA500] [opacity=0.50]}] [x=203.00] [y=-6.00] [width=12.00] [height=71.00] - LayoutSVGText {text} at (206.50,60) size 5x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (206.50,60) size 5x12 - chunk 1 (middle anchor) text run 1 at (206.50,70.00) startOffset 0 endOffset 1 width 5.00: "8" - LayoutSVGRect {rect} at (215,-6) size 15x71 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.50]}] [x=215.00] [y=-6.00] [width=15.00] [height=71.00] - LayoutSVGText {text} at (220,60) size 5x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (220,60) size 5x12 - chunk 1 (middle anchor) text run 1 at (220.00,70.00) startOffset 0 endOffset 1 width 5.00: "9" - LayoutSVGRect {rect} at (230,-6) size 25x71 [fill={[type=SOLID] [color=#008000] [opacity=0.50]}] [x=230.00] [y=-6.00] [width=25.00] [height=71.00] - LayoutSVGText {text} at (237.50,60) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (237.50,60) size 10x12 - chunk 1 (middle anchor) text run 1 at (237.50,70.00) startOffset 0 endOffset 2 width 10.00: "10" - LayoutSVGRect {rect} at (255,-6) size 14x71 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=255.00] [y=-6.00] [width=14.00] [height=71.00] - LayoutSVGText {text} at (257.17,60) size 9.63x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (257.17,60) size 9.63x12 - chunk 1 (middle anchor) text run 1 at (257.19,70.00) startOffset 0 endOffset 2 width 9.63: "11" - LayoutSVGRect {rect} at (269,-6) size 15x71 [fill={[type=SOLID] [color=#4B0082] [opacity=0.50]}] [x=269.00] [y=-6.00] [width=15.00] [height=71.00] - LayoutSVGText {text} at (271.50,60) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (271.50,60) size 10x12 - chunk 1 (middle anchor) text run 1 at (271.50,70.00) startOffset 0 endOffset 2 width 10.00: "12" - LayoutSVGRect {rect} at (284,-6) size 25x71 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.50]}] [x=284.00] [y=-6.00] [width=25.00] [height=71.00] - LayoutSVGText {text} at (291.50,60) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (291.50,60) size 10x12 - chunk 1 (middle anchor) text run 1 at (291.50,70.00) startOffset 0 endOffset 2 width 10.00: "13" - LayoutSVGRect {rect} at (309,-6) size 25x71 [fill={[type=SOLID] [color=#FF0000] [opacity=0.50]}] [x=309.00] [y=-6.00] [width=25.00] [height=71.00] - LayoutSVGText {text} at (316.50,60) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (316.50,60) size 10x12 - chunk 1 (middle anchor) text run 1 at (316.50,70.00) startOffset 0 endOffset 2 width 10.00: "14" - LayoutSVGRect {rect} at (334,-6) size 14x71 [fill={[type=SOLID] [color=#FFA500] [opacity=0.50]}] [x=334.00] [y=-6.00] [width=14.00] [height=71.00] - LayoutSVGText {text} at (336,60) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (336,60) size 10x12 - chunk 1 (middle anchor) text run 1 at (336.00,70.00) startOffset 0 endOffset 2 width 10.00: "15" - LayoutSVGRect {rect} at (348,-6) size 15x71 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.50]}] [x=348.00] [y=-6.00] [width=15.00] [height=71.00] - LayoutSVGText {text} at (350.50,60) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (350.50,60) size 10x12 - chunk 1 (middle anchor) text run 1 at (350.50,70.00) startOffset 0 endOffset 2 width 10.00: "16" - LayoutSVGRect {rect} at (363,-6) size 26x71 [fill={[type=SOLID] [color=#008000] [opacity=0.50]}] [x=363.00] [y=-6.00] [width=26.00] [height=71.00] - LayoutSVGText {text} at (371,60) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (371,60) size 10x12 - chunk 1 (middle anchor) text run 1 at (371.00,70.00) startOffset 0 endOffset 2 width 10.00: "17" - LayoutSVGRect {rect} at (389,-6) size 30x71 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=389.00] [y=-6.00] [width=30.00] [height=71.00] - LayoutSVGText {text} at (399,60) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (399,60) size 10x12 - chunk 1 (middle anchor) text run 1 at (399.00,70.00) startOffset 0 endOffset 2 width 10.00: "18" - LayoutSVGRect {rect} at (419,-6) size 26x71 [fill={[type=SOLID] [color=#4B0082] [opacity=0.50]}] [x=419.00] [y=-6.00] [width=26.00] [height=71.00] - LayoutSVGText {text} at (427,60) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (427,60) size 10x12 - chunk 1 (middle anchor) text run 1 at (427.00,70.00) startOffset 0 endOffset 2 width 10.00: "19" - LayoutSVGRect {rect} at (445,-6) size 25x71 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.50]}] [x=445.00] [y=-6.00] [width=25.00] [height=71.00] - LayoutSVGText {text} at (452.50,60) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (452.50,60) size 10x12 - chunk 1 (middle anchor) text run 1 at (452.50,70.00) startOffset 0 endOffset 2 width 10.00: "20" - LayoutSVGRect {rect} at (470,-6) size 25x71 [fill={[type=SOLID] [color=#FF0000] [opacity=0.50]}] [x=470.00] [y=-6.00] [width=25.00] [height=71.00] - LayoutSVGText {text} at (477.50,60) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (477.50,60) size 10x12 - chunk 1 (middle anchor) text run 1 at (477.50,70.00) startOffset 0 endOffset 2 width 10.00: "21" - LayoutSVGRect {rect} at (495,-6) size 14x71 [fill={[type=SOLID] [color=#FFA500] [opacity=0.50]}] [x=495.00] [y=-6.00] [width=14.00] [height=71.00] - LayoutSVGText {text} at (497,60) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (497,60) size 10x12 - chunk 1 (middle anchor) text run 1 at (497.00,70.00) startOffset 0 endOffset 2 width 10.00: "22" - LayoutSVGRect {rect} at (509,-6) size 29x71 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.50]}] [x=509.00] [y=-6.00] [width=29.00] [height=71.00] - LayoutSVGText {text} at (518.50,60) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (518.50,60) size 10x12 - chunk 1 (middle anchor) text run 1 at (518.50,70.00) startOffset 0 endOffset 2 width 10.00: "23" - LayoutSVGRect {rect} at (538,-6) size 27x71 [fill={[type=SOLID] [color=#008000] [opacity=0.50]}] [x=538.00] [y=-6.00] [width=27.00] [height=71.00] - LayoutSVGText {text} at (546.50,60) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (546.50,60) size 10x12 - chunk 1 (middle anchor) text run 1 at (546.50,70.00) startOffset 0 endOffset 2 width 10.00: "24" - LayoutSVGRect {rect} at (565,-6) size 25x71 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=565.00] [y=-6.00] [width=25.00] [height=71.00] - LayoutSVGText {text} at (572.50,60) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (572.50,60) size 10x12 - chunk 1 (middle anchor) text run 1 at (572.50,70.00) startOffset 0 endOffset 2 width 10.00: "25" + LayoutSVGRect {rect} at (95,-6) size 15x71 [fill={[type=SOLID] [color=#008000] [opacity=0.50]}] [x=95.00] [y=-6.00] [width=15.00] [height=71.00] + LayoutSVGText {text} at (100,60) size 5x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (100,60) size 5x12 + chunk 1 (middle anchor) text run 1 at (100.00,70.00) startOffset 0 endOffset 1 width 5.00: "3" + LayoutSVGRect {rect} at (110,-6) size 15x71 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=110.00] [y=-6.00] [width=15.00] [height=71.00] + LayoutSVGText {text} at (115,60) size 5x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (115,60) size 5x12 + chunk 1 (middle anchor) text run 1 at (115.00,70.00) startOffset 0 endOffset 1 width 5.00: "4" + LayoutSVGRect {rect} at (125,-6) size 27x71 [fill={[type=SOLID] [color=#4B0082] [opacity=0.50]}] [x=125.00] [y=-6.00] [width=27.00] [height=71.00] + LayoutSVGText {text} at (136,60) size 5x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (136,60) size 5x12 + chunk 1 (middle anchor) text run 1 at (136.00,70.00) startOffset 0 endOffset 1 width 5.00: "5" + LayoutSVGRect {rect} at (152,-6) size 26x71 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.50]}] [x=152.00] [y=-6.00] [width=26.00] [height=71.00] + LayoutSVGText {text} at (162.50,60) size 5x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (162.50,60) size 5x12 + chunk 1 (middle anchor) text run 1 at (162.50,70.00) startOffset 0 endOffset 1 width 5.00: "6" + LayoutSVGRect {rect} at (178,-6) size 29x71 [fill={[type=SOLID] [color=#FF0000] [opacity=0.50]}] [x=178.00] [y=-6.00] [width=29.00] [height=71.00] + LayoutSVGText {text} at (190,60) size 5x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (190,60) size 5x12 + chunk 1 (middle anchor) text run 1 at (190.00,70.00) startOffset 0 endOffset 1 width 5.00: "7" + LayoutSVGRect {rect} at (207,-6) size 12x71 [fill={[type=SOLID] [color=#FFA500] [opacity=0.50]}] [x=207.00] [y=-6.00] [width=12.00] [height=71.00] + LayoutSVGText {text} at (210.50,60) size 5x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (210.50,60) size 5x12 + chunk 1 (middle anchor) text run 1 at (210.50,70.00) startOffset 0 endOffset 1 width 5.00: "8" + LayoutSVGRect {rect} at (219,-6) size 15x71 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.50]}] [x=219.00] [y=-6.00] [width=15.00] [height=71.00] + LayoutSVGText {text} at (224,60) size 5x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (224,60) size 5x12 + chunk 1 (middle anchor) text run 1 at (224.00,70.00) startOffset 0 endOffset 1 width 5.00: "9" + LayoutSVGRect {rect} at (234,-6) size 25x71 [fill={[type=SOLID] [color=#008000] [opacity=0.50]}] [x=234.00] [y=-6.00] [width=25.00] [height=71.00] + LayoutSVGText {text} at (241.50,60) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (241.50,60) size 10x12 + chunk 1 (middle anchor) text run 1 at (241.50,70.00) startOffset 0 endOffset 2 width 10.00: "10" + LayoutSVGRect {rect} at (259,-6) size 14x71 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=259.00] [y=-6.00] [width=14.00] [height=71.00] + LayoutSVGText {text} at (261.17,60) size 9.63x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (261.17,60) size 9.63x12 + chunk 1 (middle anchor) text run 1 at (261.19,70.00) startOffset 0 endOffset 2 width 9.63: "11" + LayoutSVGRect {rect} at (273,-6) size 15x71 [fill={[type=SOLID] [color=#4B0082] [opacity=0.50]}] [x=273.00] [y=-6.00] [width=15.00] [height=71.00] + LayoutSVGText {text} at (275.50,60) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (275.50,60) size 10x12 + chunk 1 (middle anchor) text run 1 at (275.50,70.00) startOffset 0 endOffset 2 width 10.00: "12" + LayoutSVGRect {rect} at (288,-6) size 25x71 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.50]}] [x=288.00] [y=-6.00] [width=25.00] [height=71.00] + LayoutSVGText {text} at (295.50,60) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (295.50,60) size 10x12 + chunk 1 (middle anchor) text run 1 at (295.50,70.00) startOffset 0 endOffset 2 width 10.00: "13" + LayoutSVGRect {rect} at (313,-6) size 25x71 [fill={[type=SOLID] [color=#FF0000] [opacity=0.50]}] [x=313.00] [y=-6.00] [width=25.00] [height=71.00] + LayoutSVGText {text} at (320.50,60) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (320.50,60) size 10x12 + chunk 1 (middle anchor) text run 1 at (320.50,70.00) startOffset 0 endOffset 2 width 10.00: "14" + LayoutSVGRect {rect} at (338,-6) size 14x71 [fill={[type=SOLID] [color=#FFA500] [opacity=0.50]}] [x=338.00] [y=-6.00] [width=14.00] [height=71.00] + LayoutSVGText {text} at (340,60) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (340,60) size 10x12 + chunk 1 (middle anchor) text run 1 at (340.00,70.00) startOffset 0 endOffset 2 width 10.00: "15" + LayoutSVGRect {rect} at (352,-6) size 15x71 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.50]}] [x=352.00] [y=-6.00] [width=15.00] [height=71.00] + LayoutSVGText {text} at (354.50,60) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (354.50,60) size 10x12 + chunk 1 (middle anchor) text run 1 at (354.50,70.00) startOffset 0 endOffset 2 width 10.00: "16" + LayoutSVGRect {rect} at (367,-6) size 26x71 [fill={[type=SOLID] [color=#008000] [opacity=0.50]}] [x=367.00] [y=-6.00] [width=26.00] [height=71.00] + LayoutSVGText {text} at (375,60) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (375,60) size 10x12 + chunk 1 (middle anchor) text run 1 at (375.00,70.00) startOffset 0 endOffset 2 width 10.00: "17" + LayoutSVGRect {rect} at (393,-6) size 30x71 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=393.00] [y=-6.00] [width=30.00] [height=71.00] + LayoutSVGText {text} at (403,60) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (403,60) size 10x12 + chunk 1 (middle anchor) text run 1 at (403.00,70.00) startOffset 0 endOffset 2 width 10.00: "18" + LayoutSVGRect {rect} at (423,-6) size 26x71 [fill={[type=SOLID] [color=#4B0082] [opacity=0.50]}] [x=423.00] [y=-6.00] [width=26.00] [height=71.00] + LayoutSVGText {text} at (431,60) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (431,60) size 10x12 + chunk 1 (middle anchor) text run 1 at (431.00,70.00) startOffset 0 endOffset 2 width 10.00: "19" + LayoutSVGRect {rect} at (449,-6) size 25x71 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.50]}] [x=449.00] [y=-6.00] [width=25.00] [height=71.00] + LayoutSVGText {text} at (456.50,60) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (456.50,60) size 10x12 + chunk 1 (middle anchor) text run 1 at (456.50,70.00) startOffset 0 endOffset 2 width 10.00: "20" + LayoutSVGRect {rect} at (474,-6) size 25x71 [fill={[type=SOLID] [color=#FF0000] [opacity=0.50]}] [x=474.00] [y=-6.00] [width=25.00] [height=71.00] + LayoutSVGText {text} at (481.50,60) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (481.50,60) size 10x12 + chunk 1 (middle anchor) text run 1 at (481.50,70.00) startOffset 0 endOffset 2 width 10.00: "21" + LayoutSVGRect {rect} at (499,-6) size 14x71 [fill={[type=SOLID] [color=#FFA500] [opacity=0.50]}] [x=499.00] [y=-6.00] [width=14.00] [height=71.00] + LayoutSVGText {text} at (501,60) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (501,60) size 10x12 + chunk 1 (middle anchor) text run 1 at (501.00,70.00) startOffset 0 endOffset 2 width 10.00: "22" + LayoutSVGRect {rect} at (513,-6) size 29x71 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.50]}] [x=513.00] [y=-6.00] [width=29.00] [height=71.00] + LayoutSVGText {text} at (522.50,60) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (522.50,60) size 10x12 + chunk 1 (middle anchor) text run 1 at (522.50,70.00) startOffset 0 endOffset 2 width 10.00: "23" + LayoutSVGRect {rect} at (542,-6) size 27x71 [fill={[type=SOLID] [color=#008000] [opacity=0.50]}] [x=542.00] [y=-6.00] [width=27.00] [height=71.00] + LayoutSVGText {text} at (550.50,60) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (550.50,60) size 10x12 + chunk 1 (middle anchor) text run 1 at (550.50,70.00) startOffset 0 endOffset 2 width 10.00: "24" + LayoutSVGRect {rect} at (569,-6) size 25x71 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=569.00] [y=-6.00] [width=25.00] [height=71.00] + LayoutSVGText {text} at (576.50,60) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (576.50,60) size 10x12 + chunk 1 (middle anchor) text run 1 at (576.50,70.00) startOffset 0 endOffset 2 width 10.00: "25" LayoutSVGRect {rect} at (25,105) size 25x57 [fill={[type=SOLID] [color=#FF0000] [opacity=0.50]}] [x=25.00] [y=105.00] [width=25.00] [height=57.00] LayoutSVGText {text} at (35,157) size 5x12 contains 1 chunk(s) LayoutSVGInlineText {#text} at (35,157) size 5x12 @@ -123,98 +123,98 @@ LayoutSVGText {text} at (79,157) size 5x12 contains 1 chunk(s) LayoutSVGInlineText {#text} at (79,157) size 5x12 chunk 1 (middle anchor) text run 1 at (79.00,167.00) startOffset 0 endOffset 1 width 5.00: "2" - LayoutSVGRect {rect} at (88,105) size 12.50x57 [fill={[type=SOLID] [color=#008000] [opacity=0.50]}] [x=88.00] [y=105.00] [width=12.50] [height=57.00] - LayoutSVGText {text} at (91.75,157) size 5x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (91.75,157) size 5x12 - chunk 1 (middle anchor) text run 1 at (91.75,167.00) startOffset 0 endOffset 1 width 5.00: "3" - LayoutSVGRect {rect} at (100.50,105) size 12.50x57 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=100.50] [y=105.00] [width=12.50] [height=57.00] - LayoutSVGText {text} at (104.25,157) size 5x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (104.25,157) size 5x12 - chunk 1 (middle anchor) text run 1 at (104.25,167.00) startOffset 0 endOffset 1 width 5.00: "4" - LayoutSVGRect {rect} at (113,105) size 22x57 [fill={[type=SOLID] [color=#4B0082] [opacity=0.50]}] [x=113.00] [y=105.00] [width=22.00] [height=57.00] - LayoutSVGText {text} at (121.50,157) size 5x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (121.50,157) size 5x12 - chunk 1 (middle anchor) text run 1 at (121.50,167.00) startOffset 0 endOffset 1 width 5.00: "5" - LayoutSVGRect {rect} at (135,105) size 22x57 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.50]}] [x=135.00] [y=105.00] [width=22.00] [height=57.00] - LayoutSVGText {text} at (143.50,157) size 5x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (143.50,157) size 5x12 - chunk 1 (middle anchor) text run 1 at (143.50,167.00) startOffset 0 endOffset 1 width 5.00: "6" - LayoutSVGRect {rect} at (157,105) size 25x57 [fill={[type=SOLID] [color=#FF0000] [opacity=0.50]}] [x=157.00] [y=105.00] [width=25.00] [height=57.00] - LayoutSVGText {text} at (167,157) size 5x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (167,157) size 5x12 - chunk 1 (middle anchor) text run 1 at (167.00,167.00) startOffset 0 endOffset 1 width 5.00: "7" - LayoutSVGRect {rect} at (182,105) size 17x57 [fill={[type=SOLID] [color=#FFA500] [opacity=0.50]}] [x=182.00] [y=105.00] [width=17.00] [height=57.00] - LayoutSVGText {text} at (188,157) size 5x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (188,157) size 5x12 - chunk 1 (middle anchor) text run 1 at (188.00,167.00) startOffset 0 endOffset 1 width 5.00: "8" - LayoutSVGRect {rect} at (199,105) size 13x57 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.50]}] [x=199.00] [y=105.00] [width=13.00] [height=57.00] - LayoutSVGText {text} at (203,157) size 5x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (203,157) size 5x12 - chunk 1 (middle anchor) text run 1 at (203.00,167.00) startOffset 0 endOffset 1 width 5.00: "9" - LayoutSVGRect {rect} at (212,105) size 17x57 [fill={[type=SOLID] [color=#008000] [opacity=0.50]}] [x=212.00] [y=105.00] [width=17.00] [height=57.00] - LayoutSVGText {text} at (215.50,157) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (215.50,157) size 10x12 - chunk 1 (middle anchor) text run 1 at (215.50,167.00) startOffset 0 endOffset 2 width 10.00: "10" - LayoutSVGRect {rect} at (229,105) size 14x57 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=229.00] [y=105.00] [width=14.00] [height=57.00] - LayoutSVGText {text} at (231.17,157) size 9.63x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (231.17,157) size 9.63x12 - chunk 1 (middle anchor) text run 1 at (231.19,167.00) startOffset 0 endOffset 2 width 9.63: "11" - LayoutSVGRect {rect} at (243,105) size 13x57 [fill={[type=SOLID] [color=#4B0082] [opacity=0.50]}] [x=243.00] [y=105.00] [width=13.00] [height=57.00] - LayoutSVGText {text} at (244.50,157) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (244.50,157) size 10x12 - chunk 1 (middle anchor) text run 1 at (244.50,167.00) startOffset 0 endOffset 2 width 10.00: "12" - LayoutSVGRect {rect} at (256,105) size 16.55x57 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.50]}] [x=256.00] [y=105.00] [width=16.55] [height=57.00] - LayoutSVGText {text} at (259.27,157) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (259.27,157) size 10x12 - chunk 1 (middle anchor) text run 1 at (259.27,167.00) startOffset 0 endOffset 2 width 10.00: "13" - LayoutSVGRect {rect} at (272.55,105) size 16.55x57 [fill={[type=SOLID] [color=#FF0000] [opacity=0.50]}] [x=272.55] [y=105.00] [width=16.55] [height=57.00] - LayoutSVGText {text} at (275.81,157) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (275.81,157) size 10x12 - chunk 1 (middle anchor) text run 1 at (275.82,167.00) startOffset 0 endOffset 2 width 10.00: "14" - LayoutSVGRect {rect} at (289.10,105) size 14x57 [fill={[type=SOLID] [color=#FFA500] [opacity=0.50]}] [x=289.10] [y=105.00] [width=14.00] [height=57.00] - LayoutSVGText {text} at (291.09,157) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (291.09,157) size 10x12 - chunk 1 (middle anchor) text run 1 at (291.10,167.00) startOffset 0 endOffset 2 width 10.00: "15" - LayoutSVGRect {rect} at (303.10,105) size 13x57 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.50]}] [x=303.10] [y=105.00] [width=13.00] [height=57.00] - LayoutSVGText {text} at (304.59,157) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (304.59,157) size 10x12 - chunk 1 (middle anchor) text run 1 at (304.60,167.00) startOffset 0 endOffset 2 width 10.00: "16" - LayoutSVGRect {rect} at (316.10,105) size 22x57 [fill={[type=SOLID] [color=#008000] [opacity=0.50]}] [x=316.10] [y=105.00] [width=22.00] [height=57.00] - LayoutSVGText {text} at (322.09,157) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (322.09,157) size 10x12 - chunk 1 (middle anchor) text run 1 at (322.10,167.00) startOffset 0 endOffset 2 width 10.00: "17" - LayoutSVGRect {rect} at (338.10,105) size 25x57 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=338.10] [y=105.00] [width=25.00] [height=57.00] - LayoutSVGText {text} at (345.59,157) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (345.59,157) size 10x12 - chunk 1 (middle anchor) text run 1 at (345.60,167.00) startOffset 0 endOffset 2 width 10.00: "18" - LayoutSVGRect {rect} at (363.10,105) size 22x57 [fill={[type=SOLID] [color=#4B0082] [opacity=0.50]}] [x=363.10] [y=105.00] [width=22.00] [height=57.00] - LayoutSVGText {text} at (369.09,157) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (369.09,157) size 10x12 - chunk 1 (middle anchor) text run 1 at (369.10,167.00) startOffset 0 endOffset 2 width 10.00: "19" - LayoutSVGRect {rect} at (385.10,105) size 16.55x57 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.50]}] [x=385.10] [y=105.00] [width=16.55] [height=57.00] - LayoutSVGText {text} at (388.36,157) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (388.36,157) size 10x12 - chunk 1 (middle anchor) text run 1 at (388.37,167.00) startOffset 0 endOffset 2 width 10.00: "20" - LayoutSVGRect {rect} at (401.65,105) size 16.55x57 [fill={[type=SOLID] [color=#FF0000] [opacity=0.50]}] [x=401.65] [y=105.00] [width=16.55] [height=57.00] - LayoutSVGText {text} at (404.91,157) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (404.91,157) size 10x12 - chunk 1 (middle anchor) text run 1 at (404.92,167.00) startOffset 0 endOffset 2 width 10.00: "21" - LayoutSVGRect {rect} at (418.19,105) size 14x57 [fill={[type=SOLID] [color=#FFA500] [opacity=0.50]}] [x=418.19] [y=105.00] [width=14.00] [height=57.00] - LayoutSVGText {text} at (420.19,157) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (420.19,157) size 10x12 - chunk 1 (middle anchor) text run 1 at (420.19,167.00) startOffset 0 endOffset 2 width 10.00: "22" - LayoutSVGRect {rect} at (432.19,105) size 25x57 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.50]}] [x=432.19] [y=105.00] [width=25.00] [height=57.00] - LayoutSVGText {text} at (439.69,157) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (439.69,157) size 10x12 - chunk 1 (middle anchor) text run 1 at (439.69,167.00) startOffset 0 endOffset 2 width 10.00: "23" - LayoutSVGRect {rect} at (457.19,105) size 22x57 [fill={[type=SOLID] [color=#008000] [opacity=0.50]}] [x=457.19] [y=105.00] [width=22.00] [height=57.00] - LayoutSVGText {text} at (463.19,157) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (463.19,157) size 10x12 - chunk 1 (middle anchor) text run 1 at (463.19,167.00) startOffset 0 endOffset 2 width 10.00: "24" - LayoutSVGRect {rect} at (479.19,105) size 17x57 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=479.19] [y=105.00] [width=17.00] [height=57.00] - LayoutSVGText {text} at (482.69,157) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (482.69,157) size 10x12 - chunk 1 (middle anchor) text run 1 at (482.69,167.00) startOffset 0 endOffset 2 width 10.00: "25" + LayoutSVGRect {rect} at (88,105) size 15x57 [fill={[type=SOLID] [color=#008000] [opacity=0.50]}] [x=88.00] [y=105.00] [width=15.00] [height=57.00] + LayoutSVGText {text} at (93,157) size 5x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (93,157) size 5x12 + chunk 1 (middle anchor) text run 1 at (93.00,167.00) startOffset 0 endOffset 1 width 5.00: "3" + LayoutSVGRect {rect} at (103,105) size 15x57 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=103.00] [y=105.00] [width=15.00] [height=57.00] + LayoutSVGText {text} at (108,157) size 5x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (108,157) size 5x12 + chunk 1 (middle anchor) text run 1 at (108.00,167.00) startOffset 0 endOffset 1 width 5.00: "4" + LayoutSVGRect {rect} at (118,105) size 22x57 [fill={[type=SOLID] [color=#4B0082] [opacity=0.50]}] [x=118.00] [y=105.00] [width=22.00] [height=57.00] + LayoutSVGText {text} at (126.50,157) size 5x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (126.50,157) size 5x12 + chunk 1 (middle anchor) text run 1 at (126.50,167.00) startOffset 0 endOffset 1 width 5.00: "5" + LayoutSVGRect {rect} at (140,105) size 22x57 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.50]}] [x=140.00] [y=105.00] [width=22.00] [height=57.00] + LayoutSVGText {text} at (148.50,157) size 5x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (148.50,157) size 5x12 + chunk 1 (middle anchor) text run 1 at (148.50,167.00) startOffset 0 endOffset 1 width 5.00: "6" + LayoutSVGRect {rect} at (162,105) size 25x57 [fill={[type=SOLID] [color=#FF0000] [opacity=0.50]}] [x=162.00] [y=105.00] [width=25.00] [height=57.00] + LayoutSVGText {text} at (172,157) size 5x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (172,157) size 5x12 + chunk 1 (middle anchor) text run 1 at (172.00,167.00) startOffset 0 endOffset 1 width 5.00: "7" + LayoutSVGRect {rect} at (187,105) size 17x57 [fill={[type=SOLID] [color=#FFA500] [opacity=0.50]}] [x=187.00] [y=105.00] [width=17.00] [height=57.00] + LayoutSVGText {text} at (193,157) size 5x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (193,157) size 5x12 + chunk 1 (middle anchor) text run 1 at (193.00,167.00) startOffset 0 endOffset 1 width 5.00: "8" + LayoutSVGRect {rect} at (204,105) size 13x57 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.50]}] [x=204.00] [y=105.00] [width=13.00] [height=57.00] + LayoutSVGText {text} at (208,157) size 5x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (208,157) size 5x12 + chunk 1 (middle anchor) text run 1 at (208.00,167.00) startOffset 0 endOffset 1 width 5.00: "9" + LayoutSVGRect {rect} at (217,105) size 17x57 [fill={[type=SOLID] [color=#008000] [opacity=0.50]}] [x=217.00] [y=105.00] [width=17.00] [height=57.00] + LayoutSVGText {text} at (220.50,157) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (220.50,157) size 10x12 + chunk 1 (middle anchor) text run 1 at (220.50,167.00) startOffset 0 endOffset 2 width 10.00: "10" + LayoutSVGRect {rect} at (234,105) size 14x57 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=234.00] [y=105.00] [width=14.00] [height=57.00] + LayoutSVGText {text} at (236.17,157) size 9.63x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (236.17,157) size 9.63x12 + chunk 1 (middle anchor) text run 1 at (236.19,167.00) startOffset 0 endOffset 2 width 9.63: "11" + LayoutSVGRect {rect} at (248,105) size 13x57 [fill={[type=SOLID] [color=#4B0082] [opacity=0.50]}] [x=248.00] [y=105.00] [width=13.00] [height=57.00] + LayoutSVGText {text} at (249.50,157) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (249.50,157) size 10x12 + chunk 1 (middle anchor) text run 1 at (249.50,167.00) startOffset 0 endOffset 2 width 10.00: "12" + LayoutSVGRect {rect} at (261,105) size 16.55x57 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.50]}] [x=261.00] [y=105.00] [width=16.55] [height=57.00] + LayoutSVGText {text} at (264.27,157) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (264.27,157) size 10x12 + chunk 1 (middle anchor) text run 1 at (264.27,167.00) startOffset 0 endOffset 2 width 10.00: "13" + LayoutSVGRect {rect} at (277.55,105) size 16.55x57 [fill={[type=SOLID] [color=#FF0000] [opacity=0.50]}] [x=277.55] [y=105.00] [width=16.55] [height=57.00] + LayoutSVGText {text} at (280.81,157) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (280.81,157) size 10x12 + chunk 1 (middle anchor) text run 1 at (280.82,167.00) startOffset 0 endOffset 2 width 10.00: "14" + LayoutSVGRect {rect} at (294.10,105) size 14x57 [fill={[type=SOLID] [color=#FFA500] [opacity=0.50]}] [x=294.10] [y=105.00] [width=14.00] [height=57.00] + LayoutSVGText {text} at (296.09,157) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (296.09,157) size 10x12 + chunk 1 (middle anchor) text run 1 at (296.10,167.00) startOffset 0 endOffset 2 width 10.00: "15" + LayoutSVGRect {rect} at (308.10,105) size 13x57 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.50]}] [x=308.10] [y=105.00] [width=13.00] [height=57.00] + LayoutSVGText {text} at (309.59,157) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (309.59,157) size 10x12 + chunk 1 (middle anchor) text run 1 at (309.60,167.00) startOffset 0 endOffset 2 width 10.00: "16" + LayoutSVGRect {rect} at (321.10,105) size 22x57 [fill={[type=SOLID] [color=#008000] [opacity=0.50]}] [x=321.10] [y=105.00] [width=22.00] [height=57.00] + LayoutSVGText {text} at (327.09,157) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (327.09,157) size 10x12 + chunk 1 (middle anchor) text run 1 at (327.10,167.00) startOffset 0 endOffset 2 width 10.00: "17" + LayoutSVGRect {rect} at (343.10,105) size 25x57 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=343.10] [y=105.00] [width=25.00] [height=57.00] + LayoutSVGText {text} at (350.59,157) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (350.59,157) size 10x12 + chunk 1 (middle anchor) text run 1 at (350.60,167.00) startOffset 0 endOffset 2 width 10.00: "18" + LayoutSVGRect {rect} at (368.10,105) size 22x57 [fill={[type=SOLID] [color=#4B0082] [opacity=0.50]}] [x=368.10] [y=105.00] [width=22.00] [height=57.00] + LayoutSVGText {text} at (374.09,157) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (374.09,157) size 10x12 + chunk 1 (middle anchor) text run 1 at (374.10,167.00) startOffset 0 endOffset 2 width 10.00: "19" + LayoutSVGRect {rect} at (390.10,105) size 16.55x57 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.50]}] [x=390.10] [y=105.00] [width=16.55] [height=57.00] + LayoutSVGText {text} at (393.36,157) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (393.36,157) size 10x12 + chunk 1 (middle anchor) text run 1 at (393.37,167.00) startOffset 0 endOffset 2 width 10.00: "20" + LayoutSVGRect {rect} at (406.65,105) size 16.55x57 [fill={[type=SOLID] [color=#FF0000] [opacity=0.50]}] [x=406.65] [y=105.00] [width=16.55] [height=57.00] + LayoutSVGText {text} at (409.91,157) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (409.91,157) size 10x12 + chunk 1 (middle anchor) text run 1 at (409.92,167.00) startOffset 0 endOffset 2 width 10.00: "21" + LayoutSVGRect {rect} at (423.19,105) size 14x57 [fill={[type=SOLID] [color=#FFA500] [opacity=0.50]}] [x=423.19] [y=105.00] [width=14.00] [height=57.00] + LayoutSVGText {text} at (425.19,157) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (425.19,157) size 10x12 + chunk 1 (middle anchor) text run 1 at (425.19,167.00) startOffset 0 endOffset 2 width 10.00: "22" + LayoutSVGRect {rect} at (437.19,105) size 25x57 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.50]}] [x=437.19] [y=105.00] [width=25.00] [height=57.00] + LayoutSVGText {text} at (444.69,157) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (444.69,157) size 10x12 + chunk 1 (middle anchor) text run 1 at (444.69,167.00) startOffset 0 endOffset 2 width 10.00: "23" + LayoutSVGRect {rect} at (462.19,105) size 22x57 [fill={[type=SOLID] [color=#008000] [opacity=0.50]}] [x=462.19] [y=105.00] [width=22.00] [height=57.00] + LayoutSVGText {text} at (468.19,157) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (468.19,157) size 10x12 + chunk 1 (middle anchor) text run 1 at (468.19,167.00) startOffset 0 endOffset 2 width 10.00: "24" + LayoutSVGRect {rect} at (484.19,105) size 17x57 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=484.19] [y=105.00] [width=17.00] [height=57.00] + LayoutSVGText {text} at (487.69,157) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (487.69,157) size 10x12 + chunk 1 (middle anchor) text run 1 at (487.69,167.00) startOffset 0 endOffset 2 width 10.00: "25" LayoutSVGRect {rect} at (25,204) size 28x57 [fill={[type=SOLID] [color=#FF0000] [opacity=0.50]}] [x=25.00] [y=204.00] [width=28.00] [height=57.00] LayoutSVGText {text} at (36.50,256) size 5x12 contains 1 chunk(s) LayoutSVGInlineText {#text} at (36.50,256) size 5x12 @@ -227,98 +227,98 @@ LayoutSVGText {text} at (85.50,256) size 5x12 contains 1 chunk(s) LayoutSVGInlineText {#text} at (85.50,256) size 5x12 chunk 1 (middle anchor) text run 1 at (85.50,266.00) startOffset 0 endOffset 1 width 5.00: "2" - LayoutSVGRect {rect} at (95,204) size 12.50x57 [fill={[type=SOLID] [color=#008000] [opacity=0.50]}] [x=95.00] [y=204.00] [width=12.50] [height=57.00] - LayoutSVGText {text} at (98.75,256) size 5x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (98.75,256) size 5x12 - chunk 1 (middle anchor) text run 1 at (98.75,266.00) startOffset 0 endOffset 1 width 5.00: "3" - LayoutSVGRect {rect} at (107.50,204) size 12.50x57 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=107.50] [y=204.00] [width=12.50] [height=57.00] - LayoutSVGText {text} at (111.25,256) size 5x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (111.25,256) size 5x12 - chunk 1 (middle anchor) text run 1 at (111.25,266.00) startOffset 0 endOffset 1 width 5.00: "4" - LayoutSVGRect {rect} at (120,204) size 28x57 [fill={[type=SOLID] [color=#4B0082] [opacity=0.50]}] [x=120.00] [y=204.00] [width=28.00] [height=57.00] - LayoutSVGText {text} at (131.50,256) size 5x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (131.50,256) size 5x12 - chunk 1 (middle anchor) text run 1 at (131.50,266.00) startOffset 0 endOffset 1 width 5.00: "5" - LayoutSVGRect {rect} at (148,204) size 28x57 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.50]}] [x=148.00] [y=204.00] [width=28.00] [height=57.00] - LayoutSVGText {text} at (159.50,256) size 5x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (159.50,256) size 5x12 - chunk 1 (middle anchor) text run 1 at (159.50,266.00) startOffset 0 endOffset 1 width 5.00: "6" - LayoutSVGRect {rect} at (176,204) size 28x57 [fill={[type=SOLID] [color=#FF0000] [opacity=0.50]}] [x=176.00] [y=204.00] [width=28.00] [height=57.00] - LayoutSVGText {text} at (187.50,256) size 5x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (187.50,256) size 5x12 - chunk 1 (middle anchor) text run 1 at (187.50,266.00) startOffset 0 endOffset 1 width 5.00: "7" - LayoutSVGRect {rect} at (204,204) size 14x57 [fill={[type=SOLID] [color=#FFA500] [opacity=0.50]}] [x=204.00] [y=204.00] [width=14.00] [height=57.00] - LayoutSVGText {text} at (208.50,256) size 5x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (208.50,256) size 5x12 - chunk 1 (middle anchor) text run 1 at (208.50,266.00) startOffset 0 endOffset 1 width 5.00: "8" - LayoutSVGRect {rect} at (218,204) size 14x57 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.50]}] [x=218.00] [y=204.00] [width=14.00] [height=57.00] - LayoutSVGText {text} at (222.50,256) size 5x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (222.50,256) size 5x12 - chunk 1 (middle anchor) text run 1 at (222.50,266.00) startOffset 0 endOffset 1 width 5.00: "9" - LayoutSVGRect {rect} at (232,204) size 14x57 [fill={[type=SOLID] [color=#008000] [opacity=0.50]}] [x=232.00] [y=204.00] [width=14.00] [height=57.00] - LayoutSVGText {text} at (234,256) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (234,256) size 10x12 - chunk 1 (middle anchor) text run 1 at (234.00,266.00) startOffset 0 endOffset 2 width 10.00: "10" - LayoutSVGRect {rect} at (246,204) size 11x57 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=246.00] [y=204.00] [width=11.00] [height=57.00] - LayoutSVGText {text} at (246.67,256) size 9.63x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (246.67,256) size 9.63x12 - chunk 1 (middle anchor) text run 1 at (246.69,266.00) startOffset 0 endOffset 2 width 9.63: "11" - LayoutSVGRect {rect} at (257,204) size 14x57 [fill={[type=SOLID] [color=#4B0082] [opacity=0.50]}] [x=257.00] [y=204.00] [width=14.00] [height=57.00] - LayoutSVGText {text} at (259,256) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (259,256) size 10x12 - chunk 1 (middle anchor) text run 1 at (259.00,266.00) startOffset 0 endOffset 2 width 10.00: "12" - LayoutSVGRect {rect} at (271,204) size 13.55x57 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.50]}] [x=271.00] [y=204.00] [width=13.55] [height=57.00] - LayoutSVGText {text} at (272.77,256) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (272.77,256) size 10x12 - chunk 1 (middle anchor) text run 1 at (272.77,266.00) startOffset 0 endOffset 2 width 10.00: "13" - LayoutSVGRect {rect} at (284.55,204) size 13.55x57 [fill={[type=SOLID] [color=#FF0000] [opacity=0.50]}] [x=284.55] [y=204.00] [width=13.55] [height=57.00] - LayoutSVGText {text} at (286.31,256) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (286.31,256) size 10x12 - chunk 1 (middle anchor) text run 1 at (286.32,266.00) startOffset 0 endOffset 2 width 10.00: "14" - LayoutSVGRect {rect} at (298.10,204) size 11x57 [fill={[type=SOLID] [color=#FFA500] [opacity=0.50]}] [x=298.10] [y=204.00] [width=11.00] [height=57.00] - LayoutSVGText {text} at (298.59,256) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (298.59,256) size 10x12 - chunk 1 (middle anchor) text run 1 at (298.60,266.00) startOffset 0 endOffset 2 width 10.00: "15" - LayoutSVGRect {rect} at (309.10,204) size 14x57 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.50]}] [x=309.10] [y=204.00] [width=14.00] [height=57.00] - LayoutSVGText {text} at (311.09,256) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (311.09,256) size 10x12 - chunk 1 (middle anchor) text run 1 at (311.10,266.00) startOffset 0 endOffset 2 width 10.00: "16" - LayoutSVGRect {rect} at (323.10,204) size 28x57 [fill={[type=SOLID] [color=#008000] [opacity=0.50]}] [x=323.10] [y=204.00] [width=28.00] [height=57.00] - LayoutSVGText {text} at (332.09,256) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (332.09,256) size 10x12 - chunk 1 (middle anchor) text run 1 at (332.10,266.00) startOffset 0 endOffset 2 width 10.00: "17" - LayoutSVGRect {rect} at (351.10,204) size 28x57 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=351.10] [y=204.00] [width=28.00] [height=57.00] - LayoutSVGText {text} at (360.09,256) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (360.09,256) size 10x12 - chunk 1 (middle anchor) text run 1 at (360.10,266.00) startOffset 0 endOffset 2 width 10.00: "18" - LayoutSVGRect {rect} at (379.10,204) size 25x57 [fill={[type=SOLID] [color=#4B0082] [opacity=0.50]}] [x=379.10] [y=204.00] [width=25.00] [height=57.00] - LayoutSVGText {text} at (386.59,256) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (386.59,256) size 10x12 - chunk 1 (middle anchor) text run 1 at (386.60,266.00) startOffset 0 endOffset 2 width 10.00: "19" - LayoutSVGRect {rect} at (404.10,204) size 13.55x57 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.50]}] [x=404.10] [y=204.00] [width=13.55] [height=57.00] - LayoutSVGText {text} at (405.86,256) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (405.86,256) size 10x12 - chunk 1 (middle anchor) text run 1 at (405.87,266.00) startOffset 0 endOffset 2 width 10.00: "20" - LayoutSVGRect {rect} at (417.65,204) size 13.55x57 [fill={[type=SOLID] [color=#FF0000] [opacity=0.50]}] [x=417.65] [y=204.00] [width=13.55] [height=57.00] - LayoutSVGText {text} at (419.41,256) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (419.41,256) size 10x12 - chunk 1 (middle anchor) text run 1 at (419.42,266.00) startOffset 0 endOffset 2 width 10.00: "21" - LayoutSVGRect {rect} at (431.19,204) size 11x57 [fill={[type=SOLID] [color=#FFA500] [opacity=0.50]}] [x=431.19] [y=204.00] [width=11.00] [height=57.00] - LayoutSVGText {text} at (431.69,256) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (431.69,256) size 10x12 - chunk 1 (middle anchor) text run 1 at (431.69,266.00) startOffset 0 endOffset 2 width 10.00: "22" - LayoutSVGRect {rect} at (442.19,204) size 28x57 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.50]}] [x=442.19] [y=204.00] [width=28.00] [height=57.00] - LayoutSVGText {text} at (451.19,256) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (451.19,256) size 10x12 - chunk 1 (middle anchor) text run 1 at (451.19,266.00) startOffset 0 endOffset 2 width 10.00: "23" - LayoutSVGRect {rect} at (470.19,204) size 28x57 [fill={[type=SOLID] [color=#008000] [opacity=0.50]}] [x=470.19] [y=204.00] [width=28.00] [height=57.00] - LayoutSVGText {text} at (479.19,256) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (479.19,256) size 10x12 - chunk 1 (middle anchor) text run 1 at (479.19,266.00) startOffset 0 endOffset 2 width 10.00: "24" - LayoutSVGRect {rect} at (498.19,204) size 14x57 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=498.19] [y=204.00] [width=14.00] [height=57.00] - LayoutSVGText {text} at (500.19,256) size 10x12 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (500.19,256) size 10x12 - chunk 1 (middle anchor) text run 1 at (500.19,266.00) startOffset 0 endOffset 2 width 10.00: "25" + LayoutSVGRect {rect} at (95,204) size 15x57 [fill={[type=SOLID] [color=#008000] [opacity=0.50]}] [x=95.00] [y=204.00] [width=15.00] [height=57.00] + LayoutSVGText {text} at (100,256) size 5x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (100,256) size 5x12 + chunk 1 (middle anchor) text run 1 at (100.00,266.00) startOffset 0 endOffset 1 width 5.00: "3" + LayoutSVGRect {rect} at (110,204) size 15x57 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=110.00] [y=204.00] [width=15.00] [height=57.00] + LayoutSVGText {text} at (115,256) size 5x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (115,256) size 5x12 + chunk 1 (middle anchor) text run 1 at (115.00,266.00) startOffset 0 endOffset 1 width 5.00: "4" + LayoutSVGRect {rect} at (125,204) size 28x57 [fill={[type=SOLID] [color=#4B0082] [opacity=0.50]}] [x=125.00] [y=204.00] [width=28.00] [height=57.00] + LayoutSVGText {text} at (136.50,256) size 5x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (136.50,256) size 5x12 + chunk 1 (middle anchor) text run 1 at (136.50,266.00) startOffset 0 endOffset 1 width 5.00: "5" + LayoutSVGRect {rect} at (153,204) size 28x57 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.50]}] [x=153.00] [y=204.00] [width=28.00] [height=57.00] + LayoutSVGText {text} at (164.50,256) size 5x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (164.50,256) size 5x12 + chunk 1 (middle anchor) text run 1 at (164.50,266.00) startOffset 0 endOffset 1 width 5.00: "6" + LayoutSVGRect {rect} at (181,204) size 28x57 [fill={[type=SOLID] [color=#FF0000] [opacity=0.50]}] [x=181.00] [y=204.00] [width=28.00] [height=57.00] + LayoutSVGText {text} at (192.50,256) size 5x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (192.50,256) size 5x12 + chunk 1 (middle anchor) text run 1 at (192.50,266.00) startOffset 0 endOffset 1 width 5.00: "7" + LayoutSVGRect {rect} at (209,204) size 14x57 [fill={[type=SOLID] [color=#FFA500] [opacity=0.50]}] [x=209.00] [y=204.00] [width=14.00] [height=57.00] + LayoutSVGText {text} at (213.50,256) size 5x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (213.50,256) size 5x12 + chunk 1 (middle anchor) text run 1 at (213.50,266.00) startOffset 0 endOffset 1 width 5.00: "8" + LayoutSVGRect {rect} at (223,204) size 14x57 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.50]}] [x=223.00] [y=204.00] [width=14.00] [height=57.00] + LayoutSVGText {text} at (227.50,256) size 5x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (227.50,256) size 5x12 + chunk 1 (middle anchor) text run 1 at (227.50,266.00) startOffset 0 endOffset 1 width 5.00: "9" + LayoutSVGRect {rect} at (237,204) size 14x57 [fill={[type=SOLID] [color=#008000] [opacity=0.50]}] [x=237.00] [y=204.00] [width=14.00] [height=57.00] + LayoutSVGText {text} at (239,256) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (239,256) size 10x12 + chunk 1 (middle anchor) text run 1 at (239.00,266.00) startOffset 0 endOffset 2 width 10.00: "10" + LayoutSVGRect {rect} at (251,204) size 11x57 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=251.00] [y=204.00] [width=11.00] [height=57.00] + LayoutSVGText {text} at (251.67,256) size 9.63x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (251.67,256) size 9.63x12 + chunk 1 (middle anchor) text run 1 at (251.69,266.00) startOffset 0 endOffset 2 width 9.63: "11" + LayoutSVGRect {rect} at (262,204) size 14x57 [fill={[type=SOLID] [color=#4B0082] [opacity=0.50]}] [x=262.00] [y=204.00] [width=14.00] [height=57.00] + LayoutSVGText {text} at (264,256) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (264,256) size 10x12 + chunk 1 (middle anchor) text run 1 at (264.00,266.00) startOffset 0 endOffset 2 width 10.00: "12" + LayoutSVGRect {rect} at (276,204) size 13.55x57 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.50]}] [x=276.00] [y=204.00] [width=13.55] [height=57.00] + LayoutSVGText {text} at (277.77,256) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (277.77,256) size 10x12 + chunk 1 (middle anchor) text run 1 at (277.77,266.00) startOffset 0 endOffset 2 width 10.00: "13" + LayoutSVGRect {rect} at (289.55,204) size 13.55x57 [fill={[type=SOLID] [color=#FF0000] [opacity=0.50]}] [x=289.55] [y=204.00] [width=13.55] [height=57.00] + LayoutSVGText {text} at (291.31,256) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (291.31,256) size 10x12 + chunk 1 (middle anchor) text run 1 at (291.32,266.00) startOffset 0 endOffset 2 width 10.00: "14" + LayoutSVGRect {rect} at (303.10,204) size 11x57 [fill={[type=SOLID] [color=#FFA500] [opacity=0.50]}] [x=303.10] [y=204.00] [width=11.00] [height=57.00] + LayoutSVGText {text} at (303.59,256) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (303.59,256) size 10x12 + chunk 1 (middle anchor) text run 1 at (303.60,266.00) startOffset 0 endOffset 2 width 10.00: "15" + LayoutSVGRect {rect} at (314.10,204) size 14x57 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.50]}] [x=314.10] [y=204.00] [width=14.00] [height=57.00] + LayoutSVGText {text} at (316.09,256) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (316.09,256) size 10x12 + chunk 1 (middle anchor) text run 1 at (316.10,266.00) startOffset 0 endOffset 2 width 10.00: "16" + LayoutSVGRect {rect} at (328.10,204) size 28x57 [fill={[type=SOLID] [color=#008000] [opacity=0.50]}] [x=328.10] [y=204.00] [width=28.00] [height=57.00] + LayoutSVGText {text} at (337.09,256) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (337.09,256) size 10x12 + chunk 1 (middle anchor) text run 1 at (337.10,266.00) startOffset 0 endOffset 2 width 10.00: "17" + LayoutSVGRect {rect} at (356.10,204) size 28x57 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=356.10] [y=204.00] [width=28.00] [height=57.00] + LayoutSVGText {text} at (365.09,256) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (365.09,256) size 10x12 + chunk 1 (middle anchor) text run 1 at (365.10,266.00) startOffset 0 endOffset 2 width 10.00: "18" + LayoutSVGRect {rect} at (384.10,204) size 25x57 [fill={[type=SOLID] [color=#4B0082] [opacity=0.50]}] [x=384.10] [y=204.00] [width=25.00] [height=57.00] + LayoutSVGText {text} at (391.59,256) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (391.59,256) size 10x12 + chunk 1 (middle anchor) text run 1 at (391.60,266.00) startOffset 0 endOffset 2 width 10.00: "19" + LayoutSVGRect {rect} at (409.10,204) size 13.55x57 [fill={[type=SOLID] [color=#EE82EE] [opacity=0.50]}] [x=409.10] [y=204.00] [width=13.55] [height=57.00] + LayoutSVGText {text} at (410.86,256) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (410.86,256) size 10x12 + chunk 1 (middle anchor) text run 1 at (410.87,266.00) startOffset 0 endOffset 2 width 10.00: "20" + LayoutSVGRect {rect} at (422.65,204) size 13.55x57 [fill={[type=SOLID] [color=#FF0000] [opacity=0.50]}] [x=422.65] [y=204.00] [width=13.55] [height=57.00] + LayoutSVGText {text} at (424.41,256) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (424.41,256) size 10x12 + chunk 1 (middle anchor) text run 1 at (424.42,266.00) startOffset 0 endOffset 2 width 10.00: "21" + LayoutSVGRect {rect} at (436.19,204) size 11x57 [fill={[type=SOLID] [color=#FFA500] [opacity=0.50]}] [x=436.19] [y=204.00] [width=11.00] [height=57.00] + LayoutSVGText {text} at (436.69,256) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (436.69,256) size 10x12 + chunk 1 (middle anchor) text run 1 at (436.69,266.00) startOffset 0 endOffset 2 width 10.00: "22" + LayoutSVGRect {rect} at (447.19,204) size 28x57 [fill={[type=SOLID] [color=#FFFF00] [opacity=0.50]}] [x=447.19] [y=204.00] [width=28.00] [height=57.00] + LayoutSVGText {text} at (456.19,256) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (456.19,256) size 10x12 + chunk 1 (middle anchor) text run 1 at (456.19,266.00) startOffset 0 endOffset 2 width 10.00: "23" + LayoutSVGRect {rect} at (475.19,204) size 28x57 [fill={[type=SOLID] [color=#008000] [opacity=0.50]}] [x=475.19] [y=204.00] [width=28.00] [height=57.00] + LayoutSVGText {text} at (484.19,256) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (484.19,256) size 10x12 + chunk 1 (middle anchor) text run 1 at (484.19,266.00) startOffset 0 endOffset 2 width 10.00: "24" + LayoutSVGRect {rect} at (503.19,204) size 14x57 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=503.19] [y=204.00] [width=14.00] [height=57.00] + LayoutSVGText {text} at (505.19,256) size 10x12 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (505.19,256) size 10x12 + chunk 1 (middle anchor) text run 1 at (505.19,266.00) startOffset 0 endOffset 2 width 10.00: "25" LayoutSVGRect {rect} at (46.06,341.87) size 30.23x72.67 [fill={[type=SOLID] [color=#FF0000] [opacity=0.50]}] [x=46.06] [y=341.87] [width=30.23] [height=72.67] LayoutSVGText {text} at (58.67,409.53) size 5x12 contains 1 chunk(s) LayoutSVGInlineText {#text} at (58.67,409.53) size 5x12 @@ -451,15 +451,15 @@ LayoutSVGText {text} at (-5,-5) size 10x12 contains 1 chunk(s) LayoutSVGInlineText {#text} at (-5,-5) size 10x12 chunk 1 (middle anchor) text run 1 at (-5.00,5.00) startOffset 0 endOffset 2 width 10.00: "32" - LayoutSVGText {text} at (25,-19.13) size 565x84.13 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (25,-19.13) size 565x84.13 - chunk 1 text run 1 at (25.00,50.00) startOffset 0 endOffset 26 width 565.00: "\x{F6}h \x{443}\x{30C}eah! fi ffi abcffidef" - LayoutSVGText {text} at (25,93.88) size 476.19x68.13 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (25,93.88) size 476.19x68.13 - chunk 1 text run 1 at (25.00,150.00) startOffset 0 endOffset 26 width 471.19: "\x{F6}h \x{443}\x{30C}eah! fi ffi abcffidef" - LayoutSVGText {text} at (25,189.88) size 489.19x71.13 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (25,189.88) size 489.19x71.13 - chunk 1 text run 1 at (25.00,250.00) startOffset 0 endOffset 26 width 487.19: "\x{F6}h \x{443}\x{30C}eah! fi ffi abcffidef" + LayoutSVGText {text} at (25,-6) size 569x71 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (25,-6) size 569x71 + chunk 1 text run 1 at (25.00,50.00) startOffset 0 endOffset 26 width 569.00: "\x{F6}h \x{443}\x{30C}eah! fi ffi abcffidef" + LayoutSVGText {text} at (25,105) size 481.19x57 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (25,105) size 481.19x57 + chunk 1 text run 1 at (25.00,150.00) startOffset 0 endOffset 26 width 476.19: "\x{F6}h \x{443}\x{30C}eah! fi ffi abcffidef" + LayoutSVGText {text} at (25,204) size 494.19x57 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (25,204) size 494.19x57 + chunk 1 text run 1 at (25.00,250.00) startOffset 0 endOffset 26 width 492.19: "\x{F6}h \x{443}\x{30C}eah! fi ffi abcffidef" LayoutSVGContainer {use} at (25,200) size 475x250 LayoutSVGPath {path} at (25,200) size 475x250 [stroke={[type=SOLID] [color=#000000] [stroke width=2.00]}] [fill={[type=SOLID] [color=#00000000]}] [data="M 25 400 C 300 400 200 200 500 450"] LayoutSVGText {text} at (46.05,268.09) size 485.56x190.20 contains 1 chunk(s)
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/non-bmp-positioning-lists-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/text/non-bmp-positioning-lists-expected.png index 3460be8..c5bddcc7 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/non-bmp-positioning-lists-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/non-bmp-positioning-lists-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/non-bmp-positioning-lists-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/text/non-bmp-positioning-lists-expected.txt deleted file mode 100644 index 8f34b03..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/non-bmp-positioning-lists-expected.txt +++ /dev/null
@@ -1,8 +0,0 @@ -layer at (0,0) size 800x600 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 800x600 - LayoutSVGRoot {svg} at (0,0) size 800x600 - LayoutSVGText {text} at (50,61) size 700x223 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (50,61) size 700x223 - chunk 1 text run 1 at (50.00,240.00) startOffset 0 endOffset 2 width 150.00: "\x{D835}\x{DC9E}" - chunk 1 text run 1 at (600.00,240.00) startOffset 0 endOffset 2 width 150.00: "\x{D835}\x{DC9E}"
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/surrogate-pair-queries-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/text/surrogate-pair-queries-expected.png index 9227961..edbd2d7 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/surrogate-pair-queries-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/surrogate-pair-queries-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/surrogate-pair-queries-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/text/surrogate-pair-queries-expected.txt index c9bda2d2..b03e023 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/surrogate-pair-queries-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/surrogate-pair-queries-expected.txt
@@ -69,14 +69,14 @@ LayoutSVGText {text} at (71,132) size 4x10 contains 1 chunk(s) LayoutSVGInlineText {#text} at (71,132) size 4x10 chunk 1 (middle anchor) text run 1 at (71.00,140.00) startOffset 0 endOffset 1 width 4.00: "3" - LayoutSVGRect {rect} at (78,86) size 8.50x49 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=78.00] [y=86.00] [width=8.50] [height=49.00] - LayoutSVGText {text} at (80.25,132) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (80.25,132) size 4x10 - chunk 1 (middle anchor) text run 1 at (80.25,140.00) startOffset 0 endOffset 1 width 4.00: "4" - LayoutSVGRect {rect} at (86.50,86) size 8.50x49 [fill={[type=SOLID] [color=#4B0082] [opacity=0.50]}] [x=86.50] [y=86.00] [width=8.50] [height=49.00] - LayoutSVGText {text} at (88.75,132) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (88.75,132) size 4x10 - chunk 1 (middle anchor) text run 1 at (88.75,140.00) startOffset 0 endOffset 1 width 4.00: "5" + LayoutSVGRect {rect} at (78,86) size 10.50x49 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=78.00] [y=86.00] [width=10.50] [height=49.00] + LayoutSVGText {text} at (81.25,132) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (81.25,132) size 4x10 + chunk 1 (middle anchor) text run 1 at (81.25,140.00) startOffset 0 endOffset 1 width 4.00: "4" + LayoutSVGRect {rect} at (88.50,86) size 10.50x49 [fill={[type=SOLID] [color=#4B0082] [opacity=0.50]}] [x=88.50] [y=86.00] [width=10.50] [height=49.00] + LayoutSVGText {text} at (91.75,132) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (91.75,132) size 4x10 + chunk 1 (middle anchor) text run 1 at (91.75,140.00) startOffset 0 endOffset 1 width 4.00: "5" LayoutSVGRect {rect} at (200,93) size 13.50x40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.50]}] [x=200.00] [y=93.00] [width=13.50] [height=40.00] LayoutSVGText {text} at (204.75,130) size 4x10 contains 1 chunk(s) LayoutSVGInlineText {#text} at (204.75,130) size 4x10 @@ -93,14 +93,14 @@ LayoutSVGText {text} at (229.50,130) size 4x10 contains 1 chunk(s) LayoutSVGInlineText {#text} at (229.50,130) size 4x10 chunk 1 (middle anchor) text run 1 at (229.50,138.00) startOffset 0 endOffset 1 width 4.00: "3" - LayoutSVGRect {rect} at (236,93) size 9x40 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=236.00] [y=93.00] [width=9.00] [height=40.00] - LayoutSVGText {text} at (238.50,130) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (238.50,130) size 4x10 - chunk 1 (middle anchor) text run 1 at (238.50,138.00) startOffset 0 endOffset 1 width 4.00: "4" - LayoutSVGRect {rect} at (245,93) size 9x40 [fill={[type=SOLID] [color=#4B0082] [opacity=0.50]}] [x=245.00] [y=93.00] [width=9.00] [height=40.00] - LayoutSVGText {text} at (247.50,130) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (247.50,130) size 4x10 - chunk 1 (middle anchor) text run 1 at (247.50,138.00) startOffset 0 endOffset 1 width 4.00: "5" + LayoutSVGRect {rect} at (236,93) size 10.50x40 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=236.00] [y=93.00] [width=10.50] [height=40.00] + LayoutSVGText {text} at (239.25,130) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (239.25,130) size 4x10 + chunk 1 (middle anchor) text run 1 at (239.25,138.00) startOffset 0 endOffset 1 width 4.00: "4" + LayoutSVGRect {rect} at (246.50,93) size 10.50x40 [fill={[type=SOLID] [color=#4B0082] [opacity=0.50]}] [x=246.50] [y=93.00] [width=10.50] [height=40.00] + LayoutSVGText {text} at (249.75,130) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (249.75,130) size 4x10 + chunk 1 (middle anchor) text run 1 at (249.75,138.00) startOffset 0 endOffset 1 width 4.00: "5" LayoutSVGRect {rect} at (350,93) size 13x40 [fill={[type=SOLID] [color=#FF0000] [opacity=0.50]}] [x=350.00] [y=93.00] [width=13.00] [height=40.00] LayoutSVGText {text} at (354.50,130) size 4x10 contains 1 chunk(s) LayoutSVGInlineText {#text} at (354.50,130) size 4x10 @@ -117,14 +117,14 @@ LayoutSVGText {text} at (379,130) size 4x10 contains 1 chunk(s) LayoutSVGInlineText {#text} at (379,130) size 4x10 chunk 1 (middle anchor) text run 1 at (379.00,138.00) startOffset 0 endOffset 1 width 4.00: "3" - LayoutSVGRect {rect} at (386,93) size 9x40 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=386.00] [y=93.00] [width=9.00] [height=40.00] - LayoutSVGText {text} at (388.50,130) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (388.50,130) size 4x10 - chunk 1 (middle anchor) text run 1 at (388.50,138.00) startOffset 0 endOffset 1 width 4.00: "4" - LayoutSVGRect {rect} at (395,93) size 9x40 [fill={[type=SOLID] [color=#4B0082] [opacity=0.50]}] [x=395.00] [y=93.00] [width=9.00] [height=40.00] - LayoutSVGText {text} at (397.50,130) size 4x10 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (397.50,130) size 4x10 - chunk 1 (middle anchor) text run 1 at (397.50,138.00) startOffset 0 endOffset 1 width 4.00: "5" + LayoutSVGRect {rect} at (386,93) size 10.50x40 [fill={[type=SOLID] [color=#0000FF] [opacity=0.50]}] [x=386.00] [y=93.00] [width=10.50] [height=40.00] + LayoutSVGText {text} at (389.25,130) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (389.25,130) size 4x10 + chunk 1 (middle anchor) text run 1 at (389.25,138.00) startOffset 0 endOffset 1 width 4.00: "4" + LayoutSVGRect {rect} at (396.50,93) size 10.50x40 [fill={[type=SOLID] [color=#4B0082] [opacity=0.50]}] [x=396.50] [y=93.00] [width=10.50] [height=40.00] + LayoutSVGText {text} at (399.75,130) size 4x10 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (399.75,130) size 4x10 + chunk 1 (middle anchor) text run 1 at (399.75,138.00) startOffset 0 endOffset 1 width 4.00: "5" LayoutSVGRect {rect} at (132,211) size 18x49 [fill={[type=SOLID] [color=#FF0000] [opacity=0.50]}] [x=132.00] [y=211.00] [width=18.00] [height=49.00] LayoutSVGText {text} at (139,257) size 4x10 contains 1 chunk(s) LayoutSVGInlineText {#text} at (139,257) size 4x10 @@ -302,15 +302,15 @@ LayoutSVGText {text} at (350,18) size 52x40 contains 1 chunk(s) LayoutSVGInlineText {#text} at (350,18) size 52x40 chunk 1 text run 1 at (350.00,50.00) startOffset 0 endOffset 4 width 52.00: "\x{D83C}\x{DFB6}\x{D83C}\x{DFB6}" - LayoutSVGText {text} at (50,66.81) size 45x68.19 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (50,66.81) size 45x68.19 - chunk 1 text run 1 at (50.00,125.00) startOffset 0 endOffset 6 width 45.00: "\x{D801}\x{DC37}\x{30C} v\x{30C}" - LayoutSVGText {text} at (200,78.81) size 54x54.19 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (200,78.81) size 54x54.19 - chunk 1 text run 1 at (200.00,125.00) startOffset 0 endOffset 6 width 54.00: "\x{D801}\x{DC37}\x{30C} v\x{30C}" - LayoutSVGText {text} at (350,78.81) size 54x54.19 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (350,78.81) size 54x54.19 - chunk 1 text run 1 at (350.00,125.00) startOffset 0 endOffset 6 width 54.00: "\x{D801}\x{DC37}\x{30C} v\x{30C}" + LayoutSVGText {text} at (50,66.81) size 49x68.19 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (50,66.81) size 49x68.19 + chunk 1 text run 1 at (50.00,125.00) startOffset 0 endOffset 6 width 49.00: "\x{D801}\x{DC37}\x{30C} v\x{30C}" + LayoutSVGText {text} at (200,78.81) size 57x54.19 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (200,78.81) size 57x54.19 + chunk 1 text run 1 at (200.00,125.00) startOffset 0 endOffset 6 width 57.00: "\x{D801}\x{DC37}\x{30C} v\x{30C}" + LayoutSVGText {text} at (350,78.81) size 57x54.19 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (350,78.81) size 57x54.19 + chunk 1 text run 1 at (350.00,125.00) startOffset 0 endOffset 6 width 57.00: "\x{D801}\x{DC37}\x{30C} v\x{30C}" LayoutSVGText {text} at (96,191.81) size 54x68.19 contains 1 chunk(s) LayoutSVGInlineText {#text} at (96,191.81) size 54x68.19 chunk 1 text run 1 at (96.00,250.00) startOffset 0 endOffset 2 width 18.00 RTL: "\x{D83C}\x{DFB6}"
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/text-selection-fonts-01-t-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/text/text-selection-fonts-01-t-expected.png index 38875879..60d09da0 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/text-selection-fonts-01-t-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/text-selection-fonts-01-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/text-selection-fonts-01-t-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/text/text-selection-fonts-01-t-expected.txt index 0577b04..0b3b69a 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/text-selection-fonts-01-t-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/text-selection-fonts-01-t-expected.txt
@@ -10,8 +10,8 @@ LayoutSVGText {text} at (19.39,138.41) size 232.80x27 contains 1 chunk(s) LayoutSVGInlineText {#text} at (19.39,138.41) size 232.80x27 chunk 1 text run 1 at (20.00,160.00) startOffset 0 endOffset 20 width 232.20: "A sans-serif face \x{753B}\x{50CF}" - LayoutSVGText {text} at (20,220.20) size 292.80x26.39 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (20,220.20) size 292.80x26.39 + LayoutSVGText {text} at (20,219.59) size 292.80x27 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (20,219.59) size 292.80x27 chunk 1 text run 1 at (20.00,240.00) startOffset 0 endOffset 19 width 292.80: "A mono (iW) face \x{753B}\x{50CF}" LayoutSVGContainer {g} at (39.39,28.41) size 293.41x188.19 LayoutSVGText {text} at (40,28.41) size 189x27.59 contains 1 chunk(s) @@ -20,8 +20,8 @@ LayoutSVGText {text} at (39.39,108.41) size 232.80x27 contains 1 chunk(s) LayoutSVGInlineText {#text} at (39.39,108.41) size 232.80x27 chunk 1 text run 1 at (40.00,130.00) startOffset 0 endOffset 20 width 232.20: "A sans-serif face \x{753B}\x{50CF}" - LayoutSVGText {text} at (40,190.20) size 292.80x26.39 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (40,190.20) size 292.80x26.39 + LayoutSVGText {text} at (40,189.59) size 292.80x27 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (40,189.59) size 292.80x27 chunk 1 text run 1 at (40.00,210.00) startOffset 0 endOffset 19 width 292.80: "A mono (iW) face \x{753B}\x{50CF}" LayoutSVGText {text} at (40,268.41) size 223.19x27.59 contains 1 chunk(s) LayoutSVGInlineText {#text} at (40,268.41) size 223.19x27.59
diff --git a/third_party/WebKit/LayoutTests/platform/mac/hdr/color-jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/mac/hdr/color-jpeg-with-color-profile-expected.png new file mode 100644 index 0000000..dc798e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac/hdr/color-jpeg-with-color-profile-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/hdr/color-profile-video-expected.png b/third_party/WebKit/LayoutTests/platform/mac/hdr/color-profile-video-expected.png new file mode 100644 index 0000000..85f7439 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac/hdr/color-profile-video-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/hdr/video-canvas-alpha-expected.png b/third_party/WebKit/LayoutTests/platform/mac/hdr/video-canvas-alpha-expected.png new file mode 100644 index 0000000..1d92b9de --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac/hdr/video-canvas-alpha-expected.png Binary files differ
diff --git a/third_party/WebKit/Source/core/css/CSSComputedStyleDeclaration.cpp b/third_party/WebKit/Source/core/css/CSSComputedStyleDeclaration.cpp index 89709fa..1ce40b1 100644 --- a/third_party/WebKit/Source/core/css/CSSComputedStyleDeclaration.cpp +++ b/third_party/WebKit/Source/core/css/CSSComputedStyleDeclaration.cpp
@@ -357,6 +357,17 @@ return node_.Get(); } +LayoutObject* CSSComputedStyleDeclaration::StyledLayoutObject() const { + auto* node = StyledNode(); + if (!node) + return nullptr; + + if (pseudo_element_specifier_ != kPseudoIdNone && node == node_.Get()) + return nullptr; + + return node->GetLayoutObject(); +} + const CSSValue* CSSComputedStyleDeclaration::GetPropertyCSSValue( AtomicString custom_property_name) const { Node* styled_node = StyledNode(); @@ -395,7 +406,7 @@ // The style recalc could have caused the styled node to be discarded or // replaced if it was a PseudoElement so we need to update it. styled_node = StyledNode(); - LayoutObject* layout_object = styled_node->GetLayoutObject(); + LayoutObject* layout_object = StyledLayoutObject(); const ComputedStyle* style = ComputeComputedStyle(); @@ -409,7 +420,7 @@ document.UpdateStyleAndLayoutIgnorePendingStylesheetsForNode(styled_node); styled_node = StyledNode(); style = ComputeComputedStyle(); - layout_object = styled_node->GetLayoutObject(); + layout_object = StyledLayoutObject(); } if (!style)
diff --git a/third_party/WebKit/Source/core/css/CSSComputedStyleDeclaration.h b/third_party/WebKit/Source/core/css/CSSComputedStyleDeclaration.h index 7a9e949..21bcd09 100644 --- a/third_party/WebKit/Source/core/css/CSSComputedStyleDeclaration.h +++ b/third_party/WebKit/Source/core/css/CSSComputedStyleDeclaration.h
@@ -34,6 +34,7 @@ class CSSVariableData; class ExceptionState; +class LayoutObject; class MutableStylePropertySet; class Node; class ComputedStyle; @@ -84,6 +85,10 @@ // fix that. Node* StyledNode() const; + // The styled layout object is the layout object corresponding to the node + // being queried, if any. + LayoutObject* StyledLayoutObject() const; + // CSSOM functions. CSSRule* parentRule() const override; const ComputedStyle* ComputeComputedStyle() const;
diff --git a/third_party/WebKit/Source/core/dom/AXObjectCache.cpp b/third_party/WebKit/Source/core/dom/AXObjectCache.cpp index d7ad4864..47c3e00 100644 --- a/third_party/WebKit/Source/core/dom/AXObjectCache.cpp +++ b/third_party/WebKit/Source/core/dom/AXObjectCache.cpp
@@ -54,8 +54,7 @@ return create_function_(document); } -AXObjectCache::AXObjectCache(Document& document) - : ContextLifecycleObserver(document.GetExecutionContext()) {} +AXObjectCache::AXObjectCache() {} AXObjectCache::~AXObjectCache() {} @@ -166,10 +165,6 @@ return false; } -DEFINE_TRACE(AXObjectCache) { - ContextLifecycleObserver::Trace(visitor); -} - STATIC_ASSERT_ENUM(kWebAXEventActiveDescendantChanged, AXObjectCache::kAXActiveDescendantChanged); STATIC_ASSERT_ENUM(kWebAXEventAlert, AXObjectCache::kAXAlert);
diff --git a/third_party/WebKit/Source/core/dom/AXObjectCache.h b/third_party/WebKit/Source/core/dom/AXObjectCache.h index 5f1a606c..e4d3f8d3 100644 --- a/third_party/WebKit/Source/core/dom/AXObjectCache.h +++ b/third_party/WebKit/Source/core/dom/AXObjectCache.h
@@ -44,16 +44,14 @@ class LocalFrameView; class CORE_EXPORT AXObjectCache - : public GarbageCollectedFinalized<AXObjectCache>, - public ContextLifecycleObserver { + : public GarbageCollectedFinalized<AXObjectCache> { WTF_MAKE_NONCOPYABLE(AXObjectCache); - USING_GARBAGE_COLLECTED_MIXIN(AXObjectCache); public: static AXObjectCache* Create(Document&); virtual ~AXObjectCache(); - DECLARE_VIRTUAL_TRACE(); + DEFINE_INLINE_VIRTUAL_TRACE() {} enum AXNotification { kAXActiveDescendantChanged, @@ -158,7 +156,7 @@ static bool IsInsideFocusableElementOrARIAWidget(const Node&); protected: - AXObjectCache(Document&); + AXObjectCache(); private: static AXObjectCacheCreateFunction create_function_;
diff --git a/third_party/WebKit/Source/core/dom/AXObjectCacheBase.cpp b/third_party/WebKit/Source/core/dom/AXObjectCacheBase.cpp index 0cb3def..3f1c1bd 100644 --- a/third_party/WebKit/Source/core/dom/AXObjectCacheBase.cpp +++ b/third_party/WebKit/Source/core/dom/AXObjectCacheBase.cpp
@@ -11,7 +11,6 @@ AXObjectCacheBase::~AXObjectCacheBase() {} -AXObjectCacheBase::AXObjectCacheBase(Document& document) - : AXObjectCache(document) {} +AXObjectCacheBase::AXObjectCacheBase() {} } // namespace blink
diff --git a/third_party/WebKit/Source/core/dom/AXObjectCacheBase.h b/third_party/WebKit/Source/core/dom/AXObjectCacheBase.h index f22da5f..f1c119f 100644 --- a/third_party/WebKit/Source/core/dom/AXObjectCacheBase.h +++ b/third_party/WebKit/Source/core/dom/AXObjectCacheBase.h
@@ -30,7 +30,7 @@ virtual AXObject* GetOrCreate(LayoutObject*) = 0; protected: - AXObjectCacheBase(Document&); + AXObjectCacheBase(); }; // This is the only subclass of AXObjectCache.
diff --git a/third_party/WebKit/Source/core/editing/VisibleSelection.cpp b/third_party/WebKit/Source/core/editing/VisibleSelection.cpp index e82dce5..d6ef164 100644 --- a/third_party/WebKit/Source/core/editing/VisibleSelection.cpp +++ b/third_party/WebKit/Source/core/editing/VisibleSelection.cpp
@@ -801,11 +801,6 @@ } template <typename Strategy> -bool VisibleSelectionTemplate<Strategy>::IsContentRichlyEditable() const { - return IsRichlyEditablePosition(ToPositionInDOMTree(Start())); -} - -template <typename Strategy> Element* VisibleSelectionTemplate<Strategy>::RootEditableElement() const { return RootEditableElementOf(Start()); }
diff --git a/third_party/WebKit/Source/core/editing/VisibleSelection.h b/third_party/WebKit/Source/core/editing/VisibleSelection.h index 391f42e4..f02f605 100644 --- a/third_party/WebKit/Source/core/editing/VisibleSelection.h +++ b/third_party/WebKit/Source/core/editing/VisibleSelection.h
@@ -114,7 +114,6 @@ Element* RootEditableElement() const; bool IsContentEditable() const; - bool IsContentRichlyEditable() const; bool IsValidFor(const Document&) const;
diff --git a/third_party/WebKit/Source/core/exported/WebFrameTest.cpp b/third_party/WebKit/Source/core/exported/WebFrameTest.cpp index ed0120c..354a374 100644 --- a/third_party/WebKit/Source/core/exported/WebFrameTest.cpp +++ b/third_party/WebKit/Source/core/exported/WebFrameTest.cpp
@@ -103,7 +103,6 @@ #include "platform/bindings/Microtask.h" #include "platform/geometry/FloatRect.h" #include "platform/graphics/GraphicsLayer.h" -#include "platform/graphics/compositing/PaintArtifactCompositor.h" #include "platform/loader/fetch/FetchParameters.h" #include "platform/loader/fetch/MemoryCache.h" #include "platform/loader/fetch/ResourceError.h" @@ -11679,6 +11678,7 @@ tester.ExpectTotalCount(histogramName, 3); } +// TODO(pdr): Create a version of this test for SPV2 (crbug.com.758028). TEST_P(ParameterizedWebFrameTest, DidScrollCallbackAfterScrollableAreaChanges) { FrameTestHelpers::WebViewHelper web_view_helper; web_view_helper.Initialize(); @@ -11713,8 +11713,6 @@ scrollable_area->LayerForScrolling()->PlatformLayer(); EXPECT_NE(nullptr, web_scroll_layer); - // Ensure a synthetic impl-side scroll offset propagates to the scrollable - // area using the DidScroll callback. EXPECT_EQ(ScrollOffset(), scrollable_area->GetScrollOffset()); web_scroll_layer->SetScrollOffsetFromImplSideForTesting( gfx::ScrollOffset(0, 1)); @@ -11739,124 +11737,4 @@ gfx::ScrollOffset(0, 3)); } -class SlimmingPaintWebFrameTest - : public ::testing::WithParamInterface<TestParamRootLayerScrolling>, - private ScopedRootLayerScrollingForTest, - private ScopedSlimmingPaintV2ForTest, - public WebFrameTest { - public: - SlimmingPaintWebFrameTest() - : ScopedRootLayerScrollingForTest(GetParam()), - ScopedSlimmingPaintV2ForTest(true) {} - - void SetUp() override { - web_view_helper_ = WTF::MakeUnique<FrameTestHelpers::WebViewHelper>(); - web_view_helper_->Initialize(nullptr, &web_view_client_, nullptr, - &ConfigureCompositingWebView); - web_view_helper_->Resize(WebSize(200, 200)); - - // The paint artifact compositor should have been created as part of the - // web view helper setup. - DCHECK(paint_artifact_compositor()); - paint_artifact_compositor()->EnableExtraDataForTesting(); - } - - WebLocalFrame* LocalMainFrame() { return web_view_helper_->LocalMainFrame(); } - - WebViewImpl* WebView() { return web_view_helper_->WebView(); } - - size_t ContentLayerCount() { - return paint_artifact_compositor() - ->GetExtraDataForTesting() - ->content_layers.size(); - } - - size_t ScrollHitTestLayerCount() { - return paint_artifact_compositor() - ->GetExtraDataForTesting() - ->scroll_hit_test_layers.size(); - } - - std::unique_ptr<WebLayer> ContentLayerAt(unsigned index) { - return paint_artifact_compositor() - ->GetExtraDataForTesting() - ->ContentWebLayerAt(index); - } - - std::unique_ptr<WebLayer> ScrollHitTestLayerAt(unsigned index) { - return paint_artifact_compositor() - ->GetExtraDataForTesting() - ->ScrollHitTestWebLayerAt(index); - } - - private: - PaintArtifactCompositor* paint_artifact_compositor() { - auto* frame_view = web_view_helper_->LocalMainFrame()->GetFrameView(); - return frame_view->GetPaintArtifactCompositorForTesting(); - } - FrameTestHelpers::TestWebViewClient web_view_client_; - std::unique_ptr<FrameTestHelpers::WebViewHelper> web_view_helper_; -}; - -INSTANTIATE_TEST_CASE_P(All, SlimmingPaintWebFrameTest, ::testing::Bool()); - -TEST_P(SlimmingPaintWebFrameTest, DidScrollCallbackAfterScrollableAreaChanges) { - DCHECK(RuntimeEnabledFeatures::SlimmingPaintV2Enabled()); - - InitializeWithHTML(*WebView()->MainFrameImpl()->GetFrame(), - "<style>" - " #scrollable {" - " height: 100px;" - " width: 100px;" - " overflow: scroll;" - " will-change: transform;" - " }" - " #forceScroll { height: 120px; width: 50px; }" - "</style>" - "<div id='scrollable'>" - " <div id='forceScroll'></div>" - "</div>"); - - WebView()->UpdateAllLifecyclePhases(); - - Document* document = WebView()->MainFrameImpl()->GetFrame()->GetDocument(); - Element* scrollable = document->getElementById("scrollable"); - - auto* scrollable_area = - ToLayoutBox(scrollable->GetLayoutObject())->GetScrollableArea(); - EXPECT_NE(nullptr, scrollable_area); - - EXPECT_EQ(ContentLayerCount(), 2u); - EXPECT_EQ(ScrollHitTestLayerCount(), 1u); - - // Ensure a synthetic impl-side scroll offset propagates to the scrollable - // area using the DidScroll callback. - EXPECT_EQ(ScrollOffset(), scrollable_area->GetScrollOffset()); - ScrollHitTestLayerAt(0)->SetScrollOffsetFromImplSideForTesting( - gfx::ScrollOffset(0, 1)); - WebView()->UpdateAllLifecyclePhases(); - EXPECT_EQ(ScrollOffset(0, 1), scrollable_area->GetScrollOffset()); - - // Make the scrollable area non-scrollable. - scrollable->setAttribute(HTMLNames::styleAttr, "overflow: visible"); - - // Update layout without updating compositing state. - LocalMainFrame()->ExecuteScript( - WebScriptSource("var forceLayoutFromScript = scrollable.offsetTop;")); - EXPECT_EQ(document->Lifecycle().GetState(), DocumentLifecycle::kLayoutClean); - - EXPECT_EQ(nullptr, - ToLayoutBox(scrollable->GetLayoutObject())->GetScrollableArea()); - - // The web scroll layer has not been deleted yet and we should be able to - // apply impl-side offsets without crashing. - EXPECT_EQ(ScrollHitTestLayerCount(), 1u); - ScrollHitTestLayerAt(0)->SetScrollOffsetFromImplSideForTesting( - gfx::ScrollOffset(0, 3)); - - WebView()->UpdateAllLifecyclePhases(); - EXPECT_EQ(ContentLayerCount(), 1u); - EXPECT_EQ(ScrollHitTestLayerCount(), 0u); -} - } // namespace blink
diff --git a/third_party/WebKit/Source/core/frame/LocalFrameView.h b/third_party/WebKit/Source/core/frame/LocalFrameView.h index 471714f..4b5997d3 100644 --- a/third_party/WebKit/Source/core/frame/LocalFrameView.h +++ b/third_party/WebKit/Source/core/frame/LocalFrameView.h
@@ -853,11 +853,6 @@ // LocalFrameView (or possibly the LocalFrameView itself). ScrollableArea* ScrollableAreaWithElementId(const CompositorElementId&); - PaintArtifactCompositor* GetPaintArtifactCompositorForTesting() { - DCHECK(RuntimeEnabledFeatures::SlimmingPaintV2Enabled()); - return paint_artifact_compositor_.get(); - } - protected: // Scroll the content via the compositor. bool ScrollContentsFastPath(const IntSize& scroll_delta);
diff --git a/third_party/WebKit/Source/core/frame/PerformanceMonitor.cpp b/third_party/WebKit/Source/core/frame/PerformanceMonitor.cpp index b84cfcd0..9d003b9 100644 --- a/third_party/WebKit/Source/core/frame/PerformanceMonitor.cpp +++ b/third_party/WebKit/Source/core/frame/PerformanceMonitor.cpp
@@ -175,10 +175,23 @@ void PerformanceMonitor::Will(const probe::ExecuteScript& probe) { WillExecuteScript(probe.context); + + probe.CaptureStartTime(); } void PerformanceMonitor::Did(const probe::ExecuteScript& probe) { DidExecuteScript(); + + if (!enabled_ || !thresholds_[kLongTask]) + return; + + if (probe.Duration() <= kLongTaskSubTaskThresholdInSeconds) + return; + std::unique_ptr<SubTaskAttribution> sub_task_attribution = + SubTaskAttribution::Create(String("script-run"), + probe.context->Url().GetString(), + probe.CaptureStartTime(), probe.Duration()); + sub_task_attributions_.push_back(std::move(sub_task_attribution)); } void PerformanceMonitor::Will(const probe::CallFunction& probe) {
diff --git a/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp b/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp index 50ea215..39ab2329a 100644 --- a/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
@@ -1346,21 +1346,11 @@ ScriptState* script_state, EventTarget& event_target, Optional<IntRect> crop_rect, - const ImageBitmapOptions& options, - ExceptionState& exception_state) { + const ImageBitmapOptions& options) { DCHECK(event_target.ToLocalDOMWindow()); - if ((crop_rect && - !ImageBitmap::IsSourceSizeValid(crop_rect->Width(), crop_rect->Height(), - exception_state)) || - !ImageBitmap::IsSourceSizeValid(BitmapSourceSize().Width(), - BitmapSourceSize().Height(), - exception_state)) - return ScriptPromise(); - if (!ImageBitmap::IsResizeOptionValid(options, exception_state)) - return ScriptPromise(); + return ImageBitmapSource::FulfillImageBitmap( - script_state, - IsPaintable() ? ImageBitmap::Create(this, crop_rect, options) : nullptr); + script_state, ImageBitmap::Create(this, crop_rect, options)); } void HTMLCanvasElement::SetPlaceholderFrame(
diff --git a/third_party/WebKit/Source/core/html/HTMLCanvasElement.h b/third_party/WebKit/Source/core/html/HTMLCanvasElement.h index aabbe4c6..92f54b88 100644 --- a/third_party/WebKit/Source/core/html/HTMLCanvasElement.h +++ b/third_party/WebKit/Source/core/html/HTMLCanvasElement.h
@@ -214,8 +214,7 @@ ScriptPromise CreateImageBitmap(ScriptState*, EventTarget&, Optional<IntRect> crop_rect, - const ImageBitmapOptions&, - ExceptionState&) override; + const ImageBitmapOptions&) override; // OffscreenCanvasPlaceholder implementation. void SetPlaceholderFrame(RefPtr<StaticBitmapImage>,
diff --git a/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp b/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp index 76e868b..0ea16cb 100644 --- a/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp
@@ -26,12 +26,11 @@ #include "core/html/HTMLVideoElement.h" #include <memory> -#include "bindings/core/v8/ExceptionState.h" #include "core/CSSPropertyNames.h" #include "core/HTMLNames.h" #include "core/dom/Attribute.h" +#include "core/dom/DOMException.h" #include "core/dom/Document.h" -#include "core/dom/ExceptionCode.h" #include "core/dom/ShadowRoot.h" #include "core/dom/UserGestureIndicator.h" #include "core/frame/LocalDOMWindow.h" @@ -481,29 +480,22 @@ ScriptState* script_state, EventTarget& event_target, Optional<IntRect> crop_rect, - const ImageBitmapOptions& options, - ExceptionState& exception_state) { + const ImageBitmapOptions& options) { DCHECK(event_target.ToLocalDOMWindow()); if (getNetworkState() == HTMLMediaElement::kNetworkEmpty) { - exception_state.ThrowDOMException( - kInvalidStateError, "The provided element has not retrieved data."); - return ScriptPromise(); + return ScriptPromise::RejectWithDOMException( + script_state, + DOMException::Create(kInvalidStateError, + "The provided element has not retrieved data.")); } if (getReadyState() <= HTMLMediaElement::kHaveMetadata) { - exception_state.ThrowDOMException( - kInvalidStateError, - "The provided element's player has no current data."); - return ScriptPromise(); + return ScriptPromise::RejectWithDOMException( + script_state, + DOMException::Create( + kInvalidStateError, + "The provided element's player has no current data.")); } - if ((crop_rect && - !ImageBitmap::IsSourceSizeValid(crop_rect->Width(), crop_rect->Height(), - exception_state)) || - !ImageBitmap::IsSourceSizeValid(BitmapSourceSize().Width(), - BitmapSourceSize().Height(), - exception_state)) - return ScriptPromise(); - if (!ImageBitmap::IsResizeOptionValid(options, exception_state)) - return ScriptPromise(); + return ImageBitmapSource::FulfillImageBitmap( script_state, ImageBitmap::Create( this, crop_rect,
diff --git a/third_party/WebKit/Source/core/html/HTMLVideoElement.h b/third_party/WebKit/Source/core/html/HTMLVideoElement.h index e399d28..40f90b77 100644 --- a/third_party/WebKit/Source/core/html/HTMLVideoElement.h +++ b/third_party/WebKit/Source/core/html/HTMLVideoElement.h
@@ -40,7 +40,6 @@ } namespace blink { -class ExceptionState; class ImageBitmapOptions; class MediaCustomControlsFullscreenDetector; class MediaRemotingInterstitial; @@ -134,8 +133,7 @@ ScriptPromise CreateImageBitmap(ScriptState*, EventTarget&, Optional<IntRect> crop_rect, - const ImageBitmapOptions&, - ExceptionState&) override; + const ImageBitmapOptions&) override; // WebMediaPlayerClient implementation. void OnBecamePersistentVideo(bool) final;
diff --git a/third_party/WebKit/Source/core/html/ImageData.cpp b/third_party/WebKit/Source/core/html/ImageData.cpp index 410857c..66d63a1c 100644 --- a/third_party/WebKit/Source/core/html/ImageData.cpp +++ b/third_party/WebKit/Source/core/html/ImageData.cpp
@@ -28,9 +28,8 @@ #include "core/html/ImageData.h" -#include "bindings/core/v8/ExceptionState.h" #include "bindings/core/v8/V8Uint8ClampedArray.h" -#include "core/dom/ExceptionCode.h" +#include "core/dom/DOMException.h" #include "core/imagebitmap/ImageBitmap.h" #include "core/imagebitmap/ImageBitmapOptions.h" #include "platform/RuntimeEnabledFeatures.h" @@ -463,22 +462,13 @@ ScriptPromise ImageData::CreateImageBitmap(ScriptState* script_state, EventTarget& event_target, Optional<IntRect> crop_rect, - const ImageBitmapOptions& options, - ExceptionState& exception_state) { - if ((crop_rect && - !ImageBitmap::IsSourceSizeValid(crop_rect->Width(), crop_rect->Height(), - exception_state)) || - !ImageBitmap::IsSourceSizeValid(BitmapSourceSize().Width(), - BitmapSourceSize().Height(), - exception_state)) - return ScriptPromise(); + const ImageBitmapOptions& options) { if (data()->BufferBase()->IsNeutered()) { - exception_state.ThrowDOMException(kInvalidStateError, - "The source data has been neutered."); - return ScriptPromise(); + return ScriptPromise::RejectWithDOMException( + script_state, + DOMException::Create(kInvalidStateError, + "The source data has been detached.")); } - if (!ImageBitmap::IsResizeOptionValid(options, exception_state)) - return ScriptPromise(); return ImageBitmapSource::FulfillImageBitmap( script_state, ImageBitmap::Create(this, crop_rect, options)); }
diff --git a/third_party/WebKit/Source/core/html/ImageData.h b/third_party/WebKit/Source/core/html/ImageData.h index 4bf0c0b..b47a126 100644 --- a/third_party/WebKit/Source/core/html/ImageData.h +++ b/third_party/WebKit/Source/core/html/ImageData.h
@@ -150,8 +150,7 @@ ScriptPromise CreateImageBitmap(ScriptState*, EventTarget&, Optional<IntRect> crop_rect, - const ImageBitmapOptions&, - ExceptionState&) override; + const ImageBitmapOptions&) override; void Trace(Visitor*);
diff --git a/third_party/WebKit/Source/core/html/canvas/ImageElementBase.cpp b/third_party/WebKit/Source/core/html/canvas/ImageElementBase.cpp index f4076a1..b07ab8e 100644 --- a/third_party/WebKit/Source/core/html/canvas/ImageElementBase.cpp +++ b/third_party/WebKit/Source/core/html/canvas/ImageElementBase.cpp
@@ -4,6 +4,7 @@ #include "core/html/canvas/ImageElementBase.h" +#include "core/dom/DOMException.h" #include "core/frame/LocalDOMWindow.h" #include "core/frame/UseCounter.h" #include "core/imagebitmap/ImageBitmap.h" @@ -142,18 +143,31 @@ ScriptState* script_state, EventTarget& event_target, Optional<IntRect> crop_rect, - const ImageBitmapOptions& options, - ExceptionState& exception_state) { + const ImageBitmapOptions& options) { DCHECK(event_target.ToLocalDOMWindow()); - if ((crop_rect && - !ImageBitmap::IsSourceSizeValid(crop_rect->Width(), crop_rect->Height(), - exception_state)) || - !ImageBitmap::IsSourceSizeValid(BitmapSourceSize().Width(), - BitmapSourceSize().Height(), - exception_state)) - return ScriptPromise(); - if (!ImageBitmap::IsResizeOptionValid(options, exception_state)) - return ScriptPromise(); + + if (!CachedImage()) { + return ScriptPromise::RejectWithDOMException( + script_state, + DOMException::Create( + kInvalidStateError, + "No image can be retrieved from the provided element.")); + } + if (CachedImage()->GetImage()->IsSVGImage()) { + SVGImage* image = ToSVGImage(CachedImage()->GetImage()); + if (!image->HasIntrinsicDimensions() && + (!crop_rect && + (!options.hasResizeWidth() || !options.hasResizeHeight()))) { + return ScriptPromise::RejectWithDOMException( + script_state, + DOMException::Create( + kInvalidStateError, + "The image element contains an SVG image without intrinsic " + "dimensions, and no resize options or crop region are " + "specified.")); + } + } + if (IsSVGSource()) { return ImageBitmap::CreateAsync(this, crop_rect, event_target.ToLocalDOMWindow()->document(),
diff --git a/third_party/WebKit/Source/core/html/canvas/ImageElementBase.h b/third_party/WebKit/Source/core/html/canvas/ImageElementBase.h index 52c3e74..7f2fbfd 100644 --- a/third_party/WebKit/Source/core/html/canvas/ImageElementBase.h +++ b/third_party/WebKit/Source/core/html/canvas/ImageElementBase.h
@@ -25,8 +25,7 @@ ScriptPromise CreateImageBitmap(ScriptState*, EventTarget&, Optional<IntRect>, - const ImageBitmapOptions&, - ExceptionState&) override; + const ImageBitmapOptions&) override; RefPtr<Image> GetSourceImageForCanvas(SourceImageStatus*, AccelerationHint,
diff --git a/third_party/WebKit/Source/core/imagebitmap/ImageBitmap.cpp b/third_party/WebKit/Source/core/imagebitmap/ImageBitmap.cpp index 587a319..53e14e1 100644 --- a/third_party/WebKit/Source/core/imagebitmap/ImageBitmap.cpp +++ b/third_party/WebKit/Source/core/imagebitmap/ImageBitmap.cpp
@@ -354,30 +354,6 @@ return frame->FinalizePixelsAndGetImage(); } -bool ImageBitmap::IsResizeOptionValid(const ImageBitmapOptions& options, - ExceptionState& exception_state) { - if ((options.hasResizeWidth() && options.resizeWidth() == 0) || - (options.hasResizeHeight() && options.resizeHeight() == 0)) { - exception_state.ThrowDOMException( - kInvalidStateError, - "The resizeWidth or/and resizeHeight is equal to 0."); - return false; - } - return true; -} - -bool ImageBitmap::IsSourceSizeValid(int source_width, - int source_height, - ExceptionState& exception_state) { - if (!source_width || !source_height) { - exception_state.ThrowDOMException( - kIndexSizeError, String::Format("The source %s provided is 0.", - source_width ? "height" : "width")); - return false; - } - return true; -} - static RefPtr<StaticBitmapImage> CropImageAndApplyColorSpaceConversion( RefPtr<Image>&& image, ImageBitmap::ParsedOptions& parsed_options, @@ -515,7 +491,6 @@ ImageBitmap::ImageBitmap(HTMLCanvasElement* canvas, Optional<IntRect> crop_rect, const ImageBitmapOptions& options) { - DCHECK(canvas->IsPaintable()); SourceImageStatus status; RefPtr<Image> image_input = canvas->GetSourceImageForCanvas( &status, kPreferAcceleration, kSnapshotReasonCreateImageBitmap, @@ -950,17 +925,11 @@ return IntSize(image_->width(), image_->height()); } -ScriptPromise ImageBitmap::CreateImageBitmap(ScriptState* script_state, - EventTarget& event_target, - Optional<IntRect> crop_rect, - const ImageBitmapOptions& options, - ExceptionState& exception_state) { - if ((crop_rect && !IsSourceSizeValid(crop_rect->Width(), crop_rect->Height(), - exception_state)) || - !IsSourceSizeValid(width(), height(), exception_state)) - return ScriptPromise(); - if (!IsResizeOptionValid(options, exception_state)) - return ScriptPromise(); +ScriptPromise ImageBitmap::CreateImageBitmap( + ScriptState* script_state, + EventTarget& event_target, + Optional<IntRect> crop_rect, + const ImageBitmapOptions& options) { return ImageBitmapSource::FulfillImageBitmap( script_state, Create(this, crop_rect, options)); }
diff --git a/third_party/WebKit/Source/core/imagebitmap/ImageBitmap.h b/third_party/WebKit/Source/core/imagebitmap/ImageBitmap.h index 88221fea..aad917e 100644 --- a/third_party/WebKit/Source/core/imagebitmap/ImageBitmap.h +++ b/third_party/WebKit/Source/core/imagebitmap/ImageBitmap.h
@@ -91,10 +91,6 @@ ScriptState*, const ImageBitmapOptions& = ImageBitmapOptions()); static sk_sp<SkImage> GetSkImageFromDecoder(std::unique_ptr<ImageDecoder>); - static bool IsResizeOptionValid(const ImageBitmapOptions&, ExceptionState&); - static bool IsSourceSizeValid(int source_width, - int source_height, - ExceptionState&); // Type and helper function required by CallbackPromiseAdapter: using WebType = sk_sp<SkImage>; @@ -138,8 +134,7 @@ ScriptPromise CreateImageBitmap(ScriptState*, EventTarget&, Optional<IntRect>, - const ImageBitmapOptions&, - ExceptionState&) override; + const ImageBitmapOptions&) override; struct ParsedOptions { bool flip_y = false;
diff --git a/third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.cpp b/third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.cpp index 8e84b6e0..c3e6f20 100644 --- a/third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.cpp +++ b/third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.cpp
@@ -75,50 +75,26 @@ static inline ImageBitmapSource* ToImageBitmapSourceInternal( const ImageBitmapSourceUnion& value, - ExceptionState& exception_state, const ImageBitmapOptions& options, bool has_crop_rect) { - ImageElementBase* image_element = nullptr; DEFINE_THREAD_SAFE_STATIC_LOCAL( EnumerationHistogram, image_bitmap_source_histogram, ("Canvas.CreateImageBitmapSource", kCreateImageBitmapSourceCount)); - if (value.isHTMLImageElement()) { - image_bitmap_source_histogram.Count( - kCreateImageBitmapSourceHTMLImageElement); - if (!(image_element = value.getAsHTMLImageElement())) - return nullptr; - } else if (value.isSVGImageElement()) { - image_bitmap_source_histogram.Count( - kCreateImageBitmapSourceSVGImageElement); - if (!(image_element = value.getAsSVGImageElement())) - return nullptr; - } - if (image_element) { - if (!image_element->CachedImage()) { - exception_state.ThrowDOMException( - kInvalidStateError, - "No image can be retrieved from the provided element."); - return nullptr; - } - if (image_element->CachedImage()->GetImage()->IsSVGImage()) { - SVGImage* image = ToSVGImage(image_element->CachedImage()->GetImage()); - if (!image->HasIntrinsicDimensions() && - (!has_crop_rect && - (!options.hasResizeWidth() || !options.hasResizeHeight()))) { - exception_state.ThrowDOMException( - kInvalidStateError, - "The image element contains an SVG image without intrinsic " - "dimensions, and no resize options or crop region are specified."); - return nullptr; - } - } - return image_element; - } if (value.isHTMLVideoElement()) { image_bitmap_source_histogram.Count( kCreateImageBitmapSourceHTMLVideoElement); return value.getAsHTMLVideoElement(); } + if (value.isHTMLImageElement()) { + image_bitmap_source_histogram.Count( + kCreateImageBitmapSourceHTMLImageElement); + return value.getAsHTMLImageElement(); + } + if (value.isSVGImageElement()) { + image_bitmap_source_histogram.Count( + kCreateImageBitmapSourceSVGImageElement); + return value.getAsSVGImageElement(); + } if (value.isHTMLCanvasElement()) { image_bitmap_source_histogram.Count( kCreateImageBitmapSourceHTMLCanvasElement); @@ -150,14 +126,7 @@ EventTarget& event_target, ImageBitmapSource* bitmap_source, Optional<IntRect> crop_rect, - const ImageBitmapOptions& options, - ExceptionState& exception_state) { - if (crop_rect && - !ImageBitmap::IsSourceSizeValid(crop_rect->Width(), crop_rect->Height(), - exception_state)) - return ScriptPromise(); - if (!ImageBitmap::IsResizeOptionValid(options, exception_state)) - return ScriptPromise(); + const ImageBitmapOptions& options) { Blob* blob = static_cast<Blob*>(bitmap_source); ImageBitmapLoader* loader = ImageBitmapFactories::ImageBitmapLoader::Create( From(event_target), crop_rect, options, script_state); @@ -171,16 +140,15 @@ ScriptState* script_state, EventTarget& event_target, const ImageBitmapSourceUnion& bitmap_source, - const ImageBitmapOptions& options, - ExceptionState& exception_state) { + const ImageBitmapOptions& options) { WebFeature feature = WebFeature::kCreateImageBitmap; UseCounter::Count(ExecutionContext::From(script_state), feature); - ImageBitmapSource* bitmap_source_internal = ToImageBitmapSourceInternal( - bitmap_source, exception_state, options, false); + ImageBitmapSource* bitmap_source_internal = + ToImageBitmapSourceInternal(bitmap_source, options, false); if (!bitmap_source_internal) return ScriptPromise(); return createImageBitmap(script_state, event_target, bitmap_source_internal, - Optional<IntRect>(), options, exception_state); + Optional<IntRect>(), options); } ScriptPromise ImageBitmapFactories::createImageBitmap( @@ -191,17 +159,16 @@ int sy, int sw, int sh, - const ImageBitmapOptions& options, - ExceptionState& exception_state) { + const ImageBitmapOptions& options) { WebFeature feature = WebFeature::kCreateImageBitmap; UseCounter::Count(ExecutionContext::From(script_state), feature); - ImageBitmapSource* bitmap_source_internal = ToImageBitmapSourceInternal( - bitmap_source, exception_state, options, true); + ImageBitmapSource* bitmap_source_internal = + ToImageBitmapSourceInternal(bitmap_source, options, true); if (!bitmap_source_internal) return ScriptPromise(); Optional<IntRect> crop_rect = IntRect(sx, sy, sw, sh); return createImageBitmap(script_state, event_target, bitmap_source_internal, - crop_rect, options, exception_state); + crop_rect, options); } ScriptPromise ImageBitmapFactories::createImageBitmap( @@ -209,14 +176,35 @@ EventTarget& event_target, ImageBitmapSource* bitmap_source, Optional<IntRect> crop_rect, - const ImageBitmapOptions& options, - ExceptionState& exception_state) { - if (bitmap_source->IsBlob()) + const ImageBitmapOptions& options) { + if (crop_rect && (crop_rect->Width() == 0 || crop_rect->Height() == 0)) { + return ScriptPromise::Reject( + script_state, + V8ThrowException::CreateRangeError( + script_state->GetIsolate(), + String::Format("The crop rect %s is 0.", + crop_rect->Width() ? "height" : "width"))); + } + + if (bitmap_source->IsBlob()) { return CreateImageBitmapFromBlob(script_state, event_target, bitmap_source, - crop_rect, options, exception_state); + crop_rect, options); + } + + if (bitmap_source->BitmapSourceSize().Width() == 0 || + bitmap_source->BitmapSourceSize().Height() == 0) { + return ScriptPromise::RejectWithDOMException( + script_state, + DOMException::Create( + kInvalidStateError, + String::Format("The source image %s is 0.", + bitmap_source->BitmapSourceSize().Width() + ? "height" + : "width"))); + } return bitmap_source->CreateImageBitmap(script_state, event_target, crop_rect, - options, exception_state); + options); } const char* ImageBitmapFactories::SupplementName() { @@ -276,23 +264,34 @@ Supplement<WorkerGlobalScope>::Trace(visitor); } -void ImageBitmapFactories::ImageBitmapLoader::RejectPromise() { - resolver_->Reject(DOMException::Create( - kInvalidStateError, "The source image cannot be decoded.")); +void ImageBitmapFactories::ImageBitmapLoader::RejectPromise( + ImageBitmapRejectionReason reason) { + switch (reason) { + case kUndecodableImageBitmapRejectionReason: + resolver_->Reject(DOMException::Create( + kInvalidStateError, "The source image could not be decoded.")); + break; + case kAllocationFailureImageBitmapRejectionReason: + resolver_->Reject(DOMException::Create( + kInvalidStateError, "The ImageBitmap could not be allocated.")); + break; + default: + NOTREACHED(); + } factory_->DidFinishLoading(this); } void ImageBitmapFactories::ImageBitmapLoader::DidFinishLoading() { DOMArrayBuffer* array_buffer = loader_->ArrayBufferResult(); if (!array_buffer) { - RejectPromise(); + RejectPromise(kAllocationFailureImageBitmapRejectionReason); return; } ScheduleAsyncImageBitmapDecoding(array_buffer); } void ImageBitmapFactories::ImageBitmapLoader::DidFail(FileError::ErrorCode) { - RejectPromise(); + RejectPromise(kUndecodableImageBitmapRejectionReason); } void ImageBitmapFactories::ImageBitmapLoader::ScheduleAsyncImageBitmapDecoding( @@ -341,7 +340,7 @@ void ImageBitmapFactories::ImageBitmapLoader::ResolvePromiseOnOriginalThread( sk_sp<SkImage> frame) { if (!frame) { - RejectPromise(); + RejectPromise(kUndecodableImageBitmapRejectionReason); return; } DCHECK(frame->width()); @@ -353,7 +352,7 @@ if (image_bitmap && image_bitmap->BitmapImage()) { resolver_->Resolve(image_bitmap); } else { - RejectPromise(); + RejectPromise(kAllocationFailureImageBitmapRejectionReason); return; } factory_->DidFinishLoading(this);
diff --git a/third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.h b/third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.h index dc41dd14..3344bb3 100644 --- a/third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.h +++ b/third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.h
@@ -51,7 +51,6 @@ class Blob; class EventTarget; -class ExceptionState; class ExecutionContext; class ImageBitmapSource; class ImageBitmapOptions; @@ -70,8 +69,7 @@ static ScriptPromise createImageBitmap(ScriptState*, EventTarget&, const ImageBitmapSourceUnion&, - const ImageBitmapOptions&, - ExceptionState&); + const ImageBitmapOptions&); static ScriptPromise createImageBitmap(ScriptState*, EventTarget&, const ImageBitmapSourceUnion&, @@ -79,20 +77,17 @@ int sy, int sw, int sh, - const ImageBitmapOptions&, - ExceptionState&); + const ImageBitmapOptions&); static ScriptPromise createImageBitmap(ScriptState*, EventTarget&, ImageBitmapSource*, Optional<IntRect> crop_rect, - const ImageBitmapOptions&, - ExceptionState&); + const ImageBitmapOptions&); static ScriptPromise CreateImageBitmapFromBlob(ScriptState*, EventTarget&, ImageBitmapSource*, Optional<IntRect> crop_rect, - const ImageBitmapOptions&, - ExceptionState&); + const ImageBitmapOptions&); virtual ~ImageBitmapFactories() {} @@ -126,7 +121,12 @@ ScriptState*, const ImageBitmapOptions&); - void RejectPromise(); + enum ImageBitmapRejectionReason { + kUndecodableImageBitmapRejectionReason, + kAllocationFailureImageBitmapRejectionReason, + }; + + void RejectPromise(ImageBitmapRejectionReason); void ScheduleAsyncImageBitmapDecoding(DOMArrayBuffer*); void DecodeImageOnDecoderThread(
diff --git a/third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.idl b/third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.idl index 0ac526d..5ef7a454 100644 --- a/third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.idl +++ b/third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.idl
@@ -44,9 +44,9 @@ NoInterfaceObject, // Always used on target of 'implements' Exposed=(Window,Worker) ] interface ImageBitmapFactories { - [CallWith=ScriptState, RaisesException] Promise createImageBitmap( + [CallWith=ScriptState] Promise createImageBitmap( ImageBitmapSource imageBitmap, optional ImageBitmapOptions options); - [CallWith=ScriptState, RaisesException] Promise createImageBitmap( + [CallWith=ScriptState] Promise createImageBitmap( ImageBitmapSource imageBitmap, long sx, long sy, long sw, long sh, optional ImageBitmapOptions options); };
diff --git a/third_party/WebKit/Source/core/imagebitmap/ImageBitmapSource.cpp b/third_party/WebKit/Source/core/imagebitmap/ImageBitmapSource.cpp index 8654dd4..468b700 100644 --- a/third_party/WebKit/Source/core/imagebitmap/ImageBitmapSource.cpp +++ b/third_party/WebKit/Source/core/imagebitmap/ImageBitmapSource.cpp
@@ -4,6 +4,7 @@ #include "core/imagebitmap/ImageBitmapSource.h" +#include "core/dom/DOMException.h" #include "core/imagebitmap/ImageBitmap.h" #include "core/imagebitmap/ImageBitmapOptions.h" @@ -16,8 +17,8 @@ if (image_bitmap && image_bitmap->BitmapImage()) { resolver->Resolve(image_bitmap); } else { - resolver->Reject( - ScriptValue(script_state, v8::Null(script_state->GetIsolate()))); + resolver->Reject(DOMException::Create( + kInvalidStateError, "The ImageBitmap could not be allocated.")); } return promise; } @@ -26,8 +27,7 @@ ScriptState* script_state, EventTarget& event_target, Optional<IntRect> crop_rect, - const ImageBitmapOptions& options, - ExceptionState& exception_state) { + const ImageBitmapOptions& options) { return ScriptPromise(); }
diff --git a/third_party/WebKit/Source/core/imagebitmap/ImageBitmapSource.h b/third_party/WebKit/Source/core/imagebitmap/ImageBitmapSource.h index 5fac4fa..7ce2371 100644 --- a/third_party/WebKit/Source/core/imagebitmap/ImageBitmapSource.h +++ b/third_party/WebKit/Source/core/imagebitmap/ImageBitmapSource.h
@@ -25,8 +25,7 @@ virtual ScriptPromise CreateImageBitmap(ScriptState*, EventTarget&, Optional<IntRect>, - const ImageBitmapOptions&, - ExceptionState&); + const ImageBitmapOptions&); virtual bool IsBlob() const { return false; }
diff --git a/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.cpp b/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.cpp index 4b38eca..28797880 100644 --- a/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.cpp +++ b/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.cpp
@@ -146,17 +146,7 @@ ScriptState* script_state, EventTarget&, Optional<IntRect> crop_rect, - const ImageBitmapOptions& options, - ExceptionState& exception_state) { - if ((crop_rect && - !ImageBitmap::IsSourceSizeValid(crop_rect->Width(), crop_rect->Height(), - exception_state)) || - !ImageBitmap::IsSourceSizeValid(BitmapSourceSize().Width(), - BitmapSourceSize().Height(), - exception_state)) - return ScriptPromise(); - if (!ImageBitmap::IsResizeOptionValid(options, exception_state)) - return ScriptPromise(); + const ImageBitmapOptions& options) { return ImageBitmapSource::FulfillImageBitmap( script_state, IsPaintable() ? ImageBitmap::Create(this, crop_rect, options) : nullptr);
diff --git a/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.h b/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.h index 76dc52bc..673984b 100644 --- a/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.h +++ b/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.h
@@ -129,8 +129,7 @@ ScriptPromise CreateImageBitmap(ScriptState*, EventTarget&, Optional<IntRect>, - const ImageBitmapOptions&, - ExceptionState&) final; + const ImageBitmapOptions&) final; // CanvasImageSource implementation RefPtr<Image> GetSourceImageForCanvas(SourceImageStatus*,
diff --git a/third_party/WebKit/Source/core/page/ValidationMessageOverlayDelegate.cpp b/third_party/WebKit/Source/core/page/ValidationMessageOverlayDelegate.cpp index 7dc76e4..08a7d89 100644 --- a/third_party/WebKit/Source/core/page/ValidationMessageOverlayDelegate.cpp +++ b/third_party/WebKit/Source/core/page/ValidationMessageOverlayDelegate.cpp
@@ -248,14 +248,6 @@ CSSPrimitiveValue::UnitType::kPixels); container.SetInlineStyleProperty(CSSPropertyTop, bubble_y / zoom_factor, CSSPrimitiveValue::UnitType::kPixels); - if (show_bottom_arrow) { - container.setAttribute(HTMLNames::classAttr, "shown-fully bottom-arrow"); - container.SetInlineStyleProperty(CSSPropertyTransformOrigin, - "center bottom"); - } else { - container.setAttribute(HTMLNames::classAttr, "shown-fully"); - container.SetInlineStyleProperty(CSSPropertyTransformOrigin, "center top"); - } // Should match to --arrow-size in validation_bubble.css. const int kArrowSize = 8; @@ -292,6 +284,7 @@ } } double arrow_x = arrow_anchor_x / zoom_factor - kArrowSize; + double arrow_anchor_percent = arrow_anchor_x * 100 / bubble_size_.Width(); if (show_bottom_arrow) { GetElementById("outer-arrow-bottom") .SetInlineStyleProperty(CSSPropertyLeft, arrow_x, @@ -299,6 +292,10 @@ GetElementById("inner-arrow-bottom") .SetInlineStyleProperty(CSSPropertyLeft, arrow_x, CSSPrimitiveValue::UnitType::kPixels); + container.setAttribute(HTMLNames::classAttr, "shown-fully bottom-arrow"); + container.SetInlineStyleProperty( + CSSPropertyTransformOrigin, + String::Format("%.2f%% bottom", arrow_anchor_percent)); } else { GetElementById("outer-arrow-top") .SetInlineStyleProperty(CSSPropertyLeft, arrow_x, @@ -306,6 +303,10 @@ GetElementById("inner-arrow-top") .SetInlineStyleProperty(CSSPropertyLeft, arrow_x, CSSPrimitiveValue::UnitType::kPixels); + container.setAttribute(HTMLNames::classAttr, "shown-fully"); + container.SetInlineStyleProperty( + CSSPropertyTransformOrigin, + String::Format("%.2f%% top", arrow_anchor_percent)); } }
diff --git a/third_party/WebKit/Source/devtools/front_end/extensions/ExtensionServer.js b/third_party/WebKit/Source/devtools/front_end/extensions/ExtensionServer.js index 1362b57..14bd377 100644 --- a/third_party/WebKit/Source/devtools/front_end/extensions/ExtensionServer.js +++ b/third_party/WebKit/Source/devtools/front_end/extensions/ExtensionServer.js
@@ -724,6 +724,20 @@ } /** + * @param {string} url + * @param {!TextUtils.TextRange} range + */ + sourceSelectionChanged(url, range) { + this._postNotification(Extensions.extensionAPI.Events.PanelObjectSelected + 'sources', { + startLine: range.startLine, + startColumn: range.startColumn, + endLine: range.endLine, + endColumn: range.endColumn, + url: url, + }); + } + + /** * @param {!Common.Event} event */ _addExtensions(event) {
diff --git a/third_party/WebKit/Source/devtools/front_end/resources/ApplicationPanelSidebar.js b/third_party/WebKit/Source/devtools/front_end/resources/ApplicationPanelSidebar.js index 78525db..0f7bac13 100644 --- a/third_party/WebKit/Source/devtools/front_end/resources/ApplicationPanelSidebar.js +++ b/third_party/WebKit/Source/devtools/front_end/resources/ApplicationPanelSidebar.js
@@ -770,8 +770,6 @@ SDK.ServiceWorkerCacheModel, SDK.ServiceWorkerCacheModel.Events.CacheAdded, this._cacheAdded, this); SDK.targetManager.addModelListener( SDK.ServiceWorkerCacheModel, SDK.ServiceWorkerCacheModel.Events.CacheRemoved, this._cacheRemoved, this); - this._swCacheModel.addEventListener( - SDK.ServiceWorkerCacheModel.Events.CacheStorageContentUpdated, this._cacheContentUpdated, this); } /** @@ -796,24 +794,6 @@ /** * @param {!Common.Event} event */ - _cacheContentUpdated(event) { - var origin = /** @type {string} */ (event.data.origin); - var cacheName = /** @type {string} */ (event.data.cacheName); - if (origin.endsWith('/')) - origin = origin.slice(0, -1); - - var cache = - this._swCacheModel.caches().find(cache => cache.securityOrigin === origin && cache.cacheName === cacheName); - if (!cache) - return; - var cacheElement = this._cacheTreeElement(this._swCacheModel, cache); - if (cacheElement) - cacheElement.markNeedsRefresh(); - } - - /** - * @param {!Common.Event} event - */ _cacheAdded(event) { var cache = /** @type {!SDK.ServiceWorkerCacheModel.Cache} */ (event.data.cache); var model = /** @type {!SDK.ServiceWorkerCacheModel} */ (event.data.model); @@ -841,7 +821,6 @@ if (!swCacheTreeElement) return; - swCacheTreeElement.clear(); this.removeChild(swCacheTreeElement); this._swCacheTreeElements.remove(swCacheTreeElement); this.setExpandable(this.childCount() > 0); @@ -866,9 +845,6 @@ } }; -/** - * @unrestricted - */ Resources.SWCacheTreeElement = class extends Resources.BaseStorageTreeElement { /** * @param {!Resources.ResourcesPanel} storagePanel @@ -879,6 +855,8 @@ super(storagePanel, cache.cacheName + ' - ' + cache.securityOrigin, false); this._model = model; this._cache = cache; + /** @type {?Resources.ServiceWorkerCacheView} */ + this._view = null; var icon = UI.Icon.create('mediumicon-table', 'resource-tree-item'); this.setLeadingIcons([icon]); } @@ -896,11 +874,6 @@ this.listItemElement.addEventListener('contextmenu', this._handleContextMenuEvent.bind(this), true); } - markNeedsRefresh() { - if (this._view) - this._view.markNeedsRefresh(); - } - _handleContextMenuEvent(event) { var contextMenu = new UI.ContextMenu(event); contextMenu.appendItem(Common.UIString('Delete'), this._clearCache.bind(this)); @@ -932,11 +905,6 @@ this.showView(this._view); return false; } - - clear() { - if (this._view) - this._view.clear(); - } }; /**
diff --git a/third_party/WebKit/Source/devtools/front_end/resources/ServiceWorkerCacheViews.js b/third_party/WebKit/Source/devtools/front_end/resources/ServiceWorkerCacheViews.js index df022a93..1e63ffa 100644 --- a/third_party/WebKit/Source/devtools/front_end/resources/ServiceWorkerCacheViews.js +++ b/third_party/WebKit/Source/devtools/front_end/resources/ServiceWorkerCacheViews.js
@@ -35,6 +35,7 @@ this._lastPageSize = null; /** @type {?number} */ this._lastSkipCount = null; + this._refreshThrottler = new Common.Throttler(300); this._pageBackButton = new UI.ToolbarButton(Common.UIString('Show previous page'), 'largeicon-play-back'); this._pageBackButton.addEventListener(UI.ToolbarButton.Events.Click, this._pageBackButtonClicked, this); @@ -53,43 +54,36 @@ this._deleteSelectedButton.addEventListener(UI.ToolbarButton.Events.Click, () => this._deleteButtonClicked(null)); editorToolbar.appendToolbarItem(this._deleteSelectedButton); - var needsRefresh = createElement('div'); - var needsRefreshIcon = needsRefresh.createChild('label', '', 'dt-icon-label'); - needsRefreshIcon.type = 'smallicon-warning'; - needsRefreshIcon.createChild('span').textContent = Common.UIString('Refresh needed'); - this._needsRefresh = new UI.ToolbarItem(needsRefresh); - this._needsRefresh.setVisible(false); - this._needsRefresh.setTitle(Common.UIString('Some entries have been modified')); - editorToolbar.appendSpacer(); - editorToolbar.appendToolbarItem(this._needsRefresh); - this._pageSize = 50; this._skipCount = 0; - /** @type {!Array<!Resources.ServiceWorkerCacheView._Response>} */ - this._recentlyPreviewedResponses = []; - this.update(cache); this._entries = []; } /** - * @param {string} requestUrl - * @return {string} + * @override */ - static _requestPath(requestUrl) { - var path = Common.ParsedURL.extractPath(requestUrl); - if (!path) - return requestUrl; - if (path.match(/\/.+/)) - return path.substring(1); - return path; + wasShown() { + this._model.addEventListener( + SDK.ServiceWorkerCacheModel.Events.CacheStorageContentUpdated, this._cacheContentUpdated, this); + this._updateData(true); + } + + /** + * @override + */ + willHide() { + this._model.removeEventListener( + SDK.ServiceWorkerCacheModel.Events.CacheStorageContentUpdated, this._cacheContentUpdated, this); } /** * @param {?UI.Widget} preview */ _showPreview(preview) { + if (this._preview === preview) + return; if (this._preview) this._preview.detach(); if (!preview) @@ -111,7 +105,7 @@ var dataGrid = new DataGrid.DataGrid( columns, undefined, this._deleteButtonClicked.bind(this), this._updateData.bind(this, true)); dataGrid.addEventListener( - DataGrid.DataGrid.Events.SelectedNode, event => this._previewCachedResponse(event.data.data['request']), this); + DataGrid.DataGrid.Events.SelectedNode, event => this._previewCachedResponse(event.data.data), this); dataGrid.setStriped(true); return dataGrid; } @@ -141,8 +135,7 @@ if (!node) return; } - - await this._model.deleteCacheEntry(this._cache, /** @type {string} */ (node.data['request'])); + await this._model.deleteCacheEntry(this._cache, /** @type {string} */ (node.data.url)); node.remove(); } @@ -162,26 +155,40 @@ /** * @param {number} skipCount - * @param {!Array.<!SDK.ServiceWorkerCacheModel.Entry>} entries + * @param {!Array<!SDK.ServiceWorkerCacheModel.Entry>} entries * @param {boolean} hasMore * @this {Resources.ServiceWorkerCacheView} */ _updateDataCallback(skipCount, entries, hasMore) { + var selected = this._dataGrid.selectedNode && this._dataGrid.selectedNode.data.url; this._refreshButton.setEnabled(true); - this.clear(); + + /** @type {!Map<string, !DataGrid.DataGridNode>} */ + var oldEntries = new Map(); + var rootNode = this._dataGrid.rootNode(); + for (var node of rootNode.children) + oldEntries.set(node.data.url, node); + rootNode.removeChildren(); this._entries = entries; - for (var i = 0; i < entries.length; ++i) { - var data = {}; - data['request'] = entries[i].request; - data['path'] = Resources.ServiceWorkerCacheView._requestPath(entries[i].request); - data['responseTime'] = entries[i].responseTime; - var node = new DataGrid.DataGridNode(data); - node.selectable = true; - this._dataGrid.rootNode().appendChild(node); + var selectedNode = null; + for (var entry of entries) { + var node = oldEntries.get(entry.request); + if (!node || node.data.timestamp !== entry.timestamp) { + var data = new Resources.ServiceWorkerCacheView._Response(this._cache, entry.request, entry.timestamp); + node = new DataGrid.DataGridNode(data); + node.selectable = true; + } + rootNode.appendChild(node); + if (entry.request === selected) + selectedNode = node; } this._pageBackButton.setEnabled(!!skipCount); this._pageForwardButton.setEnabled(hasMore); - this._needsRefresh.setVisible(false); + if (!selectedNode) + this._showPreview(null); + else + selectedNode.revealAndSelect(); + this._updatedForTest(); } /** @@ -193,7 +200,6 @@ if (!force && this._lastPageSize === pageSize && this._lastSkipCount === skipCount) return; - this._showPreview(null); this._refreshButton.setEnabled(false); if (this._lastPageSize !== pageSize) { skipCount = 0; @@ -201,7 +207,6 @@ } this._lastPageSize = pageSize; this._lastSkipCount = skipCount; - this._recentlyPreviewedResponses = []; this._model.loadCacheData(this._cache, skipCount, pageSize, this._updateDataCallback.bind(this, skipCount)); } @@ -212,51 +217,27 @@ this._updateData(true); } - markNeedsRefresh() { - this._needsRefresh.setVisible(true); - } - - clear() { - this._dataGrid.rootNode().removeChildren(); - this._entries = []; - } - /** - * @param {string} url - * @return {!Resources.ServiceWorkerCacheView._Response} + * @param {!Common.Event} event */ - _responseForUrl(url) { - var response = null; - var index = this._recentlyPreviewedResponses.findIndex(response => response.url === url); - if (index >= 0) { - response = this._recentlyPreviewedResponses[index]; - this._recentlyPreviewedResponses.splice(index, 1); - } else { - response = new Resources.ServiceWorkerCacheView._Response(this._cache, url); - } - if (this._recentlyPreviewedResponses.length === Resources.ServiceWorkerCacheView._RESPONSE_CACHE_SIZE) - this._recentlyPreviewedResponses.pop(); - this._recentlyPreviewedResponses.unshift(response); - return response; - } - - /** - * @param {string} url - */ - async _previewCachedResponse(url) { - var preview = await this._responseForUrl(url)._previewPromise; - // It is possible that table selection changes before the preview opens - var selectedRequest = this._dataGrid.selectedNode.data['request']; - if (url !== selectedRequest) + _cacheContentUpdated(event) { + var nameAndOrigin = event.data; + if (this._cache.securityOrigin !== nameAndOrigin.origin || this._cache.cacheName !== nameAndOrigin.cacheName) return; - this._showPreview(preview); + this._refreshThrottler.schedule(() => Promise.resolve(this._updateData(true)), true); } /** - * @override + * @param {!Resources.ServiceWorkerCacheView._Response} response */ - willHide() { - this._recentlyPreviewedResponses = []; + async _previewCachedResponse(response) { + var preview = await response._previewPromise; + // It is possible that table selection changes before the preview opens. + if (response === this._dataGrid.selectedNode.data) + this._showPreview(preview); + } + + _updatedForTest() { } }; @@ -264,11 +245,28 @@ /** * @param {!SDK.ServiceWorkerCacheModel.Cache} cache * @param {string} url + * @param {number} timestamp */ - constructor(cache, url) { + constructor(cache, url, timestamp) { this.url = url; + this.timestamp = timestamp; /** @type {!Promise<!UI.Widget>} */ this._previewPromise = this._innerPreview(cache); + this.path = Resources.ServiceWorkerCacheView._Response._requestPath(url); + this.responseTime = new Date(timestamp * 1000).toLocaleString(); + } + + /** + * @param {string} url + * @return {string} + */ + static _requestPath(url) { + var path = Common.ParsedURL.extractPath(url); + if (!path) + return url; + if (path.length > 1 && path.startsWith('/')) + return path.substring(1); + return path; } /**
diff --git a/third_party/WebKit/Source/devtools/front_end/sdk/ServiceWorkerCacheModel.js b/third_party/WebKit/Source/devtools/front_end/sdk/ServiceWorkerCacheModel.js index 766068b9..f07a3c60 100644 --- a/third_party/WebKit/Source/devtools/front_end/sdk/ServiceWorkerCacheModel.js +++ b/third_party/WebKit/Source/devtools/front_end/sdk/ServiceWorkerCacheModel.js
@@ -231,8 +231,8 @@ return; } var entries = response.cacheDataEntries.map( - dataEntry => new SDK.ServiceWorkerCacheModel.Entry( - dataEntry.request, dataEntry.response, new Date(dataEntry.responseTime * 1000).toLocaleString())); + dataEntry => + new SDK.ServiceWorkerCacheModel.Entry(dataEntry.request, dataEntry.response, dataEntry.responseTime)); callback(entries, response.hasMore); } @@ -241,8 +241,6 @@ * @override */ cacheStorageListUpdated(origin) { - if (origin.endsWith('/')) - origin = origin.slice(0, -1); this._originsUpdated.add(origin); this._throttler.schedule(() => { @@ -279,12 +277,12 @@ /** * @param {string} request * @param {string} response - * @param {string} responseTime + * @param {number} timestamp */ - constructor(request, response, responseTime) { + constructor(request, response, timestamp) { this.request = request; this.response = response; - this.responseTime = responseTime; + this.timestamp = timestamp; } };
diff --git a/third_party/WebKit/Source/devtools/front_end/sources/TabbedEditorContainer.js b/third_party/WebKit/Source/devtools/front_end/sources/TabbedEditorContainer.js index 7906348..98f79f5a 100644 --- a/third_party/WebKit/Source/devtools/front_end/sources/TabbedEditorContainer.js +++ b/third_party/WebKit/Source/devtools/front_end/sources/TabbedEditorContainer.js
@@ -240,6 +240,8 @@ var range = /** @type {!TextUtils.TextRange} */ (event.data); this._history.updateSelectionRange(this._currentFile.url(), range); this._history.save(this._previouslyViewedFilesSetting); + + Extensions.extensionServer.sourceSelectionChanged(this._currentFile.url(), range); } /**
diff --git a/third_party/WebKit/Source/devtools/front_end/timeline/PerformanceMonitor.js b/third_party/WebKit/Source/devtools/front_end/timeline/PerformanceMonitor.js index 1703d2e5..864ae3f4 100644 --- a/third_party/WebKit/Source/devtools/front_end/timeline/PerformanceMonitor.js +++ b/third_party/WebKit/Source/devtools/front_end/timeline/PerformanceMonitor.js
@@ -5,53 +5,20 @@ /** * @unrestricted */ -Timeline.PerformanceMonitor = class extends UI.VBox { +Timeline.PerformanceMonitor = class extends UI.HBox { constructor() { super(true); this.registerRequiredCSS('timeline/performanceMonitor.css'); + this.contentElement.classList.add('perfmon-pane'); this._model = SDK.targetManager.mainTarget().model(SDK.PerformanceMetricsModel); - this._canvas = /** @type {!HTMLCanvasElement} */ (this.contentElement.createChild('canvas')); /** @type {!Array<!{timestamp: number, metrics: !Map<string, number>}>} */ this._metricsBuffer = []; /** @const */ this._pixelsPerMs = 20 / 1000; /** @const */ this._pollIntervalMs = 500; - /** @type {!Array<string>} */ - this._enabledMetrics = ['NodeCount', 'ScriptDuration', 'TaskDuration']; - /** @type {!Map<string, !Timeline.PerformanceMonitor.Info>} */ - this._metricsInfo = new Map([ - [ - 'TaskDuration', { - title: Common.UIString('CPU Utilization'), - color: 'red', - mode: Timeline.PerformanceMonitor.Mode.CumulativeTime, - min: 0, - max: 100, - format: formatPercent - } - ], - [ - 'ScriptDuration', { - title: Common.UIString('Script Execution'), - color: 'orange', - mode: Timeline.PerformanceMonitor.Mode.CumulativeTime, - min: 0, - max: 100, - format: formatPercent - } - ], - ['NodeCount', {title: Common.UIString('DOM Nodes'), color: 'green'}], - ['JSEventListenerCount', {title: Common.UIString('JS Event Listeners'), color: 'deeppink'}], - ]); - - /** - * @param {number} value - * @return {string} - */ - function formatPercent(value) { - return value.toFixed(0) + '%'; - } + this._controlPane = new Timeline.PerformanceMonitor.ControlPane(this.contentElement); + this._canvas = /** @type {!HTMLCanvasElement} */ (this.contentElement.createChild('canvas')); } /** @@ -94,7 +61,7 @@ var metricsMap = new Map(); var timestamp = Date.now(); for (var metric of metrics) { - var info = this._metricInfo(metric.name); + var info = this._controlPane.metricInfo(metric.name); var value; if (info.mode === Timeline.PerformanceMonitor.Mode.CumulativeTime) { value = info.lastTimestamp ? @@ -113,16 +80,7 @@ var maxCount = Math.ceil(millisPerWidth / this._pollIntervalMs * 2); if (this._metricsBuffer.length > maxCount * 2) // Multiply by 2 to have a hysteresis. this._metricsBuffer.splice(0, this._metricsBuffer.length - maxCount); - } - - /** - * @param {string} name - * @return {!Timeline.PerformanceMonitor.Info} - */ - _metricInfo(name) { - if (!this._metricsInfo.has(name)) - this._metricsInfo.set(name, {title: name, color: 'grey'}); - return this._metricsInfo.get(name); + this._controlPane.updateMetrics(metricsMap); } _draw() { @@ -131,9 +89,10 @@ ctx.scale(window.devicePixelRatio, window.devicePixelRatio); ctx.clearRect(0, 0, this._width, this._height); this._drawGrid(ctx); - for (var metricName of this._enabledMetrics) - this._drawMetric(ctx, metricName); - this._drawLegend(ctx); + for (var metricName of this._controlPane.metrics()) { + if (this._controlPane.isActive(metricName)) + this._drawMetric(ctx, metricName); + } ctx.restore(); } @@ -141,6 +100,8 @@ * @param {!CanvasRenderingContext2D} ctx */ _drawGrid(ctx) { + var darkGray = 'hsla(0, 0%, 0%, 0.08)'; + var lightGray = 'hsla(0, 0%, 0%, 0.02)'; ctx.font = '10px ' + Host.fontFamily(); ctx.fillStyle = 'rgba(0, 0, 0, 0.3)'; for (var sec = 0;; ++sec) { @@ -152,9 +113,14 @@ ctx.lineTo(Math.round(x) + 0.5, this._height); if (sec % 5 === 0) ctx.fillText(Common.UIString('%d sec', sec), Math.round(x) + 4, 12); - ctx.strokeStyle = sec % 5 ? 'hsla(0, 0%, 0%, 0.02)' : 'hsla(0, 0%, 0%, 0.08)'; + ctx.strokeStyle = sec % 5 ? lightGray : darkGray; ctx.stroke(); } + ctx.beginPath(); + ctx.moveTo(0, this._height - 4.5); + ctx.lineTo(this._width, this._height - 4.5); + ctx.strokeStyle = darkGray; + ctx.stroke(); } /** @@ -166,33 +132,26 @@ var width = this._width; var height = this._height; var startTime = Date.now() - this._pollIntervalMs * 2 - width / this._pixelsPerMs; - var info = this._metricInfo(metricName); - var min = Infinity; + var info = this._controlPane.metricInfo(metricName); var max = -Infinity; var pixelsPerMs = this._pixelsPerMs; - if (info.min || info.max) { - min = info.min; - max = info.max; - } else { - for (var i = this._metricsBuffer.length - 1; i >= 0; --i) { - var metrics = this._metricsBuffer[i]; - var value = metrics.metrics.get(metricName); - min = Math.min(min, value); - max = Math.max(max, value); - if (metrics.timestamp < startTime) - break; - } - if (isFinite(min) && isFinite(max)) { - var alpha = 0.1; - info.currentMin = min * alpha + (info.currentMin || min) * (1 - alpha); - info.currentMax = max * alpha + (info.currentMax || max) * (1 - alpha); - min = info.currentMin; - max = info.currentMax; - } + for (var i = this._metricsBuffer.length - 1; i >= 0; --i) { + var metrics = this._metricsBuffer[i]; + var value = metrics.metrics.get(metricName); + max = Math.max(max, value); + if (metrics.timestamp < startTime) + break; } - var span = 1.15 * (max - min) || 1; + if (isFinite(max)) { + var alpha = 0.1; + info.currentMax = max * alpha + (info.currentMax || max) * (1 - alpha); + max = info.currentMax; + } + if (typeof info.max === 'number') + max = info.max; + var span = 1.2 * max || 1; ctx.beginPath(); - ctx.moveTo(width + 5, height + 5); + ctx.moveTo(width + 5, calcY(0)); var x = 0; var lastY = 0; var lastX = 0; @@ -212,11 +171,11 @@ if (metrics.timestamp < startTime) break; } - ctx.lineTo(x, height + 5); ctx.strokeStyle = info.color; ctx.lineWidth = 0.5; ctx.stroke(); - ctx.globalAlpha = 0.05; + ctx.lineTo(x, calcY(0)); + ctx.globalAlpha = 0.02; ctx.fillStyle = info.color; ctx.fill(); ctx.restore(); @@ -226,58 +185,19 @@ * @return {number} */ function calcY(value) { - return Math.round(height - 5 - height * (value - min) / span) + 0.5; + return Math.round(height - 5 - height * value / span) + 0.5; } } /** - * @param {!CanvasRenderingContext2D} ctx - */ - _drawLegend(ctx) { - ctx.save(); - ctx.font = '12px ' + Host.fontFamily(); - ctx.textBaseline = 'middle'; - var topMargin = 20; - var leftMargin = 10; - var padding = 14; - var intervalPx = 18; - var textColor = '#333'; - var swatchSize = 10; - var valueWidth = 40; // Use a fixed number to avoid box resizing when values change. - var numberFormat = new Intl.NumberFormat('en-US'); - var maxTitleWidth = this._enabledMetrics.reduce( - (acc, metric) => Math.max(acc, ctx.measureText(this._metricInfo(metric).title).width), 0); - var titleX = leftMargin + padding + swatchSize * 2; - ctx.fillStyle = 'hsla(0, 0%, 100%, 0.8)'; - ctx.fillRect( - leftMargin, topMargin, titleX + maxTitleWidth + valueWidth + padding, - (this._enabledMetrics.length - 1) * intervalPx + 2 * padding); - for (var i = 0; i < this._enabledMetrics.length; ++i) { - var metricName = this._enabledMetrics[i]; - var info = this._metricInfo(metricName); - var lineY = i * intervalPx + topMargin + padding; - ctx.fillStyle = textColor; - ctx.fillText(info.title || metricName, titleX, lineY); - ctx.fillStyle = info.color; - ctx.fillRect(leftMargin + padding, lineY - swatchSize / 2, swatchSize, swatchSize); - if (this._metricsBuffer.length) { - var format = info.format || (value => numberFormat.format(value)); - var value = this._metricsBuffer.peekLast().metrics.get(metricName) || 0; - ctx.fillText(format(value), titleX + maxTitleWidth + padding, lineY); - } - } - ctx.restore(); - } - - /** * @override */ onResize() { super.onResize(); this._width = this._canvas.offsetWidth; this._height = this._canvas.offsetHeight; - this._canvas.width = this._width * window.devicePixelRatio; - this._canvas.height = this._height * window.devicePixelRatio; + this._canvas.width = Math.round(this._width * window.devicePixelRatio); + this._canvas.height = Math.round(this._height * window.devicePixelRatio); this._draw(); } }; @@ -292,11 +212,162 @@ * title: string, * color: string, * mode: (!Timeline.PerformanceMonitor.Mode|undefined), - * min: (number|undefined), * max: (number|undefined), - * currentMin: (number|undefined), * currentMax: (number|undefined), * format: (function(number):string|undefined) * }} */ Timeline.PerformanceMonitor.Info; + +Timeline.PerformanceMonitor.ControlPane = class { + /** + * @param {!Element} parent + */ + constructor(parent) { + this.element = parent.createChild('div', 'perfmon-control-pane'); + + this._enabledMetricsSetting = + Common.settings.createSetting('perfmonActiveIndicators', ['NodeCount', 'ScriptDuration', 'TaskDuration']); + /** @type {!Set<string>} */ + this._enabledMetrics = new Set(this._enabledMetricsSetting.get()); + /** @type {!Map<string, !Timeline.PerformanceMonitor.Info>} */ + this._metricsInfo = new Map([ + [ + 'TaskDuration', { + title: Common.UIString('CPU utilization'), + color: 'red', + mode: Timeline.PerformanceMonitor.Mode.CumulativeTime, + max: 100 + } + ], + [ + 'ScriptDuration', { + title: Common.UIString('Script duration'), + color: 'orange', + mode: Timeline.PerformanceMonitor.Mode.CumulativeTime, + max: 100 + } + ], + [ + 'LayoutDuration', { + title: Common.UIString('Layout duration'), + color: 'magenta', + max: 100, + mode: Timeline.PerformanceMonitor.Mode.CumulativeTime + } + ], + [ + 'RecalcStyleDuration', { + title: Common.UIString('Style recalc duration'), + color: 'violet', + max: 100, + mode: Timeline.PerformanceMonitor.Mode.CumulativeTime + } + ], + ['NodeCount', {title: Common.UIString('DOM Nodes'), color: 'green'}], + ['DocumentCount', {title: Common.UIString('Documents'), color: 'blue'}], + ['FrameCount', {title: Common.UIString('Frames'), color: 'darkcyan'}], + ['JSEventListenerCount', {title: Common.UIString('JS event listeners'), color: 'yellowgreen'}], + ['LayoutCount', {title: Common.UIString('Layout count'), color: 'hotpink'}], + ['RecalcStyleCount', {title: Common.UIString('Style recalculations'), color: 'deeppink'}], + ]); + + this._indicators = new Map(); + for (var metricName of this._metricsInfo.keys()) { + var info = this._metricsInfo.get(metricName); + var active = this._enabledMetrics.has(metricName); + var indicator = new Timeline.PerformanceMonitor.MetricIndicator( + this.element, info, active, this._onToggle.bind(this, metricName)); + this._indicators.set(metricName, indicator); + } + } + + /** + * @param {string} metricName + * @param {boolean} active + */ + _onToggle(metricName, active) { + if (active) + this._enabledMetrics.add(metricName); + else + this._enabledMetrics.delete(metricName); + this._enabledMetricsSetting.set(Array.from(this._enabledMetrics)); + } + + /** + * @return {!IteratorIterable<string>} + */ + metrics() { + return this._metricsInfo.keys(); + } + + /** + * @param {string} metricName + * @return {!Timeline.PerformanceMonitor.Info} + */ + metricInfo(metricName) { + return this._metricsInfo.get(metricName) || {}; + } + + /** + * @param {string} metricName + * @return {boolean} + */ + isActive(metricName) { + return this._enabledMetrics.has(metricName); + } + + /** + * @param {!Map<string, number>} metrics + */ + updateMetrics(metrics) { + for (const [name, indicator] of this._indicators) { + if (metrics.has(name)) + indicator.setValue(metrics.get(name)); + } + } +}; + +Timeline.PerformanceMonitor.MetricIndicator = class { + /** + * @param {!Element} parent + * @param {!Timeline.PerformanceMonitor.Info} info + * @param {boolean} active + * @param {function(boolean)} onToggle + */ + constructor(parent, info, active, onToggle) { + this._info = info; + this._active = active; + this._onToggle = onToggle; + this.element = parent.createChild('div', 'perfmon-indicator'); + this._swatchElement = this.element.createChild('div', 'perfmon-indicator-swatch'); + this._swatchElement.style.borderColor = info.color; + this.element.createChild('div', 'perfmon-indicator-title').textContent = info.title; + this._valueElement = this.element.createChild('div', 'perfmon-indicator-value'); + this._valueElement.style.color = info.color; + this.element.addEventListener('click', () => this._toggleIndicator()); + this.element.classList.toggle('active', active); + } + + /** + * @param {number} value + */ + setValue(value) { + var textValue; + switch (this._info.mode) { + case Timeline.PerformanceMonitor.Mode.CumulativeTime: + textValue = value.toFixed() + '%'; + break; + default: + textValue = new Intl.NumberFormat('en-US').format(value); + break; + } + this._valueElement.textContent = textValue; + } + + _toggleIndicator() { + this._active = !this._active; + this.element.classList.toggle('active', this._active); + this._onToggle(this._active); + } +};
diff --git a/third_party/WebKit/Source/devtools/front_end/timeline/module.json b/third_party/WebKit/Source/devtools/front_end/timeline/module.json index 831ab35..015e58d 100644 --- a/third_party/WebKit/Source/devtools/front_end/timeline/module.json +++ b/third_party/WebKit/Source/devtools/front_end/timeline/module.json
@@ -12,7 +12,7 @@ "type": "view", "location": "drawer-view", "id": "performance.monitor", - "title": "Performance Monitor", + "title": "Performance monitor", "persistence": "closeable", "order": 100, "className": "Timeline.PerformanceMonitor",
diff --git a/third_party/WebKit/Source/devtools/front_end/timeline/performanceMonitor.css b/third_party/WebKit/Source/devtools/front_end/timeline/performanceMonitor.css index 9ee4807..c7126af1 100644 --- a/third_party/WebKit/Source/devtools/front_end/timeline/performanceMonitor.css +++ b/third_party/WebKit/Source/devtools/front_end/timeline/performanceMonitor.css
@@ -4,9 +4,70 @@ * found in the LICENSE file. */ -canvas { +.perfmon-pane { + overflow: hidden; +} + +.perfmon-control-pane { + display: flex; + flex-direction: column; + padding: 6px 0; + overflow-x: hidden; + overflow-y: auto; +} + +.perfmon-indicator { + padding: 6px 12px; + margin: -1px 0; + display: flex; + flex-shrink: 0; + width: 200px; +} + +.perfmon-indicator:hover { + background-color: #f8f8f8; +} + +.perfmon-indicator-swatch { + flex: 0 0 10px; + border-radius: 10px; + border: 1px solid #ccc; + margin-right: 6px; + margin-top: 1px; + height: 10px; +} + +.perfmon-indicator:not(.active) .perfmon-indicator-swatch { + border-color: #ccc !important; +} + +.perfmon-indicator-title { + flex: 0 0 115px; +} + +.perfmon-indicator-value { + flex: 0 0 44px; + text-align: right; +} + +.perfmon-indicator:not(.active) .perfmon-indicator-value { + opacity: 0; +} + +.perfmon-indicator-close { + padding-left: 4px; +} + +.perfmon-indicator:not(:hover) .perfmon-indicator-close { + opacity: 0; +} + +.perfmon-add-button:not(:hover) { + color: #bbb; +} + +.perfmon-pane canvas { display: flex; flex: 1 1; - margin: 10px; - border: 1px solid #ccc; + border-left: 1px solid #ccc; }
diff --git a/third_party/WebKit/Source/devtools/scripts/migrate_test/move.js b/third_party/WebKit/Source/devtools/scripts/migrate_test/move.js index 38d6189..6662bf9 100644 --- a/third_party/WebKit/Source/devtools/scripts/migrate_test/move.js +++ b/third_party/WebKit/Source/devtools/scripts/migrate_test/move.js
@@ -18,11 +18,7 @@ function main() { const originalTests = scanForTests([ - '../../../../LayoutTests/inspector/sources/debugger', - '../../../../LayoutTests/inspector/sources/debugger-async', - '../../../../LayoutTests/inspector/sources/debugger-breakpoints', - '../../../../LayoutTests/inspector/sources/debugger-console', - '../../../../LayoutTests/inspector/sources/debugger-frameworks', + '../../../../LayoutTests/inspector/elements', ]); console.log(originalTests); @@ -52,8 +48,8 @@ oldToNewTestPath.set(inputRelativePath, outRelativePath); // Move expectation file - const inputExpectationsPath = inputPath.replace('.html', '-expected.txt'); - const outExpectationsPath = outPath.replace('.html', '-expected.txt'); + const inputExpectationsPath = inputPath.replace(/\.x?html/, '-expected.txt'); + const outExpectationsPath = outPath.replace(/\.x?html/, '-expected.txt'); fs.writeFileSync(outExpectationsPath, fs.readFileSync(inputExpectationsPath, 'utf-8')); fs.unlinkSync(inputExpectationsPath); } @@ -114,9 +110,9 @@ if (utils.isDir(p) && filename !== 'resources') { glob(p); } - if (utils.isFile(p) && p.endsWith('.html')) { + if (utils.isFile(p) && (p.endsWith('.html') || p.endsWith('.xhtml'))) { globbedPaths.push(p); } } } -} +} \ No newline at end of file
diff --git a/third_party/WebKit/Source/modules/accessibility/AXObject.cpp b/third_party/WebKit/Source/modules/accessibility/AXObject.cpp index a525d30..bde9654d 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXObject.cpp +++ b/third_party/WebKit/Source/modules/accessibility/AXObject.cpp
@@ -833,20 +833,6 @@ if (!event_path.size()) return false; - // Check if the user has granted permission for this domain to use - // AOM event listeners yet. This may trigger an infobar, but we shouldn't - // block, so whatever decision the user makes will apply to the next - // event received after that. - // - // Note that we only ask the user about this permission the first - // time an event is received that actually would have triggered an - // event listener. However, if the user grants this permission, it - // persists for this origin from then on. - if (!AxObjectCache().CanCallAOMEventListeners()) { - AxObjectCache().RequestAOMEventListenerPermission(); - return false; - } - // Since we now know the AOM is being used in this document, get the // AccessibleNode for the target element and create it if necessary - // otherwise we wouldn't be able to set the event target. However note
diff --git a/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp b/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp index a4189d8..c185ae3c6 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp +++ b/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp
@@ -82,11 +82,8 @@ #include "modules/accessibility/AXTableColumn.h" #include "modules/accessibility/AXTableHeaderContainer.h" #include "modules/accessibility/AXTableRow.h" -#include "modules/permissions/PermissionUtils.h" #include "platform/wtf/PassRefPtr.h" #include "platform/wtf/PtrUtil.h" -#include "public/platform/modules/permissions/permission.mojom-blink.h" -#include "public/platform/modules/permissions/permission_status.mojom-blink.h" #include "public/web/WebFrameClient.h" namespace blink { @@ -99,18 +96,12 @@ } AXObjectCacheImpl::AXObjectCacheImpl(Document& document) - : AXObjectCacheBase(document), - document_(document), + : document_(document), modification_count_(0), notification_post_timer_( TaskRunnerHelper::Get(TaskType::kUnspecedTimer, &document), this, - &AXObjectCacheImpl::NotificationPostTimerFired), - accessibility_event_permission_(mojom::PermissionStatus::ASK), - permission_observer_binding_(this) { - if (document_->LoadEventFinished()) - AddPermissionStatusListener(); -} + &AXObjectCacheImpl::NotificationPostTimerFired) {} AXObjectCacheImpl::~AXObjectCacheImpl() { #if DCHECK_IS_ON() @@ -1223,7 +1214,6 @@ void AXObjectCacheImpl::HandleLoadComplete(Document* document) { PostNotification(GetOrCreate(document), AXObjectCache::kAXLoadComplete); - AddPermissionStatusListener(); } void AXObjectCacheImpl::HandleLayoutComplete(Document* document) { @@ -1297,49 +1287,6 @@ obj->SetElementRect(rect, ax_canvas); } -void AXObjectCacheImpl::AddPermissionStatusListener() { - ConnectToPermissionService(document_->GetExecutionContext(), - mojo::MakeRequest(&permission_service_)); - - if (permission_observer_binding_.is_bound()) - permission_observer_binding_.Close(); - - mojom::blink::PermissionObserverPtr observer; - permission_observer_binding_.Bind(mojo::MakeRequest(&observer)); - permission_service_->AddPermissionObserver( - CreatePermissionDescriptor( - mojom::blink::PermissionName::ACCESSIBILITY_EVENTS), - document_->GetExecutionContext()->GetSecurityOrigin(), - accessibility_event_permission_, std::move(observer)); -} - -void AXObjectCacheImpl::OnPermissionStatusChange( - mojom::PermissionStatus status) { - accessibility_event_permission_ = status; -} - -bool AXObjectCacheImpl::CanCallAOMEventListeners() const { - return accessibility_event_permission_ == mojom::PermissionStatus::GRANTED; -} - -void AXObjectCacheImpl::RequestAOMEventListenerPermission() { - if (accessibility_event_permission_ != mojom::PermissionStatus::ASK) - return; - - permission_service_->RequestPermission( - CreatePermissionDescriptor( - mojom::blink::PermissionName::ACCESSIBILITY_EVENTS), - document_->GetExecutionContext()->GetSecurityOrigin(), - UserGestureIndicator::ProcessingUserGesture(), - ConvertToBaseCallback(WTF::Bind( - &AXObjectCacheImpl::OnPermissionStatusChange, WrapPersistent(this)))); -} - -void AXObjectCacheImpl::ContextDestroyed(ExecutionContext*) { - permission_service_.reset(); - permission_observer_binding_.Close(); -} - DEFINE_TRACE(AXObjectCacheImpl) { visitor->Trace(document_); visitor->Trace(node_object_mapping_);
diff --git a/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.h b/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.h index ed99342..b8844f4 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.h +++ b/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.h
@@ -31,15 +31,11 @@ #include <memory> #include "core/dom/AXObjectCacheBase.h" -#include "core/dom/ContextLifecycleObserver.h" #include "modules/ModulesExport.h" #include "modules/accessibility/AXObject.h" -#include "mojo/public/cpp/bindings/binding.h" #include "platform/wtf/Forward.h" #include "platform/wtf/HashMap.h" #include "platform/wtf/HashSet.h" -#include "public/platform/modules/permissions/permission.mojom-blink.h" -#include "public/platform/modules/permissions/permission_status.mojom-blink.h" namespace blink { @@ -48,9 +44,7 @@ class LocalFrameView; // This class should only be used from inside the accessibility directory. -class MODULES_EXPORT AXObjectCacheImpl - : public AXObjectCacheBase, - public mojom::blink::PermissionObserver { +class MODULES_EXPORT AXObjectCacheImpl : public AXObjectCacheBase { WTF_MAKE_NONCOPYABLE(AXObjectCacheImpl); public: @@ -196,16 +190,6 @@ // potential owner, possibly reparenting this element. void UpdateTreeIfElementIdIsAriaOwned(Element*); - // Synchronously returns whether or not we currently have permission to - // call AOM event listeners. - bool CanCallAOMEventListeners() const; - - // This is called when an accessibility event is triggered and there are - // AOM event listeners registered that would have been called. - // Asynchronously requests permission from the user. If permission is - // granted, it only applies to the next event received. - void RequestAOMEventListenerPermission(); - protected: void PostPlatformNotification(AXObject*, AXNotification); void LabelChanged(Element*); @@ -265,9 +249,6 @@ notifications_to_post_; void NotificationPostTimerFired(TimerBase*); - // ContextLifecycleObserver overrides. - void ContextDestroyed(ExecutionContext*) override; - AXObject* FocusedImageMapUIElement(HTMLAreaElement*); AXID GetOrCreateAXID(AXObject*); @@ -277,22 +258,6 @@ AXObject* NearestExistingAncestor(Node*); Settings* GetSettings(); - - // Start listenening for updates to the AOM accessibility event permission. - void AddPermissionStatusListener(); - - // mojom::blink::PermissionObserver implementation. - // Called when we get an updated AOM event listener permission value from - // the browser. - void OnPermissionStatusChange(mojom::PermissionStatus); - - // Whether the user has granted permission for the user to install event - // listeners for accessibility events using the AOM. - mojom::PermissionStatus accessibility_event_permission_; - // The permission service, enabling us to check for event listener - // permission. - mojom::blink::PermissionServicePtr permission_service_; - mojo::Binding<mojom::blink::PermissionObserver> permission_observer_binding_; }; // This is the only subclass of AXObjectCache.
diff --git a/third_party/WebKit/Source/modules/accessibility/DEPS b/third_party/WebKit/Source/modules/accessibility/DEPS index 81fd1cd..f0b9b68e 100644 --- a/third_party/WebKit/Source/modules/accessibility/DEPS +++ b/third_party/WebKit/Source/modules/accessibility/DEPS
@@ -3,6 +3,4 @@ "+modules/ModulesExport.h", "+modules/accessibility", "+modules/media_controls", - "+modules/permissions", - "+mojo/public/cpp/bindings/binding.h", ]
diff --git a/third_party/WebKit/Source/modules/permissions/PermissionDescriptor.idl b/third_party/WebKit/Source/modules/permissions/PermissionDescriptor.idl index 3ce943f3..80735f0 100644 --- a/third_party/WebKit/Source/modules/permissions/PermissionDescriptor.idl +++ b/third_party/WebKit/Source/modules/permissions/PermissionDescriptor.idl
@@ -12,7 +12,6 @@ "accelerometer", "gyroscope", "magnetometer", - "accessibility-events", }; // The PermissionDescriptor dictionary is a base to describe permissions. Some
diff --git a/third_party/WebKit/Source/modules/permissions/Permissions.cpp b/third_party/WebKit/Source/modules/permissions/Permissions.cpp index 1dfa8757..b30cfc6 100644 --- a/third_party/WebKit/Source/modules/permissions/Permissions.cpp +++ b/third_party/WebKit/Source/modules/permissions/Permissions.cpp
@@ -112,14 +112,6 @@ return CreatePermissionDescriptor(PermissionName::SENSORS); } - if (name == "accessibility-events") { - if (!RuntimeEnabledFeatures::AccessibilityObjectModelEnabled()) { - exception_state.ThrowTypeError( - "Accessibility Object Model is not enabled."); - return nullptr; - } - return CreatePermissionDescriptor(PermissionName::ACCESSIBILITY_EVENTS); - } return nullptr; }
diff --git a/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp b/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp index eafaa72..badb2a7 100644 --- a/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp +++ b/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp
@@ -754,19 +754,6 @@ } } -std::unique_ptr<WebLayer> -PaintArtifactCompositor::ExtraDataForTesting::ContentWebLayerAt( - unsigned index) { - return Platform::Current()->CompositorSupport()->CreateLayerFromCCLayer( - content_layers[index].get()); -} -std::unique_ptr<WebLayer> -PaintArtifactCompositor::ExtraDataForTesting::ScrollHitTestWebLayerAt( - unsigned index) { - return Platform::Current()->CompositorSupport()->CreateLayerFromCCLayer( - scroll_hit_test_layers[index].get()); -} - #ifndef NDEBUG void PaintArtifactCompositor::ShowDebugData() { LOG(ERROR) << LayersAsJSON(kLayerTreeIncludesDebugInfo)
diff --git a/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.h b/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.h index d343547..0ce1663 100644 --- a/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.h +++ b/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.h
@@ -77,9 +77,6 @@ // way of locating the layers of interest, since there are still a slew of // placeholder layers required. struct ExtraDataForTesting { - std::unique_ptr<WebLayer> ContentWebLayerAt(unsigned index); - std::unique_ptr<WebLayer> ScrollHitTestWebLayerAt(unsigned index); - Vector<scoped_refptr<cc::Layer>> content_layers; Vector<scoped_refptr<cc::Layer>> synthesized_clip_layers; Vector<scoped_refptr<cc::Layer>> scroll_hit_test_layers;
diff --git a/third_party/WebKit/Source/platform/loader/BUILD.gn b/third_party/WebKit/Source/platform/loader/BUILD.gn index 3d9deaa..c6e5e072 100644 --- a/third_party/WebKit/Source/platform/loader/BUILD.gn +++ b/third_party/WebKit/Source/platform/loader/BUILD.gn
@@ -96,7 +96,7 @@ ":make_platform_loader_generated_fetch_initiator_type_names", "//components/link_header_util:link_header_util", "//mojo/public/cpp/system:system", - "//storage/public/interfaces:interfaces_blink__generator", + "//storage/public/interfaces:interfaces_blink", "//third_party/WebKit/Source/platform:make_platform_generated", "//third_party/WebKit/public:mojo_bindings_blink", ]
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/common/path_finder.py b/third_party/WebKit/Tools/Scripts/webkitpy/common/path_finder.py index eaebed1..ab7a225 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/common/path_finder.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/common/path_finder.py
@@ -44,6 +44,12 @@ sys.path.append(path_to_bindings_scripts) +def add_webkitpy_thirdparty_dir_to_sys_path(): + path_to_bindings_scripts = get_webkitpy_thirdparty_dir() + if path_to_bindings_scripts not in sys.path: + sys.path.append(path_to_bindings_scripts) + + def get_bindings_scripts_dir(): return os.path.join(get_source_dir(), 'bindings', 'scripts')
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/formatter/main.py b/third_party/WebKit/Tools/Scripts/webkitpy/formatter/main.py index d0dac2d..2586812c 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/formatter/main.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/formatter/main.py
@@ -5,6 +5,10 @@ import argparse import lib2to3.refactor +# Put webkitpy/thirdparty/ in the import path for autopep8 to import pep8. +from webkitpy.common.path_finder import add_webkitpy_thirdparty_dir_to_sys_path +add_webkitpy_thirdparty_dir_to_sys_path() + from webkitpy.common.system.system_host import SystemHost from webkitpy.thirdparty import autopep8
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/base.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/base.py index 55c918f8..47cc258 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/base.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/base.py
@@ -1560,6 +1560,7 @@ # For example, to turn on force-compositing-mode in the svg/ directory: # PhysicalTestSuite('svg', ['--force-compositing-mode']), PhysicalTestSuite('fast/text', ['--enable-direct-write', '--enable-font-antialiasing']), + PhysicalTestSuite('hdr', ['--force-color-profile=scrgb-linear']), ] def virtual_test_suites(self):
diff --git a/third_party/WebKit/public/platform/WebFeaturePolicyFeature.h b/third_party/WebKit/public/platform/WebFeaturePolicyFeature.h index 2c271ba5..9e4e5f3c 100644 --- a/third_party/WebKit/public/platform/WebFeaturePolicyFeature.h +++ b/third_party/WebKit/public/platform/WebFeaturePolicyFeature.h
@@ -45,9 +45,7 @@ kSyncXHR, // Controls access to the WebUSB API. kUsb, - // Controls access to AOM event listeners. - kAccessibilityEvents, - LAST_FEATURE = kAccessibilityEvents + LAST_FEATURE = kUsb }; } // namespace blink
diff --git a/third_party/WebKit/public/platform/modules/permissions/permission.mojom b/third_party/WebKit/public/platform/modules/permissions/permission.mojom index 37dc9ea..7f23845 100644 --- a/third_party/WebKit/public/platform/modules/permissions/permission.mojom +++ b/third_party/WebKit/public/platform/modules/permissions/permission.mojom
@@ -18,7 +18,6 @@ VIDEO_CAPTURE, BACKGROUND_SYNC, SENSORS, - ACCESSIBILITY_EVENTS, }; struct MidiPermissionDescriptor {
diff --git a/third_party/android_support_test_runner/rules_java.info b/third_party/android_support_test_runner/rules_java.info deleted file mode 100644 index 28c8330..0000000 --- a/third_party/android_support_test_runner/rules_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = true -is_manifest_empty = true -resources = [ "res/values/values.xml" ] -subjar_tuples = [ ] -subjars = [ ]
diff --git a/third_party/blink/OWNERS b/third_party/blink/OWNERS new file mode 100644 index 0000000..d15ff88 --- /dev/null +++ b/third_party/blink/OWNERS
@@ -0,0 +1 @@ +file://third_party/WebKit/OWNERS
diff --git a/third_party/blink/tools/OWNERS b/third_party/blink/tools/OWNERS new file mode 100644 index 0000000..bc159e2 --- /dev/null +++ b/third_party/blink/tools/OWNERS
@@ -0,0 +1 @@ +file://third_party/WebKit/Tools/OWNERS
diff --git a/third_party/gvr-android-sdk/controller_test_api_java.info b/third_party/gvr-android-sdk/controller_test_api_java.info deleted file mode 100644 index a2ebd4a..0000000 --- a/third_party/gvr-android-sdk/controller_test_api_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = false -is_manifest_empty = true -resources = [ ] -subjar_tuples = [ ] -subjars = [ ]
diff --git a/third_party/gvr-android-sdk/gvr_common_java.info b/third_party/gvr-android-sdk/gvr_common_java.info deleted file mode 100644 index aacf1d9..0000000 --- a/third_party/gvr-android-sdk/gvr_common_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = true -is_manifest_empty = true -resources = [ "res/drawable-hdpi-v4/quantum_ic_close_white_24.png", "res/drawable-hdpi-v4/quantum_ic_settings_white_24.png", "res/drawable-hdpi-v4/transition.png", "res/drawable-mdpi-v4/quantum_ic_close_white_24.png", "res/drawable-mdpi-v4/quantum_ic_settings_white_24.png", "res/drawable-mdpi-v4/transition.png", "res/drawable-v21/rippleable.xml", "res/drawable-xhdpi-v4/quantum_ic_close_white_24.png", "res/drawable-xhdpi-v4/quantum_ic_settings_white_24.png", "res/drawable-xxhdpi-v4/quantum_ic_close_white_24.png", "res/drawable-xxhdpi-v4/quantum_ic_settings_white_24.png", "res/drawable-xxxhdpi-v4/quantum_ic_close_white_24.png", "res/drawable-xxxhdpi-v4/quantum_ic_settings_white_24.png", "res/drawable/rippleable.xml", "res/layout-land/back_button.xml", "res/layout-land/settings_button.xml", "res/layout-land/ui_layer_with_portrait_support.xml", "res/layout-ldrtl-land-v17/back_button.xml", "res/layout-ldrtl-land-v17/settings_button.xml", "res/layout-ldrtl-v17/back_button.xml", "res/layout-ldrtl-v17/settings_button.xml", "res/layout/back_button.xml", "res/layout/settings_button.xml", "res/layout/transition_view.xml", "res/layout/ui_layer.xml", "res/layout/ui_layer_with_portrait_support.xml", "res/values-ar/values.xml", "res/values-bg/values.xml", "res/values-ca/values.xml", "res/values-cs/values.xml", "res/values-da/values.xml", "res/values-de/values.xml", "res/values-el/values.xml", "res/values-en-rGB/values.xml", "res/values-es-rUS/values.xml", "res/values-es/values.xml", "res/values-fa/values.xml", "res/values-fi/values.xml", "res/values-fr-rCA/values.xml", "res/values-fr/values.xml", "res/values-hi/values.xml", "res/values-hr/values.xml", "res/values-hu/values.xml", "res/values-id/values.xml", "res/values-it/values.xml", "res/values-iw/values.xml", "res/values-ja/values.xml", "res/values-ko/values.xml", "res/values-land/values.xml", "res/values-lt/values.xml", "res/values-lv/values.xml", "res/values-nl/values.xml", "res/values-no/values.xml", "res/values-pl/values.xml", "res/values-pt-rBR/values.xml", "res/values-pt-rPT/values.xml", "res/values-ro/values.xml", "res/values-ru/values.xml", "res/values-sk/values.xml", "res/values-sl/values.xml", "res/values-sr/values.xml", "res/values-sv/values.xml", "res/values-th/values.xml", "res/values-tl/values.xml", "res/values-tr/values.xml", "res/values-uk/values.xml", "res/values-v19/values.xml", "res/values-v21/values.xml", "res/values-vi/values.xml", "res/values-zh-rCN/values.xml", "res/values-zh-rTW/values.xml", "res/values/values.xml" ] -subjar_tuples = [ ] -subjars = [ ]
diff --git a/third_party/gvr-android-sdk/gvr_controller_java.info b/third_party/gvr-android-sdk/gvr_controller_java.info deleted file mode 100644 index a2ebd4a..0000000 --- a/third_party/gvr-android-sdk/gvr_controller_java.info +++ /dev/null
@@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = false -is_manifest_empty = true -resources = [ ] -subjar_tuples = [ ] -subjars = [ ]
diff --git a/third_party/zlib/0003-arm-inffast.patch b/third_party/zlib/0003-arm-inffast.patch deleted file mode 100644 index 9f758c8..0000000 --- a/third_party/zlib/0003-arm-inffast.patch +++ /dev/null
@@ -1,2248 +0,0 @@ -From 1ca9400d89deb0fd8d234cd02c9fd9359dad7a9e Mon Sep 17 00:00:00 2001 -From: Adenilson Cavalcanti <adenilson.cavalcanti@arm.com> -Date: Fri, 11 Aug 2017 15:37:44 -0700 -Subject: [PATCH] zlib: inflate using wider loads and stores - -In inflate_fast() the output pointer always has plenty of room to write. This -means that so long as the target is capable, wide un-aligned loads and stores -can be used to transfer several bytes at once. - -When the reference distance is too short simply unroll the data a little to -increase the distance. Patch by Simon Rosie. - -BUG=697280 -Change-Id: I59854eb25d2b1e43561c8a2afaf9175bf10cf674 ---- - third_party/zlib/BUILD.gn | 18 + - third_party/zlib/README.chromium | 1 + - third_party/zlib/contrib/arm/chunkcopy.h | 279 ++++++ - third_party/zlib/contrib/arm/inffast.c | 307 ++++++ - third_party/zlib/contrib/arm/inflate.c | 1571 ++++++++++++++++++++++++++++++ - 5 files changed, 2176 insertions(+) - create mode 100644 third_party/zlib/contrib/arm/chunkcopy.h - create mode 100644 third_party/zlib/contrib/arm/inffast.c - create mode 100644 third_party/zlib/contrib/arm/inflate.c - -diff --git a/third_party/zlib/BUILD.gn b/third_party/zlib/BUILD.gn -index 4b4db15..8c57ad4 100644 ---- a/third_party/zlib/BUILD.gn -+++ b/third_party/zlib/BUILD.gn -@@ -2,6 +2,10 @@ - # Use of this source code is governed by a BSD-style license that can be - # found in the LICENSE file. - -+if (current_cpu == "arm" || current_cpu == "arm64") { -+ import("//build/config/arm.gni") -+} -+ - config("zlib_config") { - include_dirs = [ "." ] - } -@@ -71,6 +75,20 @@ static_library("zlib") { - "zutil.h", - ] - -+ if (current_cpu == "arm" || current_cpu == "arm64") { -+ if (arm_use_neon) { -+ sources -= [ -+ "inflate.c", -+ "inffast.c", -+ ] -+ sources += [ -+ "contrib/arm/inflate.c", -+ "contrib/arm/inffast.c", -+ "contrib/arm/chunkcopy.h", -+ ] -+ } -+ } -+ - if (!is_ios && (current_cpu == "x86" || current_cpu == "x64")) { - sources += [ "x86.c" ] - } -diff --git a/third_party/zlib/README.chromium b/third_party/zlib/README.chromium -index 8658580..ff5c6ab 100644 ---- a/third_party/zlib/README.chromium -+++ b/third_party/zlib/README.chromium -@@ -28,3 +28,4 @@ Local Modifications: - https://github.com/jtkukunas/zlib/ - - 0002-uninitializedcheck.patch: default-initialize state->check, see - crbug.com/697481 -+ - 0003-arm-inffast.patch: ARM optimized inflate using NEON. -diff --git a/third_party/zlib/contrib/arm/chunkcopy.h b/third_party/zlib/contrib/arm/chunkcopy.h -new file mode 100644 -index 0000000..2d6fd6f ---- /dev/null -+++ b/third_party/zlib/contrib/arm/chunkcopy.h -@@ -0,0 +1,279 @@ -+/* chunkcopy.h -- fast copies and sets -+ * Copyright (C) 2017 ARM, Inc. -+ * For conditions of distribution and use, see copyright notice in zlib.h -+ */ -+ -+#ifndef CHUNKCOPY_H -+#define CHUNKCOPY_H -+ -+#include "zutil.h" -+#include <arm_neon.h> -+ -+#if __STDC_VERSION__ >= 199901L -+#define Z_RESTRICT restrict -+#else -+#define Z_RESTRICT -+#endif -+ -+typedef uint8x16_t chunkcopy_chunk_t; -+#define CHUNKCOPY_CHUNK_SIZE sizeof(chunkcopy_chunk_t) -+ -+/* -+ Ask the compiler to perform a wide, unaligned load with an machine -+ instruction appropriate for the chunkcopy_chunk_t type. -+ */ -+static inline chunkcopy_chunk_t loadchunk(const unsigned char FAR *s) { -+ chunkcopy_chunk_t c; -+ __builtin_memcpy(&c, s, sizeof(c)); -+ return c; -+} -+ -+/* -+ Ask the compiler to perform a wide, unaligned store with an machine -+ instruction appropriate for the chunkcopy_chunk_t type. -+ */ -+static inline void storechunk(unsigned char FAR *d, chunkcopy_chunk_t c) { -+ __builtin_memcpy(d, &c, sizeof(c)); -+} -+ -+/* -+ Perform a memcpy-like operation, but assume that length is non-zero and that -+ it's OK to overwrite at least CHUNKCOPY_CHUNK_SIZE bytes of output even if -+ the length is shorter than this. -+ -+ It also guarantees that it will properly unroll the data if the distance -+ between `out` and `from` is at least CHUNKCOPY_CHUNK_SIZE, which we rely on -+ in chunkcopy_relaxed(). -+ -+ Aside from better memory bus utilisation, this means that short copies -+ (CHUNKCOPY_CHUNK_SIZE bytes or fewer) will fall straight through the loop -+ without iteration, which will hopefully make the branch prediction more -+ reliable. -+ */ -+static inline unsigned char FAR *chunkcopy_core(unsigned char FAR *out, -+ const unsigned char FAR *from, -+ unsigned len) { -+ int bump = (--len % CHUNKCOPY_CHUNK_SIZE) + 1; -+ storechunk(out, loadchunk(from)); -+ out += bump; -+ from += bump; -+ len /= CHUNKCOPY_CHUNK_SIZE; -+ while (len-- > 0) { -+ storechunk(out, loadchunk(from)); -+ out += CHUNKCOPY_CHUNK_SIZE; -+ from += CHUNKCOPY_CHUNK_SIZE; -+ } -+ return out; -+} -+ -+/* -+ Like chunkcopy_core, but avoid writing beyond of legal output. -+ -+ Accepts an additional pointer to the end of safe output. A generic safe -+ copy would use (out + len), but it's normally the case that the end of the -+ output buffer is beyond the end of the current copy, and this can still be -+ exploited. -+ */ -+static inline unsigned char FAR *chunkcopy_core_safe(unsigned char FAR *out, -+ const unsigned char FAR * from, -+ unsigned len, -+ unsigned char FAR *limit) { -+ Assert(out + len <= limit, "chunk copy exceeds safety limit"); -+ if (limit - out < CHUNKCOPY_CHUNK_SIZE) { -+ const unsigned char FAR * Z_RESTRICT rfrom = from; -+ if (len & 8) { __builtin_memcpy(out, rfrom, 8); out += 8; rfrom += 8; } -+ if (len & 4) { __builtin_memcpy(out, rfrom, 4); out += 4; rfrom += 4; } -+ if (len & 2) { __builtin_memcpy(out, rfrom, 2); out += 2; rfrom += 2; } -+ if (len & 1) { *out++ = *rfrom++; } -+ return out; -+ } -+ return chunkcopy_core(out, from, len); -+} -+ -+/* -+ Perform short copies until distance can be rewritten as being at least -+ CHUNKCOPY_CHUNK_SIZE. -+ -+ This assumes that it's OK to overwrite at least the first -+ 2*CHUNKCOPY_CHUNK_SIZE bytes of output even if the copy is shorter than -+ this. This assumption holds within inflate_fast() which starts every -+ iteration with at least 258 bytes of output space available (258 being the -+ maximum length output from a single token; see inffast.c). -+ */ -+static inline unsigned char FAR *chunkunroll_relaxed(unsigned char FAR *out, -+ unsigned FAR *dist, -+ unsigned FAR *len) { -+ const unsigned char FAR *from = out - *dist; -+ while (*dist < *len && *dist < CHUNKCOPY_CHUNK_SIZE) { -+ storechunk(out, loadchunk(from)); -+ out += *dist; -+ *len -= *dist; -+ *dist += *dist; -+ } -+ return out; -+} -+ -+ -+static inline uint8x16_t chunkset_vld1q_dup_u8x8(const unsigned char FAR * Z_RESTRICT from) { -+#if defined(__clang__) || defined(__aarch64__) -+ return vreinterpretq_u8_u64(vld1q_dup_u64((void *)from)); -+#else -+ /* 32-bit GCC uses an alignment hint for vld1q_dup_u64, even when given a -+ * void pointer, so here's an alternate implementation. -+ */ -+ uint8x8_t h = vld1_u8(from); -+ return vcombine_u8(h, h); -+#endif -+} -+ -+/* -+ Perform an overlapping copy which behaves as a memset() operation, but -+ supporting periods other than one, and assume that length is non-zero and -+ that it's OK to overwrite at least CHUNKCOPY_CHUNK_SIZE*3 bytes of output -+ even if the length is shorter than this. -+ */ -+static inline unsigned char FAR *chunkset_core(unsigned char FAR *out, -+ unsigned period, -+ unsigned len) { -+ uint8x16_t f; -+ int bump = ((len - 1) % sizeof(f)) + 1; -+ -+ switch (period) { -+ case 1: -+ f = vld1q_dup_u8(out - 1); -+ vst1q_u8(out, f); -+ out += bump; -+ len -= bump; -+ while (len > 0) { -+ vst1q_u8(out, f); -+ out += sizeof(f); -+ len -= sizeof(f); -+ } -+ return out; -+ case 2: -+ f = vreinterpretq_u8_u16(vld1q_dup_u16((void *)(out - 2))); -+ vst1q_u8(out, f); -+ out += bump; -+ len -= bump; -+ if (len > 0) { -+ f = vreinterpretq_u8_u16(vld1q_dup_u16((void *)(out - 2))); -+ do { -+ vst1q_u8(out, f); -+ out += sizeof(f); -+ len -= sizeof(f); -+ } while (len > 0); -+ } -+ return out; -+ case 4: -+ f = vreinterpretq_u8_u32(vld1q_dup_u32((void *)(out - 4))); -+ vst1q_u8(out, f); -+ out += bump; -+ len -= bump; -+ if (len > 0) { -+ f = vreinterpretq_u8_u32(vld1q_dup_u32((void *)(out - 4))); -+ do { -+ vst1q_u8(out, f); -+ out += sizeof(f); -+ len -= sizeof(f); -+ } while (len > 0); -+ } -+ return out; -+ case 8: -+ f = chunkset_vld1q_dup_u8x8(out - 8); -+ vst1q_u8(out, f); -+ out += bump; -+ len -= bump; -+ if (len > 0) { -+ f = chunkset_vld1q_dup_u8x8(out - 8); -+ do { -+ vst1q_u8(out, f); -+ out += sizeof(f); -+ len -= sizeof(f); -+ } while (len > 0); -+ } -+ return out; -+ } -+ out = chunkunroll_relaxed(out, &period, &len); -+ return chunkcopy_core(out, out - period, len); -+} -+ -+/* -+ Perform a memcpy-like operation, but assume that length is non-zero and that -+ it's OK to overwrite at least CHUNKCOPY_CHUNK_SIZE bytes of output even if -+ the length is shorter than this. -+ -+ Unlike chunkcopy_core() above, no guarantee is made regarding the behaviour -+ of overlapping buffers, regardless of the distance between the pointers. -+ This is reflected in the `restrict`-qualified pointers, allowing the -+ compiler to reorder loads and stores. -+ */ -+static inline unsigned char FAR *chunkcopy_relaxed(unsigned char FAR * Z_RESTRICT out, -+ const unsigned char FAR * Z_RESTRICT from, -+ unsigned len) { -+ return chunkcopy_core(out, from, len); -+} -+ -+/* -+ Like chunkcopy_relaxed, but avoid writing beyond of legal output. -+ -+ Unlike chunkcopy_core_safe() above, no guarantee is made regarding the -+ behaviour of overlapping buffers, regardless of the distance between the -+ pointers. This is reflected in the `restrict`-qualified pointers, allowing -+ the compiler to reorder loads and stores. -+ -+ Accepts an additional pointer to the end of safe output. A generic safe -+ copy would use (out + len), but it's normally the case that the end of the -+ output buffer is beyond the end of the current copy, and this can still be -+ exploited. -+ */ -+static inline unsigned char FAR *chunkcopy_safe(unsigned char FAR *out, -+ const unsigned char FAR * Z_RESTRICT from, -+ unsigned len, -+ unsigned char FAR *limit) { -+ Assert(out + len <= limit, "chunk copy exceeds safety limit"); -+ return chunkcopy_core_safe(out, from, len, limit); -+} -+ -+/* -+ Perform chunky copy within the same buffer, where the source and destination -+ may potentially overlap. -+ -+ Assumes that len > 0 on entry, and that it's safe to write at least -+ CHUNKCOPY_CHUNK_SIZE*3 bytes to the output. -+ */ -+static inline unsigned char FAR *chunkcopy_lapped_relaxed(unsigned char FAR *out, -+ unsigned dist, -+ unsigned len) { -+ if (dist < len && dist < CHUNKCOPY_CHUNK_SIZE) { -+ return chunkset_core(out, dist, len); -+ } -+ return chunkcopy_core(out, out - dist, len); -+} -+ -+/* -+ Behave like chunkcopy_lapped_relaxed, but avoid writing beyond of legal output. -+ -+ Accepts an additional pointer to the end of safe output. A generic safe -+ copy would use (out + len), but it's normally the case that the end of the -+ output buffer is beyond the end of the current copy, and this can still be -+ exploited. -+ */ -+static inline unsigned char FAR *chunkcopy_lapped_safe(unsigned char FAR *out, -+ unsigned dist, -+ unsigned len, -+ unsigned char FAR *limit) { -+ Assert(out + len <= limit, "chunk copy exceeds safety limit"); -+ if (limit - out < CHUNKCOPY_CHUNK_SIZE * 3) { -+ /* TODO: try harder to optimise this */ -+ while (len-- > 0) { -+ *out = *(out - dist); -+ out++; -+ } -+ return out; -+ } -+ return chunkcopy_lapped_relaxed(out, dist, len); -+} -+ -+#undef Z_RESTRICT -+ -+#endif /* CHUNKCOPY_H */ -diff --git a/third_party/zlib/contrib/arm/inffast.c b/third_party/zlib/contrib/arm/inffast.c -new file mode 100644 -index 0000000..f7f5007 ---- /dev/null -+++ b/third_party/zlib/contrib/arm/inffast.c -@@ -0,0 +1,307 @@ -+/* inffast.c -- fast decoding -+ * Copyright (C) 1995-2017 Mark Adler -+ * For conditions of distribution and use, see copyright notice in zlib.h -+ */ -+ -+#include "zutil.h" -+#include "inftrees.h" -+#include "inflate.h" -+#include "inffast.h" -+#include "chunkcopy.h" -+ -+#ifdef ASMINF -+# pragma message("Assembler code may have bugs -- use at your own risk") -+#else -+ -+/* -+ Decode literal, length, and distance codes and write out the resulting -+ literal and match bytes until either not enough input or output is -+ available, an end-of-block is encountered, or a data error is encountered. -+ When large enough input and output buffers are supplied to inflate(), for -+ example, a 16K input buffer and a 64K output buffer, more than 95% of the -+ inflate execution time is spent in this routine. -+ -+ Entry assumptions: -+ -+ state->mode == LEN -+ strm->avail_in >= 6 -+ strm->avail_out >= 258 -+ start >= strm->avail_out -+ state->bits < 8 -+ -+ On return, state->mode is one of: -+ -+ LEN -- ran out of enough output space or enough available input -+ TYPE -- reached end of block code, inflate() to interpret next block -+ BAD -- error in block data -+ -+ Notes: -+ -+ - The maximum input bits used by a length/distance pair is 15 bits for the -+ length code, 5 bits for the length extra, 15 bits for the distance code, -+ and 13 bits for the distance extra. This totals 48 bits, or six bytes. -+ Therefore if strm->avail_in >= 6, then there is enough input to avoid -+ checking for available input while decoding. -+ -+ - The maximum bytes that a single length/distance pair can output is 258 -+ bytes, which is the maximum length that can be coded. inflate_fast() -+ requires strm->avail_out >= 258 for each loop to avoid checking for -+ output space. -+ */ -+void ZLIB_INTERNAL inflate_fast(strm, start) -+z_streamp strm; -+unsigned start; /* inflate()'s starting value for strm->avail_out */ -+{ -+ struct inflate_state FAR *state; -+ z_const unsigned char FAR *in; /* local strm->next_in */ -+ z_const unsigned char FAR *last; /* have enough input while in < last */ -+ unsigned char FAR *out; /* local strm->next_out */ -+ unsigned char FAR *beg; /* inflate()'s initial strm->next_out */ -+ unsigned char FAR *end; /* while out < end, enough space available */ -+ unsigned char FAR *limit; /* safety limit for chunky copies */ -+#ifdef INFLATE_STRICT -+ unsigned dmax; /* maximum distance from zlib header */ -+#endif -+ unsigned wsize; /* window size or zero if not using window */ -+ unsigned whave; /* valid bytes in the window */ -+ unsigned wnext; /* window write index */ -+ unsigned char FAR *window; /* allocated sliding window, if wsize != 0 */ -+ unsigned long hold; /* local strm->hold */ -+ unsigned bits; /* local strm->bits */ -+ code const FAR *lcode; /* local strm->lencode */ -+ code const FAR *dcode; /* local strm->distcode */ -+ unsigned lmask; /* mask for first level of length codes */ -+ unsigned dmask; /* mask for first level of distance codes */ -+ code here; /* retrieved table entry */ -+ unsigned op; /* code bits, operation, extra bits, or */ -+ /* window position, window bytes to copy */ -+ unsigned len; /* match length, unused bytes */ -+ unsigned dist; /* match distance */ -+ unsigned char FAR *from; /* where to copy match from */ -+ -+ /* copy state to local variables */ -+ state = (struct inflate_state FAR *)strm->state; -+ in = strm->next_in; -+ last = in + (strm->avail_in - 5); -+ out = strm->next_out; -+ beg = out - (start - strm->avail_out); -+ end = out + (strm->avail_out - 257); -+ limit = out + strm->avail_out; -+#ifdef INFLATE_STRICT -+ dmax = state->dmax; -+#endif -+ wsize = state->wsize; -+ whave = state->whave; -+ wnext = (state->wnext == 0 && whave >= wsize) ? wsize : state->wnext; -+ window = state->window; -+ hold = state->hold; -+ bits = state->bits; -+ lcode = state->lencode; -+ dcode = state->distcode; -+ lmask = (1U << state->lenbits) - 1; -+ dmask = (1U << state->distbits) - 1; -+ -+ /* decode literals and length/distances until end-of-block or not enough -+ input data or output space */ -+ do { -+ if (bits < 15) { -+ hold += (unsigned long)(*in++) << bits; -+ bits += 8; -+ hold += (unsigned long)(*in++) << bits; -+ bits += 8; -+ } -+ here = lcode[hold & lmask]; -+ dolen: -+ op = (unsigned)(here.bits); -+ hold >>= op; -+ bits -= op; -+ op = (unsigned)(here.op); -+ if (op == 0) { /* literal */ -+ Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? -+ "inflate: literal '%c'\n" : -+ "inflate: literal 0x%02x\n", here.val)); -+ *out++ = (unsigned char)(here.val); -+ } -+ else if (op & 16) { /* length base */ -+ len = (unsigned)(here.val); -+ op &= 15; /* number of extra bits */ -+ if (op) { -+ if (bits < op) { -+ hold += (unsigned long)(*in++) << bits; -+ bits += 8; -+ } -+ len += (unsigned)hold & ((1U << op) - 1); -+ hold >>= op; -+ bits -= op; -+ } -+ Tracevv((stderr, "inflate: length %u\n", len)); -+ if (bits < 15) { -+ hold += (unsigned long)(*in++) << bits; -+ bits += 8; -+ hold += (unsigned long)(*in++) << bits; -+ bits += 8; -+ } -+ here = dcode[hold & dmask]; -+ dodist: -+ op = (unsigned)(here.bits); -+ hold >>= op; -+ bits -= op; -+ op = (unsigned)(here.op); -+ if (op & 16) { /* distance base */ -+ dist = (unsigned)(here.val); -+ op &= 15; /* number of extra bits */ -+ if (bits < op) { -+ hold += (unsigned long)(*in++) << bits; -+ bits += 8; -+ if (bits < op) { -+ hold += (unsigned long)(*in++) << bits; -+ bits += 8; -+ } -+ } -+ dist += (unsigned)hold & ((1U << op) - 1); -+#ifdef INFLATE_STRICT -+ if (dist > dmax) { -+ strm->msg = (char *)"invalid distance too far back"; -+ state->mode = BAD; -+ break; -+ } -+#endif -+ hold >>= op; -+ bits -= op; -+ Tracevv((stderr, "inflate: distance %u\n", dist)); -+ op = (unsigned)(out - beg); /* max distance in output */ -+ if (dist > op) { /* see if copy from window */ -+ op = dist - op; /* distance back in window */ -+ if (op > whave) { -+ if (state->sane) { -+ strm->msg = -+ (char *)"invalid distance too far back"; -+ state->mode = BAD; -+ break; -+ } -+#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR -+ if (len <= op - whave) { -+ do { -+ *out++ = 0; -+ } while (--len); -+ continue; -+ } -+ len -= op - whave; -+ do { -+ *out++ = 0; -+ } while (--op > whave); -+ if (op == 0) { -+ from = out - dist; -+ do { -+ *out++ = *from++; -+ } while (--len); -+ continue; -+ } -+#endif -+ } -+ from = window; -+ if (wnext >= op) { /* contiguous in window */ -+ from += wnext - op; -+ } -+ else { /* wrap around window */ -+ op -= wnext; -+ from += wsize - op; -+ if (op < len) { /* some from end of window */ -+ len -= op; -+ out = chunkcopy_safe(out, from, op, limit); -+ from = window; /* more from start of window */ -+ op = wnext; -+ /* This (rare) case can create a situation where -+ the first chunkcopy below must be checked. -+ */ -+ } -+ } -+ if (op < len) { /* still need some from output */ -+ out = chunkcopy_safe(out, from, op, limit); -+ len -= op; -+ /* When dist is small the amount of data that can be -+ copied from the window is also small, and progress -+ towards the dangerous end of the output buffer is -+ also small. This means that for trivial memsets and -+ for chunkunroll_relaxed() a safety check is -+ unnecessary. However, these conditions may not be -+ entered at all, and in that case it's possible that -+ the main copy is near the end. -+ */ -+ out = chunkunroll_relaxed(out, &dist, &len); -+ out = chunkcopy_safe(out, out - dist, len, limit); -+ } else { -+ /* from points to window, so there is no risk of -+ overlapping pointers requiring memset-like behaviour -+ */ -+ out = chunkcopy_safe(out, from, len, limit); -+ } -+ } -+ else { -+ /* Whole reference is in range of current output. No -+ range checks are necessary because we start with room -+ for at least 258 bytes of output, so unroll and roundoff -+ operations can write beyond `out+len` so long as they -+ stay within 258 bytes of `out`. -+ */ -+ out = chunkcopy_lapped_relaxed(out, dist, len); -+ } -+ } -+ else if ((op & 64) == 0) { /* 2nd level distance code */ -+ here = dcode[here.val + (hold & ((1U << op) - 1))]; -+ goto dodist; -+ } -+ else { -+ strm->msg = (char *)"invalid distance code"; -+ state->mode = BAD; -+ break; -+ } -+ } -+ else if ((op & 64) == 0) { /* 2nd level length code */ -+ here = lcode[here.val + (hold & ((1U << op) - 1))]; -+ goto dolen; -+ } -+ else if (op & 32) { /* end-of-block */ -+ Tracevv((stderr, "inflate: end of block\n")); -+ state->mode = TYPE; -+ break; -+ } -+ else { -+ strm->msg = (char *)"invalid literal/length code"; -+ state->mode = BAD; -+ break; -+ } -+ } while (in < last && out < end); -+ -+ /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ -+ len = bits >> 3; -+ in -= len; -+ bits -= len << 3; -+ hold &= (1U << bits) - 1; -+ -+ /* update state and return */ -+ strm->next_in = in; -+ strm->next_out = out; -+ strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last)); -+ strm->avail_out = (unsigned)(out < end ? -+ 257 + (end - out) : 257 - (out - end)); -+ state->hold = hold; -+ state->bits = bits; -+ return; -+} -+ -+/* -+ inflate_fast() speedups that turned out slower (on a PowerPC G3 750CXe): -+ - Using bit fields for code structure -+ - Different op definition to avoid & for extra bits (do & for table bits) -+ - Three separate decoding do-loops for direct, window, and wnext == 0 -+ - Special case for distance > 1 copies to do overlapped load and store copy -+ - Explicit branch predictions (based on measured branch probabilities) -+ - Deferring match copy and interspersed it with decoding subsequent codes -+ - Swapping literal/length else -+ - Swapping window/direct else -+ - Larger unrolled copy loops (three is about right) -+ - Moving len -= 3 statement into middle of loop -+ */ -+ -+#endif /* !ASMINF */ -diff --git a/third_party/zlib/contrib/arm/inflate.c b/third_party/zlib/contrib/arm/inflate.c -new file mode 100644 -index 0000000..e40322c ---- /dev/null -+++ b/third_party/zlib/contrib/arm/inflate.c -@@ -0,0 +1,1571 @@ -+/* inflate.c -- zlib decompression -+ * Copyright (C) 1995-2016 Mark Adler -+ * For conditions of distribution and use, see copyright notice in zlib.h -+ */ -+ -+/* -+ * Change history: -+ * -+ * 1.2.beta0 24 Nov 2002 -+ * - First version -- complete rewrite of inflate to simplify code, avoid -+ * creation of window when not needed, minimize use of window when it is -+ * needed, make inffast.c even faster, implement gzip decoding, and to -+ * improve code readability and style over the previous zlib inflate code -+ * -+ * 1.2.beta1 25 Nov 2002 -+ * - Use pointers for available input and output checking in inffast.c -+ * - Remove input and output counters in inffast.c -+ * - Change inffast.c entry and loop from avail_in >= 7 to >= 6 -+ * - Remove unnecessary second byte pull from length extra in inffast.c -+ * - Unroll direct copy to three copies per loop in inffast.c -+ * -+ * 1.2.beta2 4 Dec 2002 -+ * - Change external routine names to reduce potential conflicts -+ * - Correct filename to inffixed.h for fixed tables in inflate.c -+ * - Make hbuf[] unsigned char to match parameter type in inflate.c -+ * - Change strm->next_out[-state->offset] to *(strm->next_out - state->offset) -+ * to avoid negation problem on Alphas (64 bit) in inflate.c -+ * -+ * 1.2.beta3 22 Dec 2002 -+ * - Add comments on state->bits assertion in inffast.c -+ * - Add comments on op field in inftrees.h -+ * - Fix bug in reuse of allocated window after inflateReset() -+ * - Remove bit fields--back to byte structure for speed -+ * - Remove distance extra == 0 check in inflate_fast()--only helps for lengths -+ * - Change post-increments to pre-increments in inflate_fast(), PPC biased? -+ * - Add compile time option, POSTINC, to use post-increments instead (Intel?) -+ * - Make MATCH copy in inflate() much faster for when inflate_fast() not used -+ * - Use local copies of stream next and avail values, as well as local bit -+ * buffer and bit count in inflate()--for speed when inflate_fast() not used -+ * -+ * 1.2.beta4 1 Jan 2003 -+ * - Split ptr - 257 statements in inflate_table() to avoid compiler warnings -+ * - Move a comment on output buffer sizes from inffast.c to inflate.c -+ * - Add comments in inffast.c to introduce the inflate_fast() routine -+ * - Rearrange window copies in inflate_fast() for speed and simplification -+ * - Unroll last copy for window match in inflate_fast() -+ * - Use local copies of window variables in inflate_fast() for speed -+ * - Pull out common wnext == 0 case for speed in inflate_fast() -+ * - Make op and len in inflate_fast() unsigned for consistency -+ * - Add FAR to lcode and dcode declarations in inflate_fast() -+ * - Simplified bad distance check in inflate_fast() -+ * - Added inflateBackInit(), inflateBack(), and inflateBackEnd() in new -+ * source file infback.c to provide a call-back interface to inflate for -+ * programs like gzip and unzip -- uses window as output buffer to avoid -+ * window copying -+ * -+ * 1.2.beta5 1 Jan 2003 -+ * - Improved inflateBack() interface to allow the caller to provide initial -+ * input in strm. -+ * - Fixed stored blocks bug in inflateBack() -+ * -+ * 1.2.beta6 4 Jan 2003 -+ * - Added comments in inffast.c on effectiveness of POSTINC -+ * - Typecasting all around to reduce compiler warnings -+ * - Changed loops from while (1) or do {} while (1) to for (;;), again to -+ * make compilers happy -+ * - Changed type of window in inflateBackInit() to unsigned char * -+ * -+ * 1.2.beta7 27 Jan 2003 -+ * - Changed many types to unsigned or unsigned short to avoid warnings -+ * - Added inflateCopy() function -+ * -+ * 1.2.0 9 Mar 2003 -+ * - Changed inflateBack() interface to provide separate opaque descriptors -+ * for the in() and out() functions -+ * - Changed inflateBack() argument and in_func typedef to swap the length -+ * and buffer address return values for the input function -+ * - Check next_in and next_out for Z_NULL on entry to inflate() -+ * -+ * The history for versions after 1.2.0 are in ChangeLog in zlib distribution. -+ */ -+ -+#include "zutil.h" -+#include "inftrees.h" -+#include "inflate.h" -+#include "inffast.h" -+#include "contrib/arm/chunkcopy.h" -+ -+#ifdef MAKEFIXED -+# ifndef BUILDFIXED -+# define BUILDFIXED -+# endif -+#endif -+ -+/* function prototypes */ -+local int inflateStateCheck OF((z_streamp strm)); -+local void fixedtables OF((struct inflate_state FAR *state)); -+local int updatewindow OF((z_streamp strm, const unsigned char FAR *end, -+ unsigned copy)); -+#ifdef BUILDFIXED -+ void makefixed OF((void)); -+#endif -+local unsigned syncsearch OF((unsigned FAR *have, const unsigned char FAR *buf, -+ unsigned len)); -+ -+local int inflateStateCheck(strm) -+z_streamp strm; -+{ -+ struct inflate_state FAR *state; -+ if (strm == Z_NULL || -+ strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) -+ return 1; -+ state = (struct inflate_state FAR *)strm->state; -+ if (state == Z_NULL || state->strm != strm || -+ state->mode < HEAD || state->mode > SYNC) -+ return 1; -+ return 0; -+} -+ -+int ZEXPORT inflateResetKeep(strm) -+z_streamp strm; -+{ -+ struct inflate_state FAR *state; -+ -+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR; -+ state = (struct inflate_state FAR *)strm->state; -+ strm->total_in = strm->total_out = state->total = 0; -+ strm->msg = Z_NULL; -+ if (state->wrap) /* to support ill-conceived Java test suite */ -+ strm->adler = state->wrap & 1; -+ state->mode = HEAD; -+ state->last = 0; -+ state->havedict = 0; -+ state->dmax = 32768U; -+ state->head = Z_NULL; -+ state->hold = 0; -+ state->bits = 0; -+ state->lencode = state->distcode = state->next = state->codes; -+ state->sane = 1; -+ state->back = -1; -+ Tracev((stderr, "inflate: reset\n")); -+ return Z_OK; -+} -+ -+int ZEXPORT inflateReset(strm) -+z_streamp strm; -+{ -+ struct inflate_state FAR *state; -+ -+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR; -+ state = (struct inflate_state FAR *)strm->state; -+ state->wsize = 0; -+ state->whave = 0; -+ state->wnext = 0; -+ return inflateResetKeep(strm); -+} -+ -+int ZEXPORT inflateReset2(strm, windowBits) -+z_streamp strm; -+int windowBits; -+{ -+ int wrap; -+ struct inflate_state FAR *state; -+ -+ /* get the state */ -+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR; -+ state = (struct inflate_state FAR *)strm->state; -+ -+ /* extract wrap request from windowBits parameter */ -+ if (windowBits < 0) { -+ wrap = 0; -+ windowBits = -windowBits; -+ } -+ else { -+ wrap = (windowBits >> 4) + 5; -+#ifdef GUNZIP -+ if (windowBits < 48) -+ windowBits &= 15; -+#endif -+ } -+ -+ /* set number of window bits, free window if different */ -+ if (windowBits && (windowBits < 8 || windowBits > 15)) -+ return Z_STREAM_ERROR; -+ if (state->window != Z_NULL && state->wbits != (unsigned)windowBits) { -+ ZFREE(strm, state->window); -+ state->window = Z_NULL; -+ } -+ -+ /* update state and reset the rest of it */ -+ state->wrap = wrap; -+ state->wbits = (unsigned)windowBits; -+ return inflateReset(strm); -+} -+ -+int ZEXPORT inflateInit2_(strm, windowBits, version, stream_size) -+z_streamp strm; -+int windowBits; -+const char *version; -+int stream_size; -+{ -+ int ret; -+ struct inflate_state FAR *state; -+ -+ if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || -+ stream_size != (int)(sizeof(z_stream))) -+ return Z_VERSION_ERROR; -+ if (strm == Z_NULL) return Z_STREAM_ERROR; -+ strm->msg = Z_NULL; /* in case we return an error */ -+ if (strm->zalloc == (alloc_func)0) { -+#ifdef Z_SOLO -+ return Z_STREAM_ERROR; -+#else -+ strm->zalloc = zcalloc; -+ strm->opaque = (voidpf)0; -+#endif -+ } -+ if (strm->zfree == (free_func)0) -+#ifdef Z_SOLO -+ return Z_STREAM_ERROR; -+#else -+ strm->zfree = zcfree; -+#endif -+ state = (struct inflate_state FAR *) -+ ZALLOC(strm, 1, sizeof(struct inflate_state)); -+ if (state == Z_NULL) return Z_MEM_ERROR; -+ Tracev((stderr, "inflate: allocated\n")); -+ strm->state = (struct internal_state FAR *)state; -+ state->strm = strm; -+ state->window = Z_NULL; -+ state->mode = HEAD; /* to pass state test in inflateReset2() */ -+ ret = inflateReset2(strm, windowBits); -+ if (ret != Z_OK) { -+ ZFREE(strm, state); -+ strm->state = Z_NULL; -+ } -+ return ret; -+} -+ -+int ZEXPORT inflateInit_(strm, version, stream_size) -+z_streamp strm; -+const char *version; -+int stream_size; -+{ -+ return inflateInit2_(strm, DEF_WBITS, version, stream_size); -+} -+ -+int ZEXPORT inflatePrime(strm, bits, value) -+z_streamp strm; -+int bits; -+int value; -+{ -+ struct inflate_state FAR *state; -+ -+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR; -+ state = (struct inflate_state FAR *)strm->state; -+ if (bits < 0) { -+ state->hold = 0; -+ state->bits = 0; -+ return Z_OK; -+ } -+ if (bits > 16 || state->bits + (uInt)bits > 32) return Z_STREAM_ERROR; -+ value &= (1L << bits) - 1; -+ state->hold += (unsigned)value << state->bits; -+ state->bits += (uInt)bits; -+ return Z_OK; -+} -+ -+/* -+ Return state with length and distance decoding tables and index sizes set to -+ fixed code decoding. Normally this returns fixed tables from inffixed.h. -+ If BUILDFIXED is defined, then instead this routine builds the tables the -+ first time it's called, and returns those tables the first time and -+ thereafter. This reduces the size of the code by about 2K bytes, in -+ exchange for a little execution time. However, BUILDFIXED should not be -+ used for threaded applications, since the rewriting of the tables and virgin -+ may not be thread-safe. -+ */ -+local void fixedtables(state) -+struct inflate_state FAR *state; -+{ -+#ifdef BUILDFIXED -+ static int virgin = 1; -+ static code *lenfix, *distfix; -+ static code fixed[544]; -+ -+ /* build fixed huffman tables if first call (may not be thread safe) */ -+ if (virgin) { -+ unsigned sym, bits; -+ static code *next; -+ -+ /* literal/length table */ -+ sym = 0; -+ while (sym < 144) state->lens[sym++] = 8; -+ while (sym < 256) state->lens[sym++] = 9; -+ while (sym < 280) state->lens[sym++] = 7; -+ while (sym < 288) state->lens[sym++] = 8; -+ next = fixed; -+ lenfix = next; -+ bits = 9; -+ inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work); -+ -+ /* distance table */ -+ sym = 0; -+ while (sym < 32) state->lens[sym++] = 5; -+ distfix = next; -+ bits = 5; -+ inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work); -+ -+ /* do this just once */ -+ virgin = 0; -+ } -+#else /* !BUILDFIXED */ -+# include "inffixed.h" -+#endif /* BUILDFIXED */ -+ state->lencode = lenfix; -+ state->lenbits = 9; -+ state->distcode = distfix; -+ state->distbits = 5; -+} -+ -+#ifdef MAKEFIXED -+#include <stdio.h> -+ -+/* -+ Write out the inffixed.h that is #include'd above. Defining MAKEFIXED also -+ defines BUILDFIXED, so the tables are built on the fly. makefixed() writes -+ those tables to stdout, which would be piped to inffixed.h. A small program -+ can simply call makefixed to do this: -+ -+ void makefixed(void); -+ -+ int main(void) -+ { -+ makefixed(); -+ return 0; -+ } -+ -+ Then that can be linked with zlib built with MAKEFIXED defined and run: -+ -+ a.out > inffixed.h -+ */ -+void makefixed() -+{ -+ unsigned low, size; -+ struct inflate_state state; -+ -+ fixedtables(&state); -+ puts(" /* inffixed.h -- table for decoding fixed codes"); -+ puts(" * Generated automatically by makefixed()."); -+ puts(" */"); -+ puts(""); -+ puts(" /* WARNING: this file should *not* be used by applications."); -+ puts(" It is part of the implementation of this library and is"); -+ puts(" subject to change. Applications should only use zlib.h."); -+ puts(" */"); -+ puts(""); -+ size = 1U << 9; -+ printf(" static const code lenfix[%u] = {", size); -+ low = 0; -+ for (;;) { -+ if ((low % 7) == 0) printf("\n "); -+ printf("{%u,%u,%d}", (low & 127) == 99 ? 64 : state.lencode[low].op, -+ state.lencode[low].bits, state.lencode[low].val); -+ if (++low == size) break; -+ putchar(','); -+ } -+ puts("\n };"); -+ size = 1U << 5; -+ printf("\n static const code distfix[%u] = {", size); -+ low = 0; -+ for (;;) { -+ if ((low % 6) == 0) printf("\n "); -+ printf("{%u,%u,%d}", state.distcode[low].op, state.distcode[low].bits, -+ state.distcode[low].val); -+ if (++low == size) break; -+ putchar(','); -+ } -+ puts("\n };"); -+} -+#endif /* MAKEFIXED */ -+ -+/* -+ Update the window with the last wsize (normally 32K) bytes written before -+ returning. If window does not exist yet, create it. This is only called -+ when a window is already in use, or when output has been written during this -+ inflate call, but the end of the deflate stream has not been reached yet. -+ It is also called to create a window for dictionary data when a dictionary -+ is loaded. -+ -+ Providing output buffers larger than 32K to inflate() should provide a speed -+ advantage, since only the last 32K of output is copied to the sliding window -+ upon return from inflate(), and since all distances after the first 32K of -+ output will fall in the output data, making match copies simpler and faster. -+ The advantage may be dependent on the size of the processor's data caches. -+ */ -+local int updatewindow(strm, end, copy) -+z_streamp strm; -+const Bytef *end; -+unsigned copy; -+{ -+ struct inflate_state FAR *state; -+ unsigned dist; -+ -+ state = (struct inflate_state FAR *)strm->state; -+ -+ /* if it hasn't been done already, allocate space for the window */ -+ if (state->window == Z_NULL) { -+ unsigned wsize = 1U << state->wbits; -+ state->window = (unsigned char FAR *) -+ ZALLOC(strm, wsize + CHUNKCOPY_CHUNK_SIZE, -+ sizeof(unsigned char)); -+ if (state->window == Z_NULL) return 1; -+#ifdef INFLATE_CLEAR_UNUSED_UNDEFINED -+ /* Copies from the overflow portion of this buffer are undefined and -+ may cause analysis tools to raise a warning if we don't initialize -+ it. However, this undefined data overwrites other undefined data -+ and is subsequently either overwritten or left deliberately -+ undefined at the end of decode; so there's really no point. -+ */ -+ memset(state->window + wsize, 0, CHUNKCOPY_CHUNK_SIZE); -+#endif -+ } -+ -+ /* if window not in use yet, initialize */ -+ if (state->wsize == 0) { -+ state->wsize = 1U << state->wbits; -+ state->wnext = 0; -+ state->whave = 0; -+ } -+ -+ /* copy state->wsize or less output bytes into the circular window */ -+ if (copy >= state->wsize) { -+ zmemcpy(state->window, end - state->wsize, state->wsize); -+ state->wnext = 0; -+ state->whave = state->wsize; -+ } -+ else { -+ dist = state->wsize - state->wnext; -+ if (dist > copy) dist = copy; -+ zmemcpy(state->window + state->wnext, end - copy, dist); -+ copy -= dist; -+ if (copy) { -+ zmemcpy(state->window, end - copy, copy); -+ state->wnext = copy; -+ state->whave = state->wsize; -+ } -+ else { -+ state->wnext += dist; -+ if (state->wnext == state->wsize) state->wnext = 0; -+ if (state->whave < state->wsize) state->whave += dist; -+ } -+ } -+ return 0; -+} -+ -+/* Macros for inflate(): */ -+ -+/* check function to use adler32() for zlib or crc32() for gzip */ -+#ifdef GUNZIP -+# define UPDATE(check, buf, len) \ -+ (state->flags ? crc32(check, buf, len) : adler32(check, buf, len)) -+#else -+# define UPDATE(check, buf, len) adler32(check, buf, len) -+#endif -+ -+/* check macros for header crc */ -+#ifdef GUNZIP -+# define CRC2(check, word) \ -+ do { \ -+ hbuf[0] = (unsigned char)(word); \ -+ hbuf[1] = (unsigned char)((word) >> 8); \ -+ check = crc32(check, hbuf, 2); \ -+ } while (0) -+ -+# define CRC4(check, word) \ -+ do { \ -+ hbuf[0] = (unsigned char)(word); \ -+ hbuf[1] = (unsigned char)((word) >> 8); \ -+ hbuf[2] = (unsigned char)((word) >> 16); \ -+ hbuf[3] = (unsigned char)((word) >> 24); \ -+ check = crc32(check, hbuf, 4); \ -+ } while (0) -+#endif -+ -+/* Load registers with state in inflate() for speed */ -+#define LOAD() \ -+ do { \ -+ put = strm->next_out; \ -+ left = strm->avail_out; \ -+ next = strm->next_in; \ -+ have = strm->avail_in; \ -+ hold = state->hold; \ -+ bits = state->bits; \ -+ } while (0) -+ -+/* Restore state from registers in inflate() */ -+#define RESTORE() \ -+ do { \ -+ strm->next_out = put; \ -+ strm->avail_out = left; \ -+ strm->next_in = next; \ -+ strm->avail_in = have; \ -+ state->hold = hold; \ -+ state->bits = bits; \ -+ } while (0) -+ -+/* Clear the input bit accumulator */ -+#define INITBITS() \ -+ do { \ -+ hold = 0; \ -+ bits = 0; \ -+ } while (0) -+ -+/* Get a byte of input into the bit accumulator, or return from inflate() -+ if there is no input available. */ -+#define PULLBYTE() \ -+ do { \ -+ if (have == 0) goto inf_leave; \ -+ have--; \ -+ hold += (unsigned long)(*next++) << bits; \ -+ bits += 8; \ -+ } while (0) -+ -+/* Assure that there are at least n bits in the bit accumulator. If there is -+ not enough available input to do that, then return from inflate(). */ -+#define NEEDBITS(n) \ -+ do { \ -+ while (bits < (unsigned)(n)) \ -+ PULLBYTE(); \ -+ } while (0) -+ -+/* Return the low n bits of the bit accumulator (n < 16) */ -+#define BITS(n) \ -+ ((unsigned)hold & ((1U << (n)) - 1)) -+ -+/* Remove n bits from the bit accumulator */ -+#define DROPBITS(n) \ -+ do { \ -+ hold >>= (n); \ -+ bits -= (unsigned)(n); \ -+ } while (0) -+ -+/* Remove zero to seven bits as needed to go to a byte boundary */ -+#define BYTEBITS() \ -+ do { \ -+ hold >>= bits & 7; \ -+ bits -= bits & 7; \ -+ } while (0) -+ -+/* -+ inflate() uses a state machine to process as much input data and generate as -+ much output data as possible before returning. The state machine is -+ structured roughly as follows: -+ -+ for (;;) switch (state) { -+ ... -+ case STATEn: -+ if (not enough input data or output space to make progress) -+ return; -+ ... make progress ... -+ state = STATEm; -+ break; -+ ... -+ } -+ -+ so when inflate() is called again, the same case is attempted again, and -+ if the appropriate resources are provided, the machine proceeds to the -+ next state. The NEEDBITS() macro is usually the way the state evaluates -+ whether it can proceed or should return. NEEDBITS() does the return if -+ the requested bits are not available. The typical use of the BITS macros -+ is: -+ -+ NEEDBITS(n); -+ ... do something with BITS(n) ... -+ DROPBITS(n); -+ -+ where NEEDBITS(n) either returns from inflate() if there isn't enough -+ input left to load n bits into the accumulator, or it continues. BITS(n) -+ gives the low n bits in the accumulator. When done, DROPBITS(n) drops -+ the low n bits off the accumulator. INITBITS() clears the accumulator -+ and sets the number of available bits to zero. BYTEBITS() discards just -+ enough bits to put the accumulator on a byte boundary. After BYTEBITS() -+ and a NEEDBITS(8), then BITS(8) would return the next byte in the stream. -+ -+ NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return -+ if there is no input available. The decoding of variable length codes uses -+ PULLBYTE() directly in order to pull just enough bytes to decode the next -+ code, and no more. -+ -+ Some states loop until they get enough input, making sure that enough -+ state information is maintained to continue the loop where it left off -+ if NEEDBITS() returns in the loop. For example, want, need, and keep -+ would all have to actually be part of the saved state in case NEEDBITS() -+ returns: -+ -+ case STATEw: -+ while (want < need) { -+ NEEDBITS(n); -+ keep[want++] = BITS(n); -+ DROPBITS(n); -+ } -+ state = STATEx; -+ case STATEx: -+ -+ As shown above, if the next state is also the next case, then the break -+ is omitted. -+ -+ A state may also return if there is not enough output space available to -+ complete that state. Those states are copying stored data, writing a -+ literal byte, and copying a matching string. -+ -+ When returning, a "goto inf_leave" is used to update the total counters, -+ update the check value, and determine whether any progress has been made -+ during that inflate() call in order to return the proper return code. -+ Progress is defined as a change in either strm->avail_in or strm->avail_out. -+ When there is a window, goto inf_leave will update the window with the last -+ output written. If a goto inf_leave occurs in the middle of decompression -+ and there is no window currently, goto inf_leave will create one and copy -+ output to the window for the next call of inflate(). -+ -+ In this implementation, the flush parameter of inflate() only affects the -+ return code (per zlib.h). inflate() always writes as much as possible to -+ strm->next_out, given the space available and the provided input--the effect -+ documented in zlib.h of Z_SYNC_FLUSH. Furthermore, inflate() always defers -+ the allocation of and copying into a sliding window until necessary, which -+ provides the effect documented in zlib.h for Z_FINISH when the entire input -+ stream available. So the only thing the flush parameter actually does is: -+ when flush is set to Z_FINISH, inflate() cannot return Z_OK. Instead it -+ will return Z_BUF_ERROR if it has not reached the end of the stream. -+ */ -+ -+int ZEXPORT inflate(strm, flush) -+z_streamp strm; -+int flush; -+{ -+ struct inflate_state FAR *state; -+ z_const unsigned char FAR *next; /* next input */ -+ unsigned char FAR *put; /* next output */ -+ unsigned have, left; /* available input and output */ -+ unsigned long hold; /* bit buffer */ -+ unsigned bits; /* bits in bit buffer */ -+ unsigned in, out; /* save starting available input and output */ -+ unsigned copy; /* number of stored or match bytes to copy */ -+ unsigned char FAR *from; /* where to copy match bytes from */ -+ code here; /* current decoding table entry */ -+ code last; /* parent table entry */ -+ unsigned len; /* length to copy for repeats, bits to drop */ -+ int ret; /* return code */ -+#ifdef GUNZIP -+ unsigned char hbuf[4]; /* buffer for gzip header crc calculation */ -+#endif -+ static const unsigned short order[19] = /* permutation of code lengths */ -+ {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; -+ -+ if (inflateStateCheck(strm) || strm->next_out == Z_NULL || -+ (strm->next_in == Z_NULL && strm->avail_in != 0)) -+ return Z_STREAM_ERROR; -+ -+ state = (struct inflate_state FAR *)strm->state; -+ if (state->mode == TYPE) state->mode = TYPEDO; /* skip check */ -+ LOAD(); -+ in = have; -+ out = left; -+ ret = Z_OK; -+ for (;;) -+ switch (state->mode) { -+ case HEAD: -+ if (state->wrap == 0) { -+ state->mode = TYPEDO; -+ break; -+ } -+ NEEDBITS(16); -+#ifdef GUNZIP -+ if ((state->wrap & 2) && hold == 0x8b1f) { /* gzip header */ -+ if (state->wbits == 0) -+ state->wbits = 15; -+ state->check = crc32(0L, Z_NULL, 0); -+ CRC2(state->check, hold); -+ INITBITS(); -+ state->mode = FLAGS; -+ break; -+ } -+ state->flags = 0; /* expect zlib header */ -+ if (state->head != Z_NULL) -+ state->head->done = -1; -+ if (!(state->wrap & 1) || /* check if zlib header allowed */ -+#else -+ if ( -+#endif -+ ((BITS(8) << 8) + (hold >> 8)) % 31) { -+ strm->msg = (char *)"incorrect header check"; -+ state->mode = BAD; -+ break; -+ } -+ if (BITS(4) != Z_DEFLATED) { -+ strm->msg = (char *)"unknown compression method"; -+ state->mode = BAD; -+ break; -+ } -+ DROPBITS(4); -+ len = BITS(4) + 8; -+ if (state->wbits == 0) -+ state->wbits = len; -+ if (len > 15 || len > state->wbits) { -+ strm->msg = (char *)"invalid window size"; -+ state->mode = BAD; -+ break; -+ } -+ state->dmax = 1U << len; -+ Tracev((stderr, "inflate: zlib header ok\n")); -+ strm->adler = state->check = adler32(0L, Z_NULL, 0); -+ state->mode = hold & 0x200 ? DICTID : TYPE; -+ INITBITS(); -+ break; -+#ifdef GUNZIP -+ case FLAGS: -+ NEEDBITS(16); -+ state->flags = (int)(hold); -+ if ((state->flags & 0xff) != Z_DEFLATED) { -+ strm->msg = (char *)"unknown compression method"; -+ state->mode = BAD; -+ break; -+ } -+ if (state->flags & 0xe000) { -+ strm->msg = (char *)"unknown header flags set"; -+ state->mode = BAD; -+ break; -+ } -+ if (state->head != Z_NULL) -+ state->head->text = (int)((hold >> 8) & 1); -+ if ((state->flags & 0x0200) && (state->wrap & 4)) -+ CRC2(state->check, hold); -+ INITBITS(); -+ state->mode = TIME; -+ case TIME: -+ NEEDBITS(32); -+ if (state->head != Z_NULL) -+ state->head->time = hold; -+ if ((state->flags & 0x0200) && (state->wrap & 4)) -+ CRC4(state->check, hold); -+ INITBITS(); -+ state->mode = OS; -+ case OS: -+ NEEDBITS(16); -+ if (state->head != Z_NULL) { -+ state->head->xflags = (int)(hold & 0xff); -+ state->head->os = (int)(hold >> 8); -+ } -+ if ((state->flags & 0x0200) && (state->wrap & 4)) -+ CRC2(state->check, hold); -+ INITBITS(); -+ state->mode = EXLEN; -+ case EXLEN: -+ if (state->flags & 0x0400) { -+ NEEDBITS(16); -+ state->length = (unsigned)(hold); -+ if (state->head != Z_NULL) -+ state->head->extra_len = (unsigned)hold; -+ if ((state->flags & 0x0200) && (state->wrap & 4)) -+ CRC2(state->check, hold); -+ INITBITS(); -+ } -+ else if (state->head != Z_NULL) -+ state->head->extra = Z_NULL; -+ state->mode = EXTRA; -+ case EXTRA: -+ if (state->flags & 0x0400) { -+ copy = state->length; -+ if (copy > have) copy = have; -+ if (copy) { -+ if (state->head != Z_NULL && -+ state->head->extra != Z_NULL) { -+ len = state->head->extra_len - state->length; -+ zmemcpy(state->head->extra + len, next, -+ len + copy > state->head->extra_max ? -+ state->head->extra_max - len : copy); -+ } -+ if ((state->flags & 0x0200) && (state->wrap & 4)) -+ state->check = crc32(state->check, next, copy); -+ have -= copy; -+ next += copy; -+ state->length -= copy; -+ } -+ if (state->length) goto inf_leave; -+ } -+ state->length = 0; -+ state->mode = NAME; -+ case NAME: -+ if (state->flags & 0x0800) { -+ if (have == 0) goto inf_leave; -+ copy = 0; -+ do { -+ len = (unsigned)(next[copy++]); -+ if (state->head != Z_NULL && -+ state->head->name != Z_NULL && -+ state->length < state->head->name_max) -+ state->head->name[state->length++] = (Bytef)len; -+ } while (len && copy < have); -+ if ((state->flags & 0x0200) && (state->wrap & 4)) -+ state->check = crc32(state->check, next, copy); -+ have -= copy; -+ next += copy; -+ if (len) goto inf_leave; -+ } -+ else if (state->head != Z_NULL) -+ state->head->name = Z_NULL; -+ state->length = 0; -+ state->mode = COMMENT; -+ case COMMENT: -+ if (state->flags & 0x1000) { -+ if (have == 0) goto inf_leave; -+ copy = 0; -+ do { -+ len = (unsigned)(next[copy++]); -+ if (state->head != Z_NULL && -+ state->head->comment != Z_NULL && -+ state->length < state->head->comm_max) -+ state->head->comment[state->length++] = (Bytef)len; -+ } while (len && copy < have); -+ if ((state->flags & 0x0200) && (state->wrap & 4)) -+ state->check = crc32(state->check, next, copy); -+ have -= copy; -+ next += copy; -+ if (len) goto inf_leave; -+ } -+ else if (state->head != Z_NULL) -+ state->head->comment = Z_NULL; -+ state->mode = HCRC; -+ case HCRC: -+ if (state->flags & 0x0200) { -+ NEEDBITS(16); -+ if ((state->wrap & 4) && hold != (state->check & 0xffff)) { -+ strm->msg = (char *)"header crc mismatch"; -+ state->mode = BAD; -+ break; -+ } -+ INITBITS(); -+ } -+ if (state->head != Z_NULL) { -+ state->head->hcrc = (int)((state->flags >> 9) & 1); -+ state->head->done = 1; -+ } -+ strm->adler = state->check = crc32(0L, Z_NULL, 0); -+ state->mode = TYPE; -+ break; -+#endif -+ case DICTID: -+ NEEDBITS(32); -+ strm->adler = state->check = ZSWAP32(hold); -+ INITBITS(); -+ state->mode = DICT; -+ case DICT: -+ if (state->havedict == 0) { -+ RESTORE(); -+ return Z_NEED_DICT; -+ } -+ strm->adler = state->check = adler32(0L, Z_NULL, 0); -+ state->mode = TYPE; -+ case TYPE: -+ if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave; -+ case TYPEDO: -+ if (state->last) { -+ BYTEBITS(); -+ state->mode = CHECK; -+ break; -+ } -+ NEEDBITS(3); -+ state->last = BITS(1); -+ DROPBITS(1); -+ switch (BITS(2)) { -+ case 0: /* stored block */ -+ Tracev((stderr, "inflate: stored block%s\n", -+ state->last ? " (last)" : "")); -+ state->mode = STORED; -+ break; -+ case 1: /* fixed block */ -+ fixedtables(state); -+ Tracev((stderr, "inflate: fixed codes block%s\n", -+ state->last ? " (last)" : "")); -+ state->mode = LEN_; /* decode codes */ -+ if (flush == Z_TREES) { -+ DROPBITS(2); -+ goto inf_leave; -+ } -+ break; -+ case 2: /* dynamic block */ -+ Tracev((stderr, "inflate: dynamic codes block%s\n", -+ state->last ? " (last)" : "")); -+ state->mode = TABLE; -+ break; -+ case 3: -+ strm->msg = (char *)"invalid block type"; -+ state->mode = BAD; -+ } -+ DROPBITS(2); -+ break; -+ case STORED: -+ BYTEBITS(); /* go to byte boundary */ -+ NEEDBITS(32); -+ if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) { -+ strm->msg = (char *)"invalid stored block lengths"; -+ state->mode = BAD; -+ break; -+ } -+ state->length = (unsigned)hold & 0xffff; -+ Tracev((stderr, "inflate: stored length %u\n", -+ state->length)); -+ INITBITS(); -+ state->mode = COPY_; -+ if (flush == Z_TREES) goto inf_leave; -+ case COPY_: -+ state->mode = COPY; -+ case COPY: -+ copy = state->length; -+ if (copy) { -+ if (copy > have) copy = have; -+ if (copy > left) copy = left; -+ if (copy == 0) goto inf_leave; -+ zmemcpy(put, next, copy); -+ have -= copy; -+ next += copy; -+ left -= copy; -+ put += copy; -+ state->length -= copy; -+ break; -+ } -+ Tracev((stderr, "inflate: stored end\n")); -+ state->mode = TYPE; -+ break; -+ case TABLE: -+ NEEDBITS(14); -+ state->nlen = BITS(5) + 257; -+ DROPBITS(5); -+ state->ndist = BITS(5) + 1; -+ DROPBITS(5); -+ state->ncode = BITS(4) + 4; -+ DROPBITS(4); -+#ifndef PKZIP_BUG_WORKAROUND -+ if (state->nlen > 286 || state->ndist > 30) { -+ strm->msg = (char *)"too many length or distance symbols"; -+ state->mode = BAD; -+ break; -+ } -+#endif -+ Tracev((stderr, "inflate: table sizes ok\n")); -+ state->have = 0; -+ state->mode = LENLENS; -+ case LENLENS: -+ while (state->have < state->ncode) { -+ NEEDBITS(3); -+ state->lens[order[state->have++]] = (unsigned short)BITS(3); -+ DROPBITS(3); -+ } -+ while (state->have < 19) -+ state->lens[order[state->have++]] = 0; -+ state->next = state->codes; -+ state->lencode = (const code FAR *)(state->next); -+ state->lenbits = 7; -+ ret = inflate_table(CODES, state->lens, 19, &(state->next), -+ &(state->lenbits), state->work); -+ if (ret) { -+ strm->msg = (char *)"invalid code lengths set"; -+ state->mode = BAD; -+ break; -+ } -+ Tracev((stderr, "inflate: code lengths ok\n")); -+ state->have = 0; -+ state->mode = CODELENS; -+ case CODELENS: -+ while (state->have < state->nlen + state->ndist) { -+ for (;;) { -+ here = state->lencode[BITS(state->lenbits)]; -+ if ((unsigned)(here.bits) <= bits) break; -+ PULLBYTE(); -+ } -+ if (here.val < 16) { -+ DROPBITS(here.bits); -+ state->lens[state->have++] = here.val; -+ } -+ else { -+ if (here.val == 16) { -+ NEEDBITS(here.bits + 2); -+ DROPBITS(here.bits); -+ if (state->have == 0) { -+ strm->msg = (char *)"invalid bit length repeat"; -+ state->mode = BAD; -+ break; -+ } -+ len = state->lens[state->have - 1]; -+ copy = 3 + BITS(2); -+ DROPBITS(2); -+ } -+ else if (here.val == 17) { -+ NEEDBITS(here.bits + 3); -+ DROPBITS(here.bits); -+ len = 0; -+ copy = 3 + BITS(3); -+ DROPBITS(3); -+ } -+ else { -+ NEEDBITS(here.bits + 7); -+ DROPBITS(here.bits); -+ len = 0; -+ copy = 11 + BITS(7); -+ DROPBITS(7); -+ } -+ if (state->have + copy > state->nlen + state->ndist) { -+ strm->msg = (char *)"invalid bit length repeat"; -+ state->mode = BAD; -+ break; -+ } -+ while (copy--) -+ state->lens[state->have++] = (unsigned short)len; -+ } -+ } -+ -+ /* handle error breaks in while */ -+ if (state->mode == BAD) break; -+ -+ /* check for end-of-block code (better have one) */ -+ if (state->lens[256] == 0) { -+ strm->msg = (char *)"invalid code -- missing end-of-block"; -+ state->mode = BAD; -+ break; -+ } -+ -+ /* build code tables -- note: do not change the lenbits or distbits -+ values here (9 and 6) without reading the comments in inftrees.h -+ concerning the ENOUGH constants, which depend on those values */ -+ state->next = state->codes; -+ state->lencode = (const code FAR *)(state->next); -+ state->lenbits = 9; -+ ret = inflate_table(LENS, state->lens, state->nlen, &(state->next), -+ &(state->lenbits), state->work); -+ if (ret) { -+ strm->msg = (char *)"invalid literal/lengths set"; -+ state->mode = BAD; -+ break; -+ } -+ state->distcode = (const code FAR *)(state->next); -+ state->distbits = 6; -+ ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist, -+ &(state->next), &(state->distbits), state->work); -+ if (ret) { -+ strm->msg = (char *)"invalid distances set"; -+ state->mode = BAD; -+ break; -+ } -+ Tracev((stderr, "inflate: codes ok\n")); -+ state->mode = LEN_; -+ if (flush == Z_TREES) goto inf_leave; -+ case LEN_: -+ state->mode = LEN; -+ case LEN: -+ if (have >= 6 && left >= 258) { -+ RESTORE(); -+ inflate_fast(strm, out); -+ LOAD(); -+ if (state->mode == TYPE) -+ state->back = -1; -+ break; -+ } -+ state->back = 0; -+ for (;;) { -+ here = state->lencode[BITS(state->lenbits)]; -+ if ((unsigned)(here.bits) <= bits) break; -+ PULLBYTE(); -+ } -+ if (here.op && (here.op & 0xf0) == 0) { -+ last = here; -+ for (;;) { -+ here = state->lencode[last.val + -+ (BITS(last.bits + last.op) >> last.bits)]; -+ if ((unsigned)(last.bits + here.bits) <= bits) break; -+ PULLBYTE(); -+ } -+ DROPBITS(last.bits); -+ state->back += last.bits; -+ } -+ DROPBITS(here.bits); -+ state->back += here.bits; -+ state->length = (unsigned)here.val; -+ if ((int)(here.op) == 0) { -+ Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? -+ "inflate: literal '%c'\n" : -+ "inflate: literal 0x%02x\n", here.val)); -+ state->mode = LIT; -+ break; -+ } -+ if (here.op & 32) { -+ Tracevv((stderr, "inflate: end of block\n")); -+ state->back = -1; -+ state->mode = TYPE; -+ break; -+ } -+ if (here.op & 64) { -+ strm->msg = (char *)"invalid literal/length code"; -+ state->mode = BAD; -+ break; -+ } -+ state->extra = (unsigned)(here.op) & 15; -+ state->mode = LENEXT; -+ case LENEXT: -+ if (state->extra) { -+ NEEDBITS(state->extra); -+ state->length += BITS(state->extra); -+ DROPBITS(state->extra); -+ state->back += state->extra; -+ } -+ Tracevv((stderr, "inflate: length %u\n", state->length)); -+ state->was = state->length; -+ state->mode = DIST; -+ case DIST: -+ for (;;) { -+ here = state->distcode[BITS(state->distbits)]; -+ if ((unsigned)(here.bits) <= bits) break; -+ PULLBYTE(); -+ } -+ if ((here.op & 0xf0) == 0) { -+ last = here; -+ for (;;) { -+ here = state->distcode[last.val + -+ (BITS(last.bits + last.op) >> last.bits)]; -+ if ((unsigned)(last.bits + here.bits) <= bits) break; -+ PULLBYTE(); -+ } -+ DROPBITS(last.bits); -+ state->back += last.bits; -+ } -+ DROPBITS(here.bits); -+ state->back += here.bits; -+ if (here.op & 64) { -+ strm->msg = (char *)"invalid distance code"; -+ state->mode = BAD; -+ break; -+ } -+ state->offset = (unsigned)here.val; -+ state->extra = (unsigned)(here.op) & 15; -+ state->mode = DISTEXT; -+ case DISTEXT: -+ if (state->extra) { -+ NEEDBITS(state->extra); -+ state->offset += BITS(state->extra); -+ DROPBITS(state->extra); -+ state->back += state->extra; -+ } -+#ifdef INFLATE_STRICT -+ if (state->offset > state->dmax) { -+ strm->msg = (char *)"invalid distance too far back"; -+ state->mode = BAD; -+ break; -+ } -+#endif -+ Tracevv((stderr, "inflate: distance %u\n", state->offset)); -+ state->mode = MATCH; -+ case MATCH: -+ if (left == 0) goto inf_leave; -+ copy = out - left; -+ if (state->offset > copy) { /* copy from window */ -+ copy = state->offset - copy; -+ if (copy > state->whave) { -+ if (state->sane) { -+ strm->msg = (char *)"invalid distance too far back"; -+ state->mode = BAD; -+ break; -+ } -+#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR -+ Trace((stderr, "inflate.c too far\n")); -+ copy -= state->whave; -+ if (copy > state->length) copy = state->length; -+ if (copy > left) copy = left; -+ left -= copy; -+ state->length -= copy; -+ do { -+ *put++ = 0; -+ } while (--copy); -+ if (state->length == 0) state->mode = LEN; -+ break; -+#endif -+ } -+ if (copy > state->wnext) { -+ copy -= state->wnext; -+ from = state->window + (state->wsize - copy); -+ } -+ else -+ from = state->window + (state->wnext - copy); -+ if (copy > state->length) copy = state->length; -+ if (copy > left) copy = left; -+ put = chunkcopy_safe(put, from, copy, put + left); -+ } -+ else { /* copy from output */ -+ copy = state->length; -+ if (copy > left) copy = left; -+ put = chunkcopy_lapped_safe(put, state->offset, copy, put + left); -+ } -+ left -= copy; -+ state->length -= copy; -+ if (state->length == 0) state->mode = LEN; -+ break; -+ case LIT: -+ if (left == 0) goto inf_leave; -+ *put++ = (unsigned char)(state->length); -+ left--; -+ state->mode = LEN; -+ break; -+ case CHECK: -+ if (state->wrap) { -+ NEEDBITS(32); -+ out -= left; -+ strm->total_out += out; -+ state->total += out; -+ if ((state->wrap & 4) && out) -+ strm->adler = state->check = -+ UPDATE(state->check, put - out, out); -+ out = left; -+ if ((state->wrap & 4) && ( -+#ifdef GUNZIP -+ state->flags ? hold : -+#endif -+ ZSWAP32(hold)) != state->check) { -+ strm->msg = (char *)"incorrect data check"; -+ state->mode = BAD; -+ break; -+ } -+ INITBITS(); -+ Tracev((stderr, "inflate: check matches trailer\n")); -+ } -+#ifdef GUNZIP -+ state->mode = LENGTH; -+ case LENGTH: -+ if (state->wrap && state->flags) { -+ NEEDBITS(32); -+ if (hold != (state->total & 0xffffffffUL)) { -+ strm->msg = (char *)"incorrect length check"; -+ state->mode = BAD; -+ break; -+ } -+ INITBITS(); -+ Tracev((stderr, "inflate: length matches trailer\n")); -+ } -+#endif -+ state->mode = DONE; -+ case DONE: -+ ret = Z_STREAM_END; -+ goto inf_leave; -+ case BAD: -+ ret = Z_DATA_ERROR; -+ goto inf_leave; -+ case MEM: -+ return Z_MEM_ERROR; -+ case SYNC: -+ default: -+ return Z_STREAM_ERROR; -+ } -+ -+ /* -+ Return from inflate(), updating the total counts and the check value. -+ If there was no progress during the inflate() call, return a buffer -+ error. Call updatewindow() to create and/or update the window state. -+ Note: a memory error from inflate() is non-recoverable. -+ */ -+ inf_leave: -+ RESTORE(); -+ if (state->wsize || (out != strm->avail_out && state->mode < BAD && -+ (state->mode < CHECK || flush != Z_FINISH))) -+ if (updatewindow(strm, strm->next_out, out - strm->avail_out)) { -+ state->mode = MEM; -+ return Z_MEM_ERROR; -+ } -+ in -= strm->avail_in; -+ out -= strm->avail_out; -+ strm->total_in += in; -+ strm->total_out += out; -+ state->total += out; -+ if ((state->wrap & 4) && out) -+ strm->adler = state->check = -+ UPDATE(state->check, strm->next_out - out, out); -+ strm->data_type = (int)state->bits + (state->last ? 64 : 0) + -+ (state->mode == TYPE ? 128 : 0) + -+ (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0); -+ if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK) -+ ret = Z_BUF_ERROR; -+ return ret; -+} -+ -+int ZEXPORT inflateEnd(strm) -+z_streamp strm; -+{ -+ struct inflate_state FAR *state; -+ if (inflateStateCheck(strm)) -+ return Z_STREAM_ERROR; -+ state = (struct inflate_state FAR *)strm->state; -+ if (state->window != Z_NULL) ZFREE(strm, state->window); -+ ZFREE(strm, strm->state); -+ strm->state = Z_NULL; -+ Tracev((stderr, "inflate: end\n")); -+ return Z_OK; -+} -+ -+int ZEXPORT inflateGetDictionary(strm, dictionary, dictLength) -+z_streamp strm; -+Bytef *dictionary; -+uInt *dictLength; -+{ -+ struct inflate_state FAR *state; -+ -+ /* check state */ -+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR; -+ state = (struct inflate_state FAR *)strm->state; -+ -+ /* copy dictionary */ -+ if (state->whave && dictionary != Z_NULL) { -+ zmemcpy(dictionary, state->window + state->wnext, -+ state->whave - state->wnext); -+ zmemcpy(dictionary + state->whave - state->wnext, -+ state->window, state->wnext); -+ } -+ if (dictLength != Z_NULL) -+ *dictLength = state->whave; -+ return Z_OK; -+} -+ -+int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength) -+z_streamp strm; -+const Bytef *dictionary; -+uInt dictLength; -+{ -+ struct inflate_state FAR *state; -+ unsigned long dictid; -+ int ret; -+ -+ /* check state */ -+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR; -+ state = (struct inflate_state FAR *)strm->state; -+ if (state->wrap != 0 && state->mode != DICT) -+ return Z_STREAM_ERROR; -+ -+ /* check for correct dictionary identifier */ -+ if (state->mode == DICT) { -+ dictid = adler32(0L, Z_NULL, 0); -+ dictid = adler32(dictid, dictionary, dictLength); -+ if (dictid != state->check) -+ return Z_DATA_ERROR; -+ } -+ -+ /* copy dictionary to window using updatewindow(), which will amend the -+ existing dictionary if appropriate */ -+ ret = updatewindow(strm, dictionary + dictLength, dictLength); -+ if (ret) { -+ state->mode = MEM; -+ return Z_MEM_ERROR; -+ } -+ state->havedict = 1; -+ Tracev((stderr, "inflate: dictionary set\n")); -+ return Z_OK; -+} -+ -+int ZEXPORT inflateGetHeader(strm, head) -+z_streamp strm; -+gz_headerp head; -+{ -+ struct inflate_state FAR *state; -+ -+ /* check state */ -+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR; -+ state = (struct inflate_state FAR *)strm->state; -+ if ((state->wrap & 2) == 0) return Z_STREAM_ERROR; -+ -+ /* save header structure */ -+ state->head = head; -+ head->done = 0; -+ return Z_OK; -+} -+ -+/* -+ Search buf[0..len-1] for the pattern: 0, 0, 0xff, 0xff. Return when found -+ or when out of input. When called, *have is the number of pattern bytes -+ found in order so far, in 0..3. On return *have is updated to the new -+ state. If on return *have equals four, then the pattern was found and the -+ return value is how many bytes were read including the last byte of the -+ pattern. If *have is less than four, then the pattern has not been found -+ yet and the return value is len. In the latter case, syncsearch() can be -+ called again with more data and the *have state. *have is initialized to -+ zero for the first call. -+ */ -+local unsigned syncsearch(have, buf, len) -+unsigned FAR *have; -+const unsigned char FAR *buf; -+unsigned len; -+{ -+ unsigned got; -+ unsigned next; -+ -+ got = *have; -+ next = 0; -+ while (next < len && got < 4) { -+ if ((int)(buf[next]) == (got < 2 ? 0 : 0xff)) -+ got++; -+ else if (buf[next]) -+ got = 0; -+ else -+ got = 4 - got; -+ next++; -+ } -+ *have = got; -+ return next; -+} -+ -+int ZEXPORT inflateSync(strm) -+z_streamp strm; -+{ -+ unsigned len; /* number of bytes to look at or looked at */ -+ unsigned long in, out; /* temporary to save total_in and total_out */ -+ unsigned char buf[4]; /* to restore bit buffer to byte string */ -+ struct inflate_state FAR *state; -+ -+ /* check parameters */ -+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR; -+ state = (struct inflate_state FAR *)strm->state; -+ if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR; -+ -+ /* if first time, start search in bit buffer */ -+ if (state->mode != SYNC) { -+ state->mode = SYNC; -+ state->hold <<= state->bits & 7; -+ state->bits -= state->bits & 7; -+ len = 0; -+ while (state->bits >= 8) { -+ buf[len++] = (unsigned char)(state->hold); -+ state->hold >>= 8; -+ state->bits -= 8; -+ } -+ state->have = 0; -+ syncsearch(&(state->have), buf, len); -+ } -+ -+ /* search available input */ -+ len = syncsearch(&(state->have), strm->next_in, strm->avail_in); -+ strm->avail_in -= len; -+ strm->next_in += len; -+ strm->total_in += len; -+ -+ /* return no joy or set up to restart inflate() on a new block */ -+ if (state->have != 4) return Z_DATA_ERROR; -+ in = strm->total_in; out = strm->total_out; -+ inflateReset(strm); -+ strm->total_in = in; strm->total_out = out; -+ state->mode = TYPE; -+ return Z_OK; -+} -+ -+/* -+ Returns true if inflate is currently at the end of a block generated by -+ Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP -+ implementation to provide an additional safety check. PPP uses -+ Z_SYNC_FLUSH but removes the length bytes of the resulting empty stored -+ block. When decompressing, PPP checks that at the end of input packet, -+ inflate is waiting for these length bytes. -+ */ -+int ZEXPORT inflateSyncPoint(strm) -+z_streamp strm; -+{ -+ struct inflate_state FAR *state; -+ -+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR; -+ state = (struct inflate_state FAR *)strm->state; -+ return state->mode == STORED && state->bits == 0; -+} -+ -+int ZEXPORT inflateCopy(dest, source) -+z_streamp dest; -+z_streamp source; -+{ -+ struct inflate_state FAR *state; -+ struct inflate_state FAR *copy; -+ unsigned char FAR *window; -+ unsigned wsize; -+ -+ /* check input */ -+ if (inflateStateCheck(source) || dest == Z_NULL) -+ return Z_STREAM_ERROR; -+ state = (struct inflate_state FAR *)source->state; -+ -+ /* allocate space */ -+ copy = (struct inflate_state FAR *) -+ ZALLOC(source, 1, sizeof(struct inflate_state)); -+ if (copy == Z_NULL) return Z_MEM_ERROR; -+ window = Z_NULL; -+ if (state->window != Z_NULL) { -+ window = (unsigned char FAR *) -+ ZALLOC(source, 1U << state->wbits, sizeof(unsigned char)); -+ if (window == Z_NULL) { -+ ZFREE(source, copy); -+ return Z_MEM_ERROR; -+ } -+ } -+ -+ /* copy state */ -+ zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream)); -+ zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state)); -+ copy->strm = dest; -+ if (state->lencode >= state->codes && -+ state->lencode <= state->codes + ENOUGH - 1) { -+ copy->lencode = copy->codes + (state->lencode - state->codes); -+ copy->distcode = copy->codes + (state->distcode - state->codes); -+ } -+ copy->next = copy->codes + (state->next - state->codes); -+ if (window != Z_NULL) { -+ wsize = 1U << state->wbits; -+ zmemcpy(window, state->window, wsize); -+ } -+ copy->window = window; -+ dest->state = (struct internal_state FAR *)copy; -+ return Z_OK; -+} -+ -+int ZEXPORT inflateUndermine(strm, subvert) -+z_streamp strm; -+int subvert; -+{ -+ struct inflate_state FAR *state; -+ -+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR; -+ state = (struct inflate_state FAR *)strm->state; -+#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR -+ state->sane = !subvert; -+ return Z_OK; -+#else -+ (void)subvert; -+ state->sane = 1; -+ return Z_DATA_ERROR; -+#endif -+} -+ -+int ZEXPORT inflateValidate(strm, check) -+z_streamp strm; -+int check; -+{ -+ struct inflate_state FAR *state; -+ -+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR; -+ state = (struct inflate_state FAR *)strm->state; -+ if (check) -+ state->wrap |= 4; -+ else -+ state->wrap &= ~4; -+ return Z_OK; -+} -+ -+long ZEXPORT inflateMark(strm) -+z_streamp strm; -+{ -+ struct inflate_state FAR *state; -+ -+ if (inflateStateCheck(strm)) -+ return -(1L << 16); -+ state = (struct inflate_state FAR *)strm->state; -+ return (long)(((unsigned long)((long)state->back)) << 16) + -+ (state->mode == COPY ? state->length : -+ (state->mode == MATCH ? state->was - state->length : 0)); -+} -+ -+unsigned long ZEXPORT inflateCodesUsed(strm) -+z_streamp strm; -+{ -+ struct inflate_state FAR *state; -+ if (inflateStateCheck(strm)) return (unsigned long)-1; -+ state = (struct inflate_state FAR *)strm->state; -+ return (unsigned long)(state->next - state->codes); -+} --- -2.7.4 -
diff --git a/third_party/zlib/BUILD.gn b/third_party/zlib/BUILD.gn index 8c57ad49..4b4db15b 100644 --- a/third_party/zlib/BUILD.gn +++ b/third_party/zlib/BUILD.gn
@@ -2,10 +2,6 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -if (current_cpu == "arm" || current_cpu == "arm64") { - import("//build/config/arm.gni") -} - config("zlib_config") { include_dirs = [ "." ] } @@ -75,20 +71,6 @@ "zutil.h", ] - if (current_cpu == "arm" || current_cpu == "arm64") { - if (arm_use_neon) { - sources -= [ - "inflate.c", - "inffast.c", - ] - sources += [ - "contrib/arm/inflate.c", - "contrib/arm/inffast.c", - "contrib/arm/chunkcopy.h", - ] - } - } - if (!is_ios && (current_cpu == "x86" || current_cpu == "x64")) { sources += [ "x86.c" ] }
diff --git a/third_party/zlib/README.chromium b/third_party/zlib/README.chromium index ff5c6ab..8658580 100644 --- a/third_party/zlib/README.chromium +++ b/third_party/zlib/README.chromium
@@ -28,4 +28,3 @@ https://github.com/jtkukunas/zlib/ - 0002-uninitializedcheck.patch: default-initialize state->check, see crbug.com/697481 - - 0003-arm-inffast.patch: ARM optimized inflate using NEON.
diff --git a/third_party/zlib/contrib/arm/chunkcopy.h b/third_party/zlib/contrib/arm/chunkcopy.h deleted file mode 100644 index 2d6fd6f..0000000 --- a/third_party/zlib/contrib/arm/chunkcopy.h +++ /dev/null
@@ -1,279 +0,0 @@ -/* chunkcopy.h -- fast copies and sets - * Copyright (C) 2017 ARM, Inc. - * For conditions of distribution and use, see copyright notice in zlib.h - */ - -#ifndef CHUNKCOPY_H -#define CHUNKCOPY_H - -#include "zutil.h" -#include <arm_neon.h> - -#if __STDC_VERSION__ >= 199901L -#define Z_RESTRICT restrict -#else -#define Z_RESTRICT -#endif - -typedef uint8x16_t chunkcopy_chunk_t; -#define CHUNKCOPY_CHUNK_SIZE sizeof(chunkcopy_chunk_t) - -/* - Ask the compiler to perform a wide, unaligned load with an machine - instruction appropriate for the chunkcopy_chunk_t type. - */ -static inline chunkcopy_chunk_t loadchunk(const unsigned char FAR *s) { - chunkcopy_chunk_t c; - __builtin_memcpy(&c, s, sizeof(c)); - return c; -} - -/* - Ask the compiler to perform a wide, unaligned store with an machine - instruction appropriate for the chunkcopy_chunk_t type. - */ -static inline void storechunk(unsigned char FAR *d, chunkcopy_chunk_t c) { - __builtin_memcpy(d, &c, sizeof(c)); -} - -/* - Perform a memcpy-like operation, but assume that length is non-zero and that - it's OK to overwrite at least CHUNKCOPY_CHUNK_SIZE bytes of output even if - the length is shorter than this. - - It also guarantees that it will properly unroll the data if the distance - between `out` and `from` is at least CHUNKCOPY_CHUNK_SIZE, which we rely on - in chunkcopy_relaxed(). - - Aside from better memory bus utilisation, this means that short copies - (CHUNKCOPY_CHUNK_SIZE bytes or fewer) will fall straight through the loop - without iteration, which will hopefully make the branch prediction more - reliable. - */ -static inline unsigned char FAR *chunkcopy_core(unsigned char FAR *out, - const unsigned char FAR *from, - unsigned len) { - int bump = (--len % CHUNKCOPY_CHUNK_SIZE) + 1; - storechunk(out, loadchunk(from)); - out += bump; - from += bump; - len /= CHUNKCOPY_CHUNK_SIZE; - while (len-- > 0) { - storechunk(out, loadchunk(from)); - out += CHUNKCOPY_CHUNK_SIZE; - from += CHUNKCOPY_CHUNK_SIZE; - } - return out; -} - -/* - Like chunkcopy_core, but avoid writing beyond of legal output. - - Accepts an additional pointer to the end of safe output. A generic safe - copy would use (out + len), but it's normally the case that the end of the - output buffer is beyond the end of the current copy, and this can still be - exploited. - */ -static inline unsigned char FAR *chunkcopy_core_safe(unsigned char FAR *out, - const unsigned char FAR * from, - unsigned len, - unsigned char FAR *limit) { - Assert(out + len <= limit, "chunk copy exceeds safety limit"); - if (limit - out < CHUNKCOPY_CHUNK_SIZE) { - const unsigned char FAR * Z_RESTRICT rfrom = from; - if (len & 8) { __builtin_memcpy(out, rfrom, 8); out += 8; rfrom += 8; } - if (len & 4) { __builtin_memcpy(out, rfrom, 4); out += 4; rfrom += 4; } - if (len & 2) { __builtin_memcpy(out, rfrom, 2); out += 2; rfrom += 2; } - if (len & 1) { *out++ = *rfrom++; } - return out; - } - return chunkcopy_core(out, from, len); -} - -/* - Perform short copies until distance can be rewritten as being at least - CHUNKCOPY_CHUNK_SIZE. - - This assumes that it's OK to overwrite at least the first - 2*CHUNKCOPY_CHUNK_SIZE bytes of output even if the copy is shorter than - this. This assumption holds within inflate_fast() which starts every - iteration with at least 258 bytes of output space available (258 being the - maximum length output from a single token; see inffast.c). - */ -static inline unsigned char FAR *chunkunroll_relaxed(unsigned char FAR *out, - unsigned FAR *dist, - unsigned FAR *len) { - const unsigned char FAR *from = out - *dist; - while (*dist < *len && *dist < CHUNKCOPY_CHUNK_SIZE) { - storechunk(out, loadchunk(from)); - out += *dist; - *len -= *dist; - *dist += *dist; - } - return out; -} - - -static inline uint8x16_t chunkset_vld1q_dup_u8x8(const unsigned char FAR * Z_RESTRICT from) { -#if defined(__clang__) || defined(__aarch64__) - return vreinterpretq_u8_u64(vld1q_dup_u64((void *)from)); -#else - /* 32-bit GCC uses an alignment hint for vld1q_dup_u64, even when given a - * void pointer, so here's an alternate implementation. - */ - uint8x8_t h = vld1_u8(from); - return vcombine_u8(h, h); -#endif -} - -/* - Perform an overlapping copy which behaves as a memset() operation, but - supporting periods other than one, and assume that length is non-zero and - that it's OK to overwrite at least CHUNKCOPY_CHUNK_SIZE*3 bytes of output - even if the length is shorter than this. - */ -static inline unsigned char FAR *chunkset_core(unsigned char FAR *out, - unsigned period, - unsigned len) { - uint8x16_t f; - int bump = ((len - 1) % sizeof(f)) + 1; - - switch (period) { - case 1: - f = vld1q_dup_u8(out - 1); - vst1q_u8(out, f); - out += bump; - len -= bump; - while (len > 0) { - vst1q_u8(out, f); - out += sizeof(f); - len -= sizeof(f); - } - return out; - case 2: - f = vreinterpretq_u8_u16(vld1q_dup_u16((void *)(out - 2))); - vst1q_u8(out, f); - out += bump; - len -= bump; - if (len > 0) { - f = vreinterpretq_u8_u16(vld1q_dup_u16((void *)(out - 2))); - do { - vst1q_u8(out, f); - out += sizeof(f); - len -= sizeof(f); - } while (len > 0); - } - return out; - case 4: - f = vreinterpretq_u8_u32(vld1q_dup_u32((void *)(out - 4))); - vst1q_u8(out, f); - out += bump; - len -= bump; - if (len > 0) { - f = vreinterpretq_u8_u32(vld1q_dup_u32((void *)(out - 4))); - do { - vst1q_u8(out, f); - out += sizeof(f); - len -= sizeof(f); - } while (len > 0); - } - return out; - case 8: - f = chunkset_vld1q_dup_u8x8(out - 8); - vst1q_u8(out, f); - out += bump; - len -= bump; - if (len > 0) { - f = chunkset_vld1q_dup_u8x8(out - 8); - do { - vst1q_u8(out, f); - out += sizeof(f); - len -= sizeof(f); - } while (len > 0); - } - return out; - } - out = chunkunroll_relaxed(out, &period, &len); - return chunkcopy_core(out, out - period, len); -} - -/* - Perform a memcpy-like operation, but assume that length is non-zero and that - it's OK to overwrite at least CHUNKCOPY_CHUNK_SIZE bytes of output even if - the length is shorter than this. - - Unlike chunkcopy_core() above, no guarantee is made regarding the behaviour - of overlapping buffers, regardless of the distance between the pointers. - This is reflected in the `restrict`-qualified pointers, allowing the - compiler to reorder loads and stores. - */ -static inline unsigned char FAR *chunkcopy_relaxed(unsigned char FAR * Z_RESTRICT out, - const unsigned char FAR * Z_RESTRICT from, - unsigned len) { - return chunkcopy_core(out, from, len); -} - -/* - Like chunkcopy_relaxed, but avoid writing beyond of legal output. - - Unlike chunkcopy_core_safe() above, no guarantee is made regarding the - behaviour of overlapping buffers, regardless of the distance between the - pointers. This is reflected in the `restrict`-qualified pointers, allowing - the compiler to reorder loads and stores. - - Accepts an additional pointer to the end of safe output. A generic safe - copy would use (out + len), but it's normally the case that the end of the - output buffer is beyond the end of the current copy, and this can still be - exploited. - */ -static inline unsigned char FAR *chunkcopy_safe(unsigned char FAR *out, - const unsigned char FAR * Z_RESTRICT from, - unsigned len, - unsigned char FAR *limit) { - Assert(out + len <= limit, "chunk copy exceeds safety limit"); - return chunkcopy_core_safe(out, from, len, limit); -} - -/* - Perform chunky copy within the same buffer, where the source and destination - may potentially overlap. - - Assumes that len > 0 on entry, and that it's safe to write at least - CHUNKCOPY_CHUNK_SIZE*3 bytes to the output. - */ -static inline unsigned char FAR *chunkcopy_lapped_relaxed(unsigned char FAR *out, - unsigned dist, - unsigned len) { - if (dist < len && dist < CHUNKCOPY_CHUNK_SIZE) { - return chunkset_core(out, dist, len); - } - return chunkcopy_core(out, out - dist, len); -} - -/* - Behave like chunkcopy_lapped_relaxed, but avoid writing beyond of legal output. - - Accepts an additional pointer to the end of safe output. A generic safe - copy would use (out + len), but it's normally the case that the end of the - output buffer is beyond the end of the current copy, and this can still be - exploited. - */ -static inline unsigned char FAR *chunkcopy_lapped_safe(unsigned char FAR *out, - unsigned dist, - unsigned len, - unsigned char FAR *limit) { - Assert(out + len <= limit, "chunk copy exceeds safety limit"); - if (limit - out < CHUNKCOPY_CHUNK_SIZE * 3) { - /* TODO: try harder to optimise this */ - while (len-- > 0) { - *out = *(out - dist); - out++; - } - return out; - } - return chunkcopy_lapped_relaxed(out, dist, len); -} - -#undef Z_RESTRICT - -#endif /* CHUNKCOPY_H */
diff --git a/third_party/zlib/contrib/arm/inffast.c b/third_party/zlib/contrib/arm/inffast.c deleted file mode 100644 index f7f5007..0000000 --- a/third_party/zlib/contrib/arm/inffast.c +++ /dev/null
@@ -1,307 +0,0 @@ -/* inffast.c -- fast decoding - * Copyright (C) 1995-2017 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h - */ - -#include "zutil.h" -#include "inftrees.h" -#include "inflate.h" -#include "inffast.h" -#include "chunkcopy.h" - -#ifdef ASMINF -# pragma message("Assembler code may have bugs -- use at your own risk") -#else - -/* - Decode literal, length, and distance codes and write out the resulting - literal and match bytes until either not enough input or output is - available, an end-of-block is encountered, or a data error is encountered. - When large enough input and output buffers are supplied to inflate(), for - example, a 16K input buffer and a 64K output buffer, more than 95% of the - inflate execution time is spent in this routine. - - Entry assumptions: - - state->mode == LEN - strm->avail_in >= 6 - strm->avail_out >= 258 - start >= strm->avail_out - state->bits < 8 - - On return, state->mode is one of: - - LEN -- ran out of enough output space or enough available input - TYPE -- reached end of block code, inflate() to interpret next block - BAD -- error in block data - - Notes: - - - The maximum input bits used by a length/distance pair is 15 bits for the - length code, 5 bits for the length extra, 15 bits for the distance code, - and 13 bits for the distance extra. This totals 48 bits, or six bytes. - Therefore if strm->avail_in >= 6, then there is enough input to avoid - checking for available input while decoding. - - - The maximum bytes that a single length/distance pair can output is 258 - bytes, which is the maximum length that can be coded. inflate_fast() - requires strm->avail_out >= 258 for each loop to avoid checking for - output space. - */ -void ZLIB_INTERNAL inflate_fast(strm, start) -z_streamp strm; -unsigned start; /* inflate()'s starting value for strm->avail_out */ -{ - struct inflate_state FAR *state; - z_const unsigned char FAR *in; /* local strm->next_in */ - z_const unsigned char FAR *last; /* have enough input while in < last */ - unsigned char FAR *out; /* local strm->next_out */ - unsigned char FAR *beg; /* inflate()'s initial strm->next_out */ - unsigned char FAR *end; /* while out < end, enough space available */ - unsigned char FAR *limit; /* safety limit for chunky copies */ -#ifdef INFLATE_STRICT - unsigned dmax; /* maximum distance from zlib header */ -#endif - unsigned wsize; /* window size or zero if not using window */ - unsigned whave; /* valid bytes in the window */ - unsigned wnext; /* window write index */ - unsigned char FAR *window; /* allocated sliding window, if wsize != 0 */ - unsigned long hold; /* local strm->hold */ - unsigned bits; /* local strm->bits */ - code const FAR *lcode; /* local strm->lencode */ - code const FAR *dcode; /* local strm->distcode */ - unsigned lmask; /* mask for first level of length codes */ - unsigned dmask; /* mask for first level of distance codes */ - code here; /* retrieved table entry */ - unsigned op; /* code bits, operation, extra bits, or */ - /* window position, window bytes to copy */ - unsigned len; /* match length, unused bytes */ - unsigned dist; /* match distance */ - unsigned char FAR *from; /* where to copy match from */ - - /* copy state to local variables */ - state = (struct inflate_state FAR *)strm->state; - in = strm->next_in; - last = in + (strm->avail_in - 5); - out = strm->next_out; - beg = out - (start - strm->avail_out); - end = out + (strm->avail_out - 257); - limit = out + strm->avail_out; -#ifdef INFLATE_STRICT - dmax = state->dmax; -#endif - wsize = state->wsize; - whave = state->whave; - wnext = (state->wnext == 0 && whave >= wsize) ? wsize : state->wnext; - window = state->window; - hold = state->hold; - bits = state->bits; - lcode = state->lencode; - dcode = state->distcode; - lmask = (1U << state->lenbits) - 1; - dmask = (1U << state->distbits) - 1; - - /* decode literals and length/distances until end-of-block or not enough - input data or output space */ - do { - if (bits < 15) { - hold += (unsigned long)(*in++) << bits; - bits += 8; - hold += (unsigned long)(*in++) << bits; - bits += 8; - } - here = lcode[hold & lmask]; - dolen: - op = (unsigned)(here.bits); - hold >>= op; - bits -= op; - op = (unsigned)(here.op); - if (op == 0) { /* literal */ - Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? - "inflate: literal '%c'\n" : - "inflate: literal 0x%02x\n", here.val)); - *out++ = (unsigned char)(here.val); - } - else if (op & 16) { /* length base */ - len = (unsigned)(here.val); - op &= 15; /* number of extra bits */ - if (op) { - if (bits < op) { - hold += (unsigned long)(*in++) << bits; - bits += 8; - } - len += (unsigned)hold & ((1U << op) - 1); - hold >>= op; - bits -= op; - } - Tracevv((stderr, "inflate: length %u\n", len)); - if (bits < 15) { - hold += (unsigned long)(*in++) << bits; - bits += 8; - hold += (unsigned long)(*in++) << bits; - bits += 8; - } - here = dcode[hold & dmask]; - dodist: - op = (unsigned)(here.bits); - hold >>= op; - bits -= op; - op = (unsigned)(here.op); - if (op & 16) { /* distance base */ - dist = (unsigned)(here.val); - op &= 15; /* number of extra bits */ - if (bits < op) { - hold += (unsigned long)(*in++) << bits; - bits += 8; - if (bits < op) { - hold += (unsigned long)(*in++) << bits; - bits += 8; - } - } - dist += (unsigned)hold & ((1U << op) - 1); -#ifdef INFLATE_STRICT - if (dist > dmax) { - strm->msg = (char *)"invalid distance too far back"; - state->mode = BAD; - break; - } -#endif - hold >>= op; - bits -= op; - Tracevv((stderr, "inflate: distance %u\n", dist)); - op = (unsigned)(out - beg); /* max distance in output */ - if (dist > op) { /* see if copy from window */ - op = dist - op; /* distance back in window */ - if (op > whave) { - if (state->sane) { - strm->msg = - (char *)"invalid distance too far back"; - state->mode = BAD; - break; - } -#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR - if (len <= op - whave) { - do { - *out++ = 0; - } while (--len); - continue; - } - len -= op - whave; - do { - *out++ = 0; - } while (--op > whave); - if (op == 0) { - from = out - dist; - do { - *out++ = *from++; - } while (--len); - continue; - } -#endif - } - from = window; - if (wnext >= op) { /* contiguous in window */ - from += wnext - op; - } - else { /* wrap around window */ - op -= wnext; - from += wsize - op; - if (op < len) { /* some from end of window */ - len -= op; - out = chunkcopy_safe(out, from, op, limit); - from = window; /* more from start of window */ - op = wnext; - /* This (rare) case can create a situation where - the first chunkcopy below must be checked. - */ - } - } - if (op < len) { /* still need some from output */ - out = chunkcopy_safe(out, from, op, limit); - len -= op; - /* When dist is small the amount of data that can be - copied from the window is also small, and progress - towards the dangerous end of the output buffer is - also small. This means that for trivial memsets and - for chunkunroll_relaxed() a safety check is - unnecessary. However, these conditions may not be - entered at all, and in that case it's possible that - the main copy is near the end. - */ - out = chunkunroll_relaxed(out, &dist, &len); - out = chunkcopy_safe(out, out - dist, len, limit); - } else { - /* from points to window, so there is no risk of - overlapping pointers requiring memset-like behaviour - */ - out = chunkcopy_safe(out, from, len, limit); - } - } - else { - /* Whole reference is in range of current output. No - range checks are necessary because we start with room - for at least 258 bytes of output, so unroll and roundoff - operations can write beyond `out+len` so long as they - stay within 258 bytes of `out`. - */ - out = chunkcopy_lapped_relaxed(out, dist, len); - } - } - else if ((op & 64) == 0) { /* 2nd level distance code */ - here = dcode[here.val + (hold & ((1U << op) - 1))]; - goto dodist; - } - else { - strm->msg = (char *)"invalid distance code"; - state->mode = BAD; - break; - } - } - else if ((op & 64) == 0) { /* 2nd level length code */ - here = lcode[here.val + (hold & ((1U << op) - 1))]; - goto dolen; - } - else if (op & 32) { /* end-of-block */ - Tracevv((stderr, "inflate: end of block\n")); - state->mode = TYPE; - break; - } - else { - strm->msg = (char *)"invalid literal/length code"; - state->mode = BAD; - break; - } - } while (in < last && out < end); - - /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ - len = bits >> 3; - in -= len; - bits -= len << 3; - hold &= (1U << bits) - 1; - - /* update state and return */ - strm->next_in = in; - strm->next_out = out; - strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last)); - strm->avail_out = (unsigned)(out < end ? - 257 + (end - out) : 257 - (out - end)); - state->hold = hold; - state->bits = bits; - return; -} - -/* - inflate_fast() speedups that turned out slower (on a PowerPC G3 750CXe): - - Using bit fields for code structure - - Different op definition to avoid & for extra bits (do & for table bits) - - Three separate decoding do-loops for direct, window, and wnext == 0 - - Special case for distance > 1 copies to do overlapped load and store copy - - Explicit branch predictions (based on measured branch probabilities) - - Deferring match copy and interspersed it with decoding subsequent codes - - Swapping literal/length else - - Swapping window/direct else - - Larger unrolled copy loops (three is about right) - - Moving len -= 3 statement into middle of loop - */ - -#endif /* !ASMINF */
diff --git a/third_party/zlib/contrib/arm/inflate.c b/third_party/zlib/contrib/arm/inflate.c deleted file mode 100644 index e40322c..0000000 --- a/third_party/zlib/contrib/arm/inflate.c +++ /dev/null
@@ -1,1571 +0,0 @@ -/* inflate.c -- zlib decompression - * Copyright (C) 1995-2016 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h - */ - -/* - * Change history: - * - * 1.2.beta0 24 Nov 2002 - * - First version -- complete rewrite of inflate to simplify code, avoid - * creation of window when not needed, minimize use of window when it is - * needed, make inffast.c even faster, implement gzip decoding, and to - * improve code readability and style over the previous zlib inflate code - * - * 1.2.beta1 25 Nov 2002 - * - Use pointers for available input and output checking in inffast.c - * - Remove input and output counters in inffast.c - * - Change inffast.c entry and loop from avail_in >= 7 to >= 6 - * - Remove unnecessary second byte pull from length extra in inffast.c - * - Unroll direct copy to three copies per loop in inffast.c - * - * 1.2.beta2 4 Dec 2002 - * - Change external routine names to reduce potential conflicts - * - Correct filename to inffixed.h for fixed tables in inflate.c - * - Make hbuf[] unsigned char to match parameter type in inflate.c - * - Change strm->next_out[-state->offset] to *(strm->next_out - state->offset) - * to avoid negation problem on Alphas (64 bit) in inflate.c - * - * 1.2.beta3 22 Dec 2002 - * - Add comments on state->bits assertion in inffast.c - * - Add comments on op field in inftrees.h - * - Fix bug in reuse of allocated window after inflateReset() - * - Remove bit fields--back to byte structure for speed - * - Remove distance extra == 0 check in inflate_fast()--only helps for lengths - * - Change post-increments to pre-increments in inflate_fast(), PPC biased? - * - Add compile time option, POSTINC, to use post-increments instead (Intel?) - * - Make MATCH copy in inflate() much faster for when inflate_fast() not used - * - Use local copies of stream next and avail values, as well as local bit - * buffer and bit count in inflate()--for speed when inflate_fast() not used - * - * 1.2.beta4 1 Jan 2003 - * - Split ptr - 257 statements in inflate_table() to avoid compiler warnings - * - Move a comment on output buffer sizes from inffast.c to inflate.c - * - Add comments in inffast.c to introduce the inflate_fast() routine - * - Rearrange window copies in inflate_fast() for speed and simplification - * - Unroll last copy for window match in inflate_fast() - * - Use local copies of window variables in inflate_fast() for speed - * - Pull out common wnext == 0 case for speed in inflate_fast() - * - Make op and len in inflate_fast() unsigned for consistency - * - Add FAR to lcode and dcode declarations in inflate_fast() - * - Simplified bad distance check in inflate_fast() - * - Added inflateBackInit(), inflateBack(), and inflateBackEnd() in new - * source file infback.c to provide a call-back interface to inflate for - * programs like gzip and unzip -- uses window as output buffer to avoid - * window copying - * - * 1.2.beta5 1 Jan 2003 - * - Improved inflateBack() interface to allow the caller to provide initial - * input in strm. - * - Fixed stored blocks bug in inflateBack() - * - * 1.2.beta6 4 Jan 2003 - * - Added comments in inffast.c on effectiveness of POSTINC - * - Typecasting all around to reduce compiler warnings - * - Changed loops from while (1) or do {} while (1) to for (;;), again to - * make compilers happy - * - Changed type of window in inflateBackInit() to unsigned char * - * - * 1.2.beta7 27 Jan 2003 - * - Changed many types to unsigned or unsigned short to avoid warnings - * - Added inflateCopy() function - * - * 1.2.0 9 Mar 2003 - * - Changed inflateBack() interface to provide separate opaque descriptors - * for the in() and out() functions - * - Changed inflateBack() argument and in_func typedef to swap the length - * and buffer address return values for the input function - * - Check next_in and next_out for Z_NULL on entry to inflate() - * - * The history for versions after 1.2.0 are in ChangeLog in zlib distribution. - */ - -#include "zutil.h" -#include "inftrees.h" -#include "inflate.h" -#include "inffast.h" -#include "contrib/arm/chunkcopy.h" - -#ifdef MAKEFIXED -# ifndef BUILDFIXED -# define BUILDFIXED -# endif -#endif - -/* function prototypes */ -local int inflateStateCheck OF((z_streamp strm)); -local void fixedtables OF((struct inflate_state FAR *state)); -local int updatewindow OF((z_streamp strm, const unsigned char FAR *end, - unsigned copy)); -#ifdef BUILDFIXED - void makefixed OF((void)); -#endif -local unsigned syncsearch OF((unsigned FAR *have, const unsigned char FAR *buf, - unsigned len)); - -local int inflateStateCheck(strm) -z_streamp strm; -{ - struct inflate_state FAR *state; - if (strm == Z_NULL || - strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) - return 1; - state = (struct inflate_state FAR *)strm->state; - if (state == Z_NULL || state->strm != strm || - state->mode < HEAD || state->mode > SYNC) - return 1; - return 0; -} - -int ZEXPORT inflateResetKeep(strm) -z_streamp strm; -{ - struct inflate_state FAR *state; - - if (inflateStateCheck(strm)) return Z_STREAM_ERROR; - state = (struct inflate_state FAR *)strm->state; - strm->total_in = strm->total_out = state->total = 0; - strm->msg = Z_NULL; - if (state->wrap) /* to support ill-conceived Java test suite */ - strm->adler = state->wrap & 1; - state->mode = HEAD; - state->last = 0; - state->havedict = 0; - state->dmax = 32768U; - state->head = Z_NULL; - state->hold = 0; - state->bits = 0; - state->lencode = state->distcode = state->next = state->codes; - state->sane = 1; - state->back = -1; - Tracev((stderr, "inflate: reset\n")); - return Z_OK; -} - -int ZEXPORT inflateReset(strm) -z_streamp strm; -{ - struct inflate_state FAR *state; - - if (inflateStateCheck(strm)) return Z_STREAM_ERROR; - state = (struct inflate_state FAR *)strm->state; - state->wsize = 0; - state->whave = 0; - state->wnext = 0; - return inflateResetKeep(strm); -} - -int ZEXPORT inflateReset2(strm, windowBits) -z_streamp strm; -int windowBits; -{ - int wrap; - struct inflate_state FAR *state; - - /* get the state */ - if (inflateStateCheck(strm)) return Z_STREAM_ERROR; - state = (struct inflate_state FAR *)strm->state; - - /* extract wrap request from windowBits parameter */ - if (windowBits < 0) { - wrap = 0; - windowBits = -windowBits; - } - else { - wrap = (windowBits >> 4) + 5; -#ifdef GUNZIP - if (windowBits < 48) - windowBits &= 15; -#endif - } - - /* set number of window bits, free window if different */ - if (windowBits && (windowBits < 8 || windowBits > 15)) - return Z_STREAM_ERROR; - if (state->window != Z_NULL && state->wbits != (unsigned)windowBits) { - ZFREE(strm, state->window); - state->window = Z_NULL; - } - - /* update state and reset the rest of it */ - state->wrap = wrap; - state->wbits = (unsigned)windowBits; - return inflateReset(strm); -} - -int ZEXPORT inflateInit2_(strm, windowBits, version, stream_size) -z_streamp strm; -int windowBits; -const char *version; -int stream_size; -{ - int ret; - struct inflate_state FAR *state; - - if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || - stream_size != (int)(sizeof(z_stream))) - return Z_VERSION_ERROR; - if (strm == Z_NULL) return Z_STREAM_ERROR; - strm->msg = Z_NULL; /* in case we return an error */ - if (strm->zalloc == (alloc_func)0) { -#ifdef Z_SOLO - return Z_STREAM_ERROR; -#else - strm->zalloc = zcalloc; - strm->opaque = (voidpf)0; -#endif - } - if (strm->zfree == (free_func)0) -#ifdef Z_SOLO - return Z_STREAM_ERROR; -#else - strm->zfree = zcfree; -#endif - state = (struct inflate_state FAR *) - ZALLOC(strm, 1, sizeof(struct inflate_state)); - if (state == Z_NULL) return Z_MEM_ERROR; - Tracev((stderr, "inflate: allocated\n")); - strm->state = (struct internal_state FAR *)state; - state->strm = strm; - state->window = Z_NULL; - state->mode = HEAD; /* to pass state test in inflateReset2() */ - ret = inflateReset2(strm, windowBits); - if (ret != Z_OK) { - ZFREE(strm, state); - strm->state = Z_NULL; - } - return ret; -} - -int ZEXPORT inflateInit_(strm, version, stream_size) -z_streamp strm; -const char *version; -int stream_size; -{ - return inflateInit2_(strm, DEF_WBITS, version, stream_size); -} - -int ZEXPORT inflatePrime(strm, bits, value) -z_streamp strm; -int bits; -int value; -{ - struct inflate_state FAR *state; - - if (inflateStateCheck(strm)) return Z_STREAM_ERROR; - state = (struct inflate_state FAR *)strm->state; - if (bits < 0) { - state->hold = 0; - state->bits = 0; - return Z_OK; - } - if (bits > 16 || state->bits + (uInt)bits > 32) return Z_STREAM_ERROR; - value &= (1L << bits) - 1; - state->hold += (unsigned)value << state->bits; - state->bits += (uInt)bits; - return Z_OK; -} - -/* - Return state with length and distance decoding tables and index sizes set to - fixed code decoding. Normally this returns fixed tables from inffixed.h. - If BUILDFIXED is defined, then instead this routine builds the tables the - first time it's called, and returns those tables the first time and - thereafter. This reduces the size of the code by about 2K bytes, in - exchange for a little execution time. However, BUILDFIXED should not be - used for threaded applications, since the rewriting of the tables and virgin - may not be thread-safe. - */ -local void fixedtables(state) -struct inflate_state FAR *state; -{ -#ifdef BUILDFIXED - static int virgin = 1; - static code *lenfix, *distfix; - static code fixed[544]; - - /* build fixed huffman tables if first call (may not be thread safe) */ - if (virgin) { - unsigned sym, bits; - static code *next; - - /* literal/length table */ - sym = 0; - while (sym < 144) state->lens[sym++] = 8; - while (sym < 256) state->lens[sym++] = 9; - while (sym < 280) state->lens[sym++] = 7; - while (sym < 288) state->lens[sym++] = 8; - next = fixed; - lenfix = next; - bits = 9; - inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work); - - /* distance table */ - sym = 0; - while (sym < 32) state->lens[sym++] = 5; - distfix = next; - bits = 5; - inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work); - - /* do this just once */ - virgin = 0; - } -#else /* !BUILDFIXED */ -# include "inffixed.h" -#endif /* BUILDFIXED */ - state->lencode = lenfix; - state->lenbits = 9; - state->distcode = distfix; - state->distbits = 5; -} - -#ifdef MAKEFIXED -#include <stdio.h> - -/* - Write out the inffixed.h that is #include'd above. Defining MAKEFIXED also - defines BUILDFIXED, so the tables are built on the fly. makefixed() writes - those tables to stdout, which would be piped to inffixed.h. A small program - can simply call makefixed to do this: - - void makefixed(void); - - int main(void) - { - makefixed(); - return 0; - } - - Then that can be linked with zlib built with MAKEFIXED defined and run: - - a.out > inffixed.h - */ -void makefixed() -{ - unsigned low, size; - struct inflate_state state; - - fixedtables(&state); - puts(" /* inffixed.h -- table for decoding fixed codes"); - puts(" * Generated automatically by makefixed()."); - puts(" */"); - puts(""); - puts(" /* WARNING: this file should *not* be used by applications."); - puts(" It is part of the implementation of this library and is"); - puts(" subject to change. Applications should only use zlib.h."); - puts(" */"); - puts(""); - size = 1U << 9; - printf(" static const code lenfix[%u] = {", size); - low = 0; - for (;;) { - if ((low % 7) == 0) printf("\n "); - printf("{%u,%u,%d}", (low & 127) == 99 ? 64 : state.lencode[low].op, - state.lencode[low].bits, state.lencode[low].val); - if (++low == size) break; - putchar(','); - } - puts("\n };"); - size = 1U << 5; - printf("\n static const code distfix[%u] = {", size); - low = 0; - for (;;) { - if ((low % 6) == 0) printf("\n "); - printf("{%u,%u,%d}", state.distcode[low].op, state.distcode[low].bits, - state.distcode[low].val); - if (++low == size) break; - putchar(','); - } - puts("\n };"); -} -#endif /* MAKEFIXED */ - -/* - Update the window with the last wsize (normally 32K) bytes written before - returning. If window does not exist yet, create it. This is only called - when a window is already in use, or when output has been written during this - inflate call, but the end of the deflate stream has not been reached yet. - It is also called to create a window for dictionary data when a dictionary - is loaded. - - Providing output buffers larger than 32K to inflate() should provide a speed - advantage, since only the last 32K of output is copied to the sliding window - upon return from inflate(), and since all distances after the first 32K of - output will fall in the output data, making match copies simpler and faster. - The advantage may be dependent on the size of the processor's data caches. - */ -local int updatewindow(strm, end, copy) -z_streamp strm; -const Bytef *end; -unsigned copy; -{ - struct inflate_state FAR *state; - unsigned dist; - - state = (struct inflate_state FAR *)strm->state; - - /* if it hasn't been done already, allocate space for the window */ - if (state->window == Z_NULL) { - unsigned wsize = 1U << state->wbits; - state->window = (unsigned char FAR *) - ZALLOC(strm, wsize + CHUNKCOPY_CHUNK_SIZE, - sizeof(unsigned char)); - if (state->window == Z_NULL) return 1; -#ifdef INFLATE_CLEAR_UNUSED_UNDEFINED - /* Copies from the overflow portion of this buffer are undefined and - may cause analysis tools to raise a warning if we don't initialize - it. However, this undefined data overwrites other undefined data - and is subsequently either overwritten or left deliberately - undefined at the end of decode; so there's really no point. - */ - memset(state->window + wsize, 0, CHUNKCOPY_CHUNK_SIZE); -#endif - } - - /* if window not in use yet, initialize */ - if (state->wsize == 0) { - state->wsize = 1U << state->wbits; - state->wnext = 0; - state->whave = 0; - } - - /* copy state->wsize or less output bytes into the circular window */ - if (copy >= state->wsize) { - zmemcpy(state->window, end - state->wsize, state->wsize); - state->wnext = 0; - state->whave = state->wsize; - } - else { - dist = state->wsize - state->wnext; - if (dist > copy) dist = copy; - zmemcpy(state->window + state->wnext, end - copy, dist); - copy -= dist; - if (copy) { - zmemcpy(state->window, end - copy, copy); - state->wnext = copy; - state->whave = state->wsize; - } - else { - state->wnext += dist; - if (state->wnext == state->wsize) state->wnext = 0; - if (state->whave < state->wsize) state->whave += dist; - } - } - return 0; -} - -/* Macros for inflate(): */ - -/* check function to use adler32() for zlib or crc32() for gzip */ -#ifdef GUNZIP -# define UPDATE(check, buf, len) \ - (state->flags ? crc32(check, buf, len) : adler32(check, buf, len)) -#else -# define UPDATE(check, buf, len) adler32(check, buf, len) -#endif - -/* check macros for header crc */ -#ifdef GUNZIP -# define CRC2(check, word) \ - do { \ - hbuf[0] = (unsigned char)(word); \ - hbuf[1] = (unsigned char)((word) >> 8); \ - check = crc32(check, hbuf, 2); \ - } while (0) - -# define CRC4(check, word) \ - do { \ - hbuf[0] = (unsigned char)(word); \ - hbuf[1] = (unsigned char)((word) >> 8); \ - hbuf[2] = (unsigned char)((word) >> 16); \ - hbuf[3] = (unsigned char)((word) >> 24); \ - check = crc32(check, hbuf, 4); \ - } while (0) -#endif - -/* Load registers with state in inflate() for speed */ -#define LOAD() \ - do { \ - put = strm->next_out; \ - left = strm->avail_out; \ - next = strm->next_in; \ - have = strm->avail_in; \ - hold = state->hold; \ - bits = state->bits; \ - } while (0) - -/* Restore state from registers in inflate() */ -#define RESTORE() \ - do { \ - strm->next_out = put; \ - strm->avail_out = left; \ - strm->next_in = next; \ - strm->avail_in = have; \ - state->hold = hold; \ - state->bits = bits; \ - } while (0) - -/* Clear the input bit accumulator */ -#define INITBITS() \ - do { \ - hold = 0; \ - bits = 0; \ - } while (0) - -/* Get a byte of input into the bit accumulator, or return from inflate() - if there is no input available. */ -#define PULLBYTE() \ - do { \ - if (have == 0) goto inf_leave; \ - have--; \ - hold += (unsigned long)(*next++) << bits; \ - bits += 8; \ - } while (0) - -/* Assure that there are at least n bits in the bit accumulator. If there is - not enough available input to do that, then return from inflate(). */ -#define NEEDBITS(n) \ - do { \ - while (bits < (unsigned)(n)) \ - PULLBYTE(); \ - } while (0) - -/* Return the low n bits of the bit accumulator (n < 16) */ -#define BITS(n) \ - ((unsigned)hold & ((1U << (n)) - 1)) - -/* Remove n bits from the bit accumulator */ -#define DROPBITS(n) \ - do { \ - hold >>= (n); \ - bits -= (unsigned)(n); \ - } while (0) - -/* Remove zero to seven bits as needed to go to a byte boundary */ -#define BYTEBITS() \ - do { \ - hold >>= bits & 7; \ - bits -= bits & 7; \ - } while (0) - -/* - inflate() uses a state machine to process as much input data and generate as - much output data as possible before returning. The state machine is - structured roughly as follows: - - for (;;) switch (state) { - ... - case STATEn: - if (not enough input data or output space to make progress) - return; - ... make progress ... - state = STATEm; - break; - ... - } - - so when inflate() is called again, the same case is attempted again, and - if the appropriate resources are provided, the machine proceeds to the - next state. The NEEDBITS() macro is usually the way the state evaluates - whether it can proceed or should return. NEEDBITS() does the return if - the requested bits are not available. The typical use of the BITS macros - is: - - NEEDBITS(n); - ... do something with BITS(n) ... - DROPBITS(n); - - where NEEDBITS(n) either returns from inflate() if there isn't enough - input left to load n bits into the accumulator, or it continues. BITS(n) - gives the low n bits in the accumulator. When done, DROPBITS(n) drops - the low n bits off the accumulator. INITBITS() clears the accumulator - and sets the number of available bits to zero. BYTEBITS() discards just - enough bits to put the accumulator on a byte boundary. After BYTEBITS() - and a NEEDBITS(8), then BITS(8) would return the next byte in the stream. - - NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return - if there is no input available. The decoding of variable length codes uses - PULLBYTE() directly in order to pull just enough bytes to decode the next - code, and no more. - - Some states loop until they get enough input, making sure that enough - state information is maintained to continue the loop where it left off - if NEEDBITS() returns in the loop. For example, want, need, and keep - would all have to actually be part of the saved state in case NEEDBITS() - returns: - - case STATEw: - while (want < need) { - NEEDBITS(n); - keep[want++] = BITS(n); - DROPBITS(n); - } - state = STATEx; - case STATEx: - - As shown above, if the next state is also the next case, then the break - is omitted. - - A state may also return if there is not enough output space available to - complete that state. Those states are copying stored data, writing a - literal byte, and copying a matching string. - - When returning, a "goto inf_leave" is used to update the total counters, - update the check value, and determine whether any progress has been made - during that inflate() call in order to return the proper return code. - Progress is defined as a change in either strm->avail_in or strm->avail_out. - When there is a window, goto inf_leave will update the window with the last - output written. If a goto inf_leave occurs in the middle of decompression - and there is no window currently, goto inf_leave will create one and copy - output to the window for the next call of inflate(). - - In this implementation, the flush parameter of inflate() only affects the - return code (per zlib.h). inflate() always writes as much as possible to - strm->next_out, given the space available and the provided input--the effect - documented in zlib.h of Z_SYNC_FLUSH. Furthermore, inflate() always defers - the allocation of and copying into a sliding window until necessary, which - provides the effect documented in zlib.h for Z_FINISH when the entire input - stream available. So the only thing the flush parameter actually does is: - when flush is set to Z_FINISH, inflate() cannot return Z_OK. Instead it - will return Z_BUF_ERROR if it has not reached the end of the stream. - */ - -int ZEXPORT inflate(strm, flush) -z_streamp strm; -int flush; -{ - struct inflate_state FAR *state; - z_const unsigned char FAR *next; /* next input */ - unsigned char FAR *put; /* next output */ - unsigned have, left; /* available input and output */ - unsigned long hold; /* bit buffer */ - unsigned bits; /* bits in bit buffer */ - unsigned in, out; /* save starting available input and output */ - unsigned copy; /* number of stored or match bytes to copy */ - unsigned char FAR *from; /* where to copy match bytes from */ - code here; /* current decoding table entry */ - code last; /* parent table entry */ - unsigned len; /* length to copy for repeats, bits to drop */ - int ret; /* return code */ -#ifdef GUNZIP - unsigned char hbuf[4]; /* buffer for gzip header crc calculation */ -#endif - static const unsigned short order[19] = /* permutation of code lengths */ - {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; - - if (inflateStateCheck(strm) || strm->next_out == Z_NULL || - (strm->next_in == Z_NULL && strm->avail_in != 0)) - return Z_STREAM_ERROR; - - state = (struct inflate_state FAR *)strm->state; - if (state->mode == TYPE) state->mode = TYPEDO; /* skip check */ - LOAD(); - in = have; - out = left; - ret = Z_OK; - for (;;) - switch (state->mode) { - case HEAD: - if (state->wrap == 0) { - state->mode = TYPEDO; - break; - } - NEEDBITS(16); -#ifdef GUNZIP - if ((state->wrap & 2) && hold == 0x8b1f) { /* gzip header */ - if (state->wbits == 0) - state->wbits = 15; - state->check = crc32(0L, Z_NULL, 0); - CRC2(state->check, hold); - INITBITS(); - state->mode = FLAGS; - break; - } - state->flags = 0; /* expect zlib header */ - if (state->head != Z_NULL) - state->head->done = -1; - if (!(state->wrap & 1) || /* check if zlib header allowed */ -#else - if ( -#endif - ((BITS(8) << 8) + (hold >> 8)) % 31) { - strm->msg = (char *)"incorrect header check"; - state->mode = BAD; - break; - } - if (BITS(4) != Z_DEFLATED) { - strm->msg = (char *)"unknown compression method"; - state->mode = BAD; - break; - } - DROPBITS(4); - len = BITS(4) + 8; - if (state->wbits == 0) - state->wbits = len; - if (len > 15 || len > state->wbits) { - strm->msg = (char *)"invalid window size"; - state->mode = BAD; - break; - } - state->dmax = 1U << len; - Tracev((stderr, "inflate: zlib header ok\n")); - strm->adler = state->check = adler32(0L, Z_NULL, 0); - state->mode = hold & 0x200 ? DICTID : TYPE; - INITBITS(); - break; -#ifdef GUNZIP - case FLAGS: - NEEDBITS(16); - state->flags = (int)(hold); - if ((state->flags & 0xff) != Z_DEFLATED) { - strm->msg = (char *)"unknown compression method"; - state->mode = BAD; - break; - } - if (state->flags & 0xe000) { - strm->msg = (char *)"unknown header flags set"; - state->mode = BAD; - break; - } - if (state->head != Z_NULL) - state->head->text = (int)((hold >> 8) & 1); - if ((state->flags & 0x0200) && (state->wrap & 4)) - CRC2(state->check, hold); - INITBITS(); - state->mode = TIME; - case TIME: - NEEDBITS(32); - if (state->head != Z_NULL) - state->head->time = hold; - if ((state->flags & 0x0200) && (state->wrap & 4)) - CRC4(state->check, hold); - INITBITS(); - state->mode = OS; - case OS: - NEEDBITS(16); - if (state->head != Z_NULL) { - state->head->xflags = (int)(hold & 0xff); - state->head->os = (int)(hold >> 8); - } - if ((state->flags & 0x0200) && (state->wrap & 4)) - CRC2(state->check, hold); - INITBITS(); - state->mode = EXLEN; - case EXLEN: - if (state->flags & 0x0400) { - NEEDBITS(16); - state->length = (unsigned)(hold); - if (state->head != Z_NULL) - state->head->extra_len = (unsigned)hold; - if ((state->flags & 0x0200) && (state->wrap & 4)) - CRC2(state->check, hold); - INITBITS(); - } - else if (state->head != Z_NULL) - state->head->extra = Z_NULL; - state->mode = EXTRA; - case EXTRA: - if (state->flags & 0x0400) { - copy = state->length; - if (copy > have) copy = have; - if (copy) { - if (state->head != Z_NULL && - state->head->extra != Z_NULL) { - len = state->head->extra_len - state->length; - zmemcpy(state->head->extra + len, next, - len + copy > state->head->extra_max ? - state->head->extra_max - len : copy); - } - if ((state->flags & 0x0200) && (state->wrap & 4)) - state->check = crc32(state->check, next, copy); - have -= copy; - next += copy; - state->length -= copy; - } - if (state->length) goto inf_leave; - } - state->length = 0; - state->mode = NAME; - case NAME: - if (state->flags & 0x0800) { - if (have == 0) goto inf_leave; - copy = 0; - do { - len = (unsigned)(next[copy++]); - if (state->head != Z_NULL && - state->head->name != Z_NULL && - state->length < state->head->name_max) - state->head->name[state->length++] = (Bytef)len; - } while (len && copy < have); - if ((state->flags & 0x0200) && (state->wrap & 4)) - state->check = crc32(state->check, next, copy); - have -= copy; - next += copy; - if (len) goto inf_leave; - } - else if (state->head != Z_NULL) - state->head->name = Z_NULL; - state->length = 0; - state->mode = COMMENT; - case COMMENT: - if (state->flags & 0x1000) { - if (have == 0) goto inf_leave; - copy = 0; - do { - len = (unsigned)(next[copy++]); - if (state->head != Z_NULL && - state->head->comment != Z_NULL && - state->length < state->head->comm_max) - state->head->comment[state->length++] = (Bytef)len; - } while (len && copy < have); - if ((state->flags & 0x0200) && (state->wrap & 4)) - state->check = crc32(state->check, next, copy); - have -= copy; - next += copy; - if (len) goto inf_leave; - } - else if (state->head != Z_NULL) - state->head->comment = Z_NULL; - state->mode = HCRC; - case HCRC: - if (state->flags & 0x0200) { - NEEDBITS(16); - if ((state->wrap & 4) && hold != (state->check & 0xffff)) { - strm->msg = (char *)"header crc mismatch"; - state->mode = BAD; - break; - } - INITBITS(); - } - if (state->head != Z_NULL) { - state->head->hcrc = (int)((state->flags >> 9) & 1); - state->head->done = 1; - } - strm->adler = state->check = crc32(0L, Z_NULL, 0); - state->mode = TYPE; - break; -#endif - case DICTID: - NEEDBITS(32); - strm->adler = state->check = ZSWAP32(hold); - INITBITS(); - state->mode = DICT; - case DICT: - if (state->havedict == 0) { - RESTORE(); - return Z_NEED_DICT; - } - strm->adler = state->check = adler32(0L, Z_NULL, 0); - state->mode = TYPE; - case TYPE: - if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave; - case TYPEDO: - if (state->last) { - BYTEBITS(); - state->mode = CHECK; - break; - } - NEEDBITS(3); - state->last = BITS(1); - DROPBITS(1); - switch (BITS(2)) { - case 0: /* stored block */ - Tracev((stderr, "inflate: stored block%s\n", - state->last ? " (last)" : "")); - state->mode = STORED; - break; - case 1: /* fixed block */ - fixedtables(state); - Tracev((stderr, "inflate: fixed codes block%s\n", - state->last ? " (last)" : "")); - state->mode = LEN_; /* decode codes */ - if (flush == Z_TREES) { - DROPBITS(2); - goto inf_leave; - } - break; - case 2: /* dynamic block */ - Tracev((stderr, "inflate: dynamic codes block%s\n", - state->last ? " (last)" : "")); - state->mode = TABLE; - break; - case 3: - strm->msg = (char *)"invalid block type"; - state->mode = BAD; - } - DROPBITS(2); - break; - case STORED: - BYTEBITS(); /* go to byte boundary */ - NEEDBITS(32); - if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) { - strm->msg = (char *)"invalid stored block lengths"; - state->mode = BAD; - break; - } - state->length = (unsigned)hold & 0xffff; - Tracev((stderr, "inflate: stored length %u\n", - state->length)); - INITBITS(); - state->mode = COPY_; - if (flush == Z_TREES) goto inf_leave; - case COPY_: - state->mode = COPY; - case COPY: - copy = state->length; - if (copy) { - if (copy > have) copy = have; - if (copy > left) copy = left; - if (copy == 0) goto inf_leave; - zmemcpy(put, next, copy); - have -= copy; - next += copy; - left -= copy; - put += copy; - state->length -= copy; - break; - } - Tracev((stderr, "inflate: stored end\n")); - state->mode = TYPE; - break; - case TABLE: - NEEDBITS(14); - state->nlen = BITS(5) + 257; - DROPBITS(5); - state->ndist = BITS(5) + 1; - DROPBITS(5); - state->ncode = BITS(4) + 4; - DROPBITS(4); -#ifndef PKZIP_BUG_WORKAROUND - if (state->nlen > 286 || state->ndist > 30) { - strm->msg = (char *)"too many length or distance symbols"; - state->mode = BAD; - break; - } -#endif - Tracev((stderr, "inflate: table sizes ok\n")); - state->have = 0; - state->mode = LENLENS; - case LENLENS: - while (state->have < state->ncode) { - NEEDBITS(3); - state->lens[order[state->have++]] = (unsigned short)BITS(3); - DROPBITS(3); - } - while (state->have < 19) - state->lens[order[state->have++]] = 0; - state->next = state->codes; - state->lencode = (const code FAR *)(state->next); - state->lenbits = 7; - ret = inflate_table(CODES, state->lens, 19, &(state->next), - &(state->lenbits), state->work); - if (ret) { - strm->msg = (char *)"invalid code lengths set"; - state->mode = BAD; - break; - } - Tracev((stderr, "inflate: code lengths ok\n")); - state->have = 0; - state->mode = CODELENS; - case CODELENS: - while (state->have < state->nlen + state->ndist) { - for (;;) { - here = state->lencode[BITS(state->lenbits)]; - if ((unsigned)(here.bits) <= bits) break; - PULLBYTE(); - } - if (here.val < 16) { - DROPBITS(here.bits); - state->lens[state->have++] = here.val; - } - else { - if (here.val == 16) { - NEEDBITS(here.bits + 2); - DROPBITS(here.bits); - if (state->have == 0) { - strm->msg = (char *)"invalid bit length repeat"; - state->mode = BAD; - break; - } - len = state->lens[state->have - 1]; - copy = 3 + BITS(2); - DROPBITS(2); - } - else if (here.val == 17) { - NEEDBITS(here.bits + 3); - DROPBITS(here.bits); - len = 0; - copy = 3 + BITS(3); - DROPBITS(3); - } - else { - NEEDBITS(here.bits + 7); - DROPBITS(here.bits); - len = 0; - copy = 11 + BITS(7); - DROPBITS(7); - } - if (state->have + copy > state->nlen + state->ndist) { - strm->msg = (char *)"invalid bit length repeat"; - state->mode = BAD; - break; - } - while (copy--) - state->lens[state->have++] = (unsigned short)len; - } - } - - /* handle error breaks in while */ - if (state->mode == BAD) break; - - /* check for end-of-block code (better have one) */ - if (state->lens[256] == 0) { - strm->msg = (char *)"invalid code -- missing end-of-block"; - state->mode = BAD; - break; - } - - /* build code tables -- note: do not change the lenbits or distbits - values here (9 and 6) without reading the comments in inftrees.h - concerning the ENOUGH constants, which depend on those values */ - state->next = state->codes; - state->lencode = (const code FAR *)(state->next); - state->lenbits = 9; - ret = inflate_table(LENS, state->lens, state->nlen, &(state->next), - &(state->lenbits), state->work); - if (ret) { - strm->msg = (char *)"invalid literal/lengths set"; - state->mode = BAD; - break; - } - state->distcode = (const code FAR *)(state->next); - state->distbits = 6; - ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist, - &(state->next), &(state->distbits), state->work); - if (ret) { - strm->msg = (char *)"invalid distances set"; - state->mode = BAD; - break; - } - Tracev((stderr, "inflate: codes ok\n")); - state->mode = LEN_; - if (flush == Z_TREES) goto inf_leave; - case LEN_: - state->mode = LEN; - case LEN: - if (have >= 6 && left >= 258) { - RESTORE(); - inflate_fast(strm, out); - LOAD(); - if (state->mode == TYPE) - state->back = -1; - break; - } - state->back = 0; - for (;;) { - here = state->lencode[BITS(state->lenbits)]; - if ((unsigned)(here.bits) <= bits) break; - PULLBYTE(); - } - if (here.op && (here.op & 0xf0) == 0) { - last = here; - for (;;) { - here = state->lencode[last.val + - (BITS(last.bits + last.op) >> last.bits)]; - if ((unsigned)(last.bits + here.bits) <= bits) break; - PULLBYTE(); - } - DROPBITS(last.bits); - state->back += last.bits; - } - DROPBITS(here.bits); - state->back += here.bits; - state->length = (unsigned)here.val; - if ((int)(here.op) == 0) { - Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? - "inflate: literal '%c'\n" : - "inflate: literal 0x%02x\n", here.val)); - state->mode = LIT; - break; - } - if (here.op & 32) { - Tracevv((stderr, "inflate: end of block\n")); - state->back = -1; - state->mode = TYPE; - break; - } - if (here.op & 64) { - strm->msg = (char *)"invalid literal/length code"; - state->mode = BAD; - break; - } - state->extra = (unsigned)(here.op) & 15; - state->mode = LENEXT; - case LENEXT: - if (state->extra) { - NEEDBITS(state->extra); - state->length += BITS(state->extra); - DROPBITS(state->extra); - state->back += state->extra; - } - Tracevv((stderr, "inflate: length %u\n", state->length)); - state->was = state->length; - state->mode = DIST; - case DIST: - for (;;) { - here = state->distcode[BITS(state->distbits)]; - if ((unsigned)(here.bits) <= bits) break; - PULLBYTE(); - } - if ((here.op & 0xf0) == 0) { - last = here; - for (;;) { - here = state->distcode[last.val + - (BITS(last.bits + last.op) >> last.bits)]; - if ((unsigned)(last.bits + here.bits) <= bits) break; - PULLBYTE(); - } - DROPBITS(last.bits); - state->back += last.bits; - } - DROPBITS(here.bits); - state->back += here.bits; - if (here.op & 64) { - strm->msg = (char *)"invalid distance code"; - state->mode = BAD; - break; - } - state->offset = (unsigned)here.val; - state->extra = (unsigned)(here.op) & 15; - state->mode = DISTEXT; - case DISTEXT: - if (state->extra) { - NEEDBITS(state->extra); - state->offset += BITS(state->extra); - DROPBITS(state->extra); - state->back += state->extra; - } -#ifdef INFLATE_STRICT - if (state->offset > state->dmax) { - strm->msg = (char *)"invalid distance too far back"; - state->mode = BAD; - break; - } -#endif - Tracevv((stderr, "inflate: distance %u\n", state->offset)); - state->mode = MATCH; - case MATCH: - if (left == 0) goto inf_leave; - copy = out - left; - if (state->offset > copy) { /* copy from window */ - copy = state->offset - copy; - if (copy > state->whave) { - if (state->sane) { - strm->msg = (char *)"invalid distance too far back"; - state->mode = BAD; - break; - } -#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR - Trace((stderr, "inflate.c too far\n")); - copy -= state->whave; - if (copy > state->length) copy = state->length; - if (copy > left) copy = left; - left -= copy; - state->length -= copy; - do { - *put++ = 0; - } while (--copy); - if (state->length == 0) state->mode = LEN; - break; -#endif - } - if (copy > state->wnext) { - copy -= state->wnext; - from = state->window + (state->wsize - copy); - } - else - from = state->window + (state->wnext - copy); - if (copy > state->length) copy = state->length; - if (copy > left) copy = left; - put = chunkcopy_safe(put, from, copy, put + left); - } - else { /* copy from output */ - copy = state->length; - if (copy > left) copy = left; - put = chunkcopy_lapped_safe(put, state->offset, copy, put + left); - } - left -= copy; - state->length -= copy; - if (state->length == 0) state->mode = LEN; - break; - case LIT: - if (left == 0) goto inf_leave; - *put++ = (unsigned char)(state->length); - left--; - state->mode = LEN; - break; - case CHECK: - if (state->wrap) { - NEEDBITS(32); - out -= left; - strm->total_out += out; - state->total += out; - if ((state->wrap & 4) && out) - strm->adler = state->check = - UPDATE(state->check, put - out, out); - out = left; - if ((state->wrap & 4) && ( -#ifdef GUNZIP - state->flags ? hold : -#endif - ZSWAP32(hold)) != state->check) { - strm->msg = (char *)"incorrect data check"; - state->mode = BAD; - break; - } - INITBITS(); - Tracev((stderr, "inflate: check matches trailer\n")); - } -#ifdef GUNZIP - state->mode = LENGTH; - case LENGTH: - if (state->wrap && state->flags) { - NEEDBITS(32); - if (hold != (state->total & 0xffffffffUL)) { - strm->msg = (char *)"incorrect length check"; - state->mode = BAD; - break; - } - INITBITS(); - Tracev((stderr, "inflate: length matches trailer\n")); - } -#endif - state->mode = DONE; - case DONE: - ret = Z_STREAM_END; - goto inf_leave; - case BAD: - ret = Z_DATA_ERROR; - goto inf_leave; - case MEM: - return Z_MEM_ERROR; - case SYNC: - default: - return Z_STREAM_ERROR; - } - - /* - Return from inflate(), updating the total counts and the check value. - If there was no progress during the inflate() call, return a buffer - error. Call updatewindow() to create and/or update the window state. - Note: a memory error from inflate() is non-recoverable. - */ - inf_leave: - RESTORE(); - if (state->wsize || (out != strm->avail_out && state->mode < BAD && - (state->mode < CHECK || flush != Z_FINISH))) - if (updatewindow(strm, strm->next_out, out - strm->avail_out)) { - state->mode = MEM; - return Z_MEM_ERROR; - } - in -= strm->avail_in; - out -= strm->avail_out; - strm->total_in += in; - strm->total_out += out; - state->total += out; - if ((state->wrap & 4) && out) - strm->adler = state->check = - UPDATE(state->check, strm->next_out - out, out); - strm->data_type = (int)state->bits + (state->last ? 64 : 0) + - (state->mode == TYPE ? 128 : 0) + - (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0); - if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK) - ret = Z_BUF_ERROR; - return ret; -} - -int ZEXPORT inflateEnd(strm) -z_streamp strm; -{ - struct inflate_state FAR *state; - if (inflateStateCheck(strm)) - return Z_STREAM_ERROR; - state = (struct inflate_state FAR *)strm->state; - if (state->window != Z_NULL) ZFREE(strm, state->window); - ZFREE(strm, strm->state); - strm->state = Z_NULL; - Tracev((stderr, "inflate: end\n")); - return Z_OK; -} - -int ZEXPORT inflateGetDictionary(strm, dictionary, dictLength) -z_streamp strm; -Bytef *dictionary; -uInt *dictLength; -{ - struct inflate_state FAR *state; - - /* check state */ - if (inflateStateCheck(strm)) return Z_STREAM_ERROR; - state = (struct inflate_state FAR *)strm->state; - - /* copy dictionary */ - if (state->whave && dictionary != Z_NULL) { - zmemcpy(dictionary, state->window + state->wnext, - state->whave - state->wnext); - zmemcpy(dictionary + state->whave - state->wnext, - state->window, state->wnext); - } - if (dictLength != Z_NULL) - *dictLength = state->whave; - return Z_OK; -} - -int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength) -z_streamp strm; -const Bytef *dictionary; -uInt dictLength; -{ - struct inflate_state FAR *state; - unsigned long dictid; - int ret; - - /* check state */ - if (inflateStateCheck(strm)) return Z_STREAM_ERROR; - state = (struct inflate_state FAR *)strm->state; - if (state->wrap != 0 && state->mode != DICT) - return Z_STREAM_ERROR; - - /* check for correct dictionary identifier */ - if (state->mode == DICT) { - dictid = adler32(0L, Z_NULL, 0); - dictid = adler32(dictid, dictionary, dictLength); - if (dictid != state->check) - return Z_DATA_ERROR; - } - - /* copy dictionary to window using updatewindow(), which will amend the - existing dictionary if appropriate */ - ret = updatewindow(strm, dictionary + dictLength, dictLength); - if (ret) { - state->mode = MEM; - return Z_MEM_ERROR; - } - state->havedict = 1; - Tracev((stderr, "inflate: dictionary set\n")); - return Z_OK; -} - -int ZEXPORT inflateGetHeader(strm, head) -z_streamp strm; -gz_headerp head; -{ - struct inflate_state FAR *state; - - /* check state */ - if (inflateStateCheck(strm)) return Z_STREAM_ERROR; - state = (struct inflate_state FAR *)strm->state; - if ((state->wrap & 2) == 0) return Z_STREAM_ERROR; - - /* save header structure */ - state->head = head; - head->done = 0; - return Z_OK; -} - -/* - Search buf[0..len-1] for the pattern: 0, 0, 0xff, 0xff. Return when found - or when out of input. When called, *have is the number of pattern bytes - found in order so far, in 0..3. On return *have is updated to the new - state. If on return *have equals four, then the pattern was found and the - return value is how many bytes were read including the last byte of the - pattern. If *have is less than four, then the pattern has not been found - yet and the return value is len. In the latter case, syncsearch() can be - called again with more data and the *have state. *have is initialized to - zero for the first call. - */ -local unsigned syncsearch(have, buf, len) -unsigned FAR *have; -const unsigned char FAR *buf; -unsigned len; -{ - unsigned got; - unsigned next; - - got = *have; - next = 0; - while (next < len && got < 4) { - if ((int)(buf[next]) == (got < 2 ? 0 : 0xff)) - got++; - else if (buf[next]) - got = 0; - else - got = 4 - got; - next++; - } - *have = got; - return next; -} - -int ZEXPORT inflateSync(strm) -z_streamp strm; -{ - unsigned len; /* number of bytes to look at or looked at */ - unsigned long in, out; /* temporary to save total_in and total_out */ - unsigned char buf[4]; /* to restore bit buffer to byte string */ - struct inflate_state FAR *state; - - /* check parameters */ - if (inflateStateCheck(strm)) return Z_STREAM_ERROR; - state = (struct inflate_state FAR *)strm->state; - if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR; - - /* if first time, start search in bit buffer */ - if (state->mode != SYNC) { - state->mode = SYNC; - state->hold <<= state->bits & 7; - state->bits -= state->bits & 7; - len = 0; - while (state->bits >= 8) { - buf[len++] = (unsigned char)(state->hold); - state->hold >>= 8; - state->bits -= 8; - } - state->have = 0; - syncsearch(&(state->have), buf, len); - } - - /* search available input */ - len = syncsearch(&(state->have), strm->next_in, strm->avail_in); - strm->avail_in -= len; - strm->next_in += len; - strm->total_in += len; - - /* return no joy or set up to restart inflate() on a new block */ - if (state->have != 4) return Z_DATA_ERROR; - in = strm->total_in; out = strm->total_out; - inflateReset(strm); - strm->total_in = in; strm->total_out = out; - state->mode = TYPE; - return Z_OK; -} - -/* - Returns true if inflate is currently at the end of a block generated by - Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP - implementation to provide an additional safety check. PPP uses - Z_SYNC_FLUSH but removes the length bytes of the resulting empty stored - block. When decompressing, PPP checks that at the end of input packet, - inflate is waiting for these length bytes. - */ -int ZEXPORT inflateSyncPoint(strm) -z_streamp strm; -{ - struct inflate_state FAR *state; - - if (inflateStateCheck(strm)) return Z_STREAM_ERROR; - state = (struct inflate_state FAR *)strm->state; - return state->mode == STORED && state->bits == 0; -} - -int ZEXPORT inflateCopy(dest, source) -z_streamp dest; -z_streamp source; -{ - struct inflate_state FAR *state; - struct inflate_state FAR *copy; - unsigned char FAR *window; - unsigned wsize; - - /* check input */ - if (inflateStateCheck(source) || dest == Z_NULL) - return Z_STREAM_ERROR; - state = (struct inflate_state FAR *)source->state; - - /* allocate space */ - copy = (struct inflate_state FAR *) - ZALLOC(source, 1, sizeof(struct inflate_state)); - if (copy == Z_NULL) return Z_MEM_ERROR; - window = Z_NULL; - if (state->window != Z_NULL) { - window = (unsigned char FAR *) - ZALLOC(source, 1U << state->wbits, sizeof(unsigned char)); - if (window == Z_NULL) { - ZFREE(source, copy); - return Z_MEM_ERROR; - } - } - - /* copy state */ - zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream)); - zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state)); - copy->strm = dest; - if (state->lencode >= state->codes && - state->lencode <= state->codes + ENOUGH - 1) { - copy->lencode = copy->codes + (state->lencode - state->codes); - copy->distcode = copy->codes + (state->distcode - state->codes); - } - copy->next = copy->codes + (state->next - state->codes); - if (window != Z_NULL) { - wsize = 1U << state->wbits; - zmemcpy(window, state->window, wsize); - } - copy->window = window; - dest->state = (struct internal_state FAR *)copy; - return Z_OK; -} - -int ZEXPORT inflateUndermine(strm, subvert) -z_streamp strm; -int subvert; -{ - struct inflate_state FAR *state; - - if (inflateStateCheck(strm)) return Z_STREAM_ERROR; - state = (struct inflate_state FAR *)strm->state; -#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR - state->sane = !subvert; - return Z_OK; -#else - (void)subvert; - state->sane = 1; - return Z_DATA_ERROR; -#endif -} - -int ZEXPORT inflateValidate(strm, check) -z_streamp strm; -int check; -{ - struct inflate_state FAR *state; - - if (inflateStateCheck(strm)) return Z_STREAM_ERROR; - state = (struct inflate_state FAR *)strm->state; - if (check) - state->wrap |= 4; - else - state->wrap &= ~4; - return Z_OK; -} - -long ZEXPORT inflateMark(strm) -z_streamp strm; -{ - struct inflate_state FAR *state; - - if (inflateStateCheck(strm)) - return -(1L << 16); - state = (struct inflate_state FAR *)strm->state; - return (long)(((unsigned long)((long)state->back)) << 16) + - (state->mode == COPY ? state->length : - (state->mode == MATCH ? state->was - state->length : 0)); -} - -unsigned long ZEXPORT inflateCodesUsed(strm) -z_streamp strm; -{ - struct inflate_state FAR *state; - if (inflateStateCheck(strm)) return (unsigned long)-1; - state = (struct inflate_state FAR *)strm->state; - return (unsigned long)(state->next - state->codes); -}
diff --git a/tools/chrome_proxy/webdriver/lite_page.py b/tools/chrome_proxy/webdriver/lite_page.py index be6ecd4..449878d 100644 --- a/tools/chrome_proxy/webdriver/lite_page.py +++ b/tools/chrome_proxy/webdriver/lite_page.py
@@ -5,6 +5,7 @@ import common from common import TestDriver from common import IntegrationTest +from decorators import ChromeVersionBeforeM from decorators import ChromeVersionEqualOrAfterM import time @@ -177,6 +178,7 @@ # Lo-Fi fallback is not supported without the # DataReductionProxyDecidesTransform feature. Check that no Lo-Fi response # is received if a Lite Page is not served. + @ChromeVersionBeforeM(62) def testLitePageNoFallback(self): with TestDriver() as test_driver: test_driver.AddChromeArg('--enable-spdy-proxy-auth')
diff --git a/tools/gn/bin/roll_gn.py b/tools/gn/bin/roll_gn.py index 3dd7831c..bb96821a 100755 --- a/tools/gn/bin/roll_gn.py +++ b/tools/gn/bin/roll_gn.py
@@ -41,29 +41,30 @@ import time import urllib2 -depot_tools_path = None -for p in os.environ['PATH'].split(os.pathsep): - if (p.rstrip(os.sep).endswith('depot_tools') and - os.path.isfile(os.path.join(p, 'gclient.py'))): - depot_tools_path = p -assert depot_tools_path +depot_tools_path = os.path.abspath(os.path.normpath(os.path.join( + os.path.dirname(__file__), '..', '..', '..', 'third_party', 'depot_tools'))) if not depot_tools_path in sys.path: sys.path.insert(0, depot_tools_path) -third_party_path = os.path.join(depot_tools_path, 'third_party') -if not third_party_path in sys.path: - sys.path.insert(0, third_party_path) - -import upload - CHROMIUM_REPO = 'https://chromium.googlesource.com/chromium/src.git' -CODE_REVIEW_SERVER = 'https://codereview.chromium.org' - COMMITISH_DIGITS = 10 +UNKNOWN, PENDING, STARTED, SUCCESS = ( + 'unknown', 'pending', 'started', 'success') + +class BuildResult(object): + def __init__(self): + self.masterName = '-' + self.builderName = '-' + self.buildNumber = '-' + self.state = UNKNOWN + self.sha1 = '-' + self.url = '-' + + class GNRoller(object): def __init__(self): self.chromium_src_dir = None @@ -98,8 +99,8 @@ return ret def SetUp(self): - if sys.platform != 'linux2': - print('roll_gn is only tested and working on Linux for now.') + if sys.platform not in ('darwin', 'linux2'): + print('roll_gn is only tested and working on Linux and Mac for now.') return 1 ret, out, _ = self.Call('git config --get remote.origin.url') @@ -155,7 +156,7 @@ print('Uploading CL to build GN at {#%s} - %s' % (self.new_gn_version, self.new_gn_commitish)) - ret, out, err = self.Call('git cl upload --rietveld -f') + ret, out, err = self.Call('git cl upload -f') if ret: print('git-cl upload failed: %s' % out + err) return 1 @@ -186,8 +187,7 @@ print('Checking build') results = self.CheckBuild() - while (any(r['state'] in ('pending', 'started') - for r in results.values())): + while (any(r.state in (PENDING, STARTED) for r in results.values())): print() print('Sleeping for 30 seconds') time.sleep(30) @@ -218,91 +218,75 @@ return ret def CheckBuild(self): - _, out, _ = self.Call('git-cl issue') + _, out, _ = self.Call('git-cl try-results') - issue = int(out.split()[2]) - - _, out, _ = self.Call('git config user.email') - email = '' - rpc_server = upload.GetRpcServer(CODE_REVIEW_SERVER, email) - try: - props = json.loads(rpc_server.Send('/api/%d' % issue)) - except Exception as e: - print('Failed to load patch data: %s' % e) - return {} - - patchset = int(props['patchsets'][-1]) - - try: - try_job_results = json.loads(rpc_server.Send( - '/api/%d/%d/try_job_results' % (issue, patchset))) - except Exception as e: - print('Failed to load try job results: %s' % e) - return {} - - if not try_job_results: - print('No try jobs found on most recent patchset') - return {} + builders = { + 'linux_chromium_gn_upload': 'linux64', + 'mac_chromium_gn_upload': 'mac', + 'win8_chromium_gn_upload': 'win' + } results = {} - for job in try_job_results: - builder = job['builder'] - if builder == 'linux_chromium_gn_upload': - platform = 'linux64' - elif builder == 'mac_chromium_gn_upload': - platform = 'mac' - elif builder == 'win8_chromium_gn_upload': - platform = 'win' - else: - print('Unexpected builder: %s') - continue + for platform in ('linux64', 'mac', 'win'): + results[platform] = BuildResult() - TRY_JOB_RESULT_STATES = ('started', 'success', 'warnings', 'failure', - 'skipped', 'exception', 'retry', 'pending') - state = TRY_JOB_RESULT_STATES[int(job['result']) + 1] - url_str = ' %s' % job['url'] - build = url_str.split('/')[-1] + state = PENDING + for line in out.splitlines(): + fields = line.strip().split() + if fields[0] == 'Started:': + state = STARTED + if fields[0] == 'Successes:': + state = SUCCESS + elif fields[0] == 'Total': + pass + elif fields[0] in builders: + builder = fields[0] + platform = builders[builder] + result = results[platform] + result.masterName = ('tryserver.chromium.%s' % + platform.replace('linux64', 'linux')) + result.builderName = builder + result.url = fields[1] + if result.url.startswith('id'): + result.state = PENDING + else: + result.state = state + result.buildNumber = int(result.url[result.url.rfind('/')+1:]) - sha1 = '-' - results.setdefault(platform, {'build': -1, 'sha1': '', 'url': url_str}) + for result in results.values(): + if result.state == SUCCESS: + url = 'https://luci-milo.appspot.com/prpc/milo.BuildInfo/Get' + data = json.dumps({"buildbot": { + 'masterName': result.masterName, + 'builderName': result.builderName, + 'buildNumber': result.buildNumber, + }}) + headers = { + 'content-type': 'application/json', + 'accept': 'application/json', + } - if state == 'success': - jsurl = url_str.replace('http://build.chromium.org/', - 'http://chrome-build-extract.appspot.com/') - jsurl = jsurl + '?json=1' - try: - fp = urllib2.urlopen(jsurl) - except urllib2.HTTPError as e: - print('Failed to open %s: %s' % (jsurl, e)) - return {} + req = urllib2.Request(url, data, headers) + resp = urllib2.urlopen(req) + data = resp.read() + resp.close() - js = json.loads(fp.read()) - fp.close() + # The first line of the response is garbage; skip it. + js = json.loads(data.splitlines()[1]) + sha1_step_name = 'gn sha1' - for step in js['steps']: - if step['name'] == sha1_step_name: - # TODO: At some point infra changed the step text to - # contain the step name; once all of the masters have been - # restarted we can probably assert that the step text - # with the step_name. - sha1_step_text_prefix = sha1_step_name + '<br>' - if step['text'][-1].startswith(sha1_step_text_prefix): - sha1 = step['text'][-1][len(sha1_step_text_prefix):] - else: - sha1 = step['text'][-1] + for step in js['step']['substep']: + if step['step']['name'] == sha1_step_name: + sha1 = step['step']['text'][-1] - if results[platform]['build'] < build: - results[platform]['build'] = build - results[platform]['sha1'] = sha1 - results[platform]['state'] = state - results[platform]['url'] = url_str + result.sha1 = sha1 for platform, r in results.items(): print(platform) - print(' sha1: %s' % r['sha1']) - print(' state: %s' % r['state']) - print(' build: %s' % r['build']) - print(' url: %s' % r['url']) + print(' sha1: %s' % r.sha1) + print(' state: %s' % r.state) + print(' build: %s' % r.buildNumber) + print(' url: %s' % r.url) print() return results @@ -314,8 +298,8 @@ results = self.CheckBuild() if (len(results) < 3 or - not all(r['state'] == 'success' for r in results.values()) or - not all(r['sha1'] != '-' for r in results.values())): + not all(r.state == SUCCESS for r in results.values()) or + not all(r.sha1 != '-' for r in results.values())): print("Roll isn't done or didn't succeed, exiting:") return 1 @@ -336,7 +320,7 @@ desc_file.close() self.Call('git commit -a -F %s' % desc_file.name, cwd=self.buildtools_dir) - self.Call('git-cl upload --rietveld -f --send-mail', + self.Call('git-cl upload -f --send-mail', cwd=self.buildtools_dir) finally: os.remove(desc_file.name) @@ -401,7 +385,7 @@ desc_file.write(desc) desc_file.close() self.Call('git commit -a -F %s' % desc_file.name) - self.Call('git-cl upload --rietveld -f --send-mail --use-commit-queue') + self.Call('git-cl upload -f --send-mail --use-commit-queue') finally: os.remove(desc_file.name)
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 5102142..dc1a5506 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -6032,8 +6032,6 @@ <int value="35" label="Media engagement setting"/> <int value="36" label="Sound setting"/> <int value="37" label="Client hints setting"/> - <int value="38" label="Sensors setting"/> - <int value="39" label="Accessibility events setting"/> </enum> <enum name="ContentTypeParseableResult"> @@ -13351,6 +13349,7 @@ <int value="1188" label="WEBVIEWINTERNAL_GETAUDIOSTATE"/> <int value="1189" label="FILEMANAGERPRIVATE_GETRECENTFILES"/> <int value="1190" label="FILEMANAGERPRIVATE_RENAMEVOLUME"/> + <int value="1191" label="AUTOTESTPRIVATE_SETMOUSEREVERSESCROLL"/> </enum> <enum name="ExtensionIconState"> @@ -22944,6 +22943,7 @@ <int value="-1948540128" label="disable-webrtc-hw-encoding (deprecated)"/> <int value="-1946595906" label="enable-push-api-background-mode"/> <int value="-1946522787" label="VrCustomTabBrowsing:disabled"/> + <int value="-1945524394" label="EnableBackgroundBlur:disabled"/> <int value="-1943507605" label="enable-new-video-renderer"/> <int value="-1941852572" label="floating-virtual-keyboard"/> <int value="-1940806558" label="enable-syncfs-directory-operation"/> @@ -23022,6 +23022,7 @@ <int value="-1749176684" label="PauseBackgroundTabs:disabled"/> <int value="-1746767834" label="ssl-interstitial-v2-gray"/> <int value="-1740519217" label="disable-software-rasterizer"/> + <int value="-1736075054" label="EnableFullscreenAppList:enabled"/> <int value="-1735643253" label="enable-display-list-2d-canvas"/> <int value="-1734254845" label="ash-enable-night-light"/> <int value="-1732561795" label="ConsistentOmniboxGeolocation:enabled"/> @@ -23405,6 +23406,7 @@ <int value="-531651776" label="NewRemotePlaybackPipeline:enabled"/> <int value="-528927088" label="AutofillCreditCardPopupLayout:disabled"/> <int value="-528149352" label="WebRtcUseEchoCanceller3:enabled"/> + <int value="-523030434" label="EnableBackgroundBlur:enabled"/> <int value="-519960638" label="enable-site-engagement-service"/> <int value="-518104091" label="NewAudioRenderingMixingStrategy:enabled"/> <int value="-516845951" label="enable-embedded-extension-options"/> @@ -23595,6 +23597,7 @@ <int value="48159177" label="reduced-referrer-granularity"/> <int value="51793504" label="protect-sync-credential-on-reauth:disabled"/> <int value="56723110" label="enable-webfonts-intervention"/> + <int value="57639188" label="SoundContentSetting:disabled"/> <int value="57791920" label="MemoryCoordinator:enabled"/> <int value="59784035" label="ImeThread:disabled"/> <int value="59964519" label="OmniboxEnableClipboardProvider:disabled"/> @@ -23662,6 +23665,7 @@ <int value="332391072" label="cs-contextual-cards-bar-integration"/> <int value="334802038" label="OfflinePreviews:disabled"/> <int value="339671131" label="disable-per-user-timezone"/> + <int value="341152650" label="SoundContentSetting:enabled"/> <int value="346711293" label="enable-save-password-bubble"/> <int value="348854923" label="v8-cache-strategies-for-cache-storage"/> <int value="352191859" label="disabled-new-style-notification"/> @@ -23900,6 +23904,7 @@ <int value="1081546525" label="ash-enable-docked-windows"/> <int value="1087235172" label="file-manager-enable-new-audio-player"/> <int value="1090377940" label="enable-quic-https"/> + <int value="1092896354" label="EnableFullscreenAppList:disabled"/> <int value="1094506652" label="UseGoogleLocalNtp:enabled"/> <int value="1095061640" label="enable-prominent-url-app-flow"/> <int value="1098823967" label="ash-enable-window-cycle-ui"/> @@ -24447,6 +24452,42 @@ <int value="22" label="MacBookPro5,X"/> </enum> +<enum name="MacOSBluetoothOperationsResult"> + <int value="-2" label="Unknown error domain"/> + <int value="-1" label="No error"/> + <int value="0" label="CBATTErrorSuccess"/> + <int value="1" label="CBATTErrorInvalidHandle"/> + <int value="2" label="CBATTErrorReadNotPermitted"/> + <int value="3" label="CBATTErrorWriteNotPermitted"/> + <int value="4" label="CBATTErrorInvalidPdu"/> + <int value="5" label="CBATTErrorInsufficientAuthentication"/> + <int value="6" label="CBATTErrorRequestNotSupported"/> + <int value="7" label="CBATTErrorInvalidOffset"/> + <int value="8" label="CBATTErrorInsufficientAuthorization"/> + <int value="9" label="CBATTErrorPrepareQueueFull"/> + <int value="10" label="CBATTErrorAttributeNotFound"/> + <int value="11" label="CBATTErrorAttributeNotLong"/> + <int value="12" label="CBATTErrorInsufficientEncryptionKeySize"/> + <int value="13" label="CBATTErrorInvalidAttributeValueLength"/> + <int value="14" label="CBATTErrorUnlikelyError"/> + <int value="15" label="CBATTErrorInsufficientEncryption"/> + <int value="16" label="CBATTErrorUnsupportedGroupType"/> + <int value="17" label="CBATTErrorInsufficientResources"/> + <int value="999" label="Unknown CBATTError code"/> + <int value="1000" label="CBErrorUnknown"/> + <int value="1001" label="CBErrorInvalidParameters"/> + <int value="1002" label="CBErrorInvalidHandle"/> + <int value="1003" label="CBErrorNotConnected"/> + <int value="1004" label="CBErrorOutOfSpace"/> + <int value="1005" label="CBErrorOperationCancelled"/> + <int value="1006" label="CBErrorConnectionTimeout"/> + <int value="1007" label="CBErrorPeripheralDisconnected"/> + <int value="1008" label="CBErrorUUIDNotAllowed"/> + <int value="1009" label="CBErrorAlreadyAdvertising"/> + <int value="1010" label="CBErrorMaxConnection"/> + <int value="1999" label="Unknown CBError code"/> +</enum> + <enum name="MainFrameStorable"> <int value="0" label="Storable"/> <int value="1" label="cache-control: no-store"/> @@ -30202,7 +30243,6 @@ <int value="12" label="PERMISSION_BUBBLE_PERMISSION_FLASH"/> <int value="13" label="PERMISSION_MEDIASTREAM_MIC"/> <int value="14" label="PERMISSION_MEDIASTREAM_CAMERA"/> - <int value="15" label="PERMISSION_ACCESSIBILITY_EVENTS"/> </enum> <enum name="PermissionStatus">
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index 2ad57d7..aac11b071 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -6622,6 +6622,19 @@ </summary> </histogram> +<histogram base="true" name="Bluetooth.MacOS.Errors" + enum="MacOSBluetoothOperationsResult"> +<!-- Name completed by histogram_suffixes name="WebBluetoothMacOSAPIs" --> + + <owner>scheib@chromium.org</owner> + <owner>device-dev@chromium.org</owner> + <summary> + Records how many times each macOS GATT error has occured. The results will + be used to determine how commun this errors are and if we need to provide + better error messages to the users. + </summary> +</histogram> + <histogram name="Bluetooth.PairingMethod" enum="BluetoothPairingMethod"> <owner>keybuk@chromium.org</owner> <summary> @@ -22008,6 +22021,23 @@ </summary> </histogram> +<histogram base="true" name="Extensions.LongInjectionTaskTime" units="ms"> + <owner>ksakamoto@chromium.org</owner> + <summary> + The amount of time taken to inject content scripts. If multiple scripts are + injected within a single task, this records the time taken to execute all + the scripts. + + This metric only logs tasks longer than 50 milliseconds. This threshold + aligns with the definition of "long task" in Long Tasks API + (https://w3c.github.io/longtasks/). + + Note that this histogram itself doesn't tell you what percentage of content + scripts are greater than 50 ms. See Extensions.Inject{Start,End,Idle}_Time + and Extensions.InjectedScriptExecutionTime.* for the overall distribution. + </summary> +</histogram> + <histogram name="Extensions.ManifestFetchFailureRetryCountGoogleUrl"> <owner>Please list the metric's owners. Add more owner tags as needed.</owner> <summary> @@ -35316,6 +35346,16 @@ </summary> </histogram> +<histogram name="Mouse.ReverseScroll.Changed" enum="BooleanEnabled"> + <owner>lannm@chromium.org</owner> + <summary>Tracks mouse reverse scroll setting changes by the user.</summary> +</histogram> + +<histogram name="Mouse.ReverseScroll.Started" enum="BooleanEnabled"> + <owner>lannm@chromium.org</owner> + <summary>Tracks mouse reverse scroll setting on startup.</summary> +</histogram> + <histogram name="Mouse.Sensitivity.Changed" enum="PointerSensitivity"> <obsolete> Deprecated as of 6/2013, replaced by Mouse.PointerSensitivity.Changed. @@ -68179,7 +68219,8 @@ malicious or clean by the improved SafeBrowsing binary download protection. Note that UNSUPPORTED_URL_SCHEME was split out of the INVALID_URL bucket in M41. The NOT_BINARY_FILE check was moved before the UNSUPPORTED_URL_SCHEME - check in M42. + check in M42. The WHITELISTED_URL check was moved to before NOT_BINARY_FILE + in M62. </summary> </histogram> @@ -87171,6 +87212,14 @@ </summary> </histogram> +<histogram name="Webapp.NavigationStatus" enum="BooleanSuccess"> + <owner>piotrs@chromium.org</owner> + <summary> + Records whether the top-level navigations in standalone Web Apps result in + presenting the web content or showing the error page. + </summary> +</histogram> + <histogram name="Webapp.Splashscreen.BackgroundColor" enum="SplashscreenColorStatus"> <owner>mlamouri@chromium.org</owner> @@ -101420,6 +101469,9 @@ label="social eng ad blacklist pattern"/> <suffix name="PhishingInterstitial" label="phishing blacklist pattern"/> <suffix name="SubresourceFilterOnly" label="subresource filter only pattern"/> + <suffix name="BetterAds" label="Better Ads Standard pattern"/> + <suffix name="AbusiveAds" label="Abusive Ads pattern"/> + <suffix name="AllAds" label="All Ads (BAS + Abusive) pattern"/> <affected-histogram name="SubresourceFilter.PageLoad.FinalURLMatch"/> <affected-histogram name="SubresourceFilter.PageLoad.RedirectChainLength"/> <affected-histogram @@ -101776,6 +101828,7 @@ <suffix name="DocumentEnd" label="Scripts with run_at: document_end."/> <suffix name="DocumentIdle" label="Scripts with run_at: document_idle."/> <affected-histogram name="Extensions.InjectedScriptExecutionTime"/> + <affected-histogram name="Extensions.LongInjectionTaskTime"/> <affected-histogram name="Extensions.TimeYieldedBetweenContentScriptRuns"/> </histogram_suffixes> @@ -101875,6 +101928,24 @@ <affected-histogram name="WebApk.ShellApkVersion"/> </histogram_suffixes> +<histogram_suffixes name="WebBluetoothMacOSAPIs" separator="."> + <suffix name="DidFailToConnectToPeripheral" + label="Failed to connect to peripheral"/> + <suffix name="DidDisconnectPeripheral" label="Disconnected from peripheral"/> + <suffix name="DidDiscoverPrimaryServices" + label="Discovered primary services"/> + <suffix name="DidDiscoverCharacteristics" label="Discovered characteristics"/> + <suffix name="DidUpdateValue" label="Updated value for characteristic"/> + <suffix name="DidWriteValue" label="Wrote value for characteristic"/> + <suffix name="DidUpdateNotificationState" label="Updated notification state"/> + <suffix name="DidDiscoverDescriptors" label="Discovered descriptors"/> + <suffix name="DidUpdateValueForDescriptor" + label="Updated value for descriptor"/> + <suffix name="DidWriteValueForDescriptor" + label="Wrote value value for descriptor"/> + <affected-histogram name="Bluetooth.MacOS.Errors"/> +</histogram_suffixes> + <histogram_suffixes name="WebFontFamily" separator="_"> <suffix name="roboto" label="Roboto font"/> <suffix name="opensans" label="Open Sans font"/>
diff --git a/tools/perf/page_sets/data/key_silk_cases.json b/tools/perf/page_sets/data/key_silk_cases.json index aa670541..fee5327 100644 --- a/tools/perf/page_sets/data/key_silk_cases.json +++ b/tools/perf/page_sets/data/key_silk_cases.json
@@ -1,208 +1,208 @@ { "archives": { "http://famo.us?scroll": { - "DEFAULT": "key_silk_cases_002.wpr" + "DEFAULT": "key_silk_cases_002.wprgo" }, "http://famo.us?tap": { - "DEFAULT": "key_silk_cases_002.wpr" + "DEFAULT": "key_silk_cases_002.wprgo" }, "http://forecast.io?scroll": { - "DEFAULT": "key_silk_cases_002.wpr" + "DEFAULT": "key_silk_cases_002.wprgo" }, "http://forecast.io?swipe": { - "DEFAULT": "key_silk_cases_002.wpr" + "DEFAULT": "key_silk_cases_002.wprgo" }, "http://forecast.io?tap": { - "DEFAULT": "key_silk_cases_002.wpr" + "DEFAULT": "key_silk_cases_002.wprgo" }, "http://groupcloned.com/test/plain/list-animation-simple.html": { - "DEFAULT": "key_silk_cases_001.wpr" + "DEFAULT": "key_silk_cases_001.wprgo" }, "http://groupcloned.com/test/plain/list-recycle-transform.html": { - "DEFAULT": "key_silk_cases_001.wpr" + "DEFAULT": "key_silk_cases_001.wprgo" }, "http://groupcloned.com/test/plain/sticky-using-webkit-backface-visibility.html": { - "DEFAULT": "key_silk_cases_001.wpr" + "DEFAULT": "key_silk_cases_001.wprgo" }, "http://jankfree.org/silk/rectangle_transition.html": { - "DEFAULT": "key_silk_cases_004.wpr" + "DEFAULT": "key_silk_cases_004.wprgo" }, "http://jankfree.org/silk/text-mask.html": { - "DEFAULT": "key_silk_cases_004.wpr" + "DEFAULT": "key_silk_cases_004.wprgo" }, "http://jsbin.com/UVIgUTa/38/quiet": { - "DEFAULT": "key_silk_cases_014.wpr" + "DEFAULT": "key_silk_cases_014.wprgo" }, "http://jsbin.com/UVIgUTa/6/quiet": { - "DEFAULT": "key_silk_cases_002.wpr" + "DEFAULT": "key_silk_cases_002.wprgo" }, "http://jsfiddle.net/3yDKh/1/embedded/result": { - "DEFAULT": "key_silk_cases_001.wpr" + "DEFAULT": "key_silk_cases_001.wprgo" }, "http://jsfiddle.net/3yDKh/1/show": { - "DEFAULT": "key_silk_cases_000.wpr" + "DEFAULT": "key_silk_cases_000.wprgo" }, "http://jsfiddle.net/3yDKh/15/show/": { - "DEFAULT": "key_silk_cases_014.wpr" + "DEFAULT": "key_silk_cases_014.wprgo" }, "http://jsfiddle.net/3yDKh/16/show/": { - "DEFAULT": "key_silk_cases_014.wpr" + "DEFAULT": "key_silk_cases_014.wprgo" }, "http://jsfiddle.net/3yDKh/3/embedded/result": { - "DEFAULT": "key_silk_cases_001.wpr" + "DEFAULT": "key_silk_cases_001.wprgo" }, "http://jsfiddle.net/3yDKh/3/show": { - "DEFAULT": "key_silk_cases_000.wpr" + "DEFAULT": "key_silk_cases_000.wprgo" }, "http://jsfiddle.net/3yDKh/4/embedded/result": { - "DEFAULT": "key_silk_cases_005.wpr" + "DEFAULT": "key_silk_cases_005.wprgo" }, "http://jsfiddle.net/3yDKh/6/embedded/result": { - "DEFAULT": "key_silk_cases_005.wpr" + "DEFAULT": "key_silk_cases_005.wprgo" }, "http://jsfiddle.net/426x6/2/embedded/result": { - "DEFAULT": "key_silk_cases_001.wpr" + "DEFAULT": "key_silk_cases_001.wprgo" }, "http://jsfiddle.net/FtR7p/42/embedded/result/": { - "DEFAULT": "key_silk_cases_001.wpr" + "DEFAULT": "key_silk_cases_001.wprgo" }, "http://jsfiddle.net/R8DX9/1/embedded/result/": { - "DEFAULT": "key_silk_cases_001.wpr" + "DEFAULT": "key_silk_cases_001.wprgo" }, "http://jsfiddle.net/R8DX9/4/show/": { - "DEFAULT": "key_silk_cases_014.wpr" + "DEFAULT": "key_silk_cases_014.wprgo" }, "http://jsfiddle.net/TLXLu/2/embedded/result/": { - "DEFAULT": "key_silk_cases_009.wpr" + "DEFAULT": "key_silk_cases_009.wprgo" }, "http://jsfiddle.net/TLXLu/3/show/": { - "DEFAULT": "key_silk_cases_014.wpr" + "DEFAULT": "key_silk_cases_014.wprgo" }, "http://jsfiddle.net/bNp2h/1/embedded/result/": { - "DEFAULT": "key_silk_cases_013.wpr" + "DEFAULT": "key_silk_cases_013.wprgo" }, "http://jsfiddle.net/bNp2h/2/show/": { - "DEFAULT": "key_silk_cases_014.wpr" + "DEFAULT": "key_silk_cases_014.wprgo" }, "http://jsfiddle.net/bNp2h/3/show/": { - "DEFAULT": "key_silk_cases_015.wpr" + "DEFAULT": "key_silk_cases_015.wprgo" }, "http://jsfiddle.net/cKB9D/6/embedded/result/": { - "DEFAULT": "key_silk_cases_010.wpr" + "DEFAULT": "key_silk_cases_010.wprgo" }, "http://jsfiddle.net/cKB9D/7/show/": { - "DEFAULT": "key_silk_cases_014.wpr" + "DEFAULT": "key_silk_cases_014.wprgo" }, "http://jsfiddle.net/humper/cKB9D/3/embedded/result/": { - "DEFAULT": "key_silk_cases_001.wpr" + "DEFAULT": "key_silk_cases_001.wprgo" }, "http://jsfiddle.net/humper/yEX8u/3/embedded/result/": { - "DEFAULT": "key_silk_cases_001.wpr" + "DEFAULT": "key_silk_cases_001.wprgo" }, "http://jsfiddle.net/jx5De/12/embedded/result": { - "DEFAULT": "key_silk_cases_007.wpr" + "DEFAULT": "key_silk_cases_007.wprgo" }, "http://jsfiddle.net/jx5De/13/embedded/result": { - "DEFAULT": "key_silk_cases_008.wpr" + "DEFAULT": "key_silk_cases_008.wprgo" }, "http://jsfiddle.net/jx5De/14/show/": { - "DEFAULT": "key_silk_cases_014.wpr" + "DEFAULT": "key_silk_cases_014.wprgo" }, "http://jsfiddle.net/mdxJ7/3/embedded/result/": { - "DEFAULT": "key_silk_cases_001.wpr" + "DEFAULT": "key_silk_cases_001.wprgo" }, "http://jsfiddle.net/mdxJ7/3/show": { - "DEFAULT": "key_silk_cases_000.wpr" + "DEFAULT": "key_silk_cases_000.wprgo" }, "http://jsfiddle.net/rF9Gh/1/embedded/result/": { - "DEFAULT": "key_silk_cases_001.wpr" + "DEFAULT": "key_silk_cases_001.wprgo" }, "http://jsfiddle.net/rF9Gh/3/embedded/result/": { - "DEFAULT": "key_silk_cases_006.wpr" + "DEFAULT": "key_silk_cases_006.wprgo" }, "http://jsfiddle.net/rF9Gh/7/show/": { - "DEFAULT": "key_silk_cases_014.wpr" + "DEFAULT": "key_silk_cases_014.wprgo" }, "http://jsfiddle.net/uHqN9/embedded/result/": { - "DEFAULT": "key_silk_cases_001.wpr" + "DEFAULT": "key_silk_cases_001.wprgo" }, "http://jsfiddle.net/ugkd4/10/show/": { - "DEFAULT": "key_silk_cases_014.wpr" + "DEFAULT": "key_silk_cases_014.wprgo" }, "http://jsfiddle.net/ugkd4/9/embedded/result/": { - "DEFAULT": "key_silk_cases_001.wpr" + "DEFAULT": "key_silk_cases_001.wprgo" }, "http://jsfiddle.net/vBQHH/10/embedded/result/": { - "DEFAULT": "key_silk_cases_011.wpr" + "DEFAULT": "key_silk_cases_011.wprgo" }, "http://jsfiddle.net/vBQHH/11/show/": { - "DEFAULT": "key_silk_cases_014.wpr" + "DEFAULT": "key_silk_cases_014.wprgo" }, "http://jsfiddle.net/vBQHH/3/embedded/result/": { - "DEFAULT": "key_silk_cases_001.wpr" + "DEFAULT": "key_silk_cases_001.wprgo" }, "http://jsfiddle.net/xLuvC/1/show/": { - "DEFAULT": "key_silk_cases_014.wpr" + "DEFAULT": "key_silk_cases_014.wprgo" }, "http://jsfiddle.net/xLuvC/embedded/result/": { - "DEFAULT": "key_silk_cases_012.wpr" + "DEFAULT": "key_silk_cases_012.wprgo" }, "http://mobile-news.sandbox.google.com/news/pt0?scroll": { - "DEFAULT": "key_silk_cases_002.wpr" + "DEFAULT": "key_silk_cases_002.wprgo" }, "http://mobile-news.sandbox.google.com/news/pt0?swipe": { - "DEFAULT": "key_silk_cases_002.wpr" + "DEFAULT": "key_silk_cases_002.wprgo" }, "http://mobile-news.sandbox.google.com/news/pt1": { - "DEFAULT": "key_silk_cases_002.wpr" + "DEFAULT": "key_silk_cases_002.wprgo" }, "http://plus.google.com/app/basic/stream": { - "DEFAULT": "key_silk_cases_002.wpr" + "DEFAULT": "key_silk_cases_002.wprgo" }, "http://pr.gg/scroll6.html": { - "DEFAULT": "key_silk_cases_002.wpr" + "DEFAULT": "key_silk_cases_002.wprgo" }, "http://pr.gg/scroll6_even_faster.html": { - "DEFAULT": "key_silk_cases_001.wpr" + "DEFAULT": "key_silk_cases_001.wprgo" }, "http://s.codepen.io/befamous/fullpage/kbxnH?scroll": { - "DEFAULT": "key_silk_cases_002.wpr" + "DEFAULT": "key_silk_cases_002.wprgo" }, "http://s.codepen.io/befamous/fullpage/kbxnH?select": { - "DEFAULT": "key_silk_cases_002.wpr" + "DEFAULT": "key_silk_cases_002.wprgo" }, "http://s.codepen.io/befamous/fullpage/pFsqb?flip": { - "DEFAULT": "key_silk_cases_002.wpr" + "DEFAULT": "key_silk_cases_002.wprgo" }, "http://s.codepen.io/befamous/fullpage/pFsqb?scroll": { - "DEFAULT": "key_silk_cases_002.wpr" + "DEFAULT": "key_silk_cases_002.wprgo" }, "http://staff.tumblr.com/": { - "DEFAULT": "key_silk_cases_000.wpr" + "DEFAULT": "key_silk_cases_000.wprgo" }, "http://wiltzius.github.io/shape-shifter/": { - "DEFAULT": "key_silk_cases_016.wpr" + "DEFAULT": "key_silk_cases_016.wprgo" }, "http://www.google.com/#q=google": { - "DEFAULT": "key_silk_cases_002.wpr" + "DEFAULT": "key_silk_cases_002.wprgo" }, "http://www.google.com/nexus/5/#/": { - "DEFAULT": "key_silk_cases_001.wpr" + "DEFAULT": "key_silk_cases_001.wprgo" }, "http://www.polymer-project.org/polymer-all/labs/list/static-scroll-display.html": { - "DEFAULT": "key_silk_cases_001.wpr" + "DEFAULT": "key_silk_cases_001.wprgo" }, "http://www.polymer-project.org/polymer-all/labs/list/virtual-scroll-examples.html": { - "DEFAULT": "key_silk_cases_001.wpr" + "DEFAULT": "key_silk_cases_001.wprgo" }, "https://play.google.com/store/devices/details/Nexus_5_16GB_White?id=nexus_5_white_16gb": { - "DEFAULT": "key_silk_cases_001.wpr" + "DEFAULT": "key_silk_cases_001.wprgo" }, "https://polymer-topeka.appspot.com/": { - "DEFAULT": "key_silk_cases_018.wpr" + "DEFAULT": "key_silk_cases_018.wprgo" }, "https://www.google.com/search?hl=en&q=define%3Aboogie": { - "DEFAULT": "key_silk_cases_017.wpr" + "DEFAULT": "key_silk_cases_017.wprgo" } }, "description": "Describes the Web Page Replay archives for a story set. Don't edit by hand! Use record_wpr for updating.",
diff --git a/tools/perf/page_sets/data/key_silk_cases_000.wpr.sha1 b/tools/perf/page_sets/data/key_silk_cases_000.wpr.sha1 deleted file mode 100644 index 6a724a5..0000000 --- a/tools/perf/page_sets/data/key_silk_cases_000.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -ef615efddeb2d56756b8c8f6e78027cbe2e4fcfa \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_000.wprgo.sha1 b/tools/perf/page_sets/data/key_silk_cases_000.wprgo.sha1 new file mode 100644 index 0000000..0e44a36 --- /dev/null +++ b/tools/perf/page_sets/data/key_silk_cases_000.wprgo.sha1
@@ -0,0 +1 @@ +74db252d7119e50ddfdf4640fa5d933834b26514 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_001.wpr.sha1 b/tools/perf/page_sets/data/key_silk_cases_001.wpr.sha1 deleted file mode 100644 index 4a3b8c1..0000000 --- a/tools/perf/page_sets/data/key_silk_cases_001.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -91b336bf29930f9e9f224a95a7e32d694adec900 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_001.wprgo.sha1 b/tools/perf/page_sets/data/key_silk_cases_001.wprgo.sha1 new file mode 100644 index 0000000..0c306e9 --- /dev/null +++ b/tools/perf/page_sets/data/key_silk_cases_001.wprgo.sha1
@@ -0,0 +1 @@ +1fa8b311caf4c57c5478fac16efe800d1bc63be9 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_002.wpr.sha1 b/tools/perf/page_sets/data/key_silk_cases_002.wpr.sha1 deleted file mode 100644 index 4f7c193..0000000 --- a/tools/perf/page_sets/data/key_silk_cases_002.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e303dba1fc8e36480c80f2fbb37a383d94ba413c \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_002.wprgo.sha1 b/tools/perf/page_sets/data/key_silk_cases_002.wprgo.sha1 new file mode 100644 index 0000000..2db3b7c --- /dev/null +++ b/tools/perf/page_sets/data/key_silk_cases_002.wprgo.sha1
@@ -0,0 +1 @@ +6c4cc257cb1483cee8cc7fe11bfea612d964753d \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_004.wpr.sha1 b/tools/perf/page_sets/data/key_silk_cases_004.wpr.sha1 deleted file mode 100644 index 349c2c4a..0000000 --- a/tools/perf/page_sets/data/key_silk_cases_004.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -7f7b046d02446bc27d2abfd12a3be6e18f67f51f \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_004.wprgo.sha1 b/tools/perf/page_sets/data/key_silk_cases_004.wprgo.sha1 new file mode 100644 index 0000000..f5ab84c --- /dev/null +++ b/tools/perf/page_sets/data/key_silk_cases_004.wprgo.sha1
@@ -0,0 +1 @@ +0603394e73934da70145550b82154dc63bda9f4a \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_005.wpr.sha1 b/tools/perf/page_sets/data/key_silk_cases_005.wpr.sha1 deleted file mode 100644 index 62872d1f..0000000 --- a/tools/perf/page_sets/data/key_silk_cases_005.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d415f62a9fdca54b6c8853ec3c0b6e1fadf21d2f \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_005.wprgo.sha1 b/tools/perf/page_sets/data/key_silk_cases_005.wprgo.sha1 new file mode 100644 index 0000000..ee67550 --- /dev/null +++ b/tools/perf/page_sets/data/key_silk_cases_005.wprgo.sha1
@@ -0,0 +1 @@ +33362b7a16fb31691de0bd6c38bbf1b75710c444 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_006.wpr.sha1 b/tools/perf/page_sets/data/key_silk_cases_006.wpr.sha1 deleted file mode 100644 index f1c8c561..0000000 --- a/tools/perf/page_sets/data/key_silk_cases_006.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -301b8b4ad0e4e160e5608445d6ea5325deb16022 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_006.wprgo.sha1 b/tools/perf/page_sets/data/key_silk_cases_006.wprgo.sha1 new file mode 100644 index 0000000..aba0426f --- /dev/null +++ b/tools/perf/page_sets/data/key_silk_cases_006.wprgo.sha1
@@ -0,0 +1 @@ +b642e5e304d48319b050dc6f7fe40e9b10443114 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_007.wpr.sha1 b/tools/perf/page_sets/data/key_silk_cases_007.wpr.sha1 deleted file mode 100644 index b1945c86..0000000 --- a/tools/perf/page_sets/data/key_silk_cases_007.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d4e0803fbca59852a146b09a7d8766f5eab065bb \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_007.wprgo.sha1 b/tools/perf/page_sets/data/key_silk_cases_007.wprgo.sha1 new file mode 100644 index 0000000..97a0fbcc --- /dev/null +++ b/tools/perf/page_sets/data/key_silk_cases_007.wprgo.sha1
@@ -0,0 +1 @@ +7fad0574be5b82bf1a0cea5bd00d1e73154158f9 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_008.wpr.sha1 b/tools/perf/page_sets/data/key_silk_cases_008.wpr.sha1 deleted file mode 100644 index 8ba8031..0000000 --- a/tools/perf/page_sets/data/key_silk_cases_008.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -4315d6b9211058b5ddbe9e91a87bb6e981e19489 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_008.wprgo.sha1 b/tools/perf/page_sets/data/key_silk_cases_008.wprgo.sha1 new file mode 100644 index 0000000..9d83d3fe --- /dev/null +++ b/tools/perf/page_sets/data/key_silk_cases_008.wprgo.sha1
@@ -0,0 +1 @@ +26dfb561d870a9241706bd6224185f82552d3836 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_009.wpr.sha1 b/tools/perf/page_sets/data/key_silk_cases_009.wpr.sha1 deleted file mode 100644 index bb029edb9..0000000 --- a/tools/perf/page_sets/data/key_silk_cases_009.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -6f35bc3ace29295f48f806f4164ef281b2700fec \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_009.wprgo.sha1 b/tools/perf/page_sets/data/key_silk_cases_009.wprgo.sha1 new file mode 100644 index 0000000..66d1e73 --- /dev/null +++ b/tools/perf/page_sets/data/key_silk_cases_009.wprgo.sha1
@@ -0,0 +1 @@ +ab8e3ffdc63aaf2f45933948d59db9f1629b00df \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_010.wpr.sha1 b/tools/perf/page_sets/data/key_silk_cases_010.wpr.sha1 deleted file mode 100644 index 02ba950..0000000 --- a/tools/perf/page_sets/data/key_silk_cases_010.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -7f544c90f5ee49045703b0a2632f3760d3c722ee \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_010.wprgo.sha1 b/tools/perf/page_sets/data/key_silk_cases_010.wprgo.sha1 new file mode 100644 index 0000000..2a27d7d --- /dev/null +++ b/tools/perf/page_sets/data/key_silk_cases_010.wprgo.sha1
@@ -0,0 +1 @@ +989adef71aa5e7bc4367e0271f25f1a701bd498c \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_011.wpr.sha1 b/tools/perf/page_sets/data/key_silk_cases_011.wpr.sha1 deleted file mode 100644 index 595d268a..0000000 --- a/tools/perf/page_sets/data/key_silk_cases_011.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -2b4d20dbb2d7fade36f2e02c1530e0428f6e4d7a \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_011.wprgo.sha1 b/tools/perf/page_sets/data/key_silk_cases_011.wprgo.sha1 new file mode 100644 index 0000000..c93fbbc --- /dev/null +++ b/tools/perf/page_sets/data/key_silk_cases_011.wprgo.sha1
@@ -0,0 +1 @@ +a2cda213f0c8919f351b1ce4ecd1cce312857acf \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_012.wpr.sha1 b/tools/perf/page_sets/data/key_silk_cases_012.wpr.sha1 deleted file mode 100644 index 2e5e148..0000000 --- a/tools/perf/page_sets/data/key_silk_cases_012.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -c970c478472e6e74ee59cf37301ae8f0315997c3 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_012.wprgo.sha1 b/tools/perf/page_sets/data/key_silk_cases_012.wprgo.sha1 new file mode 100644 index 0000000..68295b5 --- /dev/null +++ b/tools/perf/page_sets/data/key_silk_cases_012.wprgo.sha1
@@ -0,0 +1 @@ +cebf5428edffe33fd902f88586c3c5ea7e0eff9b \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_013.wpr.sha1 b/tools/perf/page_sets/data/key_silk_cases_013.wpr.sha1 deleted file mode 100644 index 6c6e37b4..0000000 --- a/tools/perf/page_sets/data/key_silk_cases_013.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -db2b609daea2d1be1c39e453e8ab693b78f68a5f \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_013.wprgo.sha1 b/tools/perf/page_sets/data/key_silk_cases_013.wprgo.sha1 new file mode 100644 index 0000000..b857535 --- /dev/null +++ b/tools/perf/page_sets/data/key_silk_cases_013.wprgo.sha1
@@ -0,0 +1 @@ +0f95eefa7e4c4149b5ddbffab77b79dd069c0e3c \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_014.wpr.sha1 b/tools/perf/page_sets/data/key_silk_cases_014.wpr.sha1 deleted file mode 100644 index 6cb0bf2..0000000 --- a/tools/perf/page_sets/data/key_silk_cases_014.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -5277e3fc1c45c72e636988acbc2decd46c063c9c \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_014.wprgo.sha1 b/tools/perf/page_sets/data/key_silk_cases_014.wprgo.sha1 new file mode 100644 index 0000000..2814c57 --- /dev/null +++ b/tools/perf/page_sets/data/key_silk_cases_014.wprgo.sha1
@@ -0,0 +1 @@ +d2e0ca9fd56dc6df65add5a29d27739b3b8d4508 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_015.wpr.sha1 b/tools/perf/page_sets/data/key_silk_cases_015.wpr.sha1 deleted file mode 100644 index 3bedd11..0000000 --- a/tools/perf/page_sets/data/key_silk_cases_015.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -d317bc3db8953750f769dde1943e45e28d93052f \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_015.wprgo.sha1 b/tools/perf/page_sets/data/key_silk_cases_015.wprgo.sha1 new file mode 100644 index 0000000..3ecc078f --- /dev/null +++ b/tools/perf/page_sets/data/key_silk_cases_015.wprgo.sha1
@@ -0,0 +1 @@ +5569820a33492162cfb547f8597af086d4817193 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_016.wpr.sha1 b/tools/perf/page_sets/data/key_silk_cases_016.wpr.sha1 deleted file mode 100644 index 3c7db25..0000000 --- a/tools/perf/page_sets/data/key_silk_cases_016.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -612aee986e1dd97bdd477ab41e9fe1000234a237 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_016.wprgo.sha1 b/tools/perf/page_sets/data/key_silk_cases_016.wprgo.sha1 new file mode 100644 index 0000000..6803bec2 --- /dev/null +++ b/tools/perf/page_sets/data/key_silk_cases_016.wprgo.sha1
@@ -0,0 +1 @@ +33b52f63d944dce5e854021705c3d402e516b2e1 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_017.wpr.sha1 b/tools/perf/page_sets/data/key_silk_cases_017.wpr.sha1 deleted file mode 100644 index a86d3e1..0000000 --- a/tools/perf/page_sets/data/key_silk_cases_017.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -a8da54a025e46aa85366b2d7adb93aad99319d58 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_017.wprgo.sha1 b/tools/perf/page_sets/data/key_silk_cases_017.wprgo.sha1 new file mode 100644 index 0000000..1989377 --- /dev/null +++ b/tools/perf/page_sets/data/key_silk_cases_017.wprgo.sha1
@@ -0,0 +1 @@ +818024542b7da020273beeb7a58cb659329c343f \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_018.wpr.sha1 b/tools/perf/page_sets/data/key_silk_cases_018.wpr.sha1 deleted file mode 100644 index e2bb3a22..0000000 --- a/tools/perf/page_sets/data/key_silk_cases_018.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -8918b8bd8d969d6da52f8c28cd53c4b0755cd699 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/key_silk_cases_018.wprgo.sha1 b/tools/perf/page_sets/data/key_silk_cases_018.wprgo.sha1 new file mode 100644 index 0000000..0c7d440 --- /dev/null +++ b/tools/perf/page_sets/data/key_silk_cases_018.wprgo.sha1
@@ -0,0 +1 @@ +5ef089f33fe58ce5a4ac5dada9aab2fa5a20c447 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/pathological_mobile_sites.json b/tools/perf/page_sets/data/pathological_mobile_sites.json index 509e658d..fb4feda3 100644 --- a/tools/perf/page_sets/data/pathological_mobile_sites.json +++ b/tools/perf/page_sets/data/pathological_mobile_sites.json
@@ -1,34 +1,34 @@ { "archives": { "http://edition.cnn.com": { - "DEFAULT": "pathological_mobile_sites_000.wpr" + "DEFAULT": "pathological_mobile_sites_000.wprgo" }, "http://m.espn.go.com/nhl/rankings": { - "DEFAULT": "pathological_mobile_sites_000.wpr" + "DEFAULT": "pathological_mobile_sites_000.wprgo" }, "http://recode.net": { - "DEFAULT": "pathological_mobile_sites_000.wpr" + "DEFAULT": "pathological_mobile_sites_000.wprgo" }, "http://sports.yahoo.com/": { - "DEFAULT": "pathological_mobile_sites_001.wpr" + "DEFAULT": "pathological_mobile_sites_001.wprgo" }, "http://www.latimes.com": { - "DEFAULT": "pathological_mobile_sites_000.wpr" + "DEFAULT": "pathological_mobile_sites_000.wprgo" }, "http://www.pbs.org/newshour/bb/much-really-cost-live-city-like-seattle/#the-rundown": { - "DEFAULT": "pathological_mobile_sites_000.wpr" + "DEFAULT": "pathological_mobile_sites_000.wprgo" }, "http://www.theguardian.com/politics/2015/mar/09/ed-balls-tory-spending-plans-nhs-charging": { - "DEFAULT": "pathological_mobile_sites_010.wpr" + "DEFAULT": "pathological_mobile_sites_010.wprgo" }, "http://www.wowwiki.com/World_of_Warcraft:_Mists_of_Pandaria": { - "DEFAULT": "pathological_mobile_sites_008.wpr" + "DEFAULT": "pathological_mobile_sites_008.wprgo" }, "http://www.zdnet.com": { - "DEFAULT": "pathological_mobile_sites_000.wpr" + "DEFAULT": "pathological_mobile_sites_000.wprgo" }, "https://www.linkedin.com/in/linustorvalds": { - "DEFAULT": "pathological_mobile_sites_009.wpr" + "DEFAULT": "pathological_mobile_sites_009.wprgo" } }, "description": "Describes the Web Page Replay archives for a story set. Don't edit by hand! Use record_wpr for updating.",
diff --git a/tools/perf/page_sets/data/pathological_mobile_sites_000.wpr.sha1 b/tools/perf/page_sets/data/pathological_mobile_sites_000.wpr.sha1 deleted file mode 100644 index fb1ee13..0000000 --- a/tools/perf/page_sets/data/pathological_mobile_sites_000.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -2b2e31dec6889ddd6ef9d993263ede12b4d69112 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/pathological_mobile_sites_000.wprgo.sha1 b/tools/perf/page_sets/data/pathological_mobile_sites_000.wprgo.sha1 new file mode 100644 index 0000000..4db04292 --- /dev/null +++ b/tools/perf/page_sets/data/pathological_mobile_sites_000.wprgo.sha1
@@ -0,0 +1 @@ +27c9880330f40e4f980cdba5a99bf11a4544b15a \ No newline at end of file
diff --git a/tools/perf/page_sets/data/pathological_mobile_sites_001.wpr.sha1 b/tools/perf/page_sets/data/pathological_mobile_sites_001.wpr.sha1 deleted file mode 100644 index ee314a59..0000000 --- a/tools/perf/page_sets/data/pathological_mobile_sites_001.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -43db321f9f9994b66e788d959da1819da767f054 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/pathological_mobile_sites_001.wprgo.sha1 b/tools/perf/page_sets/data/pathological_mobile_sites_001.wprgo.sha1 new file mode 100644 index 0000000..8a952c49 --- /dev/null +++ b/tools/perf/page_sets/data/pathological_mobile_sites_001.wprgo.sha1
@@ -0,0 +1 @@ +516369a3790d337f3311b465201c2fbbefa8a886 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/pathological_mobile_sites_008.wpr.sha1 b/tools/perf/page_sets/data/pathological_mobile_sites_008.wpr.sha1 deleted file mode 100644 index e30a60d428..0000000 --- a/tools/perf/page_sets/data/pathological_mobile_sites_008.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -21048a246295277b9f6e0a9421172c6cce740dd4 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/pathological_mobile_sites_008.wprgo.sha1 b/tools/perf/page_sets/data/pathological_mobile_sites_008.wprgo.sha1 new file mode 100644 index 0000000..83c8148a --- /dev/null +++ b/tools/perf/page_sets/data/pathological_mobile_sites_008.wprgo.sha1
@@ -0,0 +1 @@ +88b675b4348d1ae9ddc9eb54c0bac457e8dafa72 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/pathological_mobile_sites_009.wpr.sha1 b/tools/perf/page_sets/data/pathological_mobile_sites_009.wpr.sha1 deleted file mode 100644 index 0fd6e69..0000000 --- a/tools/perf/page_sets/data/pathological_mobile_sites_009.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -1526284244fe3cebd69fd09c6f8f47725db88315 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/pathological_mobile_sites_009.wprgo.sha1 b/tools/perf/page_sets/data/pathological_mobile_sites_009.wprgo.sha1 new file mode 100644 index 0000000..76d030e4 --- /dev/null +++ b/tools/perf/page_sets/data/pathological_mobile_sites_009.wprgo.sha1
@@ -0,0 +1 @@ +266b53fa747b55f33bf625a6ba8e09cd70b15d1b \ No newline at end of file
diff --git a/tools/perf/page_sets/data/pathological_mobile_sites_010.wpr.sha1 b/tools/perf/page_sets/data/pathological_mobile_sites_010.wpr.sha1 deleted file mode 100644 index 78bdefd..0000000 --- a/tools/perf/page_sets/data/pathological_mobile_sites_010.wpr.sha1 +++ /dev/null
@@ -1 +0,0 @@ -2bd5420ed5b439a63cc734797e33e0d1d6f09023 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/pathological_mobile_sites_010.wprgo.sha1 b/tools/perf/page_sets/data/pathological_mobile_sites_010.wprgo.sha1 new file mode 100644 index 0000000..1068a03 --- /dev/null +++ b/tools/perf/page_sets/data/pathological_mobile_sites_010.wprgo.sha1
@@ -0,0 +1 @@ +802b171021da233d43f754b547a0639fd94ae9cb \ No newline at end of file
diff --git a/tools/v8_context_snapshot/BUILD.gn b/tools/v8_context_snapshot/BUILD.gn index 9c536da..e4d15f1 100644 --- a/tools/v8_context_snapshot/BUILD.gn +++ b/tools/v8_context_snapshot/BUILD.gn
@@ -8,6 +8,7 @@ # to speedup creating a V8 context and setting up around it. import("//build/config/c++/c++.gni") +import("//build/config/chromecast_build.gni") import("//build/config/compiler/compiler.gni") import("//v8/snapshot_toolchain.gni") @@ -15,6 +16,10 @@ import("//build/config/android/rules.gni") } +declare_args() { + use_v8_context_snapshot = !is_chromeos && !is_android && !is_chromecast +} + if (is_android) { android_assets("v8_context_snapshot_assets") { deps = [ @@ -28,14 +33,14 @@ } group("v8_context_snapshot") { - if (!is_chromeos && !is_android) { + if (use_v8_context_snapshot) { public_deps = [ ":generate_v8_context_snapshot", ] } } -if (!is_chromeos && !is_android) { +if (use_v8_context_snapshot) { action("generate_v8_context_snapshot") { script = "run.py" output_file = "$root_out_dir/v8_context_snapshot.bin"
diff --git a/ui/android/BUILD.gn b/ui/android/BUILD.gn index 65e9a6e1..cbf034c 100644 --- a/ui/android/BUILD.gn +++ b/ui/android/BUILD.gn
@@ -42,6 +42,7 @@ "ui_android_export.h", "view_android.cc", "view_android.h", + "view_android_observer.h", "view_client.cc", "view_client.h", "window_android.cc", @@ -255,6 +256,21 @@ ] } +android_library("ui_java_test_support") { + testonly = true + java_files = [ + "javatests/src/org/chromium/ui/test/util/UiDisableIf.java", + "javatests/src/org/chromium/ui/test/util/UiDisableIfSkipCheck.java", + "javatests/src/org/chromium/ui/test/util/UiRestriction.java", + "javatests/src/org/chromium/ui/test/util/UiRestrictionSkipCheck.java", + ] + deps = [ + ":ui_java", + "//base:base_java", + "//base:base_java_test_support", + ] +} + junit_binary("ui_junit_tests") { java_files = [ "junit/src/org/chromium/ui/base/ClipboardTest.java",
diff --git a/ui/android/javatests/src/org/chromium/ui/test/util/UiDisableIf.java b/ui/android/javatests/src/org/chromium/ui/test/util/UiDisableIf.java new file mode 100644 index 0000000..721f3de --- /dev/null +++ b/ui/android/javatests/src/org/chromium/ui/test/util/UiDisableIf.java
@@ -0,0 +1,19 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.ui.test.util; + +/** + * Disable if enums that are usable with the @DisableIf in layers depending on //ui. + * + * e.g. @DisableIf.Device(type = {UiDisableIf.PHONE}) + */ +public final class UiDisableIf { + /** Specifies the test is disabled if on phone form factors. */ + public static final String PHONE = "Phone"; + /** Specifies the test is disabled if on tablet form factors. */ + public static final String TABLET = "Tablet"; + /** Specifies the test is disabled if on large tablet form factors. */ + public static final String LARGETABLET = "LargeTablet"; +} \ No newline at end of file
diff --git a/ui/android/javatests/src/org/chromium/ui/test/util/UiDisableIfSkipCheck.java b/ui/android/javatests/src/org/chromium/ui/test/util/UiDisableIfSkipCheck.java new file mode 100644 index 0000000..a59a9aa --- /dev/null +++ b/ui/android/javatests/src/org/chromium/ui/test/util/UiDisableIfSkipCheck.java
@@ -0,0 +1,38 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.ui.test.util; + +import android.content.Context; +import android.text.TextUtils; + +import org.chromium.base.test.util.DisableIfSkipCheck; +import org.chromium.ui.base.DeviceFormFactor; + +/** + * Checks for conditional disables. Currently only includes checks against + * a few device form factor values. + */ +public class UiDisableIfSkipCheck extends DisableIfSkipCheck { + private final Context mTargetContext; + + public UiDisableIfSkipCheck(Context targetContext) { + mTargetContext = targetContext; + } + + @Override + protected boolean deviceTypeApplies(String type) { + if (TextUtils.equals(type, UiDisableIf.PHONE) && !DeviceFormFactor.isTablet()) { + return true; + } + if (TextUtils.equals(type, UiDisableIf.TABLET) && DeviceFormFactor.isTablet()) { + return true; + } + if (TextUtils.equals(type, UiDisableIf.LARGETABLET) + && DeviceFormFactor.isLargeTablet(mTargetContext)) { + return true; + } + return false; + } +}
diff --git a/ui/android/javatests/src/org/chromium/ui/test/util/UiRestriction.java b/ui/android/javatests/src/org/chromium/ui/test/util/UiRestriction.java new file mode 100644 index 0000000..30c994c --- /dev/null +++ b/ui/android/javatests/src/org/chromium/ui/test/util/UiRestriction.java
@@ -0,0 +1,18 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.ui.test.util; + +/** + * UiRestrictions list form factor restrictions, that are usable with + * the @Restriction enum in layers depending on //ui. + * E.g. @Restriction({UiRestriction.RESTRICTION_TYPE_PHONE}) + */ + +public final class UiRestriction { + /** Specifies the test is only valid on phone form factors. */ + public static final String RESTRICTION_TYPE_PHONE = "Phone"; + /** Specifies the test is only valid on tablet form factors. */ + public static final String RESTRICTION_TYPE_TABLET = "Tablet"; +}
diff --git a/ui/android/javatests/src/org/chromium/ui/test/util/UiRestrictionSkipCheck.java b/ui/android/javatests/src/org/chromium/ui/test/util/UiRestrictionSkipCheck.java new file mode 100644 index 0000000..f334dbbb --- /dev/null +++ b/ui/android/javatests/src/org/chromium/ui/test/util/UiRestrictionSkipCheck.java
@@ -0,0 +1,33 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.ui.test.util; + +import android.content.Context; +import android.text.TextUtils; + +import org.chromium.base.test.util.RestrictionSkipCheck; +import org.chromium.ui.base.DeviceFormFactor; + +/** + * Checks if any restrictions exist and skip the test if it meets those restrictions. + */ +public class UiRestrictionSkipCheck extends RestrictionSkipCheck { + public UiRestrictionSkipCheck(Context targetContext) { + super(targetContext); + } + + @Override + protected boolean restrictionApplies(String restriction) { + if (TextUtils.equals(restriction, UiRestriction.RESTRICTION_TYPE_PHONE) + && DeviceFormFactor.isTablet()) { + return true; + } + if (TextUtils.equals(restriction, UiRestriction.RESTRICTION_TYPE_TABLET) + && !DeviceFormFactor.isTablet()) { + return true; + } + return false; + } +}
diff --git a/ui/android/view_android.cc b/ui/android/view_android.cc index 83b5e7dc..91b31f9 100644 --- a/ui/android/view_android.cc +++ b/ui/android/view_android.cc
@@ -87,6 +87,7 @@ ViewAndroid::ViewAndroid() : ViewAndroid(nullptr) {} ViewAndroid::~ViewAndroid() { + observer_list_.Clear(); RemoveFromParent(); for (std::list<ViewAndroid*>::iterator it = children_.begin(); @@ -139,6 +140,8 @@ // accidentally overwrite the valid ones in the children. if (!physical_size_.IsEmpty()) child->OnPhysicalBackingSizeChanged(physical_size_); + if (GetWindowAndroid()) + child->OnAttachedToWindow(); } // static @@ -232,6 +235,8 @@ DCHECK(child); DCHECK_EQ(child->parent_, this); + if (GetWindowAndroid()) + child->OnDetachedFromWindow(); std::list<ViewAndroid*>::iterator it = std::find(children_.begin(), children_.end(), child); DCHECK(it != children_.end()); @@ -239,6 +244,28 @@ child->parent_ = nullptr; } +void ViewAndroid::AddObserver(ViewAndroidObserver* observer) { + observer_list_.AddObserver(observer); +} + +void ViewAndroid::RemoveObserver(ViewAndroidObserver* observer) { + observer_list_.RemoveObserver(observer); +} + +void ViewAndroid::OnAttachedToWindow() { + for (auto& observer : observer_list_) + observer.OnAttachedToWindow(); + for (auto* child : children_) + child->OnAttachedToWindow(); +} + +void ViewAndroid::OnDetachedFromWindow() { + for (auto& observer : observer_list_) + observer.OnDetachedFromWindow(); + for (auto* child : children_) + child->OnDetachedFromWindow(); +} + WindowAndroid* ViewAndroid::GetWindowAndroid() const { return parent_ ? parent_->GetWindowAndroid() : nullptr; }
diff --git a/ui/android/view_android.h b/ui/android/view_android.h index b12c3835..577c313d 100644 --- a/ui/android/view_android.h +++ b/ui/android/view_android.h
@@ -11,7 +11,9 @@ #include "base/android/jni_weak_ref.h" #include "base/bind.h" #include "base/memory/ref_counted.h" +#include "base/observer_list.h" #include "ui/android/ui_android_export.h" +#include "ui/android/view_android_observer.h" #include "ui/gfx/geometry/rect_f.h" class SkBitmap; @@ -30,6 +32,7 @@ class MotionEventAndroid; class ViewClient; class WindowAndroid; +class ViewAndroidObserver; // View-related parameters from frame updates. struct FrameInfo { @@ -172,6 +175,10 @@ // Return the location of the container view in physical pixels. gfx::Point GetLocationOfContainerViewOnScreen(); + // ViewAndroid does not own |observer|s. + void AddObserver(ViewAndroidObserver* observer); + void RemoveObserver(ViewAndroidObserver* observer); + float GetDipScale(); protected: @@ -188,6 +195,9 @@ void RemoveChild(ViewAndroid* child); + void OnAttachedToWindow(); + void OnDetachedFromWindow(); + template <typename E> using ViewClientCallback = const base::Callback<bool(ViewClient*, const E&, const gfx::PointF&)>; @@ -227,6 +237,7 @@ GetViewAndroidDelegate() const; std::list<ViewAndroid*> children_; + base::ObserverList<ViewAndroidObserver> observer_list_; scoped_refptr<cc::Layer> layer_; JavaObjectWeakGlobalRef delegate_;
diff --git a/ui/android/view_android_observer.h b/ui/android/view_android_observer.h new file mode 100644 index 0000000..cb8cbe51 --- /dev/null +++ b/ui/android/view_android_observer.h
@@ -0,0 +1,28 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef UI_ANDROID_VIEW_ANDROID_OBSERVER_H_ +#define UI_ANDROID_VIEW_ANDROID_OBSERVER_H_ + +#include "ui/android/ui_android_export.h" + +namespace ui { + +class UI_ANDROID_EXPORT ViewAndroidObserver { + public: + // Notifies that view gets attached to window. Note that the notification + // is not sent if view is already in attached state. + virtual void OnAttachedToWindow() = 0; + + // Notifies that view gets detached from window. Note that the notification + // is not sent if view is already in detached state. + virtual void OnDetachedFromWindow() = 0; + + protected: + virtual ~ViewAndroidObserver() {} +}; + +} // namespace ui + +#endif // UI_ANDROID_VIEW_ANDROID_OBSERVER_H_
diff --git a/ui/android/view_android_unittests.cc b/ui/android/view_android_unittests.cc index 78a01f6..f3d077a 100644 --- a/ui/android/view_android_unittests.cc +++ b/ui/android/view_android_unittests.cc
@@ -6,7 +6,9 @@ #include "testing/gtest/include/gtest/gtest.h" #include "ui/android/event_forwarder.h" #include "ui/android/view_android.h" +#include "ui/android/view_android_observer.h" #include "ui/android/view_client.h" +#include "ui/android/window_android.h" #include "ui/events/android/motion_event_android.h" namespace ui { @@ -200,4 +202,60 @@ EXPECT_DCHECK_DEATH(rwhv2.GetEventForwarder()); } +class Observer : public ViewAndroidObserver { + public: + Observer() : attached_(false) {} + + void OnAttachedToWindow() override { attached_ = true; } + + void OnDetachedFromWindow() override { attached_ = false; } + + bool attached_; +}; + +TEST(ViewAndroidTest, Observer) { + std::unique_ptr<WindowAndroid> window(WindowAndroid::CreateForTesting()); + ViewAndroid top; + ViewAndroid bottom; + + Observer top_observer; + Observer bottom_observer; + + top.AddObserver(&top_observer); + bottom.AddObserver(&bottom_observer); + + top.AddChild(&bottom); + + EXPECT_FALSE(top_observer.attached_); + EXPECT_FALSE(bottom_observer.attached_); + + // Views in a tree all get notified of 'attached' event. + window->AddChild(&top); + EXPECT_TRUE(top_observer.attached_); + EXPECT_TRUE(bottom_observer.attached_); + + // Observer, upon addition, does not get notified of the current + // attached state. + Observer top_observer2; + top.AddObserver(&top_observer2); + EXPECT_FALSE(top_observer2.attached_); + + bottom.RemoveFromParent(); + EXPECT_FALSE(bottom_observer.attached_); + top.RemoveFromParent(); + EXPECT_FALSE(top_observer.attached_); + + window->AddChild(&top); + EXPECT_TRUE(top_observer.attached_); + + // View, upon addition to a tree in the attached state, should be notified. + top.AddChild(&bottom); + EXPECT_TRUE(bottom_observer.attached_); + + // Views in a tree all get notified of 'detached' event. + top.RemoveFromParent(); + EXPECT_FALSE(top_observer.attached_); + EXPECT_FALSE(bottom_observer.attached_); +} + } // namespace ui
diff --git a/ui/android/window_android.cc b/ui/android/window_android.cc index 015d6dd..080ce9a 100644 --- a/ui/android/window_android.cc +++ b/ui/android/window_android.cc
@@ -143,10 +143,6 @@ return reinterpret_cast<WindowAndroid*>(native_pointer); } -void WindowAndroid::DestroyForTesting() { - delete this; -} - void WindowAndroid::OnCompositingDidCommit() { for (WindowAndroidObserver& observer : observer_list_) observer.OnCompositingDidCommit();
diff --git a/ui/android/window_android.h b/ui/android/window_android.h index fa6e20a..eebe200 100644 --- a/ui/android/window_android.h +++ b/ui/android/window_android.h
@@ -40,6 +40,8 @@ public: WindowAndroid(JNIEnv* env, jobject obj, int display_id); + ~WindowAndroid() override; + void Destroy(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj); base::android::ScopedJavaLocalRef<jobject> GetJavaObject(); @@ -82,7 +84,6 @@ bool CanRequestPermission(const std::string& permission); static WindowAndroid* CreateForTesting(); - void DestroyForTesting(); // Return the window token for this window, if one exists. base::android::ScopedJavaLocalRef<jobject> GetWindowToken(); @@ -92,8 +93,6 @@ friend class DisplayAndroidManager; friend class WindowBeginFrameSource; - ~WindowAndroid() override; - void SetNeedsBeginFrames(bool needs_begin_frames); void RequestVSyncUpdate();
diff --git a/ui/app_list/app_list_features.cc b/ui/app_list/app_list_features.cc index 8f4ba7a..9fa6480 100644 --- a/ui/app_list/app_list_features.cc +++ b/ui/app_list/app_list_features.cc
@@ -6,7 +6,6 @@ #include "base/feature_list.h" #include "base/metrics/field_trial_params.h" -#include "ui/app_list/app_list_switches.h" namespace app_list { namespace features { @@ -35,15 +34,13 @@ bool IsBackgroundBlurEnabled() { static const bool enabled = - switches::IsBackgroundBlurEnabled() || base::FeatureList::IsEnabled(kEnableBackgroundBlur); return enabled; } bool IsFullscreenAppListEnabled() { // Not using local static variable to allow tests to change this value. - return switches::IsFullscreenAppListEnabled() || - base::FeatureList::IsEnabled(kEnableFullscreenAppList); + return base::FeatureList::IsEnabled(kEnableFullscreenAppList); } bool IsTouchFriendlySearchResultsPageEnabled() {
diff --git a/ui/app_list/app_list_switches.cc b/ui/app_list/app_list_switches.cc index 79459d8c..89f621e 100644 --- a/ui/app_list/app_list_switches.cc +++ b/ui/app_list/app_list_switches.cc
@@ -21,12 +21,6 @@ // If set, the app list will be enabled as if enabled from CWS. const char kEnableAppList[] = "enable-app-list"; -// If set, the app list will have background blur. -const char kEnableBackgroundBlur[] = "enable-background-blur"; - -// If set, fullscreen app list will be enabled as if the feature flag was set. -const char kEnableFullscreenAppList[] = "enable-fullscreen-app-list"; - // Enable/disable syncing of the app list independent of extensions. const char kEnableSyncAppList[] = "enable-sync-app-list"; const char kDisableSyncAppList[] = "disable-sync-app-list"; @@ -47,16 +41,6 @@ kDisableSyncAppList); } -bool IsBackgroundBlurEnabled() { - return base::CommandLine::ForCurrentProcess()->HasSwitch( - kEnableBackgroundBlur); -} - -bool IsFullscreenAppListEnabled() { - return base::CommandLine::ForCurrentProcess()->HasSwitch( - kEnableFullscreenAppList); -} - bool IsFolderUIEnabled() { // Folder UI is available only when AppList sync is enabled, and should // not be disabled separately.
diff --git a/ui/app_list/app_list_switches.h b/ui/app_list/app_list_switches.h index 48e9499eb..487d84d 100644 --- a/ui/app_list/app_list_switches.h +++ b/ui/app_list/app_list_switches.h
@@ -15,8 +15,6 @@ APP_LIST_EXPORT extern const char kCustomLauncherPage[]; APP_LIST_EXPORT extern const char kDisableAppListDismissOnBlur[]; APP_LIST_EXPORT extern const char kEnableAppList[]; -APP_LIST_EXPORT extern const char kEnableBackgroundBlur[]; -APP_LIST_EXPORT extern const char kEnableFullscreenAppList[]; APP_LIST_EXPORT extern const char kEnableSyncAppList[]; APP_LIST_EXPORT extern const char kDisableSyncAppList[]; APP_LIST_EXPORT extern const char kEnableDriveSearchInChromeLauncher[]; @@ -25,10 +23,6 @@ bool APP_LIST_EXPORT IsAppListSyncEnabled(); -bool APP_LIST_EXPORT IsBackgroundBlurEnabled(); - -bool APP_LIST_EXPORT IsFullscreenAppListEnabled(); - bool APP_LIST_EXPORT IsFolderUIEnabled(); bool APP_LIST_EXPORT IsVoiceSearchEnabled();
diff --git a/ui/app_list/views/app_list_view.cc b/ui/app_list/views/app_list_view.cc index 076628e..1464e7de 100644 --- a/ui/app_list/views/app_list_view.cc +++ b/ui/app_list/views/app_list_view.cc
@@ -1115,6 +1115,9 @@ case HALF: break; case FULLSCREEN_ALL_APPS: { + // Set timer to ignore further scroll events for this transition. + GetAppsGridView()->StartTimerToIgnoreScrollEvents(); + AppsContainerView* apps_container_view = app_list_main_view_->contents_view()->apps_container_view();
diff --git a/ui/app_list/views/apps_grid_view.cc b/ui/app_list/views/apps_grid_view.cc index 1bb74d3..bf826d3 100644 --- a/ui/app_list/views/apps_grid_view.cc +++ b/ui/app_list/views/apps_grid_view.cc
@@ -137,6 +137,11 @@ constexpr float kAllAppsOpacityStartPx = 8.0f; constexpr float kAllAppsOpacityEndPx = 144.0f; +// The length of time we ignore scroll events on the AppsGridView after the +// AppListView transitions to FULLSCREEN_ALL_APPS. +constexpr base::TimeDelta kIgnoreScrollEventsDurationMs = + base::TimeDelta::FromMilliseconds(500); + // Returns the size of a tile view excluding its padding. gfx::Size GetTileViewSize() { if (features::IsFullscreenAppListEnabled()) @@ -999,6 +1004,9 @@ } bool AppsGridView::OnMouseWheel(const ui::MouseWheelEvent& event) { + if (is_ignoring_scroll_events_) + return true; + // Bail on STATE_START or no apps page to make PaginationModel happy. if (contents_view_->GetActiveState() == AppListModel::STATE_START || pagination_model_.total_pages() <= 0) { @@ -1044,6 +1052,8 @@ } void AppsGridView::OnScrollEvent(ui::ScrollEvent* event) { + if (is_ignoring_scroll_events_) + return; // Bail on STATE_START or no apps page to make PaginationModel happy. if (contents_view_->GetActiveState() == AppListModel::STATE_START || pagination_model_.total_pages() <= 0) { @@ -1981,6 +1991,12 @@ } } +void AppsGridView::StartTimerToIgnoreScrollEvents() { + is_ignoring_scroll_events_ = true; + scroll_ignore_timer_.Start(FROM_HERE, kIgnoreScrollEventsDurationMs, this, + &AppsGridView::StopIgnoringScrollEvents); +} + void AppsGridView::StartDragAndDropHostDrag(const gfx::Point& grid_location) { // When a drag and drop host is given, the item can be dragged out of the app // list window. In that case a proxy widget needs to be used. @@ -2476,6 +2492,10 @@ SetVisible(false); } +void AppsGridView::StopIgnoringScrollEvents() { + is_ignoring_scroll_events_ = false; +} + bool AppsGridView::EnableFolderDragDropUI() { // Enable drag and drop folder UI only if it is at the app list root level // and the switch is on.
diff --git a/ui/app_list/views/apps_grid_view.h b/ui/app_list/views/apps_grid_view.h index 2310d9d..173f39d 100644 --- a/ui/app_list/views/apps_grid_view.h +++ b/ui/app_list/views/apps_grid_view.h
@@ -207,6 +207,9 @@ // Updates the opacity of all the items in the grid during dragging. void UpdateOpacity(); + // Starts a timer during which we ignore scroll events. + void StartTimerToIgnoreScrollEvents(); + // Return the view model for test purposes. const views::ViewModelT<AppListItemView>* view_model_for_test() const { return &view_model_; @@ -441,6 +444,9 @@ // ui::ImplicitAnimationObserver overrides: void OnImplicitAnimationsCompleted() override; + // The callback function for |scroll_ignore_timer_|. + void StopIgnoringScrollEvents(); + // Hide a given view temporarily without losing (mouse) events and / or // changing the size of it. If |immediate| is set the change will be // immediately applied - otherwise it will change gradually. @@ -592,6 +598,9 @@ // Timer to auto flip page when dragging an item near the left/right edges. base::OneShotTimer page_flip_timer_; + // Timer to ignore scroll events after the app list switches states. + base::OneShotTimer scroll_ignore_timer_; + // Target page to switch to when |page_flip_timer_| fires. int page_flip_target_ = -1; @@ -607,6 +616,9 @@ // True if the drag_view_ item is a folder item being dragged for reparenting. bool dragging_for_reparent_item_ = false; + // Whether the AppListView is animating. + bool is_ignoring_scroll_events_ = false; + std::unique_ptr<FadeoutLayerDelegate> fadeout_layer_delegate_; // True if the fullscreen app list feature is enabled.
diff --git a/ui/aura/mus/window_tree_client.cc b/ui/aura/mus/window_tree_client.cc index 99d5a7f9..222600d 100644 --- a/ui/aura/mus/window_tree_client.cc +++ b/ui/aura/mus/window_tree_client.cc
@@ -72,10 +72,6 @@ namespace aura { namespace { -Id MakeTransportId(ClientSpecificId client_id, ClientSpecificId local_id) { - return (client_id << 16) | local_id; -} - inline uint16_t HiWord(uint32_t id) { return static_cast<uint16_t>((id >> 16) & 0xFFFF); } @@ -195,7 +191,6 @@ scoped_refptr<base::SingleThreadTaskRunner> io_task_runner, bool create_discardable_memory) : connector_(connector), - client_id_(0), next_window_id_(1), next_change_id_(1), delegate_(delegate), @@ -275,9 +270,6 @@ } void WindowTreeClient::ConnectViaWindowTreeFactory() { - // The client id doesn't really matter, we use 101 purely for debugging. - client_id_ = 101; - ui::mojom::WindowTreeFactoryPtr factory; connector_->BindInterface(ui::mojom::kServiceName, &factory); ui::mojom::WindowTreePtr window_tree; @@ -648,15 +640,11 @@ void WindowTreeClient::OnEmbedImpl( ui::mojom::WindowTree* window_tree, - ClientSpecificId client_id, ui::mojom::WindowDataPtr root_data, int64_t display_id, Id focused_window_id, bool drawn, const base::Optional<viz::LocalSurfaceId>& local_surface_id) { - // WARNING: this is only called if WindowTreeClient was created as the - // result of an embedding. - client_id_ = client_id; WindowTreeConnectionEstablished(window_tree); DCHECK(roots_.empty()); @@ -783,7 +771,7 @@ if (window->server_id() != kInvalidServerId) return; - window->set_server_id(MakeTransportId(client_id_, next_window_id_++)); + window->set_server_id(next_window_id_++); RegisterWindowMus(window); DCHECK(window_manager_delegate_ || !IsRoot(window)); @@ -1035,9 +1023,9 @@ } bool WindowTreeClient::WasCreatedByThisClient(const WindowMus* window) const { - // Windows created via CreateTopLevelWindow() are not owned by us, but have - // our client id. const_cast is required by set. - return HiWord(window->server_id()) == client_id_ && + // Windows created via CreateTopLevelWindow() are not owned by us, but don't + // have high-word set. const_cast is required by set. + return !HiWord(window->server_id()) && roots_.count(const_cast<WindowMus*>(window)) == 0; } @@ -1096,7 +1084,6 @@ } void WindowTreeClient::OnEmbed( - ClientSpecificId client_id, ui::mojom::WindowDataPtr root_data, ui::mojom::WindowTreePtr tree, int64_t display_id, @@ -1113,8 +1100,7 @@ MakeRequest(&window_manager_internal_client_)); window_manager_client_ = window_manager_internal_client_.get(); } - - OnEmbedImpl(tree_ptr_.get(), client_id, std::move(root_data), display_id, + OnEmbedImpl(tree_ptr_.get(), std::move(root_data), display_id, focused_window_id, drawn, local_surface_id); } @@ -1673,8 +1659,7 @@ return init_params; } -void WindowTreeClient::OnConnect(ClientSpecificId client_id) { - client_id_ = client_id; +void WindowTreeClient::OnConnect() { got_initial_displays_ = true; if (window_manager_delegate_) window_manager_delegate_->OnWmConnected(); @@ -2247,7 +2232,7 @@ base::MakeUnique<WindowPortMus>(this, WindowMusType::TOP_LEVEL); roots_.insert(window_port.get()); - window_port->set_server_id(MakeTransportId(client_id_, next_window_id_++)); + window_port->set_server_id(next_window_id_++); RegisterWindowMus(window_port.get()); std::unordered_map<std::string, std::vector<uint8_t>> transport_properties;
diff --git a/ui/aura/mus/window_tree_client.h b/ui/aura/mus/window_tree_client.h index a81fa20..e5747f3f 100644 --- a/ui/aura/mus/window_tree_client.h +++ b/ui/aura/mus/window_tree_client.h
@@ -129,7 +129,6 @@ FocusSynchronizer* focus_synchronizer() { return focus_synchronizer_.get(); } bool connected() const { return tree_ != nullptr; } - ClientSpecificId client_id() const { return client_id_; } void SetCanFocus(Window* window, bool can_focus); void SetCanAcceptDrops(WindowMus* window, bool can_accept_drops); @@ -283,7 +282,6 @@ // OnEmbed() calls into this. Exposed as a separate function for testing. void OnEmbedImpl(ui::mojom::WindowTree* window_tree, - ClientSpecificId client_id, ui::mojom::WindowDataPtr root_data, int64_t display_id, Id focused_window_id, @@ -350,7 +348,6 @@ // Overridden from WindowTreeClient: void OnEmbed( - ClientSpecificId client_id, ui::mojom::WindowDataPtr root, ui::mojom::WindowTreePtr tree, int64_t display_id, @@ -446,7 +443,7 @@ mojo::AssociatedInterfaceRequest<WindowManager> internal) override; // Overridden from WindowManager: - void OnConnect(ClientSpecificId client_id) override; + void OnConnect() override; void WmNewDisplayAdded( const display::Display& display, ui::mojom::WindowDataPtr root_data, @@ -599,10 +596,6 @@ // This may be null in tests. service_manager::Connector* connector_; - // This is set once and only once when we get OnEmbed(). It gives the unique - // id for this client. - ClientSpecificId client_id_; - // Id assigned to the next window created. ClientSpecificId next_window_id_;
diff --git a/ui/aura/test/mus/test_window_tree_client_setup.cc b/ui/aura/test/mus/test_window_tree_client_setup.cc index 13cabd53..0db3554c 100644 --- a/ui/aura/test/mus/test_window_tree_client_setup.cc +++ b/ui/aura/test/mus/test_window_tree_client_setup.cc
@@ -30,7 +30,7 @@ test_window_manager_client_ = base::MakeUnique<TestWindowManagerClient>(); CommonInit(window_tree_delegate, window_manager_delegate); WindowTreeClientPrivate window_tree_client_private(window_tree_client_.get()); - window_tree_client_private.SetTreeAndClientId(window_tree_.get(), 1); + window_tree_client_private.SetTree(window_tree_.get()); window_tree_client_private.SetWindowManagerClient( test_window_manager_client_.get()); }
diff --git a/ui/aura/test/mus/window_tree_client_private.cc b/ui/aura/test/mus/window_tree_client_private.cc index 3518bd3..6eae502d 100644 --- a/ui/aura/test/mus/window_tree_client_private.cc +++ b/ui/aura/test/mus/window_tree_client_private.cc
@@ -29,9 +29,8 @@ root_data->visible = true; const int64_t display_id = 1; const Id focused_window_id = 0; - tree_client_impl_->OnEmbedImpl(window_tree, 1, std::move(root_data), - display_id, focused_window_id, true, - base::nullopt); + tree_client_impl_->OnEmbedImpl(window_tree, std::move(root_data), display_id, + focused_window_id, true, base::nullopt); } WindowTreeHostMus* WindowTreeClientPrivate::CallWmNewDisplayAdded( @@ -82,8 +81,7 @@ } void WindowTreeClientPrivate::CallOnConnect() { - const ClientSpecificId client_id = 1; - tree_client_impl_->OnConnect(client_id); + tree_client_impl_->OnConnect(); } WindowTreeHostMusInitParams @@ -91,11 +89,8 @@ return tree_client_impl_->CreateInitParamsForNewDisplay(); } -void WindowTreeClientPrivate::SetTreeAndClientId( - ui::mojom::WindowTree* window_tree, - ClientSpecificId client_id) { +void WindowTreeClientPrivate::SetTree(ui::mojom::WindowTree* window_tree) { tree_client_impl_->WindowTreeConnectionEstablished(window_tree); - tree_client_impl_->client_id_ = client_id; } void WindowTreeClientPrivate::SetWindowManagerClient(
diff --git a/ui/aura/test/mus/window_tree_client_private.h b/ui/aura/test/mus/window_tree_client_private.h index f17b2b4..92a0371 100644 --- a/ui/aura/test/mus/window_tree_client_private.h +++ b/ui/aura/test/mus/window_tree_client_private.h
@@ -62,9 +62,8 @@ WindowTreeHostMusInitParams CallCreateInitParamsForNewDisplay(); - // Sets the WindowTree and client id. - void SetTreeAndClientId(ui::mojom::WindowTree* window_tree, - ClientSpecificId client_id); + // Sets the WindowTree. + void SetTree(ui::mojom::WindowTree* window_tree); void SetWindowManagerClient(ui::mojom::WindowManagerClient* client);
diff --git a/ui/base/dragdrop/os_exchange_data_provider_win.cc b/ui/base/dragdrop/os_exchange_data_provider_win.cc index 9d0338b0..5741375f 100644 --- a/ui/base/dragdrop/os_exchange_data_provider_win.cc +++ b/ui/base/dragdrop/os_exchange_data_provider_win.cc
@@ -108,9 +108,9 @@ private: // We are _forced_ to use a vector as our internal data model as Windows' - // retarded IEnumFORMATETC API assumes a deterministic ordering of elements - // through methods like Next and Skip. This exposes the underlying data - // structure to the user. Bah. + // IEnumFORMATETC API assumes a deterministic ordering of elements through + // methods like Next and Skip. This exposes the underlying data structure to + // the user. Bah. std::vector<std::unique_ptr<FORMATETC>> contents_; // The cursor of the active enumeration - an index into |contents_|.
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sw.xtb b/ui/chromeos/translations/ui_chromeos_strings_sw.xtb index e9a8736..e10475f38 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sw.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sw.xtb
@@ -76,7 +76,7 @@ <translation id="3296763833017966289">Kijiojia</translation> <translation id="3338239663705455570">Kibodi ya Kislovenia</translation> <translation id="3399597614303179694">Kibodi ya Kimasedonia</translation> -<translation id="3494768541638400973">Ingizo la Kijapani la Google (kwa kibodi ya Kijapani)</translation> +<translation id="3494768541638400973">Kibodi ya Google ya Kijapani (ya kibodi ya Kijapani)</translation> <translation id="3519867315646775981">Unukuzi wa mfumo wa kuandika (shalom ← שלום)</translation> <translation id="3522708245912499433">Kireno</translation> <translation id="357479282490346887">Kilithuania</translation> @@ -189,7 +189,7 @@ <translation id="6915678159055240887">Chromebox</translation> <translation id="6918340160281024199">Kibodi ya US Workman</translation> <translation id="6935521024859866267">Juu Chini</translation> -<translation id="6937152069980083337">Ingizo la Kijapani la Google (kwa kibodi ya Marekani)</translation> +<translation id="6937152069980083337">Kibodi ya Google ya Kijapani (ya kibodi ya Marekani)</translation> <translation id="6939777852457331078">Kibodi ya US Workman</translation> <translation id="6970230597523682626">Kibulgaria</translation> <translation id="714034171374937760">Chromebase</translation>
diff --git a/ui/compositor/layer_unittest.cc b/ui/compositor/layer_unittest.cc index ff4cb18..dcb2cf9e 100644 --- a/ui/compositor/layer_unittest.cc +++ b/ui/compositor/layer_unittest.cc
@@ -18,6 +18,7 @@ #include "base/memory/ptr_util.h" #include "base/message_loop/message_loop.h" #include "base/path_service.h" +#include "base/run_loop.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h"
diff --git a/ui/events/ozone/evdev/input_controller_evdev.cc b/ui/events/ozone/evdev/input_controller_evdev.cc index aac3e2a0..d31d107e 100644 --- a/ui/events/ozone/evdev/input_controller_evdev.cc +++ b/ui/events/ozone/evdev/input_controller_evdev.cc
@@ -154,6 +154,11 @@ button_map_->UpdateButtonMap(BTN_RIGHT, right ? BTN_LEFT : BTN_RIGHT); } +void InputControllerEvdev::SetMouseReverseScroll(bool enabled) { + input_device_settings_.mouse_reverse_scroll_enabled = enabled; + ScheduleUpdateDeviceSettings(); +} + void InputControllerEvdev::SetTapToClickPaused(bool state) { input_device_settings_.tap_to_click_paused = state; ScheduleUpdateDeviceSettings();
diff --git a/ui/events/ozone/evdev/input_controller_evdev.h b/ui/events/ozone/evdev/input_controller_evdev.h index 6d1adcf..947e84c 100644 --- a/ui/events/ozone/evdev/input_controller_evdev.h +++ b/ui/events/ozone/evdev/input_controller_evdev.h
@@ -57,6 +57,7 @@ void SetNaturalScroll(bool enabled) override; void SetMouseSensitivity(int value) override; void SetPrimaryButtonRight(bool right) override; + void SetMouseReverseScroll(bool enabled) override; void SetTapToClickPaused(bool state) override; void GetTouchDeviceStatus(GetTouchDeviceStatusReply reply) override; void GetTouchEventLog(const base::FilePath& out_dir,
diff --git a/ui/events/ozone/evdev/input_device_factory_evdev.cc b/ui/events/ozone/evdev/input_device_factory_evdev.cc index ab3ec28..895c766 100644 --- a/ui/events/ozone/evdev/input_device_factory_evdev.cc +++ b/ui/events/ozone/evdev/input_device_factory_evdev.cc
@@ -312,6 +312,9 @@ input_device_settings_.mouse_sensitivity); SetIntPropertyForOneType(DT_MOUSE, "Scroll Sensitivity", input_device_settings_.mouse_sensitivity); + SetBoolPropertyForOneType( + DT_MOUSE, "Mouse Reverse Scrolling", + input_device_settings_.mouse_reverse_scroll_enabled); SetBoolPropertyForOneType(DT_TOUCHPAD, "Tap Paused", input_device_settings_.tap_to_click_paused);
diff --git a/ui/events/ozone/evdev/input_device_settings_evdev.h b/ui/events/ozone/evdev/input_device_settings_evdev.h index 1be7637e..8b3c9a0 100644 --- a/ui/events/ozone/evdev/input_device_settings_evdev.h +++ b/ui/events/ozone/evdev/input_device_settings_evdev.h
@@ -26,6 +26,7 @@ bool natural_scroll_enabled = false; bool tap_to_click_paused = false; bool touch_event_logging_enabled = true; + bool mouse_reverse_scroll_enabled = false; int touchpad_sensitivity = kDefaultSensitivity; int mouse_sensitivity = kDefaultSensitivity;
diff --git a/ui/gfx/test/fontconfig_util_linux.cc b/ui/gfx/test/fontconfig_util_linux.cc index fd1ac56..6111456 100644 --- a/ui/gfx/test/fontconfig_util_linux.cc +++ b/ui/gfx/test/fontconfig_util_linux.cc
@@ -15,40 +15,42 @@ namespace gfx { const char* const kSystemFontsForFontconfig[] = { - "/usr/share/fonts/truetype/kochi/kochi-gothic.ttf", - "/usr/share/fonts/truetype/kochi/kochi-mincho.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Arial_Bold.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Arial_Bold_Italic.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Arial_Italic.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Comic_Sans_MS.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Comic_Sans_MS_Bold.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Courier_New.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Courier_New_Bold.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Courier_New_Bold_Italic.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Courier_New_Italic.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Georgia.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Georgia_Bold.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Georgia_Bold_Italic.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Georgia_Italic.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Impact.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Trebuchet_MS.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Trebuchet_MS_Bold.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Trebuchet_MS_Bold_Italic.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Trebuchet_MS_Italic.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold_Italic.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Italic.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Verdana.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Verdana_Bold.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Verdana_Bold_Italic.ttf", - "/usr/share/fonts/truetype/msttcorefonts/Verdana_Italic.ttf", - // The DejaVuSans font is used by the css2.1 tests. - "/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf", - "/usr/share/fonts/truetype/ttf-indic-fonts-core/lohit_hi.ttf", - "/usr/share/fonts/truetype/ttf-indic-fonts-core/lohit_ta.ttf", - "/usr/share/fonts/truetype/ttf-indic-fonts-core/MuktiNarrow.ttf", + "/usr/share/fonts/opentype/ipafont-gothic/ipag.ttf", + "/usr/share/fonts/opentype/ipafont-gothic/ipagp.ttf", + "/usr/share/fonts/opentype/ipafont-mincho/ipam.ttf", + "/usr/share/fonts/opentype/ipafont-mincho/ipamp.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Arial_Bold.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Arial_Bold_Italic.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Arial_Italic.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Comic_Sans_MS.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Comic_Sans_MS_Bold.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Courier_New.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Courier_New_Bold.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Courier_New_Bold_Italic.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Courier_New_Italic.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Georgia.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Georgia_Bold.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Georgia_Bold_Italic.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Georgia_Italic.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Impact.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Trebuchet_MS.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Trebuchet_MS_Bold.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Trebuchet_MS_Bold_Italic.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Trebuchet_MS_Italic.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold_Italic.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Italic.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Verdana.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Verdana_Bold.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Verdana_Bold_Italic.ttf", + "/usr/share/fonts/truetype/msttcorefonts/Verdana_Italic.ttf", + // The DejaVuSans font is used by the css2.1 tests. + "/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf", + "/usr/share/fonts/truetype/ttf-indic-fonts-core/lohit_hi.ttf", + "/usr/share/fonts/truetype/ttf-indic-fonts-core/lohit_ta.ttf", + "/usr/share/fonts/truetype/ttf-indic-fonts-core/MuktiNarrow.ttf", }; const size_t kNumSystemFontsForFontconfig =
diff --git a/ui/keyboard/keyboard_controller.cc b/ui/keyboard/keyboard_controller.cc index fa3c839..8eb698f 100644 --- a/ui/keyboard/keyboard_controller.cc +++ b/ui/keyboard/keyboard_controller.cc
@@ -237,7 +237,7 @@ KeyboardLayoutDelegate* delegate) : ui_(std::move(ui)), layout_delegate_(delegate), - show_on_resize_(false), + show_on_content_update_(false), keyboard_locked_(false), state_(KeyboardControllerState::UNKNOWN), weak_factory_report_lingering_state_(this), @@ -318,7 +318,7 @@ container_->SetBounds(new_bounds); if (contents_loaded) { - bool should_show = show_on_resize(); + const bool should_show = show_on_content_update_; if (state_ == KeyboardControllerState::LOADING_EXTENSION) ChangeState(KeyboardControllerState::HIDDEN); if (should_show) { @@ -367,7 +367,7 @@ case KeyboardControllerState::HIDDEN: return; case KeyboardControllerState::LOADING_EXTENSION: - show_on_resize_ = false; + show_on_content_update_ = false; return; case KeyboardControllerState::WILL_HIDE: @@ -464,7 +464,7 @@ if (ui_->HasContentsWindow()) { // A reload should never try to show virtual keyboard. If keyboard is not // visible before reload, it should keep invisible after reload. - show_on_resize_ = false; + show_on_content_update_ = false; ui_->ReloadKeyboardIfNeeded(); } } @@ -486,7 +486,7 @@ if (should_hide) { switch (state_) { case KeyboardControllerState::LOADING_EXTENSION: - show_on_resize_ = false; + show_on_content_update_ = false; return; case KeyboardControllerState::SHOWN: ChangeState(KeyboardControllerState::WILL_HIDE); @@ -564,7 +564,7 @@ case KeyboardControllerState::SHOWN: return; case KeyboardControllerState::LOADING_EXTENSION: - show_on_resize_ |= show_keyboard; + show_on_content_update_ |= show_keyboard; return; default: break; @@ -595,7 +595,7 @@ switch (state_) { case KeyboardControllerState::INITIAL: DCHECK(ui_->GetContentsWindow()->bounds().height() == 0); - show_on_resize_ = show_keyboard; + show_on_content_update_ = show_keyboard; ChangeState(KeyboardControllerState::LOADING_EXTENSION); return; case KeyboardControllerState::WILL_HIDE: @@ -638,7 +638,7 @@ container_->layer()->SetOpacity(1.0); ChangeState(KeyboardControllerState::SHOWN); - NotifyKeyboardBoundsChangingAndEnsrueCaretInWorkArea(); + NotifyKeyboardBoundsChangingAndEnsureCaretInWorkArea(); } bool KeyboardController::WillHideKeyboard() const { @@ -652,7 +652,7 @@ } void KeyboardController:: - NotifyKeyboardBoundsChangingAndEnsrueCaretInWorkArea() { + NotifyKeyboardBoundsChangingAndEnsureCaretInWorkArea() { // Notify observers after animation finished to prevent reveal desktop // background during animation. NotifyContentsBoundsChanging(container_->bounds()); @@ -700,7 +700,7 @@ if (state != KeyboardControllerState::WILL_HIDE) weak_factory_will_hide_.InvalidateWeakPtrs(); if (state != KeyboardControllerState::LOADING_EXTENSION) - show_on_resize_ = false; + show_on_content_update_ = false; for (KeyboardControllerObserver& observer : observer_list_) observer.OnStateChanged(state);
diff --git a/ui/keyboard/keyboard_controller.h b/ui/keyboard/keyboard_controller.h index bd23fc9..47331ed 100644 --- a/ui/keyboard/keyboard_controller.h +++ b/ui/keyboard/keyboard_controller.h
@@ -148,8 +148,6 @@ // For access to SetContainerBounds. friend class KeyboardLayoutManager; - bool show_on_resize() const { return show_on_resize_; } - // aura::WindowObserver overrides void OnWindowHierarchyChanged(const HierarchyChangeParams& params) override; void OnWindowAddedToRootWindow(aura::Window* window) override; @@ -168,8 +166,8 @@ void OnShowImeIfNeeded() override; // Sets the bounds of the container window. Shows the keyboard if contents - // is first loaded and show_on_resize() is true. Called by - // KayboardLayoutManager. + // is first loaded and show_on_content_update_ is true. Called by + // KeyboardLayoutManager. void SetContainerBounds(const gfx::Rect& new_bounds, const bool contents_loaded); @@ -184,7 +182,7 @@ // is aborted, it won't be called. void ShowAnimationFinished(); - void NotifyKeyboardBoundsChangingAndEnsrueCaretInWorkArea(); + void NotifyKeyboardBoundsChangingAndEnsureCaretInWorkArea(); // Called when the keyboard mode is set or the keyboard is moved to another // display. @@ -207,7 +205,9 @@ // uses container_'s animator. std::unique_ptr<CallbackAnimationObserver> animation_observer_; - bool show_on_resize_; + // If true, show the keyboard window when keyboard UI content updates. + bool show_on_content_update_; + // If true, the keyboard is always visible even if no window has input focus. bool keyboard_locked_; KeyboardEventFilter event_filter_;
diff --git a/ui/ozone/public/input_controller.cc b/ui/ozone/public/input_controller.cc index 5aa3002..7ee1a37 100644 --- a/ui/ozone/public/input_controller.cc +++ b/ui/ozone/public/input_controller.cc
@@ -40,6 +40,7 @@ void SetNaturalScroll(bool enabled) override; void SetMouseSensitivity(int value) override; void SetPrimaryButtonRight(bool right) override; + void SetMouseReverseScroll(bool enabled) override; void SetTapToClickPaused(bool state) override; void GetTouchDeviceStatus(GetTouchDeviceStatusReply reply) override; void GetTouchEventLog(const base::FilePath& out_dir, @@ -121,6 +122,9 @@ void StubInputController::SetPrimaryButtonRight(bool right) { } +void StubInputController::SetMouseReverseScroll(bool enabled) { +} + void StubInputController::SetTapToClickPaused(bool state) { }
diff --git a/ui/ozone/public/input_controller.h b/ui/ozone/public/input_controller.h index cdec1d5..f791a8b 100644 --- a/ui/ozone/public/input_controller.h +++ b/ui/ozone/public/input_controller.h
@@ -65,6 +65,7 @@ // Mouse settings. virtual void SetMouseSensitivity(int value) = 0; virtual void SetPrimaryButtonRight(bool right) = 0; + virtual void SetMouseReverseScroll(bool enabled) = 0; // Touch log collection. virtual void GetTouchDeviceStatus(GetTouchDeviceStatusReply reply) = 0;
diff --git a/ui/snapshot/snapshot_aura_unittest.cc b/ui/snapshot/snapshot_aura_unittest.cc index bee0b0c..1f9a779 100644 --- a/ui/snapshot/snapshot_aura_unittest.cc +++ b/ui/snapshot/snapshot_aura_unittest.cc
@@ -9,6 +9,7 @@ #include "base/bind.h" #include "base/macros.h" +#include "base/run_loop.h" #include "base/test/test_simple_task_runner.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/skia/include/core/SkPixelRef.h"
diff --git a/ui/strings/translations/ui_strings_en-GB.xtb b/ui/strings/translations/ui_strings_en-GB.xtb index c878620d..fb094171 100644 --- a/ui/strings/translations/ui_strings_en-GB.xtb +++ b/ui/strings/translations/ui_strings_en-GB.xtb
@@ -32,6 +32,7 @@ <translation id="2190355936436201913">(empty)</translation> <translation id="2289052229480071835">Tap the touch targets on your screen.</translation> <translation id="2297836609126180313"><ph name="QUANTITY" /> TB/s</translation> +<translation id="24452542372838207">Expand notification</translation> <translation id="2482878487686419369">Notifications</translation> <translation id="2497284189126895209">All Files</translation> <translation id="2522350507219695259">Calibration is completed</translation> @@ -162,6 +163,7 @@ <translation id="9002566407876343676">open</translation> <translation id="9038489124413477075">Unnamed Folder</translation> <translation id="9044832324875206639">{SECONDS,plural, =1{1 sec}other{# secs}}</translation> +<translation id="9059834730836941392">Collapse notification</translation> <translation id="9150735707954472829">Tab</translation> <translation id="9161053988251441839">SUGGESTED APPS</translation> <translation id="9170848237812810038">&Undo</translation>
diff --git a/ui/views/cocoa/bridged_native_widget_interactive_uitest.mm b/ui/views/cocoa/bridged_native_widget_interactive_uitest.mm index c7dfd872..a959ac0f 100644 --- a/ui/views/cocoa/bridged_native_widget_interactive_uitest.mm +++ b/ui/views/cocoa/bridged_native_widget_interactive_uitest.mm
@@ -9,6 +9,7 @@ #import "base/mac/mac_util.h" #import "base/mac/sdk_forward_declarations.h" #include "base/macros.h" +#include "base/run_loop.h" #include "ui/base/hit_test.h" #import "ui/base/test/nswindow_fullscreen_notification_waiter.h" #include "ui/base/test/ui_controls.h"
diff --git a/ui/views/mus/desktop_window_tree_host_mus_unittest.cc b/ui/views/mus/desktop_window_tree_host_mus_unittest.cc index ad0db4b..a8e1fe12 100644 --- a/ui/views/mus/desktop_window_tree_host_mus_unittest.cc +++ b/ui/views/mus/desktop_window_tree_host_mus_unittest.cc
@@ -5,6 +5,7 @@ #include "ui/views/mus/desktop_window_tree_host_mus.h" #include "base/debug/stack_trace.h" +#include "base/run_loop.h" #include "base/memory/ptr_util.h" #include "ui/aura/client/cursor_client.h"
diff --git a/ui/views/mus/drag_interactive_uitest.cc b/ui/views/mus/drag_interactive_uitest.cc index 2651e2e..59a66d4e 100644 --- a/ui/views/mus/drag_interactive_uitest.cc +++ b/ui/views/mus/drag_interactive_uitest.cc
@@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" #include "services/ui/public/interfaces/window_server_test.mojom.h" #include "services/ui/public/interfaces/window_tree_constants.mojom.h"
diff --git a/ui/views/view_unittest.cc b/ui/views/view_unittest.cc index 31aa164..3dcb6b0 100644 --- a/ui/views/view_unittest.cc +++ b/ui/views/view_unittest.cc
@@ -14,6 +14,7 @@ #include "base/macros.h" #include "base/memory/ptr_util.h" #include "base/rand_util.h" +#include "base/run_loop.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h"
diff --git a/ui/webui/resources/cr_elements/shared_vars_css.html b/ui/webui/resources/cr_elements/shared_vars_css.html index 49346dd4..2f1ceff 100644 --- a/ui/webui/resources/cr_elements/shared_vars_css.html +++ b/ui/webui/resources/cr_elements/shared_vars_css.html
@@ -37,6 +37,11 @@ -webkit-margin-start: var(--cr-icon-button-margin-start); } + --cr-primary-text: { + color: var(--paper-grey-900); + line-height: 154%; /* 20px. */ + } + /* TODO (scottchen): re-implement with paddings instead; */ /* These are used for row items such as radio buttons, check boxes, list * items etc. */