diff --git a/DEPS b/DEPS index e993d86d..4ad6026 100644 --- a/DEPS +++ b/DEPS
@@ -83,7 +83,7 @@ # 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': 'd14d7b029a107f0fa9d8a0379bca8f3937d6bdd6', + 'v8_revision': '5ac513b039a9dfe32a4764c1d798cfc13e21d344', # 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. @@ -91,7 +91,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': '0e1224c82c67aa9a85b571aa41af20ec16dc3911', + 'angle_revision': 'f2f6d3799cf2f74706110bf73fbd90a659502fd3', # 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. @@ -103,7 +103,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': '640d8ffad8536c789103892c7a4e69e5d30172c8', + 'pdfium_revision': 'b5835183116559ea8225b7d8cc67c6f55bed7a1a', # 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. @@ -111,7 +111,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling BoringSSL # and whatever else without interference from each other. - 'boringssl_revision': 'ef16f19ef2ea7364a3645c8c48d68f91855305c7', + 'boringssl_revision': '94cd196a80252c98e329e979870f2a462cc4f402', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling google-toolbox-for-mac # and whatever else without interference from each other. @@ -135,7 +135,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': '21f0b3554207e6e8178fa4e8f0c91b1249aeec79', + 'catapult_revision': '2c400a6bb32dff0ef61f3345d041ff5266bb3a1c', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -263,6 +263,11 @@ 'condition': 'checkout_android', }, + 'src/third_party/android_ndk': { + 'url': Var('chromium_git') + '/android_ndk.git' + '@' + 'e951c37287c7d8cd915bf8d4149fd4a06d808b55', + 'condition': 'checkout_android', + }, + 'src/third_party/android_tools': { 'url': Var('chromium_git') + '/android_tools.git' + '@' + 'c78b25872734e0038ae2a333edc645cd96bc232d', 'condition': 'checkout_android', @@ -328,7 +333,7 @@ }, 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '31c14787e48c1d032e8780a11aa1ddd4d63861b7', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'da669d61230a10f71a13703889a97827db35ffd9', 'src/third_party/devtools-node-modules': Var('chromium_git') + '/external/github.com/ChromeDevTools/devtools-node-modules' + '@' + Var('devtools_node_modules_revision'), @@ -347,7 +352,7 @@ }, 'src/third_party/ffmpeg': - Var('chromium_git') + '/chromium/third_party/ffmpeg.git' + '@' + '423f74fab02ff573b52abd542eb5dfdadaa05cf4', + Var('chromium_git') + '/chromium/third_party/ffmpeg.git' + '@' + 'eb53b52399f5b46426202f77a12dba3fe822ee09', 'src/third_party/findbugs': { 'url': Var('chromium_git') + '/chromium/deps/findbugs.git' + '@' + '4275d9ac8610db6b1bc9a5e887f97e41b33fac67', @@ -384,7 +389,7 @@ }, 'src/third_party/googletest/src': - Var('chromium_git') + '/external/github.com/google/googletest.git' + '@' + '247a3d8e5e5d403f7fcacdb8ccc71e5059f15daa', + Var('chromium_git') + '/external/github.com/google/googletest.git' + '@' + '0062e4869f07a3ef235703ddf63af604b712446c', # GNU binutils assembler for x86-32. 'src/third_party/gnu_binutils': { @@ -644,7 +649,7 @@ Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + 'd458ada06171a85af00367251a4ed55db7fe2018', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + 'a0f5f60c93edcf4105c38f1648f4ba1546a7db0c', # commit position 20628 + Var('webrtc_git') + '/src.git' + '@' + 'd3c642bc1fc257324225590496f9207543cd0f79', # commit position 20628 'src/third_party/xdg-utils': { 'url': Var('chromium_git') + '/chromium/deps/xdg-utils.git' + '@' + 'd80274d5869b17b8c9067a1022e4416ee7ed5e0d',
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java index 86b143b..bb2a0ca 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwContents.java +++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
@@ -1121,15 +1121,9 @@ setNewAwContentsPreO(newAwContentsPtr); } else { // Move the TextClassifier to the new WebContents. - SelectionPopupController oldController = - SelectionPopupController.fromWebContents(mWebContents); - - TextClassifier textClassifier = oldController.getCustomTextClassifier(); + TextClassifier textClassifier = mWebContents != null ? getTextClassifier() : null; setNewAwContentsPreO(newAwContentsPtr); - if (textClassifier != null) { - SelectionPopupController.fromWebContents(mWebContents) - .setTextClassifier(textClassifier); - } + if (textClassifier != null) setTextClassifier(textClassifier); } }
diff --git a/ash/BUILD.gn b/ash/BUILD.gn index 1f50072..7cd0911b 100644 --- a/ash/BUILD.gn +++ b/ash/BUILD.gn
@@ -734,8 +734,8 @@ "system/web_notification/fullscreen_notification_blocker.h", "system/web_notification/inactive_user_notification_blocker.cc", "system/web_notification/inactive_user_notification_blocker.h", - "system/web_notification/login_state_notification_blocker.cc", - "system/web_notification/login_state_notification_blocker.h", + "system/web_notification/session_state_notification_blocker.cc", + "system/web_notification/session_state_notification_blocker.h", "system/web_notification/web_notification_tray.cc", "system/web_notification/web_notification_tray.h", "touch/ash_touch_transform_controller.cc", @@ -1499,7 +1499,7 @@ "system/user/tray_user_unittest.cc", "system/web_notification/ash_popup_alignment_delegate_unittest.cc", "system/web_notification/inactive_user_notification_blocker_unittest.cc", - "system/web_notification/login_state_notification_blocker_unittest.cc", + "system/web_notification/session_state_notification_blocker_unittest.cc", "system/web_notification/web_notification_tray_unittest.cc", "test/ash_test_helper_unittest.cc", "test/ash_unittests.cc",
diff --git a/ash/display/display_move_window_util_unittest.cc b/ash/display/display_move_window_util_unittest.cc index 880ce8c6..c270bd4 100644 --- a/ash/display/display_move_window_util_unittest.cc +++ b/ash/display/display_move_window_util_unittest.cc
@@ -105,7 +105,7 @@ EXPECT_EQ(GetDefaultLeftSnappedBoundsInDisplay( screen->GetDisplayNearestWindow(window)), window->GetBoundsInScreen()); - EXPECT_EQ(0.5f, window_state->snapped_width_ratio()); + EXPECT_EQ(0.5f, *window_state->snapped_width_ratio()); HandleMoveActiveWindowToDisplay(DisplayMoveWindowDirection::kRight); EXPECT_EQ(display_manager()->GetDisplayAt(1).id(), screen->GetDisplayNearestWindow(window).id()); @@ -114,7 +114,7 @@ EXPECT_EQ(GetDefaultLeftSnappedBoundsInDisplay( screen->GetDisplayNearestWindow(window)), window->GetBoundsInScreen()); - EXPECT_EQ(0.5f, window_state->snapped_width_ratio()); + EXPECT_EQ(0.5f, *window_state->snapped_width_ratio()); } // A horizontal layout for three displays. They are perfectly horizontally
diff --git a/ash/message_center/message_center_controller.cc b/ash/message_center/message_center_controller.cc index e1ed13d..097d0ef1 100644 --- a/ash/message_center/message_center_controller.cc +++ b/ash/message_center/message_center_controller.cc
@@ -50,7 +50,7 @@ MessageCenterController::MessageCenterController() : fullscreen_notification_blocker_(MessageCenter::Get()), inactive_user_notification_blocker_(MessageCenter::Get()), - login_notification_blocker_(MessageCenter::Get()), + session_state_notification_blocker_(MessageCenter::Get()), binding_(this) {} MessageCenterController::~MessageCenterController() = default; @@ -65,11 +65,6 @@ client_->SetNotifierEnabled(notifier_id, enabled); } -void MessageCenterController::OnNotifierAdvancedSettingsRequested( - const NotifierId& notifier_id) { - client_->HandleNotifierAdvancedSettingsRequested(notifier_id); -} - void MessageCenterController::SetClient( mojom::AshMessageCenterClientAssociatedPtrInfo client) { DCHECK(!client_.is_bound());
diff --git a/ash/message_center/message_center_controller.h b/ash/message_center/message_center_controller.h index 68e9162..8e98b081 100644 --- a/ash/message_center/message_center_controller.h +++ b/ash/message_center/message_center_controller.h
@@ -9,7 +9,7 @@ #include "ash/public/interfaces/ash_message_center_controller.mojom.h" #include "ash/system/web_notification/fullscreen_notification_blocker.h" #include "ash/system/web_notification/inactive_user_notification_blocker.h" -#include "ash/system/web_notification/login_state_notification_blocker.h" +#include "ash/system/web_notification/session_state_notification_blocker.h" #include "base/macros.h" #include "mojo/public/cpp/bindings/associated_binding.h" #include "mojo/public/cpp/bindings/binding.h" @@ -34,10 +34,6 @@ void SetNotifierEnabled(const message_center::NotifierId& notifier_id, bool enabled); - // Called upon request for more information about a particular notifier. - void OnNotifierAdvancedSettingsRequested( - const message_center::NotifierId& notifier_id); - // mojom::AshMessageCenterController: void SetClient( mojom::AshMessageCenterClientAssociatedPtrInfo client) override; @@ -77,7 +73,7 @@ FullscreenNotificationBlocker fullscreen_notification_blocker_; InactiveUserNotificationBlocker inactive_user_notification_blocker_; - LoginStateNotificationBlocker login_notification_blocker_; + SessionStateNotificationBlocker session_state_notification_blocker_; NotifierSettingsListener* notifier_id_ = nullptr;
diff --git a/ash/message_center/notifier_settings_view.cc b/ash/message_center/notifier_settings_view.cc index a5a646a..e01c856a 100644 --- a/ash/message_center/notifier_settings_view.cc +++ b/ash/message_center/notifier_settings_view.cc
@@ -23,7 +23,6 @@ #include "third_party/skia/include/core/SkColor.h" #include "ui/accessibility/ax_node_data.h" #include "ui/base/l10n/l10n_util.h" -#include "ui/base/resource/resource_bundle.h" #include "ui/compositor/paint_recorder.h" #include "ui/events/event_utils.h" #include "ui/events/keycodes/keyboard_codes.h" @@ -35,7 +34,6 @@ #include "ui/message_center/message_center.h" #include "ui/message_center/public/cpp/message_center_constants.h" #include "ui/message_center/vector_icons.h" -#include "ui/resources/grit/ui_resources.h" #include "ui/views/background.h" #include "ui/views/border.h" #include "ui/views/controls/button/checkbox.h" @@ -71,15 +69,6 @@ // The width of the settings pane in pixels. const int kWidth = 360; -// The width of the learn more icon in pixels. -const int kLearnMoreSize = 12; - -// The width of the click target that contains the learn more button in pixels. -const int kLearnMoreTargetWidth = 28; - -// The height of the click target that contains the learn more button in pixels. -const int kLearnMoreTargetHeight = 40; - // The minimum height of the settings pane in pixels. const int kMinimumHeight = 480; @@ -320,34 +309,6 @@ checkbox_->SetFocusBehavior(FocusBehavior::NEVER); checkbox_->SetAccessibleName(notifier_ui_data.name); - if (notifier_ui_data.has_advanced_settings) { - // Create a more-info button that will be right-aligned. - learn_more_ = new views::ImageButton(this); - learn_more_->SetFocusPainter(CreateFocusPainter()); - learn_more_->SetFocusForPlatform(); - - ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); - learn_more_->SetImage( - views::Button::STATE_NORMAL, - rb.GetImageSkiaNamed(IDR_NOTIFICATION_ADVANCED_SETTINGS)); - learn_more_->SetImage( - views::Button::STATE_HOVERED, - rb.GetImageSkiaNamed(IDR_NOTIFICATION_ADVANCED_SETTINGS_HOVER)); - learn_more_->SetImage( - views::Button::STATE_PRESSED, - rb.GetImageSkiaNamed(IDR_NOTIFICATION_ADVANCED_SETTINGS_PRESSED)); - learn_more_->SetState(views::Button::STATE_NORMAL); - int learn_more_border_width = (kLearnMoreTargetWidth - kLearnMoreSize) / 2; - int learn_more_border_height = - (kLearnMoreTargetHeight - kLearnMoreSize) / 2; - // The image itself is quite small, this large invisible border creates a - // much bigger click target. - learn_more_->SetBorder(views::CreateEmptyBorder( - gfx::Insets(learn_more_border_height, learn_more_border_width))); - learn_more_->SetImageAlignment(views::ImageButton::ALIGN_CENTER, - views::ImageButton::ALIGN_MIDDLE); - } - if (notifier_ui_data.enforced) { Button::SetEnabled(false); checkbox_->SetEnabled(false); @@ -378,34 +339,15 @@ return checkbox_->checked(); } -bool NotifierSettingsView::NotifierButton::has_learn_more() const { - return learn_more_ != nullptr; -} - -void NotifierSettingsView::NotifierButton::SendLearnMorePressedForTest() { - if (learn_more_ == nullptr) - return; - gfx::Point point(110, 120); - ui::MouseEvent pressed(ui::ET_MOUSE_PRESSED, point, point, - ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, - ui::EF_LEFT_MOUSE_BUTTON); - ButtonPressed(learn_more_, pressed); -} - void NotifierSettingsView::NotifierButton::ButtonPressed( views::Button* button, const ui::Event& event) { - if (button == checkbox_) { - // The checkbox state has already changed at this point, but we'll update - // the state on NotifierSettingsView::ButtonPressed() too, so here change - // back to the previous state. - checkbox_->SetChecked(!checkbox_->checked()); - Button::NotifyClick(event); - } else if (button == learn_more_) { - Shell::Get() - ->message_center_controller() - ->OnNotifierAdvancedSettingsRequested(notifier_id_); - } + DCHECK_EQ(button, checkbox_); + // The checkbox state has already changed at this point, but we'll update + // the state on NotifierSettingsView::ButtonPressed() too, so here change + // back to the previous state. + checkbox_->SetChecked(!checkbox_->checked()); + Button::NotifyClick(event); } void NotifierSettingsView::NotifierButton::GetAccessibleNodeData( @@ -442,14 +384,6 @@ layout->AddView(icon_view_); layout->AddView(name_view_); - // Add a column for the learn more button if necessary. - if (learn_more_) { - cs->AddPaddingColumn(0, kInternalHorizontalSpacing); - cs->AddColumn(GridLayout::CENTER, GridLayout::CENTER, 0, - GridLayout::USE_PREF, 0, 0); - layout->AddView(learn_more_); - } - if (!enabled()) { views::ImageView* policy_enforced_icon = new views::ImageView(); policy_enforced_icon->SetImage(gfx::CreateVectorIcon(
diff --git a/ash/message_center/notifier_settings_view.h b/ash/message_center/notifier_settings_view.h index b69bafb..c57d08d5 100644 --- a/ash/message_center/notifier_settings_view.h +++ b/ash/message_center/notifier_settings_view.h
@@ -62,13 +62,10 @@ void UpdateIconImage(const gfx::ImageSkia& icon); void SetChecked(bool checked); bool checked() const; - bool has_learn_more() const; const message_center::NotifierId& notifier_id() const { return notifier_id_; } - void SendLearnMorePressedForTest(); - private: // Overridden from views::ButtonListener: void ButtonPressed(views::Button* button, const ui::Event& event) override; @@ -82,7 +79,6 @@ views::ImageView* icon_view_; views::Label* name_view_; views::Checkbox* checkbox_; - views::ImageButton* learn_more_ = nullptr; DISALLOW_COPY_AND_ASSIGN(NotifierButton); };
diff --git a/ash/message_center/notifier_settings_view_unittest.cc b/ash/message_center/notifier_settings_view_unittest.cc index 7d197919..ad39366e 100644 --- a/ash/message_center/notifier_settings_view_unittest.cc +++ b/ash/message_center/notifier_settings_view_unittest.cc
@@ -29,10 +29,6 @@ TestAshMessageCenterClient() : binding_(this) {} ~TestAshMessageCenterClient() override = default; - size_t settings_request_count() const { return settings_request_count_; } - const NotifierId* last_requested_notifier_id() const { - return last_notifier_id_settings_requested_.get(); - } void set_no_notifiers(bool no_notifiers) { no_notifiers_ = no_notifiers; } mojom::AshMessageCenterClientAssociatedPtrInfo CreateInterfacePtr() { @@ -50,31 +46,23 @@ void SetNotifierEnabled(const NotifierId& notifier_id, bool enabled) override {} - void HandleNotifierAdvancedSettingsRequested( - const NotifierId& notifier_id) override { - settings_request_count_++; - last_notifier_id_settings_requested_.reset(new NotifierId(notifier_id)); - } - void GetNotifierList(GetNotifierListCallback callback) override { std::vector<mojom::NotifierUiDataPtr> ui_data; if (!no_notifiers_) { ui_data.push_back(mojom::NotifierUiData::New( NotifierId(NotifierId::APPLICATION, "id"), - base::ASCIIToUTF16("title"), true /* has_advanced_settings */, - true /* enabled */, false /* enforced */, gfx::ImageSkia())); + base::ASCIIToUTF16("title"), true /* enabled */, false /* enforced */, + gfx::ImageSkia())); ui_data.push_back(mojom::NotifierUiData::New( NotifierId(NotifierId::APPLICATION, "id2"), - base::ASCIIToUTF16("other title"), false /* has_advanced_settings */, - false /* enabled */, false /* enforced */, gfx::ImageSkia())); + base::ASCIIToUTF16("other title"), false /* enabled */, + false /* enforced */, gfx::ImageSkia())); } std::move(callback).Run(std::move(ui_data)); } private: - size_t settings_request_count_ = 0u; - std::unique_ptr<NotifierId> last_notifier_id_settings_requested_; bool no_notifiers_ = false; mojo::AssociatedBinding<mojom::AshMessageCenterClient> binding_; @@ -132,32 +120,6 @@ return notifier_settings_view_.get(); } -TEST_F(NotifierSettingsViewTest, TestLearnMoreButton) { - InitView(); - // Wait for mojo. - base::RunLoop().RunUntilIdle(); - const std::set<NotifierSettingsView::NotifierButton*>& buttons = - GetView()->buttons_; - EXPECT_EQ(2u, buttons.size()); - size_t number_of_settings_buttons = 0; - for (auto* button : buttons) { - if (button->has_learn_more()) { - ++number_of_settings_buttons; - button->SendLearnMorePressedForTest(); - } - } - - // Wait for mojo. - base::RunLoop().RunUntilIdle(); - EXPECT_EQ(1u, number_of_settings_buttons); - EXPECT_EQ(1u, client()->settings_request_count()); - const NotifierId* last_settings_button_id = - client()->last_requested_notifier_id(); - ASSERT_FALSE(last_settings_button_id == nullptr); - EXPECT_EQ(NotifierId(NotifierId::APPLICATION, "id"), - *last_settings_button_id); -} - TEST_F(NotifierSettingsViewTest, TestEmptyNotifierView) { InitView(); // Wait for mojo.
diff --git a/ash/public/interfaces/ash_message_center_controller.mojom b/ash/public/interfaces/ash_message_center_controller.mojom index b430048..b7a5d9a 100644 --- a/ash/public/interfaces/ash_message_center_controller.mojom +++ b/ash/public/interfaces/ash_message_center_controller.mojom
@@ -18,9 +18,6 @@ // The user-visible name of the notifier (e.g. an extension's name). mojo.common.mojom.String16 name; - // True if the notifier has a button for advanced settings/"learn more". - bool has_advanced_settings; - // True if notifications from the notifier are presently enabled. bool enabled; @@ -64,10 +61,6 @@ // notifier. SetNotifierEnabled(message_center.mojom.NotifierId notifier_id, bool enabled); - // Called when the advanced settings button is pressed for a notifier. - HandleNotifierAdvancedSettingsRequested( - message_center.mojom.NotifierId notifier_id); - // Asks the client for a list of notifiers and associated UI information to be // displayed in a settings panel. GetNotifierList() => (array<NotifierUiData> notifiers);
diff --git a/ash/session/test_session_controller_client.cc b/ash/session/test_session_controller_client.cc index 0a62d5d7..a31fd72 100644 --- a/ash/session/test_session_controller_client.cc +++ b/ash/session/test_session_controller_client.cc
@@ -94,6 +94,11 @@ controller_->SetSessionInfo(session_info_->Clone()); } +void TestSessionControllerClient::SetIsRunningInAppMode(bool app_mode) { + session_info_->is_running_in_app_mode = app_mode; + controller_->SetSessionInfo(session_info_->Clone()); +} + void TestSessionControllerClient::CreatePredefinedUserSessions(int count) { DCHECK_GT(count, 0);
diff --git a/ash/session/test_session_controller_client.h b/ash/session/test_session_controller_client.h index 9117d99..bf5588f8 100644 --- a/ash/session/test_session_controller_client.h +++ b/ash/session/test_session_controller_client.h
@@ -44,6 +44,7 @@ void SetShouldLockScreenAutomatically(bool should_lock); void SetAddUserSessionPolicy(AddUserSessionPolicy policy); void SetSessionState(session_manager::SessionState state); + void SetIsRunningInAppMode(bool app_mode); // Creates the |count| pre-defined user sessions. The users are named by // numbers using "user%d@tray" template. The first user is set as active user
diff --git a/ash/shelf/shelf_widget.cc b/ash/shelf/shelf_widget.cc index 524e935..f2275be 100644 --- a/ash/shelf/shelf_widget.cc +++ b/ash/shelf/shelf_widget.cc
@@ -264,7 +264,7 @@ shelf_layout_manager_->LayoutShelf(); shelf_layout_manager_->UpdateAutoHideState(); - Show(); + ShowIfHidden(); } bool ShelfWidget::IsShowingAppList() const { @@ -365,9 +365,10 @@ } void ShelfWidget::OnSessionStateChanged(session_manager::SessionState state) { - if (!IsUsingViewsShelf()) { - login_shelf_view_->SetVisible(false); - shelf_view_->SetVisible(false); + // Do not show widget in UNKNOWN state - it might be called before shelf was + // initialized. + if (!IsUsingViewsShelf() || state == session_manager::SessionState::UNKNOWN) { + HideIfShown(); } else { switch (state) { case session_manager::SessionState::ACTIVE: @@ -388,13 +389,23 @@ login_shelf_view_->SetVisible(true); shelf_view_->SetVisible(false); break; - case session_manager::SessionState::UNKNOWN: - login_shelf_view_->SetVisible(false); - shelf_view_->SetVisible(false); - break; + default: + // session_manager::SessionState::UNKNOWN handled in if statement above. + NOTREACHED(); } + ShowIfHidden(); } login_shelf_view_->UpdateAfterSessionStateChange(state); } +void ShelfWidget::HideIfShown() { + if (IsVisible()) + Hide(); +} + +void ShelfWidget::ShowIfHidden() { + if (!IsVisible()) + Show(); +} + } // namespace ash
diff --git a/ash/shelf/shelf_widget.h b/ash/shelf/shelf_widget.h index e1cc6109..ff308cb 100644 --- a/ash/shelf/shelf_widget.h +++ b/ash/shelf/shelf_widget.h
@@ -112,6 +112,12 @@ class DelegateView; friend class DelegateView; + // Hides shelf widget if IsVisible() returns true. + void HideIfShown(); + + // Shows shelf widget if IsVisible() returns false. + void ShowIfHidden(); + Shelf* shelf_; // Owned by the shelf container's window.
diff --git a/ash/shelf/shelf_widget_unittest.cc b/ash/shelf/shelf_widget_unittest.cc index fa8989c..fa20e1fb 100644 --- a/ash/shelf/shelf_widget_unittest.cc +++ b/ash/shelf/shelf_widget_unittest.cc
@@ -427,8 +427,11 @@ void ExpectVisible(session_manager::SessionState state, ShelfVisibility shelf_visibility) { GetSessionControllerClient()->SetSessionState(state); - EXPECT_EQ(shelf_visibility == kLoginShelf, login_shelf_view_->visible()); - EXPECT_EQ(shelf_visibility == kShelf, shelf_view_->visible()); + EXPECT_EQ(shelf_visibility == kNone, !GetShelfWidget()->IsVisible()); + if (shelf_visibility != kNone) { + EXPECT_EQ(shelf_visibility == kLoginShelf, login_shelf_view_->visible()); + EXPECT_EQ(shelf_visibility == kShelf, shelf_view_->visible()); + } } private:
diff --git a/ash/strings/ash_strings_fa.xtb b/ash/strings/ash_strings_fa.xtb index d9c58e6..add6b385 100644 --- a/ash/strings/ash_strings_fa.xtb +++ b/ash/strings/ash_strings_fa.xtb
@@ -144,7 +144,7 @@ <translation id="4351433414020964307">دستیار درحال بار کردن است...</translation> <translation id="4378551569595875038">در حال اتصال...</translation> <translation id="4379531060876907730">اینها ابزارهای قلم شما هستند</translation> -<translation id="4421231901400348175">همرسانی کنترل صفحهتان با <ph name="HELPER_NAME" /> از طریق راهنمایی از راه دور.</translation> +<translation id="4421231901400348175">همرسانی کنترل صفحهتان با <ph name="HELPER_NAME" /> از طریق راهنمایی ازراهدور.</translation> <translation id="4430019312045809116">میزان صدا</translation> <translation id="4479639480957787382">اترنت</translation> <translation id="4481530544597605423">دستگاههای لغو ارتباطشده</translation> @@ -195,7 +195,7 @@ <translation id="5957083217255311415">داده تلفن همراه خاموش است.</translation> <translation id="5958529069007801266">کاربر نظارتشده</translation> <translation id="5977415296283489383">هدفون</translation> -<translation id="5978382165065462689">همرسانی کنترل صفحهتان از طریق راهنمایی از راه دور.</translation> +<translation id="5978382165065462689">همرسانی کنترل صفحهتان از طریق راهنمایی ازراهدور.</translation> <translation id="5980301590375426705">خروج از مهمان</translation> <translation id="5992218262414051481">«حالت تضاد بالا» فعال شد. برای خاموش کردن آن، Ctrl+Search+H را دوباره فشار دهید.</translation> <translation id="6018164090099858612">خروج از حالت آینه</translation>
diff --git a/ash/strings/ash_strings_id.xtb b/ash/strings/ash_strings_id.xtb index d67633f..0e506214 100644 --- a/ash/strings/ash_strings_id.xtb +++ b/ash/strings/ash_strings_id.xtb
@@ -184,7 +184,7 @@ <translation id="5744083938413354016">Tap seret</translation> <translation id="5777841717266010279">Berhenti membagikan layar?</translation> <translation id="57838592816432529">Bisukan</translation> -<translation id="5832805196449965646">Tambahkan Orang</translation> +<translation id="5832805196449965646">Tambahkan Pengguna</translation> <translation id="5860033963881614850">Nonaktif</translation> <translation id="5895138241574237353">Mulai Ulang</translation> <translation id="5901316534475909376">Shift+Esc</translation>
diff --git a/ash/system/web_notification/login_state_notification_blocker.cc b/ash/system/web_notification/session_state_notification_blocker.cc similarity index 65% rename from ash/system/web_notification/login_state_notification_blocker.cc rename to ash/system/web_notification/session_state_notification_blocker.cc index 2e565cf..1cce791 100644 --- a/ash/system/web_notification/login_state_notification_blocker.cc +++ b/ash/system/web_notification/session_state_notification_blocker.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/system/web_notification/login_state_notification_blocker.h" +#include "ash/system/web_notification/session_state_notification_blocker.h" #include "ash/session/session_controller.h" #include "ash/shell.h" @@ -15,18 +15,22 @@ namespace { -// Returns true when screen is not locked. bool CalculateShouldShowNotification() { - return !Shell::Get()->session_controller()->IsScreenLocked(); + SessionController* const session_controller = + Shell::Get()->session_controller(); + + return !session_controller->IsRunningInAppMode() && + !session_controller->IsScreenLocked(); } -// Returns true if session state is active, there is an active user and the -// PrefService of the active user is initialized. bool CalculateShouldShowPopup() { SessionController* const session_controller = Shell::Get()->session_controller(); - if (session_controller->GetSessionState() != SessionState::ACTIVE) + + if (session_controller->IsRunningInAppMode() || + session_controller->GetSessionState() != SessionState::ACTIVE) { return false; + } const mojom::UserSession* active_user_session = session_controller->GetUserSession(0); @@ -36,7 +40,7 @@ } // namespace -LoginStateNotificationBlocker::LoginStateNotificationBlocker( +SessionStateNotificationBlocker::SessionStateNotificationBlocker( message_center::MessageCenter* message_center) : NotificationBlocker(message_center), should_show_notification_(CalculateShouldShowNotification()), @@ -44,33 +48,41 @@ Shell::Get()->session_controller()->AddObserver(this); } -LoginStateNotificationBlocker::~LoginStateNotificationBlocker() { +SessionStateNotificationBlocker::~SessionStateNotificationBlocker() { Shell::Get()->session_controller()->RemoveObserver(this); } -bool LoginStateNotificationBlocker::ShouldShowNotification( +bool SessionStateNotificationBlocker::ShouldShowNotification( const message_center::Notification& notification) const { return should_show_notification_; } -bool LoginStateNotificationBlocker::ShouldShowNotificationAsPopup( +bool SessionStateNotificationBlocker::ShouldShowNotificationAsPopup( const message_center::Notification& notification) const { + SessionController* const session_controller = + Shell::Get()->session_controller(); + + // Kiosk/app state overrides ShouldAlwaysShowPopup(). + if (session_controller->IsRunningInAppMode()) + return false; + if (ash::system_notifier::ShouldAlwaysShowPopups(notification.notifier_id())) return true; return should_show_popup_; } -void LoginStateNotificationBlocker::OnSessionStateChanged(SessionState state) { +void SessionStateNotificationBlocker::OnSessionStateChanged( + SessionState state) { CheckStateAndNotifyIfChanged(); } -void LoginStateNotificationBlocker::OnActiveUserPrefServiceChanged( +void SessionStateNotificationBlocker::OnActiveUserPrefServiceChanged( PrefService* pref_service) { CheckStateAndNotifyIfChanged(); } -void LoginStateNotificationBlocker::CheckStateAndNotifyIfChanged() { +void SessionStateNotificationBlocker::CheckStateAndNotifyIfChanged() { const bool new_should_show_notification = CalculateShouldShowNotification(); const bool new_should_show_popup = CalculateShouldShowPopup(); if (new_should_show_notification == should_show_notification_ &&
diff --git a/ash/system/web_notification/login_state_notification_blocker.h b/ash/system/web_notification/session_state_notification_blocker.h similarity index 70% rename from ash/system/web_notification/login_state_notification_blocker.h rename to ash/system/web_notification/session_state_notification_blocker.h index 97213b41..889d0bf1 100644 --- a/ash/system/web_notification/login_state_notification_blocker.h +++ b/ash/system/web_notification/session_state_notification_blocker.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ASH_SYSTEM_WEB_NOTIFICATION_LOGIN_STATE_NOTIFICATION_BLOCKER_H_ -#define ASH_SYSTEM_WEB_NOTIFICATION_LOGIN_STATE_NOTIFICATION_BLOCKER_H_ +#ifndef ASH_SYSTEM_WEB_NOTIFICATION_SESSION_STATE_NOTIFICATION_BLOCKER_H_ +#define ASH_SYSTEM_WEB_NOTIFICATION_SESSION_STATE_NOTIFICATION_BLOCKER_H_ #include "ash/ash_export.h" #include "ash/session/session_observer.h" @@ -15,14 +15,15 @@ // A notification blocker which suppresses notifications popups based on the // session state and active user PrefService readiness reported by the // SessionController. Only active (logged in, unlocked) sessions with -// initialized PrefService will show notifications. -class ASH_EXPORT LoginStateNotificationBlocker +// initialized PrefService will show user notifications. Kiosk mode sessions +// will never show even system notifications. +class ASH_EXPORT SessionStateNotificationBlocker : public message_center::NotificationBlocker, public SessionObserver { public: - explicit LoginStateNotificationBlocker( + explicit SessionStateNotificationBlocker( message_center::MessageCenter* message_center); - ~LoginStateNotificationBlocker() override; + ~SessionStateNotificationBlocker() override; private: // message_center::NotificationBlocker overrides: @@ -40,9 +41,9 @@ bool should_show_notification_ = false; bool should_show_popup_ = false; - DISALLOW_COPY_AND_ASSIGN(LoginStateNotificationBlocker); + DISALLOW_COPY_AND_ASSIGN(SessionStateNotificationBlocker); }; } // namespace ash -#endif // ASH_SYSTEM_WEB_NOTIFICATION_LOGIN_STATE_NOTIFICATION_BLOCKER_H_ +#endif // ASH_SYSTEM_WEB_NOTIFICATION_SESSION_STATE_NOTIFICATION_BLOCKER_H_
diff --git a/ash/system/web_notification/login_state_notification_blocker_unittest.cc b/ash/system/web_notification/session_state_notification_blocker_unittest.cc similarity index 86% rename from ash/system/web_notification/login_state_notification_blocker_unittest.cc rename to ash/system/web_notification/session_state_notification_blocker_unittest.cc index f533f830..8cadf6a9 100644 --- a/ash/system/web_notification/login_state_notification_blocker_unittest.cc +++ b/ash/system/web_notification/session_state_notification_blocker_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/system/web_notification/login_state_notification_blocker.h" +#include "ash/system/web_notification/session_state_notification_blocker.h" #include <memory> @@ -22,17 +22,17 @@ namespace { -class LoginStateNotificationBlockerTest +class SessionStateNotificationBlockerTest : public NoSessionAshTestBase, public message_center::NotificationBlocker::Observer { public: - LoginStateNotificationBlockerTest() = default; - ~LoginStateNotificationBlockerTest() override = default; + SessionStateNotificationBlockerTest() = default; + ~SessionStateNotificationBlockerTest() override = default; // tests::AshTestBase overrides: void SetUp() override { NoSessionAshTestBase::SetUp(); - blocker_.reset(new LoginStateNotificationBlocker( + blocker_.reset(new SessionStateNotificationBlocker( message_center::MessageCenter::Get())); blocker_->AddObserver(this); } @@ -74,10 +74,10 @@ int state_changed_count_ = 0; std::unique_ptr<message_center::NotificationBlocker> blocker_; - DISALLOW_COPY_AND_ASSIGN(LoginStateNotificationBlockerTest); + DISALLOW_COPY_AND_ASSIGN(SessionStateNotificationBlockerTest); }; -TEST_F(LoginStateNotificationBlockerTest, BaseTest) { +TEST_F(SessionStateNotificationBlockerTest, BaseTest) { // Default status: OOBE. message_center::NotifierId notifier_id( message_center::NotifierId::APPLICATION, "test-notifier"); @@ -104,7 +104,7 @@ EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id)); } -TEST_F(LoginStateNotificationBlockerTest, AlwaysAllowedNotifier) { +TEST_F(SessionStateNotificationBlockerTest, AlwaysAllowedNotifier) { // NOTIFIER_DISPLAY is allowed to shown in the login screen. message_center::NotifierId notifier_id( message_center::NotifierId::SYSTEM_COMPONENT, @@ -134,7 +134,7 @@ EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id)); } -TEST_F(LoginStateNotificationBlockerTest, BlockOnPrefService) { +TEST_F(SessionStateNotificationBlockerTest, BlockOnPrefService) { // Default status: OOBE. message_center::NotifierId notifier_id( message_center::NotifierId::APPLICATION, "test-notifier"); @@ -173,5 +173,15 @@ EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id)); } +TEST_F(SessionStateNotificationBlockerTest, BlockInKioskMode) { + message_center::NotifierId notifier_id( + message_center::NotifierId::SYSTEM_COMPONENT, + system_notifier::kNotifierDisplay); + EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id)); + + SimulateKioskMode(user_manager::USER_TYPE_KIOSK_APP); + EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id)); +} + } // namespace } // namespace ash
diff --git a/ash/test/ash_test_base.cc b/ash/test/ash_test_base.cc index 76cea012..1c54d6d 100644 --- a/ash/test/ash_test_base.cc +++ b/ash/test/ash_test_base.cc
@@ -407,6 +407,18 @@ session->SetSessionState(SessionState::ACTIVE); } +void AshTestBase::SimulateKioskMode(user_manager::UserType user_type) { + DCHECK(user_type == user_manager::USER_TYPE_ARC_KIOSK_APP || + user_type == user_manager::USER_TYPE_KIOSK_APP); + + const std::string user_email = "fake_kiosk@kioks-apps.device-local.localhost"; + TestSessionControllerClient* session = GetSessionControllerClient(); + session->SetIsRunningInAppMode(true); + session->AddUserSession(user_email, user_type); + session->SwitchActiveUser(AccountId::FromUserEmail(user_email)); + session->SetSessionState(SessionState::ACTIVE); +} + void AshTestBase::ClearLogin() { GetSessionControllerClient()->Reset(); }
diff --git a/ash/test/ash_test_base.h b/ash/test/ash_test_base.h index 5e479684..dda387e1 100644 --- a/ash/test/ash_test_base.h +++ b/ash/test/ash_test_base.h
@@ -14,6 +14,7 @@ #include "base/macros.h" #include "base/message_loop/message_loop.h" #include "base/threading/thread.h" +#include "components/user_manager/user_type.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/skia/include/core/SkColor.h" #include "ui/aura/client/window_types.h" @@ -188,6 +189,9 @@ // Similar to SimulateUserLogin but for a guest user. void SimulateGuestLogin(); + // Simulates kiosk mode. |user_type| must correlate to a kiosk type user. + void SimulateKioskMode(user_manager::UserType user_type); + // Clears all user sessions and resets to the primary login screen state. void ClearLogin();
diff --git a/ash/wm/window_state.cc b/ash/wm/window_state.cc index 528daba..401f755 100644 --- a/ash/wm/window_state.cc +++ b/ash/wm/window_state.cc
@@ -354,8 +354,10 @@ } void WindowState::UpdateSnappedWidthRatio(const WMEvent* event) { - if (!IsSnapped()) + if (!IsSnapped()) { + snapped_width_ratio_.reset(); return; + } const WMEventType type = event->type(); // Initializes |snapped_width_ratio_| whenever |event| is snapping event. @@ -363,13 +365,16 @@ type == WM_EVENT_CYCLE_SNAP_LEFT || type == WM_EVENT_CYCLE_SNAP_RIGHT) { // Since |UpdateSnappedWidthRatio()| is called post WMEvent taking effect, // |window_|'s bounds is in a correct state for ratio update. - snapped_width_ratio_ = GetCurrentSnappedWidthRatio(window_); + snapped_width_ratio_ = + base::make_optional(GetCurrentSnappedWidthRatio(window_)); return; } // |snapped_width_ratio_| under snapped state may change due to bounds event. - if (event->IsBoundsEvent()) - snapped_width_ratio_ = GetCurrentSnappedWidthRatio(window_); + if (event->IsBoundsEvent()) { + snapped_width_ratio_ = + base::make_optional(GetCurrentSnappedWidthRatio(window_)); + } } void WindowState::SetPreAutoManageWindowBounds(const gfx::Rect& bounds) { @@ -486,8 +491,10 @@ return; gfx::Rect maximized_bounds = ScreenUtil::GetMaximizedWindowBoundsInParent(window_); - bounds->set_width( - static_cast<int>(snapped_width_ratio_ * maximized_bounds.width())); + if (snapped_width_ratio_) { + bounds->set_width( + static_cast<int>(*snapped_width_ratio_ * maximized_bounds.width())); + } if (GetStateType() == mojom::WindowStateType::LEFT_SNAPPED) bounds->set_x(maximized_bounds.x()); else if (GetStateType() == mojom::WindowStateType::RIGHT_SNAPPED)
diff --git a/ash/wm/window_state.h b/ash/wm/window_state.h index 73f0b8e..7bdc294 100644 --- a/ash/wm/window_state.h +++ b/ash/wm/window_state.h
@@ -195,7 +195,9 @@ // Updates |snapped_width_ratio_| based on |event|. void UpdateSnappedWidthRatio(const WMEvent* event); - float snapped_width_ratio() const { return snapped_width_ratio_; } + base::Optional<float> snapped_width_ratio() const { + return snapped_width_ratio_; + } // True if the window should be unminimized to the restore bounds, as // opposed to the window's current bounds. |unminimized_to_restore_bounds_| is @@ -409,10 +411,10 @@ bool cached_always_on_top_; bool allow_set_bounds_direct_ = false; - // Saves the ratio between snapped window width and display workarea width. It - // is used to update snapped window width on AdjustSnappedBounds() when - // handling workspace events. - float snapped_width_ratio_ = 0.5f; + // A property to save the ratio between snapped window width and display + // workarea width. It is used to update snapped window width on + // AdjustSnappedBounds() when handling workspace events. + base::Optional<float> snapped_width_ratio_; // A property to remember the window position which was set before the // auto window position manager changed the window bounds, so that it can get
diff --git a/ash/wm/window_state_unittest.cc b/ash/wm/window_state_unittest.cc index 8ea1510e..831523e 100644 --- a/ash/wm/window_state_unittest.cc +++ b/ash/wm/window_state_unittest.cc
@@ -206,7 +206,7 @@ gfx::Rect(kWorkAreaBounds.x(), kWorkAreaBounds.y(), kWorkAreaBounds.width() / 2, kWorkAreaBounds.height()); EXPECT_EQ(expected, window->GetBoundsInScreen()); - EXPECT_EQ(0.5f, window_state->snapped_width_ratio()); + EXPECT_EQ(0.5f, *window_state->snapped_width_ratio()); // Drag to change snapped window width. const int kIncreasedWidth = 225; @@ -219,18 +219,18 @@ expected.set_width(expected.width() + kIncreasedWidth); EXPECT_EQ(expected, window->GetBoundsInScreen()); EXPECT_EQ(mojom::WindowStateType::LEFT_SNAPPED, window_state->GetStateType()); - EXPECT_EQ(0.75f, window_state->snapped_width_ratio()); + EXPECT_EQ(0.75f, *window_state->snapped_width_ratio()); // Another cycle snap left event will restore window state to normal. window_state->OnWMEvent(&cycle_snap_left); EXPECT_EQ(mojom::WindowStateType::NORMAL, window_state->GetStateType()); - EXPECT_EQ(0.75f, window_state->snapped_width_ratio()); + EXPECT_FALSE(window_state->snapped_width_ratio()); // Another cycle snap left event will snap window and reset snapped width // ratio. window_state->OnWMEvent(&cycle_snap_left); EXPECT_EQ(mojom::WindowStateType::LEFT_SNAPPED, window_state->GetStateType()); - EXPECT_EQ(0.5f, window_state->snapped_width_ratio()); + EXPECT_EQ(0.5f, *window_state->snapped_width_ratio()); } // Test that snapping left/right preserves the restore bounds.
diff --git a/ash/wm/workspace/multi_window_resize_controller_unittest.cc b/ash/wm/workspace/multi_window_resize_controller_unittest.cc index 2dc9db6..64c7552 100644 --- a/ash/wm/workspace/multi_window_resize_controller_unittest.cc +++ b/ash/wm/workspace/multi_window_resize_controller_unittest.cc
@@ -370,8 +370,8 @@ const wm::WMEvent snap_right(wm::WM_EVENT_SNAP_RIGHT); w2_state->OnWMEvent(&snap_right); EXPECT_EQ(mojom::WindowStateType::RIGHT_SNAPPED, w2_state->GetStateType()); - EXPECT_EQ(0.5f, w1_state->snapped_width_ratio()); - EXPECT_EQ(0.5f, w2_state->snapped_width_ratio()); + EXPECT_EQ(0.5f, *w1_state->snapped_width_ratio()); + EXPECT_EQ(0.5f, *w2_state->snapped_width_ratio()); ui::test::EventGenerator& generator = GetEventGenerator(); generator.MoveMouseTo(w1->bounds().CenterPoint()); @@ -401,8 +401,8 @@ EXPECT_EQ(gfx::Rect(0, 0, 300, 252), w1->bounds()); EXPECT_EQ(mojom::WindowStateType::RIGHT_SNAPPED, w2_state->GetStateType()); EXPECT_EQ(gfx::Rect(300, 0, 100, 252), w2->bounds()); - EXPECT_EQ(0.75f, w1_state->snapped_width_ratio()); - EXPECT_EQ(0.25f, w2_state->snapped_width_ratio()); + EXPECT_EQ(0.75f, *w1_state->snapped_width_ratio()); + EXPECT_EQ(0.25f, *w2_state->snapped_width_ratio()); } } // namespace ash
diff --git a/base/allocator/partition_allocator/page_allocator.h b/base/allocator/partition_allocator/page_allocator.h index a25ce8c7..a39b4e30 100644 --- a/base/allocator/partition_allocator/page_allocator.h +++ b/base/allocator/partition_allocator/page_allocator.h
@@ -29,9 +29,6 @@ static const size_t kPageAllocationGranularityBaseMask = ~kPageAllocationGranularityOffsetMask; -// All Blink-supported systems have 4096 sized system pages and can handle -// permissions and commit / decommit at this granularity. -// Loongson have 16384 sized system pages. #if defined(_MIPS_ARCH_LOONGSON) static const size_t kSystemPageSize = 16384; #else
diff --git a/base/allocator/partition_allocator/partition_alloc_unittest.cc b/base/allocator/partition_allocator/partition_alloc_unittest.cc index 8f65bf2..7e9c48c 100644 --- a/base/allocator/partition_allocator/partition_alloc_unittest.cc +++ b/base/allocator/partition_allocator/partition_alloc_unittest.cc
@@ -33,11 +33,7 @@ return std::unique_ptr<T[]>(ptr); } -#if defined(_MIPS_ARCH_LOONGSON) -const size_t kTestMaxAllocation = 16384; -#else -const size_t kTestMaxAllocation = 4096; -#endif +constexpr size_t kTestMaxAllocation = base::kSystemPageSize; bool IsLargeMemoryDevice() { // Treat any device with 2GiB or more of physical memory as a "large memory @@ -807,61 +803,61 @@ // Test that we can fetch the real allocated size after an allocation. TEST_F(PartitionAllocTest, GenericAllocGetSize) { void* ptr; - size_t requestedSize, actualSize, predictedSize; + size_t requested_size, actual_size, predicted_size; EXPECT_TRUE(PartitionAllocSupportsGetSize()); // Allocate something small. - requestedSize = 511 - kExtraAllocSize; - predictedSize = generic_allocator.root()->ActualSize(requestedSize); - ptr = generic_allocator.root()->Alloc(requestedSize, type_name); + requested_size = 511 - kExtraAllocSize; + predicted_size = generic_allocator.root()->ActualSize(requested_size); + ptr = generic_allocator.root()->Alloc(requested_size, type_name); EXPECT_TRUE(ptr); - actualSize = PartitionAllocGetSize(ptr); - EXPECT_EQ(predictedSize, actualSize); - EXPECT_LT(requestedSize, actualSize); + actual_size = PartitionAllocGetSize(ptr); + EXPECT_EQ(predicted_size, actual_size); + EXPECT_LT(requested_size, actual_size); generic_allocator.root()->Free(ptr); // Allocate a size that should be a perfect match for a bucket, because it // is an exact power of 2. - requestedSize = (256 * 1024) - kExtraAllocSize; - predictedSize = generic_allocator.root()->ActualSize(requestedSize); - ptr = generic_allocator.root()->Alloc(requestedSize, type_name); + requested_size = (256 * 1024) - kExtraAllocSize; + predicted_size = generic_allocator.root()->ActualSize(requested_size); + ptr = generic_allocator.root()->Alloc(requested_size, type_name); EXPECT_TRUE(ptr); - actualSize = PartitionAllocGetSize(ptr); - EXPECT_EQ(predictedSize, actualSize); - EXPECT_EQ(requestedSize, actualSize); + actual_size = PartitionAllocGetSize(ptr); + EXPECT_EQ(predicted_size, actual_size); + EXPECT_EQ(requested_size, actual_size); generic_allocator.root()->Free(ptr); // Allocate a size that is a system page smaller than a bucket. GetSize() // should return a larger size than we asked for now. - requestedSize = (256 * 1024) - kSystemPageSize - kExtraAllocSize; - predictedSize = generic_allocator.root()->ActualSize(requestedSize); - ptr = generic_allocator.root()->Alloc(requestedSize, type_name); + requested_size = (256 * 1024) - kSystemPageSize - kExtraAllocSize; + predicted_size = generic_allocator.root()->ActualSize(requested_size); + ptr = generic_allocator.root()->Alloc(requested_size, type_name); EXPECT_TRUE(ptr); - actualSize = PartitionAllocGetSize(ptr); - EXPECT_EQ(predictedSize, actualSize); - EXPECT_EQ(requestedSize + kSystemPageSize, actualSize); + actual_size = PartitionAllocGetSize(ptr); + EXPECT_EQ(predicted_size, actual_size); + EXPECT_EQ(requested_size + kSystemPageSize, actual_size); // Check that we can write at the end of the reported size too. char* charPtr = reinterpret_cast<char*>(ptr); - *(charPtr + (actualSize - 1)) = 'A'; + *(charPtr + (actual_size - 1)) = 'A'; generic_allocator.root()->Free(ptr); // Allocate something very large, and uneven. if (IsLargeMemoryDevice()) { - requestedSize = 512 * 1024 * 1024 - 1; - predictedSize = generic_allocator.root()->ActualSize(requestedSize); - ptr = generic_allocator.root()->Alloc(requestedSize, type_name); + requested_size = 512 * 1024 * 1024 - 1; + predicted_size = generic_allocator.root()->ActualSize(requested_size); + ptr = generic_allocator.root()->Alloc(requested_size, type_name); EXPECT_TRUE(ptr); - actualSize = PartitionAllocGetSize(ptr); - EXPECT_EQ(predictedSize, actualSize); - EXPECT_LT(requestedSize, actualSize); + actual_size = PartitionAllocGetSize(ptr); + EXPECT_EQ(predicted_size, actual_size); + EXPECT_LT(requested_size, actual_size); generic_allocator.root()->Free(ptr); } // Too large allocation. - requestedSize = INT_MAX; - predictedSize = generic_allocator.root()->ActualSize(requestedSize); - EXPECT_EQ(requestedSize, predictedSize); + requested_size = INT_MAX; + predicted_size = generic_allocator.root()->ActualSize(requested_size); + EXPECT_EQ(requested_size, predicted_size); } // Test the realloc() contract. @@ -908,18 +904,18 @@ // Test that shrinking a direct mapped allocation happens in-place. size = kGenericMaxBucketed + 16 * kSystemPageSize; ptr = generic_allocator.root()->Alloc(size, type_name); - size_t actualSize = PartitionAllocGetSize(ptr); + size_t actual_size = PartitionAllocGetSize(ptr); ptr2 = generic_allocator.root()->Realloc( ptr, kGenericMaxBucketed + 8 * kSystemPageSize, type_name); EXPECT_EQ(ptr, ptr2); - EXPECT_EQ(actualSize - 8 * kSystemPageSize, PartitionAllocGetSize(ptr2)); + EXPECT_EQ(actual_size - 8 * kSystemPageSize, PartitionAllocGetSize(ptr2)); // Test that a previously in-place shrunk direct mapped allocation can be // expanded up again within its original size. ptr = generic_allocator.root()->Realloc(ptr2, size - kSystemPageSize, type_name); EXPECT_EQ(ptr2, ptr); - EXPECT_EQ(actualSize - kSystemPageSize, PartitionAllocGetSize(ptr)); + EXPECT_EQ(actual_size - kSystemPageSize, PartitionAllocGetSize(ptr)); // Test that a direct mapped allocation is performed not in-place when the // new size is small enough. @@ -1640,14 +1636,9 @@ } // This test checks large-but-not-quite-direct allocations. - // kSystemPageSize is 16384 on Loongson Platform, not 4096. { -#if defined(_MIPS_ARCH_LOONGSON) - size_t requestedSize = 262144; -#else - size_t requestedSize = 65536; -#endif - void* ptr = generic_allocator.root()->Alloc(requestedSize + 1, type_name); + constexpr size_t requested_size = 16 * kSystemPageSize; + void* ptr = generic_allocator.root()->Alloc(requested_size + 1, type_name); { MockPartitionStatsDumper dumper; @@ -1656,14 +1647,14 @@ EXPECT_TRUE(dumper.IsMemoryAllocationRecorded()); size_t slot_size = - requestedSize + (requestedSize / kGenericNumBucketsPerOrder); + requested_size + (requested_size / kGenericNumBucketsPerOrder); const PartitionBucketMemoryStats* stats = dumper.GetBucketStats(slot_size); EXPECT_TRUE(stats); EXPECT_TRUE(stats->is_valid); EXPECT_FALSE(stats->is_direct_map); EXPECT_EQ(slot_size, stats->bucket_slot_size); - EXPECT_EQ(requestedSize + 1 + kExtraAllocSize, stats->active_bytes); + EXPECT_EQ(requested_size + 1 + kExtraAllocSize, stats->active_bytes); EXPECT_EQ(slot_size, stats->resident_bytes); EXPECT_EQ(0u, stats->decommittable_bytes); EXPECT_EQ(kSystemPageSize, stats->discardable_bytes); @@ -1682,7 +1673,7 @@ EXPECT_FALSE(dumper.IsMemoryAllocationRecorded()); size_t slot_size = - requestedSize + (requestedSize / kGenericNumBucketsPerOrder); + requested_size + (requested_size / kGenericNumBucketsPerOrder); const PartitionBucketMemoryStats* stats = dumper.GetBucketStats(slot_size); EXPECT_TRUE(stats); @@ -1698,9 +1689,8 @@ EXPECT_EQ(0u, stats->num_decommitted_pages); } - void* ptr2 = - generic_allocator.root()->Alloc(requestedSize + kSystemPageSize + 1, - type_name); + void* ptr2 = generic_allocator.root()->Alloc( + requested_size + kSystemPageSize + 1, type_name); EXPECT_EQ(ptr, ptr2); { @@ -1710,14 +1700,14 @@ EXPECT_TRUE(dumper.IsMemoryAllocationRecorded()); size_t slot_size = - requestedSize + (requestedSize / kGenericNumBucketsPerOrder); + requested_size + (requested_size / kGenericNumBucketsPerOrder); const PartitionBucketMemoryStats* stats = dumper.GetBucketStats(slot_size); EXPECT_TRUE(stats); EXPECT_TRUE(stats->is_valid); EXPECT_FALSE(stats->is_direct_map); EXPECT_EQ(slot_size, stats->bucket_slot_size); - EXPECT_EQ(requestedSize + kSystemPageSize + 1 + kExtraAllocSize, + EXPECT_EQ(requested_size + kSystemPageSize + 1 + kExtraAllocSize, stats->active_bytes); EXPECT_EQ(slot_size, stats->resident_bytes); EXPECT_EQ(0u, stats->decommittable_bytes); @@ -1894,29 +1884,18 @@ generic_allocator.root()->Free(ptr2); } - // kSystemPageSize is 16384 byte on Loongson platform. - // Test purge discardable memory requirements need to - // be modified as follows: { -#if defined(_MIPS_ARCH_LOONGSON) - size_t requestedSize = 36864; -#else - size_t requestedSize = 9216; -#endif - char* ptr1 = reinterpret_cast<char*>( - generic_allocator.root()->Alloc(requestedSize - kExtraAllocSize, - type_name)); - void* ptr2 = - generic_allocator.root()->Alloc(requestedSize - kExtraAllocSize, - type_name); - void* ptr3 = - generic_allocator.root()->Alloc(requestedSize - kExtraAllocSize, - type_name); - void* ptr4 = - generic_allocator.root()->Alloc(requestedSize - kExtraAllocSize, - type_name); - memset(ptr1, 'A', requestedSize - kExtraAllocSize); - memset(ptr2, 'A', requestedSize - kExtraAllocSize); + constexpr size_t requested_size = 2.25 * kSystemPageSize; + char* ptr1 = reinterpret_cast<char*>(generic_allocator.root()->Alloc( + requested_size - kExtraAllocSize, type_name)); + void* ptr2 = generic_allocator.root()->Alloc( + requested_size - kExtraAllocSize, type_name); + void* ptr3 = generic_allocator.root()->Alloc( + requested_size - kExtraAllocSize, type_name); + void* ptr4 = generic_allocator.root()->Alloc( + requested_size - kExtraAllocSize, type_name); + memset(ptr1, 'A', requested_size - kExtraAllocSize); + memset(ptr2, 'A', requested_size - kExtraAllocSize); generic_allocator.root()->Free(ptr2); generic_allocator.root()->Free(ptr1); { @@ -1926,12 +1905,12 @@ EXPECT_TRUE(dumper.IsMemoryAllocationRecorded()); const PartitionBucketMemoryStats* stats = - dumper.GetBucketStats(requestedSize); + dumper.GetBucketStats(requested_size); EXPECT_TRUE(stats); EXPECT_TRUE(stats->is_valid); EXPECT_EQ(0u, stats->decommittable_bytes); EXPECT_EQ(2 * kSystemPageSize, stats->discardable_bytes); - EXPECT_EQ(requestedSize * 2, stats->active_bytes); + EXPECT_EQ(requested_size * 2, stats->active_bytes); EXPECT_EQ(9 * kSystemPageSize, stats->resident_bytes); } CHECK_PAGE_IN_CORE(ptr1 - kPointerOffset, true); @@ -1950,11 +1929,13 @@ generic_allocator.root()->Free(ptr3); generic_allocator.root()->Free(ptr4); } - // kSystemPageSize is 16384 byte on Loongson platform. - // 64*kSystemPageSize is 2G and exceeded maximum application - // value that partitionalloc, so must be reduce the application - // value. - // On Loongson, 64*kSystemPageSize was changed to 32*kSystemPageSize. + +// When kSystemPageSize = 16384 (as on _MIPS_ARCH_LOONGSON), 64 * +// kSystemPageSize (see the #else branch below) caused this test to OOM. +// Therefore, for systems with 16 KiB pages, use 32 * kSystemPageSize. +// +// TODO(palmer): Refactor this to branch on page size instead of architecture, +// for clarity of purpose and for applicability to more architectures. #if defined(_MIPS_ARCH_LOONGSON) { char* ptr1 = reinterpret_cast<char*>(PartitionAllocGeneric(
diff --git a/base/android/android_hardware_buffer_abi.h b/base/android/android_hardware_buffer_abi.h index c44ea9e..7012532 100644 --- a/base/android/android_hardware_buffer_abi.h +++ b/base/android/android_hardware_buffer_abi.h
@@ -11,7 +11,7 @@ // wrapper for building without NDK platform level support, it is not a // general-use header and is not complete. // -// TODO(crbug.com/771171): Delete this file when third_party/android_tools/ndk/ +// TODO(crbug.com/771171): Delete this file when third_party/android_ndk/ // is updated to a version that contains the android/hardware_buffer.h file. // // Please refer to the API documentation for details:
diff --git a/base/android/linker/android_dlext.h b/base/android/linker/android_dlext.h index edf5180c..401d6ed 100644 --- a/base/android/linker/android_dlext.h +++ b/base/android/linker/android_dlext.h
@@ -13,7 +13,7 @@ // not complain about a missing symbol when loading our library. // // Details below taken from: -// third_party/android_tools/ndk/platforms/android-21 +// third_party/android_ndk/platforms/android-21 // /arch-arm/usr/include/android/dlext.h // // Although taken specifically from arch-arm, there are no architecture-
diff --git a/base/metrics/sparse_histogram_unittest.cc b/base/metrics/sparse_histogram_unittest.cc index c09a566..5f333e0 100644 --- a/base/metrics/sparse_histogram_unittest.cc +++ b/base/metrics/sparse_histogram_unittest.cc
@@ -17,6 +17,7 @@ #include "base/metrics/statistics_recorder.h" #include "base/pickle.h" #include "base/strings/stringprintf.h" +#include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" namespace base { @@ -176,11 +177,11 @@ UmaHistogramSparse("Sparse", 200); UmaHistogramSparse("Sparse", 100); - StatisticsRecorder::Histograms histograms; - StatisticsRecorder::GetHistograms(&histograms); + const StatisticsRecorder::Histograms histograms = + StatisticsRecorder::GetHistograms(); - ASSERT_EQ(1U, histograms.size()); - HistogramBase* sparse_histogram = histograms[0]; + ASSERT_THAT(histograms, testing::SizeIs(1)); + const HistogramBase* const sparse_histogram = histograms[0]; EXPECT_EQ(SPARSE_HISTOGRAM, sparse_histogram->GetHistogramType()); EXPECT_EQ("Sparse", StringPiece(sparse_histogram->histogram_name())); @@ -201,18 +202,14 @@ // Unlike the macros in histogram.h, SparseHistogram macros can have a // variable as histogram name. for (int i = 0; i < 2; i++) { - std::string name = StringPrintf("Sparse%d", i + 1); - UmaHistogramSparse(name, 100); + UmaHistogramSparse(StringPrintf("Sparse%d", i), 100); } - StatisticsRecorder::Histograms histograms; - StatisticsRecorder::GetHistograms(&histograms); - ASSERT_EQ(2U, histograms.size()); - - std::string name1 = histograms[0]->histogram_name(); - std::string name2 = histograms[1]->histogram_name(); - EXPECT_TRUE(("Sparse1" == name1 && "Sparse2" == name2) || - ("Sparse2" == name1 && "Sparse1" == name2)); + const StatisticsRecorder::Histograms histograms = + StatisticsRecorder::GetHistograms(); + ASSERT_THAT(histograms, testing::SizeIs(2)); + EXPECT_STREQ(histograms[0]->histogram_name(), "Sparse0"); + EXPECT_STREQ(histograms[1]->histogram_name(), "Sparse1"); } TEST_P(SparseHistogramTest, Serialize) {
diff --git a/base/metrics/statistics_recorder.cc b/base/metrics/statistics_recorder.cc index 6f455c4..60e430e 100644 --- a/base/metrics/statistics_recorder.cc +++ b/base/metrics/statistics_recorder.cc
@@ -137,10 +137,7 @@ // static void StatisticsRecorder::WriteHTMLGraph(const std::string& query, std::string* output) { - Histograms snapshot; - GetSnapshot(query, &snapshot); - std::sort(snapshot.begin(), snapshot.end(), &HistogramNameLesser); - for (const HistogramBase* histogram : snapshot) { + for (const HistogramBase* const histogram : GetSnapshot(query)) { histogram->WriteHTMLGraph(output); *output += "<br><hr><br>"; } @@ -154,10 +151,7 @@ else output->append("Collections of all histograms\n"); - Histograms snapshot; - GetSnapshot(query, &snapshot); - std::sort(snapshot.begin(), snapshot.end(), &HistogramNameLesser); - for (const HistogramBase* histogram : snapshot) { + for (const HistogramBase* const histogram : GetSnapshot(query)) { histogram->WriteAscii(output); output->append("\n"); } @@ -165,12 +159,9 @@ // static std::string StatisticsRecorder::ToJSON(JSONVerbosityLevel verbosity_level) { - Histograms snapshot; - GetSnapshot(std::string(), &snapshot); - std::string output = "{\"histograms\":["; const char* sep = ""; - for (const HistogramBase* const histogram : snapshot) { + for (const HistogramBase* const histogram : GetHistograms()) { output += sep; sep = ","; std::string json; @@ -182,24 +173,13 @@ } // static -void StatisticsRecorder::GetHistograms(Histograms* output) { +std::vector<const BucketRanges*> StatisticsRecorder::GetBucketRanges() { + std::vector<const BucketRanges*> out; const AutoLock auto_lock(lock_.Get()); EnsureGlobalRecorderWhileLocked(); - - for (const auto& entry : top_->histograms_) { - output->push_back(entry.second); - } -} - -// static -void StatisticsRecorder::GetBucketRanges( - std::vector<const BucketRanges*>* output) { - const AutoLock auto_lock(lock_.Get()); - EnsureGlobalRecorderWhileLocked(); - - for (const BucketRanges* const p : top_->ranges_) { - output->push_back(p); - } + out.reserve(top_->ranges_.size()); + out.assign(top_->ranges_.begin(), top_->ranges_.end()); + return out; } // static @@ -241,12 +221,8 @@ HistogramBase::Flags flags_to_set, HistogramBase::Flags required_flags, HistogramSnapshotManager* snapshot_manager) { - if (include_persistent) - ImportGlobalPersistentHistograms(); - - Histograms known = GetKnownHistograms(include_persistent); - std::sort(known.begin(), known.end(), &HistogramNameLesser); - snapshot_manager->PrepareDeltas(known, flags_to_set, required_flags); + snapshot_manager->PrepareDeltas(GetKnownHistograms(include_persistent), + flags_to_set, required_flags); } // static @@ -256,26 +232,6 @@ } // static -void StatisticsRecorder::GetSnapshot(const std::string& query, - Histograms* snapshot) { - // This must be called *before* the lock is acquired below because it will - // call back into this object to register histograms. Those called methods - // will acquire the lock at that time. - ImportGlobalPersistentHistograms(); - - const AutoLock auto_lock(lock_.Get()); - EnsureGlobalRecorderWhileLocked(); - - // Need a C-string query for comparisons against C-string histogram name. - const char* const query_string = query.c_str(); - - for (const auto& entry : top_->histograms_) { - if (strstr(entry.second->histogram_name(), query_string) != nullptr) - snapshot->push_back(entry.second); - } -} - -// static bool StatisticsRecorder::SetCallback( const std::string& name, const StatisticsRecorder::OnSampleCallback& cb) { @@ -367,19 +323,56 @@ } // static -StatisticsRecorder::Histograms StatisticsRecorder::GetKnownHistograms( - bool include_persistent) { - Histograms known; - const AutoLock auto_lock(lock_.Get()); - EnsureGlobalRecorderWhileLocked(); - known.reserve(top_->histograms_.size()); - for (const auto& h : top_->histograms_) { - if (include_persistent || - (h.second->flags() & HistogramBase::kIsPersistent) == 0) - known.push_back(h.second); +template <typename Predicate> +StatisticsRecorder::Histograms StatisticsRecorder::GetHistogramsWithPredicate( + const Predicate predicate) { + // This must be called *before* the lock is acquired below because it will + // call back into this object to register histograms. Those called methods + // will acquire the lock at that time. + ImportGlobalPersistentHistograms(); + + Histograms out; + + { + const AutoLock auto_lock(lock_.Get()); + EnsureGlobalRecorderWhileLocked(); + out.reserve(top_->histograms_.size()); + for (const auto& entry : top_->histograms_) { + const HistogramBase* const histogram = entry.second; + DCHECK(histogram); + if (predicate(*histogram)) + out.push_back(entry.second); + } } - return known; + std::sort(out.begin(), out.end(), &HistogramNameLesser); + return out; +} + +// static +StatisticsRecorder::Histograms StatisticsRecorder::GetHistograms() { + return GetHistogramsWithPredicate([](const HistogramBase&) { return true; }); +} + +// static +StatisticsRecorder::Histograms StatisticsRecorder::GetKnownHistograms( + bool include_persistent) { + return GetHistogramsWithPredicate( + [include_persistent](const HistogramBase& histogram) { + return include_persistent || + (histogram.flags() & HistogramBase::kIsPersistent) == 0; + }); +} + +// static +StatisticsRecorder::Histograms StatisticsRecorder::GetSnapshot( + const std::string& query) { + // Need a C-string query for comparisons against C-string histogram name. + const char* const query_string = query.c_str(); + return GetHistogramsWithPredicate( + [query_string](const HistogramBase& histogram) { + return strstr(histogram.histogram_name(), query_string) != nullptr; + }); } // static
diff --git a/base/metrics/statistics_recorder.h b/base/metrics/statistics_recorder.h index 75352d1b..c994b7e2 100644 --- a/base/metrics/statistics_recorder.h +++ b/base/metrics/statistics_recorder.h
@@ -107,13 +107,20 @@ // This method is thread safe. static std::string ToJSON(JSONVerbosityLevel verbosity_level); - // Extracts histograms which were marked for use by UMA. + // Gets existing histograms. + // + // The returned histograms are sorted by name. + // + // Ownership of the individual histograms remains with the StatisticsRecorder. // // This method is thread safe. - static void GetHistograms(Histograms* output); + static Histograms GetHistograms(); - // Extracts BucketRanges used by all histograms registered. - static void GetBucketRanges(std::vector<const BucketRanges*>* output); + // Gets BucketRanges used by all histograms registered. The order of returned + // BucketRanges is not guaranteed. + // + // This method is thread safe. + static std::vector<const BucketRanges*> GetBucketRanges(); // Finds a histogram by name. Matches the exact name. Returns a null pointer // if a matching histogram is not found. @@ -136,12 +143,16 @@ HistogramBase::Flags required_flags, HistogramSnapshotManager* snapshot_manager); - // Extracts registered histograms. Only histograms which have |query| as a - // substring are extracted. An empty query will extract all registered - // histograms. + // Gets registered histograms. Only histograms which have |query| as a + // substring in their name are extracted. An empty query returns all + // registered histograms. + // + // The returned histograms are sorted by name. + // + // Ownership of the individual histograms remains with the StatisticsRecorder. // // This method is thread safe. - static void GetSnapshot(const std::string& query, Histograms* snapshot); + static Histograms GetSnapshot(const std::string& query); typedef base::Callback<void(HistogramBase::Sample)> OnSampleCallback; @@ -244,8 +255,22 @@ // Precondition: The global lock is already acquired. static void EnsureGlobalRecorderWhileLocked(); - // Fetches set of existing histograms. Ownership of the individual histograms - // remains with the StatisticsRecorder. + // Gets existing histograms matching |predicate|. |Predicate| must have the + // signature bool(const HistogramBase&). + // + // The returned histograms are sorted by name. + // + // Ownership of the individual histograms remains with the StatisticsRecorder. + // + // This method is thread safe. + template <typename Predicate> + static Histograms GetHistogramsWithPredicate(Predicate predicate); + + // Gets existing histograms. + // + // The returned histograms are sorted by name. + // + // Ownership of the individual histograms remains with the StatisticsRecorder. // // This method is thread safe. static Histograms GetKnownHistograms(bool include_persistent);
diff --git a/base/metrics/statistics_recorder_unittest.cc b/base/metrics/statistics_recorder_unittest.cc index c3b6e24e..79ab7bf 100644 --- a/base/metrics/statistics_recorder_unittest.cc +++ b/base/metrics/statistics_recorder_unittest.cc
@@ -20,6 +20,7 @@ #include "base/metrics/record_histogram_checker.h" #include "base/metrics/sparse_histogram.h" #include "base/values.h" +#include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" namespace { @@ -53,6 +54,11 @@ namespace base { +using testing::ElementsAre; +using testing::IsEmpty; +using testing::SizeIs; +using testing::UnorderedElementsAre; + class StatisticsRecorderTest : public testing::TestWithParam<bool> { protected: const int32_t kAllocatorMemorySize = 64 << 10; // 64 KiB @@ -131,25 +137,23 @@ UninitializeStatisticsRecorder(); EXPECT_FALSE(HasGlobalRecorder()); - HistogramBase* histogram = CreateHistogram("TestHistogram", 1, 1000, 10); - EXPECT_TRUE(StatisticsRecorder::RegisterOrDeleteDuplicate(histogram)); + HistogramBase* const histogram = + CreateHistogram("TestHistogram", 1, 1000, 10); + EXPECT_EQ(StatisticsRecorder::RegisterOrDeleteDuplicate(histogram), + histogram); EXPECT_TRUE(HasGlobalRecorder()); - - StatisticsRecorder::Histograms registered_histograms; - StatisticsRecorder::GetHistograms(®istered_histograms); - EXPECT_GT(registered_histograms.size(), 0u); + EXPECT_THAT(StatisticsRecorder::GetHistograms(), ElementsAre(histogram)); UninitializeStatisticsRecorder(); EXPECT_FALSE(HasGlobalRecorder()); - BucketRanges* ranges = new BucketRanges(3); + BucketRanges* const ranges = new BucketRanges(3); ranges->ResetChecksum(); - EXPECT_TRUE(StatisticsRecorder::RegisterOrDeleteDuplicateRanges(ranges)); + EXPECT_EQ(StatisticsRecorder::RegisterOrDeleteDuplicateRanges(ranges), + ranges); EXPECT_TRUE(HasGlobalRecorder()); - - std::vector<const BucketRanges*> registered_ranges; - StatisticsRecorder::GetBucketRanges(®istered_ranges); - EXPECT_GT(registered_ranges.size(), 0u); + EXPECT_THAT(StatisticsRecorder::GetBucketRanges(), + UnorderedElementsAre(ranges)); } TEST_P(StatisticsRecorderTest, RegisterBucketRanges) { @@ -165,15 +169,15 @@ StatisticsRecorder::RegisterOrDeleteDuplicateRanges(ranges1)); EXPECT_EQ(ranges2, StatisticsRecorder::RegisterOrDeleteDuplicateRanges(ranges2)); - StatisticsRecorder::GetBucketRanges(®istered_ranges); - ASSERT_EQ(2u, registered_ranges.size()); + EXPECT_THAT(StatisticsRecorder::GetBucketRanges(), + UnorderedElementsAre(ranges1, ranges2)); // Register some ranges again. EXPECT_EQ(ranges1, StatisticsRecorder::RegisterOrDeleteDuplicateRanges(ranges1)); - registered_ranges.clear(); - StatisticsRecorder::GetBucketRanges(®istered_ranges); - ASSERT_EQ(2u, registered_ranges.size()); + EXPECT_THAT(StatisticsRecorder::GetBucketRanges(), + UnorderedElementsAre(ranges1, ranges2)); + // Make sure the ranges is still the one we know. ASSERT_EQ(3u, ranges1->size()); EXPECT_EQ(0, ranges1->range(0)); @@ -185,31 +189,40 @@ ranges3->ResetChecksum(); EXPECT_EQ(ranges1, // returning ranges1 StatisticsRecorder::RegisterOrDeleteDuplicateRanges(ranges3)); - registered_ranges.clear(); - StatisticsRecorder::GetBucketRanges(®istered_ranges); - ASSERT_EQ(2u, registered_ranges.size()); + EXPECT_THAT(StatisticsRecorder::GetBucketRanges(), + UnorderedElementsAre(ranges1, ranges2)); } TEST_P(StatisticsRecorderTest, RegisterHistogram) { // Create a Histogram that was not registered. - Histogram* histogram = CreateHistogram("TestHistogram", 1, 1000, 10); + Histogram* const histogram1 = CreateHistogram("TestHistogram1", 1, 1000, 10); - StatisticsRecorder::Histograms registered_histograms; - StatisticsRecorder::GetHistograms(®istered_histograms); - EXPECT_EQ(0u, registered_histograms.size()); + EXPECT_THAT(StatisticsRecorder::GetHistograms(), IsEmpty()); // Register the Histogram. - EXPECT_EQ(histogram, - StatisticsRecorder::RegisterOrDeleteDuplicate(histogram)); - StatisticsRecorder::GetHistograms(®istered_histograms); - EXPECT_EQ(1u, registered_histograms.size()); + EXPECT_EQ(histogram1, + StatisticsRecorder::RegisterOrDeleteDuplicate(histogram1)); + EXPECT_THAT(StatisticsRecorder::GetHistograms(), ElementsAre(histogram1)); // Register the same Histogram again. - EXPECT_EQ(histogram, - StatisticsRecorder::RegisterOrDeleteDuplicate(histogram)); - registered_histograms.clear(); - StatisticsRecorder::GetHistograms(®istered_histograms); - EXPECT_EQ(1u, registered_histograms.size()); + EXPECT_EQ(histogram1, + StatisticsRecorder::RegisterOrDeleteDuplicate(histogram1)); + EXPECT_THAT(StatisticsRecorder::GetHistograms(), ElementsAre(histogram1)); + + // Register another Histogram with the same name. + Histogram* const histogram2 = CreateHistogram("TestHistogram1", 1, 1000, 10); + EXPECT_NE(histogram1, histogram2); + EXPECT_EQ(histogram1, + StatisticsRecorder::RegisterOrDeleteDuplicate(histogram2)); + EXPECT_THAT(StatisticsRecorder::GetHistograms(), ElementsAre(histogram1)); + + // Register another Histogram with a different name. + Histogram* const histogram3 = CreateHistogram("TestHistogram0", 1, 1000, 10); + EXPECT_NE(histogram1, histogram3); + EXPECT_EQ(histogram3, + StatisticsRecorder::RegisterOrDeleteDuplicate(histogram3)); + EXPECT_THAT(StatisticsRecorder::GetHistograms(), + ElementsAre(histogram3, histogram1)); } TEST_P(StatisticsRecorderTest, FindHistogram) { @@ -251,63 +264,45 @@ Histogram::FactoryGet("TestHistogram2", 1, 1000, 10, Histogram::kNoFlags); Histogram::FactoryGet("TestHistogram3", 1, 1000, 10, Histogram::kNoFlags); - StatisticsRecorder::Histograms snapshot; - StatisticsRecorder::GetSnapshot("Test", &snapshot); - EXPECT_EQ(3u, snapshot.size()); - - snapshot.clear(); - StatisticsRecorder::GetSnapshot("1", &snapshot); - EXPECT_EQ(1u, snapshot.size()); - - snapshot.clear(); - StatisticsRecorder::GetSnapshot("hello", &snapshot); - EXPECT_EQ(0u, snapshot.size()); + EXPECT_THAT(StatisticsRecorder::GetSnapshot("Test"), SizeIs(3)); + EXPECT_THAT(StatisticsRecorder::GetSnapshot("1"), SizeIs(1)); + EXPECT_THAT(StatisticsRecorder::GetSnapshot("hello"), IsEmpty()); } TEST_P(StatisticsRecorderTest, RegisterHistogramWithFactoryGet) { - StatisticsRecorder::Histograms registered_histograms; - - StatisticsRecorder::GetHistograms(®istered_histograms); - ASSERT_EQ(0u, registered_histograms.size()); + EXPECT_THAT(StatisticsRecorder::GetHistograms(), IsEmpty()); // Create a histogram. - HistogramBase* histogram = Histogram::FactoryGet("TestHistogram", 1, 1000, 10, - HistogramBase::kNoFlags); - registered_histograms.clear(); - StatisticsRecorder::GetHistograms(®istered_histograms); - EXPECT_EQ(1u, registered_histograms.size()); + HistogramBase* const histogram1 = Histogram::FactoryGet( + "TestHistogram", 1, 1000, 10, HistogramBase::kNoFlags); + EXPECT_THAT(StatisticsRecorder::GetHistograms(), ElementsAre(histogram1)); // Get an existing histogram. - HistogramBase* histogram2 = Histogram::FactoryGet( + HistogramBase* const histogram2 = Histogram::FactoryGet( "TestHistogram", 1, 1000, 10, HistogramBase::kNoFlags); - registered_histograms.clear(); - StatisticsRecorder::GetHistograms(®istered_histograms); - EXPECT_EQ(1u, registered_histograms.size()); - EXPECT_EQ(histogram, histogram2); + EXPECT_EQ(histogram1, histogram2); + EXPECT_THAT(StatisticsRecorder::GetHistograms(), ElementsAre(histogram1)); // Create a LinearHistogram. - histogram = LinearHistogram::FactoryGet("TestLinearHistogram", 1, 1000, 10, - HistogramBase::kNoFlags); - registered_histograms.clear(); - StatisticsRecorder::GetHistograms(®istered_histograms); - EXPECT_EQ(2u, registered_histograms.size()); + HistogramBase* const histogram3 = LinearHistogram::FactoryGet( + "TestLinearHistogram", 1, 1000, 10, HistogramBase::kNoFlags); + EXPECT_THAT(StatisticsRecorder::GetHistograms(), + ElementsAre(histogram1, histogram3)); // Create a BooleanHistogram. - histogram = BooleanHistogram::FactoryGet("TestBooleanHistogram", - HistogramBase::kNoFlags); - registered_histograms.clear(); - StatisticsRecorder::GetHistograms(®istered_histograms); - EXPECT_EQ(3u, registered_histograms.size()); + HistogramBase* const histogram4 = BooleanHistogram::FactoryGet( + "TestBooleanHistogram", HistogramBase::kNoFlags); + EXPECT_THAT(StatisticsRecorder::GetHistograms(), + ElementsAre(histogram4, histogram1, histogram3)); // Create a CustomHistogram. std::vector<int> custom_ranges; custom_ranges.push_back(1); custom_ranges.push_back(5); - histogram = CustomHistogram::FactoryGet("TestCustomHistogram", custom_ranges, - HistogramBase::kNoFlags); - registered_histograms.clear(); - StatisticsRecorder::GetHistograms(®istered_histograms); - EXPECT_EQ(4u, registered_histograms.size()); + HistogramBase* const histogram5 = CustomHistogram::FactoryGet( + "TestCustomHistogram", custom_ranges, HistogramBase::kNoFlags); + EXPECT_THAT(StatisticsRecorder::GetHistograms(), + ElementsAre(histogram4, histogram5, histogram1, histogram3)); } TEST_P(StatisticsRecorderTest, RegisterHistogramWithMacros) { @@ -325,35 +320,25 @@ // The histogram we got from macro is the same as from FactoryGet. LOCAL_HISTOGRAM_COUNTS("TestHistogramCounts", 30); - registered_histograms.clear(); - StatisticsRecorder::GetHistograms(®istered_histograms); + registered_histograms = StatisticsRecorder::GetHistograms(); ASSERT_EQ(1u, registered_histograms.size()); EXPECT_EQ(histogram, registered_histograms[0]); LOCAL_HISTOGRAM_TIMES("TestHistogramTimes", TimeDelta::FromDays(1)); LOCAL_HISTOGRAM_ENUMERATION("TestHistogramEnumeration", 20, 200); - registered_histograms.clear(); - StatisticsRecorder::GetHistograms(®istered_histograms); - EXPECT_EQ(3u, registered_histograms.size()); + EXPECT_THAT(StatisticsRecorder::GetHistograms(), SizeIs(3)); } TEST_P(StatisticsRecorderTest, BucketRangesSharing) { - std::vector<const BucketRanges*> ranges; - StatisticsRecorder::GetBucketRanges(&ranges); - EXPECT_EQ(0u, ranges.size()); + EXPECT_THAT(StatisticsRecorder::GetBucketRanges(), IsEmpty()); Histogram::FactoryGet("Histogram", 1, 64, 8, HistogramBase::kNoFlags); Histogram::FactoryGet("Histogram2", 1, 64, 8, HistogramBase::kNoFlags); - - StatisticsRecorder::GetBucketRanges(&ranges); - EXPECT_EQ(1u, ranges.size()); + EXPECT_THAT(StatisticsRecorder::GetBucketRanges(), SizeIs(1)); Histogram::FactoryGet("Histogram3", 1, 64, 16, HistogramBase::kNoFlags); - - ranges.clear(); - StatisticsRecorder::GetBucketRanges(&ranges); - EXPECT_EQ(2u, ranges.size()); + EXPECT_THAT(StatisticsRecorder::GetBucketRanges(), SizeIs(2)); } TEST_P(StatisticsRecorderTest, ToJSON) { @@ -417,9 +402,9 @@ Histogram::FactoryGet("IterationTest1", 1, 64, 16, HistogramBase::kNoFlags); Histogram::FactoryGet("IterationTest2", 1, 64, 16, HistogramBase::kNoFlags); - EXPECT_EQ(2U, StatisticsRecorder::GetKnownHistograms(true).size()); - EXPECT_EQ(use_persistent_histogram_allocator_ ? 0U : 2U, - StatisticsRecorder::GetKnownHistograms(false).size()); + EXPECT_THAT(StatisticsRecorder::GetKnownHistograms(true), SizeIs(2)); + EXPECT_THAT(StatisticsRecorder::GetKnownHistograms(false), + SizeIs(use_persistent_histogram_allocator_ ? 0 : 2)); // Create a new global allocator using the same memory as the old one. Any // old one is kept around so the memory doesn't get released. @@ -436,11 +421,11 @@ InitializeStatisticsRecorder(); StatisticsRecorder::ImportGlobalPersistentHistograms(); - EXPECT_EQ(use_persistent_histogram_allocator_ ? 2U : 0U, - StatisticsRecorder::GetKnownHistograms(true).size()); + EXPECT_THAT(StatisticsRecorder::GetKnownHistograms(true), + SizeIs(use_persistent_histogram_allocator_ ? 2 : 0)); StatisticsRecorder::ImportGlobalPersistentHistograms(); - EXPECT_EQ(0U, StatisticsRecorder::GetKnownHistograms(false).size()); + EXPECT_THAT(StatisticsRecorder::GetKnownHistograms(false), IsEmpty()); } namespace {
diff --git a/base/test/histogram_tester.cc b/base/test/histogram_tester.cc index 8949133..ca8edba 100644 --- a/base/test/histogram_tester.cc +++ b/base/test/histogram_tester.cc
@@ -19,9 +19,7 @@ HistogramTester::HistogramTester() { // Record any histogram data that exists when the object is created so it can // be subtracted later. - StatisticsRecorder::Histograms histograms; - StatisticsRecorder::GetSnapshot(std::string(), &histograms); - for (const auto* histogram : histograms) { + for (const auto* const histogram : StatisticsRecorder::GetHistograms()) { histograms_snapshot_[histogram->histogram_name()] = histogram->SnapshotSamples(); } @@ -123,12 +121,10 @@ << "|prefix| ought to contain at least one period, to avoid matching too" << " many histograms."; - // Find candidate matches by using the logic built into GetSnapshot(). - StatisticsRecorder::Histograms candidate_matches; - StatisticsRecorder::GetSnapshot(prefix, &candidate_matches); - CountsMap result; - for (HistogramBase* histogram : candidate_matches) { + + // Find candidate matches by using the logic built into GetSnapshot(). + for (HistogramBase* histogram : StatisticsRecorder::GetSnapshot(prefix)) { if (!StartsWith(histogram->histogram_name(), prefix, CompareCase::SENSITIVE)) { continue;
diff --git a/build/android/gyp/process_resources.py b/build/android/gyp/process_resources.py index 034a196..5e18dcf 100755 --- a/build/android/gyp/process_resources.py +++ b/build/android/gyp/process_resources.py
@@ -224,6 +224,10 @@ help='Convert png files to webp format.') parser.add_option('--webp-binary', default='', help='Path to the cwebp binary.') + parser.add_option('--no-xml-namespaces', + action='store_true', + help='Whether to strip xml namespaces from processed xml ' + 'resources') options, positional_args = parser.parse_args(args) @@ -662,6 +666,9 @@ options.locale_whitelist, options.support_zh_hk) link_command += ['-c', ','.join(aapt_locales)] + if options.no_xml_namespaces: + link_command.append('--no-xml-namespaces') + return link_command @@ -986,6 +993,7 @@ str(options.debuggable), str(options.png_to_webp), str(options.support_zh_hk), + str(options.no_xml_namespaces), ] if options.apk_path:
diff --git a/build/android/pylib/constants/__init__.py b/build/android/pylib/constants/__init__.py index b600b20..e844a1ad 100644 --- a/build/android/pylib/constants/__init__.py +++ b/build/android/pylib/constants/__init__.py
@@ -102,7 +102,7 @@ ANDROID_SDK_TOOLS = os.path.join(ANDROID_SDK_ROOT, 'build-tools', ANDROID_SDK_BUILD_TOOLS_VERSION) ANDROID_NDK_ROOT = os.path.join(DIR_SOURCE_ROOT, - 'third_party', 'android_tools', 'ndk') + 'third_party', 'android_ndk') PROGUARD_ROOT = os.path.join(DIR_SOURCE_ROOT, 'third_party', 'proguard')
diff --git a/build/android/tests/symbolize/Makefile b/build/android/tests/symbolize/Makefile index 5178a04b..4fc53dad 100644 --- a/build/android/tests/symbolize/Makefile +++ b/build/android/tests/symbolize/Makefile
@@ -2,7 +2,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -TOOLCHAIN=../../../../third_party/android_tools/ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi- +TOOLCHAIN=../../../../third_party/android_ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi- CXX=$(TOOLCHAIN)g++ lib%.so: %.cc
diff --git a/build/config/android/BUILD.gn b/build/config/android/BUILD.gn index cac0a30a..b8299d7 100644 --- a/build/config/android/BUILD.gn +++ b/build/config/android/BUILD.gn
@@ -182,7 +182,7 @@ # 64-bit targets build with NDK 21, 32-bit targets with NDK 16 # (see ./config.gni). When using clang, NDK 21 defines snprintf to # something for a kind of for of _FORTIFY_SOURCE support, see - # third_party/android_tools/ndk/platforms/android-21/arch-x86_64/usr/include/stdio.h + # third_party/android_ndk/platforms/android-21/arch-x86_64/usr/include/stdio.h # Making snprintf a macro breaks base/strings/string_utils.h which # defines base::snprintf(). So define snprintf to itself to force the # NDK to not redefine it. This disables _chk for snprintf, but since
diff --git a/build/config/android/config.gni b/build/config/android/config.gni index f62eedc..68305f7 100644 --- a/build/config/android/config.gni +++ b/build/config/android/config.gni
@@ -53,7 +53,7 @@ } if (!defined(default_android_ndk_root)) { - default_android_ndk_root = "//third_party/android_tools/ndk" + default_android_ndk_root = "//third_party/android_ndk" default_android_ndk_version = "r16" default_android_ndk_major_version = 16 } else {
diff --git a/build/config/android/internal_rules.gni b/build/config/android/internal_rules.gni index 086ecc6..c802dde 100644 --- a/build/config/android/internal_rules.gni +++ b/build/config/android/internal_rules.gni
@@ -1479,6 +1479,10 @@ ] } + if (defined(invoker.no_xml_namespaces) && invoker.no_xml_namespaces) { + args += [ "--no-xml-namespaces" ] + } + if (defined(invoker.version_code)) { args += [ "--version-code",
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni index 346c782..0d36064 100644 --- a/build/config/android/rules.gni +++ b/build/config/android/rules.gni
@@ -2004,6 +2004,7 @@ "exclude_xxxhdpi", "png_to_webp", "xxxhdpi_whitelist", + "no_xml_namespaces", ]) android_manifest = _android_manifest version_code = _version_code
diff --git a/build_overrides/build.gni b/build_overrides/build.gni index 68af2e1..590729d 100644 --- a/build_overrides/build.gni +++ b/build_overrides/build.gni
@@ -8,7 +8,7 @@ # Uncomment these to specify a different NDK location and version in # non-Chromium builds. -# default_android_ndk_root = "//third_party/android_tools/ndk" +# default_android_ndk_root = "//third_party/android_ndk" # default_android_ndk_version = "r10e" # Some non-Chromium builds don't support building java targets.
diff --git a/cc/debug/debug_colors.cc b/cc/debug/debug_colors.cc index aec7ff5..8e84ef61 100644 --- a/cc/debug/debug_colors.cc +++ b/cc/debug/debug_colors.cc
@@ -137,19 +137,6 @@ return Scale(1, device_scale_factor); } -// Borders added to GL composited draw quads. This is useful to debug HW -// overlays. When the border disappears, it means we're using an overlay. -// We draw borders in different colors to be able to distinguish neighboring -// quads (often shadows). -SkColor DebugColors::GLCompositedTextureQuadBorderColor(int index) { - const SkColor kColors[] = {SK_ColorBLUE, SK_ColorGREEN, SK_ColorRED, - SK_ColorYELLOW, SK_ColorCYAN, SK_ColorMAGENTA}; - return kColors[index % arraysize(kColors)]; -} -int DebugColors::GLCompositedTextureQuadBoderWidth() { - return 6; -} - // Returns a color transform that shifts color toward red. base::span<const float> DebugColors::TintCompositedContentColorTransformMatrix() {
diff --git a/cc/debug/debug_colors.h b/cc/debug/debug_colors.h index 2d10b55..d45e0dc 100644 --- a/cc/debug/debug_colors.h +++ b/cc/debug/debug_colors.h
@@ -108,9 +108,6 @@ static SkColor MissingResizeInvalidations(); static SkColor PictureBorderColor(); - static SkColor GLCompositedTextureQuadBorderColor(int index); - static int GLCompositedTextureQuadBoderWidth(); - static base::span<const float> TintCompositedContentColorTransformMatrix(); static SkColor HUDBackgroundColor();
diff --git a/cc/ipc/cc_param_traits.cc b/cc/ipc/cc_param_traits.cc index 0b27652..f8177fb 100644 --- a/cc/ipc/cc_param_traits.cc +++ b/cc/ipc/cc_param_traits.cc
@@ -625,7 +625,7 @@ void ParamTraits<viz::LocalSurfaceId>::Write(base::Pickle* m, const param_type& p) { - WriteParam(m, p.parent_id()); + WriteParam(m, p.parent_sequence_number()); WriteParam(m, p.child_sequence_number()); WriteParam(m, p.nonce()); } @@ -633,8 +633,8 @@ bool ParamTraits<viz::LocalSurfaceId>::Read(const base::Pickle* m, base::PickleIterator* iter, param_type* p) { - uint32_t parent_id; - if (!ReadParam(m, iter, &parent_id)) + uint32_t parent_sequence_number; + if (!ReadParam(m, iter, &parent_sequence_number)) return false; uint32_t child_sequence_number; @@ -645,14 +645,15 @@ if (!ReadParam(m, iter, &nonce)) return false; - *p = viz::LocalSurfaceId(parent_id, child_sequence_number, nonce); + *p = + viz::LocalSurfaceId(parent_sequence_number, child_sequence_number, nonce); return true; } void ParamTraits<viz::LocalSurfaceId>::Log(const param_type& p, std::string* l) { l->append("viz::LocalSurfaceId("); - LogParam(p.parent_id(), l); + LogParam(p.parent_sequence_number(), l); l->append(", "); LogParam(p.child_sequence_number(), l); l->append(", ");
diff --git a/cc/layers/heads_up_display_layer_impl.cc b/cc/layers/heads_up_display_layer_impl.cc index 1c6fe290..c0045b1 100644 --- a/cc/layers/heads_up_display_layer_impl.cc +++ b/cc/layers/heads_up_display_layer_impl.cc
@@ -182,7 +182,7 @@ LayerTreeResourceProvider::ScopedWriteLockGL lock(resource_provider, resources_.back()->id()); - ResourceProvider::ScopedSkSurface scoped_surface( + LayerTreeResourceProvider::ScopedSkSurface scoped_surface( context_provider->GrContext(), lock.GetTexture(), lock.target(), lock.size(), lock.format(), false /* use_distance_field_text */, false /* can_use_lcd_text */, 0 /* msaa_sample_count */);
diff --git a/cc/raster/gpu_raster_buffer_provider.cc b/cc/raster/gpu_raster_buffer_provider.cc index bf95539e..f6fe0f54a 100644 --- a/cc/raster/gpu_raster_buffer_provider.cc +++ b/cc/raster/gpu_raster_buffer_provider.cc
@@ -104,7 +104,7 @@ GLuint texture_id = resource_lock->ConsumeTexture(ri); { - ResourceProvider::ScopedSkSurface scoped_surface( + LayerTreeResourceProvider::ScopedSkSurface scoped_surface( context_provider->GrContext(), texture_id, resource_lock->target(), resource_lock->size(), resource_lock->format(), use_distance_field_text, playback_settings.use_lcd_text, msaa_sample_count); @@ -201,7 +201,8 @@ TRACE_EVENT0("cc", "GpuRasterBufferProvider::OrderingBarrier"); gpu::gles2::GLES2Interface* gl = compositor_context_provider_->ContextGL(); - gpu::SyncToken sync_token = ResourceProvider::GenerateSyncTokenHelper(gl); + gpu::SyncToken sync_token = + LayerTreeResourceProvider::GenerateSyncTokenHelper(gl); for (RasterBufferImpl* buffer : pending_raster_buffers_) buffer->set_sync_token(sync_token); pending_raster_buffers_.clear(); @@ -328,7 +329,8 @@ } // Generate sync token for cross context synchronization. - resource_lock->set_sync_token(ResourceProvider::GenerateSyncTokenHelper(ri)); + resource_lock->set_sync_token( + LayerTreeResourceProvider::GenerateSyncTokenHelper(ri)); } } // namespace cc
diff --git a/cc/raster/one_copy_raster_buffer_provider.cc b/cc/raster/one_copy_raster_buffer_provider.cc index 4181744..9e62268e 100644 --- a/cc/raster/one_copy_raster_buffer_provider.cc +++ b/cc/raster/one_copy_raster_buffer_provider.cc
@@ -117,7 +117,8 @@ TRACE_EVENT0("cc", "OneCopyRasterBufferProvider::OrderingBarrier"); gpu::gles2::GLES2Interface* gl = compositor_context_provider_->ContextGL(); - gpu::SyncToken sync_token = ResourceProvider::GenerateSyncTokenHelper(gl); + gpu::SyncToken sync_token = + LayerTreeResourceProvider::GenerateSyncTokenHelper(gl); for (RasterBufferImpl* buffer : pending_raster_buffers_) buffer->set_sync_token(sync_token); pending_raster_buffers_.clear(); @@ -391,7 +392,8 @@ ri->DeleteTextures(1, &texture_id); // Generate sync token for cross context synchronization. - resource_lock->set_sync_token(ResourceProvider::GenerateSyncTokenHelper(ri)); + resource_lock->set_sync_token( + LayerTreeResourceProvider::GenerateSyncTokenHelper(ri)); } gfx::BufferUsage OneCopyRasterBufferProvider::StagingBufferUsage() const {
diff --git a/cc/raster/staging_buffer_pool.cc b/cc/raster/staging_buffer_pool.cc index 57e631c..301f4ab 100644 --- a/cc/raster/staging_buffer_pool.cc +++ b/cc/raster/staging_buffer_pool.cc
@@ -16,6 +16,7 @@ #include "cc/resources/scoped_resource.h" #include "components/viz/common/gpu/raster_context_provider.h" #include "gpu/command_buffer/client/raster_interface.h" +#include "ui/gfx/gpu_memory_buffer.h" using base::trace_event::MemoryAllocatorDump; using base::trace_event::MemoryAllocatorDumpGuid; @@ -130,7 +131,7 @@ StagingBufferPool::StagingBufferPool( base::SequencedTaskRunner* task_runner, viz::RasterContextProvider* worker_context_provider, - ResourceProvider* resource_provider, + LayerTreeResourceProvider* resource_provider, bool use_partial_raster, int max_staging_buffer_usage_in_bytes) : task_runner_(task_runner),
diff --git a/cc/raster/staging_buffer_pool.h b/cc/raster/staging_buffer_pool.h index 72b55f4..fcf2bb5 100644 --- a/cc/raster/staging_buffer_pool.h +++ b/cc/raster/staging_buffer_pool.h
@@ -18,7 +18,7 @@ #include "base/time/time.h" #include "base/trace_event/memory_dump_provider.h" #include "base/trace_event/trace_event.h" -#include "cc/resources/resource_provider.h" +#include "cc/resources/layer_tree_resource_provider.h" namespace gpu { namespace raster { @@ -60,7 +60,7 @@ StagingBufferPool(base::SequencedTaskRunner* task_runner, viz::RasterContextProvider* worker_context_provider, - ResourceProvider* resource_provider, + LayerTreeResourceProvider* resource_provider, bool use_partial_raster, int max_staging_buffer_usage_in_bytes); void Shutdown(); @@ -96,7 +96,7 @@ scoped_refptr<base::SequencedTaskRunner> task_runner_; viz::RasterContextProvider* const worker_context_provider_; - ResourceProvider* const resource_provider_; + LayerTreeResourceProvider* const resource_provider_; const bool use_partial_raster_; mutable base::Lock lock_;
diff --git a/cc/raster/staging_buffer_pool_unittest.cc b/cc/raster/staging_buffer_pool_unittest.cc index 8417d51..ec775f6c 100644 --- a/cc/raster/staging_buffer_pool_unittest.cc +++ b/cc/raster/staging_buffer_pool_unittest.cc
@@ -16,7 +16,7 @@ TEST(StagingBufferPoolTest, ShutdownImmediatelyAfterCreation) { auto context_provider = TestContextProvider::CreateWorker(); - ResourceProvider* resource_provider = nullptr; + LayerTreeResourceProvider* resource_provider = nullptr; bool use_partial_raster = false; int max_staging_buffer_usage_in_bytes = 1024; auto task_runner = base::ThreadTaskRunnerHandle::Get();
diff --git a/cc/resources/display_resource_provider.cc b/cc/resources/display_resource_provider.cc index daeb7a0..38390ce 100644 --- a/cc/resources/display_resource_provider.cc +++ b/cc/resources/display_resource_provider.cc
@@ -15,6 +15,27 @@ namespace cc { +class ScopedSetActiveTexture { + public: + ScopedSetActiveTexture(GLES2Interface* gl, GLenum unit) + : gl_(gl), unit_(unit) { + DCHECK_EQ(GL_TEXTURE0, DisplayResourceProvider::GetActiveTextureUnit(gl_)); + + if (unit_ != GL_TEXTURE0) + gl_->ActiveTexture(unit_); + } + + ~ScopedSetActiveTexture() { + // Active unit being GL_TEXTURE0 is effectively the ground state. + if (unit_ != GL_TEXTURE0) + gl_->ActiveTexture(GL_TEXTURE0); + } + + private: + GLES2Interface* gl_; + GLenum unit_; +}; + namespace { // The resource id in DisplayResourceProvider starts from 2 to avoid // conflicts with id from LayerTreeResourceProvider. @@ -23,13 +44,10 @@ DisplayResourceProvider::DisplayResourceProvider( viz::ContextProvider* compositor_context_provider, - viz::SharedBitmapManager* shared_bitmap_manager, - const viz::ResourceSettings& resource_settings) - : ResourceProvider(compositor_context_provider, - shared_bitmap_manager, - false, - resource_settings), - next_id_(kDisplayInitialResourceId) {} + viz::SharedBitmapManager* shared_bitmap_manager) + : ResourceProvider(compositor_context_provider), + next_id_(kDisplayInitialResourceId), + shared_bitmap_manager_(shared_bitmap_manager) {} DisplayResourceProvider::~DisplayResourceProvider() { while (!children_.empty()) @@ -72,7 +90,34 @@ UnlockForRead(id); } } + +bool DisplayResourceProvider::IsBackedBySurfaceTexture(viz::ResourceId id) { + viz::internal::Resource* resource = GetResource(id); + return resource->is_backed_by_surface_texture; +} + +bool DisplayResourceProvider::WantsPromotionHintForTesting(viz::ResourceId id) { + return wants_promotion_hints_set_.count(id) > 0; +} + +size_t DisplayResourceProvider::CountPromotionHintRequestsForTesting() { + return wants_promotion_hints_set_.size(); +} + #endif +bool DisplayResourceProvider::IsOverlayCandidate(viz::ResourceId id) { + viz::internal::Resource* resource = GetResource(id); + return resource->is_overlay_candidate; +} + +viz::ResourceType DisplayResourceProvider::GetResourceType(viz::ResourceId id) { + return GetResource(id)->type; +} + +gfx::BufferFormat DisplayResourceProvider::GetBufferFormat(viz::ResourceId id) { + viz::internal::Resource* resource = GetResource(id); + return resource->buffer_format; +} void DisplayResourceProvider::WaitSyncToken(viz::ResourceId id) { viz::internal::Resource* resource = GetResource(id); @@ -382,6 +427,56 @@ return it->second.child_to_parent_map; } +GLenum DisplayResourceProvider::BindForSampling(viz::ResourceId resource_id, + GLenum unit, + GLenum filter) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + GLES2Interface* gl = ContextGL(); + ResourceMap::iterator it = resources_.find(resource_id); + DCHECK(it != resources_.end()); + viz::internal::Resource* resource = &it->second; + DCHECK(resource->lock_for_read_count); + DCHECK(!resource->locked_for_write); + + ScopedSetActiveTexture scoped_active_tex(gl, unit); + GLenum target = resource->target; + gl->BindTexture(target, resource->gl_id); + GLenum min_filter = filter; + if (filter == GL_LINEAR) { + switch (resource->mipmap_state) { + case viz::internal::Resource::INVALID: + break; + case viz::internal::Resource::GENERATE: + DCHECK(compositor_context_provider_); + DCHECK( + compositor_context_provider_->ContextCapabilities().texture_npot); + gl->GenerateMipmap(target); + resource->mipmap_state = viz::internal::Resource::VALID; + // fall-through + case viz::internal::Resource::VALID: + min_filter = GL_LINEAR_MIPMAP_LINEAR; + break; + } + } + if (min_filter != resource->min_filter) { + gl->TexParameteri(target, GL_TEXTURE_MIN_FILTER, min_filter); + resource->min_filter = min_filter; + } + if (filter != resource->filter) { + gl->TexParameteri(target, GL_TEXTURE_MAG_FILTER, filter); + resource->filter = filter; + } + + return target; +} + +GLint DisplayResourceProvider::GetActiveTextureUnit( + gpu::gles2::GLES2Interface* gl) { + GLint active_unit = 0; + gl->GetIntegerv(GL_ACTIVE_TEXTURE, &active_unit); + return active_unit; +} + DisplayResourceProvider::ScopedReadLockGL::ScopedReadLockGL( DisplayResourceProvider* resource_provider, viz::ResourceId resource_id)
diff --git a/cc/resources/display_resource_provider.h b/cc/resources/display_resource_provider.h index 6702a7d..4beb0e73 100644 --- a/cc/resources/display_resource_provider.h +++ b/cc/resources/display_resource_provider.h
@@ -19,10 +19,8 @@ // created on. class CC_EXPORT DisplayResourceProvider : public ResourceProvider { public: - DisplayResourceProvider( - viz::ContextProvider* compositor_context_provider, - viz::SharedBitmapManager* shared_bitmap_manager, - const viz::ResourceSettings& resource_settings); + DisplayResourceProvider(viz::ContextProvider* compositor_context_provider, + viz::SharedBitmapManager* shared_bitmap_manager); ~DisplayResourceProvider() override; #if defined(OS_ANDROID) @@ -32,10 +30,37 @@ // that they're not promotable right now. void SendPromotionHints( const OverlayCandidateList::PromotionHintInfoMap& promotion_hints); + + // Indicates if this resource is backed by an Android SurfaceTexture, and thus + // can't really be promoted to an overlay. + bool IsBackedBySurfaceTexture(viz::ResourceId id); + + // Indicates if this resource wants to receive promotion hints. + bool WantsPromotionHintForTesting(viz::ResourceId id); + + // Return the number of resources that request promotion hints. + size_t CountPromotionHintRequestsForTesting(); #endif + viz::ResourceType GetResourceType(viz::ResourceId id); + + // Return the format of the underlying buffer that can be used for scanout. + gfx::BufferFormat GetBufferFormat(viz::ResourceId id); + + // Indicates if this resource may be used for a hardware overlay plane. + bool IsOverlayCandidate(viz::ResourceId id); + void WaitSyncToken(viz::ResourceId id); + // 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); + + static GLint GetActiveTextureUnit(gpu::gles2::GLES2Interface* gl); + // The following lock classes are part of the DisplayResourceProvider API and // are needed to read the resource contents. The user must ensure that they // only use GL locks on GL resources, etc, and this is enforced by assertions. @@ -209,6 +234,7 @@ ChildMap children_; base::flat_map<viz::ResourceId, sk_sp<SkImage>> resource_sk_image_; viz::ResourceId next_id_; + viz::SharedBitmapManager* shared_bitmap_manager_; DISALLOW_COPY_AND_ASSIGN(DisplayResourceProvider); };
diff --git a/cc/resources/layer_tree_resource_provider.cc b/cc/resources/layer_tree_resource_provider.cc index dfb5194..ffb4ebf 100644 --- a/cc/resources/layer_tree_resource_provider.cc +++ b/cc/resources/layer_tree_resource_provider.cc
@@ -9,6 +9,7 @@ #include "build/build_config.h" #include "cc/resources/resource_util.h" #include "components/viz/common/gpu/context_provider.h" +#include "components/viz/common/resources/platform_color.h" #include "components/viz/common/resources/resource_format_utils.h" #include "components/viz/common/resources/shared_bitmap_manager.h" #include "gpu/GLES2/gl2extchromium.h" @@ -16,6 +17,8 @@ #include "gpu/command_buffer/client/gles2_interface.h" #include "gpu/command_buffer/client/gpu_memory_buffer_manager.h" #include "gpu/command_buffer/client/raster_interface.h" +#include "gpu/command_buffer/common/capabilities.h" +#include "gpu/command_buffer/common/gpu_memory_buffer_support.h" #include "third_party/skia/include/core/SkCanvas.h" using gpu::gles2::GLES2Interface; @@ -60,6 +63,50 @@ DISALLOW_COPY_AND_ASSIGN(TextureIdAllocator); }; +LayerTreeResourceProvider::Settings::Settings( + viz::ContextProvider* compositor_context_provider, + bool delegated_sync_points_required, + const viz::ResourceSettings& resource_settings) + : yuv_highbit_resource_format(resource_settings.high_bit_for_testing + ? viz::R16_EXT + : viz::LUMINANCE_8), + use_gpu_memory_buffer_resources( + resource_settings.use_gpu_memory_buffer_resources), + delegated_sync_points_required(delegated_sync_points_required) { + if (!compositor_context_provider) { + // Pick an arbitrary limit here similar to what hardware might. + max_texture_size = 16 * 1024; + best_texture_format = viz::RGBA_8888; + return; + } + + const auto& caps = compositor_context_provider->ContextCapabilities(); + use_texture_storage = caps.texture_storage; + use_texture_format_bgra = caps.texture_format_bgra8888; + use_texture_usage_hint = caps.texture_usage; + use_texture_npot = caps.texture_npot; + use_sync_query = caps.sync_query; + use_texture_storage_image = caps.texture_storage_image; + + if (caps.disable_one_component_textures) { + yuv_resource_format = yuv_highbit_resource_format = viz::RGBA_8888; + } else { + yuv_resource_format = caps.texture_rg ? viz::RED_8 : viz::LUMINANCE_8; + if (resource_settings.use_r16_texture && caps.texture_norm16) + yuv_highbit_resource_format = viz::R16_EXT; + else if (caps.texture_half_float_linear) + yuv_highbit_resource_format = viz::LUMINANCE_F16; + } + + GLES2Interface* gl = compositor_context_provider->ContextGL(); + gl->GetIntegerv(GL_MAX_TEXTURE_SIZE, &max_texture_size); + + best_texture_format = + viz::PlatformColor::BestSupportedTextureFormat(use_texture_format_bgra); + best_render_buffer_format = viz::PlatformColor::BestSupportedTextureFormat( + caps.render_buffer_format_bgra8888); +} + namespace { // The resource id in LayerTreeResourceProvider starts from 1 to avoid // conflicts with id from DisplayResourceProvider. @@ -95,12 +142,14 @@ gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, bool delegated_sync_points_required, const viz::ResourceSettings& resource_settings) - : ResourceProvider(compositor_context_provider, - shared_bitmap_manager, - delegated_sync_points_required, - resource_settings), + : ResourceProvider(compositor_context_provider), + settings_(compositor_context_provider, + delegated_sync_points_required, + resource_settings), + shared_bitmap_manager_(shared_bitmap_manager), gpu_memory_buffer_manager_(gpu_memory_buffer_manager), next_id_(kLayerTreeInitialResourceId) { + DCHECK(resource_settings.texture_id_allocation_chunk_size); GLES2Interface* gl = ContextGL(); texture_id_allocator_ = std::make_unique<TextureIdAllocator>( gl, resource_settings.texture_id_allocation_chunk_size); @@ -120,6 +169,26 @@ gl->Finish(); } +gpu::SyncToken LayerTreeResourceProvider::GenerateSyncTokenHelper( + gpu::gles2::GLES2Interface* gl) { + DCHECK(gl); + gpu::SyncToken sync_token; + gl->GenUnverifiedSyncTokenCHROMIUM(sync_token.GetData()); + DCHECK(sync_token.HasData() || + gl->GetGraphicsResetStatusKHR() != GL_NO_ERROR); + return sync_token; +} + +gpu::SyncToken LayerTreeResourceProvider::GenerateSyncTokenHelper( + gpu::raster::RasterInterface* ri) { + DCHECK(ri); + gpu::SyncToken sync_token; + ri->GenUnverifiedSyncTokenCHROMIUM(sync_token.GetData()); + DCHECK(sync_token.HasData() || + ri->GetGraphicsResetStatusKHR() != GL_NO_ERROR); + return sync_token; +} + gpu::SyncToken LayerTreeResourceProvider::GetSyncTokenForResources( const ResourceIdArray& resource_ids) { gpu::SyncToken latest_sync_token; @@ -628,6 +697,114 @@ resource->locked_for_write = false; } +void LayerTreeResourceProvider::FlushPendingDeletions() const { + if (auto* gl = ContextGL()) + gl->ShallowFlushCHROMIUM(); +} + +GLenum LayerTreeResourceProvider::GetImageTextureTarget( + const gpu::Capabilities& caps, + gfx::BufferUsage usage, + viz::ResourceFormat format) const { + return gpu::GetBufferTextureTarget(usage, BufferFormat(format), caps); +} + +bool LayerTreeResourceProvider::IsTextureFormatSupported( + viz::ResourceFormat format) const { + gpu::Capabilities caps; + if (compositor_context_provider_) + caps = compositor_context_provider_->ContextCapabilities(); + + switch (format) { + case viz::ALPHA_8: + case viz::RGBA_4444: + case viz::RGBA_8888: + case viz::RGB_565: + case viz::LUMINANCE_8: + return true; + case viz::BGRA_8888: + return caps.texture_format_bgra8888; + case viz::ETC1: + return caps.texture_format_etc1; + case viz::RED_8: + return caps.texture_rg; + case viz::R16_EXT: + return caps.texture_norm16; + case viz::LUMINANCE_F16: + case viz::RGBA_F16: + return caps.texture_half_float_linear; + } + + NOTREACHED(); + return false; +} + +bool LayerTreeResourceProvider::IsRenderBufferFormatSupported( + viz::ResourceFormat format) const { + gpu::Capabilities caps; + if (compositor_context_provider_) + caps = compositor_context_provider_->ContextCapabilities(); + + switch (format) { + case viz::RGBA_4444: + case viz::RGBA_8888: + case viz::RGB_565: + return true; + case viz::BGRA_8888: + return caps.render_buffer_format_bgra8888; + case viz::RGBA_F16: + // TODO(ccameron): This will always return false on pixel tests, which + // makes it un-test-able until we upgrade Mesa. + // https://crbug.com/687720 + return caps.texture_half_float_linear && + caps.color_buffer_half_float_rgba; + case viz::LUMINANCE_8: + case viz::ALPHA_8: + case viz::RED_8: + case viz::ETC1: + case viz::LUMINANCE_F16: + case viz::R16_EXT: + // We don't currently render into these formats. If we need to render into + // these eventually, we should expand this logic. + return false; + } + + NOTREACHED(); + return false; +} + +bool LayerTreeResourceProvider::IsGpuMemoryBufferFormatSupported( + viz::ResourceFormat format, + gfx::BufferUsage usage) const { + switch (format) { + case viz::BGRA_8888: + case viz::RED_8: + case viz::R16_EXT: + case viz::RGBA_4444: + case viz::RGBA_8888: + case viz::ETC1: + case viz::RGBA_F16: + return true; + // These formats have no BufferFormat equivalent. + case viz::ALPHA_8: + case viz::LUMINANCE_8: + case viz::RGB_565: + case viz::LUMINANCE_F16: + return false; + } + NOTREACHED(); + return false; +} + +viz::ResourceFormat LayerTreeResourceProvider::YuvResourceFormat( + int bits) const { + if (bits > 8) { + return settings_.yuv_highbit_resource_format; + } else { + return settings_.yuv_resource_format; + } +} + LayerTreeResourceProvider::ScopedWriteLockGpu::ScopedWriteLockGpu( LayerTreeResourceProvider* resource_provider, viz::ResourceId resource_id) @@ -700,7 +877,7 @@ return; allocated_ = true; - const ResourceProvider::Settings& settings = resource_provider_->settings_; + const Settings& settings = resource_provider_->settings_; gl->BindTexture(target_, texture_id); @@ -829,6 +1006,39 @@ resource_provider_->UnlockForWrite(resource); } +LayerTreeResourceProvider::ScopedSkSurface::ScopedSkSurface( + GrContext* gr_context, + GLuint texture_id, + GLenum texture_target, + const gfx::Size& size, + viz::ResourceFormat format, + bool use_distance_field_text, + bool can_use_lcd_text, + int msaa_sample_count) { + GrGLTextureInfo texture_info; + texture_info.fID = texture_id; + texture_info.fTarget = texture_target; + GrBackendTexture backend_texture(size.width(), size.height(), + ToGrPixelConfig(format), 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); + } + surface_ = SkSurface::MakeFromBackendTextureAsRenderTarget( + gr_context, backend_texture, kTopLeft_GrSurfaceOrigin, msaa_sample_count, + nullptr, &surface_props); +} + +LayerTreeResourceProvider::ScopedSkSurface::~ScopedSkSurface() { + if (surface_) + surface_->prepareForExternalIO(); +} + void LayerTreeResourceProvider::ValidateResource(viz::ResourceId id) const { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); DCHECK(id);
diff --git a/cc/resources/layer_tree_resource_provider.h b/cc/resources/layer_tree_resource_provider.h index bba192d..57047fd2 100644 --- a/cc/resources/layer_tree_resource_provider.h +++ b/cc/resources/layer_tree_resource_provider.h
@@ -6,12 +6,18 @@ #define CC_RESOURCES_LAYER_TREE_RESOURCE_PROVIDER_H_ #include "cc/resources/resource_provider.h" +#include "components/viz/common/display/renderer_settings.h" +#include "components/viz/common/resources/resource_settings.h" +#include "third_party/skia/include/core/SkSurface.h" +#include "third_party/skia/include/gpu/GrBackendSurface.h" +#include "third_party/skia/include/gpu/GrContext.h" namespace viz { class SharedBitmapManager; } // namespace viz namespace gpu { +struct Capabilities; class GpuMemoryBufferManager; namespace raster { class RasterInterface; @@ -33,6 +39,10 @@ const viz::ResourceSettings& resource_settings); ~LayerTreeResourceProvider() override; + static gpu::SyncToken GenerateSyncTokenHelper(gpu::gles2::GLES2Interface* gl); + static gpu::SyncToken GenerateSyncTokenHelper( + gpu::raster::RasterInterface* ri); + // Gets the most recent sync token from the indicated resources. gpu::SyncToken GetSyncTokenForResources(const ResourceIdArray& resource_ids); @@ -91,6 +101,40 @@ // Indicates if we can currently lock this resource for write. bool CanLockForWrite(viz::ResourceId id); + // In the case of GPU resources, we may need to flush the GL context to ensure + // that texture deletions are seen in a timely fashion. This function should + // be called after texture deletions that may happen during an idle state. + void FlushPendingDeletions() const; + + GLenum GetImageTextureTarget(const gpu::Capabilities& caps, + gfx::BufferUsage usage, + viz::ResourceFormat format) const; + + bool IsTextureFormatSupported(viz::ResourceFormat format) const; + + // Returns true if the provided |format| can be used as a render buffer. + // Note that render buffer support implies texture support. + bool IsRenderBufferFormatSupported(viz::ResourceFormat format) const; + + bool IsGpuMemoryBufferFormatSupported(viz::ResourceFormat format, + gfx::BufferUsage usage) const; + + bool use_sync_query() const { return settings_.use_sync_query; } + + int max_texture_size() const { return settings_.max_texture_size; } + + // Use this format for making resources that will be rastered and uploaded to + // from software bitmaps. + viz::ResourceFormat best_texture_format() const { + return settings_.best_texture_format; + } + // Use this format for making resources that will be rastered to on the Gpu. + viz::ResourceFormat best_render_buffer_format() const { + return settings_.best_render_buffer_format; + } + + viz::ResourceFormat YuvResourceFormat(int bits) const; + gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager() { return gpu_memory_buffer_manager_; } @@ -228,12 +272,54 @@ DISALLOW_COPY_AND_ASSIGN(ScopedWriteLockSoftware); }; + class CC_EXPORT ScopedSkSurface { + public: + ScopedSkSurface(GrContext* gr_context, + GLuint texture_id, + GLenum texture_target, + const gfx::Size& size, + viz::ResourceFormat format, + bool use_distance_field_text, + bool can_use_lcd_text, + int msaa_sample_count); + ~ScopedSkSurface(); + + SkSurface* surface() const { return surface_.get(); } + + private: + sk_sp<SkSurface> surface_; + + DISALLOW_COPY_AND_ASSIGN(ScopedSkSurface); + }; + protected: viz::internal::Resource* LockForWrite(viz::ResourceId id); void UnlockForWrite(viz::internal::Resource* resource); void CreateMailbox(viz::internal::Resource* resource); private: + // Holds const settings for the ResourceProvider. Never changed after init. + struct Settings { + Settings(viz::ContextProvider* compositor_context_provider, + bool delegated_sync_points_needed, + const viz::ResourceSettings& resource_settings); + + int max_texture_size = 0; + bool use_texture_storage = false; + bool use_texture_format_bgra = false; + bool use_texture_usage_hint = false; + bool use_texture_npot = false; + bool use_sync_query = false; + bool use_texture_storage_image = false; + viz::ResourceType default_resource_type = viz::ResourceType::kTexture; + viz::ResourceFormat yuv_resource_format = viz::LUMINANCE_8; + viz::ResourceFormat yuv_highbit_resource_format = viz::LUMINANCE_8; + viz::ResourceFormat best_texture_format = viz::RGBA_8888; + viz::ResourceFormat best_render_buffer_format = viz::RGBA_8888; + bool use_gpu_memory_buffer_resources = false; + bool delegated_sync_points_required = false; + } const settings_; + // base::trace_event::MemoryDumpProvider implementation. bool OnMemoryDump(const base::trace_event::MemoryDumpArgs& args, base::trace_event::ProcessMemoryDump* pmd) override; @@ -247,6 +333,7 @@ viz::ResourceId id, viz::TransferableResource* resource); + viz::SharedBitmapManager* shared_bitmap_manager_; struct ImportedResource; base::flat_map<viz::ResourceId, ImportedResource> imported_resources_; std::unique_ptr<TextureIdAllocator> texture_id_allocator_;
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc index 2df25f4..54c143f 100644 --- a/cc/resources/resource_provider.cc +++ b/cc/resources/resource_provider.cc
@@ -25,22 +25,14 @@ #include "build/build_config.h" #include "cc/resources/resource_util.h" #include "components/viz/common/gpu/context_provider.h" -#include "components/viz/common/resources/platform_color.h" #include "components/viz/common/resources/returned_resource.h" -#include "components/viz/common/resources/shared_bitmap_manager.h" #include "components/viz/common/resources/transferable_resource.h" #include "gpu/command_buffer/client/context_support.h" #include "gpu/command_buffer/client/gles2_interface.h" -#include "gpu/command_buffer/client/gpu_memory_buffer_manager.h" -#include "gpu/command_buffer/client/raster_interface.h" #include "gpu/command_buffer/common/gpu_memory_buffer_support.h" #include "skia/ext/texture_handle.h" #include "third_party/khronos/GLES2/gl2.h" #include "third_party/khronos/GLES2/gl2ext.h" -#include "third_party/skia/include/core/SkSurface.h" -#include "third_party/skia/include/gpu/GrBackendSurface.h" -#include "third_party/skia/include/gpu/GrContext.h" -#include "third_party/skia/include/gpu/gl/GrGLTypes.h" #include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/vector2d.h" #include "ui/gfx/icc_profile.h" @@ -52,91 +44,18 @@ namespace { -class ScopedSetActiveTexture { - public: - ScopedSetActiveTexture(GLES2Interface* gl, GLenum unit) - : gl_(gl), unit_(unit) { - DCHECK_EQ(GL_TEXTURE0, ResourceProvider::GetActiveTextureUnit(gl_)); - - if (unit_ != GL_TEXTURE0) - gl_->ActiveTexture(unit_); - } - - ~ScopedSetActiveTexture() { - // Active unit being GL_TEXTURE0 is effectively the ground state. - if (unit_ != GL_TEXTURE0) - gl_->ActiveTexture(GL_TEXTURE0); - } - - private: - GLES2Interface* gl_; - GLenum unit_; -}; - // Generates process-unique IDs to use for tracing a ResourceProvider's // resources. base::AtomicSequenceNumber g_next_resource_provider_tracing_id; } // namespace -ResourceProvider::Settings::Settings( - viz::ContextProvider* compositor_context_provider, - bool delegated_sync_points_required, - const viz::ResourceSettings& resource_settings) - : yuv_highbit_resource_format(resource_settings.high_bit_for_testing - ? viz::R16_EXT - : viz::LUMINANCE_8), - use_gpu_memory_buffer_resources( - resource_settings.use_gpu_memory_buffer_resources), - delegated_sync_points_required(delegated_sync_points_required) { - if (!compositor_context_provider) { - // Pick an arbitrary limit here similar to what hardware might. - max_texture_size = 16 * 1024; - best_texture_format = viz::RGBA_8888; - return; - } - - const auto& caps = compositor_context_provider->ContextCapabilities(); - use_texture_storage = caps.texture_storage; - use_texture_format_bgra = caps.texture_format_bgra8888; - use_texture_usage_hint = caps.texture_usage; - use_texture_npot = caps.texture_npot; - use_sync_query = caps.sync_query; - use_texture_storage_image = caps.texture_storage_image; - - if (caps.disable_one_component_textures) { - yuv_resource_format = yuv_highbit_resource_format = viz::RGBA_8888; - } else { - yuv_resource_format = caps.texture_rg ? viz::RED_8 : viz::LUMINANCE_8; - if (resource_settings.use_r16_texture && caps.texture_norm16) - yuv_highbit_resource_format = viz::R16_EXT; - else if (caps.texture_half_float_linear) - yuv_highbit_resource_format = viz::LUMINANCE_F16; - } - - GLES2Interface* gl = compositor_context_provider->ContextGL(); - gl->GetIntegerv(GL_MAX_TEXTURE_SIZE, &max_texture_size); - - best_texture_format = - viz::PlatformColor::BestSupportedTextureFormat(use_texture_format_bgra); - best_render_buffer_format = viz::PlatformColor::BestSupportedTextureFormat( - caps.render_buffer_format_bgra8888); -} - ResourceProvider::ResourceProvider( - viz::ContextProvider* compositor_context_provider, - viz::SharedBitmapManager* shared_bitmap_manager, - bool delegated_sync_points_required, - const viz::ResourceSettings& resource_settings) - : settings_(compositor_context_provider, - delegated_sync_points_required, - resource_settings), - compositor_context_provider_(compositor_context_provider), - shared_bitmap_manager_(shared_bitmap_manager), + viz::ContextProvider* compositor_context_provider) + : compositor_context_provider_(compositor_context_provider), next_child_(1), lost_context_provider_(false), tracing_id_(g_next_resource_provider_tracing_id.GetNext()) { - DCHECK(resource_settings.texture_id_allocation_chunk_size); DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); // In certain cases, ThreadTaskRunnerHandle isn't set (Android Webview). @@ -168,93 +87,6 @@ #endif // DCHECK_IS_ON() } -bool ResourceProvider::IsTextureFormatSupported( - viz::ResourceFormat format) const { - gpu::Capabilities caps; - if (compositor_context_provider_) - caps = compositor_context_provider_->ContextCapabilities(); - - switch (format) { - case viz::ALPHA_8: - case viz::RGBA_4444: - case viz::RGBA_8888: - case viz::RGB_565: - case viz::LUMINANCE_8: - return true; - case viz::BGRA_8888: - return caps.texture_format_bgra8888; - case viz::ETC1: - return caps.texture_format_etc1; - case viz::RED_8: - return caps.texture_rg; - case viz::R16_EXT: - return caps.texture_norm16; - case viz::LUMINANCE_F16: - case viz::RGBA_F16: - return caps.texture_half_float_linear; - } - - NOTREACHED(); - return false; -} - -bool ResourceProvider::IsRenderBufferFormatSupported( - viz::ResourceFormat format) const { - gpu::Capabilities caps; - if (compositor_context_provider_) - caps = compositor_context_provider_->ContextCapabilities(); - - switch (format) { - case viz::RGBA_4444: - case viz::RGBA_8888: - case viz::RGB_565: - return true; - case viz::BGRA_8888: - return caps.render_buffer_format_bgra8888; - case viz::RGBA_F16: - // TODO(ccameron): This will always return false on pixel tests, which - // makes it un-test-able until we upgrade Mesa. - // https://crbug.com/687720 - return caps.texture_half_float_linear && - caps.color_buffer_half_float_rgba; - case viz::LUMINANCE_8: - case viz::ALPHA_8: - case viz::RED_8: - case viz::ETC1: - case viz::LUMINANCE_F16: - case viz::R16_EXT: - // We don't currently render into these formats. If we need to render into - // these eventually, we should expand this logic. - return false; - } - - NOTREACHED(); - return false; -} - -bool ResourceProvider::IsGpuMemoryBufferFormatSupported( - viz::ResourceFormat format, - gfx::BufferUsage usage) const { - switch (format) { - case viz::BGRA_8888: - case viz::RED_8: - case viz::R16_EXT: - case viz::RGBA_4444: - case viz::RGBA_8888: - case viz::ETC1: - case viz::RGBA_F16: - return true; - // These formats have no BufferFormat equivalent. - case viz::ALPHA_8: - case viz::LUMINANCE_8: - case viz::RGB_565: - case viz::LUMINANCE_F16: - return false; - } - NOTREACHED(); - return false; -} - bool ResourceProvider::InUseByConsumer(viz::ResourceId id) { viz::internal::Resource* resource = GetResource(id); return resource->lock_for_read_count > 0 || resource->exported_count > 0 || @@ -272,14 +104,6 @@ resource->lost = true; } -viz::ResourceFormat ResourceProvider::YuvResourceFormat(int bits) const { - if (bits > 8) { - return settings_.yuv_highbit_resource_format; - } else { - return settings_.yuv_resource_format; - } -} - void ResourceProvider::DeleteResource(viz::ResourceId id) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); ResourceMap::iterator it = resources_.find(id); @@ -353,15 +177,6 @@ resources_.erase(it); } -void ResourceProvider::FlushPendingDeletions() const { - if (auto* gl = ContextGL()) - gl->ShallowFlushCHROMIUM(); -} - -viz::ResourceType ResourceProvider::GetResourceType(viz::ResourceId id) { - return GetResource(id)->type; -} - GLenum ResourceProvider::GetResourceTextureTarget(viz::ResourceId id) { return GetResource(id)->target; } @@ -383,69 +198,12 @@ return &it->second; } -bool ResourceProvider::IsOverlayCandidate(viz::ResourceId id) { - viz::internal::Resource* resource = GetResource(id); - return resource->is_overlay_candidate; -} - -gfx::BufferFormat ResourceProvider::GetBufferFormat(viz::ResourceId id) { - viz::internal::Resource* resource = GetResource(id); - return resource->buffer_format; -} - -#if defined(OS_ANDROID) -bool ResourceProvider::IsBackedBySurfaceTexture(viz::ResourceId id) { - viz::internal::Resource* resource = GetResource(id); - return resource->is_backed_by_surface_texture; -} - -bool ResourceProvider::WantsPromotionHintForTesting(viz::ResourceId id) { - return wants_promotion_hints_set_.count(id) > 0; -} - -size_t ResourceProvider::CountPromotionHintRequestsForTesting() { - return wants_promotion_hints_set_.size(); -} -#endif - void ResourceProvider::EnableReadLockFencesForTesting(viz::ResourceId id) { viz::internal::Resource* resource = GetResource(id); DCHECK(resource); resource->read_lock_fences_enabled = true; } -ResourceProvider::ScopedSkSurface::ScopedSkSurface(GrContext* gr_context, - GLuint texture_id, - GLenum texture_target, - const gfx::Size& size, - viz::ResourceFormat format, - bool use_distance_field_text, - bool can_use_lcd_text, - int msaa_sample_count) { - GrGLTextureInfo texture_info; - texture_info.fID = texture_id; - texture_info.fTarget = texture_target; - GrBackendTexture backend_texture(size.width(), size.height(), - ToGrPixelConfig(format), 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); - } - surface_ = SkSurface::MakeFromBackendTextureAsRenderTarget( - gr_context, backend_texture, kTopLeft_GrSurfaceOrigin, msaa_sample_count, - nullptr, &surface_props); -} - -ResourceProvider::ScopedSkSurface::~ScopedSkSurface() { - if (surface_) - surface_->prepareForExternalIO(); -} - void ResourceProvider::PopulateSkBitmapWithResource( SkBitmap* sk_bitmap, const viz::internal::Resource* resource) { @@ -482,47 +240,6 @@ gl_->Finish(); } -GLenum ResourceProvider::BindForSampling(viz::ResourceId resource_id, - GLenum unit, - GLenum filter) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - GLES2Interface* gl = ContextGL(); - ResourceMap::iterator it = resources_.find(resource_id); - DCHECK(it != resources_.end()); - viz::internal::Resource* resource = &it->second; - DCHECK(resource->lock_for_read_count); - DCHECK(!resource->locked_for_write); - - ScopedSetActiveTexture scoped_active_tex(gl, unit); - GLenum target = resource->target; - gl->BindTexture(target, resource->gl_id); - GLenum min_filter = filter; - if (filter == GL_LINEAR) { - switch (resource->mipmap_state) { - case viz::internal::Resource::INVALID: - break; - case viz::internal::Resource::GENERATE: - DCHECK(settings_.use_texture_npot); - gl->GenerateMipmap(target); - resource->mipmap_state = viz::internal::Resource::VALID; - // fall-through - case viz::internal::Resource::VALID: - min_filter = GL_LINEAR_MIPMAP_LINEAR; - break; - } - } - if (min_filter != resource->min_filter) { - gl->TexParameteri(target, GL_TEXTURE_MIN_FILTER, min_filter); - resource->min_filter = min_filter; - } - if (filter != resource->filter) { - gl->TexParameteri(target, GL_TEXTURE_MAG_FILTER, filter); - resource->filter = filter; - } - - return target; -} - void ResourceProvider::WaitSyncTokenInternal( viz::internal::Resource* resource) { DCHECK(resource); @@ -538,39 +255,6 @@ resource->SetSynchronized(); } -GLint ResourceProvider::GetActiveTextureUnit(gpu::gles2::GLES2Interface* gl) { - GLint active_unit = 0; - gl->GetIntegerv(GL_ACTIVE_TEXTURE, &active_unit); - return active_unit; -} - -gpu::SyncToken ResourceProvider::GenerateSyncTokenHelper( - gpu::gles2::GLES2Interface* gl) { - DCHECK(gl); - gpu::SyncToken sync_token; - gl->GenUnverifiedSyncTokenCHROMIUM(sync_token.GetData()); - DCHECK(sync_token.HasData() || - gl->GetGraphicsResetStatusKHR() != GL_NO_ERROR); - return sync_token; -} - -gpu::SyncToken ResourceProvider::GenerateSyncTokenHelper( - gpu::raster::RasterInterface* ri) { - DCHECK(ri); - gpu::SyncToken sync_token; - ri->GenUnverifiedSyncTokenCHROMIUM(sync_token.GetData()); - DCHECK(sync_token.HasData() || - ri->GetGraphicsResetStatusKHR() != GL_NO_ERROR); - return sync_token; -} - -GLenum ResourceProvider::GetImageTextureTarget( - const gpu::Capabilities& caps, - gfx::BufferUsage usage, - viz::ResourceFormat format) const { - return gpu::GetBufferTextureTarget(usage, BufferFormat(format), caps); -} - GLES2Interface* ResourceProvider::ContextGL() const { viz::ContextProvider* context_provider = compositor_context_provider_; return context_provider ? context_provider->ContextGL() : nullptr;
diff --git a/cc/resources/resource_provider.h b/cc/resources/resource_provider.h index 0374a2b0..3170314 100644 --- a/cc/resources/resource_provider.h +++ b/cc/resources/resource_provider.h
@@ -25,42 +25,26 @@ #include "base/trace_event/memory_dump_provider.h" #include "cc/cc_export.h" #include "cc/resources/return_callback.h" -#include "components/viz/common/display/renderer_settings.h" -#include "components/viz/common/quads/shared_bitmap.h" #include "components/viz/common/resources/release_callback.h" #include "components/viz/common/resources/resource.h" #include "components/viz/common/resources/resource_fence.h" -#include "components/viz/common/resources/resource_format.h" #include "components/viz/common/resources/resource_id.h" -#include "components/viz/common/resources/resource_settings.h" -#include "components/viz/common/resources/resource_texture_hint.h" -#include "components/viz/common/resources/resource_type.h" #include "components/viz/common/resources/single_release_callback.h" #include "components/viz/common/resources/transferable_resource.h" #include "gpu/command_buffer/common/mailbox.h" -#include "gpu/command_buffer/common/sync_token.h" #include "third_party/khronos/GLES2/gl2.h" #include "third_party/khronos/GLES2/gl2ext.h" #include "third_party/skia/include/core/SkBitmap.h" -#include "third_party/skia/include/core/SkSurface.h" -#include "ui/gfx/buffer_types.h" -#include "ui/gfx/color_space.h" #include "ui/gfx/geometry/size.h" -#include "ui/gfx/gpu_memory_buffer.h" namespace gpu { -struct Capabilities; namespace gles2 { class GLES2Interface; } -namespace raster { -class RasterInterface; -} } namespace viz { class ContextProvider; -class SharedBitmapManager; } // namespace viz namespace cc { @@ -84,10 +68,7 @@ using ResourceIdArray = std::vector<viz::ResourceId>; using ResourceIdMap = std::unordered_map<viz::ResourceId, viz::ResourceId>; - ResourceProvider(viz::ContextProvider* compositor_context_provider, - viz::SharedBitmapManager* shared_bitmap_manager, - bool delegated_sync_points_required, - const viz::ResourceSettings& resource_settings); + explicit ResourceProvider(viz::ContextProvider* compositor_context_provider); ~ResourceProvider() override; void Initialize(); @@ -96,29 +77,8 @@ void DidLoseContextProvider() { lost_context_provider_ = true; } - int max_texture_size() const { return settings_.max_texture_size; } - // Use this format for making resources that will be rastered and uploaded to - // from software bitmaps. - viz::ResourceFormat best_texture_format() const { - return settings_.best_texture_format; - } - // Use this format for making resources that will be rastered to on the Gpu. - viz::ResourceFormat best_render_buffer_format() const { - return settings_.best_render_buffer_format; - } - viz::ResourceFormat YuvResourceFormat(int bits) const; - bool use_sync_query() const { return settings_.use_sync_query; } size_t num_resources() const { return resources_.size(); } - bool IsTextureFormatSupported(viz::ResourceFormat format) const; - - // Returns true if the provided |format| can be used as a render buffer. - // Note that render buffer support implies texture support. - bool IsRenderBufferFormatSupported(viz::ResourceFormat format) const; - - bool IsGpuMemoryBufferFormatSupported(viz::ResourceFormat format, - gfx::BufferUsage usage) const; - // Checks whether a resource is in use by a consumer. bool InUseByConsumer(viz::ResourceId id); @@ -127,36 +87,9 @@ void LoseResourceForTesting(viz::ResourceId id); void EnableReadLockFencesForTesting(viz::ResourceId id); - // Producer interface. - viz::ResourceType GetResourceType(viz::ResourceId id); GLenum GetResourceTextureTarget(viz::ResourceId id); void DeleteResource(viz::ResourceId id); - // In the case of GPU resources, we may need to flush the GL context to ensure - // that texture deletions are seen in a timely fashion. This function should - // be called after texture deletions that may happen during an idle state. - void FlushPendingDeletions() const; - - // TODO(sunnyps): Move to //components/viz/common/gl_helper.h ? - class CC_EXPORT ScopedSkSurface { - public: - ScopedSkSurface(GrContext* gr_context, - GLuint texture_id, - GLenum texture_target, - const gfx::Size& size, - viz::ResourceFormat format, - bool use_distance_field_text, - bool can_use_lcd_text, - int msaa_sample_count); - ~ScopedSkSurface(); - - SkSurface* surface() const { return surface_.get(); } - - private: - sk_sp<SkSurface> surface_; - - DISALLOW_COPY_AND_ASSIGN(ScopedSkSurface); - }; class CC_EXPORT SynchronousFence : public viz::ResourceFence { public: @@ -181,34 +114,6 @@ DISALLOW_COPY_AND_ASSIGN(SynchronousFence); }; - // Indicates if this resource may be used for a hardware overlay plane. - bool IsOverlayCandidate(viz::ResourceId id); - - // Return the format of the underlying buffer that can be used for scanout. - gfx::BufferFormat GetBufferFormat(viz::ResourceId id); - -#if defined(OS_ANDROID) - // Indicates if this resource is backed by an Android SurfaceTexture, and thus - // can't really be promoted to an overlay. - bool IsBackedBySurfaceTexture(viz::ResourceId id); - - // Indicates if this resource wants to receive promotion hints. - bool WantsPromotionHintForTesting(viz::ResourceId id); - - // Return the number of resources that request promotion hints. - size_t CountPromotionHintRequestsForTesting(); -#endif - - static GLint GetActiveTextureUnit(gpu::gles2::GLES2Interface* gl); - - static gpu::SyncToken GenerateSyncTokenHelper(gpu::gles2::GLES2Interface* gl); - static gpu::SyncToken GenerateSyncTokenHelper( - gpu::raster::RasterInterface* ri); - - GLenum GetImageTextureTarget(const gpu::Capabilities& caps, - gfx::BufferUsage usage, - viz::ResourceFormat format) const; - // base::trace_event::MemoryDumpProvider implementation. bool OnMemoryDump(const base::trace_event::MemoryDumpArgs& args, base::trace_event::ProcessMemoryDump* pmd) override; @@ -223,13 +128,6 @@ viz::internal::Resource resource); viz::internal::Resource* GetResource(viz::ResourceId id); - // 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); - void PopulateSkBitmapWithResource(SkBitmap* sk_bitmap, const viz::internal::Resource* resource); @@ -250,28 +148,6 @@ // Returns null if we do not have a viz::ContextProvider. gpu::gles2::GLES2Interface* ContextGL() const; - // Holds const settings for the ResourceProvider. Never changed after init. - struct Settings { - Settings(viz::ContextProvider* compositor_context_provider, - bool delegated_sync_points_needed, - const viz::ResourceSettings& resource_settings); - - int max_texture_size = 0; - bool use_texture_storage = false; - bool use_texture_format_bgra = false; - bool use_texture_usage_hint = false; - bool use_texture_npot = false; - bool use_sync_query = false; - bool use_texture_storage_image = false; - viz::ResourceType default_resource_type = viz::ResourceType::kTexture; - viz::ResourceFormat yuv_resource_format = viz::LUMINANCE_8; - viz::ResourceFormat yuv_highbit_resource_format = viz::LUMINANCE_8; - viz::ResourceFormat best_texture_format = viz::RGBA_8888; - viz::ResourceFormat best_render_buffer_format = viz::RGBA_8888; - bool use_gpu_memory_buffer_resources = false; - bool delegated_sync_points_required = false; - } const settings_; - ResourceMap resources_; // Keep track of whether deleted resources should be batched up or returned @@ -281,7 +157,6 @@ base::small_map<std::map<int, ResourceIdArray>> batched_returning_resources_; viz::ContextProvider* compositor_context_provider_; - viz::SharedBitmapManager* shared_bitmap_manager_; int next_child_; bool lost_context_provider_;
diff --git a/cc/resources/resource_provider_unittest.cc b/cc/resources/resource_provider_unittest.cc index 5e8703b..43351b0 100644 --- a/cc/resources/resource_provider_unittest.cc +++ b/cc/resources/resource_provider_unittest.cc
@@ -432,8 +432,7 @@ } resource_provider_ = std::make_unique<DisplayResourceProvider>( - context_provider_.get(), shared_bitmap_manager_.get(), - CreateResourceSettings()); + context_provider_.get(), shared_bitmap_manager_.get()); MakeChildResourceProvider(); } @@ -1898,8 +1897,7 @@ parent_context_provider->BindToCurrentThread(); auto parent_resource_provider(std::make_unique<DisplayResourceProvider>( - parent_context_provider.get(), shared_bitmap_manager.get(), - resource_settings)); + parent_context_provider.get(), shared_bitmap_manager.get())); gfx::Size size(1, 1); viz::ResourceFormat format = viz::RGBA_8888; @@ -2350,7 +2348,7 @@ viz::ResourceSettings resource_settings = CreateResourceSettings(); auto resource_provider(std::make_unique<DisplayResourceProvider>( - context_provider.get(), shared_bitmap_manager_.get(), resource_settings)); + context_provider.get(), shared_bitmap_manager_.get())); auto child_context_owned = std::make_unique<TextureStateTrackingContext>(); TextureStateTrackingContext* child_context = child_context_owned.get(); @@ -2573,7 +2571,7 @@ CreateAndFillSharedBitmap(shared_bitmap_manager_.get(), size, kBadBeef)); auto resource_provider(std::make_unique<DisplayResourceProvider>( - nullptr, shared_bitmap_manager_.get(), CreateResourceSettings())); + nullptr, shared_bitmap_manager_.get())); auto child_resource_provider(std::make_unique<LayerTreeResourceProvider>( nullptr, shared_bitmap_manager_.get(), gpu_memory_buffer_manager_.get(), @@ -2645,8 +2643,7 @@ context_provider->BindToCurrentThread(); auto resource_provider(std::make_unique<DisplayResourceProvider>( - context_provider.get(), shared_bitmap_manager, - CreateResourceSettings())); + context_provider.get(), shared_bitmap_manager)); auto child_context_owned(std::make_unique<TextureStateTrackingContext>()); TextureStateTrackingContext* child_context = child_context_owned.get(); @@ -2810,8 +2807,7 @@ context_provider->BindToCurrentThread(); auto resource_provider(std::make_unique<DisplayResourceProvider>( - context_provider.get(), shared_bitmap_manager_.get(), - CreateResourceSettings())); + context_provider.get(), shared_bitmap_manager_.get())); auto child_context_owned(std::make_unique<TextureStateTrackingContext>()); TextureStateTrackingContext* child_context = child_context_owned.get(); @@ -2918,8 +2914,7 @@ context_provider->BindToCurrentThread(); auto resource_provider = std::make_unique<DisplayResourceProvider>( - context_provider.get(), shared_bitmap_manager_.get(), - CreateResourceSettings()); + context_provider.get(), shared_bitmap_manager_.get()); gpu::SyncToken sync_token(gpu::CommandBufferNamespace::GPU_IO, gpu::CommandBufferId::FromUnsafeValue(0x12), 0x34); @@ -2975,8 +2970,7 @@ context_provider->BindToCurrentThread(); auto resource_provider = std::make_unique<DisplayResourceProvider>( - context_provider.get(), shared_bitmap_manager_.get(), - CreateResourceSettings()); + context_provider.get(), shared_bitmap_manager_.get()); gpu::SyncToken sync_token(gpu::CommandBufferNamespace::GPU_IO, gpu::CommandBufferId::FromUnsafeValue(0x12), 0x34); @@ -3019,8 +3013,7 @@ context_provider->BindToCurrentThread(); auto resource_provider = std::make_unique<DisplayResourceProvider>( - context_provider.get(), shared_bitmap_manager_.get(), - CreateResourceSettings()); + context_provider.get(), shared_bitmap_manager_.get()); gpu::SyncToken sync_token; const GLuint64 current_fence_sync = context->GetNextFenceSync(); @@ -3634,7 +3627,7 @@ EXPECT_CALL(*context, RetireTextureId(kWorkerTextureId)); context_provider->ContextGL()->DeleteTextures(1, &kWorkerTextureId); - sync_token = ResourceProvider::GenerateSyncTokenHelper( + sync_token = LayerTreeResourceProvider::GenerateSyncTokenHelper( context_provider->RasterInterface()); lock.set_sync_token(sync_token); Mock::VerifyAndClearExpectations(context); @@ -3718,7 +3711,7 @@ lock.ConsumeTexture(context_provider->RasterInterface())); Mock::VerifyAndClearExpectations(context); - sync_token = ResourceProvider::GenerateSyncTokenHelper( + sync_token = LayerTreeResourceProvider::GenerateSyncTokenHelper( context_provider->RasterInterface()); lock.set_sync_token(sync_token);
diff --git a/cc/test/fake_resource_provider.h b/cc/test/fake_resource_provider.h index e0f9338..535f23b3 100644 --- a/cc/test/fake_resource_provider.h +++ b/cc/test/fake_resource_provider.h
@@ -47,8 +47,8 @@ viz::SharedBitmapManager* shared_bitmap_manager) { viz::ResourceSettings resource_settings; resource_settings.texture_id_allocation_chunk_size = 1; - return std::make_unique<DisplayResourceProvider>( - context_provider, shared_bitmap_manager, resource_settings); + return std::make_unique<DisplayResourceProvider>(context_provider, + shared_bitmap_manager); } private: @@ -56,10 +56,7 @@ viz::SharedBitmapManager* shared_bitmap_manager, bool delegated_sync_points_required, const viz::ResourceSettings resource_settings) - : ResourceProvider(context_provider, - shared_bitmap_manager, - delegated_sync_points_required, - resource_settings) {} + : ResourceProvider(context_provider) {} }; } // namespace cc
diff --git a/cc/test/pixel_test.cc b/cc/test/pixel_test.cc index 0fd32cf..8dad621 100644 --- a/cc/test/pixel_test.cc +++ b/cc/test/pixel_test.cc
@@ -172,8 +172,7 @@ gpu_memory_buffer_manager_ = std::make_unique<viz::TestGpuMemoryBufferManager>(); resource_provider_ = std::make_unique<DisplayResourceProvider>( - output_surface_->context_provider(), shared_bitmap_manager_.get(), - settings_.resource_settings); + output_surface_->context_provider(), shared_bitmap_manager_.get()); child_context_provider_ = base::MakeRefCounted<TestInProcessContextProvider>(nullptr); @@ -204,7 +203,7 @@ output_surface_->BindToClient(output_surface_client_.get()); shared_bitmap_manager_.reset(new TestSharedBitmapManager()); resource_provider_ = std::make_unique<DisplayResourceProvider>( - nullptr, shared_bitmap_manager_.get(), settings_.resource_settings); + nullptr, shared_bitmap_manager_.get()); child_resource_provider_ = std::make_unique<LayerTreeResourceProvider>( nullptr, shared_bitmap_manager_.get(), nullptr, true, settings_.resource_settings);
diff --git a/chrome/VERSION b/chrome/VERSION index 1125028c..7208047 100644 --- a/chrome/VERSION +++ b/chrome/VERSION
@@ -1,4 +1,4 @@ MAJOR=65 MINOR=0 -BUILD=3318 +BUILD=3319 PATCH=0
diff --git a/chrome/android/chrome_public_apk_tmpl.gni b/chrome/android/chrome_public_apk_tmpl.gni index a81fc05..8f85051 100644 --- a/chrome/android/chrome_public_apk_tmpl.gni +++ b/chrome/android/chrome_public_apk_tmpl.gni
@@ -122,6 +122,11 @@ # Incremental install doesn't work for monochrome. See crbug.com/663492. never_incremental = true + # Strip xml namespaces for monochrome. This should only be done for apks + # targeting API > 21 which for chrome is only Monochrome. This is due to + # how android public and private resource ids are namespaced. + no_xml_namespaces = true + # Configrations to make android load shared library from APK. uncompress_shared_libraries = true
diff --git a/chrome/android/java/res/color/bottom_nav_tint.xml b/chrome/android/java/res/color/bottom_nav_tint.xml index a7f8d89..c17f1c2 100644 --- a/chrome/android/java/res/color/bottom_nav_tint.xml +++ b/chrome/android/java/res/color/bottom_nav_tint.xml
@@ -5,5 +5,6 @@ --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:color="@color/light_active_color" /> + <item android:state_enabled="false" android:color="@color/black_alpha_24" /> <item android:color="@color/black_alpha_65" /> </selector> \ No newline at end of file
diff --git a/chrome/android/java/res/color/dark_mode_tint.xml b/chrome/android/java/res/color/dark_mode_tint.xml index e84a0a09..c8460004 100644 --- a/chrome/android/java/res/color/dark_mode_tint.xml +++ b/chrome/android/java/res/color/dark_mode_tint.xml
@@ -8,6 +8,6 @@ <item android:state_focused="true" android:color="@color/black_alpha_65" /> <item android:state_pressed="true" android:color="@color/black_alpha_65" /> <item android:state_activated="true" android:color="@color/black_alpha_65" /> - <item android:state_enabled="false" android:color="#3D000000" /> + <item android:state_enabled="false" android:color="@color/black_alpha_24" /> <item android:color="@color/black_alpha_65"/> </selector>
diff --git a/chrome/android/java/res/layout/suggestions_bottom_sheet_content.xml b/chrome/android/java/res/layout/suggestions_bottom_sheet_content.xml index 94c4004..47cb54a 100644 --- a/chrome/android/java/res/layout/suggestions_bottom_sheet_content.xml +++ b/chrome/android/java/res/layout/suggestions_bottom_sheet_content.xml
@@ -14,4 +14,12 @@ android:layout_height="match_parent" android:scrollbars="vertical" android:paddingTop="@dimen/chrome_home_suggestions_recycler_view_padding_top" /> + + <org.chromium.chrome.browser.widget.LoadingView + android:id="@+id/loading_view" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:paddingTop="@dimen/chrome_home_empty_view_top_padding" /> + </FrameLayout>
diff --git a/chrome/android/java/res/values/colors.xml b/chrome/android/java/res/values/colors.xml index f0dcd48..e5a0177 100644 --- a/chrome/android/java/res/values/colors.xml +++ b/chrome/android/java/res/values/colors.xml
@@ -39,6 +39,7 @@ <!-- New list of common text colors --> <color name="black_alpha_20">#33000000</color> + <color name="black_alpha_24">#3D000000</color> <color name="black_alpha_30">#4D000000</color> <color name="black_alpha_40">#66000000</color> @@ -151,7 +152,7 @@ <color name="locationbar_light_selection_color">#CC5595FE</color> <color name="locationbar_status_color">@color/black_alpha_54</color> <color name="locationbar_status_color_light">@android:color/white</color> - <color name="locationbar_status_separator_color">#3D000000</color> + <color name="locationbar_status_separator_color">@color/black_alpha_24</color> <color name="locationbar_status_separator_color_light">#3DFFFFFF</color> <color name="omnibox_focused_fading_background_color">@color/black_alpha_65</color>
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActionModeCallback.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActionModeCallback.java index 9c7f4f4..352800b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActionModeCallback.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActionModeCallback.java
@@ -4,7 +4,6 @@ package org.chromium.chrome.browser; -import android.content.Context; import android.text.TextUtils; import android.view.ActionMode; import android.view.Menu; @@ -30,12 +29,10 @@ * A class that handles selection action mode for an associated {@link Tab}. */ public class ChromeActionModeCallback implements ActionMode.Callback { - private final Context mContext; private final Tab mTab; private final ActionModeCallbackHelper mHelper; - public ChromeActionModeCallback(Context context, Tab tab, ActionModeCallbackHelper helper) { - mContext = context; + public ChromeActionModeCallback(Tab tab, ActionModeCallbackHelper helper) { mTab = tab; mHelper = helper; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java index fd3f3aaf..c3338ad 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
@@ -1717,18 +1717,25 @@ */ @Override public void onMultiWindowModeChanged(boolean isInMultiWindowMode) { - recordMultiWindowModeChangedUserAction(isInMultiWindowMode); + // If native is not initialized, the multi-window user action will be recorded in + // #onDeferredStartupForMultiWindowMode() and FeatureUtilities#setIsInMultiWindowMode() + // will be called in #onResumeWithNative(). Both of these methods require native to be + // initialized, so do not call here to avoid crashing. See https://crbug.com/797921. + if (mNativeInitialized) { + recordMultiWindowModeChangedUserAction(isInMultiWindowMode); - if (!isInMultiWindowMode - && ApplicationStatus.getStateForActivity(this) == ActivityState.RESUMED) { - // Start a new UMA session when exiting multi-window mode if the activity is currently - // resumed. When entering multi-window Android recents gains focus, so ChromeActivity - // will get a call to onPauseWithNative(), ending the current UMA session. When exiting - // multi-window, however, if ChromeActivity is resumed it stays in that state. - markSessionEnd(); - markSessionResume(); - FeatureUtilities.setIsInMultiWindowMode( - MultiWindowUtils.getInstance().isInMultiWindowMode(this)); + if (!isInMultiWindowMode + && ApplicationStatus.getStateForActivity(this) == ActivityState.RESUMED) { + // Start a new UMA session when exiting multi-window mode if the activity is + // currently resumed. When entering multi-window Android recents gains focus, so + // ChromeActivity will get a call to onPauseWithNative(), ending the current UMA + // session. When exiting multi-window, however, if ChromeActivity is resumed it + // stays in that state. + markSessionEnd(); + markSessionResume(); + FeatureUtilities.setIsInMultiWindowMode( + MultiWindowUtils.getInstance().isInMultiWindowMode(this)); + } } VrShellDelegate.onMultiWindowModeChanged(isInMultiWindowMode);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorView.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorView.java index aecfe2f..91b376d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorView.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorView.java
@@ -171,8 +171,8 @@ mLayerTitleCache = layerTitleCache; mTabContentManager = tabContentManager; - mNativeCompositorView = nativeInit(lowMemDevice, - windowAndroid.getNativePointer(), layerTitleCache, tabContentManager); + mNativeCompositorView = + nativeInit(lowMemDevice, windowAndroid, layerTitleCache, tabContentManager); // compositor_impl_android.cc will use 565 EGL surfaces if and only if we're using a low // memory device, and no alpha channel is desired. Otherwise, it will use 8888. Since @@ -411,7 +411,7 @@ public void replaceSurfaceManagerForVr( CompositorSurfaceManager vrCompositorSurfaceManager, WindowAndroid window) { mCompositorSurfaceManager.shutDown(); - nativeSetCompositorWindow(mNativeCompositorView, window.getNativePointer()); + nativeSetCompositorWindow(mNativeCompositorView, window); mCompositorSurfaceManager = vrCompositorSurfaceManager; mCompositorSurfaceManager.requestSurface(PixelFormat.OPAQUE); nativeSetNeedsComposite(mNativeCompositorView); @@ -427,14 +427,14 @@ public void onExitVr(WindowAndroid windowToRestore) { setWindowAndroid(windowToRestore); mCompositorSurfaceManager.shutDown(); - nativeSetCompositorWindow(mNativeCompositorView, mWindowAndroid.getNativePointer()); + nativeSetCompositorWindow(mNativeCompositorView, mWindowAndroid); mCompositorSurfaceManager = new CompositorSurfaceManagerImpl(this, this); mCompositorSurfaceManager.requestSurface(getSurfacePixelFormat()); nativeSetNeedsComposite(mNativeCompositorView); mCompositorSurfaceManager.setVisibility(getVisibility()); } - private native long nativeInit(boolean lowMemDevice, long nativeWindowAndroid, + private native long nativeInit(boolean lowMemDevice, WindowAndroid windowAndroid, LayerTitleCache layerTitleCache, TabContentManager tabContentManager); private native void nativeDestroy(long nativeCompositorView); private native ResourceManager nativeGetResourceManager(long nativeCompositorView); @@ -449,5 +449,5 @@ private native void nativeSetLayoutBounds(long nativeCompositorView); private native void nativeSetOverlayVideoMode(long nativeCompositorView, boolean enabled); private native void nativeSetSceneLayer(long nativeCompositorView, SceneLayer sceneLayer); - private native void nativeSetCompositorWindow(long nativeCompositorView, long nativeWindow); + private native void nativeSetCompositorWindow(long nativeCompositorView, WindowAndroid window); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/feedback/ScreenshotTask.java b/chrome/android/java/src/org/chromium/chrome/browser/feedback/ScreenshotTask.java index 1d382b1..fccd635 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/feedback/ScreenshotTask.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/feedback/ScreenshotTask.java
@@ -15,6 +15,7 @@ import org.chromium.chrome.browser.ChromeActivity; import org.chromium.chrome.browser.tab.Tab; import org.chromium.ui.UiUtils; +import org.chromium.ui.base.WindowAndroid; import javax.annotation.Nullable; @@ -91,9 +92,8 @@ Rect rect = new Rect(); activity.getWindow().getDecorView().getRootView().getWindowVisibleDisplayFrame(rect); - nativeGrabWindowSnapshotAsync(this, - ((ChromeActivity) activity).getWindowAndroid().getNativePointer(), rect.width(), - rect.height()); + nativeGrabWindowSnapshotAsync( + this, ((ChromeActivity) activity).getWindowAndroid(), rect.width(), rect.height()); return true; } @@ -135,5 +135,5 @@ } private static native void nativeGrabWindowSnapshotAsync( - ScreenshotTask callback, long nativeWindowAndroid, int width, int height); + ScreenshotTask callback, WindowAndroid window, int width, int height); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePagesDownloadManagerBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePagesDownloadManagerBridge.java index f8929fb..35215fd 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePagesDownloadManagerBridge.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePagesDownloadManagerBridge.java
@@ -11,6 +11,7 @@ import android.os.Build; import org.chromium.base.ContextUtils; +import org.chromium.base.Log; import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; @@ -21,6 +22,7 @@ */ @JNINamespace("offline_pages::android") public class OfflinePagesDownloadManagerBridge { + private static final String TAG = "OfflinePagesDMBridge"; /** Offline pages should not be scanned as for media content. */ public static final boolean IS_MEDIA_SCANNER_SCANNABLE = false; @@ -50,12 +52,18 @@ @CalledByNative private static long addCompletedDownload(String title, String description, String path, long length, String uri, String referer) { - // Call the proper version of the pass through based on the supported API level. - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { - return callAddCompletedDownload(title, description, path, length); - } + try { + // Call the proper version of the pass through based on the supported API level. + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { + return callAddCompletedDownload(title, description, path, length); + } - return callAddCompletedDownload(title, description, path, length, uri, referer); + return callAddCompletedDownload(title, description, path, length, uri, referer); + } catch (Exception e) { + // In case of exception, we return a download id of 0. + Log.d(TAG, "ADM threw while trying to add a download. " + e); + return 0; + } } // Use this pass through before API level 24. @@ -87,9 +95,14 @@ @CalledByNative private static int remove(long[] ids) { DownloadManager downloadManager = getDownloadManager(); - if (downloadManager == null) return 0; + try { + if (downloadManager == null) return 0; - return downloadManager.remove(ids); + return downloadManager.remove(ids); + } catch (Exception e) { + Log.d(TAG, "ADM threw while trying to remove a download. " + e); + return 0; + } } private static DownloadManager getDownloadManager() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarPhone.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarPhone.java index e594c575..6815155 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarPhone.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarPhone.java
@@ -206,6 +206,11 @@ } private void updateGoogleG() { + if (!mNativeInitialized) { + mGoogleGContainer.setVisibility(View.GONE); + return; + } + // The toolbar data provider can be null during startup, before the ToolbarManager has been // initialized. ToolbarDataProvider toolbarDataProvider = getToolbarDataProvider(); @@ -382,4 +387,10 @@ super.backKeyPressed(); } + + @Override + public void onNativeLibraryReady() { + super.onNativeLibraryReady(); + if (mBottomSheet != null) updateGoogleG(); + } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/languages/LanguageListBaseAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/languages/LanguageListBaseAdapter.java index 531137fb..908df0f 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/languages/LanguageListBaseAdapter.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/languages/LanguageListBaseAdapter.java
@@ -9,11 +9,13 @@ import android.graphics.Color; import android.support.annotation.DrawableRes; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.v4.view.ViewCompat; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView.ViewHolder; import android.support.v7.widget.helper.ItemTouchHelper; import android.text.TextUtils; +import android.util.Pair; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; @@ -141,7 +143,7 @@ @Override public void onBindViewHolder(LanguageRowViewHolder holder, int position) { holder.updateLanguageInfo(mLanguageList.get(position)); - if (mDragEnabled) { + if (mDragEnabled && getItemCount() > 1) { assert mItemTouchHelper != null; holder.mStartIcon.setOnTouchListener((v, event) -> { if (event.getActionMasked() == MotionEvent.ACTION_DOWN) { @@ -175,6 +177,12 @@ mDragEnabled = true; ItemTouchHelper.Callback touchHelperCallBack = new ItemTouchHelper.Callback() { + + // The dragged language info during a single drag operation. + // The first is its start postion when it's dragged, the second is its language code. + @Nullable + private Pair<Integer, String> mDraggedLanguage; + @Override public int getMovementFlags(RecyclerView recyclerView, ViewHolder viewHolder) { return makeMovementFlags( @@ -188,10 +196,7 @@ int to = target.getAdapterPosition(); if (from == to) return false; - String languageCode = getItemByPosition(from).getCode(); Collections.swap(mLanguageList, from, to); - PrefServiceBridge.getInstance().moveAcceptLanguage(languageCode, to - from); - LanguagesManager.recordAction(LanguagesManager.ACTION_LANGUAGE_LIST_REORDERED); notifyItemMoved(from, to); return true; } @@ -200,6 +205,11 @@ public void onSelectedChanged(ViewHolder viewHolder, int actionState) { super.onSelectedChanged(viewHolder, actionState); if (actionState == ItemTouchHelper.ACTION_STATE_DRAG) { + // mDraggedLanguage should be cleaned up before. + assert mDraggedLanguage == null; + int start = viewHolder.getAdapterPosition(); + mDraggedLanguage = Pair.create(start, getItemByPosition(start).getCode()); + updateVisualState(true, viewHolder.itemView); } } @@ -207,6 +217,19 @@ @Override public void clearView(RecyclerView recyclerView, ViewHolder viewHolder) { super.clearView(recyclerView, viewHolder); + + // Commit the postion change for the dragged language when it's dropped. + if (mDraggedLanguage != null) { + int offset = viewHolder.getAdapterPosition() - mDraggedLanguage.first; + if (offset != 0) { + PrefServiceBridge.getInstance().moveAcceptLanguage( + mDraggedLanguage.second, offset); + LanguagesManager.recordAction( + LanguagesManager.ACTION_LANGUAGE_LIST_REORDERED); + } + mDraggedLanguage = null; + } + updateVisualState(false, viewHolder.itemView); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/languages/LanguageListPreference.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/languages/LanguageListPreference.java index ec171ec..c8c13971 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/languages/LanguageListPreference.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/languages/LanguageListPreference.java
@@ -46,6 +46,7 @@ @Override public Item[] getItems() { ArrayList<Item> menuItems = new ArrayList<>(); + // Show "Offer to translate" option if "Chrome Translate" is enabled. if (PrefServiceBridge.getInstance().isTranslateEnabled()) { // Set this row checked if the language is unblocked. @@ -59,10 +60,9 @@ info.isSupported())); } - // Show "Remove" option if there are more than 1 accept language. - if (getItemCount() > 1) { - menuItems.add(new Item(mContext, R.string.remove, true)); - } + // Enable "Remove" option if there are multiple accept languages. + menuItems.add(new Item(mContext, R.string.remove, getItemCount() > 1)); + return menuItems.toArray(new Item[menuItems.size()]); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetContent.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetContent.java index c41007cc..80e98ff 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetContent.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetContent.java
@@ -18,6 +18,7 @@ import android.widget.FrameLayout; import org.chromium.base.CollectionUtil; +import org.chromium.base.library_loader.LibraryProcessType; import org.chromium.chrome.R; import org.chromium.chrome.browser.ChromeActivity; import org.chromium.chrome.browser.ChromeFeatureList; @@ -39,11 +40,13 @@ import org.chromium.chrome.browser.tabmodel.TabModelSelector; import org.chromium.chrome.browser.toolbar.BottomToolbarPhone; import org.chromium.chrome.browser.util.ViewUtils; +import org.chromium.chrome.browser.widget.LoadingView; import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet; import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet.StateChangeReason; import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetContentController; import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetNewTabController; import org.chromium.chrome.browser.widget.displaystyle.UiConfig; +import org.chromium.content.browser.BrowserStartupController; import java.util.List; @@ -59,24 +62,27 @@ private final View mView; private final SuggestionsRecyclerView mRecyclerView; - private final NewTabPageAdapter mAdapter; - private final ContextMenuManager mContextMenuManager; - private final SuggestionsUiDelegateImpl mSuggestionsUiDelegate; - private final TileGroup.Delegate mTileGroupDelegate; - @Nullable - private final SuggestionsCarousel mSuggestionsCarousel; - private final SuggestionsSheetVisibilityChangeObserver mBottomSheetObserver; private final ChromeActivity mActivity; private final BottomSheet mSheet; - private final LogoView mLogoView; - private final LogoDelegateImpl mLogoDelegate; private final LocationBarPhone mLocationBar; private final BottomToolbarPhone mToolbarView; private final ViewGroup mControlContainerView; private final View mToolbarPullHandle; private final View mToolbarShadow; + private NewTabPageAdapter mAdapter; + private ContextMenuManager mContextMenuManager; + private SuggestionsUiDelegateImpl mSuggestionsUiDelegate; + private TileGroup.Delegate mTileGroupDelegate; + private SuggestionsSheetVisibilityChangeObserver mBottomSheetObserver; + private LogoView mLogoView; + private LogoDelegateImpl mLogoDelegate; + + @Nullable + private SuggestionsCarousel mSuggestionsCarousel; + private boolean mNewTabShown; + private boolean mSuggestionsInitialized; private boolean mSearchProviderHasLogo = true; private float mLastSheetHeightFraction = 1f; @@ -105,17 +111,8 @@ public SuggestionsBottomSheetContent(final ChromeActivity activity, final BottomSheet sheet, TabModelSelector tabModelSelector, SnackbarManager snackbarManager) { - SuggestionsDependencyFactory depsFactory = SuggestionsDependencyFactory.getInstance(); - Profile profile = Profile.getLastUsedProfile(); - SuggestionsNavigationDelegate navigationDelegate = - new SuggestionsNavigationDelegateImpl(activity, profile, sheet, tabModelSelector); mActivity = activity; mSheet = sheet; - mTileGroupDelegate = - new TileGroupDelegateImpl(activity, profile, navigationDelegate, snackbarManager); - mSuggestionsUiDelegate = new SuggestionsUiDelegateImpl( - depsFactory.createSuggestionSource(profile), depsFactory.createEventReporter(), - navigationDelegate, profile, sheet, activity.getReferencePool(), snackbarManager); mView = LayoutInflater.from(activity).inflate( R.layout.suggestions_bottom_sheet_content, null); @@ -130,12 +127,73 @@ + resources.getDimensionPixelSize(R.dimen.ntp_logo_margin_bottom_modern) - mToolbarHeight; - TouchEnabledDelegate touchEnabledDelegate = activity.getBottomSheet()::setTouchEnabled; + LoadingView loadingView = mView.findViewById(R.id.loading_view); + + mLocationBar = sheet.findViewById(R.id.location_bar); + View.OnTouchListener touchListener = (View view, MotionEvent motionEvent) -> { + if (mLocationBar != null && mLocationBar.isUrlBarFocused()) { + mLocationBar.setUrlBarFocus(false); + } + + // Never intercept the touch event. + return false; + }; + mView.setOnTouchListener(touchListener); + mRecyclerView.setOnTouchListener(touchListener); + + mControlContainerView = (ViewGroup) activity.findViewById(R.id.control_container); + mToolbarView = (BottomToolbarPhone) activity.findViewById(R.id.toolbar); + mToolbarPullHandle = activity.findViewById(R.id.toolbar_handle); + mToolbarShadow = activity.findViewById(R.id.bottom_toolbar_shadow); + sheet.getNewTabController().addObserver(this); + + mLocationBar.addUrlFocusChangeListener(this); + + if (mActivity.didFinishNativeInitialization()) { + loadingView.setVisibility(View.GONE); + initializeWithNative(tabModelSelector, snackbarManager); + } else { + mRecyclerView.setVisibility(View.GONE); + loadingView.showLoadingUI(); + // Only add a StartupCompletedObserver if native is not initialized to avoid + // #initializeWithNative() being called twice. + BrowserStartupController.get(LibraryProcessType.PROCESS_BROWSER) + .addStartupCompletedObserver(new BrowserStartupController.StartupCallback() { + @Override + public void onSuccess(boolean alreadyStarted) { + mRecyclerView.setVisibility(View.VISIBLE); + loadingView.hideLoadingUI(); + initializeWithNative(tabModelSelector, snackbarManager); + } + + @Override + public void onFailure() {} + }); + } + } + + private void initializeWithNative( + TabModelSelector tabModelSelector, SnackbarManager snackbarManager) { + assert !mSuggestionsInitialized; + mSuggestionsInitialized = true; + + SuggestionsDependencyFactory depsFactory = SuggestionsDependencyFactory.getInstance(); + Profile profile = Profile.getLastUsedProfile(); + SuggestionsNavigationDelegate navigationDelegate = + new SuggestionsNavigationDelegateImpl(mActivity, profile, mSheet, tabModelSelector); + + mTileGroupDelegate = + new TileGroupDelegateImpl(mActivity, profile, navigationDelegate, snackbarManager); + mSuggestionsUiDelegate = new SuggestionsUiDelegateImpl( + depsFactory.createSuggestionSource(profile), depsFactory.createEventReporter(), + navigationDelegate, profile, mSheet, mActivity.getReferencePool(), snackbarManager); + + TouchEnabledDelegate touchEnabledDelegate = mActivity.getBottomSheet()::setTouchEnabled; mContextMenuManager = new ContextMenuManager( - navigationDelegate, touchEnabledDelegate, activity::closeContextMenu); - activity.getWindowAndroid().addContextMenuCloseListener(mContextMenuManager); + navigationDelegate, touchEnabledDelegate, mActivity::closeContextMenu); + mActivity.getWindowAndroid().addContextMenuCloseListener(mContextMenuManager); mSuggestionsUiDelegate.addDestructionObserver(() -> { - activity.getWindowAndroid().removeContextMenuCloseListener(mContextMenuManager); + mActivity.getWindowAndroid().removeContextMenuCloseListener(mContextMenuManager); }); UiConfig uiConfig = new UiConfig(mRecyclerView); @@ -150,7 +208,7 @@ : null; // Inflate the logo in a container so its layout attributes are applied, then take it out. - FrameLayout logoContainer = (FrameLayout) LayoutInflater.from(activity).inflate( + FrameLayout logoContainer = (FrameLayout) LayoutInflater.from(mActivity).inflate( R.layout.suggestions_bottom_sheet_logo, null); mLogoView = logoContainer.findViewById(R.id.search_provider_logo); logoContainer.removeView(mLogoView); @@ -159,7 +217,7 @@ /* aboveTheFoldView = */ null, mLogoView, uiConfig, offlinePageBridge, mContextMenuManager, mTileGroupDelegate, mSuggestionsCarousel); - mBottomSheetObserver = new SuggestionsSheetVisibilityChangeObserver(this, activity) { + mBottomSheetObserver = new SuggestionsSheetVisibilityChangeObserver(this, mActivity) { @Override public void onContentShown(boolean isFirstShown) { // TODO(dgn): Temporary workaround to trigger an event in the backend when the @@ -220,22 +278,6 @@ } }; - mLocationBar = sheet.findViewById(R.id.location_bar); - View.OnTouchListener touchListener = (View view, MotionEvent motionEvent) -> { - if (mLocationBar != null && mLocationBar.isUrlBarFocused()) { - mLocationBar.setUrlBarFocus(false); - } - - // Never intercept the touch event. - return false; - }; - mView.setOnTouchListener(touchListener); - mRecyclerView.setOnTouchListener(touchListener); - - mControlContainerView = (ViewGroup) activity.findViewById(R.id.control_container); - mToolbarView = (BottomToolbarPhone) activity.findViewById(R.id.toolbar); - mToolbarPullHandle = activity.findViewById(R.id.toolbar_handle); - mToolbarShadow = activity.findViewById(R.id.bottom_toolbar_shadow); mLogoDelegate = new LogoDelegateImpl(navigationDelegate, mLogoView, profile); updateSearchProviderHasLogo(); if (mSearchProviderHasLogo) { @@ -243,7 +285,6 @@ loadSearchProviderLogo(); } TemplateUrlService.getInstance().addObserver(this); - sheet.getNewTabController().addObserver(this); mView.addOnAttachStateChangeListener(new OnAttachStateChangeListener() { @Override @@ -271,8 +312,6 @@ updateLogoTransition(); } }); - - mLocationBar.addUrlFocusChangeListener(this); } @Override @@ -308,15 +347,18 @@ @Override public void destroy() { mBottomSheetObserver.onDestroy(); - mSuggestionsUiDelegate.onDestroy(); - mTileGroupDelegate.destroy(); - TemplateUrlService.getInstance().removeObserver(this); mSheet.getNewTabController().removeObserver(this); mLocationBar.removeUrlFocusChangeListener(this); if (mAnimator != null) { mAnimator.removeAllUpdateListeners(); mAnimator.cancel(); } + + if (mSuggestionsInitialized) { + mSuggestionsUiDelegate.onDestroy(); + mTileGroupDelegate.destroy(); + TemplateUrlService.getInstance().removeObserver(this); + } } @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java index c2fb7222..840948c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java
@@ -1797,8 +1797,8 @@ R.string.accessibility_content_view)); cvc.initialize(new TabViewAndroidDelegate(this, cv), cv, webContents, getWindowAndroid()); SelectionPopupController controller = SelectionPopupController.fromWebContents(webContents); - ChromeActionModeCallback actionModeCallback = new ChromeActionModeCallback( - mThemedApplicationContext, this, controller.getActionModeCallbackHelper()); + ChromeActionModeCallback actionModeCallback = + new ChromeActionModeCallback(this, controller.getActionModeCallbackHelper()); controller.setActionModeCallback(actionModeCallback); return cvc; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/BottomToolbarPhone.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/BottomToolbarPhone.java index 6f0c04d7..35d61f1 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/BottomToolbarPhone.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/BottomToolbarPhone.java
@@ -66,7 +66,7 @@ // focused, the new content description is read immediately. if (hasFocus() && !urlHasFocus()) mBottomSheet.requestFocus(); - mLocationBar.updateLoadingState(true); + if (isNativeLibraryReady()) mLocationBar.updateLoadingState(true); updateContentDescription(); } @@ -742,6 +742,7 @@ super.onNativeLibraryReady(); mNewTabButton.setIsModern(); + if (mBottomSheet != null) mLocationBar.updateLoadingState(true); } @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarModelImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarModelImpl.java index 21bafaf..5a9d4bf 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarModelImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarModelImpl.java
@@ -304,6 +304,7 @@ return mBottomSheet != null && mBottomSheet.isSheetOpen() && mBottomSheet.getTargetSheetState() != BottomSheet.SHEET_STATE_PEEK && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT + && ChromeFeatureList.isInitialized() && ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_HOME_CLEAR_URL_ON_OPEN); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrDaydreamApi.java b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrDaydreamApi.java index 97df7f36..0768dff6 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrDaydreamApi.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrDaydreamApi.java
@@ -69,4 +69,9 @@ * devices. */ boolean bootsToVr(); + + /** + * Closes this DaydreamApi instance. + */ + void close(); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrDaydreamApiImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrDaydreamApiImpl.java index 891cfa6..26dd86c5 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrDaydreamApiImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrDaydreamApiImpl.java
@@ -20,20 +20,25 @@ import java.lang.reflect.Method; /** - * A wrapper for DaydreamApi. Note that we have to recreate the DaydreamApi instance each time we - * use it, or API calls begin to silently fail. + * A wrapper for DaydreamApi. */ public class VrDaydreamApiImpl implements VrDaydreamApi { + public static final String VR_BOOT_SYSTEM_PROPERTY = "ro.boot.vr"; + private final Context mContext; + private DaydreamApi mDaydreamApi; private Boolean mBootsToVr = null; - public static final String VR_BOOT_SYSTEM_PROPERTY = "ro.boot.vr"; - public VrDaydreamApiImpl(Context context) { mContext = context; } + private DaydreamApi getDaydreamApi() { + if (mDaydreamApi == null) mDaydreamApi = DaydreamApi.create(mContext); + return mDaydreamApi; + } + @Override public boolean isDaydreamReadyDevice() { return DaydreamApi.isDaydreamReadyPlatform(mContext); @@ -41,19 +46,17 @@ @Override public boolean registerDaydreamIntent(final PendingIntent pendingIntent) { - DaydreamApi daydreamApi = DaydreamApi.create(mContext); + DaydreamApi daydreamApi = getDaydreamApi(); if (daydreamApi == null) return false; daydreamApi.registerDaydreamIntent(pendingIntent); - daydreamApi.close(); return true; } @Override public boolean unregisterDaydreamIntent() { - DaydreamApi daydreamApi = DaydreamApi.create(mContext); + DaydreamApi daydreamApi = getDaydreamApi(); if (daydreamApi == null) return false; daydreamApi.unregisterDaydreamIntent(); - daydreamApi.close(); return true; } @@ -64,19 +67,17 @@ @Override public boolean launchInVr(final PendingIntent pendingIntent) { - DaydreamApi daydreamApi = DaydreamApi.create(mContext); + DaydreamApi daydreamApi = getDaydreamApi(); if (daydreamApi == null) return false; daydreamApi.launchInVr(pendingIntent); - daydreamApi.close(); return true; } @Override public boolean launchInVr(final Intent intent) { - DaydreamApi daydreamApi = DaydreamApi.create(mContext); + DaydreamApi daydreamApi = getDaydreamApi(); if (daydreamApi == null) return false; daydreamApi.launchInVr(intent); - daydreamApi.close(); return true; } @@ -86,16 +87,15 @@ if (activity == null) { throw new IllegalStateException("Activity is null"); } - DaydreamApi daydreamApi = DaydreamApi.create(activity); + DaydreamApi daydreamApi = getDaydreamApi(); if (daydreamApi == null) return false; daydreamApi.exitFromVr(activity, requestCode, intent); - daydreamApi.close(); return true; } @Override public Boolean isDaydreamCurrentViewer() { - DaydreamApi daydreamApi = DaydreamApi.create(mContext); + DaydreamApi daydreamApi = getDaydreamApi(); if (daydreamApi == null) return false; // If this is the first time any app reads the daydream config file, daydream may create its // config directory... crbug.com/686104 @@ -106,16 +106,14 @@ } finally { StrictMode.setThreadPolicy(oldPolicy); } - daydreamApi.close(); return type == GvrApi.ViewerType.DAYDREAM; } @Override public boolean launchVrHomescreen() { - DaydreamApi daydreamApi = DaydreamApi.create(mContext); + DaydreamApi daydreamApi = getDaydreamApi(); if (daydreamApi == null) return false; daydreamApi.launchVrHomescreen(); - daydreamApi.close(); return true; } @@ -131,6 +129,13 @@ return mBootsToVr; } + @Override + public void close() { + if (mDaydreamApi == null) return; + mDaydreamApi.close(); + mDaydreamApi = null; + } + private int getIntSystemProperty(String key, int defaultValue) { try { final Class<?> systemProperties = Class.forName("android.os.SystemProperties");
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.java index a8082c24..3bcc21c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.java
@@ -672,6 +672,7 @@ assert mActivity != null; if (mActivity == activity) return; mActivity = activity; + if (mVrDaydreamApi != null) mVrDaydreamApi.close(); mVrDaydreamApi = mVrClassesWrapper.createVrDaydreamApi(mActivity); } @@ -1761,6 +1762,7 @@ if (sInstance == null) return; shutdownVr(false /* disableVrMode */, false /* stayingInChrome */); if (mNativeVrShellDelegate != 0) nativeDestroy(mNativeVrShellDelegate); + if (mVrDaydreamApi != null) mVrDaydreamApi.close(); mNativeVrShellDelegate = 0; ApplicationStatus.unregisterActivityStateListener(this); sInstance = null;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java index 85c7d58..7a5be1d8 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java
@@ -29,7 +29,7 @@ import org.chromium.chrome.browser.ChromeTabbedActivity; import org.chromium.chrome.browser.NativePage; import org.chromium.chrome.browser.UrlConstants; -import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager.FullscreenListener; +import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager; import org.chromium.chrome.browser.page_info.PageInfoPopup; import org.chromium.chrome.browser.tab.EmptyTabObserver; import org.chromium.chrome.browser.tab.InterceptNavigationDelegateImpl; @@ -48,7 +48,6 @@ import org.chromium.content.browser.ContentViewCore; import org.chromium.content_public.browser.LoadUrlParams; import org.chromium.content_public.browser.WebContents; -import org.chromium.content_public.common.BrowserControlsState; import org.chromium.ui.UiUtils; import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.base.WindowAndroid.PermissionCallback; @@ -59,8 +58,7 @@ * This view extends from GvrLayout which wraps a GLSurfaceView that renders VR shell. */ @JNINamespace("vr_shell") -public class VrShellImpl - extends GvrLayout implements VrShell, SurfaceHolder.Callback, FullscreenListener { +public class VrShellImpl extends GvrLayout implements VrShell, SurfaceHolder.Callback { private static final String TAG = "VrShellImpl"; private static final float INCHES_TO_METERS = 0.0254f; @@ -99,7 +97,6 @@ private float mLastContentHeight; private float mLastContentDpr; private Boolean mPaused; - private boolean mPendingVSyncPause; private AndroidUiGestureTarget mAndroidUiGestureTarget; @@ -114,8 +111,6 @@ mActivity.getToolbarManager().setProgressBarEnabled(false); - mActivity.getFullscreenManager().addListener(this); - // This overrides the default intent created by GVR to return to Chrome when the DON flow // is triggered by resuming the GvrLayout, which is the usual way Daydream apps enter VR. // See VrShellDelegate#getEnterVrPendingIntent for why we need to do this. @@ -330,7 +325,7 @@ mActivity.getWindowAndroid().hasPermission(android.Manifest.permission.RECORD_AUDIO) || mActivity.getWindowAndroid().canRequestPermission( android.Manifest.permission.RECORD_AUDIO); - mNativeVrShell = nativeInit(mDelegate, mContentVrWindowAndroid.getNativePointer(), forWebVr, + mNativeVrShell = nativeInit(mDelegate, mContentVrWindowAndroid, forWebVr, webVrAutopresentationExpected, inCct, browsingDisabled, hasOrCanRequestAudioPermission, getGvrApi().getNativeGvrContext(), mReprojectedRendering, displayWidthMeters, displayHeightMeters, dm.widthPixels, @@ -586,7 +581,6 @@ @Override public void shutdown() { - mActivity.getFullscreenManager().removeListener(this); mActivity.getFullscreenManager().setPersistentFullscreenMode(false); reparentAllTabs(mActivity.getWindowAndroid()); if (mNativeVrShell != 0) { @@ -604,10 +598,20 @@ View parent = mTab.getContentViewCore().getContainerView(); mTab.getWebContents().setSize(parent.getWidth(), parent.getHeight()); } - mTab.updateBrowserControlsState(BrowserControlsState.SHOWN, true); + mTab.updateFullscreenEnabledState(); mActivity.getToolbarManager().setProgressBarEnabled(true); mContentVirtualDisplay.destroy(); + + // Since VSync was paused, control heights may not have been propagated. If we request to + // show the controls before the old values have propagated we'll end up with the old values + // (ie. the controls hidden). The values will have propagated with the next frame received + // from the compositor, so we can tell the controls to show at that point. + mActivity.getCompositorViewHolder().getCompositorView().surfaceRedrawNeededAsync(() -> { + ChromeFullscreenManager manager = (ChromeFullscreenManager) mTab.getFullscreenManager(); + manager.getBrowserVisibilityDelegate().showControlsTransient(); + }); + super.shutdown(); } @@ -628,49 +632,11 @@ @Override public void setWebVrModeEnabled(boolean enabled, boolean showToast) { - if (enabled) { - // Use showToast as a proxy for whether we were in VR before switching to WebVR mode - // (and the controls are already hidden). We can't check whether the controls are hidden - // directly due to bug mentioned below. This will all be fixed and cleaned up with the - // fallback UI path (https://crbug.com/793430). - if (showToast) { - mContentVrWindowAndroid.setVSyncPaused(true); - mPendingVSyncPause = false; - } else { - // TODO(mthiesse, https://crbug.com/760970) We shouldn't have to wait for the - // controls to be hidden before pausing VSync. Something is going wrong in the - // controls code and should be fixed. - mPendingVSyncPause = true; - } - } else { - mContentVrWindowAndroid.setVSyncPaused(false); - mPendingVSyncPause = false; - } - + mContentVrWindowAndroid.setVSyncPaused(enabled); nativeSetWebVrMode(mNativeVrShell, enabled, showToast); } @Override - public void onContentOffsetChanged(float offset) {} - - @Override - public void onControlsOffsetChanged(float topOffset, float bottomOffset, boolean needsAnimate) { - if (!mPendingVSyncPause) return; - // As soon as the controls are starting to hide we can set vsync to paused. - // For some reason it seems onControlsOffsetChanged is sometimes called when the controls - // are partially hidden, but never called again when they're fully hidden. - if (mActivity.getFullscreenManager().getBrowserControlHiddenRatio() == 0.0) return; - mPendingVSyncPause = false; - mContentVrWindowAndroid.setVSyncPaused(true); - } - - @Override - public void onToggleOverlayVideoMode(boolean enabled) {} - - @Override - public void onBottomControlsHeightChanged(int bottomControlsHeight) {} - - @Override public boolean getWebVrModeEnabled() { return nativeGetWebVrMode(mNativeVrShell); } @@ -862,11 +828,11 @@ return mPresentationView; } - private native long nativeInit(VrShellDelegate delegate, long nativeWindowAndroid, - boolean forWebVR, boolean webVrAutopresentationExpected, boolean inCct, - boolean browsingDisabled, boolean hasOrCanRequestAudioPermission, long gvrApi, - boolean reprojectedRendering, float displayWidthMeters, float displayHeightMeters, - int displayWidthPixels, int displayHeightPixels); + private native long nativeInit(VrShellDelegate delegate, WindowAndroid window, boolean forWebVR, + boolean webVrAutopresentationExpected, boolean inCct, boolean browsingDisabled, + boolean hasOrCanRequestAudioPermission, long gvrApi, boolean reprojectedRendering, + float displayWidthMeters, float displayHeightMeters, int displayWidthPixels, + int displayHeightPixels); private native void nativeSetSurface(long nativeVrShell, Surface surface); private native void nativeSwapContents( long nativeVrShell, Tab tab, AndroidUiGestureTarget androidUiGestureTarget);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java index db086ba..79693a3c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java
@@ -29,7 +29,6 @@ import org.chromium.base.ObserverList; import org.chromium.base.SysUtils; import org.chromium.base.VisibleForTesting; -import org.chromium.base.library_loader.LibraryProcessType; import org.chromium.base.metrics.RecordHistogram; import org.chromium.chrome.R; import org.chromium.chrome.browser.ChromeActivity; @@ -56,7 +55,6 @@ import org.chromium.chrome.browser.widget.FadingBackgroundView; import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetContentController.ContentType; import org.chromium.chrome.browser.widget.textbubble.TextBubble; -import org.chromium.content.browser.BrowserStartupController; import org.chromium.content_public.browser.LoadUrlParams; import org.chromium.content_public.browser.SelectionPopupController; import org.chromium.content_public.browser.WebContents; @@ -432,8 +430,9 @@ startX = mVisibleViewportRect.left + (mContainerWidth - allowedSwipeWidth) / 2; endX = startX + allowedSwipeWidth; } else if (ChromeSwitches.CHROME_HOME_SWIPE_LOGIC_VELOCITY.equals(logicType) - || ChromeFeatureList.isEnabled( - ChromeFeatureList.CHROME_HOME_SWIPE_VELOCITY_FEATURE)) { + || (ChromeFeatureList.isInitialized() + && ChromeFeatureList.isEnabled( + ChromeFeatureList.CHROME_HOME_SWIPE_VELOCITY_FEATURE))) { if (mVelocityLogicBlockSwipe) return false; double dpPerMs = scrollDistanceDp / (double) timeDeltaMs; @@ -486,17 +485,7 @@ addObserver(mMetrics); mGestureDetector = new BottomSheetSwipeDetector(context, this); - - BrowserStartupController.get(LibraryProcessType.PROCESS_BROWSER) - .addStartupCompletedObserver(new BrowserStartupController.StartupCallback() { - @Override - public void onSuccess(boolean alreadyStarted) { - mIsTouchEnabled = true; - } - - @Override - public void onFailure() {} - }); + mIsTouchEnabled = true; // An observer for recording metrics. this.addObserver(new EmptyBottomSheetObserver() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetContentController.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetContentController.java index 937e493..991b8f3 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetContentController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetContentController.java
@@ -152,7 +152,9 @@ public void onSheetClosed(@StateChangeReason int reason) { removeIcons(); - if (ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_HOME_DESTROY_SUGGESTIONS)) { + if (ChromeFeatureList.isInitialized() + && ChromeFeatureList.isEnabled( + ChromeFeatureList.CHROME_HOME_DESTROY_SUGGESTIONS)) { // TODO(bauerb): Implement support for destroying the home sheet after a delay. mSelectedItemId = NO_CONTENT_ID; mBottomSheet.showContent(null); @@ -248,6 +250,7 @@ @Override public void onSuccess(boolean alreadyStarted) { initBottomNavMenu(); + setIconsEnabled(true); } @Override @@ -267,6 +270,7 @@ mBottomSheet.addObserver(mBottomSheetObserver); mActivity = activity; mTabModelSelector = tabModelSelector; + setIconsEnabled(mActivity.didFinishNativeInitialization()); mTabModelSelectorObserver = new EmptyTabModelSelectorObserver() { @Override @@ -586,6 +590,12 @@ getMenu().findItem(R.id.action_history).setIcon(null); } + private void setIconsEnabled(boolean enabled) { + getMenu().findItem(R.id.action_downloads).setEnabled(enabled); + getMenu().findItem(R.id.action_bookmarks).setEnabled(enabled); + getMenu().findItem(R.id.action_history).setEnabled(enabled); + } + /** * Get the background color resource ID for the bottom navigation menu based on whether * we're in incognito mode.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetMetrics.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetMetrics.java index a6be679..dc78155 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetMetrics.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetMetrics.java
@@ -6,7 +6,7 @@ import android.support.annotation.IntDef; -import org.chromium.base.metrics.RecordHistogram; +import org.chromium.base.metrics.CachedMetrics; import org.chromium.base.metrics.RecordUserAction; import org.chromium.chrome.browser.feature_engagement.TrackerFactory; import org.chromium.chrome.browser.profiles.Profile; @@ -37,6 +37,60 @@ private static final int OPENED_BY_STARTUP = 4; private static final int OPENED_BY_BOUNDARY = 5; + private static final CachedMetrics.TimesHistogramSample TIMES_FIRST_OPEN = + new CachedMetrics.TimesHistogramSample( + "Android.ChromeHome.TimeToFirstOpen", TimeUnit.MILLISECONDS); + + private static final CachedMetrics.TimesHistogramSample TIMES_BETWEEN_CLOSE_AND_NEXT_OPEN = + new CachedMetrics.TimesHistogramSample( + "Android.ChromeHome.TimeBetweenCloseAndNextOpen", TimeUnit.MILLISECONDS); + + private static final CachedMetrics.TimesHistogramSample TIMES_DURATION_OPEN = + new CachedMetrics.TimesHistogramSample( + "Android.ChromeHome.DurationOpen", TimeUnit.MILLISECONDS); + + private static final CachedMetrics.EnumeratedHistogramSample ENUMERATED_OPEN_REASON = + new CachedMetrics.EnumeratedHistogramSample( + "Android.ChromeHome.OpenReason", OPENED_BY_BOUNDARY); + + private static final CachedMetrics.ActionEvent ACTION_HALF_STATE = + new CachedMetrics.ActionEvent("Android.ChromeHome.HalfState"); + private static final CachedMetrics.ActionEvent ACTION_FULL_STATE = + new CachedMetrics.ActionEvent("Android.ChromeHome.FullState"); + + private static final CachedMetrics.ActionEvent ACTION_SHOW_SUGGESTIONS = + new CachedMetrics.ActionEvent("Android.ChromeHome.ShowSuggestions"); + private static final CachedMetrics.ActionEvent ACTION_SHOW_DOWNLOADS = + new CachedMetrics.ActionEvent("Android.ChromeHome.ShowDownloads"); + private static final CachedMetrics.ActionEvent ACTION_SHOW_BOOKMARKS = + new CachedMetrics.ActionEvent("Android.ChromeHome.ShowBookmarks"); + private static final CachedMetrics.ActionEvent ACTION_SHOW_HISTORY = + new CachedMetrics.ActionEvent("Android.ChromeHome.ShowHistory"); + private static final CachedMetrics.ActionEvent ACTION_SHOW_INCOGNITO_HOME = + new CachedMetrics.ActionEvent("Android.ChromeHome.ShowIncognitoHome"); + + private static final CachedMetrics.ActionEvent ACTION_OPENED_BY_SWIPE = + new CachedMetrics.ActionEvent("Android.ChromeHome.OpenedBySwipe"); + private static final CachedMetrics.ActionEvent ACTION_OPENED_BY_OMNIBOX_FOCUS = + new CachedMetrics.ActionEvent("Android.ChromeHome.OpenedByOmnibox"); + private static final CachedMetrics.ActionEvent ACTION_OPENED_BY_NEW_TAB_CREATION = + new CachedMetrics.ActionEvent("Android.ChromeHome.OpenedByNTP"); + private static final CachedMetrics.ActionEvent ACTION_OPENED_BY_EXPAND_BUTTON = + new CachedMetrics.ActionEvent("Android.ChromeHome.OpenedByExpandButton"); + private static final CachedMetrics.ActionEvent ACTION_OPENED_BY_STARTUP = + new CachedMetrics.ActionEvent("Android.ChromeHome.OpenedByStartup"); + + private static final CachedMetrics.ActionEvent ACTION_CLOSED_BY_SWIPE = + new CachedMetrics.ActionEvent("Android.ChromeHome.ClosedBySwipe"); + private static final CachedMetrics.ActionEvent ACTION_CLOSED_BY_BACK_PRESS = + new CachedMetrics.ActionEvent("Android.ChromeHome.ClosedByBackPress"); + private static final CachedMetrics.ActionEvent ACTION_CLOSED_BY_TAP_SCRIM = + new CachedMetrics.ActionEvent("Android.ChromeHome.ClosedByTapScrim"); + private static final CachedMetrics.ActionEvent ACTION_CLOSED_BY_NAVIGATION = + new CachedMetrics.ActionEvent("Android.ChromeHome.ClosedByNavigation"); + private static final CachedMetrics.ActionEvent ACTION_CLOSED = + new CachedMetrics.ActionEvent("Android.ChromeHome.Closed"); + /** Whether the sheet is currently open. */ private boolean mIsSheetOpen; @@ -64,12 +118,9 @@ mLastOpenTime = System.currentTimeMillis(); if (isFirstOpen) { - RecordHistogram.recordMediumTimesHistogram("Android.ChromeHome.TimeToFirstOpen", - mLastOpenTime - mCreationTime, TimeUnit.MILLISECONDS); + TIMES_FIRST_OPEN.record(mLastOpenTime - mCreationTime); } else { - RecordHistogram.recordMediumTimesHistogram( - "Android.ChromeHome.TimeBetweenCloseAndNextOpen", - mLastOpenTime - mLastCloseTime, TimeUnit.MILLISECONDS); + TIMES_BETWEEN_CLOSE_AND_NEXT_OPEN.record(mLastOpenTime - mLastCloseTime); } recordSheetOpenReason(reason); @@ -78,19 +129,19 @@ @Override public void onSheetClosed(@StateChangeReason int reason) { mIsSheetOpen = false; + recordSheetCloseReason(reason); mLastCloseTime = System.currentTimeMillis(); - RecordHistogram.recordMediumTimesHistogram("Android.ChromeHome.DurationOpen", - mLastCloseTime - mLastOpenTime, TimeUnit.MILLISECONDS); + TIMES_DURATION_OPEN.record(mLastCloseTime - mLastOpenTime); } @Override public void onSheetStateChanged(int newState) { if (newState == BottomSheet.SHEET_STATE_HALF) { - RecordUserAction.record("Android.ChromeHome.HalfState"); + ACTION_HALF_STATE.record(); } else if (newState == BottomSheet.SHEET_STATE_FULL) { - RecordUserAction.record("Android.ChromeHome.FullState"); + ACTION_FULL_STATE.record(); } } @@ -107,15 +158,15 @@ int contentType = newContent.getType(); if (contentType == BottomSheetContentController.TYPE_SUGGESTIONS) { - RecordUserAction.record("Android.ChromeHome.ShowSuggestions"); + ACTION_SHOW_SUGGESTIONS.record(); } else if (contentType == BottomSheetContentController.TYPE_DOWNLOADS) { - RecordUserAction.record("Android.ChromeHome.ShowDownloads"); + ACTION_SHOW_DOWNLOADS.record(); } else if (contentType == BottomSheetContentController.TYPE_BOOKMARKS) { - RecordUserAction.record("Android.ChromeHome.ShowBookmarks"); + ACTION_SHOW_BOOKMARKS.record(); } else if (contentType == BottomSheetContentController.TYPE_HISTORY) { - RecordUserAction.record("Android.ChromeHome.ShowHistory"); + ACTION_SHOW_HISTORY.record(); } else if (contentType == BottomSheetContentController.TYPE_INCOGNITO_HOME) { - RecordUserAction.record("Android.ChromeHome.ShowIncognitoHome"); + ACTION_SHOW_INCOGNITO_HOME.record(); } if (contentType == BottomSheetContentController.TYPE_DOWNLOADS @@ -138,23 +189,23 @@ switch (reason) { case StateChangeReason.SWIPE: metricsReason = OPENED_BY_SWIPE; - RecordUserAction.record("Android.ChromeHome.OpenedBySwipe"); + ACTION_OPENED_BY_SWIPE.record(); break; case StateChangeReason.OMNIBOX_FOCUS: metricsReason = OPENED_BY_OMNIBOX_FOCUS; - RecordUserAction.record("Android.ChromeHome.OpenedByOmnibox"); + ACTION_OPENED_BY_OMNIBOX_FOCUS.record(); break; case StateChangeReason.NEW_TAB: metricsReason = OPENED_BY_NEW_TAB_CREATION; - RecordUserAction.record("Android.ChromeHome.OpenedByNTP"); + ACTION_OPENED_BY_NEW_TAB_CREATION.record(); break; case StateChangeReason.EXPAND_BUTTON: metricsReason = OPENED_BY_EXPAND_BUTTON; - RecordUserAction.record("Android.ChromeHome.OpenedByExpandButton"); + ACTION_OPENED_BY_EXPAND_BUTTON.record(); break; case StateChangeReason.STARTUP: metricsReason = OPENED_BY_STARTUP; - RecordUserAction.record("Android.ChromeHome.OpenedByStartup"); + ACTION_OPENED_BY_STARTUP.record(); break; case StateChangeReason.NONE: // Intentionally empty. @@ -163,8 +214,7 @@ assert false; } - RecordHistogram.recordEnumeratedHistogram( - "Android.ChromeHome.OpenReason", metricsReason, OPENED_BY_BOUNDARY); + ENUMERATED_OPEN_REASON.record(metricsReason); } /** @@ -174,19 +224,19 @@ private void recordSheetCloseReason(@StateChangeReason int reason) { switch (reason) { case StateChangeReason.SWIPE: - RecordUserAction.record("Android.ChromeHome.ClosedBySwipe"); + ACTION_CLOSED_BY_SWIPE.record(); break; case StateChangeReason.BACK_PRESS: - RecordUserAction.record("Android.ChromeHome.ClosedByBackPress"); + ACTION_CLOSED_BY_BACK_PRESS.record(); break; case StateChangeReason.TAP_SCRIM: - RecordUserAction.record("Android.ChromeHome.ClosedByTapScrim"); + ACTION_CLOSED_BY_TAP_SCRIM.record(); break; case StateChangeReason.NAVIGATION: - RecordUserAction.record("Android.ChromeHome.ClosedByNavigation"); + ACTION_CLOSED_BY_NAVIGATION.record(); break; case StateChangeReason.NONE: - RecordUserAction.record("Android.ChromeHome.Closed"); + ACTION_CLOSED.record(); break; default: assert false;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/ChromeHomeIphBubbleController.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/ChromeHomeIphBubbleController.java index a930072..33dd951 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/ChromeHomeIphBubbleController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/ChromeHomeIphBubbleController.java
@@ -13,6 +13,7 @@ import org.chromium.base.Callback; import org.chromium.base.VisibleForTesting; +import org.chromium.base.library_loader.LibraryProcessType; import org.chromium.chrome.R; import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.compositor.layouts.EmptyOverviewModeObserver; @@ -29,6 +30,9 @@ import org.chromium.components.feature_engagement.EventConstants; import org.chromium.components.feature_engagement.FeatureConstants; import org.chromium.components.feature_engagement.Tracker; +import org.chromium.content.browser.BrowserStartupController; + +import java.util.ArrayDeque; /** A controller used to display various in-product help bubbles related to Chrome Home. */ public class ChromeHomeIphBubbleController { @@ -44,6 +48,9 @@ */ private static final String HELP_BUBBLE_TIMEOUT_PARAM_NAME = "x_iph-timeout-duration-ms"; + /** Cache the events before native is initialized. */ + private final ArrayDeque<Integer> mEvents = new ArrayDeque<>(); + private TextBubble mHelpBubble; private LayoutManagerChrome mLayoutManager; private BottomToolbarPhone mToolbar; @@ -52,6 +59,8 @@ private BottomSheet mBottomSheet; private Context mContext; + private boolean mNativeInitialized; + /** * Create a new ChromeHomeIphBubbleController. * @param context The {@link Context} used to retrieve resources. @@ -67,20 +76,28 @@ mControlContainer = controlContainer; mBottomSheet = bottomSheet; + BrowserStartupController.get(LibraryProcessType.PROCESS_BROWSER) + .addStartupCompletedObserver(new BrowserStartupController.StartupCallback() { + @Override + public void onSuccess(boolean alreadyStarted) { + mNativeInitialized = true; + while (!mEvents.isEmpty()) { + trackEvent(mEvents.poll()); + } + } + + @Override + public void onFailure() {} + }); + mBottomSheet.addObserver(new EmptyBottomSheetObserver() { @Override public void onSheetOpened(@StateChangeReason int reason) { dismissHelpBubble(); - - Tracker tracker = TrackerFactory.getTrackerForProfile(Profile.getLastUsedProfile()); - tracker.notifyEvent(EventConstants.BOTTOM_SHEET_EXPANDED); - - if (reason == StateChangeReason.SWIPE) { - tracker.notifyEvent(EventConstants.BOTTOM_SHEET_EXPANDED_FROM_SWIPE); - } else if (reason == StateChangeReason.EXPAND_BUTTON) { - tracker.notifyEvent(EventConstants.BOTTOM_SHEET_EXPANDED_FROM_BUTTON); - } else if (reason == StateChangeReason.OMNIBOX_FOCUS) { - tracker.notifyEvent(EventConstants.BOTTOM_SHEET_EXPANDED_FROM_OMNIBOX_FOCUS); + if (mNativeInitialized) { + trackEvent(reason); + } else { + mEvents.add(reason); } } @@ -110,6 +127,7 @@ * This method must be called after the toolbar has had at least one layout pass. */ public void showColdStartHelpBubble() { + if (!mNativeInitialized) return; // If FRE is not complete, the FRE screen is likely covering ChromeTabbedActivity so the // help bubble should not be shown. if (!FirstRunStatus.getFirstRunFlowComplete()) return; @@ -279,4 +297,17 @@ int centerPoint = locationInWindow[0] + topAnchorView.getWidth() / 2; return new Rect(centerPoint, locationInWindow[1], centerPoint, locationInWindow[1]); } + + private void trackEvent(@StateChangeReason int reason) { + Tracker tracker = TrackerFactory.getTrackerForProfile(Profile.getLastUsedProfile()); + tracker.notifyEvent(EventConstants.BOTTOM_SHEET_EXPANDED); + + if (reason == StateChangeReason.SWIPE) { + tracker.notifyEvent(EventConstants.BOTTOM_SHEET_EXPANDED_FROM_SWIPE); + } else if (reason == StateChangeReason.EXPAND_BUTTON) { + tracker.notifyEvent(EventConstants.BOTTOM_SHEET_EXPANDED_FROM_BUTTON); + } else if (reason == StateChangeReason.OMNIBOX_FOCUS) { + tracker.notifyEvent(EventConstants.BOTTOM_SHEET_EXPANDED_FROM_OMNIBOX_FOCUS); + } + } }
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 3125bdc..4119662 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_de.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
@@ -273,7 +273,7 @@ <translation id="3522247891732774234">Update verfügbar. Weitere Optionen</translation> <translation id="3527085408025491307">Ordner</translation> <translation id="3542235761944717775"><ph name="KILOBYTES" /> KB verfügbar</translation> -<translation id="3549644494707163724">Alle synchronisierten Daten mit Ihrer eigenen Synchronisierungspassphrase verschlüsseln</translation> +<translation id="3549644494707163724">Alle synchronisierten Daten mit meiner eigenen Synchronisierungspassphrase verschlüsseln</translation> <translation id="3549657413697417275">Im Verlauf suchen</translation> <translation id="3552151358455404883">Chrome-Synchronisierung und -Personalisierung in den <ph name="BEGIN_LINK1" />Einstellungen<ph name="END_LINK1" /> verwalten</translation> <translation id="3557336313807607643">Zu Kontakten hinzufügen</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_es.xtb b/chrome/android/java/strings/translations/android_chrome_strings_es.xtb index 0d31559..2570dd8 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_es.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
@@ -85,7 +85,7 @@ <translation id="1670399744444387456">Básico</translation> <translation id="1671236975893690980">Descarga pendiente…</translation> <translation id="169033420419426091">No se ha podido descargar <ph name="FILE_NAME" /> porque falta la tarjeta SD.</translation> -<translation id="1709438864123551175">Ahorro de Datos</translation> +<translation id="1709438864123551175">Ahorro de datos</translation> <translation id="1718835860248848330">Última hora</translation> <translation id="1729516292547892356">Para ver contenido de realidad virtual, actualiza Servicios RV de Google</translation> <translation id="1742134235943978220">Se ha traducido al <ph name="TARGET_LANGUAGE" />.</translation> @@ -174,7 +174,7 @@ <translation id="2501278716633472235">Volver</translation> <translation id="2503472621226270518">Mostrar panel de navegación</translation> <translation id="2512222046227390255">Autocompletar formularios</translation> -<translation id="2526148617758225454">Ahorro de Datos está activado. Puedes administrarlo en la configuración.</translation> +<translation id="2526148617758225454">El ahorro de datos está activado. Puedes administrarlo en la configuración.</translation> <translation id="2532336938189706096">Vista web</translation> <translation id="2536728043171574184">Viendo una copia sin conexión de esta página</translation> <translation id="2546283357679194313">Cookies y datos de sitios</translation> @@ -256,7 +256,7 @@ <translation id="3328801116991980348">Información del sitio</translation> <translation id="3341058695485821946">Consulta la cantidad de datos que has ahorrado</translation> <translation id="3350687908700087792">Cerrar todas las pestañas de incógnito</translation> -<translation id="3365671512111106261">No disponible cuando se activa Ahorro de Datos</translation> +<translation id="3365671512111106261">No disponible cuando se activa el ahorro de datos</translation> <translation id="3367813778245106622">Vuelve a iniciar sesión para que comience la sincronización</translation> <translation id="3384347053049321195">Compartir imagen</translation> <translation id="3386292677130313581">Preguntar antes de permitir que los sitios web detecten tu ubicación (recomendado)</translation> @@ -294,7 +294,7 @@ <translation id="3662546969139119822">Ningún elemento del historial</translation> <translation id="3672452749423051839">Sugerencias para errores de navegación</translation> <translation id="3682249951633602029">Cualquier usuario que pueda ver el archivo de contraseñas exportado podrá ver tus contraseñas.</translation> -<translation id="3712575778697986964">¿Quieres vaciar el historial de Ahorro de Datos?</translation> +<translation id="3712575778697986964">¿Quieres vaciar el historial de ahorro de datos?</translation> <translation id="3714981814255182093">Abre la barra de búsqueda</translation> <translation id="3716182511346448902">Esta página utiliza demasiada memoria y Chrome la ha pausado.</translation> <translation id="3734660163659757482">Desliza hacia arriba para ver marcadores y más</translation> @@ -407,10 +407,10 @@ <translation id="4738836084190194332">Última sincronización: <ph name="WHEN" /></translation> <translation id="4749960740855309258">Abre una pestaña nueva</translation> <translation id="4759238208242260848">Descargas</translation> -<translation id="4766369052440583386">Ahorro de Datos activado</translation> +<translation id="4766369052440583386">Ahorro de datos activado</translation> <translation id="4797039098279997504">Toca para volver a <ph name="URL_OF_THE_CURRENT_TAB" /></translation> <translation id="4807098396393229769">Titular de la tarjeta</translation> -<translation id="4807963036345170158">Ahorro de Datos desactivado</translation> +<translation id="4807963036345170158">Ahorro de datos desactivado</translation> <translation id="4811736444948656478">El panel de navegación ocupa la mitad inferior de la pantalla</translation> <translation id="4816465935029283692">Tipos de datos</translation> <translation id="4837753911714442426">Abre las opciones para imprimir la página</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb b/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb index 5aeb937e..e935f81 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
@@ -667,7 +667,7 @@ <translation id="6963766334940102469">Xóa dấu trang</translation> <translation id="6965382102122355670">OK</translation> <translation id="6978479750597523876">Đặt lại cài đặt dịch</translation> -<translation id="6979737339423435258">Toàn bộ thời gian</translation> +<translation id="6979737339423435258">Từ trước đến nay</translation> <translation id="6981982820502123353">Truy cập</translation> <translation id="6985347914332179298">Không có mục nào đã tải xuống tại đây</translation> <translation id="6990079615885386641">Tải ứng dụng từ Cửa hàng Google Play: <ph name="APP_ACTION" /></translation>
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/mock/MockVrDaydreamApi.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/mock/MockVrDaydreamApi.java index 345070d..3cb1a6cf 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/mock/MockVrDaydreamApi.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/vr_shell/mock/MockVrDaydreamApi.java
@@ -70,4 +70,7 @@ public boolean bootsToVr() { return false; } + + @Override + public void close() {} }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/ChromeActionModeCallbackTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/ChromeActionModeCallbackTest.java index 96e4dfe..6f08bd6 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/ChromeActionModeCallbackTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/ChromeActionModeCallbackTest.java
@@ -52,8 +52,8 @@ ContextUtils.initApplicationContextForTests(RuntimeEnvironment.application); RecordUserAction.setDisabledForTests(true); - mActionModeCallback = Mockito.spy(new ChromeActionModeCallback( - RuntimeEnvironment.application, mTab, mActionModeCallbackHelper)); + mActionModeCallback = + Mockito.spy(new ChromeActionModeCallback(mTab, mActionModeCallbackHelper)); } @After
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 3bdb909..87d7b7e 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd
@@ -763,7 +763,7 @@ Save Password </message> <message name="IDS_CONTENT_CONTEXT_GENERATEPASSWORD" desc="In Title Case: The name of the Generate Password command in the content area context menu"> - Generate Password + Generate Password... </message> </if> </if>
diff --git a/chrome/app/resources/chromium_strings_mr.xtb b/chrome/app/resources/chromium_strings_mr.xtb index 599891b..ad231ea 100644 --- a/chrome/app/resources/chromium_strings_mr.xtb +++ b/chrome/app/resources/chromium_strings_mr.xtb
@@ -227,7 +227,7 @@ <translation id="8586442755830160949">Copyright <ph name="YEAR" /> The Chromium लेखक. सर्व हक्क राखीव.</translation> <translation id="8590769996813453836">Chromium ला तुमच्या काँप्युटरवर धोकादायक सॉफ्टवेअर आढळले आहे. Chromium ते काढून टाकू आणि तुमचा ब्राउझर पुन्हा नीट चालावा यासाठी तुमच्या सेटिंग्ज रीस्टोअर करू शकते.</translation> <translation id="8621669128220841554">अनिर्दिष्ट त्रुटीमुळे स्थापना अयशस्वी झाली. कृपया Chromium पुन्हा डाउनलोड करा.</translation> -<translation id="8628626585870903697">Chromium कार्य करण्यासाठी मुद्रण पूर्वावलोकनास आवश्यक असलेले PDF viewer समाविष्ट करीत नाही.</translation> +<translation id="8628626585870903697">Chromium कार्य करण्यासाठी प्रिंट पूर्वावलोकनास आवश्यक असलेले PDF viewer समाविष्ट करीत नाही.</translation> <translation id="8667808506758191620">आपले <ph name="DEVICE_TYPE" /> अद्ययावत आहे.</translation> <translation id="8697124171261953979">आपण Chromium प्रारंभ करता किंवा ओम्निबॉक्समधून शोध घेता तेव्हा कोणते पृष्ठ दर्शविले जाते हे देखील हे नियंत्रित करते.</translation> <translation id="8704119203788522458">हे आपले Chromium आहे</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb index 04c583f..01fa6c5e 100644 --- a/chrome/app/resources/generated_resources_am.xtb +++ b/chrome/app/resources/generated_resources_am.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">በርቷል - ብጁ ቅንብሮች</translation> <translation id="1493892686965953381"><ph name="LOAD_STATE_PARAMETER" />ን በመጠበቅ ላይ...</translation> <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> የሚገኙ ሌሎች መሣሪያዎች።</translation> -<translation id="1497284176235884849">የቀረበው PPD ልክ ያልሆነ ነው።</translation> <translation id="1497522201463361063">«<ph name="FILE_NAME" />»ን ዳግም መሰየም አልተቻለም። <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">የማይታወቅ መሣሪያ [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">ይህ የባለቤት መለያ በበርካታ መለያ በሚገባበት ክፍለ-ጊዜ ውስጥ የመጀመሪያው የገባ መለያ መሆን አለበት።</translation> @@ -1774,7 +1773,6 @@ <translation id="3697100740575341996">የእርስዎ አይ ቲ አስተዳዳሪ Chrome Goodies ለመሣሪያዎ አሰናክሏል። <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">የኢሜይል አድራሻ</translation> <translation id="3702500414347826004">የእርስዎ የጅምር ገጾች <ph name="URL" />ን ለማካተት ተቀይረዋል።</translation> -<translation id="3703669627274482482">አንድ ጣቢያ እርስዎ ወደ ቅንጥብ ሰሌዳ የሚቀዱትን ጽሑፍ እና ምስልን መመልከት ሲፈልግ ይጠይቅ</translation> <translation id="370415077757856453">ጃቫስክሪፕት ታግዷል</translation> <translation id="3704331259350077894">የክንውን መቋረጥ</translation> <translation id="3705722231355495246">-</translation> @@ -2120,7 +2118,6 @@ <translation id="4270393598798225102">ስሪት <ph name="NUMBER" /></translation> <translation id="4271396100647220620">ምንም ተዛማጆች የሉም</translation> <translation id="4275830172053184480">መሣሪያዎን ዳግም ያስጀምሩ</translation> -<translation id="4276216215490044084">ትልቅ PPDን መጫን አልተቻለም። ከፍተኛው መጠን 250 ኪባ ነው።</translation> <translation id="4278390842282768270">ተፈቅዷል</translation> <translation id="4281844954008187215">የአግልግሎት ውል</translation> <translation id="4282196459431406533">Smart Lock በርቷል</translation> @@ -2200,7 +2197,6 @@ <translation id="4430369329743628066">ዕልባት ታክሏል</translation> <translation id="443464694732789311">ቀጥል</translation> <translation id="4439318412377770121"><ph name="DEVICE_NAME" />ን በGoogle ደመና መሣሪያዎች ላይ ማስመዝገብ ይፈልጋሉ?</translation> -<translation id="4439612350502082674">አታሚን ማከል አልተቻለም። እንደገና ያስነሱና እንደገና ይሞክሩ።</translation> <translation id="4441124369922430666">ማሽኑ ሲበራ ይህን መተግበሪያ በራስ-ሰር እንዲጀመር ይፈልጋሉ?</translation> <translation id="444134486829715816">ዘርጋ...</translation> <translation id="4441548209689510310">የፊደል አራሚ አማራጮችን አሳይ</translation> @@ -2431,7 +2427,6 @@ <translation id="4839303808932127586">ቪዲዮ አስ&ቀምጥ እንደ…</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> ንጥሎች ተመርጠዋል</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{1 ተጨማሪ}one{# ተጨማሪ}other{# ተጨማሪ}}</translation> -<translation id="4840626203080576849">አንድ ጣቢያ እርስዎ ወደ ቅንጥብ ሰሌዳ የሚቀዱትን ጽሑፍ እና ምስል መመልከት ሲፈልግ ይጠይቅ (የሚመከር)</translation> <translation id="4842976633412754305">ይህ ገጽ ፈቃድ ከሌላቸው ምንጮች የመጡ ጽሑፎችን ለመጫን እየሞከረ ነው።</translation> <translation id="4844333629810439236">ሌሎች የቁልፍ ሰሌዳዎች</translation> <translation id="4846680374085650406">አስተዳዳሪው ለዚህ ቅንብር የሰጠውን ምክር ነው እየተከተሉ ያሉት።</translation> @@ -2698,7 +2693,6 @@ <translation id="5254368820972107711">የሚወገዱ ፋይሎችን አሳይ</translation> <translation id="52550593576409946">የኪዮስክ መተግበሪያ ሊጀመር አልቻለም።</translation> <translation id="5255315797444241226">ያስገቡት የይለፍ ሐረግ ትክክል አይደለም።</translation> -<translation id="5259571578888203461">እርስዎ ወደ ቅንጥብ ሰሌዳ የሚቀዱትን ጽሑፍ እና ምስሎች ጣቢያዎች እንዲመለከቱ አይፍቀዱ</translation> <translation id="5260508466980570042">ይቅርታ፣ ኢሜይልዎ ወይም የይለፍ ቃልዎ ሊረጋገጥ አልቻለም። እባክዎ እንደገና ይሞክሩ።</translation> <translation id="5261683757250193089">በድር መደብር ውስጥ ክፈት</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />ከየትኛውም ቦታ ሆነው ፋይሎችን ይድረሱባቸው፣ ከመስመር ውጪ ሆነውም እንኳ።<ph name="MARKUP_2" /> @@ -3171,7 +3165,6 @@ <translation id="5972708806901999743">ወደ ላይ ሂድ</translation> <translation id="5972826969634861500"><ph name="PRODUCT_NAME" />ን ጀምር</translation> <translation id="5975083100439434680">አሳንስ</translation> -<translation id="5975730206036440725">PPDን ማግኘት አልተቻለም። የእርስዎ Chromebook መስመር ላይ መሆኑን ያረጋግጡና እንደገና ይሞክሩ።</translation> <translation id="5975792506968920132">የባትሪ መሞላት መቶኛ ደረጃ</translation> <translation id="5976160379964388480">ሌሎች</translation> <translation id="5978264784700053212">የመልዕክት ማዕከል</translation> @@ -3213,7 +3206,6 @@ <translation id="6042308850641462728">ተጨማሪ</translation> <translation id="6042850536017090003">በመተግበሪያ ማሳወቂያዎች ላይ መታ ያድርጉ።</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> አንድ የChrome ትር ለ<ph name="TAB_NAME" /> እያጋራ ነው።</translation> -<translation id="6043357981274314628">ተከናውኗል!</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> አንድ የChrome ትር እና ኦዲዮ ለ<ph name="TAB_NAME" /> እያጋራ ነው።</translation> <translation id="6049004884579590341">ከሙሉ ማያ ገጽ ለመውጣት |<ph name="ACCELERATOR" />|ን ተጭነው ይያዙ</translation> <translation id="6049065490165456785">ፎቶ ከውስጣዊ ካሜራ</translation> @@ -3380,7 +3372,6 @@ <translation id="6311220991371174222">የእርስዎን መገለጫ በመክፈት ላይ ሳለ የሆነ ችግር ስለተፈጠረ Chromeን ማስጀምር አይቻልም። Chromeን ዳግም ለማስጀመር ይሞክሩ።</translation> <translation id="6312403991423642364">ያልታወቀ የአውታረ መረብ ስህተት</translation> <translation id="6313641880021325787">ከቪአር ውጣ</translation> -<translation id="6314335155547195432">የይለፍ ቃል አፍልቅ</translation> <translation id="6314819609899340042">በዚህ የ<ph name="IDS_SHORT_PRODUCT_NAME" /> መሣሪያ ላይ የማረም ባህሪያትን በተሳካ ሁኔታ አንቅተዋል።</translation> <translation id="6315343732431721770">የእርስዎ ጅምር ገጾች <ph name="URL" />ን ለማካተት ተቀይረዋል። የጅምር ገጽዎን የሚቀይሩ ቅጥያዎችን ለማሰናከል ወደነበረበት መልስን ጠቅ ያድርጉ።</translation> <translation id="6315493146179903667">ሁሉንም ወደፊት አምጣቸው</translation> @@ -3418,7 +3409,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Smart Lockን ለAndroid ያቀናብሩ</translation> <translation id="6374469231428023295">እንደገና ይሞክሩ</translation> -<translation id="6377158645544167202">አታሚን ማገናኘት አልተቻለም። አታሚው መብራቱንና በWi-Fi ወይም ዩኤስቢ ከእርስዎ Chromebook ጋር መገናኘቱን ያረጋግጡ።</translation> <translation id="6380143666419481200">ይቀበሉ እና ይቀጥሉ</translation> <translation id="6383051423892982287">የሰመረ ውሂብ በራስዎ <ph name="BEGIN_LINK" />የስምረት ይለፍ ሐረግ<ph name="END_LINK" /> ያመሣጥሩ</translation> <translation id="6384275966486438344">የፍለጋ ቅንብሮችዎን ወደሚከተለው ይለውጡ፦ <ph name="SEARCH_HOST" /></translation> @@ -3575,7 +3565,6 @@ <translation id="6606070663386660533">ትር 8</translation> <translation id="6607272825297743757">የፋይል መረጃ</translation> <translation id="6607831829715835317">&ተጨማሪ መሣሪያዎች</translation> -<translation id="6610183966322615106">አታሚ ማከል ላይ ስህተት</translation> <translation id="6612358246767739896">ጥበቃ የሚደረግለት ይዘት</translation> <translation id="6613452264606394692">ይህን ገጽ ዕልባት በማድረግ በፍጥነት ወደዚህ ተመልሰው ይምጡ</translation> <translation id="6615455863669487791">አሳየኝ</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb index fbc70e7..7575cad7 100644 --- a/chrome/app/resources/generated_resources_ar.xtb +++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -328,7 +328,6 @@ <translation id="1487335504823219454">قيد التشغيل - الإعدادات المخصصة</translation> <translation id="1493892686965953381">في انتظار <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> من الأجهزة الأخرى المتاحة.</translation> -<translation id="1497284176235884849">ملف PPD المقدَّم غير صالح.</translation> <translation id="1497522201463361063">تعذرت إعادة تسمية "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">جهاز غير معروف [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">يجب أن يكون حساب المالك هذا أول حساب يتم تسجيل الدخول إليه في جلسة تسجيل دخول متعدد.</translation> @@ -710,7 +709,7 @@ <translation id="21133533946938348">تثبيت علامة التبويب</translation> <translation id="2113479184312716848">فتح &ملف...</translation> <translation id="2113921862428609753">الدخول إلى معلومات الصلاحية</translation> -<translation id="2114224913786726438">الوحدات (<ph name="TOTAL_COUNT" />) - لم يتم اكتشاف أية تعارضات</translation> +<translation id="2114224913786726438">الوحدات (<ph name="TOTAL_COUNT" />) - لم يتم اكتشاف أي تعارضات</translation> <translation id="2114326799768592691">إعادة تحميل الإطار</translation> <translation id="2114896190328250491">صورة <ph name="NAME" /></translation> <translation id="2115103655317273167">إرسال إلى هاتف</translation> @@ -1188,7 +1187,7 @@ <translation id="2809586584051668049">و<ph name="NUMBER_ADDITIONAL_DISABLED" /> من الإضافات الأخرى</translation> <translation id="281133045296806353">تم فتح نافذة جديدة في جلسة المتصفح الحالي.</translation> <translation id="2812944337881233323">تجربة الخروج وتسجيل الدخول مرة أخرى</translation> -<translation id="2812989263793994277">عدم عرض أية صور</translation> +<translation id="2812989263793994277">عدم عرض أي صور</translation> <translation id="2814489978934728345">وقف تحميل هذه الصفحة</translation> <translation id="2815500128677761940">شريط الإشارات</translation> <translation id="2815693974042551705">مجلد الإشارات المرجعية</translation> @@ -1773,7 +1772,6 @@ <translation id="3697100740575341996">عطّل مشرف تقنية المعلومات ميزات Chrome الإضافية لجهازك. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">عنوان البريد الإلكتروني</translation> <translation id="3702500414347826004">تم تغيير صفحات بدء التشغيل التابعة لك لإدراج <ph name="URL" />.</translation> -<translation id="3703669627274482482">طلب الإذن عند محاولة أحد المواقع الاطلاع على النصوص أو الصور التي تنسخها إلى الحافظة</translation> <translation id="370415077757856453">تم حظر جافا سكريبت</translation> <translation id="3704331259350077894">إيقاف العملية</translation> <translation id="3705722231355495246">-</translation> @@ -1847,7 +1845,7 @@ <translation id="3799201711591988491">{COUNT,plural, =0{&فتح الكل}=1{&فتح الإشارة المرجعية}two{&فتح الكل (#)}few{&فتح الكل (#)}many{&فتح الكل (#)}other{&فتح الكل (#)}}</translation> <translation id="3800806661949714323">عرض الكل (مستحسن)</translation> <translation id="3802282970260083766">إعدادات الجهاز</translation> -<translation id="380408572480438692">يساعد تمكين جمع بيانات مستوى الأداء Google في تحسين النظام بمرور الوقت. وتجدر الإشارة إلى أنه لا يتم إرسال أية بيانات حتى ترسل تقريرًا بتعليقاتك (Alt-Shift-I) مع تضمين بيانات مستوى الأداء. ويمكنك الرجوع إلى هذه الشاشة لتعطيل جمع البيانات متى شئت.</translation> +<translation id="380408572480438692">يساعد تمكين جمع بيانات مستوى الأداء Google في تحسين النظام بمرور الوقت. وتجدر الإشارة إلى أنه لا يتم إرسال أي بيانات حتى ترسل تقريرًا بتعليقاتك (Alt-Shift-I) مع تضمين بيانات مستوى الأداء. ويمكنك الرجوع إلى هذه الشاشة لتعطيل جمع البيانات متى شئت.</translation> <translation id="3806965327722135869">العثور على البرامج الضارة وإزالتها</translation> <translation id="3807249107536149332"><ph name="EXTENSION_NAME" /> (معرف الإضافة "<ph name="EXTENSION_ID" />") غير مسموح به على شاشة تسجيل الدخول.</translation> <translation id="3807747707162121253">إل&غاء</translation> @@ -1923,7 +1921,7 @@ <translation id="3920504717067627103">سياسات الشهادة</translation> <translation id="392089482157167418">تمكين ChromeVox (التعليقات المنطوقة)</translation> <translation id="3924145049010392604">Meta</translation> -<translation id="3925247638945319984">ليست لديك أية سجلات WebRTC تم التقاطها مؤخرًا.</translation> +<translation id="3925247638945319984">ليست لديك أي سجلات WebRTC تم التقاطها مؤخرًا.</translation> <translation id="3925573269917483990">الكاميرا:</translation> <translation id="3925842537050977900">إزالة التثبيت من الرف</translation> <translation id="3926002189479431949">تم تغيير هاتف Smart Lock</translation> @@ -2118,7 +2116,6 @@ <translation id="4270393598798225102">الإصدار <ph name="NUMBER" /></translation> <translation id="4271396100647220620">لا توجد أي مطابقات</translation> <translation id="4275830172053184480">إعادة تشغيل جهازك</translation> -<translation id="4276216215490044084">لا يمكن تحميل ملف PPD كبير الحجم. الحد الأقصى للحجم هو 250 كيلوبايت.</translation> <translation id="4278390842282768270">مسموح بها</translation> <translation id="4281844954008187215">شروط الخدمة</translation> <translation id="4282196459431406533">Smart Lock قيد التشغيل</translation> @@ -2198,7 +2195,6 @@ <translation id="4430369329743628066">تمت إضافة إشارة</translation> <translation id="443464694732789311">متابعة</translation> <translation id="4439318412377770121">هل ترغب في تسجيل <ph name="DEVICE_NAME" /> بأجهزة السحاب في Google؟</translation> -<translation id="4439612350502082674">لا يمكن إضافة طابعة. يُرجى إعادة التشغيل والمحاولة مرة أخرى.</translation> <translation id="4441124369922430666">هل ترغب في تشغيل هذا التطبيق تلقائيًا عند تشغيل الجهاز؟</translation> <translation id="444134486829715816">توسيع...</translation> <translation id="4441548209689510310">عرض خيارات التدقيق الإملائي</translation> @@ -2429,7 +2425,6 @@ <translation id="4839303808932127586">حف&ظ مقطع الفيديو باسم...</translation> <translation id="4839847978919684242">تم تحديد <ph name="SELCTED_FILES_COUNT" /> من العناصر</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{عنصر واحد آخر}zero{# عنصر آخر}two{عنصران (#) آخران}few{# عناصر أخرى}many{# عنصرًا آخر}other{# عنصر آخر}}</translation> -<translation id="4840626203080576849">طلب الإذن عند محاولة أحد المواقع الاطلاع على النصوص والصور التي تنسخها إلى الحافظة (مستحسن)</translation> <translation id="4842976633412754305">تحاول هذه الصفحة تحميل نصوص برمجية من مصادر غير مصادقة.</translation> <translation id="4844333629810439236">لوحات مفاتيح أخرى</translation> <translation id="4846680374085650406">أنت تتبع توصية المشرف لهذا الإعداد.</translation> @@ -2488,7 +2483,7 @@ <translation id="4908811072292128752">فتح علامة تبويب جديدة لتصفح موقعي ويب في وقت واحد</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> +<translation id="4911714727432509308">ليست هناك أي إضافات تم تعيين اختصارات لوحة مفاتيح لها.</translation> <translation id="4912643508233590958">عمليات التنشيط من الوضع بعيد</translation> <translation id="491691592645955587">التبديل إلى متصفح آمن</translation> <translation id="4917385247580444890">قوية</translation> @@ -2695,7 +2690,6 @@ <translation id="5254368820972107711">عرض الملفات التي ستتم إزالتها</translation> <translation id="52550593576409946">تعذر إطلاق تطبيق Kiosk.</translation> <translation id="5255315797444241226">عبارة المرور التي أدخلتها غير صحيحة.</translation> -<translation id="5259571578888203461">عدم السماح للمواقع برؤية النصوص والصور التي تنسخها إلى الحافظة</translation> <translation id="5260508466980570042">للأسف، تعذر التحقق من البريد الإلكتروني أو كلمة المرور. يُرجى المحاولة مرة أخرى.</translation> <translation id="5261683757250193089">فتح في السوق الإلكتروني</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />الدخول إلى الملفات من أي مكان، حتى في وضع عدم الاتصال.<ph name="MARKUP_2" /> @@ -2734,7 +2728,7 @@ <translation id="5301751748813680278">جارٍ تسجيل الدخول كضيف.</translation> <translation id="5301954838959518834">موافق وأعي ذلك</translation> <translation id="5302048478445481009">اللغة</translation> -<translation id="5305688511332277257">لم يتم تثبيت أية شهادات</translation> +<translation id="5305688511332277257">لم يتم تثبيت أي شهادات</translation> <translation id="5308380583665731573">اتصال</translation> <translation id="5311260548612583999">ملف مفتاح خاص (اختياري):</translation> <translation id="5311304534597152726">تسجيل الدخول باسم</translation> @@ -3034,7 +3028,7 @@ <translation id="57646104491463491">تاريخ التعديل</translation> <translation id="5764797882307050727">يُرجى إخلاء بعض المساحة على جهازك.</translation> <translation id="5765425701854290211">عذرًا، حدث تلف لبعض الملفات ولم يتم التحديث بنجاح. غير أن ملفاتك المتزامنة آمنة.</translation> -<translation id="5765491088802881382">لا تتوفر أية شبكات</translation> +<translation id="5765491088802881382">لا تتوفر أي شبكات</translation> <translation id="5765780083710877561">الوصف:</translation> <translation id="5771816112378578655">الإعداد قيد التقديم...</translation> <translation id="5772265531560382923">{NUM_PAGES,plural, =1{يمكنك انتظار استجابة الصفحة أو الخروج منها.}zero{يمكنك انتظار استجابة الصفحات أو الخروج منها.}two{يمكنك انتظار استجابة الصفحتين أو الخروج منهما.}few{يمكنك انتظار استجابة الصفحات أو الخروج منها.}many{يمكنك انتظار استجابة الصفحات أو الخروج منها.}other{يمكنك انتظار استجابة الصفحات أو الخروج منها.}}</translation> @@ -3169,7 +3163,6 @@ <translation id="5972708806901999743">نقل إلى الأعلى</translation> <translation id="5972826969634861500">بدء <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">تصغير</translation> -<translation id="5975730206036440725">لا يمكن العثور على ملف PPD. تحقق من اتصال Chromebook بالإنترنت وحاول مرة أخرى.</translation> <translation id="5975792506968920132">النسبة المئوية لشحن البطارية</translation> <translation id="5976160379964388480">غير ذلك</translation> <translation id="5978264784700053212">مركز الرسائل</translation> @@ -3211,7 +3204,6 @@ <translation id="6042308850641462728">المزيد</translation> <translation id="6042850536017090003">انقر على إشعارات التطبيق.</translation> <translation id="6043317578411397101">يشارك <ph name="APP_NAME" /> علامة تبويب متصفح Chrome من خلال <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">تم.</translation> <translation id="6044805581023976844">يشارك <ph name="APP_NAME" /> علامة تبويب متصفح Chrome والصوت من خلال <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">الضغط مع الاستمرار على |<ph name="ACCELERATOR" />| للخروج من وضع ملء الشاشة</translation> <translation id="6049065490165456785">صور من الكاميرا الداخلية</translation> @@ -3379,7 +3371,6 @@ <translation id="6311220991371174222">تعذّر بدء تشغيل Chrome بسبب حدوث خطأ ما أثناء فتح ملفك الشخصي. حاول إعادة تشغيل Chrome.</translation> <translation id="6312403991423642364">خطأ غير معروف</translation> <translation id="6313641880021325787">الخروج من VR</translation> -<translation id="6314335155547195432">إنشاء كلمة المرور</translation> <translation id="6314819609899340042">لقد نجحت في تمكين ميزات تصحيح الأخطاء على هذا الجهاز <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation> <translation id="6315343732431721770">تم تغيير صفحات بدء التشغيل التابعة لك لإدراج <ph name="URL" />. لتعطيل الإضافات التي تغيّر صفحة بدء التشغيل، انقر على استعادة.</translation> <translation id="6315493146179903667">إحضار الكل للمقدمة</translation> @@ -3417,7 +3408,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">إعداد Smart Lock في Android</translation> <translation id="6374469231428023295">إعادة المحاولة</translation> -<translation id="6377158645544167202">يتعذر الاتصال بالطابعة. تحقق من تشغيل الطابعة واتصالها بجهاز Chromebook من خلال شبكة Wi-Fi أو مفتاح USB.</translation> <translation id="6380143666419481200">قبول ومتابعة</translation> <translation id="6383051423892982287">تشفير البيانات المتزامنة باستخدام <ph name="BEGIN_LINK" />عبارة مرور المزامنة<ph name="END_LINK" /></translation> <translation id="6384275966486438344">تغيير إعدادات البحث لـ: <ph name="SEARCH_HOST" /></translation> @@ -3574,7 +3564,6 @@ <translation id="6606070663386660533">علامة التبويب 8</translation> <translation id="6607272825297743757">معلومات الملف</translation> <translation id="6607831829715835317">المزيد من &الأدوات</translation> -<translation id="6610183966322615106">حدث خطأ أثناء إضافة طابعة</translation> <translation id="6612358246767739896">محتوى محمي</translation> <translation id="6613452264606394692">يمكنك الرجوع إلى هنا بسرعة بوضع إشارة على هذه الصفحة</translation> <translation id="6615455863669487791">عرضه</translation> @@ -3940,7 +3929,7 @@ <translation id="7222232353993864120">عنوان البريد الإلكتروني</translation> <translation id="7222373446505536781">F11</translation> <translation id="722363467515709460">تمكين مكبّر الشاشة</translation> -<translation id="7223775956298141902">عفوًا... ليست لديك أية إضافات :-(</translation> +<translation id="7223775956298141902">عفوًا... ليست لديك أي إضافات :-(</translation> <translation id="7225179976675429563">نوع الشبكة مفقود</translation> <translation id="7228479291753472782">معالجة الإعدادات التي تحدد ما إذا كان بإمكان مواقع الويب استخدام ميزات مثل المواقع الجغرافية والميكروفون والكاميرا، وغيرها</translation> <translation id="7229570126336867161">يلزم توفر EVDO</translation> @@ -4032,7 +4021,7 @@ <translation id="7384292194278095697">لم يعد هذا الجهاز مدعومًا</translation> <translation id="7385854874724088939">حدث خطأ ما أثناء الطباعة. يُرجى التحقق من الطابعة والمحاولة مرة أخرى.</translation> <translation id="7386824183915085801">سيتم إرسال إصدار Chrome ونظام التشغيل بالإضافة إلى - أية معلومات تختار تضمينها أعلاه. وفي حالة تضمين عنوان + أي معلومات تختار تضمينها أعلاه. وفي حالة تضمين عنوان بريدك الإلكتروني، فقد تتصل Google بك بشأن إرسال تقرير بالتعليقات. يتم استخدام هذه التعليقات في تشخيص المشكلات والمساعدة في تحسين Chrome. وستتمتع أي معلومات شخصية ترسلها، سواء أكانت صريحة أم ضمنية بالحماية @@ -4749,7 +4738,7 @@ <translation id="8561853412914299728"><ph name="TAB_TITLE" /> <ph name="EMOJI_PLAYING" /></translation> <translation id="8565650234829130278">محاولة الرجوع إلى الإصدار السابق من التطبيق.</translation> <translation id="8569002732135253578">يتم الآن طباعة <ph name="DOCUMENT_NAME" /></translation> -<translation id="8569682776816196752">لم يتم العثور على أية وجهات</translation> +<translation id="8569682776816196752">لم يتم العثور على أي وجهات</translation> <translation id="8569764466147087991">تحديد ملف لفتحه</translation> <translation id="8571213806525832805">الأسابيع الـ4 الأخيرة</translation> <translation id="8574990355410201600">السماح دومًا بتشغيل الصوت على <ph name="HOST" /></translation> @@ -5170,7 +5159,7 @@ <translation id="939736085109172342">مجلد جديد</translation> <translation id="941543339607623937">المفتاح الخاص غير صالح.</translation> <translation id="942532530371314860">يشارك <ph name="APP_NAME" /> علامة تبويب متصفح Chrome والصوت.</translation> -<translation id="942954117721265519">لا تتوفر أية صور في هذا الدليل.</translation> +<translation id="942954117721265519">لا تتوفر أي صور في هذا الدليل.</translation> <translation id="945522503751344254">إرسال تعليقات</translation> <translation id="951981865514037445">يريد <ph name="URL" /> استخدام موقع الجهاز.</translation> <translation id="952992212772159698">غير نشطة</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb index ec73bf5..f33b055 100644 --- a/chrome/app/resources/generated_resources_bg.xtb +++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">Включено – персонализирани настройки</translation> <translation id="1493892686965953381">Изчаква се <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033">Още <ph name="NUM_PRINTERS" /> налични устройства.</translation> -<translation id="1497284176235884849">Предоставеният PPD файл е невалиден.</translation> <translation id="1497522201463361063">„<ph name="FILE_NAME" />“ не може да се преименува. <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Неизвестно устройство [<ph name="VENDOR_ID" />: <ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Този профил на собственик трябва да е първият, в който да се влезе, при сесия с централизиран вход.</translation> @@ -1771,7 +1770,6 @@ <translation id="3697100740575341996">Системният ви администратор е деактивирал екстрите за Chrome за устройството ви. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">Имейл адрес</translation> <translation id="3702500414347826004">Страниците ви при стартиране бяха променени така, че да включват <ph name="URL" />.</translation> -<translation id="3703669627274482482">Извеждане на запитване, когато сайт иска да преглежда текста и изображенията, които копирате в буферната памет</translation> <translation id="370415077757856453">JavaScript е блокиран</translation> <translation id="3704331259350077894">Прекратяване на действието</translation> <translation id="3705722231355495246">-</translation> @@ -2119,7 +2117,6 @@ <translation id="4270393598798225102">Версия <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Няма съответствия</translation> <translation id="4275830172053184480">Рестартиране на устройството ви</translation> -<translation id="4276216215490044084">PPD файлът е твърде голям, за да бъде зареден. Максималният размер е 250 КБ.</translation> <translation id="4278390842282768270">Разрешено</translation> <translation id="4281844954008187215">Условия за ползване</translation> <translation id="4282196459431406533">Функцията Smart Lock е включена</translation> @@ -2199,7 +2196,6 @@ <translation id="4430369329743628066">Отметката бе добавена</translation> <translation id="443464694732789311">Напред</translation> <translation id="4439318412377770121">Искате ли да регистрирате „<ph name="DEVICE_NAME" />“ в Google Cloud Devices?</translation> -<translation id="4439612350502082674">Принтерът не може да бъде добавен. Рестартирайте и опитайте отново.</translation> <translation id="4441124369922430666">Искате ли това приложение да стартира автоматично при включването на компютъра?</translation> <translation id="444134486829715816">Разгъване...</translation> <translation id="4441548209689510310">Показване на опциите за проверка на правописа</translation> @@ -2430,7 +2426,6 @@ <translation id="4839303808932127586">&Запазване на видеоклипа като...</translation> <translation id="4839847978919684242">Избрани са <ph name="SELCTED_FILES_COUNT" /> елемента</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{още 1}other{още #}}</translation> -<translation id="4840626203080576849">Извеждане на запитване, когато сайт иска да преглежда текста и изображенията, които копирате в буферната памет (препоръчително)</translation> <translation id="4842976633412754305">Тази страница опитва да зареди скриптове от неудостоверени източници.</translation> <translation id="4844333629810439236">Други клавиатури</translation> <translation id="4846680374085650406">Следвате препоръката на администратора за тази настройка.</translation> @@ -2697,7 +2692,6 @@ <translation id="5254368820972107711">Вижте файловете за премахване</translation> <translation id="52550593576409946">Павилионното приложение не можа да се стартира.</translation> <translation id="5255315797444241226">Въвели сте грешен пропуск.</translation> -<translation id="5259571578888203461">Забраняване на сайтовете да виждат текста и изображенията, които копирате в буферната памет</translation> <translation id="5260508466980570042">За съжаление имейлът или паролата ви не можаха да бъдат потвърдени. Моля, опитайте отново.</translation> <translation id="5261683757250193089">Отваряне в уеб магазина</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Файловете ви ще са достъпни от всяко място дори когато сте офлайн.<ph name="MARKUP_2" /> @@ -3172,7 +3166,6 @@ <translation id="5972708806901999743">Преместване най-горе</translation> <translation id="5972826969634861500">Стартиране на <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Намаляване на мащаба</translation> -<translation id="5975730206036440725">PPD файлът не може да бъде намерен. Уверете се, че вашият Chromebook е онлайн, и опитайте отново.</translation> <translation id="5975792506968920132">Процент на зареждане на батерията</translation> <translation id="5976160379964388480">Други</translation> <translation id="5978264784700053212">Център за съобщения</translation> @@ -3214,7 +3207,6 @@ <translation id="6042308850641462728">Още</translation> <translation id="6042850536017090003">Докоснете „Известия за приложението“.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> споделя раздел в Chrome с/ъс „<ph name="TAB_NAME" />“.</translation> -<translation id="6043357981274314628">Готово!</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> споделя раздел в Chrome и звук с/ъс „<ph name="TAB_NAME" />“.</translation> <translation id="6049004884579590341">Натиснете и задръжте |<ph name="ACCELERATOR" />| за изход от режима на цял екран</translation> <translation id="6049065490165456785">Снимка от вътрешната камера</translation> @@ -3381,7 +3373,6 @@ <translation id="6311220991371174222">Chrome не може да се стартира, защото нещо се обърка при отварянето на потребителския ви профил. Опитайте да рестартирате браузъра.</translation> <translation id="6312403991423642364">Неизвестна мрежова грешка</translation> <translation id="6313641880021325787">ИЗХОД ОТ VR</translation> -<translation id="6314335155547195432">Генериране на парола</translation> <translation id="6314819609899340042">Успешно активирахте функциите за отстраняване на грешки на това устройство <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation> <translation id="6315343732431721770">Страниците ви при стартиране бяха променени така, че да включват <ph name="URL" />. За да деактивирате разширенията, които ги променят, кликнете върху „Възстановяване“.</translation> <translation id="6315493146179903667">Изнасяне на всичко на преден план</translation> @@ -3419,7 +3410,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Настройване на Smart Lock за Android</translation> <translation id="6374469231428023295">Нов опит</translation> -<translation id="6377158645544167202">Не може да се установи връзка с принтера. Уверете се, че е включен и е свързан с вашия Chromebook чрез Wi-Fi или USB.</translation> <translation id="6380143666419481200">Приемам и продължавам</translation> <translation id="6383051423892982287">Шифроване на синхронизираните данни със собствения ви <ph name="BEGIN_LINK" />пропуск за синхронизиране<ph name="END_LINK" /></translation> <translation id="6384275966486438344">Променете настройките си за търсене на: <ph name="SEARCH_HOST" /></translation> @@ -3576,7 +3566,6 @@ <translation id="6606070663386660533">Раздел 8</translation> <translation id="6607272825297743757">Информация за файла</translation> <translation id="6607831829715835317">Още инструме&нти</translation> -<translation id="6610183966322615106">Грешка при добавянето на принтера</translation> <translation id="6612358246767739896">Защитено съдържание</translation> <translation id="6613452264606394692">Връщайте се тук бързо, като запазите отметка към тази страница</translation> <translation id="6615455863669487791">Покажете ми</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb index f51f096..79728df 100644 --- a/chrome/app/resources/generated_resources_bn.xtb +++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -328,7 +328,6 @@ <translation id="1487335504823219454">চালু - কাস্টম সেটিংস</translation> <translation id="1493892686965953381"><ph name="LOAD_STATE_PARAMETER" />এর জন্য প্রতীক্ষারত...</translation> <translation id="1495486559005647033"><ph name="NUM_PRINTERS" />টি অন্যান্য উপলব্ধ ডিভাইস৷</translation> -<translation id="1497284176235884849">প্রদান করা PPD সঠিক নয়।</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" পুনঃনাম দিতে অসমর্থ৷ <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">অজানা ডিভাইস [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">একটি একাধিক প্রবেশ করুন সেশনে এই মালিক অ্যাকাউন্টটি প্রথম প্রবেশ করুন থাকা অ্যাকাউন্ট হতে হবে৷</translation> @@ -1772,7 +1771,6 @@ <translation id="3697100740575341996">আপনার IT প্রশাসক আপনার ডিভাইসের জন্য Chrome গুডিজগুলিকে অক্ষম করেছে৷ <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">ইমেল ঠিকানা</translation> <translation id="3702500414347826004"><ph name="URL" /> অন্তর্ভুক্ত করতে আপনার শুরুর পৃষ্ঠাগুলি পরিবর্তন করা হয়েছে।</translation> -<translation id="3703669627274482482">আপনি ক্লিপবোর্ডে যে টেক্সট এবং ছবি পেস্ট করেন সেগুলি কোনও সাইট দেখতে চাইলে আপনাকে জিজ্ঞেস করা হবে</translation> <translation id="370415077757856453">জাভাস্ক্রিপ্ট ব্লক করা হয়েছে</translation> <translation id="3704331259350077894">ক্রিয়াকলাপের বিরতি</translation> <translation id="3705722231355495246">-</translation> @@ -2119,7 +2117,6 @@ <translation id="4270393598798225102">সংস্করণ <ph name="NUMBER" /></translation> <translation id="4271396100647220620">কোনো মিল নেই</translation> <translation id="4275830172053184480">আপনার ডিভাইস বন্ধ করে চালু করুন</translation> -<translation id="4276216215490044084">বড় আকারের PPD লোড করা যাবে না। সর্বাধিক আকার 250kB।</translation> <translation id="4278390842282768270">মঞ্জুরিপ্রাপ্ত</translation> <translation id="4281844954008187215">পরিষেবার শর্তাদি</translation> <translation id="4282196459431406533">Smart Lock চালু আছে</translation> @@ -2199,7 +2196,6 @@ <translation id="4430369329743628066">বুকমার্ক যুক্ত হয়েছে</translation> <translation id="443464694732789311">অবিরত থাকুন</translation> <translation id="4439318412377770121">Google ক্লাউড ডিভাইসগুলিতে আপনি কি <ph name="DEVICE_NAME" /> নিবন্ধন করতে চান?</translation> -<translation id="4439612350502082674">প্রিন্টার যোগ করা যাচ্ছে না। রিস্টার্ট করে আবার চেষ্টা করুন।</translation> <translation id="4441124369922430666">আপনি কি মেশিন চালু হওয়ার সময় স্বয়ংক্রিয়ভাবে এই অ্যাপ্লিকেশানটিকে চালু করতে চান?</translation> <translation id="444134486829715816">প্রসারিত করুন...</translation> <translation id="4441548209689510310">বানান পরীক্ষার বিকল্পগুলি দেখান</translation> @@ -2430,7 +2426,6 @@ <translation id="4839303808932127586">এইরূপে ভিডিও সংর&ক্ষণ করুন...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> টি আইটেম নির্বাচিত</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{আরও ১টি}one{আরও #টি}other{আরও #টি}}</translation> -<translation id="4840626203080576849">আপনি ক্লিপবোর্ডে যে টেক্সট এবং ছবি পেস্ট করেন সেগুলি কোনও সাইট দেখতে চাইলে আপনাকে জিজ্ঞেস করা হবে (আমরা এটি সুপারিশ করছি)</translation> <translation id="4842976633412754305">এই পৃষ্ঠাটি প্রমাণীকৃত নয় এমন সূত্র থেকে স্ক্রিপ্ট লোড করার চেষ্টা করছে।</translation> <translation id="4844333629810439236">অন্য কীবোর্ডগুলি</translation> <translation id="4846680374085650406">আপনি এই সেটিংয়ের জন্য প্রশাসকের সুপারিশ অনুসরণ করছেন৷</translation> @@ -2696,7 +2691,6 @@ <translation id="5254368820972107711">যে ফাইলগুলি সরানো হবে সেগুলি দেখান</translation> <translation id="52550593576409946">Kiosk অ্যাপ্লিকেশান লঞ্চ করা যায়নি৷</translation> <translation id="5255315797444241226">আপনার প্রবেশ করানো পাসফ্রেজটি ভুল৷</translation> -<translation id="5259571578888203461">আপনি ক্লিপবোর্ডে যে টেক্সট এবং ছবি পেস্ট করেন সেগুলি কোনও সাইটকে দেখার অনুমতি দেবেন না</translation> <translation id="5260508466980570042">দুঃখিত, আপনার ইমেল বা পাসওয়ার্ড যাচাই হয়নি৷ দয়া করে আবার চেষ্টা করুন৷</translation> <translation id="5261683757250193089">ওয়েব দোকানে খুলুন</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />যে কোনো জায়গা থেকে এমনকি অফলাইনে থাকাকালীনও, ফাইলগুলি অ্যাক্সেস করুন।<ph name="MARKUP_2" /> @@ -3170,7 +3164,6 @@ <translation id="5972708806901999743">শীর্ষে যান</translation> <translation id="5972826969634861500"><ph name="PRODUCT_NAME" /> শুরু করুন</translation> <translation id="5975083100439434680">জুম কমান</translation> -<translation id="5975730206036440725">PPD খুঁজে পাওয়া যায়নি। আপনার Chromebook অনলাইন আছে কিনা সেটি দেখে নিয়ে আবার চেষ্টা করুন।</translation> <translation id="5975792506968920132">ব্যাটারি চার্জের শতাংশ মান</translation> <translation id="5976160379964388480">অন্যান্য</translation> <translation id="5978264784700053212">বার্তা কেন্দ্র</translation> @@ -3212,7 +3205,6 @@ <translation id="6042308850641462728">আরও</translation> <translation id="6042850536017090003">অ্যাপ বিজ্ঞপ্তিগুলিতে ট্যাপ করুন।</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> <ph name="TAB_NAME" /> এর সাথে একটি Chrome ট্যাব শেয়ার করছে।</translation> -<translation id="6043357981274314628">হয়ে গেছে!</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> <ph name="TAB_NAME" /> এর সাথে একটি Chrome ট্যাব এবং অডিও শেয়ার করছে।</translation> <translation id="6049004884579590341">সম্পূর্ণ স্ক্রিন মোড থেকে বেরোতে |<ph name="ACCELERATOR" />| টিপে ধরে রাখুন</translation> <translation id="6049065490165456785">অভ্যন্তরীণ ক্যামেরা থেকে ফটো</translation> @@ -3380,7 +3372,6 @@ <translation id="6311220991371174222">আপনার প্রোফাইল খোলার সময় কোনো সমস্যা হওয়ার কারণে Chrome চালু করা যাচ্ছে না। Chrome আবার চালু করার চেষ্টা করুন।</translation> <translation id="6312403991423642364">অজানা নেটওয়ার্ক ত্রুটি</translation> <translation id="6313641880021325787">VR থেকে বেরিয়ে যান</translation> -<translation id="6314335155547195432">পাসওয়ার্ড তৈরি করুন</translation> <translation id="6314819609899340042">আপনি সফলভাবে এই <ph name="IDS_SHORT_PRODUCT_NAME" /> ডিভাইসে ডিবাগিং বৈশিষ্ট্যগুলি সক্ষম করেছেন৷</translation> <translation id="6315343732431721770"><ph name="URL" /> অন্তর্ভুক্ত করতে আপনার শুরুর পৃষ্ঠা পরিবর্তন করা হয়েছে। যেসব অ্যাপ্লিকেশান আপনার শুরুর পৃষ্ঠার পরিবর্তন ঘটায় সেগুলিকে অক্ষম করতে ‘পুনরুদ্ধার করুন’ এ ক্লিক করুন।</translation> <translation id="6315493146179903667">সমস্ত সামনে আনুন</translation> @@ -3418,7 +3409,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Android এর জন্য Smart Lock সেট আপ করুন</translation> <translation id="6374469231428023295">আবার চেষ্টা করুন</translation> -<translation id="6377158645544167202">প্রিন্টারটি সংযুক্ত করা যায়নি। প্রিন্টারটি চালু আছে কিনা ও ওয়াই-ফাই এবং USB এর মাধ্যমে আপনার Chromebook এর সাথে সংযুক্ত আছে কিনা তা যাচাই করুন।</translation> <translation id="6380143666419481200">স্বীকার ও চালিয়ে যান</translation> <translation id="6383051423892982287">আপনার নিজস্ব <ph name="BEGIN_LINK" />সিঙ্ক পাসফ্রেজ<ph name="END_LINK" /> দিয়ে সিঙ্ক হওয়া ডেটা এনক্রিপ্ট করুন</translation> <translation id="6384275966486438344">আপনার অনুসন্ধানের সেটিংস এ পরিবর্তন করুন: <ph name="SEARCH_HOST" /></translation> @@ -3574,7 +3564,6 @@ <translation id="6606070663386660533">ট্যাব ৮</translation> <translation id="6607272825297743757">ফাইলের তথ্য</translation> <translation id="6607831829715835317">আরও সরঞ্জা&ম</translation> -<translation id="6610183966322615106">প্রিন্টার যোগ করার সময় ত্রুটি</translation> <translation id="6612358246767739896">সুরক্ষিত সামগ্রী</translation> <translation id="6613452264606394692">এই পৃষ্ঠাটি বুকমার্ক করে দ্রুত এখানে ফিরে আসুন</translation> <translation id="6615455863669487791">আমাকে দেখান</translation> @@ -3806,7 +3795,7 @@ <translation id="699220179437400583">স্বয়ংক্রিয়ভাবে Google এ নিরাপত্তার সম্ভাব্য লঙ্ঘনের ঘটনাগুলির বিস্তারিত বিবরণ অভিযোগ করুন।</translation> <translation id="6998711733709403587"><ph name="SELCTED_FOLDERS_COUNT" />টি ফোল্ডার নির্বাচিত</translation> <translation id="6998793565256476099">ভিডিও কনফারেন্সিংয়ের জন্য ডিভাইস যোগ করুন</translation> -<translation id="7000347579424117903">Ctrl, Alt অথবা Search ব্যবহার করতে হবে</translation> +<translation id="7000347579424117903">Ctrl, Alt অথবা Search বোতাম ব্যবহার করতে হবে</translation> <translation id="7002055706763150362">Chromebook এর জন্য Smart Lock সেট আপ করার জন্য Google এর এটি নিশ্চিত হওয়া প্রয়োজন যে—শুরু করতে আপনিই আপনার পাসওয়ার্ড লিখেছেন।</translation> <translation id="7002454948392136538">এই তত্ত্বাবধান করা ব্যবহারকারীর জন্য পরিচালক চয়ন করুন</translation> <translation id="7003339318920871147">ওয়েব ডেটাবেসসমূহ</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb index 6bb925f..f6877053 100644 --- a/chrome/app/resources/generated_resources_ca.xtb +++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">Sincronització activada: configuració personalitzada</translation> <translation id="1493892686965953381">S'està esperant <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033">Hi ha disponibles <ph name="NUM_PRINTERS" /> dispositius més.</translation> -<translation id="1497284176235884849">El fitxer PPD proporcionat no és vàlid.</translation> <translation id="1497522201463361063">No es pot canviar el nom a "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Dispositiu desconegut [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Aquest compte de propietari ha de ser el primer compte amb la sessió iniciada en un inici de sessió múltiple.</translation> @@ -1772,7 +1771,6 @@ <translation id="3697100740575341996">L'administrador de TI ha desactivat Chrome Goodies per al vostre dispositiu. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">Adreça electrònica</translation> <translation id="3702500414347826004">Les pàgines d'inici han canviat per incloure <ph name="URL" />.</translation> -<translation id="3703669627274482482">Pregunta'm quan un lloc web vulgui veure text i imatges copiats al porta-retalls</translation> <translation id="370415077757856453">S'ha bloquejat JavaScript</translation> <translation id="3704331259350077894">Cessament d'activitats</translation> <translation id="3705722231355495246">-</translation> @@ -1831,7 +1829,7 @@ <translation id="3783640748446814672">alt</translation> <translation id="3785308913036335955">Mostra la drecera d'aplicacions</translation> <translation id="3785852283863272759">Envia la ubicació de la pàgina per correu electrònic</translation> -<translation id="3786301125658655746">Esteu fora de línia</translation> +<translation id="3786301125658655746">No tens connexió</translation> <translation id="3788401245189148511">Podria:</translation> <translation id="3789841737615482174">Instal·la</translation> <translation id="3790146417033334899"><ph name="PLUGIN_NAME" /> només funciona a l'escriptori.</translation> @@ -2119,7 +2117,6 @@ <translation id="4270393598798225102">Versió <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Cap coincidència</translation> <translation id="4275830172053184480">Reinici del dispositiu</translation> -<translation id="4276216215490044084">No es poden carregar fitxers PPD grans. La mida màxima és de 250 kB.</translation> <translation id="4278390842282768270">Permeses</translation> <translation id="4281844954008187215">Termes i condicions</translation> <translation id="4282196459431406533">Smart Lock està activat</translation> @@ -2199,7 +2196,6 @@ <translation id="4430369329743628066">S'ha afegit a les adreces d'interès</translation> <translation id="443464694732789311">Continua</translation> <translation id="4439318412377770121">Voleu registrar <ph name="DEVICE_NAME" /> a Dispositius Google Cloud?</translation> -<translation id="4439612350502082674">La impressora no es pot afegir. Reinicia i torna-ho a provar.</translation> <translation id="4441124369922430666">Voleu que aquesta aplicació s'iniciï automàticament en engegar l'ordinador?</translation> <translation id="444134486829715816">Amplia...</translation> <translation id="4441548209689510310">Mostra les opcions del corrector ortogràfic</translation> @@ -2431,7 +2427,6 @@ <translation id="4839303808932127586">De&sa el vídeo com a...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> elements seleccionats</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{1 més}other{# més}}</translation> -<translation id="4840626203080576849">Pregunta'm quan un lloc web vulgui veure text i imatges copiats al porta-retalls (opció recomanada)</translation> <translation id="4842976633412754305">Aquesta pàgina està provant de carregar scripts de fonts no autenticades.</translation> <translation id="4844333629810439236">Altres teclats</translation> <translation id="4846680374085650406">Esteu seguint la recomanació de l'administració per a aquesta configuració.</translation> @@ -2699,7 +2694,6 @@ <translation id="5254368820972107711">Mostra els fitxers que cal suprimir</translation> <translation id="52550593576409946">L'aplicació Quiosc no es pot iniciar.</translation> <translation id="5255315797444241226">La frase de contrasenya que heu introduït no és correcta.</translation> -<translation id="5259571578888203461">No permetis que els llocs web vegin el text i les imatges que copies al porta-retalls</translation> <translation id="5260508466980570042">No s'ha pogut verificar el correu electrònic o la contrasenya. Torna-ho a provar.</translation> <translation id="5261683757250193089">Obre a Web Store</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Accediu a fitxers des de qualsevol lloc, fins i tot sense connexió.<ph name="MARKUP_2" /> @@ -3174,7 +3168,6 @@ <translation id="5972708806901999743">Mou a la part superior</translation> <translation id="5972826969634861500">Inicia <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Redueix</translation> -<translation id="5975730206036440725">No hem trobat el fitxer PPD. Comprova que Chromebook estigui en línia i torna-ho a provar.</translation> <translation id="5975792506968920132">Percentatge de pujada de la bateria</translation> <translation id="5976160379964388480">Altres</translation> <translation id="5978264784700053212">Centre de missatges</translation> @@ -3216,7 +3209,6 @@ <translation id="6042308850641462728">Més</translation> <translation id="6042850536017090003">Toca Notificacions d'aplicacions</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> està compartint una pestanya de Chrome amb <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Fet!</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> està compartint una pestanya de Chrome i àudio amb <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Mantén premut |<ph name="ACCELERATOR" />| per sortir del mode de pantalla completa</translation> <translation id="6049065490165456785">Foto de la càmera interna</translation> @@ -3383,7 +3375,6 @@ <translation id="6311220991371174222">Chrome no es pot iniciar perquè s'ha produït un error mentre obries el perfil. Prova de reiniciar Chrome.</translation> <translation id="6312403991423642364">Error de xarxa desconegut</translation> <translation id="6313641880021325787">SURT DEL MODE RV</translation> -<translation id="6314335155547195432">Genera una contrasenya</translation> <translation id="6314819609899340042">Heu activat correctament les funcions de depuració en aquest dispositiu <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation> <translation id="6315343732431721770">Les pàgines d'inici han canviat per incloure <ph name="URL" />. Per desactivar les extensions que canvien la pàgina d'inici, fes clic a Restaura.</translation> <translation id="6315493146179903667">Porta-ho tot al davant</translation> @@ -3421,7 +3412,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Configura Smart Lock per a Android</translation> <translation id="6374469231428023295">Torna-ho a provar</translation> -<translation id="6377158645544167202">La impressora no es pot connectar. Comprova que estigui encesa i connectada a Chromebook per Wi-Fi o USB.</translation> <translation id="6380143666419481200">Accepta i continua</translation> <translation id="6383051423892982287">Encripta les dades sincronitzades amb la teva <ph name="BEGIN_LINK" />frase de contrasenya de sincronització<ph name="END_LINK" /></translation> <translation id="6384275966486438344">Canvia la configuració de la cerca a: <ph name="SEARCH_HOST" /></translation> @@ -3577,7 +3567,6 @@ <translation id="6606070663386660533">Pestanya 8</translation> <translation id="6607272825297743757">Informació del fitxer</translation> <translation id="6607831829715835317">Més eine&s</translation> -<translation id="6610183966322615106">S'ha produït un error en afegir la impressora</translation> <translation id="6612358246767739896">Contingut protegit</translation> <translation id="6613452264606394692">Afegeix aquesta pàgina a les adreces d'interès per poder-hi tornar ràpidament</translation> <translation id="6615455863669487791">Mostra-m'ho</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb index 879c29f..f75cd94 100644 --- a/chrome/app/resources/generated_resources_cs.xtb +++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -328,7 +328,6 @@ <translation id="1487335504823219454">Zapnuto – vlastní nastavení</translation> <translation id="1493892686965953381">Čekání na <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033">Další dostupná zařízení: <ph name="NUM_PRINTERS" /></translation> -<translation id="1497284176235884849">Zadaný soubor PPD není platný.</translation> <translation id="1497522201463361063">Soubor „<ph name="FILE_NAME" />“ se nepodařilo přejmenovat. <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Neznámé zařízení [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Účet tohoto vlastníka musí být v relaci multiprofilu přihlášen jako první.</translation> @@ -1773,7 +1772,6 @@ <translation id="3697100740575341996">Váš správce IT pro vaše zařízení využití propagačních nabídek Chrome Goodies zakázal. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">E-mailová adresa</translation> <translation id="3702500414347826004">Mezi počáteční stránky byla přidána adresa <ph name="URL" />.</translation> -<translation id="3703669627274482482">Zeptat se, když chce web získat přístup k textu a obrázkům zkopírovaným do schránky</translation> <translation id="370415077757856453">Byl zablokován JavaScript</translation> <translation id="3704331259350077894">Ukončení operace</translation> <translation id="3705722231355495246">-</translation> @@ -2120,7 +2118,6 @@ <translation id="4270393598798225102">Verze <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Žádné shody</translation> <translation id="4275830172053184480">Restartovat zařízení</translation> -<translation id="4276216215490044084">Soubor PPD nelze načíst, protože je příliš velký. Maximální povolená velikost je 250 kB.</translation> <translation id="4278390842282768270">Povoleno</translation> <translation id="4281844954008187215">Smluvní podmínky</translation> <translation id="4282196459431406533">Funkce Smart Lock je zapnutá</translation> @@ -2200,7 +2197,6 @@ <translation id="4430369329743628066">Byla přidána záložka</translation> <translation id="443464694732789311">Pokračovat</translation> <translation id="4439318412377770121">Chcete zařízení <ph name="DEVICE_NAME" /> registrovat do služby Google Cloud Devices?</translation> -<translation id="4439612350502082674">Přidání tiskárny se nezdařilo. Proveďte restart a zkuste to znovu.</translation> <translation id="4441124369922430666">Chcete tuto aplikaci automaticky spustit, když se zařízení zapne?</translation> <translation id="444134486829715816">Rozbalit...</translation> <translation id="4441548209689510310">Zobrazit možnosti kontroly pravopisu</translation> @@ -2431,7 +2427,6 @@ <translation id="4839303808932127586">Uložit &video jako...</translation> <translation id="4839847978919684242">Vybrané položky: <ph name="SELCTED_FILES_COUNT" /></translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{1 další}few{# další}many{# další}other{# dalších}}</translation> -<translation id="4840626203080576849">Zeptat se, když chce web získat přístup k textu a obrázkům zkopírovaným do schránky (doporučeno)</translation> <translation id="4842976633412754305">Tato stránka se pokouší načíst skripty z neověřených zdrojů.</translation> <translation id="4844333629810439236">Jiné klávesnice</translation> <translation id="4846680374085650406">Řídíte se doporučením administrátora pro toto nastavení.</translation> @@ -2698,7 +2693,6 @@ <translation id="5254368820972107711">Zobrazit soubory, které budou odstraněny</translation> <translation id="52550593576409946">Spuštění aplikace pro režim veřejného terminálu se nezdařilo.</translation> <translation id="5255315797444241226">Zadaná heslová fráze není správná.</translation> -<translation id="5259571578888203461">Nepovolovat webům přístup k textu a obrázkům zkopírovaným do schránky</translation> <translation id="5260508466980570042">Litujeme, e-mailovou adresu nebo heslo nelze ověřit. Zkuste to prosím znovu.</translation> <translation id="5261683757250193089">Otevřít v Internetovém obchodu</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Získejte k souborům přístup odkudkoli, dokonce i v režimu offline.<ph name="MARKUP_2" /> @@ -3171,7 +3165,6 @@ <translation id="5972708806901999743">Přesunout nahoru</translation> <translation id="5972826969634861500">Spustit <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Oddálit</translation> -<translation id="5975730206036440725">Soubor PPD nebyl nalezen. Zkontrolujte, zda je Chromebook online, a zkuste to znovu.</translation> <translation id="5975792506968920132">Procento nabití baterie</translation> <translation id="5976160379964388480">Ostatní</translation> <translation id="5978264784700053212">Centrum zpráv</translation> @@ -3213,7 +3206,6 @@ <translation id="6042308850641462728">Více</translation> <translation id="6042850536017090003">Klepněte na Oznámení aplikací.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> sdílí kartu Chrome s kartou <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Hotovo.</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> sdílí kartu Chrome a zvuk s kartou <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Režim celé obrazovky ukončíte podržením klávesy |<ph name="ACCELERATOR" />|</translation> <translation id="6049065490165456785">Fotka z interního fotoaparátu</translation> @@ -3380,7 +3372,6 @@ <translation id="6311220991371174222">Chrome nelze spustit, protože při otevírání vašeho profilu došlo k chybě. Zkuste Chrome restartovat.</translation> <translation id="6312403991423642364">Neznámá chyba sítě</translation> <translation id="6313641880021325787">UKONČIT VIRTUÁLNÍ REALITU</translation> -<translation id="6314335155547195432">Vygenerovat heslo</translation> <translation id="6314819609899340042">V tomto zařízení <ph name="IDS_SHORT_PRODUCT_NAME" /> jste úspěšně aktivovali funkce ladění.</translation> <translation id="6315343732431721770">Mezi počáteční stránky byla přidána stránka <ph name="URL" />. Rozšíření, která počáteční stránku mění, můžete zakázat kliknutím na Obnovit.</translation> <translation id="6315493146179903667">Vše zobrazit navrchu</translation> @@ -3418,7 +3409,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Nastavení funkce Smart Lock pro Android</translation> <translation id="6374469231428023295">Zkusit znovu</translation> -<translation id="6377158645544167202">Tiskárnu nelze připojit. Zkontrolujte, zda je tiskárna zapnutá a připojená k Chromebooku přes Wi-Fi nebo USB.</translation> <translation id="6380143666419481200">Přijmout a pokračovat</translation> <translation id="6383051423892982287">Šifrovat synchronizovaná data pomocí vlastní <ph name="BEGIN_LINK" />heslové fráze pro synchronizaci<ph name="END_LINK" /></translation> <translation id="6384275966486438344">Změňte nastavení vyhledávání na: <ph name="SEARCH_HOST" /></translation> @@ -3575,7 +3565,6 @@ <translation id="6606070663386660533">Karta 8</translation> <translation id="6607272825297743757">Informace o souboru</translation> <translation id="6607831829715835317">Další nástro&je</translation> -<translation id="6610183966322615106">Při přidávání tiskárny došlo k chybě</translation> <translation id="6612358246767739896">Chráněný obsah</translation> <translation id="6613452264606394692">Přidejte si stránku do záložek, abyste sem mohli rychle přejít</translation> <translation id="6615455863669487791">Ukázat</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb index f1d152c..40f34a3 100644 --- a/chrome/app/resources/generated_resources_da.xtb +++ b/chrome/app/resources/generated_resources_da.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">Til – tilpassede indstillinger</translation> <translation id="1493892686965953381">Venter på <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> andre tilgængelige enheder.</translation> -<translation id="1497284176235884849">Den angivne PPD-fil er ugyldig.</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" kunne ikke omdøbes. <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Ukendt enhed [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Denne ejerkonto skal være den første konto, der logges ind på i en loginsession med flere brugere.</translation> @@ -1774,7 +1773,6 @@ <translation id="3697100740575341996">Din it-administrator har deaktiveret Chrome Goodies for din enhed. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">Mailadresse</translation> <translation id="3702500414347826004"><ph name="URL" /> blev inkluderet i dine opstartssider.</translation> -<translation id="3703669627274482482">Spørg om tilladelse, når et website vil se tekst og billeder, du kopierer til udklipsholderen</translation> <translation id="370415077757856453">JavaScript er blokeret</translation> <translation id="3704331259350077894">Standsning af handling</translation> <translation id="3705722231355495246">-</translation> @@ -2122,7 +2120,6 @@ <translation id="4270393598798225102">Version <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Ingen resultater</translation> <translation id="4275830172053184480">Genstart din enhed</translation> -<translation id="4276216215490044084">Den store PDD-fil kan ikke indlæses. Filen må ikke være større end 250 kB.</translation> <translation id="4278390842282768270">Tilladt</translation> <translation id="4281844954008187215">Servicevilkår</translation> <translation id="4282196459431406533">Smart Lock er slået til</translation> @@ -2202,7 +2199,6 @@ <translation id="4430369329743628066">Bogmærket er tilføjet</translation> <translation id="443464694732789311">Fortsæt</translation> <translation id="4439318412377770121">Vil du tilmelde <ph name="DEVICE_NAME" /> til Google Cloud-enheder?</translation> -<translation id="4439612350502082674">Printeren kan ikke tilføjes. Genstart, og prøv igen.</translation> <translation id="4441124369922430666">Skal denne app startes automatisk, når du tænder computeren?</translation> <translation id="444134486829715816">Udvid...</translation> <translation id="4441548209689510310">Vis indstillinger for stavekontrol</translation> @@ -2433,7 +2429,6 @@ <translation id="4839303808932127586">&Gem video som ...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> elementer valgt</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{1 anden}one{# anden}other{# andre}}</translation> -<translation id="4840626203080576849">Spørg om tilladelse, når et website vil se tekst og billeder, du kopierer til udklipsholderen (anbefales)</translation> <translation id="4842976633412754305">Denne side forsøger at indlæse scripts fra kilder, som ikke er godkendte.</translation> <translation id="4844333629810439236">Andre tastaturer</translation> <translation id="4846680374085650406">Du følger administratorens anbefaling for denne indstilling.</translation> @@ -2700,7 +2695,6 @@ <translation id="5254368820972107711">Vis de filer, der skal slettes</translation> <translation id="52550593576409946">Terminalapplikationen kunne ikke startes.</translation> <translation id="5255315797444241226">Den angivne adgangssætning er forkert.</translation> -<translation id="5259571578888203461">Tillad ikke, at websites kan se tekst og billeder, du kopierer til udklipsholderen</translation> <translation id="5260508466980570042">Din e-mail eller adgangskode blev ikke bekræftet. Prøv igen.</translation> <translation id="5261683757250193089">Åbn i Webshop</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Få adgang til filer overalt, også offline.<ph name="MARKUP_2" /> @@ -3174,7 +3168,6 @@ <translation id="5972708806901999743">Flyt til toppen</translation> <translation id="5972826969634861500">Start <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Zoom ud</translation> -<translation id="5975730206036440725">PDD-filen kan ikke findes. Tjek, at din Chromebook er online, og prøv igen.</translation> <translation id="5975792506968920132">Procentdel for batteriopladning</translation> <translation id="5976160379964388480">Andre</translation> <translation id="5978264784700053212">Meddelelsescenter</translation> @@ -3216,7 +3209,6 @@ <translation id="6042308850641462728">Mere</translation> <translation id="6042850536017090003">Tryk på Appunderretninger.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> deler en Chrome-fane med <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Udført</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> deler en Chrome-fane og lyd med <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Hold |<ph name="ACCELERATOR" />| nede for at afslutte fuld skærm</translation> <translation id="6049065490165456785">Billede fra internt kamera</translation> @@ -3384,7 +3376,6 @@ <translation id="6311220991371174222">Chrome kan ikke startes, da der gik noget galt ved åbningen af din profil. Prøv at genstarte Chrome.</translation> <translation id="6312403991423642364">Ukendt netværksfejl</translation> <translation id="6313641880021325787">LUK VR</translation> -<translation id="6314335155547195432">Generér adgangskode</translation> <translation id="6314819609899340042">Du har aktiveret fejlfindingsfunktioner på denne <ph name="IDS_SHORT_PRODUCT_NAME" />-enhed.</translation> <translation id="6315343732431721770"><ph name="URL" /> blev inkluderet i dine opstartssider. Hvis du vil deaktivere udvidelser, der ændrer din opstartsside, skal du klikke på Gendan.</translation> <translation id="6315493146179903667">Læg alle forrest</translation> @@ -3422,7 +3413,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Konfigurer Smart Lock til Android</translation> <translation id="6374469231428023295">Prøv igen</translation> -<translation id="6377158645544167202">Der kan ikke oprettes forbindelse til printeren. Tjek, at printeren er tændt og tilsluttet din Chromebook via Wi-Fi eller USB.</translation> <translation id="6380143666419481200">Godkend og fortsæt</translation> <translation id="6383051423892982287">Kryptér synkroniserede data med din egen <ph name="BEGIN_LINK" />adgangssætning til synkronisering<ph name="END_LINK" /></translation> <translation id="6384275966486438344">Skifte dine søgeindstillinger til: <ph name="SEARCH_HOST" /></translation> @@ -3579,7 +3569,6 @@ <translation id="6606070663386660533">Fane 8</translation> <translation id="6607272825297743757">Filoplysninger</translation> <translation id="6607831829715835317">F&lere værktøjer</translation> -<translation id="6610183966322615106">Der opstod en fejl ved tilføjelse af printeren</translation> <translation id="6612358246767739896">Beskyttet indhold</translation> <translation id="6613452264606394692">Tilføj denne side som bogmærke, så du hurtigt kan vende tilbage hertil</translation> <translation id="6615455863669487791">Vis mig</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb index 5265add..ef0b022c 100644 --- a/chrome/app/resources/generated_resources_de.xtb +++ b/chrome/app/resources/generated_resources_de.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">An – benutzerdefinierte Einstellungen</translation> <translation id="1493892686965953381">Warten auf <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> weitere Geräte verfügbar</translation> -<translation id="1497284176235884849">Die angegebene PPD ist ungültig.</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" kann nicht umbenannt werden. <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Unbekanntes Gerät [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Dieses Inhaberkonto muss in einer Sitzung mit Mehrfachanmeldung das erste angemeldete Konto sein.</translation> @@ -1770,7 +1769,6 @@ <translation id="3697100740575341996">Ihr IT-Administrator hat Chrome-Extras für Ihr Gerät deaktiviert. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">E-Mail-Adresse</translation> <translation id="3702500414347826004">Ihre "Beim Start"-Seiten wurden geändert und enthalten nun <ph name="URL" />.</translation> -<translation id="3703669627274482482">Nachfragen, wenn eine Website Texte und Bilder aus der Zwischenablage aufrufen möchte</translation> <translation id="370415077757856453">JavaScript blockiert</translation> <translation id="3704331259350077894">Vorgangsende</translation> <translation id="3705722231355495246">-</translation> @@ -2118,7 +2116,6 @@ <translation id="4270393598798225102">Version <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Keine Übereinstimmungen</translation> <translation id="4275830172053184480">Gerät neu starten</translation> -<translation id="4276216215490044084">Die große PPD kann nicht geladen werden. Die Maximalgröße beträgt 250 KB.</translation> <translation id="4278390842282768270">Zugelassen</translation> <translation id="4281844954008187215">Nutzungsbedingungen</translation> <translation id="4282196459431406533">Smart Lock ist aktiviert</translation> @@ -2198,7 +2195,6 @@ <translation id="4430369329743628066">Lesezeichen hinzugefügt</translation> <translation id="443464694732789311">Weiter</translation> <translation id="4439318412377770121">Möchten Sie <ph name="DEVICE_NAME" /> bei Google Cloud Devices registrieren?</translation> -<translation id="4439612350502082674">Drucker kann nicht hinzugefügt werden. Führen Sie einen Neustart aus und versuchen Sie es noch einmal.</translation> <translation id="4441124369922430666">Soll diese App beim Einschalten des Geräts automatisch gestartet werden?</translation> <translation id="444134486829715816">Anzeigen...</translation> <translation id="4441548209689510310">Optionen für die Rechtschreibprüfung anzeigen</translation> @@ -2429,7 +2425,6 @@ <translation id="4839303808932127586">Video &speichern unter...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> Elemente ausgewählt</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{1 mehr}other{# mehr}}</translation> -<translation id="4840626203080576849">Nachfragen, wenn eine Website Texte und Bilder aus Ihrer Zwischenablage aufrufen möchte (empfohlen)</translation> <translation id="4842976633412754305">Diese Seite versucht, Skripts aus nicht authentifizierten Quellen zu laden.</translation> <translation id="4844333629810439236">Sonstige Tastaturen</translation> <translation id="4846680374085650406">Sie folgen der Empfehlung des Administrators für diese Einstellung.</translation> @@ -2696,7 +2691,6 @@ <translation id="5254368820972107711">Zu entfernende Dateien anzeigen</translation> <translation id="52550593576409946">Die Kioskanwendung konnte nicht gestartet werden.</translation> <translation id="5255315797444241226">Sie haben eine ungültige Passphrase eingegeben.</translation> -<translation id="5259571578888203461">Websites keinen Zugriff auf Textinhalte und Bilder gewähren, die Sie in die Zwischenablage kopieren</translation> <translation id="5260508466980570042">Ihre E-Mail-Adresse oder Ihr Passwort konnte nicht bestätigt werden. Bitte versuchen Sie es erneut.</translation> <translation id="5261683757250193089">Im Web Store öffnen</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Greifen Sie überall auf Ihre Dateien zu, auch offline.<ph name="MARKUP_2" /> @@ -3170,7 +3164,6 @@ <translation id="5972708806901999743">An den Anfang verschieben</translation> <translation id="5972826969634861500"><ph name="PRODUCT_NAME" /> starten</translation> <translation id="5975083100439434680">Verkleinern</translation> -<translation id="5975730206036440725">PPD kann nicht gefunden werden. Prüfen Sie, ob Ihr Chromebook online ist und versuchen Sie es noch einmal.</translation> <translation id="5975792506968920132">Akkustand in %</translation> <translation id="5976160379964388480">Sonstige</translation> <translation id="5978264784700053212">Nachrichten-Center</translation> @@ -3212,7 +3205,6 @@ <translation id="6042308850641462728">Mehr</translation> <translation id="6042850536017090003">Tippen Sie auf "App-Benachrichtigungen".</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> teilt einen Chrome-Tab mit <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Fertig!</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> teilt einen Chrome-Tab und Audio mit <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">|<ph name="ACCELERATOR" />| gedrückt halten, um den Vollbildmodus zu beenden</translation> <translation id="6049065490165456785">Foto von interner Kamera</translation> @@ -3379,7 +3371,6 @@ <translation id="6311220991371174222">Chrome kann nicht gestartet werden, da beim Öffnen Ihres Profils ein Fehler aufgetreten ist. Versuchen Sie, Chrome neu zu starten.</translation> <translation id="6312403991423642364">Unbekannter Netzwerkfehler</translation> <translation id="6313641880021325787">VR BEENDEN</translation> -<translation id="6314335155547195432">Passwort erstellen</translation> <translation id="6314819609899340042">Sie haben die Debugging-Funktionen auf diesem <ph name="IDS_SHORT_PRODUCT_NAME" />-Gerät aktiviert.</translation> <translation id="6315343732431721770">Ihre "Beim Start"-Seiten wurden geändert und enthalten nun <ph name="URL" />. Zum Deaktivieren von Erweiterungen, die Ihre "Beim Start"-Seite ändern, klicken Sie auf "Wiederherstellen".</translation> <translation id="6315493146179903667">Alle nach vorn bringen</translation> @@ -3417,7 +3408,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Smart Lock für Android einrichten</translation> <translation id="6374469231428023295">Erneut versuchen</translation> -<translation id="6377158645544167202">Drucker kann nicht verbunden werden. Prüfen Sie, ob der Drucker aktiviert und über WLAN oder USB mit Ihrem Chromebook verbunden ist.</translation> <translation id="6380143666419481200">Akzeptieren und fortfahren</translation> <translation id="6383051423892982287">Alle synchronisierten Daten werden mit meiner eigenen <ph name="BEGIN_LINK" />Synchronisierungspassphrase<ph name="END_LINK" /> verschlüsselt</translation> <translation id="6384275966486438344">Sucheinstellungen in <ph name="SEARCH_HOST" /> ändern</translation> @@ -3574,7 +3564,6 @@ <translation id="6606070663386660533">Tab 8</translation> <translation id="6607272825297743757">Dateiinformationen</translation> <translation id="6607831829715835317">Weitere Too&ls</translation> -<translation id="6610183966322615106">Fehler beim Hinzufügen des Druckers</translation> <translation id="6612358246767739896">Geschützte Inhalte</translation> <translation id="6613452264606394692">Speichern Sie diese Seite als Lesezeichen, um schnell wieder hierher zurückzukehren</translation> <translation id="6615455863669487791">Zeigen</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb index 9141ecd..b247ecb 100644 --- a/chrome/app/resources/generated_resources_el.xtb +++ b/chrome/app/resources/generated_resources_el.xtb
@@ -328,7 +328,6 @@ <translation id="1487335504823219454">Ενεργοποίηση - προσαρμοσμένες ρυθμίσεις</translation> <translation id="1493892686965953381">Αναμονή για <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> ακόμα διαθέσιμες συσκευές.</translation> -<translation id="1497284176235884849">Το παρεχόμενο PPD δεν είναι έγκυρο.</translation> <translation id="1497522201463361063">Δεν είναι δυνατή η μετονομασία του "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Άγνωστη συσκευή [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Αυτός ο λογαριασμός κατόχου θα πρέπει να είναι ο πρώτος συνδεδεμένος λογαριασμός σε μια περίοδο σύνδεσης πολλαπλών συνδέσεων.</translation> @@ -1775,7 +1774,6 @@ <translation id="3697100740575341996">Ο διαχειριστής τεχνολογιών πληροφορικής έχει απενεργοποιήσει τις κορυφαίες λειτουργίες του Chrome για τη συσκευή σας. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">Διεύθυνση ηλεκτρονικού ταχυδρομείου</translation> <translation id="3702500414347826004">Η σελίδα εκκίνησής σας άλλαξε ώστε να συμπεριλάβει το <ph name="URL" />.</translation> -<translation id="3703669627274482482">Να γίνεται ερώτηση όταν ένας ιστότοπος θέλει να δει κείμενο και εικόνες που αντιγράφετε στο πρόχειρο</translation> <translation id="370415077757856453">Η JavaScript αποκλείστηκε</translation> <translation id="3704331259350077894">Παύση λειτουργίας</translation> <translation id="3705722231355495246">-</translation> @@ -2123,7 +2121,6 @@ <translation id="4270393598798225102">Έκδοση <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Δεν υπάρχουν αντιστοιχίες</translation> <translation id="4275830172053184480">Επανεκκινήστε τη συσκευή σας</translation> -<translation id="4276216215490044084">Δεν είναι δυνατή η φόρτωση μεγάλου PPD. Το μέγιστο μέγεθος είναι 250 KB.</translation> <translation id="4278390842282768270">Επιτρέπεται</translation> <translation id="4281844954008187215">Όροι Παροχής Υπηρεσιών</translation> <translation id="4282196459431406533">Το Smart Lock είναι ενεργοποιημένο</translation> @@ -2203,7 +2200,6 @@ <translation id="4430369329743628066">Προστέθηκε σελιδοδείκτης</translation> <translation id="443464694732789311">Συνέχεια</translation> <translation id="4439318412377770121">Θέλετε να κάνατε εγγραφή του <ph name="DEVICE_NAME" /> στις Συσκευές Google Cloud;</translation> -<translation id="4439612350502082674">Δεν είναι δυνατή η προσθήκη του εκτυπωτή. Επανεκκινήστε και δοκιμάστε ξανά.</translation> <translation id="4441124369922430666">Θέλετε να ξεκινά αυτόματα αυτή η εφαρμογή όταν η συσκευή τίθεται σε λειτουργία;</translation> <translation id="444134486829715816">Ανάπτυξη...</translation> <translation id="4441548209689510310">Εμφάνιση επιλογών ορθογραφικού ελέγχου</translation> @@ -2434,7 +2430,6 @@ <translation id="4839303808932127586">Αποθήκευση& βίντεο ως...</translation> <translation id="4839847978919684242">Έχουν επιλεγεί <ph name="SELCTED_FILES_COUNT" /> στοιχεία</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{1 ακόμη}other{# ακόμη}}</translation> -<translation id="4840626203080576849">Να γίνεται ερώτηση όταν ένας ιστότοπος θέλει να δει κείμενο και εικόνες που αντιγράφετε στο πρόχειρο (συνιστάται)</translation> <translation id="4842976633412754305">Αυτή η σελίδα προσπαθεί να φορτώσει σενάρια από μη εξουσιοδοτημένες πηγές.</translation> <translation id="4844333629810439236">Άλλα πληκτρολόγια</translation> <translation id="4846680374085650406">Ακολουθείτε την πρόταση του διαχειριστή για αυτήν τη ρύθμιση.</translation> @@ -2701,7 +2696,6 @@ <translation id="5254368820972107711">Εμφάνιση αρχείων για κατάργηση</translation> <translation id="52550593576409946">Δεν ήταν δυνατή η εκκίνηση της εφαρμογής Kiosk.</translation> <translation id="5255315797444241226">Η φράση πρόσβασης που έχετε εισαγάγει είναι εσφαλμένη.</translation> -<translation id="5259571578888203461">Να μην επιτρέπεται στους ιστοτόπους να βλέπουν κείμενο και εικόνες που αντιγράφετε στο πρόχειρο</translation> <translation id="5260508466980570042">Λυπούμαστε, δεν ήταν δυνατή η επαλήθευση της διεύθυνσής σας ηλεκτρονικού ταχυδρομείου ή του κωδικού πρόσβασής σας. Δοκιμάστε ξανά.</translation> <translation id="5261683757250193089">Άνοιγμα στο Web Store</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Αποκτήστε πρόσβαση στα αρχεία σας από οπουδήποτε, ακόμη και εκτός σύνδεσης.<ph name="MARKUP_2" /> @@ -3176,7 +3170,6 @@ <translation id="5972708806901999743">Μετακίνηση στην κορυφή</translation> <translation id="5972826969634861500">Έναρξη του <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Σμίκρυνση</translation> -<translation id="5975730206036440725">Δεν είναι δυνατή η εύρεση του PPD. Βεβαιωθείτε ότι το Chromebook σας είναι συνδεδεμένο και δοκιμάστε ξανά.</translation> <translation id="5975792506968920132">Ποσοστό φόρτισης μπαταρίας</translation> <translation id="5976160379964388480">Άλλα</translation> <translation id="5978264784700053212">Κέντρο μηνυμάτων</translation> @@ -3218,7 +3211,6 @@ <translation id="6042308850641462728">Περισσότερα</translation> <translation id="6042850536017090003">Πατήστε στις Ειδοποιήσεις εφαρμογών.</translation> <translation id="6043317578411397101">Η εφαρμογή <ph name="APP_NAME" /> μοιράζεται μια καρτέλα Chrome με το <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Τέλος!</translation> <translation id="6044805581023976844">Η εφαρμογή <ph name="APP_NAME" /> μοιράζεται μια καρτέλα Chrome και ήχο με το <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Πατήστε παρατεταμένα το πλήκτρο |<ph name="ACCELERATOR" />|, για να εξέλθετε από την πλήρη οθόνη</translation> <translation id="6049065490165456785">Φωτογραφία από την εσωτερική φωτογραφική μηχανή</translation> @@ -3385,7 +3377,6 @@ <translation id="6311220991371174222">Η εκκίνηση του Chrome δεν είναι δυνατή επειδή προέκυψε ένα πρόβλημα κατά το άνοιγμα του προφίλ σας. Δοκιμάστε να επανεκκινήσετε τον Chrome.</translation> <translation id="6312403991423642364">Άγνωστο σφάλμα δικτύου</translation> <translation id="6313641880021325787">ΕΞΟΔΟΣ ΑΠΟ VR</translation> -<translation id="6314335155547195432">Δημ.κωδ.πρόσβασης</translation> <translation id="6314819609899340042">Έχετε ενεργοποιήσει με επιτυχία τις λειτουργίες εντοπισμού σφαλμάτων σε αυτήν τη συσκευή <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation> <translation id="6315343732431721770">Οι σελίδες εκκίνησής σας άλλαξαν ώστε να συμπεριλάβουν <ph name="URL" />. Για να απενεργοποιήσετε τις επεκτάσεις που αλλάζουν τη σελίδα εκκίνησής σας, κάντε κλικ στην "Επαναφορά".</translation> <translation id="6315493146179903667">Μεταφορά Όλων στο Προσκήνιο</translation> @@ -3423,7 +3414,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Ρυθμίστε το Smart Lock για το Android</translation> <translation id="6374469231428023295">Δοκιμάστε ξανά</translation> -<translation id="6377158645544167202">Δεν είναι δυνατή η σύνδεση του εκτυπωτή. Βεβαιωθείτε ότι ο εκτυπωτής είναι ενεργοποιημένος και ότι είναι συνδεδεμένος στο Chromebook μέσω Wi-Fi ή USB.</translation> <translation id="6380143666419481200">Αποδοχή και συνέχεια</translation> <translation id="6383051423892982287">Κρυπτογράφηση συγχρονισμένων δεδομένων με τη δική σας <ph name="BEGIN_LINK" />φράση πρόσβασης συγχρονισμού<ph name="END_LINK" /></translation> <translation id="6384275966486438344">Αλλαγή των ρυθμίσεων αναζήτησης σε: <ph name="SEARCH_HOST" /></translation> @@ -3580,7 +3570,6 @@ <translation id="6606070663386660533">Καρτέλα 8</translation> <translation id="6607272825297743757">Πληροφορίες αρχείου</translation> <translation id="6607831829715835317">Περισσότερα εργαλεία</translation> -<translation id="6610183966322615106">Σφάλμα κατά την προσθήκη εκτυπωτή</translation> <translation id="6612358246767739896">Προστατευμένο περιεχόμενο</translation> <translation id="6613452264606394692">Προσθέστε σελιδοδείκτη σε αυτήν τη σελίδα για να επιστρέψετε εδώ γρήγορα</translation> <translation id="6615455863669487791">Εμφάνιση</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb index 6fe04a9..975c92f 100644 --- a/chrome/app/resources/generated_resources_en-GB.xtb +++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -328,7 +328,6 @@ <translation id="1487335504823219454">On – customised settings</translation> <translation id="1493892686965953381">Waiting for <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> other available devices.</translation> -<translation id="1497284176235884849">Provided PPD is invalid.</translation> <translation id="1497522201463361063">Unable to rename "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Unknown device [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">This owner account has to be the first signed-in account in a multiple sign-in session.</translation> @@ -1774,7 +1773,6 @@ <translation id="3697100740575341996">Your IT administrator has disabled Chrome Goodies for your device. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">Email address</translation> <translation id="3702500414347826004">Your start-up pages were changed to include <ph name="URL" />.</translation> -<translation id="3703669627274482482">Ask when a site wants to see text and images that you copy to the clipboard</translation> <translation id="370415077757856453">JavaScript blocked</translation> <translation id="3704331259350077894">Cessation of Operation</translation> <translation id="3705722231355495246">-</translation> @@ -2122,7 +2120,6 @@ <translation id="4270393598798225102">Version <ph name="NUMBER" /></translation> <translation id="4271396100647220620">No matches</translation> <translation id="4275830172053184480">Restart your device</translation> -<translation id="4276216215490044084">Can't load large PPD. Maximum size is 250 KB.</translation> <translation id="4278390842282768270">Allowed</translation> <translation id="4281844954008187215">Terms of Service</translation> <translation id="4282196459431406533">Smart Lock is turned on</translation> @@ -2202,7 +2199,6 @@ <translation id="4430369329743628066">Bookmark added</translation> <translation id="443464694732789311">Continue</translation> <translation id="4439318412377770121">Do you wish to register <ph name="DEVICE_NAME" /> to Google Cloud Devices?</translation> -<translation id="4439612350502082674">Can't add printer. Restart and try again.</translation> <translation id="4441124369922430666">Do you want to automatically start this app when the machine turns on?</translation> <translation id="444134486829715816">Expand...</translation> <translation id="4441548209689510310">Show spell check options</translation> @@ -2433,7 +2429,6 @@ <translation id="4839303808932127586">Sa&ve video as...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> items selected</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{One more}other{# more}}</translation> -<translation id="4840626203080576849">Ask when a site wants to see text and images that you copy to the clipboard (recommended)</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> @@ -2700,7 +2695,6 @@ <translation id="5254368820972107711">Show files to be removed</translation> <translation id="52550593576409946">Kiosk application could not be launched.</translation> <translation id="5255315797444241226">The passphrase that you've entered is incorrect.</translation> -<translation id="5259571578888203461">Do not allow sites to see text and images that you copy to the clipboard</translation> <translation id="5260508466980570042">Sorry, your email or password could not be verified. Please try again.</translation> <translation id="5261683757250193089">Open in Web Store</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Access files from everywhere, even offline.<ph name="MARKUP_2" /> @@ -3174,7 +3168,6 @@ <translation id="5972708806901999743">Move to the top</translation> <translation id="5972826969634861500">Start <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Zoom out</translation> -<translation id="5975730206036440725">Can't find PPD. Check that your Chromebook is online and try again.</translation> <translation id="5975792506968920132">Battery Charge Percentage</translation> <translation id="5976160379964388480">Others</translation> <translation id="5978264784700053212">Message centre</translation> @@ -3216,7 +3209,6 @@ <translation id="6042308850641462728">More</translation> <translation id="6042850536017090003">Tap on App notifications.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> is sharing a Chrome tab with <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Done!</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> is sharing a Chrome tab and audio with <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Press and hold |<ph name="ACCELERATOR" />| to exit full screen</translation> <translation id="6049065490165456785">Photo from internal camera</translation> @@ -3383,7 +3375,6 @@ <translation id="6311220991371174222">Cannot start Chrome because something went wrong when opening your profile. Try to restart Chrome.</translation> <translation id="6312403991423642364">Unknown network error</translation> <translation id="6313641880021325787">EXIT VR</translation> -<translation id="6314335155547195432">Generate Password</translation> <translation id="6314819609899340042">You have successfully enabled debugging features on this <ph name="IDS_SHORT_PRODUCT_NAME" /> device.</translation> <translation id="6315343732431721770">Your start-up pages were changed to include <ph name="URL" />. To disable extensions that change your start-up page, click Restore.</translation> <translation id="6315493146179903667">Bring All to Front</translation> @@ -3421,7 +3412,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Set up Smart Lock for Android</translation> <translation id="6374469231428023295">Try Again</translation> -<translation id="6377158645544167202">Can't connect printer. Check that the printer is turned on and is connected to your Chromebook by Wi-Fi or USB.</translation> <translation id="6380143666419481200">Accept and continue</translation> <translation id="6383051423892982287">Encrypt synced data with your own <ph name="BEGIN_LINK" />sync passphrase<ph name="END_LINK" /></translation> <translation id="6384275966486438344">Change your search settings to: <ph name="SEARCH_HOST" /></translation> @@ -3578,7 +3568,6 @@ <translation id="6606070663386660533">Tab 8</translation> <translation id="6607272825297743757">File info</translation> <translation id="6607831829715835317">More too&ls</translation> -<translation id="6610183966322615106">Error adding printer</translation> <translation id="6612358246767739896">Protected content</translation> <translation id="6613452264606394692">Get back here fast by bookmarking this page</translation> <translation id="6615455863669487791">Show me</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb index 089fe79..689efbe 100644 --- a/chrome/app/resources/generated_resources_es-419.xtb +++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">Activado: Configuración personalizada</translation> <translation id="1493892686965953381">Esperando <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033">Hay otros <ph name="NUM_PRINTERS" /> dispositivos disponibles.</translation> -<translation id="1497284176235884849">El PPD proporcionado no es válido.</translation> <translation id="1497522201463361063">No se puede cambiar el nombre de "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Dispositivo desconocido [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">El propietario de esta cuenta requiere que sea la primera a la que se acceda al crear una sesión de acceso múltiple.</translation> @@ -1771,7 +1770,6 @@ <translation id="3697100740575341996">El administrador de TI inhabilitó los accesorios de Chrome para tu dispositivo. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">Dirección de correo electrónico</translation> <translation id="3702500414347826004">Tus páginas de inicio se cambiaron para incluir <ph name="URL" />.</translation> -<translation id="3703669627274482482">Preguntarme cuando un sitio desee ver el texto y las imágenes que copio en el portapapeles</translation> <translation id="370415077757856453">Se bloqueó JavaScript</translation> <translation id="3704331259350077894">Cese de la operación</translation> <translation id="3705722231355495246">-</translation> @@ -2119,7 +2117,6 @@ <translation id="4270393598798225102">Versión <ph name="NUMBER" /></translation> <translation id="4271396100647220620">No hay coincidencias</translation> <translation id="4275830172053184480">Reiniciar tu dispositivo</translation> -<translation id="4276216215490044084">No se puede cargar archivos PPD grandes. El tamaño máximo es 250 kB.</translation> <translation id="4278390842282768270">Permitido</translation> <translation id="4281844954008187215">Condiciones del servicio</translation> <translation id="4282196459431406533">Smart Lock está activado</translation> @@ -2199,7 +2196,6 @@ <translation id="4430369329743628066">Se agregó el marcador</translation> <translation id="443464694732789311">Continuar</translation> <translation id="4439318412377770121">¿Quieres registrar el dispositivo <ph name="DEVICE_NAME" /> en Google Cloud Devices?</translation> -<translation id="4439612350502082674">No se puede agregar la impresora. Reinicia el dispositivo y vuelve a intentarlo.</translation> <translation id="4441124369922430666">¿Quieres que esta aplicación se inicie de forma automática cuando se encienda el equipo?</translation> <translation id="444134486829715816">Mostrar...</translation> <translation id="4441548209689510310">Mostrar opciones de corrector ortográfico</translation> @@ -2430,7 +2426,6 @@ <translation id="4839303808932127586">Guardar video como...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> elementos seleccionados</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{1 más}other{# más}}</translation> -<translation id="4840626203080576849">Preguntarme cuando un sitio desee ver el texto y las imágenes que copio en el portapapeles (recomendado)</translation> <translation id="4842976633412754305">Esta página está tratando de cargar scripts de fuentes no autenticadas.</translation> <translation id="4844333629810439236">Otros teclados</translation> <translation id="4846680374085650406">Estás siguiendo la recomendación del administrador para esta configuración.</translation> @@ -2697,7 +2692,6 @@ <translation id="5254368820972107711">Mostrar los archivos que se quitarán</translation> <translation id="52550593576409946">No se pudo iniciar la aplicación del kiosco.</translation> <translation id="5255315797444241226">La frase de contraseña que ingresaste es incorrecta.</translation> -<translation id="5259571578888203461">No permitir que los sitios vean el texto ni las imágenes que copias al portapapeles</translation> <translation id="5260508466980570042">No es posible verificar tu correo electrónico o contraseña. Inténtalo nuevamente.</translation> <translation id="5261683757250193089">Abrir en Web Store</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Accede a los archivos desde cualquier lugar, incluso sin conexión.<ph name="MARKUP_2" /> @@ -3171,7 +3165,6 @@ <translation id="5972708806901999743">Mover al principio</translation> <translation id="5972826969634861500">Comienzo <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Alejar</translation> -<translation id="5975730206036440725">No se puede encontrar el PPD. Comprueba que tu Chromebook esté conectada y vuelve a intentarlo.</translation> <translation id="5975792506968920132">Porcentaje de carga de batería</translation> <translation id="5976160379964388480">Otros</translation> <translation id="5978264784700053212">Centro de mensajes</translation> @@ -3213,7 +3206,6 @@ <translation id="6042308850641462728">Más</translation> <translation id="6042850536017090003">Presiona Notificaciones de apps.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> comparte una pestaña de Chrome con <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Listo</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> comparte una pestaña de Chrome y audio con <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Mantén presionada la tecla |<ph name="ACCELERATOR" />| para salir de la pantalla completa</translation> <translation id="6049065490165456785">Foto de la cámara interna</translation> @@ -3380,7 +3372,6 @@ <translation id="6311220991371174222">No se puede iniciar Chrome porque se produjo un error al abrir tu perfil. Intenta reiniciar Chrome.</translation> <translation id="6312403991423642364">Error de red desconocido</translation> <translation id="6313641880021325787">SALIR DE RV</translation> -<translation id="6314335155547195432">Generar contraseña</translation> <translation id="6314819609899340042">Habilitaste correctamente las funciones de depuración en este dispositivo <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation> <translation id="6315343732431721770">Tus páginas de inicio se cambiaron a <ph name="URL" />. Para inhabilitar las extensiones que cambian la página de inicio, haz clic en Restaurar.</translation> <translation id="6315493146179903667">Traer todo adelante</translation> @@ -3418,7 +3409,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Configurar Smart Lock para Android</translation> <translation id="6374469231428023295">Volver a intentar</translation> -<translation id="6377158645544167202">No se puede conectar la impresora. Comprueba que esté encendida y conectada a la Chromebook mediante Wi-Fi o USB.</translation> <translation id="6380143666419481200">Aceptar y continuar</translation> <translation id="6383051423892982287">Encriptar los datos sincronizados con tu propia <ph name="BEGIN_LINK" />frase de contraseña de sincronización<ph name="END_LINK" /></translation> <translation id="6384275966486438344">Cambiar la configuración de búsqueda por <ph name="SEARCH_HOST" /></translation> @@ -3575,7 +3565,6 @@ <translation id="6606070663386660533">Pestaña 8</translation> <translation id="6607272825297743757">Información del archivo</translation> <translation id="6607831829715835317">Más herramientas</translation> -<translation id="6610183966322615106">Se produjo un error al agregar la impresora</translation> <translation id="6612358246767739896">Contenido protegido</translation> <translation id="6613452264606394692">Para regresar aquí rápidamente, agrega esta página a favoritos</translation> <translation id="6615455863669487791">Mostrarme</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb index 17e36c2..cb9c144 100644 --- a/chrome/app/resources/generated_resources_es.xtb +++ b/chrome/app/resources/generated_resources_es.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">Activada: configuración personalizada</translation> <translation id="1493892686965953381">Esperando <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033">Otros <ph name="NUM_PRINTERS" /> dispositivos disponibles.</translation> -<translation id="1497284176235884849">El archivo PPD proporcionado no es válido</translation> <translation id="1497522201463361063">No se puede cambiar el nombre del archivo "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Dispositivo desconocido [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">La cuenta de este propietario debe ser la primera cuenta que ha iniciado sesión en un inicio de sesión múltiple.</translation> @@ -1774,7 +1773,6 @@ <translation id="3697100740575341996">El administrador de TI ha inhabilitado el canjeo de ofertas de Chrome en tu dispositivo. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">Dirección de correo electrónico</translation> <translation id="3702500414347826004">Tus páginas de inicio se han cambiado para incluir <ph name="URL" />.</translation> -<translation id="3703669627274482482">Preguntar cuando un sitio web quiera ver el texto y las imágenes que copias en el portapapeles</translation> <translation id="370415077757856453">JavaScript bloqueado</translation> <translation id="3704331259350077894">Cese de la operación</translation> <translation id="3705722231355495246">-</translation> @@ -2121,7 +2119,6 @@ <translation id="4270393598798225102">Versión <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Sin resultados</translation> <translation id="4275830172053184480">Reiniciar tu dispositivo</translation> -<translation id="4276216215490044084">No se pueden cargar archivos PPD grandes. El tamaño máximo es 250 kB.</translation> <translation id="4278390842282768270">Permitido</translation> <translation id="4281844954008187215">Condiciones del servicio</translation> <translation id="4282196459431406533">Smart Lock está activado</translation> @@ -2201,7 +2198,6 @@ <translation id="4430369329743628066">Añadida a Marcadores</translation> <translation id="443464694732789311">Continuar</translation> <translation id="4439318412377770121">¿Quieres registrar <ph name="DEVICE_NAME" /> en Google Cloud Devices?</translation> -<translation id="4439612350502082674">No se puede añadir la impresora. Reinicia y vuelve a intentarlo.</translation> <translation id="4441124369922430666">¿Quieres que esta aplicación se inicie de forma automática cuando se active el ordenador?</translation> <translation id="444134486829715816">Ampliar...</translation> <translation id="4441548209689510310">Mostrar opciones de revisión ortográfica</translation> @@ -2432,7 +2428,6 @@ <translation id="4839303808932127586">Gu&ardar vídeo como...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> elementos seleccionados</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{1 más}other{# más}}</translation> -<translation id="4840626203080576849">Preguntar cuando un sitio web quiera ver el texto y las imágenes que copias en el portapapeles (recomendado)</translation> <translation id="4842976633412754305">Esta página está intentando cargar scripts de fuentes no autorizadas.</translation> <translation id="4844333629810439236">Otros teclados</translation> <translation id="4846680374085650406">Estás siguiendo la recomendación del administrador para esta opción.</translation> @@ -2698,7 +2693,6 @@ <translation id="5254368820972107711">Mostrar archivos que se van a eliminar</translation> <translation id="52550593576409946">La aplicación de kiosco no se ha podido iniciar.</translation> <translation id="5255315797444241226">La frase de contraseña introducida no es correcta.</translation> -<translation id="5259571578888203461">No permitir que los sitios web vean el texto y las imágenes que copias en el portapapeles</translation> <translation id="5260508466980570042">Tu dirección de correo electrónico y tu contraseña no se han podido verificar. Vuelve a intentarlo.</translation> <translation id="5261683757250193089">Abrir en Web Store</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Accede a los archivos desde cualquier lugar, incluso sin conexión.<ph name="MARKUP_2" /> @@ -3172,7 +3166,6 @@ <translation id="5972708806901999743">Mover al principio</translation> <translation id="5972826969634861500">Iniciar <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Reducir</translation> -<translation id="5975730206036440725">No se encuentra el archivo PPD. Comprueba que el Chromebook esté conectado y vuelve a intentarlo.</translation> <translation id="5975792506968920132">Porcentaje de carga de batería</translation> <translation id="5976160379964388480">Otros</translation> <translation id="5978264784700053212">Centro de mensajes</translation> @@ -3214,7 +3207,6 @@ <translation id="6042308850641462728">Más</translation> <translation id="6042850536017090003">Toca Notificaciones de aplicaciones.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> está compartiendo una pestaña de Chrome con <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Listo.</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> está compartiendo audio y una pestaña de Chrome con <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Mantén pulsado |<ph name="ACCELERATOR" />| para salir del modo pantalla completa</translation> <translation id="6049065490165456785">Foto de cámara interna</translation> @@ -3381,7 +3373,6 @@ <translation id="6311220991371174222">No se puede iniciar Chrome porque se ha producido un error al abrir el perfil. Prueba a reiniciar el navegador.</translation> <translation id="6312403991423642364">Error desconocido de red</translation> <translation id="6313641880021325787">SALIR DE RV</translation> -<translation id="6314335155547195432">Generar contraseña</translation> <translation id="6314819609899340042">Has habilitado correctamente funciones de depuración en este dispositivo <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation> <translation id="6315343732431721770">Tus páginas de inicio han cambiado para incluir <ph name="URL" />. Para inhabilitar las extensiones que cambian la página de inicio, haz clic en Restaurar.</translation> <translation id="6315493146179903667">Traer todo al frente</translation> @@ -3419,7 +3410,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Configurar Smart Lock para Android</translation> <translation id="6374469231428023295">Volver a intentarlo</translation> -<translation id="6377158645544167202">No se puede conectar la impresora. Comprueba que esté encendida y conectada a tu Chromebook por red Wi‑Fi o USB.</translation> <translation id="6380143666419481200">Aceptar y continuar</translation> <translation id="6383051423892982287">Cifrar los datos sincronizados con tu propia <ph name="BEGIN_LINK" />frase de contraseña de sincronización<ph name="END_LINK" /></translation> <translation id="6384275966486438344">Cambiar configuración de búsqueda por: <ph name="SEARCH_HOST" /></translation> @@ -3575,7 +3565,6 @@ <translation id="6606070663386660533">Pestaña 8</translation> <translation id="6607272825297743757">Información del archivo</translation> <translation id="6607831829715835317">Más herramientas</translation> -<translation id="6610183966322615106">No se ha podido añadir la impresora</translation> <translation id="6612358246767739896">Contenido protegido</translation> <translation id="6613452264606394692">Añade esta página a marcadores para volver a ella rápidamente</translation> <translation id="6615455863669487791">Ver</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb index 864c68d..1152980 100644 --- a/chrome/app/resources/generated_resources_et.xtb +++ b/chrome/app/resources/generated_resources_et.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">Sees – kohandatud seaded</translation> <translation id="1493892686965953381">Laienduse <ph name="LOAD_STATE_PARAMETER" /> ootamine ...</translation> <translation id="1495486559005647033">Saadaval on veel <ph name="NUM_PRINTERS" /> seadet.</translation> -<translation id="1497284176235884849">Esitatud PPD on sobimatu.</translation> <translation id="1497522201463361063">Faili „<ph name="FILE_NAME" />” ei saa ümber nimetada. <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Tundmatu seade [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">See omaniku konto peab olema esimene sisselogitud konto mitmele kontole sisselogimise seansil.</translation> @@ -1774,7 +1773,6 @@ <translation id="3697100740575341996">Teie IT-administraator on Chrome'i lisad teie seadmes keelanud. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">E-posti aadress</translation> <translation id="3702500414347826004">Käivitamisel avatavaid lehti muudeti aadressi <ph name="URL" /> kaasamiseks.</translation> -<translation id="3703669627274482482">Küsi, kui sait soovib lõikelauale kopeeritud teksti ja kujutisi näha</translation> <translation id="370415077757856453">JavaScript on blokeeritud</translation> <translation id="3704331259350077894">Toimingu seiskumine</translation> <translation id="3705722231355495246">-</translation> @@ -2122,7 +2120,6 @@ <translation id="4270393598798225102">Versioon <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Vasted puuduvad</translation> <translation id="4275830172053184480">Taaskäivitage seade</translation> -<translation id="4276216215490044084">Suurt PPD-d ei saa laadida. Maksimaalne suurus on 250 kB.</translation> <translation id="4278390842282768270">Lubatud</translation> <translation id="4281844954008187215">Teenusetingimused</translation> <translation id="4282196459431406533">Smart Lock on sisse lülitatud</translation> @@ -2202,7 +2199,6 @@ <translation id="4430369329743628066">Järjehoidja on lisatud</translation> <translation id="443464694732789311">Jätka</translation> <translation id="4439318412377770121">Kas soovite registreerida seadme <ph name="DEVICE_NAME" /> teenuses Google'i pilvseadmed?</translation> -<translation id="4439612350502082674">Printerit ei saa lisada. Taaskäivitage ja proovige uuesti.</translation> <translation id="4441124369922430666">Kas soovite selle rakenduse seadme sisselülitamisel automaatselt käivitada?</translation> <translation id="444134486829715816">Laienda ...</translation> <translation id="4441548209689510310">Kuva õigekirjakontrolli seaded</translation> @@ -2433,7 +2429,6 @@ <translation id="4839303808932127586">Sa&lvesta video nimega ...</translation> <translation id="4839847978919684242">Valitud on <ph name="SELCTED_FILES_COUNT" /> üksust</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{Veel 1}other{Veel #}}</translation> -<translation id="4840626203080576849">Küsi, kui sait soovib näha lõikelauale kopeeritud teksti ja kujutisi (soovitatav)</translation> <translation id="4842976633412754305">See leht üritab skripte laadida volitamata allikatest.</translation> <translation id="4844333629810439236">Muud klaviatuurid</translation> <translation id="4846680374085650406">Järgite selle seade puhul administraatori soovitust.</translation> @@ -2700,7 +2695,6 @@ <translation id="5254368820972107711">Kuva eemaldatavad failid</translation> <translation id="52550593576409946">Kioski rakendust ei saanud käivitada.</translation> <translation id="5255315797444241226">Sisestatud parool on vale.</translation> -<translation id="5259571578888203461">Ära luba saitidel näha lõikelauale kopeeritud teksti ja kujutisi</translation> <translation id="5260508466980570042">Kahjuks ei õnnestunud teie meili või parooli kinnitada. Proovige uuesti.</translation> <translation id="5261683757250193089">Ava veebipoes</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Pääsete failidele juurde kõikjalt, ka võrguühenduseta.<ph name="MARKUP_2" /> @@ -3174,7 +3168,6 @@ <translation id="5972708806901999743">Teisalda ülaossa</translation> <translation id="5972826969634861500">Käivita <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Suumib välja</translation> -<translation id="5975730206036440725">PPD-d ei leita. Veenduge, et teie Chromebook oleks võrguga ühendatud, ja proovige uuesti.</translation> <translation id="5975792506968920132">Aku laetuse protsent</translation> <translation id="5976160379964388480">Muud</translation> <translation id="5978264784700053212">Sõnumikeskus</translation> @@ -3216,7 +3209,6 @@ <translation id="6042308850641462728">Rohkem</translation> <translation id="6042850536017090003">Puudutage valikut Rakenduste märguanded</translation> <translation id="6043317578411397101">Rakendus <ph name="APP_NAME" /> jagab Chrome'i vahelehte vahelehega <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Valmis!</translation> <translation id="6044805581023976844">Rakendus <ph name="APP_NAME" /> jagab Chrome'i vahelehte ja heli vahelehega <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Täisekraanilt väljumiseks vajutage pikalt klahvi |<ph name="ACCELERATOR" />|</translation> <translation id="6049065490165456785">Foto sisemisest kaamerast</translation> @@ -3383,7 +3375,6 @@ <translation id="6311220991371174222">Chrome'i ei saa käivitada, kuna midagi läks teie profiili avamisel valesti. Proovige Chrome taaskäivitada.</translation> <translation id="6312403991423642364">Tundmatu võrguviga</translation> <translation id="6313641880021325787">VÄLJU VR-REŽIIMIST</translation> -<translation id="6314335155547195432">Parooli loomine</translation> <translation id="6314819609899340042">Olete lubanud toote <ph name="IDS_SHORT_PRODUCT_NAME" /> seadmes silumisfunktsioonid.</translation> <translation id="6315343732431721770">Käivitamisel avatavaid lehti muudeti aadressi <ph name="URL" /> lisamiseks. Kui soovite keelata laiendused, mis muudavad käivitamisel avatavat lehte, klõpsake nupul Taasta.</translation> <translation id="6315493146179903667">Too kõik ette</translation> @@ -3421,7 +3412,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Funktsiooni Smart Lock Androidile seadistamine</translation> <translation id="6374469231428023295">Proovi uuesti</translation> -<translation id="6377158645544167202">Printeriga ei saa ühendada. Veenduge, et printer oleks sisse lülitatud ja teie Chromebookiga WiFi või USB kaudu ühendatud.</translation> <translation id="6380143666419481200">Nõustu ja jätka</translation> <translation id="6383051423892982287">Krüpteeri sünkroonitud andmed <ph name="BEGIN_LINK" />sünkroonimisparooliga<ph name="END_LINK" /></translation> <translation id="6384275966486438344">Muutke oma otsinguseadeid: <ph name="SEARCH_HOST" /></translation> @@ -3578,7 +3568,6 @@ <translation id="6606070663386660533">Vahekaart 8</translation> <translation id="6607272825297743757">Faili teave</translation> <translation id="6607831829715835317">Rohkem töö&riistu</translation> -<translation id="6610183966322615106">Viga printeri lisamisel</translation> <translation id="6612358246767739896">Kaitstud sisu</translation> <translation id="6613452264606394692">Naaske siia kiiresti, lisades selle lehe järjehoidjatesse</translation> <translation id="6615455863669487791">Kuva mulle</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb index 865550dd..85e4b88 100644 --- a/chrome/app/resources/generated_resources_fa.xtb +++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">روشن - تنظیمات سفارشی</translation> <translation id="1493892686965953381">انتظار برای <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> دستگاه دیگر در دسترس است.</translation> -<translation id="1497284176235884849">PPD ارائهشده نامعتبر است.</translation> <translation id="1497522201463361063">تغییرنام «<ph name="FILE_NAME" />» ممکن نیست.<ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">دستگاه نامشخص [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">این حساب مالک باید اولین حسابی باشد که در یک جلسه ورود به سیستم چندگانه به سیستم وارد میشود.</translation> @@ -1770,7 +1769,6 @@ <translation id="3697100740575341996">سرپرست IT شما Chrome Goodies را برای دستگاه شما غیرفعال کرده است. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">آدرس ايميل</translation> <translation id="3702500414347826004">صفحههای شروع تغییر کردند تا <ph name="URL" /> به آنها اضافه شود.</translation> -<translation id="3703669627274482482">اگر سایتی میخواهد به نوشتار و تصاویری که در کلیپبورد کپی کردید دسترسی پیدا کند سؤال شود.</translation> <translation id="370415077757856453">جاوا اسکریپت مسدود شد</translation> <translation id="3704331259350077894">توقف عملیات</translation> <translation id="3705722231355495246">-</translation> @@ -1815,7 +1813,7 @@ <translation id="3764314093345384080">اطلاعات دقیق ساخت</translation> <translation id="3764583730281406327">{NUM_DEVICES,plural, =1{ارتباط با یک دستگاه USB}one{ارتباط با # دستگاه USB}other{ارتباط با # دستگاه USB}}</translation> <translation id="3764986667044728669">ثبتنام ممکن نیست</translation> -<translation id="3766223500670287046">پخش از راه دور صفحهنمایش</translation> +<translation id="3766223500670287046">پخش ازراهدور صفحهنمایش</translation> <translation id="3768037234834996183">در حال همگامسازی تنظیمات ترجیحی...</translation> <translation id="3771294271822695279">فایلهای ویدئویی</translation> <translation id="3775432569830822555">گواهی سرور SSL</translation> @@ -2118,7 +2116,6 @@ <translation id="4270393598798225102">نسخه <ph name="NUMBER" /></translation> <translation id="4271396100647220620">مورد منطبقی وجود ندارد</translation> <translation id="4275830172053184480">راهاندازی دستگاه خود</translation> -<translation id="4276216215490044084">PPD بار نشد. بیشترین اندازه ۲۵۰ کیلوبایت است.</translation> <translation id="4278390842282768270">مجاز است</translation> <translation id="4281844954008187215">شرایط استفاده از سرویس</translation> <translation id="4282196459431406533">Smart Lock روشن شده است</translation> @@ -2177,7 +2174,7 @@ <translation id="4384312707950789900">افزودن به شبکههای برگزیده</translation> <translation id="4384652540891215547">فعال کردن افزونه</translation> <translation id="438503109373656455">اسب</translation> -<translation id="4387004326333427325">گواهینامه راستیآزمایی، از راه دور، رد شد</translation> +<translation id="4387004326333427325">گواهینامه راستیآزمایی، ازراهدور، رد شد</translation> <translation id="4389091756366370506">کاربر <ph name="VALUE" /></translation> <translation id="4394049700291259645">غیر فعال کردن</translation> <translation id="4400367121200150367">سایتهایی که هرگز گذرواژه را ذخیره نمیکنند در اینجا نشان داده نخواهند شد</translation> @@ -2198,7 +2195,6 @@ <translation id="4430369329743628066">نشانک اضافه شد</translation> <translation id="443464694732789311">ادامه</translation> <translation id="4439318412377770121">میخواهید <ph name="DEVICE_NAME" /> را در دستگاههای Google Cloud ثبت کنید؟</translation> -<translation id="4439612350502082674">چاپگر اضافه نشد. بازراهاندازی و دوباره امتحان کنید.</translation> <translation id="4441124369922430666">آیا میخواهید با روشن شدن دستگاه، این برنامه بهطور خودکار شروع شود؟</translation> <translation id="444134486829715816">گسترده کردن...</translation> <translation id="4441548209689510310">نمایش گزینههای غلطگیر املا</translation> @@ -2429,7 +2425,6 @@ <translation id="4839303808932127586">ذ&خیره فایل ویدیوی بهعنوان...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> مورد انتخاب شد</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{۱ مورد دیگر}one{# مورد دیگر}other{# مورد دیگر}}</translation> -<translation id="4840626203080576849">اگر سایتی میخواهد به نوشتار و تصاویری دسترسی پیدا کند که در کلیپبورد کپی کردید درخواست شود (توصیه میشود)</translation> <translation id="4842976633412754305">این صفحه در تلاش است اسکریپتهایی از منابع تأیید نشده بارگیری کند.</translation> <translation id="4844333629810439236">صفحهکلیدهای دیگر</translation> <translation id="4846680374085650406">شما از توصیههای سرپرست سیستم برای این تنظیم پیروی میکنید.</translation> @@ -2696,7 +2691,6 @@ <translation id="5254368820972107711">نمایش فایلهای موردنظر برای پاک کردن</translation> <translation id="52550593576409946">برنامه کیوسک راهاندازی نشد.</translation> <translation id="5255315797444241226">عبارت عبوری که وارد کردید نادرست است.</translation> -<translation id="5259571578888203461">سایتها اجازه ندارند نوشتار و تصاویری را که در کلیپبورد کپی میکنید، مشاهده کنند</translation> <translation id="5260508466980570042">متأسفانه رایانامه یا گذرواژه شما تأیید نشد. لطفاً دوباره سعی کنید.</translation> <translation id="5261683757250193089">باز کردن در نتبازار</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />در همه جا به فایلها دسترسی داشته باشید، حتی وقتی به اینترنت متصل نیستید.<ph name="MARKUP_2" /> @@ -3170,7 +3164,6 @@ <translation id="5972708806901999743">انتقال به بالا</translation> <translation id="5972826969634861500">شروع <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">کوچک نمایی</translation> -<translation id="5975730206036440725">PPD پیدا نشد. بررسی کنید Chromebook شما آنلاین باشد و دوباره امتحان کنید.</translation> <translation id="5975792506968920132">درصد شارژ باتری</translation> <translation id="5976160379964388480">موارد دیگر</translation> <translation id="5978264784700053212">مرکز پیامرسانی</translation> @@ -3212,7 +3205,6 @@ <translation id="6042308850641462728">بیشتر</translation> <translation id="6042850536017090003">روی اعلانهای «برنامه» ضربه بزنید.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> در حال اشتراکگذاری یک برگه Chrome با <ph name="TAB_NAME" /> است.</translation> -<translation id="6043357981274314628">تمام!</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> درحال اشتراکگذاری یک برگه Chrome و صوت با <ph name="TAB_NAME" /> است.</translation> <translation id="6049004884579590341">برای خروج از حالت تمام صفحه، |<ph name="ACCELERATOR" />| را فشار دهید و نگهدارید</translation> <translation id="6049065490165456785">عکس از دوربین داخلی</translation> @@ -3226,7 +3218,7 @@ <translation id="6059925163896151826">دستگاههای USB</translation> <translation id="6064217302520318294">قفل صفحه</translation> <translation id="6065289257230303064">ویژگیهای دایرکتوری موضوع گواهی</translation> -<translation id="6068338049763724728">فعال کردن ثبتنام از راه دور</translation> +<translation id="6068338049763724728">فعال کردن ثبتنام ازراهدور</translation> <translation id="6071181508177083058">تأیید گذرواژه</translation> <translation id="6073903501322152803">افزودن قابلیتهای دسترسپذیری</translation> <translation id="6074825444536523002">فرم Google</translation> @@ -3379,7 +3371,6 @@ <translation id="6311220991371174222">راهاندازی Chrome ممکن نیست زیرا هنگام باز کردن نمایهتان مشکلی پیش آمد. Chrome را راهاندازی مجدد کنید.</translation> <translation id="6312403991423642364">خطای شبکه ناشناس</translation> <translation id="6313641880021325787">خروج از VR</translation> -<translation id="6314335155547195432">تولید گذرواژه</translation> <translation id="6314819609899340042">ویژگیهای رفع اشکال را با موفقیت در این دستگاه <ph name="IDS_SHORT_PRODUCT_NAME" /> فعال کردید.</translation> <translation id="6315343732431721770">صفحههای شروع تغییر کردند تا <ph name="URL" /> به آنها اضافه شود. برای غیرفعال کردن افزونههایی که صفحه شروع شما را تغییر میدهند، روی «بازیابی» کلیک کنید.</translation> <translation id="6315493146179903667">آوردن همه به جلو</translation> @@ -3417,7 +3408,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">راهاندازی Smart Lock برای Android</translation> <translation id="6374469231428023295">دوباره امتحان کنید</translation> -<translation id="6377158645544167202">چاپگر متصل نشد. بررسی کنید چاپگر روشن و با Wi-Fi یا USB به Chromebook شما متصل باشد.</translation> <translation id="6380143666419481200">پذیرش و ادامه</translation> <translation id="6383051423892982287">رمزگذاری دادههای همگامسازیشده با <ph name="BEGIN_LINK" />عبارت عبور همگامسازی<ph name="END_LINK" /> خودتان</translation> <translation id="6384275966486438344">تغییر تنظیمات جستجویتان به: <ph name="SEARCH_HOST" /></translation> @@ -3574,7 +3564,6 @@ <translation id="6606070663386660533">برگه ۸</translation> <translation id="6607272825297743757">اطلاعات فایل</translation> <translation id="6607831829715835317">ا&بزارهای بیشتر</translation> -<translation id="6610183966322615106">خطا در افزودن چاپگر</translation> <translation id="6612358246767739896">محتوای محافظتشده</translation> <translation id="6613452264606394692">با نشانکگذاری این صفحه، سریع به اینجا بازگردید</translation> <translation id="6615455863669487791">به من نشان بده</translation> @@ -3681,7 +3670,7 @@ <translation id="6787839852456839824">میانبرهای صفحهکلید</translation> <translation id="6788210894632713004">افزونه غیر فشرده</translation> <translation id="6790428901817661496">پخش</translation> -<translation id="6790497603648687708"><ph name="EXTENSION_NAME" /> از راه دور اضافه شد</translation> +<translation id="6790497603648687708"><ph name="EXTENSION_NAME" /> ازراهدور اضافه شد</translation> <translation id="6790820461102226165">افزودن شخص...</translation> <translation id="6792072150955115067"><ph name="APP_NAME" /> میخواهد محتوای صفحه شما را با <ph name="TARGET_NAME" /> به اشتراک بگذارد. آنچه را میخواهید به اشتراک بگذارید، انتخاب کنید.</translation> <translation id="6793604637258913070">برجسته کردن نشانگر نوشتار درصورتیکه ظاهر شود یا حرکت کند</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb index a3b9f4ac..034688fd 100644 --- a/chrome/app/resources/generated_resources_fi.xtb +++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">Päällä – muokatut asetukset</translation> <translation id="1493892686965953381">Odotetaan parametria <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> muuta laitetta käytettävissä.</translation> -<translation id="1497284176235884849">Annettu PPD ei kelpaa.</translation> <translation id="1497522201463361063">Tiedostoa <ph name="FILE_NAME" /> ei voi nimetä uudelleen. <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Tuntematon laite [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Tämän omistajatilin täytyy olla ensimmäinen sisään kirjautuva tili useiden tilien istunnossa.</translation> @@ -1775,7 +1774,6 @@ <translation id="3697100740575341996">IT-järjestelmänvalvojasi on poistanut Chrome Goodies -tarjoukset käytöstä laitteellasi. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">Sähköpostiosoite</translation> <translation id="3702500414347826004">Aloitussivujasi muokattiin, ja niihin sisältyy nyt <ph name="URL" />.</translation> -<translation id="3703669627274482482">Kysy, kun sivusto haluaa nähdä leikepöydälle kopioimasi tekstin ja kuvat</translation> <translation id="370415077757856453">JavaScript estetty</translation> <translation id="3704331259350077894">Toiminnon keskeytyminen</translation> <translation id="3705722231355495246">-</translation> @@ -2120,7 +2118,6 @@ <translation id="4270393598798225102">Versio <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Ei hakutuloksia</translation> <translation id="4275830172053184480">Käynnistä laite uudelleen</translation> -<translation id="4276216215490044084">PPD on liian suuri ladattavaksi. Enimmäiskoko on 250 kB.</translation> <translation id="4278390842282768270">Sallittu</translation> <translation id="4281844954008187215">Käyttöehdot</translation> <translation id="4282196459431406533">Smart Lock on käytössä.</translation> @@ -2200,7 +2197,6 @@ <translation id="4430369329743628066">Kirjanmerkki lisättiin</translation> <translation id="443464694732789311">Jatka</translation> <translation id="4439318412377770121">Haluatko rekisteröidä laitteen <ph name="DEVICE_NAME" /> Google Cloud -laitteisiin?</translation> -<translation id="4439612350502082674">Tulostimen asennus epäonnistui. Käynnistä laite uudelleen ja yritä uudelleen.</translation> <translation id="4441124369922430666">Haluatko käynnistää tämän sovelluksen automaattisesti koneen käynnistyessä?</translation> <translation id="444134486829715816">Laajenna...</translation> <translation id="4441548209689510310">Näytä oikeinkirjoituksen tarkistusasetukset</translation> @@ -2431,7 +2427,6 @@ <translation id="4839303808932127586">Tallenna &video nimellä...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> kohdetta on valittu</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{1 muu}other{# muuta}}</translation> -<translation id="4840626203080576849">Kysy, kun sivusto haluaa nähdä leikepöydälle kopioimasi tekstin ja kuvat (suositeltu)</translation> <translation id="4842976633412754305">Tämä sivu yrittää ladata koodia todentamattomista lähteistä.</translation> <translation id="4844333629810439236">Muut näppäimistöt</translation> <translation id="4846680374085650406">Noudatat järjestelmänvalvojan tätä asetusta koskevaa suositusta.</translation> @@ -2698,7 +2693,6 @@ <translation id="5254368820972107711">Näytä poistettavat tiedostot</translation> <translation id="52550593576409946">Kioskisovelluksen käynnistäminen ei onnistunut.</translation> <translation id="5255315797444241226">Antamasi tunnuslause on väärä.</translation> -<translation id="5259571578888203461">Älä anna sivustojen nähdä leikepöydälle kopioimaasi tekstiä ja kuvia</translation> <translation id="5260508466980570042">Sähköpostiosoitteesi tai salasanasi vahvistaminen epäonnistui. Yritä uudelleen.</translation> <translation id="5261683757250193089">Avaa Web Storessa</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Käytä tiedostojasi missä vain, myös offline-tilassa.<ph name="MARKUP_2" /> @@ -3172,7 +3166,6 @@ <translation id="5972708806901999743">Siirrä alkuun</translation> <translation id="5972826969634861500">Käynnistä <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Loitonna</translation> -<translation id="5975730206036440725">PPD:tä ei löydy. Tarkista, että Chromebook on verkossa, ja yritä uudelleen.</translation> <translation id="5975792506968920132">Akun varaus prosentteina</translation> <translation id="5976160379964388480">Muut</translation> <translation id="5978264784700053212">Viestikeskus</translation> @@ -3214,7 +3207,6 @@ <translation id="6042308850641462728">Lisää</translation> <translation id="6042850536017090003">Valitse Sovellusilmoitukset.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> jakaa Chrome-välilehden välilehdelle <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Valmis!</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> jakaa Chrome-välilehden ja ääntä välilehdelle <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Paina pitkään |<ph name="ACCELERATOR" />|, niin poistut koko näytön tilasta.</translation> <translation id="6049065490165456785">Kuva laitteen kamerasta</translation> @@ -3383,7 +3375,6 @@ <translation id="6311220991371174222">Chromea ei voi käynnistää, koska profiilia avattaessa tapahtui virhe. Yritä käynnistää Chrome uudelleen.</translation> <translation id="6312403991423642364">Tuntematon verkkovirhe</translation> <translation id="6313641880021325787">POISTU VR:STÄ</translation> -<translation id="6314335155547195432">Luo salasana</translation> <translation id="6314819609899340042"><ph name="IDS_SHORT_PRODUCT_NAME" />-laitteen virheenkorjausominaisuuksien käyttöönotto onnistui.</translation> <translation id="6315343732431721770">Aloitussivujasi muokattiin, ja niihin sisältyy nyt <ph name="URL" />. Jos haluat poistaa käytöstä laajennuksia, jotka voivat vaihtaa aloitussivusi, klikkaa Palauta.</translation> <translation id="6315493146179903667">Siirrä kaikki etualalle</translation> @@ -3421,7 +3412,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Ota käyttöön Smart Lock for Android</translation> <translation id="6374469231428023295">Yritä uudelleen</translation> -<translation id="6377158645544167202">Tulostimen yhdistäminen epäonnistui. Tarkista, että tulostin on päällä ja yhteydessä Chromebookiin Wi-Fi-yhteydellä tai USB:llä.</translation> <translation id="6380143666419481200">Hyväksy ja jatka</translation> <translation id="6383051423892982287">Salaa synkronoidut tiedot oman <ph name="BEGIN_LINK" />synkronoinnin tunnuslauseesi<ph name="END_LINK" /> avulla</translation> <translation id="6384275966486438344">Ota käyttöön seuraava hakukone: <ph name="SEARCH_HOST" /></translation> @@ -3578,7 +3568,6 @@ <translation id="6606070663386660533">Välilehti 8</translation> <translation id="6607272825297743757">Tiedoston tiedot</translation> <translation id="6607831829715835317">&Lisää työkaluja</translation> -<translation id="6610183966322615106">Tulostinta lisättäessä tapahtui virhe.</translation> <translation id="6612358246767739896">Suojattu sisältö</translation> <translation id="6613452264606394692">Lisää sivu kirjanmerkiksi, niin voit palata tähän nopeasti.</translation> <translation id="6615455863669487791">Näytä</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb index 97c4dec..7b8d5c2 100644 --- a/chrome/app/resources/generated_resources_fil.xtb +++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">Naka-on - mga custom na setting</translation> <translation id="1493892686965953381">Hinihintay ang <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> (na) iba pang available na device.</translation> -<translation id="1497284176235884849">Invalid ang ibinigay na PPD.</translation> <translation id="1497522201463361063">Hindi mapalatan ang pangalan "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Hindi kilalang device [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Ang account ng may-ari na ito ay dapat ang unang naka-sign in na account sa isang session ng multiple na pag-sign in.</translation> @@ -1774,7 +1773,6 @@ <translation id="3697100740575341996">Hindi pinagana ng iyong IT administrator ang Chrome Goodies para sa iyong device. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">Email address</translation> <translation id="3702500414347826004">Binago ang iyong mga page sa pagsisimula upang isama ang <ph name="URL" />.</translation> -<translation id="3703669627274482482">Magtanong kapag gustong tingnan ng site ang text at mga larawang kinokopya mo sa clipboard</translation> <translation id="370415077757856453">Na-block ang JavaScript</translation> <translation id="3704331259350077894">Pagtigil ng Pagpapatakbo</translation> <translation id="3705722231355495246">-</translation> @@ -2122,7 +2120,6 @@ <translation id="4270393598798225102">Bersyon <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Walang mga pagtutugma</translation> <translation id="4275830172053184480">I-restart ang iyong device</translation> -<translation id="4276216215490044084">Hindi makapag-load ng malaking PPD. 250kB ang maximum na laki.</translation> <translation id="4278390842282768270">Pinapayagan</translation> <translation id="4281844954008187215">Mga Tuntunin ng Serbisyo</translation> <translation id="4282196459431406533">Naka-on ang Smart Lock</translation> @@ -2202,7 +2199,6 @@ <translation id="4430369329743628066">Naidagdag na ang bookmark</translation> <translation id="443464694732789311">Magpatuloy</translation> <translation id="4439318412377770121">Gusto mo bang iparehistro ang <ph name="DEVICE_NAME" /> sa mga Google Cloud Device?</translation> -<translation id="4439612350502082674">Hindi makapagdagdag ng printer. I-restart at subukang muli.</translation> <translation id="4441124369922430666">Nais mo bang awtomatikong simulan ang app na ito kapag nag-on ang makina?</translation> <translation id="444134486829715816">Palawakin...</translation> <translation id="4441548209689510310">Ipakita ang mga opsyon sa pang-check ng pagbabaybay</translation> @@ -2433,7 +2429,6 @@ <translation id="4839303808932127586">I-sa&ve ang video bilang...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> (na) item ang pinili</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{1 pa}one{# pa}other{# pa}}</translation> -<translation id="4840626203080576849">Magtanong kapag gustong tingnan ng site ang text at mga larawang kinokopya mo sa clipboard (inirerekomenda)</translation> <translation id="4842976633412754305">Sinusubukan ng page na ito na mag-load ng mga script mula sa mga hindi napatunayang pinagmulan.</translation> <translation id="4844333629810439236">Iba pang mga keyboard</translation> <translation id="4846680374085650406">Sinusunod mo ang rekomendasyon ng administrator para sa setting na ito.</translation> @@ -2700,7 +2695,6 @@ <translation id="5254368820972107711">Ipakita ang mga file na aalisin</translation> <translation id="52550593576409946">Hindi mailunsad ang Kiosk application.</translation> <translation id="5255315797444241226">Mali ang inilagay mong passphrase.</translation> -<translation id="5259571578888203461">Huwag payagan ang mga site na makita ang text at mga larawang kinokopya mo sa clipboard</translation> <translation id="5260508466980570042">Paumanhin, hindi ma-verify ang iyong email o password. Pakisubukang muli.</translation> <translation id="5261683757250193089">Buksan sa Web Store</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Mag-access ng mga file kahit saan, kahit offline.<ph name="MARKUP_2" /> @@ -3174,7 +3168,6 @@ <translation id="5972708806901999743">Ilipat sa itaas</translation> <translation id="5972826969634861500">Simulan ang <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Mag-zoom out</translation> -<translation id="5975730206036440725">Hindi makita ang PPD. Tiyaking online ang iyong Chromebook at subukang muli.</translation> <translation id="5975792506968920132">Porsyento ng Charge ng Baterya</translation> <translation id="5976160379964388480">Iba Pa</translation> <translation id="5978264784700053212">Message center</translation> @@ -3216,7 +3209,6 @@ <translation id="6042308850641462728">Higit pa</translation> <translation id="6042850536017090003">Mag-tap sa mga notification ng App.</translation> <translation id="6043317578411397101">Nagbabahagi ang <ph name="APP_NAME" /> ng tab ng Chrome sa <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Tapos na!</translation> <translation id="6044805581023976844">Nagbabahagi ang <ph name="APP_NAME" /> ng tab ng Chrome at audio sa <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">I-press nang matagal ang |<ph name="ACCELERATOR" />| upang lumabas sa full screen</translation> <translation id="6049065490165456785">Larawan mula sa panloob na camera</translation> @@ -3383,7 +3375,6 @@ <translation id="6311220991371174222">Hindi masimulan ang Chrome dahil nagkaproblema noong binubuksan ang iyong profile. Subukang i-restart ang Chrome.</translation> <translation id="6312403991423642364">Hindi alam na error sa network</translation> <translation id="6313641880021325787">LUMABAS SA VR</translation> -<translation id="6314335155547195432">Bumuo ng password</translation> <translation id="6314819609899340042">Matagumpay mong na-enable ang mga feature para sa pagde-debug sa <ph name="IDS_SHORT_PRODUCT_NAME" /> device na ito.</translation> <translation id="6315343732431721770">Binago ang iyong mga page sa pagsisimula upang isama ang <ph name="URL" />. Upang i-disable ang mga extension na binabago ang page sa pagsisimula mo, i-click ang I-restore.</translation> <translation id="6315493146179903667">Bring All to Front</translation> @@ -3421,7 +3412,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">I-set up ang Smart Lock para sa Android</translation> <translation id="6374469231428023295">Subukang Muli</translation> -<translation id="6377158645544167202">Hindi maikonekta ang printer. Tiyaking naka-on ang printer at nakakonekta ito sa iyong Chromebook sa pamamagitan ng Wi-Fi o USB.</translation> <translation id="6380143666419481200">Tanggapin at magpatuloy</translation> <translation id="6383051423892982287">I-encrypt ang naka-sync na data gamit ang iyong sariling <ph name="BEGIN_LINK" />passphrase sa pag-sync<ph name="END_LINK" /></translation> <translation id="6384275966486438344">Gawing ito ang iyong mga setting ng paghahanap: <ph name="SEARCH_HOST" /></translation> @@ -3578,7 +3568,6 @@ <translation id="6606070663386660533">Tab 8</translation> <translation id="6607272825297743757">Impormasyon ng file</translation> <translation id="6607831829715835317">Higit pang mga too&l</translation> -<translation id="6610183966322615106">Nagkaroon ng error sa pagdaragdag ng printer</translation> <translation id="6612358246767739896">Pinoprotektahang content</translation> <translation id="6613452264606394692">Makabalik dito nang mabilis sa pamamagitan ng pag-bookmark sa page na ito</translation> <translation id="6615455863669487791">Ipakita sa akin</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb index 50df43f..14b1f36 100644 --- a/chrome/app/resources/generated_resources_fr.xtb +++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">Activée – Paramètres personnalisés</translation> <translation id="1493892686965953381">En attente de <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> autres périphériques disponibles</translation> -<translation id="1497284176235884849">Le fichier PPD fourni est incorrect.</translation> <translation id="1497522201463361063">Impossible de renommer "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Appareil inconnu [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Ce compte de propriétaire doit être le premier compte à être connecté lors de sessions de connexion multicompte.</translation> @@ -1774,7 +1773,6 @@ <translation id="3697100740575341996">Votre administrateur informatique a désactivé les avantages Google Chrome pour votre appareil. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">Adresse e-mail</translation> <translation id="3702500414347826004">Vos pages de démarrage ont été modifiées pour inclure <ph name="URL" />.</translation> -<translation id="3703669627274482482">Me demander lorsqu'un site souhaite afficher le texte et les images que je copie dans le Presse-papiers</translation> <translation id="370415077757856453">JavaScript bloqué</translation> <translation id="3704331259350077894">Arrêt du fonctionnement</translation> <translation id="3705722231355495246">-</translation> @@ -2122,7 +2120,6 @@ <translation id="4270393598798225102">Version <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Aucune correspondance</translation> <translation id="4275830172053184480">Redémarrer l'appareil</translation> -<translation id="4276216215490044084">Impossible de charger un fichier PPD volumineux. La taille maximale est 250 Ko.</translation> <translation id="4278390842282768270">Autorisé</translation> <translation id="4281844954008187215">Conditions d'utilisation</translation> <translation id="4282196459431406533">Smart Lock est activé</translation> @@ -2202,7 +2199,6 @@ <translation id="4430369329743628066">Favori ajouté</translation> <translation id="443464694732789311">Continuer</translation> <translation id="4439318412377770121">Voulez-vous vous enregistrer l'appareil <ph name="DEVICE_NAME" /> dans Google Cloud Devices ?</translation> -<translation id="4439612350502082674">Impossible d'ajouter l'imprimante. Redémarrez et réessayez.</translation> <translation id="4441124369922430666">Voulez-vous démarrer automatiquement cette application à la mise sous tension de l'ordinateur ?</translation> <translation id="444134486829715816">Développer...</translation> <translation id="4441548209689510310">Afficher les options du correcteur orthographique</translation> @@ -2433,7 +2429,6 @@ <translation id="4839303808932127586">En&registrer la vidéo sous...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> éléments sélectionnés</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{1 autre}one{# autre}other{# autres}}</translation> -<translation id="4840626203080576849">Me demander lorsqu'un site souhaite afficher le texte et les images que je copie dans le Presse-papiers (recommandé)</translation> <translation id="4842976633412754305">Cette page tente de charger des scripts à partir de sources non authentifiées.</translation> <translation id="4844333629810439236">Autres claviers</translation> <translation id="4846680374085650406">Vous suivez la recommandation de l'administrateur pour ce paramètre.</translation> @@ -2700,7 +2695,6 @@ <translation id="5254368820972107711">Affichez les fichiers à supprimer</translation> <translation id="52550593576409946">Impossible de lancer l'application kiosque.</translation> <translation id="5255315797444241226">La phrase secrète saisie est incorrecte.</translation> -<translation id="5259571578888203461">Interdire aux sites de voir le texte et les images que vous copiez dans le presse-papiers</translation> <translation id="5260508466980570042">Adresse e-mail ou mot de passe incorrect. Veuillez réessayer.</translation> <translation id="5261683757250193089">Ouvrir sur le Web Store</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Accédez à vos fichiers où que vous soyez, même hors connexion.<ph name="MARKUP_2" /> @@ -3175,7 +3169,6 @@ <translation id="5972708806901999743">Déplacer vers le haut</translation> <translation id="5972826969634861500">Lancer <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Zoom arrière</translation> -<translation id="5975730206036440725">Impossible de trouver le fichier PPD. Vérifiez que votre Chromebook est en ligne et réessayez.</translation> <translation id="5975792506968920132">Pourcentage de chargement de la batterie</translation> <translation id="5976160379964388480">Autres</translation> <translation id="5978264784700053212">Centre de messagerie</translation> @@ -3217,7 +3210,6 @@ <translation id="6042308850641462728">Plus</translation> <translation id="6042850536017090003">Appuyez sur "Notifications d'applications".</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> partage un onglet Chrome avec <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Terminé</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> partage un onglet Chrome et un contenu audio avec <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Appuyez de manière prolongée sur |<ph name="ACCELERATOR" />| pour quitter le mode plein écran</translation> <translation id="6049065490165456785">Photo d'un appareil photo interne</translation> @@ -3384,7 +3376,6 @@ <translation id="6311220991371174222">Impossible de démarrer Chrome, car une erreur s'est produite lors de l'ouverture de votre profil. Essayez de relancer Chrome.</translation> <translation id="6312403991423642364">Erreur de réseau inconnue.</translation> <translation id="6313641880021325787">QUITTER LA RV</translation> -<translation id="6314335155547195432">Générer mot de passe</translation> <translation id="6314819609899340042">Les fonctionnalités de débogage ont été activées sur cet appareil <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation> <translation id="6315343732431721770">Vos pages de démarrage ont été modifiées pour inclure <ph name="URL" />. Pour désactiver les extensions qui changent vos pages de démarrage, cliquez sur "Restaurer".</translation> <translation id="6315493146179903667">Tout ramener au premier plan</translation> @@ -3422,7 +3413,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Configurer Smart Lock pour Android</translation> <translation id="6374469231428023295">Réessayer</translation> -<translation id="6377158645544167202">Impossible de connecter l'imprimante. Vérifiez que l'imprimante est sous tension et connectée à votre Chromebook par Wi-Fi ou USB.</translation> <translation id="6380143666419481200">Accepter et continuer</translation> <translation id="6383051423892982287">Chiffrer les données synchronisées avec votre propre <ph name="BEGIN_LINK" />phrase secrète de synchronisation<ph name="END_LINK" /></translation> <translation id="6384275966486438344">Modifier les paramètres de la recherche pour utiliser l'adresse <ph name="SEARCH_HOST" />.</translation> @@ -3579,7 +3569,6 @@ <translation id="6606070663386660533">Tab 8</translation> <translation id="6607272825297743757">Informations sur le fichier</translation> <translation id="6607831829715835317">Plus d'outi&ls</translation> -<translation id="6610183966322615106">Erreur lors de l'ajout de l'imprimante</translation> <translation id="6612358246767739896">Contenu protégé</translation> <translation id="6613452264606394692">Revenez facilement sur cette page en l'ajoutant à vos favoris</translation> <translation id="6615455863669487791">Démonstration</translation> @@ -4021,7 +4010,7 @@ <translation id="7360233684753165754"><ph name="PAGE_NUMBER" /> pages sur <ph name="PRINTER_NAME" /></translation> <translation id="7361039089383199231">$1 octets</translation> <translation id="7361297102842600584">Faites un clic droit pour exécuter <ph name="PLUGIN_NAME" />.</translation> -<translation id="7364796246159120393">Choisissez un fichier</translation> +<translation id="7364796246159120393">Choisir un fichier</translation> <translation id="7366415735885268578">Ajouter un site</translation> <translation id="7366909168761621528">Données de navigation</translation> <translation id="7371006317849674875">Heure de début</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb index 407593b..6a6d080 100644 --- a/chrome/app/resources/generated_resources_gu.xtb +++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">ચાલુ - કસ્ટમ સેટિંગ્સ</translation> <translation id="1493892686965953381"><ph name="LOAD_STATE_PARAMETER" /> માટે પ્રતીક્ષારત...</translation> <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> અન્ય ઉપલબ્ધ ઉપકરણો.</translation> -<translation id="1497284176235884849">પૂરા પાડવામાં આવેલ PPD અમાન્ય છે.</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" નું નામ બદલવામાં અક્ષમ. <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">અજાણ્યું ઉપકરણ [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">આ માલિક એકાઉન્ટે બહુવિધ સાઇન-ઇન સત્રમાં પ્રથમ સાઇન-ઇન કરનાર એકાઉન્ટ થવું જોઈએ.</translation> @@ -1770,7 +1769,6 @@ <translation id="3697100740575341996">તમારા IT વ્યવસ્થાપકે તમારા ઉપકરણ માટે Chrome ગુડીઝ અક્ષમ કરેલ છે. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">ઇમેઇલ સરનામું</translation> <translation id="3702500414347826004"><ph name="URL" /> ને શામેલ કરવા માટે તમારું સ્ટાર્ટઅપ પૃષ્ઠ બદલ્યું હતું.</translation> -<translation id="3703669627274482482">તમે ક્લિપબોર્ડ પર કૉપિ કરેલ ટેક્સ્ટ અને છબીઓને સાઇટ જ્યારે જોવા માગે ત્યારે પૂછો</translation> <translation id="370415077757856453">JavaScript અવરોધિત</translation> <translation id="3704331259350077894">ક્રિયાની સમાપ્તિ</translation> <translation id="3705722231355495246">-</translation> @@ -2118,7 +2116,6 @@ <translation id="4270393598798225102">સંસ્કરણ <ph name="NUMBER" /></translation> <translation id="4271396100647220620">કોઇ મેળ મળ્યાં નથી</translation> <translation id="4275830172053184480">તમારું ઉપકરણ પુનઃપ્રારંભ કરો</translation> -<translation id="4276216215490044084">વિશાળ PPD લોડ કરી શકતાં નથી. વધુમાં વધુ કદ 250 kB છે.</translation> <translation id="4278390842282768270">મંજૂર</translation> <translation id="4281844954008187215">સેવાની શરતો</translation> <translation id="4282196459431406533">Smart Lock ચાલુ કરેલું છે</translation> @@ -2198,7 +2195,6 @@ <translation id="4430369329743628066">બુકમાર્ક ઉમેરાયો</translation> <translation id="443464694732789311">ચાલુ રાખો</translation> <translation id="4439318412377770121">શું તમે Google મેઘ ઉપકરણો પર <ph name="DEVICE_NAME" /> ને નોંધાવવા માગો છો?</translation> -<translation id="4439612350502082674">પ્રિન્ટર ઉમેરી શકતાં નથી. ફરી શરૂ કરો અને ફરી પ્રયાસ કરો.</translation> <translation id="4441124369922430666">શું જ્યારે મશીન ચાલુ થાય ત્યારે તમે આ એપ્લિકેશનને આપમેળે પ્રારંભ કરવા માંગો છો?</translation> <translation id="444134486829715816">વિસ્તૃત કરો...</translation> <translation id="4441548209689510310">જોડણી તપાસણી વિકલ્પો બતાવો</translation> @@ -2429,7 +2425,6 @@ <translation id="4839303808932127586">વિડિઓને આ રૂપે સા&ચવો...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> આઇટમ્સ પસંદ કરી</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{1 વધુ}one{# વધુ}other{# વધુ}}</translation> -<translation id="4840626203080576849">તમે ક્લિપબોર્ડ પર કૉપિ કરેલ ટેક્સ્ટ અને છબીઓને સાઇટ જ્યારે જોવા માગે ત્યારે પૂછો (સુઝાવ આપેલ)</translation> <translation id="4842976633412754305">આ પૃષ્ઠ અનધિકૃત સ્રોતોમાંથી સ્ક્રિપ્ટ્સ લોડ કરવાનો પ્રયાસ કરી રહ્યું છે.</translation> <translation id="4844333629810439236">અન્ય કીબોર્ડ્સ</translation> <translation id="4846680374085650406">તમે આ સેટિંગ માટે વ્ય્વસ્થાપકની ભલામણને અનુસરી રહ્યાં છો.</translation> @@ -2696,7 +2691,6 @@ <translation id="5254368820972107711">દૂર કરવા માટેની ફાઇલો બતાવો</translation> <translation id="52550593576409946">કિઓસ્ક ઍપ્લિકેશન લોંચ કરી શકાઈ નથી.</translation> <translation id="5255315797444241226">તમે દાખલ કરેલો પાસફ્રેઝ ખોટો છે.</translation> -<translation id="5259571578888203461">સાઇટને તમે ક્લિપબોર્ડ પર કૉપિ કરો છો તે ટેક્સ્ટ અને છબીઓ જોવાની મંજૂરી ન આપો</translation> <translation id="5260508466980570042">માફ કરશો, તમારો ઈમેઇલ અથવા પાસવર્ડ ચકાસી શકાયો નથી. કૃપા કરી ફરી પ્રયાસ કરો.</translation> <translation id="5261683757250193089">વેબ દુકાનમાં ખોલો</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />ફાઇલોને ગમે ત્યાંથી ઍક્સેસ કરો, ઑફલાઇનથી પણ.<ph name="MARKUP_2" /> @@ -3171,7 +3165,6 @@ <translation id="5972708806901999743">ટોચ પર જાઓ</translation> <translation id="5972826969634861500"><ph name="PRODUCT_NAME" /> શરૂ કરો</translation> <translation id="5975083100439434680">ઝૂમ ઘટાડો</translation> -<translation id="5975730206036440725">PPD શોધી શકતાં નથી. તમારી Chromebook ઑનલાઇન છે કે નહીં તે તપાસો અને ફરી પ્રયાસ કરો.</translation> <translation id="5975792506968920132">બેટરી ચાર્જની ટકાવારી</translation> <translation id="5976160379964388480">અન્ય લોકો</translation> <translation id="5978264784700053212">સંદેશ કેન્દ્ર</translation> @@ -3213,7 +3206,6 @@ <translation id="6042308850641462728">વધુ</translation> <translation id="6042850536017090003">ઍપ નોટિફિકેશનો પર ટૅપ કરો.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" />, <ph name="TAB_NAME" /> સાથે Chrome ટૅબ શેર કરી રહી છે.</translation> -<translation id="6043357981274314628">થઈ ગયું!</translation> <translation id="6044805581023976844"><ph name="APP_NAME" />, <ph name="TAB_NAME" /> સાથે Chrome ટૅબ અને ઑડિઓને શેર કરી રહી છે.</translation> <translation id="6049004884579590341">પૂર્ણ સ્ક્રીનથી બહાર નીકળવા માટે |<ph name="ACCELERATOR" />|ને દબાવી રાખો</translation> <translation id="6049065490165456785">આંતરિક કૅમેરાથી ફોટો</translation> @@ -3380,7 +3372,6 @@ <translation id="6311220991371174222">તમારી પ્રોફાઇલ ખોલતી વખતે કોઈ ભૂલ આવાને કારણે Chrome પ્રારંભ કરી શકતાં નથી. Chrome પુનઃપ્રારંભ કરવાનો પ્રયાસ કરો.</translation> <translation id="6312403991423642364">અજ્ઞાત નેટવર્ક ભૂલ</translation> <translation id="6313641880021325787">VRથી બહાર નીકળો</translation> -<translation id="6314335155547195432">પાસવર્ડ જનરેટ કરો</translation> <translation id="6314819609899340042">આ <ph name="IDS_SHORT_PRODUCT_NAME" /> ઉપકરણ પર તમે સફળતાપૂર્વક ડિબગિંગ સુવિધાઓ સક્ષમ કરેલી છે.</translation> <translation id="6315343732431721770"><ph name="URL" /> ને શામેલ કરવા માટે તમારા સ્ટાર્ટઅપ પૃષ્ઠો બદલવામાં આવ્યાં હતાં. તમારા સ્ટાર્ટઅપ પૃષ્ઠને બદલનારા એક્સ્ટેન્શનને અક્ષમ કરવા માટે, પુનઃસ્થાપિત કરો ક્લિક કરો.</translation> <translation id="6315493146179903667">બધાને આગળ લાવો</translation> @@ -3418,7 +3409,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Android માટે Smart Lock સેટ કરો</translation> <translation id="6374469231428023295">ફરી પ્રયાસ કરો</translation> -<translation id="6377158645544167202">પ્રિન્ટર કનેક્ટ કરી શકતાં નથી. તપાસો કે પ્રિન્ટર ચાલુ છે અને વાઇ-ફાઇ અથવા USB દ્વારા તમારા Chromebook સાથે કનેક્ટ કરેલું છે.</translation> <translation id="6380143666419481200">સ્વીકારો અને ચાલુ રાખો</translation> <translation id="6383051423892982287">તમારા પોતાના <ph name="BEGIN_LINK" />સમન્વયન પાસફ્રેઝ<ph name="END_LINK" /> સાથે સમન્વયિત ડેટા એન્ક્રિપ્ટ કરો</translation> <translation id="6384275966486438344">આ પર તમારી શોધ સેટિંગ્સ બદલો: <ph name="SEARCH_HOST" /></translation> @@ -3575,7 +3565,6 @@ <translation id="6606070663386660533">ટૅબ 8</translation> <translation id="6607272825297743757">ફાઇલ માહિતી</translation> <translation id="6607831829715835317">વધુ સા&ધનો</translation> -<translation id="6610183966322615106">પ્રિન્ટર ઉમેરવામાં ભૂલ</translation> <translation id="6612358246767739896">સુરક્ષિત સામગ્રી</translation> <translation id="6613452264606394692">આ પેજને બુકમાર્ક કરીને અહીં ઝડપથી પાછા ફરી શકશો</translation> <translation id="6615455863669487791">મને બતાવો</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb index 92c0748..e4fbe58 100644 --- a/chrome/app/resources/generated_resources_hi.xtb +++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">चालू - कस्टम सेटिंग</translation> <translation id="1493892686965953381"><ph name="LOAD_STATE_PARAMETER" /> की प्रतीक्षा कर रहा है...</translation> <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> अन्य उपलब्ध डिवाइस.</translation> -<translation id="1497284176235884849">उपलब्ध कराया गया PPD अमान्य है.</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" का नाम बदलने में असमर्थ. <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">अज्ञात डिवाइस [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">किसी एकाधिक प्रवेश सत्र में इस मालिक खाते को पहला प्रवेश खाता होना चाहिए.</translation> @@ -1774,7 +1773,6 @@ <translation id="3697100740575341996">आपके IT व्यवस्थापक ने आपके डिवाइस के लिए Chrome Goodies को अक्षम कर दिया है. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">ईमेल पता</translation> <translation id="3702500414347826004">आपके स्टार्टअप पेज <ph name="URL" /> को शामिल करने के लिए बदल दिए गए थे.</translation> -<translation id="3703669627274482482">जब कोई साइट क्लिपबोर्ड पर आपके कॉपी किए गए लेख और इमेज देखना चाहे, तो इसके लिए पूछें</translation> <translation id="370415077757856453">JavaScript को ब्लॉक किया गया</translation> <translation id="3704331259350077894">कार्रवाई का अंत</translation> <translation id="3705722231355495246">-</translation> @@ -2121,7 +2119,6 @@ <translation id="4270393598798225102">वर्शन <ph name="NUMBER" /></translation> <translation id="4271396100647220620">कोई मिलान नहीं</translation> <translation id="4275830172053184480">अपना डिवाइस पुन: प्रारंभ करें</translation> -<translation id="4276216215490044084">बड़ा PPD लोड नहीं किया जा सकता. अधिकतम आकार 250kB है.</translation> <translation id="4278390842282768270">अनुमति है</translation> <translation id="4281844954008187215">सेवा की शर्तें</translation> <translation id="4282196459431406533">Smart Lock चालू है</translation> @@ -2201,7 +2198,6 @@ <translation id="4430369329743628066">बुकमार्क जोड़ा गया</translation> <translation id="443464694732789311">जारी रखें</translation> <translation id="4439318412377770121">क्या आप <ph name="DEVICE_NAME" /> को Google क्लाउड डिवाइस में पंजीकृत करना चाहते हैं?</translation> -<translation id="4439612350502082674">प्रिंटर नहीं जोड़ा जा सकता. फिर से शुरू करें और दोबारा कोशिश करें.</translation> <translation id="4441124369922430666">क्या आप चाहते हैं कि मशीन चालू होने पर यह ऐप्स स्वचालित रूप से प्रारंभ हो जाए?</translation> <translation id="444134486829715816">विस्तृत करें...</translation> <translation id="4441548209689510310">वर्तनी परीक्षण के विकल्प दिखाएं</translation> @@ -2432,7 +2428,6 @@ <translation id="4839303808932127586">इस रूप में वीडियो स&हेजें...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> आइटम चयनित</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{1 और}one{# और}other{# और}}</translation> -<translation id="4840626203080576849">जब कोई साइट क्लिपबोर्ड पर आपके कॉपी किए गए लेख और इमेज देखना चाहे, तो इसके लिए पूछें (सुझाया गया)</translation> <translation id="4842976633412754305">यह पृष्ठ अप्रमाणीकृत स्रोतों से स्क्रिप्ट लोड करने का प्रयास कर रहा है.</translation> <translation id="4844333629810439236">अन्य कीबोर्ड</translation> <translation id="4846680374085650406">आप इस सेटिंग के लिए व्यवस्थापक की अनुशंसा का अनुसरण कर रहे हैं.</translation> @@ -2699,7 +2694,6 @@ <translation id="5254368820972107711">निकाली जाने वाली फ़ाइलें दिखाएं</translation> <translation id="52550593576409946">कियोस्क ऐप्लिकेशन लॉन्च नहीं किया जा सका.</translation> <translation id="5255315797444241226">आपके द्वारा दर्ज किया गया पासफ़्रेज़ गलत है.</translation> -<translation id="5259571578888203461">साइटों को वह लेख और इमेज न देखने दें जिन्हें आप क्लिपबोर्ड पर कॉपी करते हैं</translation> <translation id="5260508466980570042">क्षमा करें, आपका ईमेल या पासवर्ड सत्यापित नहीं हो सका. कृपया फिर से प्रयास करें.</translation> <translation id="5261683757250193089">वेब स्टोर में खोलें</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />फ़ाइलें हर कहीं से एक्सेस करें, यहां तक कि ऑफ़लाइन भी.<ph name="MARKUP_2" /> @@ -3173,7 +3167,6 @@ <translation id="5972708806901999743">शीर्ष पर ले जाएं</translation> <translation id="5972826969634861500"><ph name="PRODUCT_NAME" /> प्रारंभ करें</translation> <translation id="5975083100439434680">ज़ूम आउट</translation> -<translation id="5975730206036440725">PPD नहीं मिला. देखें कि आपका Chromebook ऑनलाइन है और दोबारा कोशिश करें.</translation> <translation id="5975792506968920132">बैटरी चार्ज का प्रतिशत</translation> <translation id="5976160379964388480">अन्य</translation> <translation id="5978264784700053212">संदेश केंद्र</translation> @@ -3215,7 +3208,6 @@ <translation id="6042308850641462728">अधिक</translation> <translation id="6042850536017090003">ऐप्लिकेशन सूचनाओं पर टैप करें.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" />, <ph name="TAB_NAME" /> के साथ Chrome टैब को साझा कर रहा है.</translation> -<translation id="6043357981274314628">हो गया!</translation> <translation id="6044805581023976844"><ph name="APP_NAME" />, <ph name="TAB_NAME" /> के साथ Chrome टैब और ऑडियो साझा कर रहा है.</translation> <translation id="6049004884579590341">पूरी स्क्रीन से बाहर निकलने के लिए |<ph name="ACCELERATOR" />| दबाकर रखें</translation> <translation id="6049065490165456785">आंतरिक कैमरे का फ़ोटो</translation> @@ -3382,7 +3374,6 @@ <translation id="6311220991371174222">Chrome शुरू नहीं हो पा रहा है क्योंकि आपकी प्रोफ़ाइल खोलते समय कुछ गलत हो गया. Chrome को फिर से शुरू करने की कोशिश करें.</translation> <translation id="6312403991423642364">अज्ञात नेटवर्क गड़बड़ी</translation> <translation id="6313641880021325787">VR से बाहर निकलें</translation> -<translation id="6314335155547195432">पासवर्ड जेनरेट करें</translation> <translation id="6314819609899340042">आपने इस <ph name="IDS_SHORT_PRODUCT_NAME" /> डिवाइस पर डीबग करने की सुविधाओं को सफलतापूर्वक सक्षम कर लिया है.</translation> <translation id="6315343732431721770">आपके स्टार्टअप पेज <ph name="URL" /> को शामिल करने के लिए बदल दिए गए थे. आपके स्टार्टअप पेज में बदलाव करने वाले एक्सटेंशन को अक्षम करने के लिए, बहाल करें पर क्लिक करें.</translation> <translation id="6315493146179903667">सभी को सामने लाएं</translation> @@ -3420,7 +3411,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Android के लिए Smart Lock सेट अप करें</translation> <translation id="6374469231428023295">फिर से कोशिश करें</translation> -<translation id="6377158645544167202">प्रिंटर कनेक्ट नहीं किया जा सकता. देखें कि प्रिंटर चालू है और वाई-फ़ाई या USB के ज़रिए आपके Chromebook से कनेक्ट किया हुआ है.</translation> <translation id="6380143666419481200">स्वीकार करें और जारी रखें</translation> <translation id="6383051423892982287">सिंक किए गए डेटा को अपने खुद के <ph name="BEGIN_LINK" />सिंक पासफ़्रेज़<ph name="END_LINK" /> से एन्क्रिप्ट करें</translation> <translation id="6384275966486438344">अपनी खोज सेटिंग इसमें बदलें: <ph name="SEARCH_HOST" /></translation> @@ -3577,7 +3567,6 @@ <translation id="6606070663386660533">टैब 8</translation> <translation id="6607272825297743757">फ़ाइल जानकारी</translation> <translation id="6607831829715835317">अधिक टू&ल</translation> -<translation id="6610183966322615106">प्रिंटर जोड़ने में गड़बड़ी</translation> <translation id="6612358246767739896">सुरक्षित सामग्री</translation> <translation id="6613452264606394692">इस पेज को बुकमार्क करके झटपट यहां वापस पहुंचें</translation> <translation id="6615455863669487791">मुझे दिखाएं</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb index cfe8337..eb8df0c5 100644 --- a/chrome/app/resources/generated_resources_hr.xtb +++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">Uključeno – prilagođene postavke</translation> <translation id="1493892686965953381">Čeka se <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033">Broj ostalih dostupnih uređaja: <ph name="NUM_PRINTERS" />.</translation> -<translation id="1497284176235884849">Navedeni PPD nije važeći.</translation> <translation id="1497522201463361063">Nije moguće promijeniti naziv datoteke "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Nepoznati uređaj [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Vlasnik ovog računa mora biti prvi prijavljeni račun u sesiji s višestrukom prijavom.</translation> @@ -1774,7 +1773,6 @@ <translation id="3697100740575341996">Vaš informatički administrator onemogućio je značajku Chrome Goodies za vaš uređaj. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">E-adresa</translation> <translation id="3702500414347826004">Vaše polazne stranice promijenjene su tako da uključuju <ph name="URL" />.</translation> -<translation id="3703669627274482482">Traženje dopuštenja kada web-lokacija želi vidjeti tekst i slike koje kopirate u međuspremnik</translation> <translation id="370415077757856453">JavaScript je blokiran</translation> <translation id="3704331259350077894">Obustava postupka</translation> <translation id="3705722231355495246">-</translation> @@ -2122,7 +2120,6 @@ <translation id="4270393598798225102">Verzija <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Nema rezultata</translation> <translation id="4275830172053184480">Ponovo pokrenite svoj uređaj</translation> -<translation id="4276216215490044084">Nije moguće učitati veliki PPD. Maksimalna je veličina 250 KB.</translation> <translation id="4278390842282768270">Dopušteno</translation> <translation id="4281844954008187215">Uvjeti upotrebe usluge</translation> <translation id="4282196459431406533">Smart Lock uključen</translation> @@ -2202,7 +2199,6 @@ <translation id="4430369329743628066">Oznaka je dodana</translation> <translation id="443464694732789311">Nastavi</translation> <translation id="4439318412377770121">Želite li registrirati <ph name="DEVICE_NAME" /> u Google Cloud uređajima?</translation> -<translation id="4439612350502082674">Dodavanje pisača nije uspjelo. Pokrenite ponovo i pokušajte opet.</translation> <translation id="4441124369922430666">Želite li automatski pokrenuti tu aplikaciju kada se uređaj uključi?</translation> <translation id="444134486829715816">Proširi...</translation> <translation id="4441548209689510310">Prikaži opcije provjere pravopisa</translation> @@ -2433,7 +2429,6 @@ <translation id="4839303808932127586">Sp&remi videozapis kao...</translation> <translation id="4839847978919684242">Odabrane stavke: <ph name="SELCTED_FILES_COUNT" /></translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{Još 1}one{Još #}few{Još #}other{Još #}}</translation> -<translation id="4840626203080576849">Traženje dopuštenja kada web-lokacija želi vidjeti tekst i slike koje kopirate u međuspremnik (preporučeno)</translation> <translation id="4842976633412754305">Ta stranica pokušava učitati skripte iz neprovjerenih izvora.</translation> <translation id="4844333629810439236">Ostale tipkovnice</translation> <translation id="4846680374085650406">Vi pratite preporuku administratora za ovu postavku.</translation> @@ -2700,7 +2695,6 @@ <translation id="5254368820972107711">Prikaži datoteke za uklanjanje</translation> <translation id="52550593576409946">Aplikacija kioska nije pokrenuta.</translation> <translation id="5255315797444241226">Zaporka koju ste unijeli nije točna.</translation> -<translation id="5259571578888203461">Ne dopuštaj web-lokacijama uvid u tekst i slike koje kopirate u međuspremnik</translation> <translation id="5260508466980570042">Žao nam je, nije bilo moguće potvrditi e-adresu ili zaporku. Pokušajte ponovo.</translation> <translation id="5261683757250193089">Otvori u web-trgovini</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Pristupite datotekama svugdje, čak i kada niste povezani s internetom.<ph name="MARKUP_2" /> @@ -3174,7 +3168,6 @@ <translation id="5972708806901999743">Premjesti na vrh</translation> <translation id="5972826969634861500">Pokreni <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Smanji</translation> -<translation id="5975730206036440725">PPD nije pronađen. Provjerite je li Chromebook online i pokušajte ponovo.</translation> <translation id="5975792506968920132">Postotak napunjenosti baterije</translation> <translation id="5976160379964388480">Drugo</translation> <translation id="5978264784700053212">Centar za poruke</translation> @@ -3216,7 +3209,6 @@ <translation id="6042308850641462728">Više</translation> <translation id="6042850536017090003">Dodirnite obavijesti aplikacije.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> dijeli Chromeovu karticu s karticom <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Gotovo!</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> dijeli Chromeovu karticu i zvuk s karticom <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Pritisnite i zadržite |<ph name="ACCELERATOR" />| da biste napustili prikaz na cijelom zaslonu</translation> <translation id="6049065490165456785">Fotografija iz internog fotoaparata</translation> @@ -3383,7 +3375,6 @@ <translation id="6311220991371174222">Chrome se ne može pokrenuti zbog pogreške prilikom otvaranja vašeg profila. Pokušajte ponovo pokrenuti Chrome.</translation> <translation id="6312403991423642364">Nepoznata mrežna pogreška</translation> <translation id="6313641880021325787">ZATVORI VR</translation> -<translation id="6314335155547195432">Generiranje zaporke</translation> <translation id="6314819609899340042">Uspješno ste omogućili značajke za otklanjanje pogrešaka na ovom uređaju <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation> <translation id="6315343732431721770">Vaše polazne stranice promijenjene su tako da uključuju <ph name="URL" />. Da biste onemogućili proširenja koja mijenjaju polaznu stranicu, kliknite Vrati.</translation> <translation id="6315493146179903667">Postavi sve u prednji plan</translation> @@ -3421,7 +3412,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Postavite Smart Lock za Android</translation> <translation id="6374469231428023295">Pokušaj ponovo</translation> -<translation id="6377158645544167202">Povezivanje pisača nije uspjelo. Provjerite je li pisač uključen i povezan s Chromebookom putem Wi-Fi mreže ili USB-a.</translation> <translation id="6380143666419481200">Prihvati i nastavi</translation> <translation id="6383051423892982287">Kriptiraj sinkronizirane podatke vlastitom <ph name="BEGIN_LINK" />šifrom za sinkronizaciju<ph name="END_LINK" /></translation> <translation id="6384275966486438344">promijeniti postavke pretraživanja u: <ph name="SEARCH_HOST" /></translation> @@ -3578,7 +3568,6 @@ <translation id="6606070663386660533">Kartica 8</translation> <translation id="6607272825297743757">Informacije o datoteci</translation> <translation id="6607831829715835317">Više a&lata</translation> -<translation id="6610183966322615106">Pogreška prilikom dodavanja pisača</translation> <translation id="6612358246767739896">Zaštićeni sadržaj</translation> <translation id="6613452264606394692">Označite ovu stranicu da biste se brzo vratili na nju</translation> <translation id="6615455863669487791">Pokaži mi</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb index 3b4aa839..6c0b0d8 100644 --- a/chrome/app/resources/generated_resources_hu.xtb +++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">Be – egyéni beállítások</translation> <translation id="1493892686965953381">Várakozás a következőre: <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> további elérhető eszköz.</translation> -<translation id="1497284176235884849">Érvénytelen a megadott PPD.</translation> <translation id="1497522201463361063">A(z) "<ph name="FILE_NAME" />" fájl nem nevezhető át. <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Ismeretlen eszköz [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Ennek a tulajdonosi fióknak kell lennie az első bejelentkezett fióknak a többfiókos bejelentkezés munkamenete során.</translation> @@ -1775,7 +1774,6 @@ <translation id="3697100740575341996">IT-rendszergazdája letiltotta a Chrome Goodies szolgáltatást az Ön eszközén. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">E-mail cím</translation> <translation id="3702500414347826004">Kezdőoldala módosult, így már a következőt is tartalmazza: <ph name="URL" />.</translation> -<translation id="3703669627274482482">Kérdezzen meg, amikor egy webhely szeretné megtekinteni a vágólapra másolt szövegeket és képeket</translation> <translation id="370415077757856453">JavaScript letiltva</translation> <translation id="3704331259350077894">Működés megszüntetése</translation> <translation id="3705722231355495246">-</translation> @@ -2122,7 +2120,6 @@ <translation id="4270393598798225102">Verzió <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Nincs találat</translation> <translation id="4275830172053184480">Indítsa újra az eszközt</translation> -<translation id="4276216215490044084">Nem használható túl nagy PPD. A maximális méret 250 KB.</translation> <translation id="4278390842282768270">Engedélyezve</translation> <translation id="4281844954008187215">Általános Szerződési Feltételek</translation> <translation id="4282196459431406533">A Smart Lock be van kapcsolva</translation> @@ -2202,7 +2199,6 @@ <translation id="4430369329743628066">Könyvjelző hozzáadva</translation> <translation id="443464694732789311">Tovább</translation> <translation id="4439318412377770121">Regisztrálja <ph name="DEVICE_NAME" /> eszközét a Google Cloud Devices szolgáltatásban?</translation> -<translation id="4439612350502082674">Nem sikerült a nyomtató hozzáadása. Újraindítás után próbálja meg ismét.</translation> <translation id="4441124369922430666">Szeretné automatikusan elindítani ezt az alkalmazást, amikor bekapcsolja a számítógépet?</translation> <translation id="444134486829715816">Részletes nézet...</translation> <translation id="4441548209689510310">Helyesírás-ellenőrzési lehetőségek megjelenítése</translation> @@ -2433,7 +2429,6 @@ <translation id="4839303808932127586">Vi&deo mentése másként...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> elem kiválasztva</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{1 további}other{# további}}</translation> -<translation id="4840626203080576849">Kérdezzen meg, amikor egy webhely szeretné megtekinteni a vágólapra másolt szövegeket és képeket (ajánlott)</translation> <translation id="4842976633412754305">Az oldal nem hiteles forrásokból próbál szkripteket betölteni.</translation> <translation id="4844333629810439236">Egyéb billentyűzetek</translation> <translation id="4846680374085650406">A rendszergazda javaslatát fogadja el ennél a beállításnál.</translation> @@ -2700,7 +2695,6 @@ <translation id="5254368820972107711">Az eltávolítandó fájlok megjelenítése</translation> <translation id="52550593576409946">A kioszkalkalmazást nem sikerült elindítani.</translation> <translation id="5255315797444241226">A megadott összetett jelszó helytelen.</translation> -<translation id="5259571578888203461">Annak tiltása a webhelyek számára, hogy lássák a vágólapra másolt szövegeket és képeket</translation> <translation id="5260508466980570042">Sajnáljuk, e-mail-címét vagy jelszavát nem sikerült megerősíteni. Próbálja ismét.</translation> <translation id="5261683757250193089">Megnyitás az Internetes áruházban</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Fájljait bárhonnan, akár offline módban is elérheti.<ph name="MARKUP_2" /> @@ -3176,7 +3170,6 @@ <translation id="5972708806901999743">Mozgatás a lista tetejére</translation> <translation id="5972826969634861500"><ph name="PRODUCT_NAME" /> indítása</translation> <translation id="5975083100439434680">Kicsinyítés</translation> -<translation id="5975730206036440725">Nem található a PPD. Ellenőrizze, hogy csatlakozik-e a Chromebook az internetre, majd próbálja újra.</translation> <translation id="5975792506968920132">Az akkumulátor feltöltöttségének százaléka</translation> <translation id="5976160379964388480">Egyéb</translation> <translation id="5978264784700053212">Üzenetközpont</translation> @@ -3218,7 +3211,6 @@ <translation id="6042308850641462728">Hosszabban</translation> <translation id="6042850536017090003">Koppintson az Alkalmazásértesítések elemre.</translation> <translation id="6043317578411397101">A(z) <ph name="APP_NAME" /> megosztja a Chrome egy lapját a következővel: <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Kész</translation> <translation id="6044805581023976844">A(z) <ph name="APP_NAME" /> megosztja a Chrome egy lapját és a hangot a következővel: <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Tartsa lenyomva a(z) |<ph name="ACCELERATOR" />| gombot a teljes képernyős mód elhagyásához</translation> <translation id="6049065490165456785">Fotó a belső kamerával</translation> @@ -3385,7 +3377,6 @@ <translation id="6311220991371174222">Nem indítható el a Chrome, mert hiba történt profiljának megnyitása során. Próbálkozzon a Chrome újraindításával.</translation> <translation id="6312403991423642364">Ismeretlen hálózati hiba</translation> <translation id="6313641880021325787">KILÉPÉS A VIRTUÁLIS VALÓSÁGBÓL</translation> -<translation id="6314335155547195432">Jelszó létrehozása</translation> <translation id="6314819609899340042">Sikeresen engedélyezte a hibakeresési szolgáltatásokat ezen a(z) <ph name="IDS_SHORT_PRODUCT_NAME" /> eszközön.</translation> <translation id="6315343732431721770">Kezdőoldala módosult, így már a következőt is tartalmazza: <ph name="URL" />. A kezdőoldalt módosító bővítmények letiltásához kattintson a Visszaállítás gombra.</translation> <translation id="6315493146179903667">Összes az előtérbe</translation> @@ -3423,7 +3414,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">A Smart Lock beállítása Androidon</translation> <translation id="6374469231428023295">Próbálja újra</translation> -<translation id="6377158645544167202">Nem sikerült a nyomtató csatlakoztatása. Ellenőrizze, hogy be van-e kapcsolva a nyomtató, és hogy csatlakozik-e a Chromebookhoz Wi-Fi-n vagy USB-n keresztül.</translation> <translation id="6380143666419481200">Elfogadás és folytatás</translation> <translation id="6383051423892982287">A szinkronizált adatok titkosítása saját <ph name="BEGIN_LINK" />összetett szinkronizálási jelszóval<ph name="END_LINK" /></translation> <translation id="6384275966486438344">A keresési beállítások módosítása a következőre: <ph name="SEARCH_HOST" /></translation> @@ -3580,7 +3570,6 @@ <translation id="6606070663386660533">8. lap</translation> <translation id="6607272825297743757">Fájlinformáció</translation> <translation id="6607831829715835317">További eszközök</translation> -<translation id="6610183966322615106">A nyomtató hozzáadása során hiba történt</translation> <translation id="6612358246767739896">Védett tartalom</translation> <translation id="6613452264606394692">Gyorsan visszajuthat ide, ha hozzáadja az oldalt a könyvjelzőkhöz</translation> <translation id="6615455863669487791">Megjelenítés</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb index 5d95442..4482284 100644 --- a/chrome/app/resources/generated_resources_id.xtb +++ b/chrome/app/resources/generated_resources_id.xtb
@@ -299,7 +299,7 @@ <translation id="1444628761356461360">Setelan ini dikelola oleh pemilik perangkat, <ph name="OWNER_EMAIL" />.</translation> <translation id="144518587530125858">Tidak dapat memuat '<ph name="IMAGE_PATH" />' untuk tema.</translation> <translation id="1451375123200651445">Halaman web, File Tunggal</translation> -<translation id="1451917004835509682">Tambahkan Orang yang Dilindungi</translation> +<translation id="1451917004835509682">Tambahkan Pengguna yang Dilindungi</translation> <translation id="1454223536435069390">Ambil screenshot</translation> <translation id="1459967076783105826">Mesin telusur ditambahkan oleh ekstensi</translation> <translation id="146000042969587795">Bingkai ini diblokir karena berisi sejumlah konten tidak aman.</translation> @@ -327,7 +327,6 @@ <translation id="1487335504823219454">Aktif - setelan khusus</translation> <translation id="1493892686965953381">Menunggu <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> perangkat lain tersedia.</translation> -<translation id="1497284176235884849">PPD yang disediakan tidak valid.</translation> <translation id="1497522201463361063">Tidak dapat mengubah nama "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Perangkat tidak dikenal [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Akun pemilik ini harus akun yang masuk pertama dalam sesi fitur masuk banyak akun.</translation> @@ -798,7 +797,7 @@ <translation id="2232876851878324699">File berisi satu sertifikat, yang tidak diimpor:</translation> <translation id="2233502537820838181">Infor&masi selengkapnya</translation> <translation id="2238379619048995541">Data Status Frekuensi</translation> -<translation id="2239921694246509981">Tambahkan orang yang dilindungi</translation> +<translation id="2239921694246509981">Tambahkan pengguna yang dilindungi</translation> <translation id="2241053333139545397">Membaca dan mengubah data Anda di sejumlah situs web</translation> <translation id="2242687258748107519">Info File</translation> <translation id="2245240762616536227">Mengontrol cara histori browsing mempersonalisasi Penelusuran, iklan, dan layanan Google lainnya</translation> @@ -1362,7 +1361,7 @@ <translation id="3071624960923923138">Anda dapat mengklik di sini untuk membuka tab baru</translation> <translation id="3074037959626057712">Anda telah login dan mengaktifkan Sinkronisasi</translation> <translation id="3075874217500066906">Anda perlu memulai ulang untuk memulai proses Powerwash. Setelah proses mulai ulang, Anda akan diminta untuk mengonfirmasi apakah ingin melanjutkan.</translation> -<translation id="3076677906922146425">Izinkan siapa pun menambahkan orang ke Chrome</translation> +<translation id="3076677906922146425">Izinkan siapa pun menambahkan pengguna ke Chrome</translation> <translation id="3076909148546628648"><ph name="DOWNLOAD_RECEIVED" />/<ph name="DOWNLOAD_TOTAL" /></translation> <translation id="3077734595579995578">shift</translation> <translation id="3078461028045006476">Bagikan dengan <ph name="EXTENSION_NAME" /></translation> @@ -1774,7 +1773,6 @@ <translation id="3697100740575341996">Administrator TI Anda telah menonaktifkan Chrome Goodies untuk perangkat Anda. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">Alamat email</translation> <translation id="3702500414347826004">Halaman awal diubah untuk menyertakan <ph name="URL" />.</translation> -<translation id="3703669627274482482">Tanyakan saat situs ingin melihat teks dan gambar yang Anda salin ke papan klip</translation> <translation id="370415077757856453">JavaScript diblokir</translation> <translation id="3704331259350077894">Penghentian Operasi</translation> <translation id="3705722231355495246">-</translation> @@ -2122,7 +2120,6 @@ <translation id="4270393598798225102">Versi <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Tidak ada yang cocok</translation> <translation id="4275830172053184480">Mulai ulang perangkat Anda</translation> -<translation id="4276216215490044084">Tidak dapat memuat PPD yang besar. Ukuran maksimum sebesar 250 kB.</translation> <translation id="4278390842282768270">Diizinkan</translation> <translation id="4281844954008187215">Persyaratan Layanan</translation> <translation id="4282196459431406533">Smart Lock diaktifkan</translation> @@ -2202,7 +2199,6 @@ <translation id="4430369329743628066">Bookmark ditambahkan</translation> <translation id="443464694732789311">Lanjutkan</translation> <translation id="4439318412377770121">Ingin mendaftarkan <ph name="DEVICE_NAME" /> ke Perangkat Google Cloud?</translation> -<translation id="4439612350502082674">Tidak dapat menambahkan printer. Harap mulai ulang dan coba lagi.</translation> <translation id="4441124369922430666">Ingin memulai aplikasi ini secara otomatis saat komputer diaktifkan?</translation> <translation id="444134486829715816">Luaskan...</translation> <translation id="4441548209689510310">Tampilkan opsi periksa ejaan</translation> @@ -2433,7 +2429,6 @@ <translation id="4839303808932127586">Sim&pan video sebagai...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> item dipilih</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{1 lainnya}other{# lainnya}}</translation> -<translation id="4840626203080576849">Tanyakan saat situs ingin melihat teks dan gambar yang Anda salin ke papan klip (disarankan)</translation> <translation id="4842976633412754305">Halaman ini mencoba memuat skrip dari sumber yang tidak diautentikasi.</translation> <translation id="4844333629810439236">Keyboard lain</translation> <translation id="4846680374085650406">Anda mengikuti saran administrator untuk setelan ini.</translation> @@ -2700,7 +2695,6 @@ <translation id="5254368820972107711">Tampilkan file yang akan dihapus</translation> <translation id="52550593576409946">Aplikasi Kios tidak dapat diluncurkan.</translation> <translation id="5255315797444241226">Frasa sandi yang Anda masukkan salah.</translation> -<translation id="5259571578888203461">Jangan izinkan situs melihat teks dan gambar yang Anda salin ke papan klip</translation> <translation id="5260508466980570042">Maaf, email atau sandi Anda tidak dapat diverifikasi. Harap coba lagi.</translation> <translation id="5261683757250193089">Buka di Toko Web</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Akses file dari mana saja, bahkan secara offline.<ph name="MARKUP_2" /> @@ -3078,7 +3072,7 @@ <translation id="5829401023154985950">Kelola...</translation> <translation id="5830410401012830739">Mengelola setelan lokasi...</translation> <translation id="5830720307094128296">Simp&an Halaman Sebagai...</translation> -<translation id="5832805196449965646">Tambahkan Orang</translation> +<translation id="5832805196449965646">Tambahkan Pengguna</translation> <translation id="583281660410589416">Tidak dikenal</translation> <translation id="5832976493438355584">Terkunci</translation> <translation id="5833610766403489739">File ini tidak terdeteksi berada di mana. Periksa setelan lokasi download dan coba lagi.</translation> @@ -3154,7 +3148,7 @@ <translation id="5933376509899483611">Zona waktu</translation> <translation id="5934281776477898549">Tidak ada pembaruan</translation> <translation id="5939518447894949180">Setel ulang</translation> -<translation id="5941153596444580863">Tambahkan orang...</translation> +<translation id="5941153596444580863">Tambahkan pengguna...</translation> <translation id="5941343993301164315">Harap masuk ke <ph name="TOKEN_NAME" />.</translation> <translation id="5941711191222866238">Perkecil</translation> <translation id="5946591249682680882">ID Laporan <ph name="WEBRTC_LOG_REPORT_ID" /></translation> @@ -3174,7 +3168,6 @@ <translation id="5972708806901999743">Pindahkan ke atas</translation> <translation id="5972826969634861500">Mulai <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Perkecil</translation> -<translation id="5975730206036440725">Tidak dapat menemukan PPD. Harap periksa apakah Chromebook sudah online dan coba lagi.</translation> <translation id="5975792506968920132">Persentase Pengisian Daya Baterai</translation> <translation id="5976160379964388480">Yang Lain</translation> <translation id="5978264784700053212">Pusat pesan</translation> @@ -3216,7 +3209,6 @@ <translation id="6042308850641462728">Lainnya</translation> <translation id="6042850536017090003">Tap Notifikasi aplikasi.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> membagikan tab Chrome dengan <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Selesai.</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> membagikan tab Chrome dan audio dengan <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Tekan dan tahan |<ph name="ACCELERATOR" />| untuk keluar dari layar penuh</translation> <translation id="6049065490165456785">Foto dari kamera internal</translation> @@ -3383,7 +3375,6 @@ <translation id="6311220991371174222">Tidak dapat memulai Chrome karena terjadi kesalahan saat membuka profil Anda. Coba mulai ulang Chrome.</translation> <translation id="6312403991423642364">Kesalahan jaringan tidak dikenal</translation> <translation id="6313641880021325787">KELUAR VR</translation> -<translation id="6314335155547195432">Buat Sandi</translation> <translation id="6314819609899340042">Anda berhasil mengaktifkan fitur debug di perangkat <ph name="IDS_SHORT_PRODUCT_NAME" /> ini.</translation> <translation id="6315343732431721770">Halaman awal diubah untuk menyertakan <ph name="URL" />. Untuk menonaktifkan ekstensi yang mengubah halaman awal, klik Pulihkan.</translation> <translation id="6315493146179903667">Pindahkan Semua ke Depan</translation> @@ -3421,7 +3412,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Siapkan Smart Lock untuk Android</translation> <translation id="6374469231428023295">Coba Lagi</translation> -<translation id="6377158645544167202">Tidak dapat menghubungkan printer. Harap periksa apakah printer sudah diaktifkan dan terhubung dengan Wi-Fi atau USB.</translation> <translation id="6380143666419481200">Setujui dan lanjutkan</translation> <translation id="6383051423892982287">Enkripsikan data yang disinkronkan dengan <ph name="BEGIN_LINK" />frasa sandi sinkronisasi<ph name="END_LINK" /> Anda sendiri</translation> <translation id="6384275966486438344">Ubah setelan penelusuran Anda menjadi: <ph name="SEARCH_HOST" /></translation> @@ -3578,7 +3568,6 @@ <translation id="6606070663386660533">Tab 8</translation> <translation id="6607272825297743757">Info file</translation> <translation id="6607831829715835317">Fitur &lainnya</translation> -<translation id="6610183966322615106">Kesalahan saat menambahkan printer</translation> <translation id="6612358246767739896">Konten dilindungi</translation> <translation id="6613452264606394692">Kembali ke halaman secara cepat dengan mem-bookmark halaman ini</translation> <translation id="6615455863669487791">Tunjukkan</translation> @@ -3686,7 +3675,7 @@ <translation id="6788210894632713004">Ektensi yang belum dibuka</translation> <translation id="6790428901817661496">Putar</translation> <translation id="6790497603648687708"><ph name="EXTENSION_NAME" /> telah ditambahkan dari jauh</translation> -<translation id="6790820461102226165">Tambahkan Orang...</translation> +<translation id="6790820461102226165">Tambahkan Pengguna...</translation> <translation id="6792072150955115067"><ph name="APP_NAME" /> ingin membagikan konten layar Anda dengan <ph name="TARGET_NAME" />. Pilih konten yang ingin Anda bagikan.</translation> <translation id="6793604637258913070">Sorot tempat penyisipan teks saat muncul atau berpindah</translation> <translation id="6797493596609571643">Ups, ada yang tidak beres.</translation> @@ -4083,7 +4072,7 @@ <translation id="7456142309650173560">dev</translation> <translation id="7456847797759667638">Buka Lokasi...</translation> <translation id="7461924472993315131">Pasang Pin</translation> -<translation id="7463006580194749499">Tambahkan orang</translation> +<translation id="7463006580194749499">Tambahkan pengguna</translation> <translation id="7464490149090366184">Gagal membuat file zip, item sudah ada: "$1"</translation> <translation id="7465778193084373987">Netscape Certificate Revocation URL</translation> <translation id="7469894403370665791">Sambungkan ke jaringan ini secara otomatis</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb index 161cf924..8643d476 100644 --- a/chrome/app/resources/generated_resources_it.xtb +++ b/chrome/app/resources/generated_resources_it.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">Con: impostazioni personalizzate</translation> <translation id="1493892686965953381">In attesa di <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033">Ci sono altri <ph name="NUM_PRINTERS" /> dispositivi disponibili.</translation> -<translation id="1497284176235884849">Il file PPD fornito non è valido.</translation> <translation id="1497522201463361063">Impossibile ridenominare "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Dispositivo sconosciuto [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Questo account proprietario deve essere il primo account registrato in una sessione con accesso simultaneo.</translation> @@ -1771,7 +1770,6 @@ <translation id="3697100740575341996">Il tuo amministratore IT ha disattivato gli extra di Chrome per il tuo dispositivo. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">Indirizzo email</translation> <translation id="3702500414347826004">Le pagine iniziali sono state modificate per includere <ph name="URL" />.</translation> -<translation id="3703669627274482482">Chiedi conferma quando un sito vuole vedere il testo e le immagini copiati negli appunti</translation> <translation id="370415077757856453">JavaScript bloccato</translation> <translation id="3704331259350077894">Termine operazione</translation> <translation id="3705722231355495246">-</translation> @@ -2119,7 +2117,6 @@ <translation id="4270393598798225102">Versione <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Nessuna corrispondenza</translation> <translation id="4275830172053184480">Riavvia il dispositivo</translation> -<translation id="4276216215490044084">Impossibile caricare il file PPD; dimensioni troppo grandi. Dimensioni massime: 250 kB.</translation> <translation id="4278390842282768270">Consentiti</translation> <translation id="4281844954008187215">Termini di servizio</translation> <translation id="4282196459431406533">Funzione Smart Lock attiva</translation> @@ -2199,7 +2196,6 @@ <translation id="4430369329743628066">Aggiunto ai preferiti</translation> <translation id="443464694732789311">Continua</translation> <translation id="4439318412377770121">Vuoi registrare <ph name="DEVICE_NAME" /> su Google Cloud Devices?</translation> -<translation id="4439612350502082674">Impossibile aggiungere la stampante. Riavvia e riprova.</translation> <translation id="4441124369922430666">Vuoi avviare automaticamente questa app all'accensione del computer?</translation> <translation id="444134486829715816">Espandi...</translation> <translation id="4441548209689510310">Mostra opzioni per il controllo ortografico</translation> @@ -2430,7 +2426,6 @@ <translation id="4839303808932127586">Sal&va video come...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> elementi selezionati</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{1 altro elemento}other{# altri elementi}}</translation> -<translation id="4840626203080576849">Chiedi conferma quando un sito vuole vedere il testo e le immagini copiati negli appunti (opzione consigliata)</translation> <translation id="4842976633412754305">Questa pagina sta tentando di caricare script da fonti non autenticate.</translation> <translation id="4844333629810439236">Altre tastiere</translation> <translation id="4846680374085650406">Stai seguendo il consiglio dell'amministratore per questa impostazione.</translation> @@ -2697,7 +2692,6 @@ <translation id="5254368820972107711">Mostra i file da rimuovere</translation> <translation id="52550593576409946">Impossibile avviare l'applicazione kiosk.</translation> <translation id="5255315797444241226">La passphrase inserita non è corretta.</translation> -<translation id="5259571578888203461">Non consentire ai siti di vedere testi e immagini copiati negli appunti</translation> <translation id="5260508466980570042">Spiacenti, impossibile verificare l'email o la password. Riprova.</translation> <translation id="5261683757250193089">Apri nel Web Store</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Accedi ai file ovunque, anche offline.<ph name="MARKUP_2" /> @@ -3170,7 +3164,6 @@ <translation id="5972708806901999743">Sposta in alto</translation> <translation id="5972826969634861500">Avvia <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Diminuisci lo zoom</translation> -<translation id="5975730206036440725">Impossibile trovare il file PPD. Verifica che il Chromebook sia online e riprova.</translation> <translation id="5975792506968920132">Percentuale di carica della batteria</translation> <translation id="5976160379964388480">Altri</translation> <translation id="5978264784700053212">Centro messaggi</translation> @@ -3212,7 +3205,6 @@ <translation id="6042308850641462728">Più</translation> <translation id="6042850536017090003">Tocca Notifiche app.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> condivide una scheda Chrome con <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Operazione completata.</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> condivide l'audio e una scheda Chrome con <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Tieni premuto |<ph name="ACCELERATOR" />| per uscire dallo schermo intero</translation> <translation id="6049065490165456785">Foto dalla fotocamera interna</translation> @@ -3379,7 +3371,6 @@ <translation id="6311220991371174222">Impossibile avviare Chrome perché si è verificato un errore durante l'apertura del profilo. Prova a riavviare il browser.</translation> <translation id="6312403991423642364">Errore di rete sconosciuto</translation> <translation id="6313641880021325787">ESCI DA REALTÀ VIRTUALE</translation> -<translation id="6314335155547195432">Genera password</translation> <translation id="6314819609899340042">Hai attivato le funzioni di debug su questo dispositivo <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation> <translation id="6315343732431721770">Le pagine iniziali sono state modificate per includere <ph name="URL" />. Per disattivare le estensioni che cambiano la pagina iniziale, fai clic su Ripristina.</translation> <translation id="6315493146179903667">Porta tutto in primo piano</translation> @@ -3417,7 +3408,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Configura Smart Lock per Android</translation> <translation id="6374469231428023295">Riprova</translation> -<translation id="6377158645544167202">Impossibile connettere la stampante. Verifica che sia accesa e collegata al Chromebook tramite Wi-Fi o USB.</translation> <translation id="6380143666419481200">Accetta e continua</translation> <translation id="6383051423892982287">Cripta i dati sincronizzati con la tua <ph name="BEGIN_LINK" />passphrase di sincronizzazione<ph name="END_LINK" />.</translation> <translation id="6384275966486438344">Modifica delle impostazioni di ricerca per: <ph name="SEARCH_HOST" /></translation> @@ -3574,7 +3564,6 @@ <translation id="6606070663386660533">Scheda 8</translation> <translation id="6607272825297743757">Info sul file</translation> <translation id="6607831829715835317">A&ltri strumenti</translation> -<translation id="6610183966322615106">Errore durante l'aggiunta della stampante</translation> <translation id="6612358246767739896">Contenuti protetti</translation> <translation id="6613452264606394692">Aggiungi questa pagina ai preferiti per ritrovarla rapidamente</translation> <translation id="6615455863669487791">Mostrami</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb index 917604e..426ea58 100644 --- a/chrome/app/resources/generated_resources_iw.xtb +++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">מופעל - הגדרות מותאמות אישית</translation> <translation id="1493892686965953381">ממתין ל-<ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> מכשירים זמינים נוספים.</translation> -<translation id="1497284176235884849">קובץ ה-PPD שסופק אינו חוקי.</translation> <translation id="1497522201463361063">לא ניתן לשנות את השם של "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">מכשיר לא ידוע [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">החשבון של בעלים זה צריך להיות החשבון הראשון שאליו נכנסים בעת כניסה לפעילות באתר מחשבונות מרובים.</translation> @@ -1770,7 +1769,6 @@ <translation id="3697100740575341996">מנהל ה-IT שלך השבית את התוספות ל-Chrome עבור המכשיר שלך. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">כתובת אימייל</translation> <translation id="3702500414347826004">דפי הפתיחה שלך השתנו והם כוללים עכשיו את <ph name="URL" />.</translation> -<translation id="3703669627274482482">יש לשאול כשאתר רוצה לגשת אל טקסט ותמונות שהועתקו אל לוח העריכה</translation> <translation id="370415077757856453">JavaScript נחסם</translation> <translation id="3704331259350077894">הפסקת פעולה</translation> <translation id="3705722231355495246">-</translation> @@ -2118,7 +2116,6 @@ <translation id="4270393598798225102">גרסה <ph name="NUMBER" /></translation> <translation id="4271396100647220620">אין התאמות</translation> <translation id="4275830172053184480">הפעלת המכשיר מחדש</translation> -<translation id="4276216215490044084">לא ניתן לטעון קובץ PPD גדול. הגודל המקסימלי הוא 250kB.</translation> <translation id="4278390842282768270">מותר</translation> <translation id="4281844954008187215">תנאי שירות</translation> <translation id="4282196459431406533">Smart Lock מופעל</translation> @@ -2198,7 +2195,6 @@ <translation id="4430369329743628066">הסימנייה נוספה</translation> <translation id="443464694732789311">המשך</translation> <translation id="4439318412377770121">האם ברצונך לרשום את <ph name="DEVICE_NAME" /> ל-Google Cloud Devices?</translation> -<translation id="4439612350502082674">לא ניתן להוסיף את המדפסת. אפשר להפעיל מחדש ולנסות שוב.</translation> <translation id="4441124369922430666">האם ברצונך להפעיל יישום זה באופן אוטומטי בעת הפעלת המחשב?</translation> <translation id="444134486829715816">הרחב...</translation> <translation id="4441548209689510310">הצג אפשרויות של בדיקת איות</translation> @@ -2429,7 +2425,6 @@ <translation id="4839303808932127586">שמ&ור וידאו כ...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> פריטים נבחרו</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{עוד אחד}two{עוד #}many{עוד #}other{עוד #}}</translation> -<translation id="4840626203080576849">יש לשאול כשאתר רוצה גישה אל טקסט ותמונות שהועתקו אל לוח העריכה (מומלץ)</translation> <translation id="4842976633412754305">דף זה מנסה לטעון סקריפטים ממקורות שאינם מאומתים.</translation> <translation id="4844333629810439236">מקלדות אחרות</translation> <translation id="4846680374085650406">אתה פועל בהתאם להמלצה של מנהל המערכת לגבי הגדרה זו.</translation> @@ -2696,7 +2691,6 @@ <translation id="5254368820972107711">הצג קבצים שמיועדים להסרה</translation> <translation id="52550593576409946">לא ניתן היה להפעיל את יישום הקיוסק.</translation> <translation id="5255315797444241226">משפט הסיסמה שהזנת שגוי.</translation> -<translation id="5259571578888203461">אין להתיר לאתרים לגשת לטקסט ותמונות שהועתקו ללוח</translation> <translation id="5260508466980570042">מצטערים, לא ניתן לאמת את האימייל או את הסיסמה שלך. נסה שוב.</translation> <translation id="5261683757250193089">פתח בחנות האינטרנט</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />היכנס לקבצים מכל מקום, אפילו כשאינך מחובר לאינטרנט.<ph name="MARKUP_2" /> @@ -3171,7 +3165,6 @@ <translation id="5972708806901999743">העבר למעלה</translation> <translation id="5972826969634861500">הפעל את <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">התרחק</translation> -<translation id="5975730206036440725">לא ניתן למצוא את קובץ ה-PPD. יש לוודא שה-Chromebook מחובר לרשת ולנסות שוב.</translation> <translation id="5975792506968920132">אחוז טעינת הסוללה</translation> <translation id="5976160379964388480">אחרים</translation> <translation id="5978264784700053212">מרכז ההודעות</translation> @@ -3213,7 +3206,6 @@ <translation id="6042308850641462728">עוד</translation> <translation id="6042850536017090003">מקישים על 'הודעות מאפליקציות'.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> משתף כרטיסיית Chrome עם <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">סיימת!</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> משתף כרטיסייה ואודיו של Chrome עם <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">לחץ לחיצה ארוכה על |<ph name="ACCELERATOR" />| כדי לצאת ממסך מלא</translation> <translation id="6049065490165456785">תמונה מהמצלמה הפנימית</translation> @@ -3380,7 +3372,6 @@ <translation id="6311220991371174222">לא ניתן להפעיל את Chrome מכיוון שמשהו השתבש בפתיחת הפרופיל שלך. נסה להפעיל מחדש את Chrome.</translation> <translation id="6312403991423642364">שגיאת רשת לא ידועה</translation> <translation id="6313641880021325787">יציאה מ-VR</translation> -<translation id="6314335155547195432">צור סיסמה</translation> <translation id="6314819609899340042">הפעלת בהצלחה תכונות ניפוי באגים במכשיר <ph name="IDS_SHORT_PRODUCT_NAME" /> זה.</translation> <translation id="6315343732431721770">דפי הפתיחה השתנו והם כוללים עכשיו את <ph name="URL" />. בלחיצה על 'שחזר' ניתן להשבית תוספים שמשנים את דף הפתיחה שלך.</translation> <translation id="6315493146179903667">הבא הכול קדימה</translation> @@ -3418,7 +3409,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">הגדרת Smart Lock ל-Android</translation> <translation id="6374469231428023295">נסה שוב</translation> -<translation id="6377158645544167202">לא ניתן לחבר את המדפסת. יש לוודא שהמדפסת פועלת ומחוברת אל ה-Chromebook דרך רשת ה-Wi-Fi או בחיבור USB.</translation> <translation id="6380143666419481200">קבל והמשך</translation> <translation id="6383051423892982287">הצפן נתונים מסונכרנים בעזרת <ph name="BEGIN_LINK" />ביטוי סיסמה משלך לסנכרון<ph name="END_LINK" /></translation> <translation id="6384275966486438344">שנה את הגדרות החיפוש שלך ל: <ph name="SEARCH_HOST" /></translation> @@ -3575,7 +3565,6 @@ <translation id="6606070663386660533">כרטיסייה 8</translation> <translation id="6607272825297743757">פרטי הקובץ</translation> <translation id="6607831829715835317">כלים &נוספים</translation> -<translation id="6610183966322615106">שגיאה בהוספת מדפסת</translation> <translation id="6612358246767739896">תוכן מוגן</translation> <translation id="6613452264606394692">הוספת הדף לסימניות תאפשר גישה מהירה אליו</translation> <translation id="6615455863669487791">הראה לי</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb index b5c231b9..441f83c 100644 --- a/chrome/app/resources/generated_resources_ja.xtb +++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -328,7 +328,6 @@ <translation id="1487335504823219454">オン - カスタム設定</translation> <translation id="1493892686965953381"><ph name="LOAD_STATE_PARAMETER" /> を待機しています...</translation> <translation id="1495486559005647033">利用可能なデバイスが <ph name="NUM_PRINTERS" /> 個あります。</translation> -<translation id="1497284176235884849">指定された PPD が無効です。</translation> <translation id="1497522201463361063">ファイル「<ph name="FILE_NAME" />」の名前を変更することができません。<ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">不明なデバイス [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">この所有者アカウントは、マルチログイン セッションで最初にログインするアカウントである必要があります。</translation> @@ -1775,7 +1774,6 @@ <translation id="3697100740575341996">IT 管理者が、お使いのデバイスに対して Chrome Goodies を無効にしています。<ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">メール アドレス</translation> <translation id="3702500414347826004">起動ページに <ph name="URL" /> が追加されました。</translation> -<translation id="3703669627274482482">サイトがクリップボードにコピーされているテキストや画像にアクセスする際に確認する</translation> <translation id="370415077757856453">JavaScript がブロックされました</translation> <translation id="3704331259350077894">処理が停止した</translation> <translation id="3705722231355495246">-</translation> @@ -2123,7 +2121,6 @@ <translation id="4270393598798225102">バージョン <ph name="NUMBER" /></translation> <translation id="4271396100647220620">一致する結果は見つかりませんでした</translation> <translation id="4275830172053184480">デバイスの再起動</translation> -<translation id="4276216215490044084">サイズの大きい PPD を読み込めません。最大サイズは 250 KB です。</translation> <translation id="4278390842282768270">許可</translation> <translation id="4281844954008187215">利用規約</translation> <translation id="4282196459431406533">Smart Lock が有効です</translation> @@ -2203,7 +2200,6 @@ <translation id="4430369329743628066">ブックマークを追加しました</translation> <translation id="443464694732789311">続行</translation> <translation id="4439318412377770121"><ph name="DEVICE_NAME" /> を Google クラウド デバイスに登録しますか?</translation> -<translation id="4439612350502082674">プリンタを追加できません。再起動してもう一度お試しください。</translation> <translation id="4441124369922430666">マシンの起動時にこのアプリを自動的に起動しますか?</translation> <translation id="444134486829715816">展開...</translation> <translation id="4441548209689510310">スペルチェック オプションを表示</translation> @@ -2434,7 +2430,6 @@ <translation id="4839303808932127586">名前を付けて動画を保存(&V)...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> 個のアイテムを選択</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{他 1 件}other{他 # 件}}</translation> -<translation id="4840626203080576849">サイトがクリップボードにコピーされているテキストや画像にアクセスする際に確認する(推奨)</translation> <translation id="4842976633412754305">このページは承認されていないソースからのスクリプトを読み込もうとしています。</translation> <translation id="4844333629810439236">他のキーボード</translation> <translation id="4846680374085650406">管理者が推奨する設定を使用しています。</translation> @@ -2701,7 +2696,6 @@ <translation id="5254368820972107711">削除されるファイルを表示</translation> <translation id="52550593576409946">キオスク アプリケーションを起動できませんでした。</translation> <translation id="5255315797444241226">入力したパスフレーズが正しくありません。</translation> -<translation id="5259571578888203461">クリップボードにコピーしたテキストや画像へのアクセスをサイトに許可しない</translation> <translation id="5260508466980570042">メールまたはパスワードを確認できませんでした。もう一度お試しください。</translation> <translation id="5261683757250193089">ウェブストアで開く</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />どこからでも、オフラインでもファイルにアクセス<ph name="MARKUP_2" /> @@ -3175,7 +3169,6 @@ <translation id="5972708806901999743">トップに移動</translation> <translation id="5972826969634861500"><ph name="PRODUCT_NAME" /> を起動</translation> <translation id="5975083100439434680">縮小する</translation> -<translation id="5975730206036440725">PPD が見つかりません。Chromebook がオンラインであることを確認してもう一度お試しください。</translation> <translation id="5975792506968920132">バッテリー残量(%)</translation> <translation id="5976160379964388480">その他</translation> <translation id="5978264784700053212">メッセージ センター</translation> @@ -3217,7 +3210,6 @@ <translation id="6042308850641462728">もっと見る</translation> <translation id="6042850536017090003">[アプリの通知] をタップします。</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> が <ph name="TAB_NAME" /> の Chrome タブを共有しています。</translation> -<translation id="6043357981274314628">完了しました。</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> が <ph name="TAB_NAME" /> の Chrome タブと音声を共有しています。</translation> <translation id="6049004884579590341">全画面表示を終了するには |<ph name="ACCELERATOR" />| キーを押し続けます</translation> <translation id="6049065490165456785">内蔵カメラの写真</translation> @@ -3384,7 +3376,6 @@ <translation id="6311220991371174222">プロフィールを開こうとして問題が発生したため、Chrome を起動できません。Chrome を再起動してみてください。</translation> <translation id="6312403991423642364">ネットワークが不明なためエラーが発生しました</translation> <translation id="6313641880021325787">VR を終了</translation> -<translation id="6314335155547195432">パスワードを生成</translation> <translation id="6314819609899340042">この <ph name="IDS_SHORT_PRODUCT_NAME" /> 搭載デバイスでデバッグ機能が有効になりました。</translation> <translation id="6315343732431721770">起動ページに <ph name="URL" /> が追加されました。起動ページを変更する拡張機能を無効にするには、[復元] をクリックしてください。</translation> <translation id="6315493146179903667">すべてを手前に移動</translation> @@ -3422,7 +3413,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Smart Lock for Android を設定してください</translation> <translation id="6374469231428023295">再試行</translation> -<translation id="6377158645544167202">プリンタに接続できません。プリンタの電源が入っていて、Chromebook と Wi-Fi または USB 経由で接続されていることを確認してください。</translation> <translation id="6380143666419481200">同意して続行</translation> <translation id="6383051423892982287">同期データを<ph name="BEGIN_LINK" />同期パスフレーズ<ph name="END_LINK" />で暗号化する</translation> <translation id="6384275966486438344">検索設定を次に変更します: <ph name="SEARCH_HOST" /></translation> @@ -3579,7 +3569,6 @@ <translation id="6606070663386660533">タブ 8</translation> <translation id="6607272825297743757">ファイル情報</translation> <translation id="6607831829715835317">その他のツール(&L)</translation> -<translation id="6610183966322615106">プリンタの追加中にエラーが発生しました</translation> <translation id="6612358246767739896">保護されたコンテンツ</translation> <translation id="6613452264606394692">このページをブックマークすると、すばやくこのページに戻ることができます</translation> <translation id="6615455863669487791">表示</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb index 2bf4f668..793d2ca 100644 --- a/chrome/app/resources/generated_resources_kn.xtb +++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -323,7 +323,6 @@ <translation id="1487335504823219454">ಆನ್ - ಕಸ್ಟಮ್ ಸೆಟ್ಟಿಂಗ್ಗಳು</translation> <translation id="1493892686965953381"><ph name="LOAD_STATE_PARAMETER" /> ಗಾಗಿ ನಿರೀಕ್ಷಿಸಲಾಗುತ್ತಿದೆ...</translation> <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> ಇತರ ಲಭ್ಯವಿರುವ ಸಾಧನಗಳು.</translation> -<translation id="1497284176235884849">ಒದಗಿಸಿದ PPD ಅಮಾನ್ಯವಾಗಿದೆ.</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" ಗೆ ಮರುಮರುಹೆಸರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">ಅಪರಿಚಿತ ಸಾಧನ [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">ಬಹು ಸೈನ್-ಇನ್ ಸೆಷನ್ನಲ್ಲಿ ಈ ಮಾಲೀಕರ ಖಾತೆಯೇ ಮೊದಲ ಸೈನ್-ಇನ್ ಮಾಡಿದ ಖಾತೆ ಆಗಿರಬೇಕು.</translation> @@ -1768,7 +1767,6 @@ <translation id="3697100740575341996">ನಿಮ್ಮ IT ನಿರ್ವಾಹಕರು ನಿಮ್ಮ ಸಾಧನಕ್ಕಾಗಿ Chrome Goodies ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ್ದಾರೆ. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">ಇಮೇಲ್ ವಿಳಾಸ</translation> <translation id="3702500414347826004">ನಿಮ್ಮ ಆರಂಭಿಕ ಪುಟಗಳನ್ನು <ph name="URL" /> ಗೆ ಸೇರಿಸಲು ಬದಲಾಯಿಸಲಾಗಿದೆ.</translation> -<translation id="3703669627274482482">ನೀವು ಕ್ಲಿಪ್ಬೋರ್ಡ್ಗೆ ನಕಲಿಸಿದ ಪಠ್ಯ ಮತ್ತು ಚಿತ್ರಗಳನ್ನು ಒಂದು ಸೈಟ್ ನೋಡಲು ಬಯಸುವಾಗ ಅನುಮತಿ ಕೇಳಿ</translation> <translation id="370415077757856453">JavaScript ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation> <translation id="3704331259350077894">ಕಾರ್ಯಾಚರಣೆಯ ಅಂತ್ಯ</translation> <translation id="3705722231355495246">-</translation> @@ -2116,7 +2114,6 @@ <translation id="4270393598798225102">ಆವೃತ್ತಿ <ph name="NUMBER" /></translation> <translation id="4271396100647220620">ಯಾವುದೇ ಹೊಂದಾಣಿಕೆಗಳಿಲ್ಲ</translation> <translation id="4275830172053184480">ನಿಮ್ಮ ಸಾಧನವನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿ</translation> -<translation id="4276216215490044084">ದೊಡ್ಡ ಗಾತ್ರದ PPD ಅನ್ನು ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಗರಿಷ್ಠ ಗಾತ್ರ 250kB.</translation> <translation id="4278390842282768270">ಅನುಮತಿಸಲಾಗಿದೆ</translation> <translation id="4281844954008187215">ಸೇವೆಯ ನಿಯಮಗಳು</translation> <translation id="4282196459431406533">Smart Lock ಅನ್ನು ಆನ್ ಮಾಡಲಾಗಿದೆ</translation> @@ -2196,7 +2193,6 @@ <translation id="4430369329743628066">ಬುಕ್ಮಾರ್ಕ್ ಸೇರಿಸಲಾಗಿದೆ</translation> <translation id="443464694732789311">ಮುಂದುವರಿಸು</translation> <translation id="4439318412377770121">ನೀವು <ph name="DEVICE_NAME" /> ಅನ್ನು Google ಮೇಘ ಸಾಧನದಲ್ಲಿ ನೋಂದಾಯಿಸಲು ಇಚ್ಛಿಸುವಿರಾ?</translation> -<translation id="4439612350502082674">ಪ್ರಿಂಟರ್ ಸೇರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಮರುಪ್ರಾರಂಭಿಸಿ ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="4441124369922430666">ಯಂತ್ರವು ಆನ್ ಆದ ಸಂದರ್ಭದಲ್ಲಿ ಈ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ನೀವು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಆರಂಭಿಸಲು ಬಯಸುವಿರಾ?</translation> <translation id="444134486829715816">ವಿಸ್ತರಿಸಿ...</translation> <translation id="4441548209689510310">ಕಾಗುಣಿತ ಪರಿಶೀಲನೆ ಆಯ್ಕೆಗಳನ್ನು ತೋರಿಸು</translation> @@ -2428,7 +2424,6 @@ <translation id="4839303808932127586">ಇದರಂತೆ ವೀಡಿಯೊ ಉ&ಳಿಸಿ...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> ಐಟಂಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡಲಾಗಿದೆ</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{ಇನ್ನೂ 1}one{ಇನ್ನೂ #}other{ಇನ್ನೂ #}}</translation> -<translation id="4840626203080576849">ನೀವು ಕ್ಲಿಪ್ಬೋರ್ಡ್ಗೆ ನಕಲಿಸಿದ ಪಠ್ಯ ಮತ್ತು ಚಿತ್ರಗಳನ್ನು ಒಂದು ಸೈಟ್ ನೋಡಲು ಬಯಸಿದಾಗ, ಅನುಮತಿ ಕೇಳಿ (ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ)</translation> <translation id="4842976633412754305">ದೃಢೀಕರಿಸದಿರುವ ಮೂಲಗಳಿಂದ ಸ್ಕ್ರಿಪ್ಟ್ಗಳನ್ನು ಲೋಡ್ ಮಾಡಲು ಈ ಪುಟವು ಪ್ರಯತ್ನಿಸುತ್ತಿದೆ.</translation> <translation id="4844333629810439236">ಇತರ ಕೀಬೋರ್ಡ್ಗಳು</translation> <translation id="4846680374085650406">ನೀವು ಈ ಸೆಟ್ಟಿಂಗ್ಗಾಗಿ ನಿರ್ವಾಹಕರ ಶಿಫಾರಸನ್ನು ಅನುಸರಿಸುತ್ತಿರುವಿರಿ.</translation> @@ -2694,7 +2689,6 @@ <translation id="5254368820972107711">ತೆಗೆದುಹಾಕಲಾದ ಫೈಲ್ಗಳನ್ನು ತೋರಿಸಿ</translation> <translation id="52550593576409946">ಕಿಯೋಸ್ಕ್ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.</translation> <translation id="5255315797444241226">ನೀವು ನಮೂದಿಸಿದ ಪಾಸ್ಫ್ರೇಸ್ ತಪ್ಪಾಗಿದೆ.</translation> -<translation id="5259571578888203461">ನೀವು ಕ್ಲಿಪ್ಬೋರ್ಡ್ಗೆ ನಕಲಿಸಿದ ಪಠ್ಯ ಮತ್ತು ಚಿತ್ರಗಳನ್ನು ನೋಡಲು ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಬೇಡಿ</translation> <translation id="5260508466980570042">ಕ್ಷಮಿಸಿ, ನಿಮ್ಮ ಇಮೇಲ್ ಅಥವಾ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಪರಿಶೀಲಿಸಲಾಗಲಿಲ್ಲ. ದಯವಿಟ್ಟು ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="5261683757250193089">ವೆಬ್ಸ್ಟೋರ್ನಲ್ಲಿ ತೆರೆಯಿರಿ</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />ಆಫ್ಲೈನ್ನಲ್ಲಿದ್ದರೂ ಸಹ, ಎಲ್ಲಿಂದಬೇಕಾದರೂ ಫೈಲ್ಗಳನ್ನು ಪ್ರವೇಶಿಸಿ.<ph name="MARKUP_2" /> @@ -3171,7 +3165,6 @@ <translation id="5972708806901999743">ಮೇಲಕ್ಕೆ ಸರಿಸಿ</translation> <translation id="5972826969634861500"><ph name="PRODUCT_NAME" /> ಪ್ರಾರಂಭಿಸು</translation> <translation id="5975083100439434680">ಝೂಮ್ ಔಟ್</translation> -<translation id="5975730206036440725">PPD ಅನ್ನು ಹುಡುಕಲು ಸಾಧ್ಯವಿಲ್ಲ. ನಿಮ್ಮ Chromebook ಆನ್ಲೈನ್ನಲ್ಲಿದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸಿ ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="5975792506968920132">ಬ್ಯಾಟರಿ ಚಾರ್ಜ್ನ ಶೇಕಡಾವಾರು</translation> <translation id="5976160379964388480">ಇತರರು</translation> <translation id="5978264784700053212">ಸಂದೇಶ ಕೇಂದ್ರ</translation> @@ -3212,7 +3205,6 @@ <translation id="6042308850641462728">ಇನ್ನಷ್ಟು</translation> <translation id="6042850536017090003">ಅಪ್ಲಿಕೇಶನ್ ಅಧಿಸೂಚನೆಗಳ ಮೇಲೆ ಟ್ಯಾಪ್ ಮಾಡಿ.</translation> <translation id="6043317578411397101"><ph name="TAB_NAME" /> ಜೊತೆಗೆ <ph name="APP_NAME" /> Chrome ಟ್ಯಾಬ್ ಅನ್ನು ಹಂಚಿಕೊಳ್ಳುತ್ತಿದೆ.</translation> -<translation id="6043357981274314628">ಆಯಿತು!</translation> <translation id="6044805581023976844"><ph name="TAB_NAME" /> ಜೊತೆಗೆ Chrome ಟ್ಯಾಬ್ ಮತ್ತು ಆಡಿಯೋ ಅನ್ನು <ph name="APP_NAME" /> ಹಂಚಿಕೊಳ್ಳುತ್ತಿದೆ.</translation> <translation id="6049004884579590341">ಪೂರ್ಣಪರದೆಯಿಂದ ನಿರ್ಗಮಿಸಲು <ph name="ACCELERATOR" /> ಅನ್ನು ಒತ್ತಿ ಹಿಡಿದುಕೊಳ್ಳಿ</translation> <translation id="6049065490165456785">ಆಂತರಿಕ ಕ್ಯಾಮರಾದಿಂದ ಫೋಟೋ</translation> @@ -3379,7 +3371,6 @@ <translation id="6311220991371174222">ನಿಮ್ಮ ಪ್ರೊಫೈಲ್ ತೆರೆಯುವಾಗ ಏನೋ ತಪ್ಪು ಸಂಭವಿಸಿರುವ ಕಾರಣದಿಂದ Chrome ಆರಂಭಿಸಲಾಗುವುದಿಲ್ಲ. Chrome ಮರುಆರಂಭಿಸಲು ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="6312403991423642364">ಅಪರಿಚಿತ ನೆಟ್ವರ್ಕ್ ದೋಷ</translation> <translation id="6313641880021325787">VR ನಿಂದ ನಿರ್ಗಮಿಸಿ</translation> -<translation id="6314335155547195432">ಪಾಸ್ವರ್ಡ್ ರಚಿಸಿ</translation> <translation id="6314819609899340042">ಈ <ph name="IDS_SHORT_PRODUCT_NAME" /> ಸಾಧನದಲ್ಲಿ ನೀವು ದೋಷ ನಿವಾರಣಾ ವೈಶಿಷ್ಟ್ಯತೆಗಳನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಸಕ್ರಿಯಗೊಳಿಸಿದ್ದೀರಿ.</translation> <translation id="6315343732431721770">ನಿಮ್ಮ ಆರಂಭಿಕ ಪುಟಗಳನ್ನು <ph name="URL" /> ಗೆ ಸೇರಿಸಲು ಬದಲಾಯಿಸಲಾಗಿದೆ. ನಿಮ್ಮ ಆರಂಭಿಕ ಪುಟವನ್ನು ಬದಲಾಯಿಸುವ ವಿಸ್ತರಣೆಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿಲು, ಮರುಸ್ಥಾಪಿಸಿ ಕ್ಲಿಕ್ ಮಾಡಿ.</translation> <translation id="6315493146179903667">ಎಲ್ಲವನ್ನೂ ಮುಂದಕ್ಕೆ ಬರಿಸು</translation> @@ -3417,7 +3408,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Android ಗಾಗಿ Smart Lock ಅನ್ನು ಸೆಟಪ್ ಮಾಡಿ</translation> <translation id="6374469231428023295">ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ</translation> -<translation id="6377158645544167202">ಪ್ರಿಂಟರ್ ಅನ್ನು ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಪ್ರಿಂಟರ್ ಆನ್ ಆಗಿದೆಯೇ ಮತ್ತು ಅದು ನಿಮ್ಮ Chromebook ಗೆ ವೈ-ಫೈ ಅಥವಾ USB ಮೂಲಕ ಸಂಪರ್ಕಗೊಂಡಿದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸಿ.</translation> <translation id="6380143666419481200">ಸಮ್ಮತಿಸಿ ಮತ್ತು ಮುಂದುವರಿಯಿರಿ</translation> <translation id="6383051423892982287">ನಿಮ್ಮ ಸ್ವಂತ <ph name="BEGIN_LINK" />ಸಿಂಕ್ ಪಾಸ್ಫ್ರೇಸ್<ph name="END_LINK" /> ಮೂಲಕ ಸಿಂಕ್ ಮಾಡಲಾದ ಡೇಟಾವನ್ನು ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಿ</translation> <translation id="6384275966486438344">ನಿಮ್ಮ ಹುಡುಕಾಟದ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಹೀಗೆ ಬದಲಾಯಿಸಿ: <ph name="SEARCH_HOST" /></translation> @@ -3573,7 +3563,6 @@ <translation id="6606070663386660533">ಟ್ಯಾಬ್ 8</translation> <translation id="6607272825297743757">ಫೈಲ್ ಮಾಹಿತಿ</translation> <translation id="6607831829715835317">ಹೆಚ್ಚಿನ ಪರಿ&ಕರಗಳು</translation> -<translation id="6610183966322615106">ಪ್ರಿಂಟರ್ ಸೇರಿಸುವಲ್ಲಿ ದೋಷ</translation> <translation id="6612358246767739896">ಸಂರಕ್ಷಿಸಿದ ವಿಷಯ</translation> <translation id="6613452264606394692">ಈ ಪುಟವನ್ನು ಬುಕ್ಮಾರ್ಕ್ ಮಾಡುವ ಮೂಲಕ ಬಳಕೆಗೆ ವೇಗವಾಗಿ ಮರಳಿ ಬನ್ನಿ</translation> <translation id="6615455863669487791">ನನಗೆ ತೋರಿಸಿ</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb index 593b015..1d9b34a 100644 --- a/chrome/app/resources/generated_resources_ko.xtb +++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -328,7 +328,6 @@ <translation id="1487335504823219454">사용 - 맞춤 설정</translation> <translation id="1493892686965953381"><ph name="LOAD_STATE_PARAMETER" />을(를) 기다리는 중...</translation> <translation id="1495486559005647033">사용 가능한 다른 기기가 <ph name="NUM_PRINTERS" />개 있습니다.</translation> -<translation id="1497284176235884849">입력한 PPD가 잘못되었습니다.</translation> <translation id="1497522201463361063">'<ph name="FILE_NAME" />'의 이름을 변경할 수 없습니다. <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">알 수 없는 기기[<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">이 소유자 계정이 멀티 로그인 세션에서 처음으로 로그인하는 계정이 되어야 합니다.</translation> @@ -1775,7 +1774,6 @@ <translation id="3697100740575341996">IT 관리자가 내 기기에 Chrome Goodies를 이용할 수 없도록 설정했습니다. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">이메일 주소</translation> <translation id="3702500414347826004">시작 페이지가 <ph name="URL" />을(를) 포함하도록 변경되었습니다.</translation> -<translation id="3703669627274482482">사이트에서 사용자가 클립보드에 복사한 텍스트 및 이미지를 보려는 경우 확인</translation> <translation id="370415077757856453">자바스크립트가 차단됨</translation> <translation id="3704331259350077894">작업 중단</translation> <translation id="3705722231355495246">-</translation> @@ -2122,7 +2120,6 @@ <translation id="4270393598798225102">버전 <ph name="NUMBER" /></translation> <translation id="4271396100647220620">일치하는 항목이 없습니다.</translation> <translation id="4275830172053184480">기기 다시 시작</translation> -<translation id="4276216215490044084">큰 PPD를 로드할 수 없습니다. 최대 크기는 250KB입니다.</translation> <translation id="4278390842282768270">허용됨</translation> <translation id="4281844954008187215">서비스 약관</translation> <translation id="4282196459431406533">Smart Lock이 사용 설정됨</translation> @@ -2202,7 +2199,6 @@ <translation id="4430369329743628066">북마크 추가됨</translation> <translation id="443464694732789311">계속</translation> <translation id="4439318412377770121"><ph name="DEVICE_NAME" />을(를) Google 클라우드 기기에 등록하시겠습니까?</translation> -<translation id="4439612350502082674">프린터를 추가할 수 없습니다. 다시 시작한 후 시도해 보세요.</translation> <translation id="4441124369922430666">컴퓨터를 켤 때 이 앱을 자동으로 시작하시겠습니까?</translation> <translation id="444134486829715816">펼치기...</translation> <translation id="4441548209689510310">맞춤법 검사기 옵션 표시</translation> @@ -2433,7 +2429,6 @@ <translation id="4839303808932127586">동영상을 다른 이름으로 저장...(&V)</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" />개의 항목이 선택됨</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{1개 더보기}other{#개 더보기}}</translation> -<translation id="4840626203080576849">사이트에서 사용자가 클립보드에 복사한 텍스트 및 이미지를 보려는 경우 확인(권장)</translation> <translation id="4842976633412754305">이 페이지가 인증되지 않은 소스에서 스크립트를 로드하려고 시도하고 있습니다.</translation> <translation id="4844333629810439236">기타 키보드</translation> <translation id="4846680374085650406">이 설정에 대한 관리자 권장사항을 따릅니다.</translation> @@ -2700,7 +2695,6 @@ <translation id="5254368820972107711">삭제할 파일 표시</translation> <translation id="52550593576409946">키오스크 애플리케이션을 실행할 수 없습니다.</translation> <translation id="5255315797444241226">입력한 암호가 잘못되었습니다.</translation> -<translation id="5259571578888203461">사이트에서 사용자가 클립보드에 복사한 텍스트 및 이미지를 확인하도록 허용하지 않음</translation> <translation id="5260508466980570042">이메일 또는 비밀번호를 확인할 수 없습니다. 다시 시도해 주세요.</translation> <translation id="5261683757250193089">웹 스토어에서 열기</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />오프라인을 비롯하여 어디에서나 파일에 액세스하세요.<ph name="MARKUP_2" /> @@ -3174,7 +3168,6 @@ <translation id="5972708806901999743">위로 이동</translation> <translation id="5972826969634861500"><ph name="PRODUCT_NAME" /> 시작</translation> <translation id="5975083100439434680">축소</translation> -<translation id="5975730206036440725">PPD를 찾을 수 없습니다. Chromebook이 온라인 상태인지 확인하고 다시 시도해 보세요.</translation> <translation id="5975792506968920132">배터리 충전율</translation> <translation id="5976160379964388480">기타</translation> <translation id="5978264784700053212">메시지 센터</translation> @@ -3216,7 +3209,6 @@ <translation id="6042308850641462728">더보기</translation> <translation id="6042850536017090003">앱 알림을 탭하세요.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" />에서 <ph name="TAB_NAME" />와(과) Chrome 탭을 공유 중입니다.</translation> -<translation id="6043357981274314628">완료</translation> <translation id="6044805581023976844"><ph name="APP_NAME" />에서 <ph name="TAB_NAME" />와(과) Chrome 탭과 오디오를 공유 중입니다.</translation> <translation id="6049004884579590341">전체화면을 종료하려면 |<ph name="ACCELERATOR" />|을(를) 길게 누르기</translation> <translation id="6049065490165456785">내부 카메라의 사진</translation> @@ -3383,7 +3375,6 @@ <translation id="6311220991371174222">프로필을 여는 동안 문제가 발생했기 때문에 Chrome을 시작할 수 없습니다. Chrome을 다시 시작해 보세요.</translation> <translation id="6312403991423642364">알려지지 않은 네트워크 오류</translation> <translation id="6313641880021325787">VR 종료</translation> -<translation id="6314335155547195432">비밀번호 생성</translation> <translation id="6314819609899340042">이 <ph name="IDS_SHORT_PRODUCT_NAME" /> 기기에서 디버깅 기능을 사용 설정했습니다.</translation> <translation id="6315343732431721770">시작 페이지가 <ph name="URL" />을(를) 포함하도록 변경되었습니다. 시작 페이지를 변경하는 확장 프로그램을 사용하지 않으려면 복원을 클릭하세요.</translation> <translation id="6315493146179903667">앞으로 모두 가져오기</translation> @@ -3421,7 +3412,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Android용 Smart Lock 설정</translation> <translation id="6374469231428023295">다시 시도</translation> -<translation id="6377158645544167202">프린터를 연결할 수 없습니다. 프린터가 켜져 있으며 Wi-Fi 또는 USB를 통해 Chromebook에 연결되어 있는지 확인하세요.</translation> <translation id="6380143666419481200">동의 및 계속</translation> <translation id="6383051423892982287">나만의 <ph name="BEGIN_LINK" />동기화 암호<ph name="END_LINK" />로 동기화 데이터 암호화</translation> <translation id="6384275966486438344">다음으로 검색 설정 변경: <ph name="SEARCH_HOST" /></translation> @@ -3578,7 +3568,6 @@ <translation id="6606070663386660533">탭 8</translation> <translation id="6607272825297743757">파일 정보</translation> <translation id="6607831829715835317">도구 더보기</translation> -<translation id="6610183966322615106">프린터 추가 도중 오류 발생</translation> <translation id="6612358246767739896">보호된 콘텐츠</translation> <translation id="6613452264606394692">이 페이지를 북마크에 추가하여 빠르게 다시 방문하세요.</translation> <translation id="6615455863669487791">표시</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb index d9be179..c0bc1ff7 100644 --- a/chrome/app/resources/generated_resources_lt.xtb +++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">Įjungta – tinkinti nustatymai</translation> <translation id="1493892686965953381">Laukiama <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033">Kitų pasiekiamų įrenginių: <ph name="NUM_PRINTERS" />.</translation> -<translation id="1497284176235884849">Pateiktas PPD yra netinkamas.</translation> <translation id="1497522201463361063">Nepavyko pervardyti „<ph name="FILE_NAME" />“. <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Nežinomas įrenginys [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Kelių paskyrų sesijoje pirmiausia turi būti prisijungta naudojant šią savininko paskyrą.</translation> @@ -1774,7 +1773,6 @@ <translation id="3697100740575341996">IT administratorius jūsų įrenginyje neleido naudingų „Chrome“ funkcijų. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">El. pašto adresas</translation> <translation id="3702500414347826004">Paleidimo puslapiai pakeisti siekiant įtraukti <ph name="URL" />.</translation> -<translation id="3703669627274482482">Paklausti, kai svetainė nori matyti tekstą ir vaizdus, kuriuos nukopijuojate į iškarpinę</translation> <translation id="370415077757856453">„JavaScript“ užblokuotas</translation> <translation id="3704331259350077894">Operacijos nutraukimas</translation> <translation id="3705722231355495246">-</translation> @@ -2122,7 +2120,6 @@ <translation id="4270393598798225102"><ph name="NUMBER" /> versija</translation> <translation id="4271396100647220620">Nėra atitikčių</translation> <translation id="4275830172053184480">Iš naujo paleisti įrenginį</translation> -<translation id="4276216215490044084">Nepavyko įkelti didelio PPD. Didžiausias galimas dydis yra 250 kB.</translation> <translation id="4278390842282768270">Leidžiama</translation> <translation id="4281844954008187215">Paslaugų teikimo sąlygos</translation> <translation id="4282196459431406533">„Smart Lock“ įjungta</translation> @@ -2202,7 +2199,6 @@ <translation id="4430369329743628066">Žymė pridėta</translation> <translation id="443464694732789311">Tęsti</translation> <translation id="4439318412377770121">Ar norite registruoti „<ph name="DEVICE_NAME" />“ kaip „Google“ debesies įrenginį?</translation> -<translation id="4439612350502082674">Nepavyko pridėti spausdintuvo. Paleiskite iš naujo ir bandykite dar kartą.</translation> <translation id="4441124369922430666">Norite automatiškai paleisti šią programą, kai įjungiamas įrenginys?</translation> <translation id="444134486829715816">Išskleisti...</translation> <translation id="4441548209689510310">Rodyti rašybos tikrinimo parinktis</translation> @@ -2433,7 +2429,6 @@ <translation id="4839303808932127586">Iš&saugoti vaizdo įrašą kaip...</translation> <translation id="4839847978919684242">Pasirinkta elementų: <ph name="SELCTED_FILES_COUNT" /></translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{Dar 1}one{Dar #}few{Dar #}many{Dar #}other{Dar #}}</translation> -<translation id="4840626203080576849">Paklausti, kai svetainė nori matyti tekstą ir vaizdus, kuriuos nukopijuojate į iškarpinę (rekomenduojama)</translation> <translation id="4842976633412754305">Šis puslapis bando įkelti scenarijus iš neautentifikuotų šaltinių.</translation> <translation id="4844333629810439236">Kitos klaviatūros</translation> <translation id="4846680374085650406">Jūs vadovaujatės administratoriaus rekomendacija dėl šio nustatymo.</translation> @@ -2700,7 +2695,6 @@ <translation id="5254368820972107711">Rodyti norimus pašalinti failus</translation> <translation id="52550593576409946">Nepavyko paleisti viešojo terminalo programos.</translation> <translation id="5255315797444241226">Įvesta slaptafrazė neteisinga.</translation> -<translation id="5259571578888203461">Neleisti svetainėms peržiūrėti teksto ir vaizdų, kuriuos nukopijavote į iškarpinę</translation> <translation id="5260508466980570042">Atsiprašome, el. pašto ir slaptažodžio patvirtinti nepavyko. Bandykite dar kartą.</translation> <translation id="5261683757250193089">Atidaryti internetinėje parduotuvėje</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Pasiekite failus iš visur, net neprisijungę.<ph name="MARKUP_2" /> @@ -3175,7 +3169,6 @@ <translation id="5972708806901999743">Perkelti į viršų</translation> <translation id="5972826969634861500">Paleisti „<ph name="PRODUCT_NAME" />“</translation> <translation id="5975083100439434680">Tolinti</translation> -<translation id="5975730206036440725">Nepavyko rasti PPD. Patikrinkite, ar „Chromebook“ prijungtas, ir bandykite dar kartą.</translation> <translation id="5975792506968920132">Akumuliatoriaus įkrovimo procentas</translation> <translation id="5976160379964388480">Kita</translation> <translation id="5978264784700053212">Pranešimų centras</translation> @@ -3217,7 +3210,6 @@ <translation id="6042308850641462728">Daugiau</translation> <translation id="6042850536017090003">Palieskite programos pranešimus.</translation> <translation id="6043317578411397101">„<ph name="APP_NAME" />“ bendrina „Chrome“ skirtuką su <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Atlikta!</translation> <translation id="6044805581023976844">„<ph name="APP_NAME" />“ bendrina „Chrome“ skirtuką ir garsą su <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Paspauskite ir palaikykite |<ph name="ACCELERATOR" />|, kad išeitumėte iš viso ekrano režimo.</translation> <translation id="6049065490165456785">Vidiniu fotoaparatu daryta nuotrauka</translation> @@ -3384,7 +3376,6 @@ <translation id="6311220991371174222">Negalima paleisti „Chrome“, nes atidarant jūsų profilį įvyko klaida. Pabandykite paleisti „Chrome“ iš naujo.</translation> <translation id="6312403991423642364">Nežinoma tinklo klaida</translation> <translation id="6313641880021325787">IŠEITI IŠ VR</translation> -<translation id="6314335155547195432">Generuoti slaptažodį</translation> <translation id="6314819609899340042">Sėkmingai įgalinote derinimo funkcijas šiame „<ph name="IDS_SHORT_PRODUCT_NAME" />“ įrenginyje.</translation> <translation id="6315343732431721770">Paleidimo puslapiai pakeisti į <ph name="URL" />. Kad išjungtumėte plėtinius, kurie pakeičia paleidimo puslapį, spustelėkite „Atkurti“.</translation> <translation id="6315493146179903667">Viską iškelti į priekį</translation> @@ -3422,7 +3413,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">„Smart Lock“, skirtos „Android“, nustatymas</translation> <translation id="6374469231428023295">Bandyti dar kartą</translation> -<translation id="6377158645544167202">Nepavyko prijungti spausdintuvo. Patikrinkite, ar spausdintuvas yra įjungtas ir prijungtas prie „Chromebook“ naudojant „Wi-Fi“ arba USB.</translation> <translation id="6380143666419481200">Sutikti ir tęsti</translation> <translation id="6383051423892982287">Šifruokite sinchronizuojamus duomenis taikydami savo <ph name="BEGIN_LINK" />sinchronizavimo slaptafrazę<ph name="END_LINK" /></translation> <translation id="6384275966486438344">Pakeiskite paieškos nustatymus į: <ph name="SEARCH_HOST" /></translation> @@ -3579,7 +3569,6 @@ <translation id="6606070663386660533">8 skirtukas</translation> <translation id="6607272825297743757">Failo informacija</translation> <translation id="6607831829715835317">Daugiau įrank&ių</translation> -<translation id="6610183966322615106">Klaida pridedant spausdintuvą</translation> <translation id="6612358246767739896">Apsaugotas turinys</translation> <translation id="6613452264606394692">Grįžkite čia greičiau ir patogiau pasižymėję šį puslapį</translation> <translation id="6615455863669487791">Rodyti</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb index 8ebc2cfb..b06e8fc 100644 --- a/chrome/app/resources/generated_resources_lv.xtb +++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">Ieslēgta — pielāgoti iestatījumi</translation> <translation id="1493892686965953381">Gaida <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033">Vēl <ph name="NUM_PRINTERS" /> pieejamas ierīces.</translation> -<translation id="1497284176235884849">Norādītais PPD fails nav derīgs.</translation> <translation id="1497522201463361063">Failu <ph name="FILE_NAME" /> nevar pārdēvēt. <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Nezināma ierīce [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Vairākkārtējas pierakstīšanās sesijā šim īpašnieka kontam ir jābūt pirmajam kontam, kurā jāpierakstās.</translation> @@ -1774,7 +1773,6 @@ <translation id="3697100740575341996">Jūsu IT administrators ir atspējojis Chrome piedāvājumus jūsu ierīcei. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">E-pasta adrese</translation> <translation id="3702500414347826004">Jūsu sākumlapa tika mainīta, lai ietvertu: <ph name="URL" />.</translation> -<translation id="3703669627274482482">Vaicāt, ja vietne vēlas skatīt tekstu un attēlus, ko kopēsiet starpliktuvē</translation> <translation id="370415077757856453">JavaScript valoda bloķēta</translation> <translation id="3704331259350077894">Darbības pārtraukšana</translation> <translation id="3705722231355495246">-</translation> @@ -2122,7 +2120,6 @@ <translation id="4270393598798225102"><ph name="NUMBER" /> versija</translation> <translation id="4271396100647220620">Nav atbilstību</translation> <translation id="4275830172053184480">Ierīces restartēšana</translation> -<translation id="4276216215490044084">Nevar ielādēt lielu PPD failu. Maksimālais lielums ir 250 kB.</translation> <translation id="4278390842282768270">Atļauts</translation> <translation id="4281844954008187215">Google pakalpojumu noteikumi</translation> <translation id="4282196459431406533">Smart Lock ir ieslēgta</translation> @@ -2202,7 +2199,6 @@ <translation id="4430369329743628066">Grāmatzīme pievienota</translation> <translation id="443464694732789311">Turpināt</translation> <translation id="4439318412377770121">Vai vēlaties reģistrēt <ph name="DEVICE_NAME" /> ierīci Google mākoņa ierīcēs?</translation> -<translation id="4439612350502082674">Nevar pievienot printeri. Restartējiet ierīci un mēģiniet vēlreiz.</translation> <translation id="4441124369922430666">Vai vēlaties automātiski startēt šo lietotni, kad tiek ieslēgta ierīce?</translation> <translation id="444134486829715816">Izvērst...</translation> <translation id="4441548209689510310">Rādīt pareizrakstības pārbaudes iespējas</translation> @@ -2433,7 +2429,6 @@ <translation id="4839303808932127586">Saglabāt &video kā</translation> <translation id="4839847978919684242">Atlasīti <ph name="SELCTED_FILES_COUNT" /> vienumi.</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{Vēl 1}zero{Vēl #}one{Vēl #}other{Vēl #}}</translation> -<translation id="4840626203080576849">Vaicāt, ja vietne vēlas skatīt tekstu un attēlus, ko kopēsiet starpliktuvē (ieteicams)</translation> <translation id="4842976633412754305">Šajā lapā tiek mēģināts ielādēt skriptus no neautentificētiem avotiem.</translation> <translation id="4844333629810439236">Citas tastatūras</translation> <translation id="4846680374085650406">Jūs ievērojat administratora ieteikumus attiecībā uz šo iestatījumu.</translation> @@ -2700,7 +2695,6 @@ <translation id="5254368820972107711">Rādīt noņemamos failus</translation> <translation id="52550593576409946">Kioska lietojumprogrammu nevarēja palaist.</translation> <translation id="5255315797444241226">Ievadītā ieejas frāze ir nepareiza.</translation> -<translation id="5259571578888203461">Neļaut vietnēm skatīt tekstu un attēlus, ko kopējat starpliktuvē</translation> <translation id="5260508466980570042">Diemžēl jūsu e-pasta adresi vai paroli nevarēja verificēt. Lūdzu, mēģiniet vēlreiz.</translation> <translation id="5261683757250193089">Atvērt interneta veikalā</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Piekļūstiet saviem failiem, atrodoties jebkurā vietā, pat bezsaistē.<ph name="MARKUP_2" /> @@ -3174,7 +3168,6 @@ <translation id="5972708806901999743">Pārvietot uz augšu</translation> <translation id="5972826969634861500">Sākt <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Tālināt</translation> -<translation id="5975730206036440725">Nevar atrast PPD failu. Pārbaudiet, vai jūsu Chromebook dators ir tiešsaistē, un mēģiniet vēlreiz.</translation> <translation id="5975792506968920132">Akumulatora uzlādes līmenis (procentos)</translation> <translation id="5976160379964388480">Citi</translation> <translation id="5978264784700053212">Ziņojumu centrs</translation> @@ -3216,7 +3209,6 @@ <translation id="6042308850641462728">Vairāk</translation> <translation id="6042850536017090003">Pieskarieties vienumam Lietotņu paziņojumi.</translation> <translation id="6043317578411397101">Lietotne <ph name="APP_NAME" /> koplieto Chrome cilni ar cilni <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Gatavs!</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> koplieto Chrome cilni un audio ar cilni <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Nospiediet un turiet |<ph name="ACCELERATOR" />|, lai izietu no pilnekrāna režīma.</translation> <translation id="6049065490165456785">Fotoattēls no iekšējās kameras</translation> @@ -3383,7 +3375,6 @@ <translation id="6311220991371174222">Nevar palaist pārlūku Chrome, jo radās kļūda, atverot profilu. Mēģiniet restartēt Chrome.</translation> <translation id="6312403991423642364">Nezināma tīkla kļūda</translation> <translation id="6313641880021325787">IZIET NO VR</translation> -<translation id="6314335155547195432">Ģenerēt paroli</translation> <translation id="6314819609899340042">Atkļūdošanas funkcijas šajā <ph name="IDS_SHORT_PRODUCT_NAME" /> ierīcē ir veiksmīgi iespējotas.</translation> <translation id="6315343732431721770">Jūsu sākumlapas tika mainītas, lai ietvertu: <ph name="URL" />. Lai atspējotu paplašinājumus, kas maina sākumlapu, noklikšķiniet uz Atjaunot.</translation> <translation id="6315493146179903667">Parādīt visus</translation> @@ -3421,7 +3412,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Iestatiet Smart Lock Android ierīcēm</translation> <translation id="6374469231428023295">Mēģināt vēlreiz</translation> -<translation id="6377158645544167202">Nevar izveidot savienojumu ar printeri. Pārbaudiet, vai printeris ir ieslēgts un vai printerim ir izveidots savienojums ar Chromebook datoru Wi-Fi tīklā vai izmantojot USB savienojumu.</translation> <translation id="6380143666419481200">Apstiprināt un turpināt</translation> <translation id="6383051423892982287">Šifrējiet sinhronizētos datus, izmantojot savu <ph name="BEGIN_LINK" />sinhronizācijas ieejas frāzi<ph name="END_LINK" />.</translation> <translation id="6384275966486438344">Mainiet savus meklēšanas iestatījumus uz šiem: <ph name="SEARCH_HOST" /></translation> @@ -3578,7 +3568,6 @@ <translation id="6606070663386660533">8. cilne</translation> <translation id="6607272825297743757">Faila informācija</translation> <translation id="6607831829715835317">Vairā&k rīku</translation> -<translation id="6610183966322615106">Kļūda, pievienojot printeri</translation> <translation id="6612358246767739896">Aizsargāts saturs</translation> <translation id="6613452264606394692">Saglabājiet šo lapu kā grāmatzīmi, lai vēlāk to vieglāk atrastu</translation> <translation id="6615455863669487791">Rādīt man</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb index 2ccd16b..d8d63a18 100644 --- a/chrome/app/resources/generated_resources_ml.xtb +++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -328,7 +328,6 @@ <translation id="1487335504823219454">ഇഷ്ടാനുസൃത ക്രമീകരണം ഓണാക്കുക</translation> <translation id="1493892686965953381"><ph name="LOAD_STATE_PARAMETER" />-നായി കാത്തിരിക്കുന്നു...</translation> <translation id="1495486559005647033">ലഭ്യമായ മറ്റ് <ph name="NUM_PRINTERS" /> ഉപകരണങ്ങൾ.</translation> -<translation id="1497284176235884849">നൽകിയ PPD തെറ്റാണ്.</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" എന്നതിന്റെ പേരുമാറ്റാനായില്ല. <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">അറിഞ്ഞുകൂടാത്ത ഉപകരണം [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">ഒന്നിലധികം സൈൻ ഇൻ സെഷനിൽ സൈൻ ഇൻ ചെയ്തിരിക്കുന്ന ആദ്യ അക്കൗണ്ട്, ഈ ഉടമ അക്കൗണ്ടായിരിക്കണം.</translation> @@ -1772,7 +1771,6 @@ <translation id="3697100740575341996">നിങ്ങളുടെ IT അഡ്മിനിസ്ട്രേറ്റർ നിങ്ങളുടെ ഉപകരണത്തിനായി Chrome Goodies പ്രവർത്തനരഹിതമാക്കി. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">ഇമെയില് വിലാസങ്ങള്</translation> <translation id="3702500414347826004"><ph name="URL" /> ഉൾപ്പെടുത്താൻ നിങ്ങളുടെ ആരംഭ പേജുകൾ മാറ്റിയിരിക്കുന്നു.</translation> -<translation id="3703669627274482482">നിങ്ങൾ ക്ലിപ്ബോർഡിലേക്ക് പകർത്തുന്ന ടെക്സ്റ്റും ചിത്രങ്ങളും കാണാൻ ഒരു സൈറ്റ് താൽപ്പര്യപ്പെടുമ്പോൾ ചോദിക്കുക</translation> <translation id="370415077757856453">JavaScript ബ്ലോക്ക് ചെയ്തു</translation> <translation id="3704331259350077894">പ്രവര്ത്തന വിരാമം</translation> <translation id="3705722231355495246">-</translation> @@ -2119,7 +2117,6 @@ <translation id="4270393598798225102"><ph name="NUMBER" /> പതിപ്പ്</translation> <translation id="4271396100647220620">ഒന്നും യോജിക്കുന്നില്ല</translation> <translation id="4275830172053184480">നിങ്ങളുടെ ഉപകരണം പുനരാരംഭിക്കുക</translation> -<translation id="4276216215490044084">വലിയ PPD ലോഡ് ചെയ്യാനാകില്ല. പരമാവധി വലുപ്പം 250kB ആണ്.</translation> <translation id="4278390842282768270">അനുവദനീയം</translation> <translation id="4281844954008187215">സേവന നിബന്ധനകൾ</translation> <translation id="4282196459431406533">Smart Lock ഓണാണ്</translation> @@ -2199,7 +2196,6 @@ <translation id="4430369329743628066">ബുക്ക്മാർക്ക് ചേർത്തു</translation> <translation id="443464694732789311">തുടരുക</translation> <translation id="4439318412377770121">Google ക്ലൗഡ് ഉപകരണങ്ങളിൽ <ph name="DEVICE_NAME" /> രജിസ്റ്റർ ചെയ്യണോ?</translation> -<translation id="4439612350502082674">പ്രിന്റർ ചേർക്കാനാകില്ല. പുനരാരംഭിച്ച് വീണ്ടും ശ്രമിക്കുക.</translation> <translation id="4441124369922430666">മെഷീൻ ഓണാകുമ്പോൾ ഈ അപ്ലിക്കേഷൻ സ്വയമേവ ആരംഭിക്കാൻ നിങ്ങൾക്ക് താൽപ്പര്യമുണ്ടോ?</translation> <translation id="444134486829715816">വികസിപ്പിക്കുക...</translation> <translation id="4441548209689510310">അക്ഷരത്തെറ്റ് പരിശോധന ഓപ്ഷനുകൾ കാണിക്കുക</translation> @@ -2430,7 +2426,6 @@ <translation id="4839303808932127586">വീഡിയോ ഇതുപോലെ സം&രക്ഷിക്കുക...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> ഇനങ്ങൾ തിരഞ്ഞെടുത്തു</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{1 എണ്ണം കൂടി}other{# എണ്ണം കൂടി}}</translation> -<translation id="4840626203080576849">നിങ്ങൾ ക്ലിപ്ബോർഡിലേക്ക് പകർത്തുന്ന ടെക്സ്റ്റും ചിത്രങ്ങളും കാണാൻ ഒരു സൈറ്റ് താൽപ്പര്യപ്പെടുമ്പോൾ ചോദിക്കുക (ശുപാർശ ചെയ്യപ്പെടുന്നു)</translation> <translation id="4842976633412754305">ഈ പേജ്, പ്രാമാണീകരിക്കാത്ത ഉറവിടങ്ങളിൽ നിന്ന് സ്ക്രിപ്റ്റുകൾ ലോഡുചെയ്യാൻ ശ്രമിക്കുന്നു.</translation> <translation id="4844333629810439236">മറ്റ് കീബോർഡുകൾ</translation> <translation id="4846680374085650406">നിങ്ങൾ ഈ ക്രമീകരണത്തിനായി അഡ്മിനിസ്ട്രേറ്ററുടെ ശുപാർശ പാലിക്കുന്നു.</translation> @@ -2697,7 +2692,6 @@ <translation id="5254368820972107711">നീക്കംചെയ്യേണ്ട ഫയലുകൾ കാണിക്കുക</translation> <translation id="52550593576409946">കിയോസ്ക് അപ്ലിക്കേഷൻ സമാരംഭിക്കാനായില്ല.</translation> <translation id="5255315797444241226">നിങ്ങള് നല്കിയ പാസ്ഫ്രേസ് തെറ്റാണ്.</translation> -<translation id="5259571578888203461">നിങ്ങൾ ക്ലിപ്ബോർഡിലേക്ക് പകർത്തുന്ന ടെക്സ്റ്റുകളും ചിത്രങ്ങളും കാണാൻ സൈറ്റുകളെ അനുവദിക്കരുത്</translation> <translation id="5260508466980570042">ക്ഷമിക്കൂ, നിങ്ങളുടെ ഇമെയില് അല്ലെങ്കില് രഹസ്യവാക്ക് പരിശോധിക്കാന് കഴിഞ്ഞില്ല. ദയവായി വീണ്ടും ശ്രമിക്കുക.</translation> <translation id="5261683757250193089">വെബ് സ്റ്റോറിൽ തുറക്കുക</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />ഓഫ്ലൈനിൽ ആണെങ്കിൽപ്പോലും എവിടെനിന്നും ഫയലുകൾ ആക്സസ് ചെയ്യുക.<ph name="MARKUP_2" /> @@ -3171,7 +3165,6 @@ <translation id="5972708806901999743">മുകളിലേക്ക് നീക്കുക</translation> <translation id="5972826969634861500"><ph name="PRODUCT_NAME" /> ആരംഭിക്കുക</translation> <translation id="5975083100439434680">സൂം ഔട്ട്</translation> -<translation id="5975730206036440725">PPD കണ്ടെത്താനാകില്ല. നിങ്ങളുടെ Chromebook ഓൺലൈനിലാണോ എന്ന് പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക.</translation> <translation id="5975792506968920132">ബാറ്ററി ചാർജ്ജ് ശതമാനം</translation> <translation id="5976160379964388480">മറ്റുള്ളവര്</translation> <translation id="5978264784700053212">സന്ദേശ കേന്ദ്രം</translation> @@ -3213,7 +3206,6 @@ <translation id="6042308850641462728">കൂടുതൽ</translation> <translation id="6042850536017090003">ആപ്പ് അറിയിപ്പുകളിൽ ടാപ്പ് ചെയ്യുക.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" />, <ph name="TAB_NAME" /> എന്നതുമായി ഒരു Chrome ടാബ് പങ്കിടുന്നു.</translation> -<translation id="6043357981274314628">പൂര്ത്തിയായിരിക്കുന്നു!</translation> <translation id="6044805581023976844"><ph name="APP_NAME" />, <ph name="TAB_NAME" /> എന്നതുമായി ഒരു Chrome ടാബും ഓഡിയോയും പങ്കിടുന്നു.</translation> <translation id="6049004884579590341">പൂർണ്ണ സ്ക്രീനിൽ നിന്ന് പുറത്തുകടക്കാൻ, |<ph name="ACCELERATOR" />| അമർത്തിപ്പിടിക്കുക</translation> <translation id="6049065490165456785">ആന്തരിക ക്യാമറയിൽ നിന്നുള്ള ഫോട്ടോ</translation> @@ -3380,7 +3372,6 @@ <translation id="6311220991371174222">നിങ്ങളുടെ പ്രൊഫൈൽ തുറക്കുമ്പോൾ എന്തോ കുഴപ്പമുണ്ടായതിനാൽ Chrome ആരംഭിക്കാനാവില്ല. Chrome പുനഃരാരംഭിക്കുന്നത് പരീക്ഷിച്ചുനോക്കൂ.</translation> <translation id="6312403991423642364">അറിയാത്ത നെറ്റ്വര്ക്ക് പിശക്</translation> <translation id="6313641880021325787">VR-ൽ നിന്ന് പുറത്തുകടക്കുക</translation> -<translation id="6314335155547195432">പാസ്വേഡ് സൃഷ്ടിക്കുക</translation> <translation id="6314819609899340042">നിങ്ങൾ ഈ <ph name="IDS_SHORT_PRODUCT_NAME" /> ഉപകരണത്തിലെ ഡീബഗ്ഗിംഗ് ഫീച്ചറുകൾ പ്രവർത്തനക്ഷമമാക്കി.</translation> <translation id="6315343732431721770"><ph name="URL" /> ഉൾപ്പെടുത്താൻ നിങ്ങളുടെ ആരംഭ പേജുകളെ മാറ്റിയിരിക്കുന്നു. ആരംഭ പേജിൽ മാറ്റം വരുത്തുന്ന വിപുലീകരണങ്ങൾ പ്രവർത്തനരഹിതമാക്കാൻ, 'പുനഃസ്ഥാപിക്കുക' ക്ലിക്കുചെയ്യുക.</translation> <translation id="6315493146179903667">എല്ലാം മുന്നിലേക്ക് കൊണ്ടുവരുക</translation> @@ -3418,7 +3409,6 @@ <translation id="6374077068638737855">ഐസ്വീസൽ</translation> <translation id="6374108032506706911">Android-നുള്ള Smart Lock സജ്ജമാക്കുക</translation> <translation id="6374469231428023295">വീണ്ടും ശ്രമിക്കുക</translation> -<translation id="6377158645544167202">പ്രിന്റർ കണക്റ്റ് ചെയ്യാനാകില്ല. പ്രിന്റർ ഓണാണോ എന്നും വൈഫൈയോ USB-യോ ഉപയോഗിച്ച് Chromebook-ലേക്ക് കണക്റ്റ് ചെയ്തിട്ടുണ്ടോ എന്നും പരിശോധിക്കുക.</translation> <translation id="6380143666419481200">അംഗീകരിച്ച് തുടരുക</translation> <translation id="6383051423892982287">നിങ്ങളുടെ സ്വന്തം <ph name="BEGIN_LINK" />പാസ്ഫ്രെയ്സ് സമന്വയിപ്പിക്കൽ<ph name="END_LINK" /> ഉപയോഗിച്ച് സമന്വയിപ്പിച്ച വിവരങ്ങൾ എൻക്രിപ്റ്റുചെയ്യുക</translation> <translation id="6384275966486438344">നിങ്ങളുടെ തിരയൽ ക്രമീകരണങ്ങൾ മാറ്റുക: <ph name="SEARCH_HOST" /></translation> @@ -3576,7 +3566,6 @@ <translation id="6606070663386660533">ടാബ് 8</translation> <translation id="6607272825297743757">ഫയൽ വിവരം</translation> <translation id="6607831829715835317">കൂടുതൽ ഉപക&രണങ്ങൾ</translation> -<translation id="6610183966322615106">പ്രിന്റർ ചേർക്കുന്നതിൽ പിശക്</translation> <translation id="6612358246767739896">പരിരക്ഷിത ഉള്ളടക്കം</translation> <translation id="6613452264606394692">ഈ പേജ് ബുക്ക്മാർക്ക് ചെയ്താൽ വേഗത്തിൽ ഇവിടെ മടങ്ങിയെത്താൻ കഴിയും</translation> <translation id="6615455863669487791">എന്നെ കാണിക്കുക</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb index ff5c84f..5f3345b 100644 --- a/chrome/app/resources/generated_resources_mr.xtb +++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -119,7 +119,7 @@ <translation id="1173894706177603556">नाव बदला</translation> <translation id="1175364870820465910">&मुद्रण...</translation> <translation id="117624967391683467"><ph name="FILE_NAME" /> कॉपी करत आहे...</translation> -<translation id="1177113976278858832">डीफॉल्ट शोध इंजिन रिस्टोअर करायचे?</translation> +<translation id="1177113976278858832">डीफॉल्ट शोध इंजिन रिस्टोअर करायचे का?</translation> <translation id="1177863135347784049">सानुकूल</translation> <translation id="1178581264944972037">विराम द्या</translation> <translation id="1179803038870941185"><ph name="URL" /> आपल्या MIDI डिव्हाइसचे पूर्ण नियंत्रण मिळवू इच्छिते.</translation> @@ -287,7 +287,7 @@ <translation id="1426870617281699524">पुन्हा प्रयत्न करा वर क्लिक करा आणि तुमच्या काँप्युटरवर प्रॉम्प्ट स्वीकारा</translation> <translation id="142758023928848008">रोचक की सक्षम करा (ते अनुक्रमशः टाइप करून कीबोर्ड शॉर्टकट करण्यासाठी)</translation> <translation id="143027896309062157">आपल्या संगणकावर आणि आपण भेट देत असलेल्या वेबसाइट वरील सर्व आपला डेटा वाचा आणि बदला</translation> -<translation id="1430915738399379752">मुद्रण</translation> +<translation id="1430915738399379752">प्रिंट</translation> <translation id="1432581352905426595">शोध इंजिन व्यवस्थापित करा</translation> <translation id="1433811987160647649">प्रवेश करण्यापूर्वी विचारा</translation> <translation id="1434696352799406980">हे आपले प्रारंभ पृष्ठ, नवीन टॅब पृष्ठ, शोध इंजिन आणि पिन केलेले टॅब रीसेट करेल. हे सर्व विस्तार अक्षम करेल आणि कुकीज सारखा तात्पुरता डेटा साफ करेल. आपले बुकमार्क, इतिहास आणि सेव्ह केलेले पासवर्ड साफ केले जाणार नाहीत.</translation> @@ -327,7 +327,6 @@ <translation id="1487335504823219454">चालू - सानुकूल सेटिंग्ज</translation> <translation id="1493892686965953381">यासाठी प्रतीक्षा करत आहे <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> अन्य उपलब्ध डिव्हाइसेस.</translation> -<translation id="1497284176235884849">पुरवलेला PPD चुकीचा आहे.</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" पुनर्नामित करण्यात अक्षम. <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">अज्ञात डिव्हाइस [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">हे मालक खाते एकाधिक साइन-इन सत्रामधील प्रथम साइन-इन केलेले खाते असणे आवश्यक आहे.</translation> @@ -446,7 +445,7 @@ <translation id="1650709179466243265">www. आणि .com जोडा आणि पत्ता उघडा</translation> <translation id="1651008383952180276">आपण समान सांकेतिक वाक्यांश दोनदा एंटर करणे आवश्यक आहे</translation> <translation id="1652972346408808053">पासवर्ड जतन केला. <ph name="SAVED_PASSWORDS_LINK" /> वर आपल्या पासवर्डांमध्ये कोणत्याही डिव्हाइसवरून प्रवेश करा</translation> -<translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Google क्लाउड प्रिंट वर प्रिंटर जोडा जेणेकरून आपण कुठूनही मुद्रण करू शकता.}one{Google क्लाउड प्रिंट वर # प्रिंटर जोडा जेणेकरून आपण कुठूनही मुद्रण करू शकता.}other{Google क्लाउड प्रिंट वर # प्रिंटर जोडा जेणेकरून आपण कुठूनही मुद्रण करू शकता.}}</translation> +<translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Google क्लाउड प्रिंट वर प्रिंटर जोडा जेणेकरून आपण कुठूनही प्रिंट करू शकता.}one{Google क्लाउड प्रिंट वर # प्रिंटर जोडा जेणेकरून आपण कुठूनही प्रिंट करू शकता.}other{Google क्लाउड प्रिंट वर # प्रिंटर जोडा जेणेकरून आपण कुठूनही प्रिंट करू शकता.}}</translation> <translation id="1657406563541664238">वापर आकडेवारी आणि क्रॅश अहवाल स्वयंचलितपणे Google कडे पाठवून <ph name="PRODUCT_NAME" /> ला अधिक चांगले करण्यास मदत करा</translation> <translation id="1658424621194652532">हे पृष्ठ आपल्या मायक्रोफोनवर प्रवेश करत आहे.</translation> <translation id="1660204651932907780">साइटना ध्वनी प्ले करण्याची परवानगी द्या (शिफारस केलेले)</translation> @@ -552,7 +551,7 @@ <translation id="1826516787628120939">तपासत आहे</translation> <translation id="1828149253358786390"><ph name="SITE" /> आपल्याला सूचना पाठवू इच्छिते.</translation> <translation id="1828378091493947763">हे प्लगिन या डिव्हाइसवर समर्थित नाही</translation> -<translation id="1828901632669367785">सिस्टम संवाद वापरून मुद्रित करा…</translation> +<translation id="1828901632669367785">सिस्टम संवाद वापरून प्रिंट करा…</translation> <translation id="1829192082282182671">झूम &कमी करा</translation> <translation id="1830550083491357902">साइन इन केलेले नाही</translation> <translation id="1832511806131704864">फोन बदल अपडेट झाला</translation> @@ -689,7 +688,7 @@ <translation id="2079545284768500474">पूर्ववत करा</translation> <translation id="2080070583977670716">अधिक सेटिंग्ज</translation> <translation id="2085470240340828803">"<ph name="FILENAME" />" नावाची फाईल आधीपासूनच विद्यमान आहे. आपण काय करू इच्छिता?</translation> -<translation id="2087822576218954668">मुद्रण: <ph name="PRINT_NAME" /></translation> +<translation id="2087822576218954668">प्रिंट: <ph name="PRINT_NAME" /></translation> <translation id="2089566709556890888">Google Chrome ने सुरक्षितरित्या ब्राउझ करा</translation> <translation id="2090165459409185032">आपली खाते माहिती पुनर्प्राप्त करण्यासाठी, यावर जा: google.com/accounts/recovery</translation> <translation id="2090876986345970080">सिस्टम सुरक्षा सेटिंग्ज</translation> @@ -755,7 +754,7 @@ <translation id="2175607476662778685">द्रुत लाँच बार</translation> <translation id="2177950615300672361">गुप्त टॅब: <ph name="TAB_NAME" /></translation> <translation id="2178614541317717477">CA तडजोड</translation> -<translation id="218070003709087997">किती प्रती मुद्रित करायच्या ते सूचित करण्यासाठी संख्या वापरा (1 ते 999).</translation> +<translation id="218070003709087997">किती प्रती प्रिंट करायच्या ते सूचित करण्यासाठी संख्या वापरा (1 ते 999).</translation> <translation id="2187895286714876935">सर्व्हर प्रमाणपत्र आयात एरर</translation> <translation id="2188881192257509750"><ph name="APPLICATION" /> उघडा</translation> <translation id="2190069059097339078">WiFi क्रेडेन्शियल मिळविणारा</translation> @@ -882,7 +881,7 @@ <translation id="2377667304966270281">हार्ड फॉल्ट</translation> <translation id="2378075407703503998"><ph name="SELCTED_FILE_COUNT" /> फायली निवडल्या</translation> <translation id="2378982052244864789">विस्तार निर्देशिका निवडा.</translation> -<translation id="2379281330731083556">सिस्टम संवाद वापरून मुद्रित करा… <ph name="SHORTCUT_KEY" /></translation> +<translation id="2379281330731083556">सिस्टम संवाद वापरून प्रिंट करा… <ph name="SHORTCUT_KEY" /></translation> <translation id="2381756643783702095">पाठविण्यापूर्वी विचारा (शिफारस केलेले)</translation> <translation id="2384436799579181135">एक एरर आली आहे. कृपया तुमचा प्रिंटर तपासा आणि पुन्हा प्रयत्न करा.</translation> <translation id="2385700042425247848">सेवेचे नाव:</translation> @@ -1082,7 +1081,7 @@ <translation id="2676946222714718093">यावर प्ले होत आहे</translation> <translation id="2677748264148917807">सोडा</translation> <translation id="2678063897982469759">पुन्हा-सक्षम करा</translation> -<translation id="2679385451463308372">सिस्टम संवाद वापरून मुद्रित करा…</translation> +<translation id="2679385451463308372">सिस्टम संवाद वापरून प्रिंट करा…</translation> <translation id="2680208403056680091">आपले इंटरनेट कनेक्शन नियंत्रित केले जात आहे</translation> <translation id="268053382412112343">इति&हास</translation> <translation id="2683638487103917598">क्रमवारी लावलेला फोल्डर</translation> @@ -1093,7 +1092,7 @@ <translation id="2691385045260836588">मॉडेल</translation> <translation id="2693176596243495071">अरेरे! एक अज्ञात एरर आली. कृपया नंतर पुन्हा प्रयत्न करा किंवा समस्या कायम राहिल्यास तुमच्या अॅडमिनिस्ट्रेटरशी संपर्क साधा.</translation> <translation id="2694026874607847549">1 कुकी</translation> -<translation id="2695749433451188613">इंटरनेट मुद्रण प्रोटोकॉल (HTTPS)</translation> +<translation id="2695749433451188613">इंटरनेट प्रिंट प्रोटोकॉल (HTTPS)</translation> <translation id="270358213449696159">Google Chrome OS अटी सामग्री</translation> <translation id="2704184184447774363">Microsoft Document Signing</translation> <translation id="270516211545221798">टचपॅड गती</translation> @@ -1335,7 +1334,7 @@ पर्यवेक्षी वापरकर्ता तयार केल्यामुळे Google खाते तयार होत नाही आणि त्यांचे बुकमार्क, ब्राउझिंग इतिहास आणि अन्य प्राधान्ये Chrome संकालन असलेल्या इतर डिव्हाइसेसवर त्यांचे अनुसरण करणार नाही. आपण एक नवीन पर्यवेक्षी वापरकर्ता तयार केल्यानंतर, आपण त्यांच्या सेटिंग्ज कधीही, कोणत्याही डिव्हाइस वरून, <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" /> येथे व्यवस्थापित करू शकता. अधिक माहितीसाठी, आमच्या <ph name="BEGIN_LINK" /> मदत केंद्रास<ph name="END_LINK" /> भेट द्या.</translation> <translation id="3031417829280473749">एजंट X</translation> <translation id="3031557471081358569">आयात करण्यासाठी आयटम निवडा:</translation> -<translation id="3031601332414921114">मुद्रण पुन्हा सुरू करा</translation> +<translation id="3031601332414921114">प्रिंट पुन्हा सुरू करा</translation> <translation id="303198083543495566">भूगोल</translation> <translation id="3036546437875325427">फ्लॅश सक्षम करा</translation> <translation id="3038612606416062604">एक प्रिंटर व्यक्तिचलितपणे जोडा</translation> @@ -1544,7 +1543,7 @@ <translation id="3358935496594837302">तुमचा फोन आढळला नाही. तुम्ही सुसंगत Android फोन वापरत असल्याची आणि तो चालू व सोयीस्कर असल्याची खात्री करा. <a>आणखी जाणून घ्या</a></translation> <translation id="3359256513598016054">प्रमाणपत्र धोरण प्रतिबंध</translation> <translation id="335985608243443814">ब्राउझ करा...</translation> -<translation id="3360297538363969800">मुद्रण अयशस्वी. कृपया आपला प्रिंटर तपासा आणि पुन्हा प्रयत्न करा.</translation> +<translation id="3360297538363969800">प्रिंट अयशस्वी. कृपया आपला प्रिंटर तपासा आणि पुन्हा प्रयत्न करा.</translation> <translation id="3364721542077212959">लेखणी साधने</translation> <translation id="336497260564123876">पासवर्ड जतन केला. आपल्या सर्व डिव्हाइसवर आपले पासवर्ड मिळविण्यासाठी, Chrome मध्ये साइन इन करा.</translation> <translation id="3367813778245106622">संकालन प्रारंभ करण्यासाठी पुन्हा साइन इन करा</translation> @@ -1605,7 +1604,7 @@ <translation id="3453612417627951340">प्रमाणीकरण आवश्यक</translation> <translation id="3454157711543303649">सक्रियन पूर्ण झाले</translation> <translation id="345693547134384690">नवीन विंडोमध्ये &प्रतिमा उघडा</translation> -<translation id="3459509316159669723">मुद्रण</translation> +<translation id="3459509316159669723">प्रिंट</translation> <translation id="3459697287128633276">तुमच्या खात्यावर Google Play स्टोअर वापरणे चालू करण्यासाठी, कृपया तुमच्या ओळख प्रदात्याने प्रमाणीकरण करा.</translation> <translation id="3459774175445953971">अखेरचे सुधारित:</translation> <translation id="3462413494201477527">खाते सेटअप रद्द करायचा?</translation> @@ -1687,7 +1686,7 @@ <translation id="3576324189521867626">यशस्वीरित्या इंस्टॉल केला</translation> <translation id="3578331450833904042">डीफॉल्ट (सर्वकाही उचला)</translation> <translation id="3578594933904494462">या टॅबची सामग्री सामायिक केली जात आहे.</translation> -<translation id="357886715122934472"><strong><ph name="SENDER" /></strong> आपल्या मालकीच्या गटासह <strong><ph name="PRINTER_NAME" /></strong> प्रिंटर सामायिक करू इच्छितो: <strong><ph name="GROUP_NAME" /></strong>. आपण स्वीकार केल्यास, सर्व गट सदस्य प्रिंटरवर मुद्रण करण्यास सक्षम असतील.</translation> +<translation id="357886715122934472"><strong><ph name="SENDER" /></strong> आपल्या मालकीच्या गटासह <strong><ph name="PRINTER_NAME" /></strong> प्रिंटर सामायिक करू इच्छितो: <strong><ph name="GROUP_NAME" /></strong>. आपण स्वीकार केल्यास, सर्व गट सदस्य प्रिंटरवर प्रिंट करण्यास सक्षम असतील.</translation> <translation id="3584169441612580296">आपल्या संगणकावरील फोटो, संगीत आणि अन्य मीडिया वाचा आणि बदला</translation> <translation id="3587482841069643663">सर्व</translation> <translation id="358796204584394954">जोडण्यासाठी "<ph name="DEVICE_NAME" />" वर हा कोड टाइप करा:</translation> @@ -1769,7 +1768,6 @@ <translation id="3697100740575341996">आपल्या IT प्रशासकाने आपल्या डिव्हाइससाठी Chrome Goodies अक्षम केल्या आहेत. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">ईमेल पत्ता</translation> <translation id="3702500414347826004"><ph name="URL" /> समाविष्ट करण्यासाठी आपली प्रारंभ पृष्ठे बदलली.</translation> -<translation id="3703669627274482482">साइटला तुम्ही क्लिपबोर्डवर कॉपी करत असलेला मजकूर आणि इमेज पहायच्या असतील तेव्हा विचारा</translation> <translation id="370415077757856453">JavaScript ब्लॉक केले</translation> <translation id="3704331259350077894">ऑपरेशनची समाप्ती</translation> <translation id="3705722231355495246">-</translation> @@ -2116,7 +2114,6 @@ <translation id="4270393598798225102">आवृत्ती <ph name="NUMBER" /></translation> <translation id="4271396100647220620">कोणत्याही जुळण्या नाहीत</translation> <translation id="4275830172053184480">आपला डिव्हाइस रीस्टार्ट करा</translation> -<translation id="4276216215490044084">मोठ्या PPD लोड करू शकत नाही. कमाल आकार 250kB आहे.</translation> <translation id="4278390842282768270">अनुमत</translation> <translation id="4281844954008187215">सेवा अटी</translation> <translation id="4282196459431406533">Smart Lock चालू आहे</translation> @@ -2196,7 +2193,6 @@ <translation id="4430369329743628066">बुकमार्क जोडला</translation> <translation id="443464694732789311">सुरु ठेवा</translation> <translation id="4439318412377770121">आपण Google क्लाउड डिव्हाइसेसवर <ph name="DEVICE_NAME" /> ची नोंदणी करू इच्छिता?</translation> -<translation id="4439612350502082674">प्रिंटर जोडू शकत नाही. रीस्टार्ट करा आणि पुन्हा प्रयत्न करा.</translation> <translation id="4441124369922430666">मशीन चालू होते तेव्हा आपण हा अॅप स्वयंचलितपणे प्रारंभ करू इच्छिता?</translation> <translation id="444134486829715816">विस्तृत करा...</translation> <translation id="4441548209689510310">शब्दलेखन तपासणी पर्याय दर्शवा</translation> @@ -2427,7 +2423,6 @@ <translation id="4839303808932127586">म्हणून व्हिडिओ ज&तन करा...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> आयटम निवडले</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{आणखी 1}one{आणखी #}other{आणखी #}}</translation> -<translation id="4840626203080576849">साइटला तुम्ही क्लिपबोर्डवर कॉपी करत असलेला मजकूर आणि इमेज पहायच्या असतील तेव्हा विचारा (शिफारस केलेले)</translation> <translation id="4842976633412754305">हे पृष्ठ अप्रमाणिकृत स्त्रोतांवरून स्क्रिप्ट लोड करण्याचा प्रयत्न करत आहे.</translation> <translation id="4844333629810439236">अन्य कीबोर्ड</translation> <translation id="4846680374085650406">आपण या सेटिंगसाठी प्रशासकाच्या शिफारसीचे अनुसरण करत आहात.</translation> @@ -2501,7 +2496,7 @@ <translation id="4927301649992043040">पॅक विस्तार</translation> <translation id="4927753642311223124">येथे पाहण्यासाठी काही नाही, पुढे चला.</translation> <translation id="4927846293686536410">आपल्या सर्व डिव्हाइसवर आपले बुकमार्क, इतिहास, पासवर्ड आणि इतर सेटिंग्ज मिळविण्यासाठी साइन इन करा. आपण स्वयंचलितपणे आपल्या Google सेवांवर देखील साइन इन कराल.</translation> -<translation id="4929386379796360314">प्रिंट गंतव्यस्थाने</translation> +<translation id="4929386379796360314">गंतव्यस्थाने प्रिंट करा</translation> <translation id="4931132176527519925">नेहमी मिररिंग वापरा</translation> <translation id="4933484234309072027"><ph name="URL" /> वर एम्बेड केलेले</translation> <translation id="493571969993549666">पर्यवेक्षी वापरकर्ता जोडा</translation> @@ -2685,7 +2680,7 @@ <translation id="5238278114306905396">अॅप "<ph name="EXTENSION_NAME" />" स्वयंचलितपणे काढण्यात आला.</translation> <translation id="5238369540257804368">स्कोप</translation> <translation id="5241128660650683457">आपण भेट देता त्या वेबसाइटवर आपला सर्व डेटा वाचा</translation> -<translation id="5241567694820672363">डीफॉल्ट स्टार्टअप पेज रिस्टोअर करायचे?</translation> +<translation id="5241567694820672363">डीफॉल्ट स्टार्टअप पेज रिस्टोअर करायचे का?</translation> <translation id="5242724311594467048">"<ph name="EXTENSION_NAME" />" सक्षम करायचे?</translation> <translation id="5246282308050205996"><ph name="APP_NAME" /> क्रॅश झाला आहे. अॅप्लिकेशन रीस्टार्ट करण्यासाठी या फुग्यावर क्लिक करा.</translation> <translation id="5249624017678798539">डाउनलोड पूर्ण होण्यापूर्वी ब्राउझर क्रॅश झाला.</translation> @@ -2695,7 +2690,6 @@ <translation id="5254368820972107711">काढून टाकयच्या फायली दाखवा</translation> <translation id="52550593576409946">कियोस्क अॅप्लिकेशन लाँच केला जाऊ शकला नाही.</translation> <translation id="5255315797444241226">आपण एंटर केलला सांकेतिक वाक्यांश चुकीचा आहे.</translation> -<translation id="5259571578888203461">तुम्ही क्लिपबोर्डवर कॉपी करत असलेला मजकूर आणि इमेज पाहण्याची अनुमती साइटना देऊ नका</translation> <translation id="5260508466980570042">क्षमस्व, आपले ईमेल किंवा पासवर्ड सत्यापित करणे शक्य नाही. कृपया पुन्हा प्रयत्न करा.</translation> <translation id="5261683757250193089">वेब स्टोअर मध्ये उघडा</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />फायलींमध्ये कुठूनही प्रवेश करा, अगदी ऑफलाइन सुद्धा.<ph name="MARKUP_2" /> @@ -2708,7 +2702,7 @@ <translation id="5264252276333215551">कृपया कियोस्क मोडमध्ये आपला अॅप लाँच करण्यासाठी इंटरनेटशी कनेक्ट करा.</translation> <translation id="5265562206369321422">एका आठवड्यापेक्षा जास्त ऑफलाइन</translation> <translation id="5266113311903163739">प्रमाणन अधिकृतता आयात एरर</translation> -<translation id="5269977353971873915">मुद्रण अयशस्वी</translation> +<translation id="5269977353971873915">प्रिंट अयशस्वी</translation> <translation id="5271549068863921519">पासवर्ड सेव्ह करा</translation> <translation id="5275194674756975076">ठीक आहे, रीफ्रेश करा</translation> <translation id="5275352920323889391">कुत्रा</translation> @@ -2892,7 +2886,7 @@ <translation id="5531274207066050939">Google Payments</translation> <translation id="5532223876348815659">जागतिक</translation> <translation id="5533001281916885985"><ph name="SITE_NAME" /> हे करू इच्छिते</translation> -<translation id="5534304873398226603">फोटो किंवा व्हिडिओ रद्द करा</translation> +<translation id="5534304873398226603">फोटो किंवा व्हिडिओ टाकून द्या</translation> <translation id="5534520101572674276">आकार मोजत आहे</translation> <translation id="5535941515421698170">या डिव्हाइस मधून आपला विद्यमान डेटा देखील हटवा</translation> <translation id="5537725057119320332">कास्ट करा</translation> @@ -3028,7 +3022,7 @@ <translation id="5752453871435543420">Chrome OS क्लाउड बॅकअप</translation> <translation id="5754903485544371559">अनुप्रयोगांवर जोडा...</translation> <translation id="5756163054456765343">म&दत केंद्र</translation> -<translation id="5759728514498647443">आपण <ph name="APP_NAME" /> द्वारे मुद्रण करण्यासाठी पाठविलेले दस्तऐवज <ph name="APP_NAME" /> द्वारे वाचले जाऊ शकतात.</translation> +<translation id="5759728514498647443">आपण <ph name="APP_NAME" /> द्वारे प्रिंट करण्यासाठी पाठविलेले दस्तऐवज <ph name="APP_NAME" /> द्वारे वाचले जाऊ शकतात.</translation> <translation id="5763751966069581670">कोणतेही USB डिव्हाइस सापडले नाहीत</translation> <translation id="5764483294734785780">म्हणून ऑडिओ ज&तन करा...</translation> <translation id="57646104491463491">सुधारणा तारीख</translation> @@ -3069,7 +3063,7 @@ <translation id="5821565227679781414">शॉर्टकट तयार करा</translation> <translation id="5826507051599432481">सामान्य नाव (CN)</translation> <translation id="5827266244928330802">Safari</translation> -<translation id="5828633471261496623">मुद्रित करत आहे...</translation> +<translation id="5828633471261496623">प्रिंट करत आहे...</translation> <translation id="5829401023154985950">व्यवस्थापित करा...</translation> <translation id="5830410401012830739">स्थान सेटिंग्ज व्यवस्थापित करा...</translation> <translation id="5830720307094128296">पृष्ठ &म्हणून सेव्ह करा...</translation> @@ -3169,7 +3163,6 @@ <translation id="5972708806901999743">शीर्षस्थानी हलवा</translation> <translation id="5972826969634861500"><ph name="PRODUCT_NAME" /> प्रारंभ करा</translation> <translation id="5975083100439434680">झूम कमी करा</translation> -<translation id="5975730206036440725">PPD सापडत नाही. तुमचे Chromebook ऑनलाइन आहे का ते तपासा आणि पुन्हा प्रयत्न करा.</translation> <translation id="5975792506968920132">बॅटरी चार्ज टक्केवारी</translation> <translation id="5976160379964388480">इतर</translation> <translation id="5978264784700053212">संदेश केंद्र</translation> @@ -3211,7 +3204,6 @@ <translation id="6042308850641462728">अधिक</translation> <translation id="6042850536017090003">अॅप सूचनांवर टॅप करा.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> Chrome टॅब <ph name="TAB_NAME" /> सह सामायिक करीत आहे.</translation> -<translation id="6043357981274314628">पूर्ण झाले!</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> Chrome टॅब आणि ऑडिओ <ph name="TAB_NAME" /> सह सामायिक करीत आहे.</translation> <translation id="6049004884579590341">पूर्ण स्क्रीनमधून बाहेर येण्यासाठी |<ph name="ACCELERATOR" />| दाबा आणि धरून ठेवा</translation> <translation id="6049065490165456785">अंतर्गत कॅमेर्यातील फोटो</translation> @@ -3274,7 +3266,7 @@ <translation id="6143186082490678276">मदत मिळवा</translation> <translation id="6144938890088808325">Chromebooks सुधारण्यात आम्हाला मदत करा</translation> <translation id="6146563240635539929">व्हिडिओ</translation> -<translation id="6147020289383635445">मुद्रण पूर्वावलोकन अयशस्वी.</translation> +<translation id="6147020289383635445">प्रिंट पूर्वावलोकन अयशस्वी.</translation> <translation id="6150853954427645995">ऑफलाइन वापराकरिता ही फाईल जतन करण्यासाठी, परत ऑनलाइन व्हा, फाईलवर उजवे-क्लिक करा आणि <ph name="OFFLINE_CHECKBOX_NAME" /> पर्याय निवडा.</translation> <translation id="6151323131516309312"><ph name="SITE_NAME" /> शोधण्यासाठी <ph name="SEARCH_KEY" /> दाबा</translation> <translation id="6151771661215463137">फाइल तुमच्या डाउनलोड फोल्डरमध्ये आधीपासून आहे.</translation> @@ -3378,7 +3370,6 @@ <translation id="6311220991371174222">आपले प्रोफाइल उघडताना काहीतरी चूक झाल्याने Chrome प्रारंभ करू शकत नाही. Chrome रीस्टार्ट करून पहा.</translation> <translation id="6312403991423642364">अज्ञात नेटवर्क एरर</translation> <translation id="6313641880021325787">VRमधून बाहेर पडा</translation> -<translation id="6314335155547195432">पासवर्ड व्युत्पन्न करा</translation> <translation id="6314819609899340042">आपण या <ph name="IDS_SHORT_PRODUCT_NAME" /> डिव्हाइसवर यशस्वीरित्या डीबग वैशिष्ट्ये सक्षम केली आहेत.</translation> <translation id="6315343732431721770"><ph name="URL" /> समाविष्ट करण्यासाठी आपली प्रारंभ पृष्ठे बदलली. आपले प्रारंभ पृष्ठ बदलणारे विस्तार अक्षम करण्यासाठी, पुनर्संचयित करा क्लिक करा.</translation> <translation id="6315493146179903667">सर्व समोर आणा</translation> @@ -3396,7 +3387,7 @@ <translation id="6336907568130557310">निर्यात केलेली फाइल पाहू शकणार्या कुणालाही तुमचे पासवर्ड दिसतील. कुणाशीही फाइल शेअर करू नका आणि ती आयात केल्यानंतर हटवा.</translation> <translation id="6339668969738228384"><ph name="USER_EMAIL_ADDRESS" /> साठी एक नवीन प्रोफाइल तयार करा</translation> <translation id="6340017061976355871">सर्व्हरशी कनेक्ट करता आले नाही. कृपया तुमचे नेटवर्क कनेक्शन तपासा आणि पुन्हा प्रयत्न करा. समस्या तशीच राहिल्यास, तुमचे Chromebook रीस्टार्ट करा.</translation> -<translation id="6340071272923955280">इंटरनेट मुद्रण प्रोटोकॉल (IPPS)</translation> +<translation id="6340071272923955280">इंटरनेट प्रिंट प्रोटोकॉल (IPPS)</translation> <translation id="6341850831632289108">आपले प्रत्यक्ष स्थान तपासा</translation> <translation id="634208815998129842">कार्य व्यवस्थापक</translation> <translation id="6344170822609224263">नेटवर्क कनेक्शनच्या सूचीवर प्रवेश करा</translation> @@ -3416,7 +3407,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Android साठीचे Smart Lock सेट अप करा</translation> <translation id="6374469231428023295">पुन्हा प्रयत्न करा</translation> -<translation id="6377158645544167202">प्रिंटर कनेक्ट करू शकत नाही. प्रिंटर चालू आहे का आणि तो वाय-फाय किंवा USB ने तुमच्या Chromebook ला कनेक्ट केला आहे का ते तपासा.</translation> <translation id="6380143666419481200">स्वीकारा आणि सुरू ठेवा</translation> <translation id="6383051423892982287">स्वतःच्या <ph name="BEGIN_LINK" />संकालन वाक्यांशासह<ph name="END_LINK" /> संकालित केलेला डेटा कूटबद्ध करा</translation> <translation id="6384275966486438344">आपल्या शोध सेटिंग्ज यावर बदला: <ph name="SEARCH_HOST" /></translation> @@ -3472,7 +3462,7 @@ <translation id="6447842834002726250">कुकीज</translation> <translation id="6449285849137521213">अॅप "<ph name="EXTENSION_NAME" />" जोडला गेला आहे.</translation> <translation id="6450876761651513209">आपल्या गोपनीयतेशी संबंधित सेटिंग्ज बदला</translation> -<translation id="6451180435462401570">क्लाउड मुद्रण डिव्हाइेेस व्यवस्थापित करा</translation> +<translation id="6451180435462401570">क्लाउड प्रिंट डिव्हाइेेस व्यवस्थापित करा</translation> <translation id="6451689256222386810">आपण आपला सांकेतिक वाक्यांश विसरल्यास किंवा हे सेटिंग बदलू इच्छित असल्यास, <ph name="BEGIN_LINK" />संकालन रीसेट करा<ph name="END_LINK" />.</translation> <translation id="6452181791372256707">नाकारा</translation> <translation id="6455894534188563617">नवीन फोल्डर</translation> @@ -3574,7 +3564,6 @@ <translation id="6606070663386660533">टॅब 8</translation> <translation id="6607272825297743757">फाईल माहिती</translation> <translation id="6607831829715835317">अधिक साध&ने</translation> -<translation id="6610183966322615106">प्रिंटर जोडताना एरर</translation> <translation id="6612358246767739896">संरक्षित सामग्री</translation> <translation id="6613452264606394692">या पेजला बुकमार्क करून येथे जलद परत या</translation> <translation id="6615455863669487791">मला दर्शवा</translation> @@ -3601,7 +3590,7 @@ <translation id="665061930738760572">&नवीन विंडोमध्ये उघडा</translation> <translation id="6651237644330755633">वेबसाइट ओळखण्यासाठी या प्रमाणपत्रावर विश्वास ठेवा</translation> <translation id="6653525630739667879">$1 वर जतन करु शकत नाही. सर्व संपादने डाउनलोड फोल्डरमधील $2 मध्ये जतन केली जातील.</translation> -<translation id="665355505818177700">Chrome <ph name="MS_AD_NAME" /> संकलन फक्त x86_64 प्लॅटफॉर्मवर सपोर्ट करते. कोणत्याही ARM किंवा x86 प्लॅटफॉर्मवर बनवलेले Chromebooks ही सुविधा देत नाही.</translation> +<translation id="665355505818177700">Chrome <ph name="MS_AD_NAME" /> संकलन फक्त x86_64 प्लॅटफॉर्मला सपोर्ट करते. कोणत्याही ARM किंवा x86 प्लॅटफॉर्मवर बनवलेले Chromebooks ही सुविधा देत नाही.</translation> <translation id="6655190889273724601">विकसक मोड</translation> <translation id="6655458902729017087">खाती लपवा</translation> <translation id="6657585470893396449">पासवर्ड</translation> @@ -3640,10 +3629,10 @@ <translation id="67211069045302358">या साइटसाठी सेटिंग्ज रीसेट करायच्या?</translation> <translation id="6721972322305477112">&फाइल</translation> <translation id="672213144943476270">कृपया अतिथी म्हणून ब्राउझ करण्यापूर्वी आपले प्रोफाईल अनलॉक करा.</translation> -<translation id="6723354935081862304">Print to Google दस्तऐवज आणि इतर क्लाउड गंतव्यांचे मुद्रण करा. Google क्लाउड मुद्रणाचे मुद्रण करण्याकरिता <ph name="BEGIN_LINK" />साइन इन<ph name="END_LINK" /> करा.</translation> +<translation id="6723354935081862304">Print to Google दस्तऐवज आणि इतर क्लाउड गंतव्यांचे प्रिंट करा. Google क्लाउड प्रिंटाचे प्रिंट करण्याकरिता <ph name="BEGIN_LINK" />साइन इन<ph name="END_LINK" /> करा.</translation> <translation id="6723661294526996303">बुकमार्क आणि सेटिंग्ज आयात करा</translation> <translation id="6723839937902243910">सामर्थ्य</translation> -<translation id="6725206449694821596">इंटरनेट मुद्रण प्रोटोकॉल (IPP)</translation> +<translation id="6725206449694821596">इंटरनेट प्रिंट प्रोटोकॉल (IPP)</translation> <translation id="672609503628871915">नवीन काय ते पहा</translation> <translation id="6727005317916125192">मागील उपखंड</translation> <translation id="6732801395666424405">लोड न झालेली प्रमाणपत्रे</translation> @@ -3722,7 +3711,7 @@ <translation id="6841186874966388268">एरर</translation> <translation id="6843725295806269523">नि:शब्द करा</translation> <translation id="6845038076637626672">वाढवलेले उघडा</translation> -<translation id="6851497530878285708">अॅप चालू केले</translation> +<translation id="6851497530878285708">अॅप सक्रीय केले</translation> <translation id="6853388645642883916">अद्यतनकर्ता निष्क्रिय आहे</translation> <translation id="68541483639528434">अन्य टॅब बंद करा</translation> <translation id="6856623341093082836">आपल्या टचस्क्रीनची अचूकता सेट करा आणि समायोजित करा</translation> @@ -3767,7 +3756,7 @@ <ph name="FILE_COUNT" /> आढळले</translation> <translation id="693807610556624488">लिहा ऑपरेशन यावर विशेषतांची कमाल लांबी ओलांडते: " <ph name="DEVICE_NAME" /> ".</translation> <translation id="6941937518557314510">कृपया आपल्या प्रमाणपत्रासह <ph name="HOST_NAME" /> चे प्रमाणीकरण करण्यासाठी <ph name="TOKEN_NAME" /> मध्ये साइन इन करा.</translation> -<translation id="6943176775188458830">मुद्रण रद्द करा</translation> +<translation id="6943176775188458830">प्रिंट रद्द करा</translation> <translation id="6943836128787782965">HTTP अयशस्वी झाले</translation> <translation id="6945221475159498467">निवडा</translation> <translation id="694592694773692225">या पेजवर रीडिरेक्ट ब्लॉक केले.</translation> @@ -3781,7 +3770,7 @@ <translation id="6965978654500191972">डिव्हाइस</translation> <translation id="6968288415730398122">स्क्रीन लॉक कॉन्फिगर करण्यासाठी आपला पासवर्ड एंटर करा</translation> <translation id="6970480684834282392">प्रारंभ वेळ</translation> -<translation id="6970856801391541997">विशिष्ट पृष्ठे मुद्रित करा</translation> +<translation id="6970856801391541997">विशिष्ट पृष्ठे प्रिंट करा</translation> <translation id="6972180789171089114">ऑडिओ/व्हिडिओ</translation> <translation id="6973630695168034713">फोल्डर</translation> <translation id="6974053822202609517">उजवीकडून डावीकडे</translation> @@ -4030,7 +4019,7 @@ <translation id="7378812711085314936">डेटा कनेक्शन मिळवा</translation> <translation id="7382945755068785583">हानिकारक सॉफ्टवेअर, सिस्टम सेटिंग्ज आणि तुमच्या कॉंप्युटरवरील प्रक्रियांबद्दलच्या माहितीचा समावेश असतो.</translation> <translation id="7384292194278095697">हे डिव्हाइस यापुढे समर्थित असणार नाही</translation> -<translation id="7385854874724088939">मुद्रित करण्याचा प्रयत्न करताना काहीतरी चूक झाली. कृपया आपला प्रिंटर तपासा आणि पुन्हा प्रयत्न करा.</translation> +<translation id="7385854874724088939">प्रिंट करण्याचा प्रयत्न करताना काहीतरी चूक झाली. कृपया आपला प्रिंटर तपासा आणि पुन्हा प्रयत्न करा.</translation> <translation id="7386824183915085801">वर समाविष्ट करण्यासाठी आपण निवडता त्या कोणत्याही माहिती व्यतिरिक्त आपले Chrome आणि ऑपरेटिंग प्रणाली आवृत्ती सबमिट केली जाईल. आपण आपला ईमेल पत्ता समाविष्ट केल्यास, Google आपल्याशी अभिप्राय अहवाला संबंधी संपर्क साधू शकते. हा अभिप्राय @@ -4381,7 +4370,7 @@ <translation id="7945031593909029181">"<ph name="CHROME_EXTENSION_NAME" />" कनेक्ट करू इच्छित आहे</translation> <translation id="794676567536738329">परवानग्यांची पुष्टी करा</translation> <translation id="7947962633355574091">व्हिडिओ पत्ता कॉपी करा</translation> -<translation id="7950040156882184764">इंटरनेट मुद्रण प्रोटोकॉल (HTTP)</translation> +<translation id="7950040156882184764">इंटरनेट प्रिंट प्रोटोकॉल (HTTP)</translation> <translation id="7953739707111622108">हे डिव्हाइस उघडले जाऊ शकत नाही कारण त्याचे फाइलसिस्टम ओळखीचे नाही.</translation> <translation id="7953955868932471628">शॉर्टकट व्यवस्थापित करा</translation> <translation id="7955383984025963790">टॅब 5</translation> @@ -4473,7 +4462,7 @@ <translation id="806812017500012252">शीर्षकानुसार पुन्हा क्रमवारी लावा</translation> <translation id="8068253693380742035">साइन इन साठी स्पर्श करा</translation> <translation id="8069615408251337349">Google क्लाउड प्रिंट</translation> -<translation id="8071432093239591881">प्रतिमा म्हणून मुद्रित करा</translation> +<translation id="8071432093239591881">प्रतिमा म्हणून प्रिंट करा</translation> <translation id="8072988827236813198">पिन टॅब</translation> <translation id="8074127646604999664">अलीकडे बंद केलेल्या साइटना डेटा पाठविणे आणि प्राप्त करणे समाप्त करण्याची अनुमती द्या</translation> <translation id="8075191520954018715">मेमरी स्थिती</translation> @@ -4560,7 +4549,7 @@ <translation id="8226619461731305576">रांग</translation> <translation id="8226742006292257240">खाली यादृच्छिकपणे व्युत्पन्न केलेला TPM पासवर्ड आहे जो आपल्या संगणकासाठी नियुक्त केला गेला आहे:</translation> <translation id="8227119283605456246">फाईल संलग्न करा</translation> -<translation id="8233198815467326623">डीफॉल्ट होमपेज रिस्टोअर करायचे?</translation> +<translation id="8233198815467326623">डीफॉल्ट होमपेज रिस्टोअर करायचे का?</translation> <translation id="8234795456569844941">कृपया आमच्या इंजिनियरना ही समस्या सोडवण्यात मदत करा. तुम्हाला प्रोफाइल एरर मिळण्याआधी नेमके काय झाले ते आम्हाला सांगा:</translation> <translation id="8234989666557591529">तुमचे <ph name="DEVICE_TYPE" /> अनलॉक करण्यासाठी एक फोन निवडा</translation> <translation id="8238649969398088015">मदत टीप</translation> @@ -4712,7 +4701,7 @@ <translation id="8490896350101740396">खालील कियोस्क अॅप्स "<ph name="UPDATED_APPS" />" अपडेटित करण्यात आले आहेत. कृपया अपडेट प्रक्रिया पूर्ण करण्यासाठी डिव्हाइस रीबूट करा.</translation> <translation id="8493236660459102203">मायक्रोफोन:</translation> <translation id="8496717697661868878">हे प्लगइन चालवा</translation> -<translation id="8497219075884839166">Windows उपयुक्तता</translation> +<translation id="8497219075884839166">Windows सुविधा</translation> <translation id="8498214519255567734">तुमच्या स्क्रीनकडे पाहणे किंवा मंद उजेडात वाचणे सोपे करते</translation> <translation id="8503813439785031346">वापरकर्तानाव</translation> <translation id="850875081535031620">कोणतेही हानिकारक सॉफ्टवेअर आढळले नाही</translation> @@ -4785,7 +4774,7 @@ <translation id="8631032106121706562">पाकळ्या</translation> <translation id="8637542770513281060">तुमच्या काँप्युटरमध्ये एक सुरक्षित मॉड्यूल आहे, जे Chrome OSमध्ये अनेक गंभीर सुरक्षितता वैशिष्ट्ये अंमलात आणण्यासाठी वापरले जाते. आणखी जाणून घेण्यासाठी Chromebook मदत केंद्राला भेट द्या: https://support.google.com/chromebook/?p=sm</translation> <translation id="8637688295594795546">सिस्टम अपडेट उपलब्ध. डाउनलोड करण्याची तयारी करत आहे…</translation> -<translation id="8639047128869322042">हानिकारक सॉफ्टवेअर तपासत आहे...</translation> +<translation id="8639047128869322042">हानिकारक सॉफ्टवेअरसाठी तपासत आहे...</translation> <translation id="8639963783467694461">स्वयंभरण सेटिंग्ज</translation> <translation id="8642171459927087831">प्रवेश टोकन</translation> <translation id="8642267168767642381">बोट खूप धीमे हलविले</translation> @@ -5156,7 +5145,7 @@ <translation id="923467487918828349">सर्व दर्शवा</translation> <translation id="930268624053534560">तपशीलवार टाइमस्टॅम्प</translation> <translation id="932327136139879170">मुख्यपृष्ठ</translation> -<translation id="932508678520956232">मुद्रण आरंभ करणे शक्य नव्हते.</translation> +<translation id="932508678520956232">प्रिंट आरंभ करणे शक्य नव्हते.</translation> <translation id="93393615658292258">फक्त पासवर्ड</translation> <translation id="935490618240037774">आपले बुकमार्क, इतिहास, पासवर्ड आणि इतर सेटिंग्ज आपल्या Google खात्यात संकालित केल्या जातील जेणेकरून आपण आपल्या सर्व डिव्हाइसेसवर त्यांचा वापर करू शकता.</translation> <translation id="936801553271523408">सिस्टम निदान डेटा</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb index 828fb4b4..73500a2 100644 --- a/chrome/app/resources/generated_resources_ms.xtb +++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">Hidup - tetapan tersuai</translation> <translation id="1493892686965953381">Menunggu untuk <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> peranti lain yang tersedia.</translation> -<translation id="1497284176235884849">PPD yang diberikan tidak sah.</translation> <translation id="1497522201463361063">Tidak dapat menamakan semula "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Peranti tidak diketahui [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Akaun pemilik ini perlu menjadi akaun dilog masuk yang pertama dalam sesi berbilang log masuk.</translation> @@ -1775,7 +1774,6 @@ <translation id="3697100740575341996">Pentadbir IT anda telah melumpuhkan Chrome Goodies untuk peranti anda. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">Alamat e-mel</translation> <translation id="3702500414347826004">Halaman permulaan anda telah ditukar untuk menyertakan <ph name="URL" />.</translation> -<translation id="3703669627274482482">Tanya apabila tapak mahu melihat teks dan imej yang anda salin ke papan keratan</translation> <translation id="370415077757856453">JavaScript disekat</translation> <translation id="3704331259350077894">Penghentian Pengendalian</translation> <translation id="3705722231355495246">-</translation> @@ -2123,7 +2121,6 @@ <translation id="4270393598798225102">Versi <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Tiada padanan</translation> <translation id="4275830172053184480">Mulakan semula peranti anda</translation> -<translation id="4276216215490044084">Tidak dapat memuatkan PPD yang besar. Saiz maksimum ialah 250kB.</translation> <translation id="4278390842282768270">Dibenarkan</translation> <translation id="4281844954008187215">Syarat Perkhidmatan</translation> <translation id="4282196459431406533">Smart Lock dihidupkan</translation> @@ -2203,7 +2200,6 @@ <translation id="4430369329743628066">Penanda halaman ditambahkan</translation> <translation id="443464694732789311">Teruskan</translation> <translation id="4439318412377770121">Adakah anda ingin mendaftar <ph name="DEVICE_NAME" /> ke Peranti Awan Google?</translation> -<translation id="4439612350502082674">Tidak dapat menambahkan pencetak. Mulakan semula dan cuba lagi.</translation> <translation id="4441124369922430666">Adakah anda ingin mulakan apl ini secara automatik apabila mesin ini dihidupkan?</translation> <translation id="444134486829715816">Kembangkan...</translation> <translation id="4441548209689510310">Tunjukkan pilihan semak ejaan</translation> @@ -2434,7 +2430,6 @@ <translation id="4839303808932127586">Si&mpan video sebagai...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> item dipilih</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{1 lagi}other{# lagi}}</translation> -<translation id="4840626203080576849">Tanya apabila tapak ingin melihat teks dan imej yang anda salin ke papan keratan (disyorkan)</translation> <translation id="4842976633412754305">Halaman ini sedang cuba memuatkan skrip dari sumber yang tidak disahkan.</translation> <translation id="4844333629810439236">Papan kekunci lain</translation> <translation id="4846680374085650406">Anda sedang mengikut cadangan pentadbir untuk tetapan ini.</translation> @@ -2701,7 +2696,6 @@ <translation id="5254368820972107711">Tunjukkan fail yang hendak dialih keluar</translation> <translation id="52550593576409946">Aplikasi kios tidak dapat dilancarkan.</translation> <translation id="5255315797444241226">Frasa laluan yang anda masukkan adalah salah.</translation> -<translation id="5259571578888203461">Jangan benarkan tapak melihat teks dan imej yang anda salin ke papan keratan</translation> <translation id="5260508466980570042">Maaf, e-mel atau kata laluan anda tidak dapat disahkan. Sila cuba semula.</translation> <translation id="5261683757250193089">Buka dalam Gedung Web</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Akses fail dari mana-mana sahaja, walaupun di luar talian.<ph name="MARKUP_2" /> @@ -3174,7 +3168,6 @@ <translation id="5972708806901999743">Alihkan ke bahagian atas</translation> <translation id="5972826969634861500">Mula <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Zum keluar</translation> -<translation id="5975730206036440725">Tidak dapat menemui PPD. Pastikan Chromebook anda berada dalam talian dan cuba lagi.</translation> <translation id="5975792506968920132">Peratusan Cas Bateri</translation> <translation id="5976160379964388480">Lain-lain</translation> <translation id="5978264784700053212">Pusat mesej</translation> @@ -3216,7 +3209,6 @@ <translation id="6042308850641462728">Lagi</translation> <translation id="6042850536017090003">Ketik pada Pemberitahuan apl.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> berkongsi tab Chrome dengan <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Selesai!</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> berkongsi tab dan audio Chrome dengan <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Tekan dan tahan |<ph name="ACCELERATOR" />| untuk keluar daripada skrin penuh</translation> <translation id="6049065490165456785">Foto dari kamera dalaman</translation> @@ -3383,7 +3375,6 @@ <translation id="6311220991371174222">Tidak dapat memulakan Chrome kerana berlaku kesilapan semasa membuka profil anda. Cuba mulakan semula Chrome.</translation> <translation id="6312403991423642364">Ralat rangkaian tidak diketahui</translation> <translation id="6313641880021325787">KELUAR DARIPADA VR</translation> -<translation id="6314335155547195432">Jana Kata Laluan</translation> <translation id="6314819609899340042">Anda telah berjaya mendayakan ciri penyahpepijatan pada <ph name="IDS_SHORT_PRODUCT_NAME" /> peranti ini.</translation> <translation id="6315343732431721770">Halaman permulaan anda telah diubah untuk menyertakan <ph name="URL" />. Untuk melumpuhkan sambungan yang menukar halaman permulaan anda, klik Pulihkan.</translation> <translation id="6315493146179903667">Bring All to Front</translation> @@ -3421,7 +3412,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Sediakan Smart Lock untuk Android</translation> <translation id="6374469231428023295">Cuba Lagi</translation> -<translation id="6377158645544167202">Tidak dapat menyambungkan pencetak. Pastikan pencetak dihidupkan dan disambungkan kepada Chromebook anda melalui Wi-Fi atau USB.</translation> <translation id="6380143666419481200">Terima dan teruskan</translation> <translation id="6383051423892982287">Sulitkan data yang disegerakkan dengan <ph name="BEGIN_LINK" />ungkapan laluan penyegerakan<ph name="END_LINK" /> anda sendiri</translation> <translation id="6384275966486438344">Ubah tetapan carian anda kepada: <ph name="SEARCH_HOST" /></translation> @@ -3578,7 +3568,6 @@ <translation id="6606070663386660533">Tab 8</translation> <translation id="6607272825297743757">Maklumat fail</translation> <translation id="6607831829715835317">Lagi al&at</translation> -<translation id="6610183966322615106">Ralat menambahkan pencetak</translation> <translation id="6612358246767739896">Kandungan yang dilindungi</translation> <translation id="6613452264606394692">Tandai halaman ini untuk kembali ke sini dengan cepat</translation> <translation id="6615455863669487791">Tunjukkan kepada saya</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb index b5d4d65..eaeeb56 100644 --- a/chrome/app/resources/generated_resources_nl.xtb +++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">Aan - aangepaste instellingen</translation> <translation id="1493892686965953381">Wachten op <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> andere beschikbare apparaten.</translation> -<translation id="1497284176235884849">Opgegeven PPD is ongeldig.</translation> <translation id="1497522201463361063">Kan de naam van '<ph name="FILE_NAME" />' niet wijzigen. <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Onbekend apparaat [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Dit eigenaarsaccount is het eerste account waarop moet worden ingelogd wanneer meerdere inlogsessies worden uitgevoerd.</translation> @@ -1774,7 +1773,6 @@ <translation id="3697100740575341996">Je IT-beheerder heeft Chrome Goodies uitgeschakeld voor je apparaat. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">E-mailadres</translation> <translation id="3702500414347826004">Je startpagina's zijn gewijzigd en bevatten nu ook <ph name="URL" />.</translation> -<translation id="3703669627274482482">Vragen wanneer een site tekst en afbeeldingen wil bekijken die je naar het klembord kopieert</translation> <translation id="370415077757856453">JavaScript geblokkeerd</translation> <translation id="3704331259350077894">Activiteit gestaakt</translation> <translation id="3705722231355495246">-</translation> @@ -2122,7 +2120,6 @@ <translation id="4270393598798225102">Versie <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Geen overeenkomsten</translation> <translation id="4275830172053184480">Je apparaat opnieuw opstarten</translation> -<translation id="4276216215490044084">Kan grote PPD niet laden. Maximum grootte is 250 KB.</translation> <translation id="4278390842282768270">Toegestaan</translation> <translation id="4281844954008187215">Servicevoorwaarden</translation> <translation id="4282196459431406533">Smart Lock is ingeschakeld</translation> @@ -2202,7 +2199,6 @@ <translation id="4430369329743628066">Bladwijzer toegevoegd</translation> <translation id="443464694732789311">Doorgaan</translation> <translation id="4439318412377770121">Wil je de <ph name="DEVICE_NAME" /> registreren voor Google Cloud Devices?</translation> -<translation id="4439612350502082674">Kan printer niet toevoegen. Start opnieuw en probeer het nogmaals.</translation> <translation id="4441124369922430666">Wil je dat deze app automatisch start wanneer het apparaat wordt ingeschakeld?</translation> <translation id="444134486829715816">Uitvouwen...</translation> <translation id="4441548209689510310">Opties voor spellingcontrole weergeven</translation> @@ -2433,7 +2429,6 @@ <translation id="4839303808932127586">&Video opslaan als...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> items geselecteerd</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{Nog 1 item}other{Nog # items}}</translation> -<translation id="4840626203080576849">Vragen wanneer een site de tekst en afbeeldingen wil bekijken die je naar het klembord kopieert (aanbevolen)</translation> <translation id="4842976633412754305">Deze pagina probeert scripts van niet-geverifieerde bronnen te laden.</translation> <translation id="4844333629810439236">Andere toetsenborden</translation> <translation id="4846680374085650406">Je volgt de aanbeveling van de beheerder voor deze instelling.</translation> @@ -2701,7 +2696,6 @@ <translation id="5254368820972107711">Bestanden weergeven die worden verwijderd</translation> <translation id="52550593576409946">Kiosk-app kan niet worden gestart.</translation> <translation id="5255315797444241226">De ingevoerde wachtwoordzin is onjuist.</translation> -<translation id="5259571578888203461">Niet toestaan dat sites tekst en afbeeldingen bekijken die je kopieert naar het klembord</translation> <translation id="5260508466980570042">Je e-mailadres of wachtwoord kan niet worden geverifieerd. Probeer het opnieuw.</translation> <translation id="5261683757250193089">Openen in Web Store</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Open bestanden op alle locaties, zelfs offline.<ph name="MARKUP_2" /> @@ -3175,7 +3169,6 @@ <translation id="5972708806901999743">Verplaatsen naar boven</translation> <translation id="5972826969634861500"><ph name="PRODUCT_NAME" /> starten</translation> <translation id="5975083100439434680">Uitzoomen</translation> -<translation id="5975730206036440725">Kan PPD niet vinden. Controleer of je Chromebook online is en probeer het opnieuw.</translation> <translation id="5975792506968920132">Percentage acculading</translation> <translation id="5976160379964388480">Overige</translation> <translation id="5978264784700053212">Berichtencentrum</translation> @@ -3217,7 +3210,6 @@ <translation id="6042308850641462728">Meer</translation> <translation id="6042850536017090003">Tik op App-meldingen.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> deelt een Chrome-tabblad met <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Klaar</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> deelt een Chrome-tabblad en audio met <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Houd |<ph name="ACCELERATOR" />| ingedrukt om volledig scherm af te sluiten</translation> <translation id="6049065490165456785">Foto via interne camera</translation> @@ -3384,7 +3376,6 @@ <translation id="6311220991371174222">Kan Chrome niet starten omdat er een fout is opgetreden bij het openen van je profiel. Probeer Chrome opnieuw te starten.</translation> <translation id="6312403991423642364">Onbekende netwerkfout</translation> <translation id="6313641880021325787">VR AFSLUITEN</translation> -<translation id="6314335155547195432">Wachtwoord genereren</translation> <translation id="6314819609899340042">Je hebt foutopsporingsfuncties ingeschakeld voor dit <ph name="IDS_SHORT_PRODUCT_NAME" />-apparaat.</translation> <translation id="6315343732431721770">Je startpagina is gewijzigd en bevat nu ook <ph name="URL" />. Als je extensies wilt uitschakelen die je startpagina wijzigen, klik je op Herstellen.</translation> <translation id="6315493146179903667">Alles op voorgrond</translation> @@ -3422,7 +3413,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Smart Lock voor Android instellen</translation> <translation id="6374469231428023295">Opnieuw proberen</translation> -<translation id="6377158645544167202">Kan geen verbinding maken met printer. Controleer of de printer is ingeschakeld en via wifi of USB is verbonden met je Chromebook.</translation> <translation id="6380143666419481200">Accepteren en doorgaan</translation> <translation id="6383051423892982287">Gesynchroniseerde gegevens versleutelen met je eigen <ph name="BEGIN_LINK" />wachtwoordzin voor synchronisatie<ph name="END_LINK" /></translation> <translation id="6384275966486438344">Je zoekinstellingen wijzigen in: <ph name="SEARCH_HOST" /></translation> @@ -3579,7 +3569,6 @@ <translation id="6606070663386660533">Tabblad 8</translation> <translation id="6607272825297743757">Bestandsinformatie</translation> <translation id="6607831829715835317">Meer hu&lpprogramma's</translation> -<translation id="6610183966322615106">Fout bij toevoegen van printer</translation> <translation id="6612358246767739896">Beveiligde content</translation> <translation id="6613452264606394692">Keer hier snel terug door een bladwijzer voor deze pagina in te stellen</translation> <translation id="6615455863669487791">Weergeven</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb index 7f27875..b72233c 100644 --- a/chrome/app/resources/generated_resources_no.xtb +++ b/chrome/app/resources/generated_resources_no.xtb
@@ -326,7 +326,6 @@ <translation id="1487335504823219454">På – egendefinerte innstillinger</translation> <translation id="1493892686965953381">Venter på <ph name="LOAD_STATE_PARAMETER" /> …</translation> <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> andre tilgjengelige enheter.</translation> -<translation id="1497284176235884849">PPD-filen er ugyldig.</translation> <translation id="1497522201463361063">Kunne ikke gi «<ph name="FILE_NAME" />» nytt navn. <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Ukjent enhet [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Denne eierkontoen må være den første påloggingskontoen i en multipåloggingsøkt.</translation> @@ -1765,7 +1764,6 @@ <translation id="3697100740575341996">IT-administratoren din har deaktivert ekstrafunksjoner for Chrome på enheten din. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">E-postadresse</translation> <translation id="3702500414347826004">Oppstartssidene er endret til å inkludere <ph name="URL" />.</translation> -<translation id="3703669627274482482">Spør når et nettsted ber om å se tekst og bilder du kopierer til utklippstavlen</translation> <translation id="370415077757856453">JavaScript er blokkert</translation> <translation id="3704331259350077894">Handlingsstopp</translation> <translation id="3705722231355495246">-</translation> @@ -1875,7 +1873,7 @@ <translation id="385051799172605136">Tilbake</translation> <translation id="3851428669031642514">Last inn utrygge skripter</translation> <translation id="3855441664322950881">Pakk utvidelsen</translation> -<translation id="3855676282923585394">Importer bokmerker og innstillinger</translation> +<translation id="3855676282923585394">Importér bokmerker og innstillinger</translation> <translation id="3856800405688283469">Velg tidssone</translation> <translation id="3856921555429624101">Målingen av databruk er avsluttet</translation> <translation id="3857228364945137633">Prøv Smart Lock for å låse opp <ph name="DEVICE_TYPE" />-enheten uten passord når du har telefonen i nærheten.</translation> @@ -1937,7 +1935,7 @@ <translation id="3954354850384043518">Pågår</translation> <translation id="3955193568934677022">Gi nettsteder tillatelse til å spille av beskyttet innhold (anbefales)</translation> <translation id="3956702100721821638">Kunne ikke nå Google Play</translation> -<translation id="3958088479270651626">Importer bokmerker og innstillinger</translation> +<translation id="3958088479270651626">Importér bokmerker og innstillinger</translation> <translation id="3960566196862329469">ONC</translation> <translation id="3966072572894326936">Velg en annen mappe...</translation> <translation id="3966388904776714213">Audio Player</translation> @@ -2106,7 +2104,6 @@ <translation id="4270393598798225102">Versjon <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Ingen treff</translation> <translation id="4275830172053184480">Start enheten din på nytt</translation> -<translation id="4276216215490044084">Kan ikke laste inn stor PPD. Maksimal størrelse er 250 kB.</translation> <translation id="4278390842282768270">Tillatt</translation> <translation id="4281844954008187215">Vilkår for bruk</translation> <translation id="4282196459431406533">Smart Lock er slått på</translation> @@ -2185,7 +2182,6 @@ <translation id="4430369329743628066">Bokmerke lagt til</translation> <translation id="443464694732789311">Fortsett</translation> <translation id="4439318412377770121">Ønsker du å registrere <ph name="DEVICE_NAME" /> på Google Cloud Devices?</translation> -<translation id="4439612350502082674">Kan ikke legge til skriver. Start på nytt, og prøv igjen.</translation> <translation id="4441124369922430666">Vil du starte denne appen automatisk når maskinen slås på?</translation> <translation id="444134486829715816">Utvid</translation> <translation id="4441548209689510310">Vis alternativer for stavekontroll</translation> @@ -2416,7 +2412,6 @@ <translation id="4839303808932127586">La&gre video som</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> elementer valgt</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{1 til}other{# til}}</translation> -<translation id="4840626203080576849">Spør når et nettsted vil se tekst og bilder du kopierer til utklippstavlen (anbefalt)</translation> <translation id="4842976633412754305">Denne siden prøver å laste inn skript (kodesnutter) fra uautentiserte kilder.</translation> <translation id="4844333629810439236">Andre tastaturer</translation> <translation id="4846680374085650406">Du følger administratorens anbefaling for denne innstillingen.</translation> @@ -2679,7 +2674,6 @@ <translation id="5254368820972107711">Vis filene som skal fjernes</translation> <translation id="52550593576409946">Kiosk-appen kunne ikke startes.</translation> <translation id="5255315797444241226">Passordet du skrev inn, er feil.</translation> -<translation id="5259571578888203461">Ikke la nettsteder se tekst og bilder du kopierer til utklippstavlen</translation> <translation id="5260508466980570042">Beklager, e-postadressen eller passordet kan ikke verifiseres. Prøv på nytt.</translation> <translation id="5261683757250193089">Åpne i Nettmarked</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Tilgang til filer uansett hvor du er, til og med uten nett.<ph name="MARKUP_2" /> @@ -3150,7 +3144,6 @@ <translation id="5972708806901999743">Flytt øverst</translation> <translation id="5972826969634861500">Start <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Zoom ut</translation> -<translation id="5975730206036440725">Finner ikke PPD. Kontrollér at Chromebooken er på nettet, og prøv på nytt.</translation> <translation id="5975792506968920132">Ladingsprosent for batteri</translation> <translation id="5976160379964388480">Andre</translation> <translation id="5978264784700053212">Meldingssenter</translation> @@ -3191,7 +3184,6 @@ <translation id="6042169520002885235">Velg en skriverprodusent og -modell</translation> <translation id="6042308850641462728">Mer</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> deler en Chrome-fane med <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Ferdig!</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> deler lyd og en fane fra Chrome med <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Trykk og hold på |<ph name="ACCELERATOR" />| for å avslutte fullskjerm</translation> <translation id="6049065490165456785">Bilde fra internt kamera</translation> @@ -3358,7 +3350,6 @@ <translation id="6311220991371174222">Chrome kunne ikke starte, fordi det oppsto en feil ved åpning av profilen din. Prøv å starte Chrome på nytt.</translation> <translation id="6312403991423642364">Ukjent nettverksfeil</translation> <translation id="6313641880021325787">AVSLUTT VR</translation> -<translation id="6314335155547195432">Generer passord</translation> <translation id="6314819609899340042">Nå har du slått på feilsøkingsfunksjoner på denne <ph name="IDS_SHORT_PRODUCT_NAME" />-enheten.</translation> <translation id="6315343732431721770">Oppstartssidene er endret til å inkludere <ph name="URL" />. Du kan slå av utvidelser som endrer oppstartssiden, ved å klikke på Gjenopprett.</translation> <translation id="6315493146179903667">Legg alle i forgrunnen</translation> @@ -3396,7 +3387,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Konfigurer Smart Lock for Android</translation> <translation id="6374469231428023295">Prøv på nytt</translation> -<translation id="6377158645544167202">Kan ikke koble til skriveren. Kontrollér at skriveren er slått på og koblet til Chromebooken via Wi-Fi eller USB.</translation> <translation id="6380143666419481200">Godta og fortsett</translation> <translation id="6383051423892982287">Kryptér synkroniserte data med din egen <ph name="BEGIN_LINK" />passordfrase for synkronisering<ph name="END_LINK" /></translation> <translation id="6384275966486438344">endre søkeinnstillingene dine til: <ph name="SEARCH_HOST" /></translation> @@ -3551,7 +3541,6 @@ <translation id="6606070663386660533">Fane 8</translation> <translation id="6607272825297743757">Filinformasjon</translation> <translation id="6607831829715835317">Flere verktøy</translation> -<translation id="6610183966322615106">Kunne ikke legge til skriveren</translation> <translation id="6612358246767739896">Beskyttet innhold</translation> <translation id="6613452264606394692">Kom raskt tilbake hit ved å sette denne siden som bokmerke</translation> <translation id="6615455863669487791">Vis meg</translation> @@ -3618,7 +3607,7 @@ <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> -<translation id="6723661294526996303">Importer bokmerker og innstillinger</translation> +<translation id="6723661294526996303">Importér bokmerker og innstillinger...</translation> <translation id="6723839937902243910">Strøm</translation> <translation id="6725206449694821596">Internet Printing Protocol (IPP)</translation> <translation id="672609503628871915">Se hva som er nytt</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb index 48195391..bb850921 100644 --- a/chrome/app/resources/generated_resources_pl.xtb +++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">Włączone – ustawienia niestandardowe</translation> <translation id="1493892686965953381">Czekam na <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033">Inne dostępne urządzenia (<ph name="NUM_PRINTERS" />).</translation> -<translation id="1497284176235884849">Nieprawidłowy plik PPD.</translation> <translation id="1497522201463361063">Nie można zmienić nazwy pliku „<ph name="FILE_NAME" />”. <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Nieznane urządzenie [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">W sesji wielokrotnego logowania trzeba w pierwszej kolejności zalogować się na konto tego właściciela.</translation> @@ -1774,7 +1773,6 @@ <translation id="3697100740575341996">Administrator IT wyłączył gadżety Chrome dla tego urządzenia. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">Adres e-mail</translation> <translation id="3702500414347826004">Strony początkowe zostały zmienione i zawierają <ph name="URL" />.</translation> -<translation id="3703669627274482482">Pytaj, gdy strona chce mieć dostęp do tekstu i obrazów skopiowanych do schowka</translation> <translation id="370415077757856453">JavaScript zablokowany</translation> <translation id="3704331259350077894">Zaprzestanie działania</translation> <translation id="3705722231355495246">-</translation> @@ -1934,7 +1932,7 @@ <translation id="3936390757709632190">&Otwórz plik audio w nowej karcie</translation> <translation id="3936925983113350642">Wybrane hasło będzie wymagane później do odtworzenia tego certyfikatu. Zapisz je w bezpiecznym miejscu.</translation> <translation id="3937640725563832867">Alternatywna nazwa wystawcy certyfikatu</translation> -<translation id="3937734102568271121">Zawsze tłumacz z tego języka: <ph name="LANGUAGE" /></translation> +<translation id="3937734102568271121">Zawsze tłumacz z języka: <ph name="LANGUAGE" /></translation> <translation id="3940233957883229251">Włącz automatyczne powtarzanie</translation> <translation id="3941357410013254652">Identyfikator kanału</translation> <translation id="3941565636838060942">Aby ukryć dostęp do tej aplikacji, musisz odinstalować ją, @@ -2122,7 +2120,6 @@ <translation id="4270393598798225102">Wersja <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Brak zgodnych wyników</translation> <translation id="4275830172053184480">Zrestartuj urządzenie</translation> -<translation id="4276216215490044084">Nie można załadować pliku PPD, bo jest zbyt duży. Maksymalny rozmiar to 250 kB.</translation> <translation id="4278390842282768270">Dopuszczone</translation> <translation id="4281844954008187215">Warunki korzystania z usługi</translation> <translation id="4282196459431406533">Funkcja Smart Lock jest włączona</translation> @@ -2202,7 +2199,6 @@ <translation id="4430369329743628066">Dodano zakładkę</translation> <translation id="443464694732789311">Dalej</translation> <translation id="4439318412377770121">Czy chcesz zarejestrować urządzenie <ph name="DEVICE_NAME" /> w chmurze Google?</translation> -<translation id="4439612350502082674">Nie można dodać drukarki. Uruchom ponownie i spróbuj jeszcze raz.</translation> <translation id="4441124369922430666">Chcesz, by ta aplikacja była uruchamiana automatycznie po włączeniu urządzenia?</translation> <translation id="444134486829715816">Rozwiń...</translation> <translation id="4441548209689510310">Pokaż opcje sprawdzania pisowni</translation> @@ -2433,7 +2429,6 @@ <translation id="4839303808932127586">Za&pisz film wideo jako...</translation> <translation id="4839847978919684242">Wybrano <ph name="SELCTED_FILES_COUNT" /> elementy(ów)</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{jeszcze 1}few{jeszcze #}many{jeszcze #}other{jeszcze #}}</translation> -<translation id="4840626203080576849">Pytaj, gdy strona chce uzyskać dostęp do tekstu i obrazów skopiowanych do schowka (zalecane)</translation> <translation id="4842976633412754305">Ta strona próbuje wczytać skrypty z nieuwierzytelnionych źródeł.</translation> <translation id="4844333629810439236">Inne klawiatury</translation> <translation id="4846680374085650406">Przestrzegasz zaleceń administratora dotyczących tego ustawienia.</translation> @@ -2700,7 +2695,6 @@ <translation id="5254368820972107711">Pokaż pliki do usunięcia</translation> <translation id="52550593576409946">Nie można uruchomić aplikacji kiosku.</translation> <translation id="5255315797444241226">Wprowadzone hasło jest nieprawidłowe.</translation> -<translation id="5259571578888203461">Nie zezwalaj stronom na dostęp do tekstu i obrazów skopiowanych do schowka</translation> <translation id="5260508466980570042">Niestety, nie udało się zweryfikować Twojego adresu e-mail lub hasła. Spróbuj ponownie.</translation> <translation id="5261683757250193089">Otwórz w Chrome Web Store</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Korzystaj z plików, gdziekolwiek jesteś – nawet offline.<ph name="MARKUP_2" /> @@ -3174,7 +3168,6 @@ <translation id="5972708806901999743">Przenieś na początek</translation> <translation id="5972826969634861500">Uruchom przeglądarkę <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Pomniejsz</translation> -<translation id="5975730206036440725">Nie można znaleźć pliku PPD. Upewnij się, że Chromebook jest online, i spróbuj ponownie.</translation> <translation id="5975792506968920132">Procent naładowania akumulatora</translation> <translation id="5976160379964388480">Pozostałe</translation> <translation id="5978264784700053212">Centrum wiadomości</translation> @@ -3216,7 +3209,6 @@ <translation id="6042308850641462728">Więcej</translation> <translation id="6042850536017090003">Kliknij „Powiadomienia aplikacji”.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> udostępnia kartę Chrome karcie <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Gotowe.</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> udostępnia kartę i dźwięk z Chrome karcie <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Naciśnij i przytrzymaj |<ph name="ACCELERATOR" />|, by zamknąć pełny ekran</translation> <translation id="6049065490165456785">Zdjęcie z wbudowanego aparatu</translation> @@ -3383,7 +3375,6 @@ <translation id="6311220991371174222">Nie można uruchomić Chrome – coś poszło nie tak podczas otwierania Twojego profilu. Spróbuj jeszcze raz uruchomić Chrome.</translation> <translation id="6312403991423642364">Nieznany błąd sieci</translation> <translation id="6313641880021325787">WYŁĄCZ TRYB VR</translation> -<translation id="6314335155547195432">Wygeneruj hasło</translation> <translation id="6314819609899340042">Funkcje debugowania zostały włączone na urządzeniu <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation> <translation id="6315343732431721770">Strony początkowe zostały zmienione i zawierają <ph name="URL" />. Aby wyłączyć rozszerzenia, które zmieniają stronę początkową, kliknij Przywróć.</translation> <translation id="6315493146179903667">Przenieś wszystko na wierzch</translation> @@ -3421,7 +3412,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Skonfiguruj Smart Lock na Androida</translation> <translation id="6374469231428023295">Spróbuj jeszcze raz</translation> -<translation id="6377158645544167202">Nie można połączyć z drukarką. Upewnij się, że drukarka jest włączona i podłączona do Chromebooka za pomocą Wi-Fi lub USB.</translation> <translation id="6380143666419481200">Zaakceptuj i kontynuuj</translation> <translation id="6383051423892982287">Szyfruj synchronizowane dane za pomocą własnego <ph name="BEGIN_LINK" />hasła synchronizacji<ph name="END_LINK" /></translation> <translation id="6384275966486438344">Zmiana ustawień wyszukiwania na: <ph name="SEARCH_HOST" /></translation> @@ -3578,7 +3568,6 @@ <translation id="6606070663386660533">Karta 8</translation> <translation id="6607272825297743757">Informacje o pliku</translation> <translation id="6607831829715835317">Więcej narzę&dzi</translation> -<translation id="6610183966322615106">Błąd podczas dodawania drukarki</translation> <translation id="6612358246767739896">Treść chroniona</translation> <translation id="6613452264606394692">Dodaj tę stronę do zakładek, by szybko na nią wrócić</translation> <translation id="6615455863669487791">Pokaż mi</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb index 8cfe95f..01bbb2f 100644 --- a/chrome/app/resources/generated_resources_pt-BR.xtb +++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">Sincronização ativada - configurações personalizadas</translation> <translation id="1493892686965953381">Aguardando <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> outros dispositivos disponíveis.</translation> -<translation id="1497284176235884849">O PPD fornecido é inválido.</translation> <translation id="1497522201463361063">Não foi possível renomear "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Dispositivo desconhecido [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Esta conta de proprietário precisa ser a primeira conta a fazer login em uma sessão de login múltiplo.</translation> @@ -1774,7 +1773,6 @@ <translation id="3697100740575341996">Seu administrador de TI desativou os recursos adicionais do Google Chrome para seu dispositivo. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">Endereço de e-mail</translation> <translation id="3702500414347826004">Suas páginas de inicialização foram alteradas para incluir <ph name="URL" />.</translation> -<translation id="3703669627274482482">Perguntar quando um site quiser ver os textos e imagens que você copia para a área de transferência</translation> <translation id="370415077757856453">JavaScript bloqueado</translation> <translation id="3704331259350077894">Interrupção da operação</translation> <translation id="3705722231355495246">-</translation> @@ -2122,7 +2120,6 @@ <translation id="4270393598798225102">Versão <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Nenhuma correspondência</translation> <translation id="4275830172053184480">Reiniciar seu dispositivo</translation> -<translation id="4276216215490044084">Não é possível carregar PPD grande. O tamanho máximo é 250 KB.</translation> <translation id="4278390842282768270">Permitido</translation> <translation id="4281844954008187215">Termos de Serviço</translation> <translation id="4282196459431406533">O Smart Lock está ativado</translation> @@ -2202,7 +2199,6 @@ <translation id="4430369329743628066">Página adicionada como favorito</translation> <translation id="443464694732789311">Continuar</translation> <translation id="4439318412377770121">Quer registrar o dispositivo <ph name="DEVICE_NAME" /> no Google Cloud Devices?</translation> -<translation id="4439612350502082674">Não é possível adicionar a impressora. Reinicie e tente novamente.</translation> <translation id="4441124369922430666">Quer iniciar automaticamente este aplicativo quando o computador for ligado?</translation> <translation id="444134486829715816">Expandir...</translation> <translation id="4441548209689510310">Mostrar opções de verificação ortográfica</translation> @@ -2433,7 +2429,6 @@ <translation id="4839303808932127586">Sal&var vídeo como...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> itens selecionados</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{Mais 1}one{Mais #}other{Mais #}}</translation> -<translation id="4840626203080576849">Perguntar quando um site quiser ver os textos e imagens que você copiou para a área de transferência (recomendado)</translation> <translation id="4842976633412754305">Esta página está tentando carregar scripts de fontes não autenticadas.</translation> <translation id="4844333629810439236">Outros teclados</translation> <translation id="4846680374085650406">Você está seguindo a recomendação do administrador para esta configuração.</translation> @@ -2700,7 +2695,6 @@ <translation id="5254368820972107711">Mostrar arquivos a serem removidos</translation> <translation id="52550593576409946">Não foi possível iniciar o aplicativo Kiosk.</translation> <translation id="5255315797444241226">A senha inserida está incorreta.</translation> -<translation id="5259571578888203461">Não permitir que sites vejam textos e imagens que você copia na área de transferência</translation> <translation id="5260508466980570042">Não foi possível confirmar seu e-mail ou senha. Tente novamente.</translation> <translation id="5261683757250193089">Abrir na Web Store</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Acesse arquivos de qualquer lugar, até mesmo off-line.<ph name="MARKUP_2" /> @@ -3175,7 +3169,6 @@ <translation id="5972708806901999743">Mover para a parte superior</translation> <translation id="5972826969634861500">Iniciar o <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Diminuir zoom</translation> -<translation id="5975730206036440725">Não é possível encontrar o PPD. Verifique se seu Chromebook está on-line e tente novamente.</translation> <translation id="5975792506968920132">Percentual de carga da bateria</translation> <translation id="5976160379964388480">Outros</translation> <translation id="5978264784700053212">Central de mensagens</translation> @@ -3217,7 +3210,6 @@ <translation id="6042308850641462728">Mais</translation> <translation id="6042850536017090003">Toque em Notificações de apps.</translation> <translation id="6043317578411397101">O app <ph name="APP_NAME" /> está compartilhando uma guia do Chrome com <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Concluído.</translation> <translation id="6044805581023976844">O app <ph name="APP_NAME" /> está compartilhando áudio e uma guia do Chrome com <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Toque em |<ph name="ACCELERATOR" />| e mantenha essa tecla pressionada para sair do modo tela cheia</translation> <translation id="6049065490165456785">Foto da câmera interna</translation> @@ -3385,7 +3377,6 @@ <translation id="6311220991371174222">Não foi possível iniciar o Chrome porque algo deu errado ao abrir seu perfil. Tente reiniciar o Chrome.</translation> <translation id="6312403991423642364">Erro de rede desconhecido</translation> <translation id="6313641880021325787">SAIR DE RV</translation> -<translation id="6314335155547195432">Gerar senha</translation> <translation id="6314819609899340042">Você ativou os recursos de depuração neste dispositivo <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation> <translation id="6315343732431721770">Sua página de inicialização foi alterada para incluir <ph name="URL" />. Para desativar extensões que alteram sua página de inicialização, clique em Restaurar.</translation> <translation id="6315493146179903667">Trazer todas para frente</translation> @@ -3423,7 +3414,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Configurar Smart Lock para Android</translation> <translation id="6374469231428023295">Repetir</translation> -<translation id="6377158645544167202">Não é possível conectar a impressora. Verifique se a impressora está ligada e conectada ao seu Chromebook por Wi-Fi ou USB.</translation> <translation id="6380143666419481200">Aceitar e continuar</translation> <translation id="6383051423892982287">Criptografar dados sincronizados com sua <ph name="BEGIN_LINK" />senha longa de sincronização<ph name="END_LINK" /></translation> <translation id="6384275966486438344">Alterar suas configurações de pesquisa para: <ph name="SEARCH_HOST" /></translation> @@ -3580,7 +3570,6 @@ <translation id="6606070663386660533">Aba 8</translation> <translation id="6607272825297743757">Informações do arquivo</translation> <translation id="6607831829715835317">Mais ferramen&tas</translation> -<translation id="6610183966322615106">Erro ao adicionar impressora</translation> <translation id="6612358246767739896">Conteúdo protegido</translation> <translation id="6613452264606394692">Você pode voltar rapidamente a esta página, adicionando-a esta aos favoritos</translation> <translation id="6615455863669487791">Exibir</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb index 2fe517f..9f33ea7 100644 --- a/chrome/app/resources/generated_resources_pt-PT.xtb +++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -328,7 +328,6 @@ <translation id="1487335504823219454">Ativado - definições personalizadas</translation> <translation id="1493892686965953381">A aguardar <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033">Mais <ph name="NUM_PRINTERS" /> dispositivos disponíveis.</translation> -<translation id="1497284176235884849">O PPD fornecido é inválido.</translation> <translation id="1497522201463361063">Não é possível mudar o nome de "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Dispositivo desconhecido [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Esta conta de proprietário tem de ser a primeira conta com início de sessão integrado.</translation> @@ -1776,7 +1775,6 @@ <translation id="3697100740575341996">O gestor de TI desativou os Diversos do Chrome para o seu dispositivo. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">Endereço de email</translation> <translation id="3702500414347826004">As suas páginas iniciais foram alteradas para incluir <ph name="URL" />.</translation> -<translation id="3703669627274482482">Perguntar quando um site pretender ver o texto e as imagens que copia para a área de transferência</translation> <translation id="370415077757856453">JavaScript bloqueado</translation> <translation id="3704331259350077894">Cessação da operação</translation> <translation id="3705722231355495246">-</translation> @@ -2124,7 +2122,6 @@ <translation id="4270393598798225102">Versão <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Sem correspondências</translation> <translation id="4275830172053184480">Reiniciar o dispositivo</translation> -<translation id="4276216215490044084">Não é possível carregar PPDs grandes. O tamanho máximo é 250 kB.</translation> <translation id="4278390842282768270">Permitidos:</translation> <translation id="4281844954008187215">Termos de Utilização</translation> <translation id="4282196459431406533">O Smart Lock está ativado</translation> @@ -2204,7 +2201,6 @@ <translation id="4430369329743628066">Marcador adicionado</translation> <translation id="443464694732789311">Continuar</translation> <translation id="4439318412377770121">Pretende registar o <ph name="DEVICE_NAME" /> no Google Cloud Devices?</translation> -<translation id="4439612350502082674">Não é possível adicionar a impressora. Reinicie e tente novamente.</translation> <translation id="4441124369922430666">Pretende iniciar automaticamente esta aplicação quando o computador é ligado?</translation> <translation id="444134486829715816">Expandir...</translation> <translation id="4441548209689510310">Mostrar opções de verificação ortográfica</translation> @@ -2435,7 +2431,6 @@ <translation id="4839303808932127586">Guardar &vídeo como...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> itens selecionados</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{Mais 1}other{Mais #}}</translation> -<translation id="4840626203080576849">Perguntar quando um site pretender ver o texto e as imagens que copia para a área de transferência (recomendado)</translation> <translation id="4842976633412754305">Esta página está a tentar carregar scripts de origens não autenticadas.</translation> <translation id="4844333629810439236">Outros teclados</translation> <translation id="4846680374085650406">Está a seguir a recomendação do gestor para esta definição.</translation> @@ -2702,7 +2697,6 @@ <translation id="5254368820972107711">Mostrar ficheiros a remover</translation> <translation id="52550593576409946">Não foi possível iniciar a aplicação de quiosque.</translation> <translation id="5255315797444241226">A frase de acesso introduzida está incorrecta.</translation> -<translation id="5259571578888203461">Não permita que os sites vejam o texto e as imagens que copia para a área de transferência.</translation> <translation id="5260508466980570042">Lamentamos, mas não foi possível confirmar o seu email ou palavra-passe. Tente novamente.</translation> <translation id="5261683757250193089">Abrir na Web Store</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Aceda a ficheiros a partir de qualquer local, mesmo offline.<ph name="MARKUP_2" /> @@ -3177,7 +3171,6 @@ <translation id="5972708806901999743">Mover para o início</translation> <translation id="5972826969634861500">Iniciar o <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Reduzir</translation> -<translation id="5975730206036440725">Não é possível encontrar o PPD. Verifique se o Chromebook está online e tente novamente.</translation> <translation id="5975792506968920132">Percentagem de carga da bateria</translation> <translation id="5976160379964388480">Outros</translation> <translation id="5978264784700053212">Centro de mensagens</translation> @@ -3219,7 +3212,6 @@ <translation id="6042308850641462728">Mais</translation> <translation id="6042850536017090003">Toque em Notificações de aplicações.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> está a partilhar um separador do Chrome com <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Concluído.</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> está a partilhar um separador do Chrome e o áudio com <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Prima |<ph name="ACCELERATOR" />| sem soltar para sair do modo de ecrã inteiro.</translation> <translation id="6049065490165456785">Fotografia tirada com a câmara interna</translation> @@ -3386,7 +3378,6 @@ <translation id="6311220991371174222">Não é possível iniciar o Chrome porque ocorreu um erro ao abrir o seu perfil. Experimente reiniciar o Chrome.</translation> <translation id="6312403991423642364">Erro de rede desconhecido</translation> <translation id="6313641880021325787">SAIR DA RV</translation> -<translation id="6314335155547195432">Gerar palavra-passe</translation> <translation id="6314819609899340042">Ativou com êxito as funcionalidades de depuração neste dispositivo <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation> <translation id="6315343732431721770">As suas páginas iniciais foram alteradas para incluir <ph name="URL" />. Para desativar as extensões que alteram a sua página inicial, clique em Restaurar.</translation> <translation id="6315493146179903667">Trazer tudo para a frente</translation> @@ -3424,7 +3415,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Configurar o Smart Lock para Android</translation> <translation id="6374469231428023295">Tentar novamente</translation> -<translation id="6377158645544167202">Não é possível utilizar a impressora. Verifique se a impressão está ligada e associada ao Chromebook por Wi-Fi ou USB.</translation> <translation id="6380143666419481200">Aceitar e continuar</translation> <translation id="6383051423892982287">Encriptar dados sincronizados com a sua própria <ph name="BEGIN_LINK" />frase de acesso de sincronização<ph name="END_LINK" /></translation> <translation id="6384275966486438344">Alterar as definições de pesquisa para: <ph name="SEARCH_HOST" /></translation> @@ -3581,7 +3571,6 @@ <translation id="6606070663386660533">Separador 8</translation> <translation id="6607272825297743757">Informações do ficheiro</translation> <translation id="6607831829715835317">Mais ferrament&as</translation> -<translation id="6610183966322615106">Erro ao adicionar impressora</translation> <translation id="6612358246767739896">Conteúdo protegido</translation> <translation id="6613452264606394692">Volte aqui rapidamente ao adicionar esta página aos marcadores</translation> <translation id="6615455863669487791">Mostrar</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb index 02f133e..cf027dd 100644 --- a/chrome/app/resources/generated_resources_ro.xtb +++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">Activat – setări personalizate</translation> <translation id="1493892686965953381">Se așteaptă <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033">Încă <ph name="NUM_PRINTERS" /> dispozitive disponibile.</translation> -<translation id="1497284176235884849">Fișierul PPD trimis nu este valid.</translation> <translation id="1497522201463361063">Nu s-a putut redenumi „<ph name="FILE_NAME" />”. <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Dispozitiv necunoscut [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Acest cont de proprietar trebuie să fie primul conectat într-o sesiune de conectare multiplă.</translation> @@ -1774,7 +1773,6 @@ <translation id="3697100740575341996">Administratorul IT a dezactivat accesoriile Chrome pentru dispozitivul dvs. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">Adresă de e-mail</translation> <translation id="3702500414347826004">Paginile de pornire au fost modificate pentru a include <ph name="URL" />.</translation> -<translation id="3703669627274482482">Întreabă-mă când un site dorește să afișeze textul și imaginile pe care le copiezi în clipboard</translation> <translation id="370415077757856453">JavaScript blocat</translation> <translation id="3704331259350077894">Încetarea operării</translation> <translation id="3705722231355495246">-</translation> @@ -2122,7 +2120,6 @@ <translation id="4270393598798225102">Versiunea <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Nicio potrivire</translation> <translation id="4275830172053184480">Reporniți gadgetul</translation> -<translation id="4276216215490044084">Nu se poate încărca fișierul PPD mare. Dimensiunea maximă este 250 KB.</translation> <translation id="4278390842282768270">Se permite</translation> <translation id="4281844954008187215">Condiții de furnizare a serviciilor</translation> <translation id="4282196459431406533">Smart Lock este activat</translation> @@ -2202,7 +2199,6 @@ <translation id="4430369329743628066">Marcajul a fost adăugat</translation> <translation id="443464694732789311">Continuați</translation> <translation id="4439318412377770121">Dorești să înregistrezi dispozitivul <ph name="DEVICE_NAME" /> în Dispozitive Google Cloud?</translation> -<translation id="4439612350502082674">Nu se poate adăuga imprimanta. Repornește și încearcă din nou.</translation> <translation id="4441124369922430666">Doriți ca această aplicație să fie lansată automat la pornirea dispozitivului?</translation> <translation id="444134486829715816">Extinde...</translation> <translation id="4441548209689510310">Afișează opțiunile pentru verificarea ortografiei</translation> @@ -2433,7 +2429,6 @@ <translation id="4839303808932127586">Sal&vează videoclipul ca...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> elemente selectate</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{Încă una}few{ Încă #}other{Încă #}}</translation> -<translation id="4840626203080576849">Întreabă-mă când un site dorește să afișeze textul și imaginile pe care le copiezi în clipboard (recomandat)</translation> <translation id="4842976633412754305">Pagina încearcă să încarce scripturi din surse neautentificate.</translation> <translation id="4844333629810439236">Alte tastaturi</translation> <translation id="4846680374085650406">Urmați recomandarea administratorului pentru această setare.</translation> @@ -2700,7 +2695,6 @@ <translation id="5254368820972107711">Afișează fișierele care trebuie eliminate</translation> <translation id="52550593576409946">Aplicația de tip chioșc nu a putut fi lansată.</translation> <translation id="5255315797444241226">Expresia de acces pe care ai introdus-o nu este corectă.</translation> -<translation id="5259571578888203461">Nu permite site-urilor să vadă textul și imaginile pe care le copiezi în clipboard</translation> <translation id="5260508466980570042">Ne pare rău, adresa de e-mail sau parola nu a putut fi verificată. Încearcă din nou.</translation> <translation id="5261683757250193089">Deschide în Magazinul web</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Accesează fișierele de oriunde, chiar și offline.<ph name="MARKUP_2" /> @@ -3174,7 +3168,6 @@ <translation id="5972708806901999743">Mută în partea de sus</translation> <translation id="5972826969634861500">Pornește <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Micșorează</translation> -<translation id="5975730206036440725">Nu se poate găsi fișierul PPD. Asigură-te că Chromebookul este online și încearcă din nou.</translation> <translation id="5975792506968920132">Procent de încărcare a bateriei</translation> <translation id="5976160379964388480">Altele</translation> <translation id="5978264784700053212">Centru de mesaje</translation> @@ -3216,7 +3209,6 @@ <translation id="6042308850641462728">Mai multe</translation> <translation id="6042850536017090003">Atinge Notificările pentru aplicații.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> trimite conținutul unei file Chrome către <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Terminat!</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> trimite conținutul unei file Chrome și conținutul audio către <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Pentru a ieși din ecranul complet, apasă lung |<ph name="ACCELERATOR" />|</translation> <translation id="6049065490165456785">Fotografii de pe camera foto internă</translation> @@ -3383,7 +3375,6 @@ <translation id="6311220991371174222">Nu se poate porni Chrome, deoarece a apărut o eroare la deschiderea profilului. Repornește Chrome.</translation> <translation id="6312403991423642364">Eroare de rețea necunoscută</translation> <translation id="6313641880021325787">IEȘI DIN RV</translation> -<translation id="6314335155547195432">Generează o parolă</translation> <translation id="6314819609899340042">Ai activat funcțiile de remediere a erorilor pe acest dispozitiv <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation> <translation id="6315343732431721770">Paginile de pornire au fost modificate pentru a include <ph name="URL" />. Pentru a dezactiva extensiile care îți modifică pagina de pornire, dă clic pe Restabilește.</translation> <translation id="6315493146179903667">Toate în față</translation> @@ -3421,7 +3412,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Configurează Smart Lock pentru Android</translation> <translation id="6374469231428023295">Încearcă din nou</translation> -<translation id="6377158645544167202">Nu se poate conecta imprimanta. Asigură-te că este pornită și conectată la Chromebook prin Wi-Fi sau USB.</translation> <translation id="6380143666419481200">Acceptați și continuați</translation> <translation id="6383051423892982287">Criptează datele sincronizate folosind propria <ph name="BEGIN_LINK" />expresie de acces<ph name="END_LINK" /></translation> <translation id="6384275966486438344">Schimbați setările de căutare la: <ph name="SEARCH_HOST" /></translation> @@ -3578,7 +3568,6 @@ <translation id="6606070663386660533">Fila 8</translation> <translation id="6607272825297743757">Informațiile fișierului</translation> <translation id="6607831829715835317">Mai multe instru&mente</translation> -<translation id="6610183966322615106">Eroare la adăugarea imprimantei</translation> <translation id="6612358246767739896">Conținut protejat</translation> <translation id="6613452264606394692">Marchează această pagină pentru a o putea accesa din nou rapid</translation> <translation id="6615455863669487791">Afișați</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb index dc0cd84..26de97d2 100644 --- a/chrome/app/resources/generated_resources_ru.xtb +++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">Вкл. – пользовательские настройки</translation> <translation id="1493892686965953381">Ожидание загрузки <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033">Количество других доступных устройств: <ph name="NUM_PRINTERS" />.</translation> -<translation id="1497284176235884849">Недопустимый файл PPD.</translation> <translation id="1497522201463361063">Не удалось переименовать "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Неизвестное устройство [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">При одновременной работе в нескольких аккаунтах необходимо сначала зайти в аккаунт владельца.</translation> @@ -1775,7 +1774,6 @@ <translation id="3697100740575341996">Chrome Goodies на данном устройстве отключены администратором. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">Адрес электронной почты</translation> <translation id="3702500414347826004">Стартовые страницы были изменены и теперь содержат URL <ph name="URL" />.</translation> -<translation id="3703669627274482482">Спрашивать моего разрешения на доступ сайтов к тексту и изображениям, скопированным в буфер обмена</translation> <translation id="370415077757856453">Контент JavaScript заблокирован</translation> <translation id="3704331259350077894">Прекращение операции</translation> <translation id="3705722231355495246">-</translation> @@ -2123,7 +2121,6 @@ <translation id="4270393598798225102">Версия <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Ничего не найдено</translation> <translation id="4275830172053184480">Перезапуск устройства</translation> -<translation id="4276216215490044084">Размер файла PPD не должен превышать 250 КБ.</translation> <translation id="4278390842282768270">Разрешены</translation> <translation id="4281844954008187215">Условия использования</translation> <translation id="4282196459431406533">Функция Smart Lock включена</translation> @@ -2203,7 +2200,6 @@ <translation id="4430369329743628066">Закладка добавлена</translation> <translation id="443464694732789311">Продолжить</translation> <translation id="4439318412377770121">Зарегистрировать <ph name="DEVICE_NAME" /> как устройство с поддержкой облачных технологий Google?</translation> -<translation id="4439612350502082674">Не удается добавить принтер. Выполните перезапуск и повторите попытку.</translation> <translation id="4441124369922430666">Автоматически запускать это приложение при включении устройства?</translation> <translation id="444134486829715816">Развернуть...</translation> <translation id="4441548209689510310">Показать настройки проверки правописания</translation> @@ -2434,7 +2430,6 @@ <translation id="4839303808932127586">Со&хранить видео как...</translation> <translation id="4839847978919684242">Выбрано элементов: <ph name="SELCTED_FILES_COUNT" />.</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{ещё один}one{ещё #}few{ещё #}many{ещё #}other{ещё #}}</translation> -<translation id="4840626203080576849">Спрашивать моего разрешения на доступ сайтов к тексту и изображениям, скопированным в буфер обмена (рекомендуется)</translation> <translation id="4842976633412754305">Страница пытается загрузить скрипты из непроверенных источников.</translation> <translation id="4844333629810439236">Другие раскладки</translation> <translation id="4846680374085650406">Параметр настроен в соответствии с рекомендациями администратора.</translation> @@ -2701,7 +2696,6 @@ <translation id="5254368820972107711">Показать файлы, которые будут удалены</translation> <translation id="52550593576409946">Не удалось запустить киоск-приложение</translation> <translation id="5255315797444241226">Неверная кодовая фраза.</translation> -<translation id="5259571578888203461">Не предоставлять сайтам доступ к тексту и изображениям, скопированным в буфер обмена</translation> <translation id="5260508466980570042">Вы указали неверный адрес электронной почты или пароль. Повторите попытку.</translation> <translation id="5261683757250193089">Открыть в Интернет-магазине</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Работайте со своими файлами откуда угодно даже без подключения к Интернету.<ph name="MARKUP_2" /> @@ -3175,7 +3169,6 @@ <translation id="5972708806901999743">К началу</translation> <translation id="5972826969634861500">Запустить <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Уменьшить</translation> -<translation id="5975730206036440725">Не удается найти файл PPD. Проверьте подключение к Интернету на устройстве Chromebook и повторите попытку.</translation> <translation id="5975792506968920132">Процент зарядки батареи</translation> <translation id="5976160379964388480">Другое</translation> <translation id="5978264784700053212">Центр сообщений</translation> @@ -3217,7 +3210,6 @@ <translation id="6042308850641462728">Подробнее...</translation> <translation id="6042850536017090003">Выберите "Уведомления приложения".</translation> <translation id="6043317578411397101">Приложение "<ph name="APP_NAME" />" предоставило сайту <ph name="TAB_NAME" /> доступ к вкладке Chrome.</translation> -<translation id="6043357981274314628">Готово</translation> <translation id="6044805581023976844">Приложение "<ph name="APP_NAME" />" предоставило сайту <ph name="TAB_NAME" /> доступ к вкладке Chrome и к аудио.</translation> <translation id="6049004884579590341">Чтобы выйти из полноэкранного режима, нажмите и удерживайте клавишу |<ph name="ACCELERATOR" />|</translation> <translation id="6049065490165456785">Фотография с устройства</translation> @@ -3384,7 +3376,6 @@ <translation id="6311220991371174222">Не удалось открыть профиль. Перезапустите Chrome.</translation> <translation id="6312403991423642364">Неизвестная ошибка сети</translation> <translation id="6313641880021325787">ВЫЙТИ ИЗ VR</translation> -<translation id="6314335155547195432">Создать пароль</translation> <translation id="6314819609899340042">Функции отладки на устройстве <ph name="IDS_SHORT_PRODUCT_NAME" /> включены.</translation> <translation id="6315343732431721770">Стартовые страницы были изменены и теперь содержат URL <ph name="URL" />. Чтобы отключить расширения, изменившие эту настройку, нажмите "Восстановить".</translation> <translation id="6315493146179903667">Переместить все на передний план</translation> @@ -3422,7 +3413,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Настроить Smart Lock для Android</translation> <translation id="6374469231428023295">Повторить</translation> -<translation id="6377158645544167202">Не удается установить соединение с принтером. Он должен быть включен и подсоединен к устройству Chromebook через Wi-Fi или USB.</translation> <translation id="6380143666419481200">Принять условия и продолжить</translation> <translation id="6383051423892982287">Шифровать синхронизированные данные с помощью <ph name="BEGIN_LINK" />кодовой фразы<ph name="END_LINK" /></translation> <translation id="6384275966486438344">Использование поисковой системы <ph name="SEARCH_HOST" /></translation> @@ -3579,7 +3569,6 @@ <translation id="6606070663386660533">Вкладка 8</translation> <translation id="6607272825297743757">Информация о файле</translation> <translation id="6607831829715835317">Дополнительные инстру&менты</translation> -<translation id="6610183966322615106">Не удалось добавить принтер</translation> <translation id="6612358246767739896">Защищенный контент</translation> <translation id="6613452264606394692">Чтобы вам было проще вернуться на эту страницу, добавьте ее в закладки</translation> <translation id="6615455863669487791">Показать</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb index b0186544..f2659f3a 100644 --- a/chrome/app/resources/generated_resources_sk.xtb +++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">Zapnutá – vlastné nastavenia</translation> <translation id="1493892686965953381">Čakanie na <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033">Ďalšie dostupné zariadenia: <ph name="NUM_PRINTERS" /></translation> -<translation id="1497284176235884849">Poskytnuté PPD je neplatné.</translation> <translation id="1497522201463361063">Súbor <ph name="FILE_NAME" /> sa nepodarilo premenovať. <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Neznáme zariadenie [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Tento účet vlastníka musí byť prvým prihláseným účtom v relácii viacerých prihlásení.</translation> @@ -1774,7 +1773,6 @@ <translation id="3697100740575341996">Váš správca IT zakázal na vašom zariadení propagačné ponuky Chrome Goodies. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">E-mailová adresa</translation> <translation id="3702500414347826004">Vaše stránky pri spustení boli zmenené tak, aby zahŕňali webovú adresu <ph name="URL" />.</translation> -<translation id="3703669627274482482">Opýtať sa, keď chce web zobraziť text a obrázky, ktoré skopírujete do schránky</translation> <translation id="370415077757856453">Bol zablokovaný JavaScript</translation> <translation id="3704331259350077894">Zastavenie operácie</translation> <translation id="3705722231355495246">-</translation> @@ -2122,7 +2120,6 @@ <translation id="4270393598798225102">Verzia <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Žiadne zhody</translation> <translation id="4275830172053184480">Reštart zariadenia</translation> -<translation id="4276216215490044084">Veľké PPD sa nedajú načítať. Maximálna veľkosť je 250 kB.</translation> <translation id="4278390842282768270">Povolené</translation> <translation id="4281844954008187215">Zmluvné podmienky</translation> <translation id="4282196459431406533">Smart Lock je zapnutý</translation> @@ -2202,7 +2199,6 @@ <translation id="4430369329743628066">Záložka bola pridaná</translation> <translation id="443464694732789311">Pokračovať</translation> <translation id="4439318412377770121">Chcete zariadenie <ph name="DEVICE_NAME" /> zaregistrovať v službe Google Cloud Devices?</translation> -<translation id="4439612350502082674">Tlačiareň sa nedá pridať. Reštartujte a skúste to znova.</translation> <translation id="4441124369922430666">Chcete automaticky spustiť túto aplikáciu po zapnutí zariadenia?</translation> <translation id="444134486829715816">Rozbaliť...</translation> <translation id="4441548209689510310">Zobraziť možnosti kontroly pravopisu</translation> @@ -2433,7 +2429,6 @@ <translation id="4839303808932127586">Uložiť &video ako...</translation> <translation id="4839847978919684242">Počet vybratých položiek: <ph name="SELCTED_FILES_COUNT" /></translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{1 ďalšia položka}few{# ďalšie položky}many{# ďalšej položky}other{# ďalších položiek}}</translation> -<translation id="4840626203080576849">Opýtať sa, keď chce web zobraziť text a obrázky, ktoré skopírujete do schránky (odporúča sa)</translation> <translation id="4842976633412754305">Táto stránka sa snaží načítať skripty z neoverených zdrojov.</translation> <translation id="4844333629810439236">Ďalšie klávesnice</translation> <translation id="4846680374085650406">V prípade tohto nastavenia dodržiavate odporúčania správcu.</translation> @@ -2700,7 +2695,6 @@ <translation id="5254368820972107711">Zobraziť súbory na odstránenie</translation> <translation id="52550593576409946">Aplikáciu Kiosk sa nepodarilo spustiť</translation> <translation id="5255315797444241226">Zadaná prístupová fráza je nesprávna.</translation> -<translation id="5259571578888203461">Nepovoliť webom vidieť text ani obrázky, ktoré skopírujete do schránky</translation> <translation id="5260508466980570042">Vašu e-mailovú adresu alebo vaše heslo sa nepodarilo overiť. Skúste to znova.</translation> <translation id="5261683757250193089">Otvoriť v Internetovom obchode</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Pristupujte k súborom odkiaľkoľvek, dokonca aj v režime offline.<ph name="MARKUP_2" /> @@ -3174,7 +3168,6 @@ <translation id="5972708806901999743">Presunúť na začiatok</translation> <translation id="5972826969634861500">Spustiť <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Oddialiť</translation> -<translation id="5975730206036440725">PPD sa nedá nájsť. Skontrolujte, či je Chromebook online, a skúste to znova.</translation> <translation id="5975792506968920132">Percento nabitia batérie</translation> <translation id="5976160379964388480">Ostatné</translation> <translation id="5978264784700053212">Centrum správ</translation> @@ -3216,7 +3209,6 @@ <translation id="6042308850641462728">Viac</translation> <translation id="6042850536017090003">Klepnite na položku Upozornenia aplikácií.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> zdieľa kartu Chromu s kartou <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Hotovo!</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> zdieľa kartu Chromu a zvuk s kartou <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Pridržaním klávesa |<ph name="ACCELERATOR" />| ukončite režim celej obrazovky</translation> <translation id="6049065490165456785">Fotografia z vnútorného fotoaparátu</translation> @@ -3383,7 +3375,6 @@ <translation id="6311220991371174222">Chrome nie je možné spustiť, pretože pri otváraní profilu nastala chyba. Skúste Chrome reštartovať.</translation> <translation id="6312403991423642364">Neznáma chyba siete</translation> <translation id="6313641880021325787">UKONČIŤ VR</translation> -<translation id="6314335155547195432">Generovanie hesla</translation> <translation id="6314819609899340042">Na tomto zariadení <ph name="IDS_SHORT_PRODUCT_NAME" /> ste úspešne aktivovali funkcie ladenia.</translation> <translation id="6315343732431721770">Vaše stránky pri spustení boli zmenené tak, aby zahŕňali webovú adresu <ph name="URL" />. Ak chcete zakázať rozšírenia, ktoré menia stránku pri spustení, kliknite na možnosť Obnoviť.</translation> <translation id="6315493146179903667">Zobraziť všetko navrchu</translation> @@ -3421,7 +3412,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Nastavenie funkcie Smart Lock pre Android</translation> <translation id="6374469231428023295">Skúsiť znova</translation> -<translation id="6377158645544167202">K tlačiarni sa nedá pripojiť. Skontrolujte, či je tlačiareň zapnutá a pripojená k Chromebooku prostredníctvom Wi-Fi alebo USB.</translation> <translation id="6380143666419481200">Súhlasím, pokračovať</translation> <translation id="6383051423892982287">Šifrovať synchronizované údaje pomocou vlastnej <ph name="BEGIN_LINK" />prístupovej frázy synchronizácie<ph name="END_LINK" /></translation> <translation id="6384275966486438344">Zmeniť nastavenia vyhľadávania na: <ph name="SEARCH_HOST" /></translation> @@ -3578,7 +3568,6 @@ <translation id="6606070663386660533">Karta 8</translation> <translation id="6607272825297743757">Informácie o súbore</translation> <translation id="6607831829715835317">Ďalšie nástro&je</translation> -<translation id="6610183966322615106">Pri pridávaní tlačiarne sa vyskytla chyba</translation> <translation id="6612358246767739896">Chránený obsah</translation> <translation id="6613452264606394692">Vráťte sa sem rýchlejšie tak, že stránku uložíte ako záložku</translation> <translation id="6615455863669487791">Zobraziť</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb index 5ef3da6..2d95e79c 100644 --- a/chrome/app/resources/generated_resources_sl.xtb +++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -328,7 +328,6 @@ <translation id="1487335504823219454">Vklopljeno – nastavitve po meri</translation> <translation id="1493892686965953381">Čakanje na <ph name="LOAD_STATE_PARAMETER" /> ...</translation> <translation id="1495486559005647033">Število drugih razpoložljivih naprav: <ph name="NUM_PRINTERS" />.</translation> -<translation id="1497284176235884849">Navedena datoteka PPD ni veljavna.</translation> <translation id="1497522201463361063">Datoteke »<ph name="FILE_NAME" />« ni mogoče preimenovati. <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Neznana naprava [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">V seji prijave z več računi mora biti ta račun lastnika prvi prijavljeni račun.</translation> @@ -1775,7 +1774,6 @@ <translation id="3697100740575341996">Skrbnik za IT je za vašo napravo onemogočil dodatke za Chrome. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">E-poštni naslov</translation> <translation id="3702500414347826004">Začetne strani so bile spremenjene in vsebujejo <ph name="URL" />.</translation> -<translation id="3703669627274482482">Vprašaj, ko si želi spletno mesto ogledati besedilo in slike, ki jih kopirate v odložišče</translation> <translation id="370415077757856453">JavaScript je blokiran</translation> <translation id="3704331259350077894">Prenehanje operacije</translation> <translation id="3705722231355495246">–</translation> @@ -2123,7 +2121,6 @@ <translation id="4270393598798225102">Različica <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Ni ujemanj</translation> <translation id="4275830172053184480">Znova zaženite napravo.</translation> -<translation id="4276216215490044084">Velikih datotek PPD ni mogoče naložiti. Največja velikost je 250 KB.</translation> <translation id="4278390842282768270">Dovoljeno</translation> <translation id="4281844954008187215">Pogoji storitve</translation> <translation id="4282196459431406533">Smart Lock je vklopljen</translation> @@ -2203,7 +2200,6 @@ <translation id="4430369329743628066">Zaznamek dodan</translation> <translation id="443464694732789311">Naprej</translation> <translation id="4439318412377770121">Ali želite registrirati napravo <ph name="DEVICE_NAME" /> kot Googlovo napravo v oblaku?</translation> -<translation id="4439612350502082674">Tiskalnika ni mogoče dodati. Znova zaženite Chromebook in poskusite znova.</translation> <translation id="4441124369922430666">Ali želite samodejno zagnati to aplikacijo, ko se naprava vklopi?</translation> <translation id="444134486829715816">Razširi ...</translation> <translation id="4441548209689510310">Pokaži možnosti preverjanja črkovanja</translation> @@ -2434,7 +2430,6 @@ <translation id="4839303808932127586">Shr&ani videoposnetek kot ...</translation> <translation id="4839847978919684242">Št. izbranih elementov: <ph name="SELCTED_FILES_COUNT" /></translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{Še 1}one{Še #}two{Še #}few{Še #}other{Še #}}</translation> -<translation id="4840626203080576849">Vprašaj, ko želi spletno mesto videti besedilo in slike, ki jih kopirate v odložišče (priporočljivo)</translation> <translation id="4842976633412754305">Ta stran poskuša naložiti skripte iz virov, ki nimajo preverjene pristnosti.</translation> <translation id="4844333629810439236">Druge tipkovnice</translation> <translation id="4846680374085650406">Upoštevate priporočila skrbnika za to nastavitev.</translation> @@ -2701,7 +2696,6 @@ <translation id="5254368820972107711">Prikaz datotek, ki jih želite odstraniti</translation> <translation id="52550593576409946">Aplikacije Kiosk ni bilo mogoče zagnati.</translation> <translation id="5255315797444241226">Geslo, ki ste ga vnesli, je napačno.</translation> -<translation id="5259571578888203461">Spletnim mestom ne dovoli ogleda besedila in slik, ki jih kopirate v odložišče</translation> <translation id="5260508466980570042">Žal vašega e-poštnega naslova ali gesla ni bilo mogoče preveriti. Poskusite znova.</translation> <translation id="5261683757250193089">Odpiranje v Spletni trgovini</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Dostopajte do datotek povsod, tudi brez povezave.<ph name="MARKUP_2" /> @@ -3176,7 +3170,6 @@ <translation id="5972708806901999743">Premakni na vrh</translation> <translation id="5972826969634861500">Zaženi <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Pomanjšaj</translation> -<translation id="5975730206036440725">Datoteke PPD ni mogoče najti. Preverite, ali je Chromebook povezan v splet, in poskusite znova.</translation> <translation id="5975792506968920132">Napolnjenost akumulatorja</translation> <translation id="5976160379964388480">Drugo</translation> <translation id="5978264784700053212">Center za sporočanje</translation> @@ -3218,7 +3211,6 @@ <translation id="6042308850641462728">Več</translation> <translation id="6042850536017090003">Dotaknite se obvestil aplikacij.</translation> <translation id="6043317578411397101">Aplikacija <ph name="APP_NAME" /> je v skupno rabo z zavihkom <ph name="TAB_NAME" /> dala Chromov zavihek.</translation> -<translation id="6043357981274314628">Končano.</translation> <translation id="6044805581023976844">Aplikacija <ph name="APP_NAME" /> je v skupno rabo z zavihkom <ph name="TAB_NAME" /> dala Chromov zavihek in zvok.</translation> <translation id="6049004884579590341">Pridržite |<ph name="ACCELERATOR" />| za zapiranje celozaslonskega načina</translation> <translation id="6049065490165456785">Fotografija iz notranjega fotoaparata</translation> @@ -3385,7 +3377,6 @@ <translation id="6311220991371174222">Chroma ni mogoče zagnati, ker je prišlo do težave pri odpiranju profila. Poskusite znova zagnati Chrome.</translation> <translation id="6312403991423642364">Neznana napaka v omrežju</translation> <translation id="6313641880021325787">ZAPRI NAVIDEZNO RESNIČNOST</translation> -<translation id="6314335155547195432">Generate Password</translation> <translation id="6314819609899340042">V napravi <ph name="IDS_SHORT_PRODUCT_NAME" /> ste uspešno omogočili funkcije za odpravljanje napak.</translation> <translation id="6315343732431721770">Začetne strani so bile spremenjene in vsebujejo <ph name="URL" />. Če želite onemogočiti razširitve, ki spreminjajo začetno stran, kliknite »Obnovi«.</translation> <translation id="6315493146179903667">Postavi vse v ospredje</translation> @@ -3423,7 +3414,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Nastavitev funkcije Smart Lock za Android</translation> <translation id="6374469231428023295">Vnovični poskus</translation> -<translation id="6377158645544167202">Tiskalnika ni mogoče povezati. Preverite, ali je tiskalnik vklopljen in povezan s Chromebookom prek omrežja Wi-Fi ali z USB-jem.</translation> <translation id="6380143666419481200">Sprejmite in nadaljujte</translation> <translation id="6383051423892982287">Šifriranje sinhroniziranih podatkov z vašim <ph name="BEGIN_LINK" />geslom za šifriranje<ph name="END_LINK" /></translation> <translation id="6384275966486438344">Sprememba nastavitev iskanja na: <ph name="SEARCH_HOST" /></translation> @@ -3579,7 +3569,6 @@ <translation id="6606070663386660533">Zavihek 8</translation> <translation id="6607272825297743757">Podatki o datoteki</translation> <translation id="6607831829715835317">Več orodij</translation> -<translation id="6610183966322615106">Napaka pri dodajanju tiskalnika</translation> <translation id="6612358246767739896">Zaščitena vsebina</translation> <translation id="6613452264606394692">Hitro se vrnite na to stran tako, da jo dodate med zaznamke</translation> <translation id="6615455863669487791">Pokaži mi</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb index 8068f37..922b010 100644 --- a/chrome/app/resources/generated_resources_sr.xtb +++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">Укључено – прилагођена подешавања</translation> <translation id="1493892686965953381">Чека се <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033">Других доступних уређаја: <ph name="NUM_PRINTERS" />.</translation> -<translation id="1497284176235884849">Наведени PPD је неважећи.</translation> <translation id="1497522201463361063">Није могуће преименовати датотеку „<ph name="FILE_NAME" />“. <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Непознат уређај [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Овај власнички налог мора да буде први пријављени налог у сесији са вишеструким пријављивањем.</translation> @@ -1770,7 +1769,6 @@ <translation id="3697100740575341996">IT администратор је онемогућио Chrome забавне стварчице за уређај. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">Имејл адреса</translation> <translation id="3702500414347826004">Полазне странице су промењене, па сада обухватају <ph name="URL" />.</translation> -<translation id="3703669627274482482">Питај када сајт жели да види текст и слике које копирам у привремену меморију</translation> <translation id="370415077757856453">JavaScript је блокиран</translation> <translation id="3704331259350077894">Престанак рада</translation> <translation id="3705722231355495246">-</translation> @@ -2118,7 +2116,6 @@ <translation id="4270393598798225102">Верзија <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Нема подударања</translation> <translation id="4275830172053184480">Поновно покретање уређаја</translation> -<translation id="4276216215490044084">Не можемо да учитамо велики PPD. Максимална величина је 250 kB.</translation> <translation id="4278390842282768270">Дозвољено</translation> <translation id="4281844954008187215">Услови коришћења услуге</translation> <translation id="4282196459431406533">Smart Lock је укључен</translation> @@ -2198,7 +2195,6 @@ <translation id="4430369329743628066">Обележивач је додат</translation> <translation id="443464694732789311">Настави</translation> <translation id="4439318412377770121">Желите ли да региструјете <ph name="DEVICE_NAME" /> као Google Cloud уређај?</translation> -<translation id="4439612350502082674">Не можемо да додамо штампач. Рестартујте и пробајте поново.</translation> <translation id="4441124369922430666">Желите ли да се ова апликација покреће аутоматски када укључите уређај?</translation> <translation id="444134486829715816">Прошири...</translation> <translation id="4441548209689510310">Приказуј опције за проверу правописа</translation> @@ -2429,7 +2425,6 @@ <translation id="4839303808932127586">Са&чувај видео снимак као...</translation> <translation id="4839847978919684242">Изабраних ставки: <ph name="SELCTED_FILES_COUNT" /></translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{Још 1}one{Још #}few{Још #}other{Још #}}</translation> -<translation id="4840626203080576849">Питај када сајт жели да види текст и слике које копирам у привремену меморију (препоручено)</translation> <translation id="4842976633412754305">Ова страница покушава да учитава скрипте из извора чија аутентичност није потврђена.</translation> <translation id="4844333629810439236">Остале тастатуре</translation> <translation id="4846680374085650406">Поштујете препоруку администратора за ово подешавање.</translation> @@ -2696,7 +2691,6 @@ <translation id="5254368820972107711">Прикажи датотеке за уклањање</translation> <translation id="52550593576409946">Није могуће покренути киоск апликацију.</translation> <translation id="5255315797444241226">Приступна фраза коју сте унели је нетачна.</translation> -<translation id="5259571578888203461">Не дозвољавај сајтовима да виде текст и слике које копирам у привремену меморију</translation> <translation id="5260508466980570042">Жао нам је, нисмо успели да верификујемо имејл или лозинку. Пробајте поново.</translation> <translation id="5261683757250193089">Отвори у Веб-продавници</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Приступајте датотекама било где, чак и офлајн.<ph name="MARKUP_2" /> @@ -3172,7 +3166,6 @@ <translation id="5972708806901999743">Премести на врх</translation> <translation id="5972826969634861500">Покрени <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Умањивање</translation> -<translation id="5975730206036440725">Не можемо да пронађемо PPD. Проверите да ли је Chromebook онлајн и пробајте поново.</translation> <translation id="5975792506968920132">Проценат напуњености батерије</translation> <translation id="5976160379964388480">Други</translation> <translation id="5978264784700053212">Центар за поруке</translation> @@ -3214,7 +3207,6 @@ <translation id="6042308850641462728">Више</translation> <translation id="6042850536017090003">Додирните Обавештења о апликацијама.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> дели Chrome картицу са <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Готово!</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> дели Chrome картицу и звук са <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Притисните и задржите |<ph name="ACCELERATOR" />| да бисте изашли из режима целог екрана</translation> <translation id="6049065490165456785">Слика са интерне камере</translation> @@ -3381,7 +3373,6 @@ <translation id="6311220991371174222">Не можемо да покренемо Chrome јер је дошло до проблема при отварању профила. Пробајте поново да покренете Chrome.</translation> <translation id="6312403991423642364">Непозната грешка на мрежи</translation> <translation id="6313641880021325787">ИЗАЂИ ИЗ ВР-А</translation> -<translation id="6314335155547195432">Генериши лозинку</translation> <translation id="6314819609899340042">Омогућили сте функције за отклањање грешака на овом <ph name="IDS_SHORT_PRODUCT_NAME" /> уређају.</translation> <translation id="6315343732431721770">Полазне странице су промењене, па сада обухватају <ph name="URL" />. Да бисте онемогућили додатке који мењају полазну страницу, кликните на Врати.</translation> <translation id="6315493146179903667">Премести све напред</translation> @@ -3419,7 +3410,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Подесите Smart Lock за Android</translation> <translation id="6374469231428023295">Пробај поново</translation> -<translation id="6377158645544167202">Не можемо да повежемо штампач. Проверите да ли је штампач укључен и повезан са Chromebook-ом помоћу Wi-Fi-ја или USB-а.</translation> <translation id="6380143666419481200">Прихвати и настави</translation> <translation id="6383051423892982287">Шифрујте синхронизоване податке помоћу сопствене <ph name="BEGIN_LINK" />приступне фразе за синхронизацију<ph name="END_LINK" /></translation> <translation id="6384275966486438344">Промените подешавања претраге на: <ph name="SEARCH_HOST" /></translation> @@ -3575,7 +3565,6 @@ <translation id="6606070663386660533">8. картица</translation> <translation id="6607272825297743757">Информације о датотеци</translation> <translation id="6607831829715835317">Још а&латки</translation> -<translation id="6610183966322615106">Грешка при додавању штампача</translation> <translation id="6612358246767739896">Заштићени садржај</translation> <translation id="6613452264606394692">Можете брзо да се вратите овде ако обележите ову страницу</translation> <translation id="6615455863669487791">Покажи ми</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb index 5f12800..3b591bc 100644 --- a/chrome/app/resources/generated_resources_sv.xtb +++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">Aktiverat – anpassade inställningar</translation> <translation id="1493892686965953381">Väntar på <ph name="LOAD_STATE_PARAMETER" /> ...</translation> <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> andra tillgängliga enheter.</translation> -<translation id="1497284176235884849">Angiven PPD-fil är ogiltig.</translation> <translation id="1497522201463361063">Det gick inte att byta namn på <ph name="FILE_NAME" />. <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Okänd enhet [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Det här ägarkontot måste vara det första inloggade kontot i en session med flera inloggningar.</translation> @@ -1773,7 +1772,6 @@ <translation id="3697100740575341996">IT-administratören har inaktiverat godbitar från Chrome för din enhet. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">E-postadress</translation> <translation id="3702500414347826004"><ph name="URL" /> har lagts till i startflikarna.</translation> -<translation id="3703669627274482482">Fråga när en webbplats visa text och bilder som kopieras till Urklipp</translation> <translation id="370415077757856453">JavaScript har blockerats</translation> <translation id="3704331259350077894">Upphörande av verksamhet</translation> <translation id="3705722231355495246">-</translation> @@ -2121,7 +2119,6 @@ <translation id="4270393598798225102">Version <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Inga träffar</translation> <translation id="4275830172053184480">Starta om enheten</translation> -<translation id="4276216215490044084">Det gick inte att läsa in PPD-filen eftersom den är för stor. Storleksgränsen är 250 kB.</translation> <translation id="4278390842282768270">Tillåtet</translation> <translation id="4281844954008187215">Användarvillkor</translation> <translation id="4282196459431406533">Smart Lock är aktiverat</translation> @@ -2201,7 +2198,6 @@ <translation id="4430369329743628066">Ett bokmärke har lagts till</translation> <translation id="443464694732789311">Fortsätt</translation> <translation id="4439318412377770121">Vill du registrera <ph name="DEVICE_NAME" /> i Google Cloud Devices?</translation> -<translation id="4439612350502082674">Det gick inte att lägga till skrivaren. Starta om och försök igen.</translation> <translation id="4441124369922430666">Vill du starta denna app automatiskt när maskinen slås på?</translation> <translation id="444134486829715816">Expandera..</translation> <translation id="4441548209689510310">Visa alternativ för stavningskontrollen</translation> @@ -2432,7 +2428,6 @@ <translation id="4839303808932127586">S&para video som...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> poster har valts</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{1 till}other{# till}}</translation> -<translation id="4840626203080576849">Fråga när en webbplats vill visa text och bilder som kopieras till Urklipp (rekommenderas)</translation> <translation id="4842976633412754305">Sidan försöker att läsa in skript från overifierade källor.</translation> <translation id="4844333629810439236">Övriga tangentbord</translation> <translation id="4846680374085650406">Du följer administratörens rekommendation för den här inställningen.</translation> @@ -2699,7 +2694,6 @@ <translation id="5254368820972107711">Visa vilka filer som tas bort</translation> <translation id="52550593576409946">Det gick inte att starta kioskappen.</translation> <translation id="5255315797444241226">Den angivna lösenfrasen är felaktig.</translation> -<translation id="5259571578888203461">Ge inte webbplatser tillgång till text och bilder som kopierats till urklipp</translation> <translation id="5260508466980570042">Det gick inte att verifiera e-postadressen eller lösenordet. Försök igen.</translation> <translation id="5261683757250193089">Öppna i Web Store</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Få åtkomst till filer var som helst – även offline.<ph name="MARKUP_2" /> @@ -3173,7 +3167,6 @@ <translation id="5972708806901999743">Flytta högst upp</translation> <translation id="5972826969634861500">Starta <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Zooma ut</translation> -<translation id="5975730206036440725">Det gick inte att hitta PPD-filen. Kontrollera att Chromebook är ansluten till internet och försök igen.</translation> <translation id="5975792506968920132">Batteriets laddning i procent</translation> <translation id="5976160379964388480">Övriga</translation> <translation id="5978264784700053212">Meddelandecenter</translation> @@ -3215,7 +3208,6 @@ <translation id="6042308850641462728">Mer</translation> <translation id="6042850536017090003">Tryck på Appaviseringar.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> delar en Chrome-flik med <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Klart!</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> delar ljud och en flik i Chrome med <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Avsluta helskärmsläget genom att trycka på |<ph name="ACCELERATOR" />| och hålla kvar</translation> <translation id="6049065490165456785">Bild från intern kamera</translation> @@ -3382,7 +3374,6 @@ <translation id="6311220991371174222">Det gick inte att starta Chrome eftersom något gick snett när profilen skulle öppnas. Testa att starta om Chrome.</translation> <translation id="6312403991423642364">Okänt nätverksfel</translation> <translation id="6313641880021325787">AVSLUTA VR-LÄGET</translation> -<translation id="6314335155547195432">Generera lösenord</translation> <translation id="6314819609899340042">Du har aktiverat felsökningsfunktioner på den här <ph name="IDS_SHORT_PRODUCT_NAME" />-enheten.</translation> <translation id="6315343732431721770"><ph name="URL" /> har lagts till i startflikarna. Inaktivera tillägg som ändrar startfliken genom att trycka på Återställ.</translation> <translation id="6315493146179903667">Flytta fram alla</translation> @@ -3420,7 +3411,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Konfigurera Smart Lock för Android</translation> <translation id="6374469231428023295">Försök igen</translation> -<translation id="6377158645544167202">Det gick inte att ansluta skrivaren. Kontrollera att skrivaren är påslagen och ansluten till Chromebook via Wi-Fi eller USB.</translation> <translation id="6380143666419481200">Godkänn och fortsätt</translation> <translation id="6383051423892982287">Kryptera synkroniserad data med en egen <ph name="BEGIN_LINK" />lösenfras för synkronisering<ph name="END_LINK" /></translation> <translation id="6384275966486438344">Ändra sökinställningarna till: <ph name="SEARCH_HOST" /></translation> @@ -3577,7 +3567,6 @@ <translation id="6606070663386660533">Flik 8</translation> <translation id="6607272825297743757">Filinformation</translation> <translation id="6607831829715835317">Fler verkt&yg</translation> -<translation id="6610183966322615106">Det gick inte att lägga till skrivare</translation> <translation id="6612358246767739896">Skyddat innehåll</translation> <translation id="6613452264606394692">Hitta snabbt tillbaka hit med ett bokmärke</translation> <translation id="6615455863669487791">Visa mig</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb index e9ea280..7bf0b959 100644 --- a/chrome/app/resources/generated_resources_sw.xtb +++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -328,7 +328,6 @@ <translation id="1487335504823219454">Imewashwa - mipangilio maalum</translation> <translation id="1493892686965953381">Inasubiri <ph name="LOAD_STATE_PARAMETER" /> ...</translation> <translation id="1495486559005647033">Vifaa vingine <ph name="NUM_PRINTERS" /> vinapatikana.</translation> -<translation id="1497284176235884849">PPD iliyotolewa si sahihi.</translation> <translation id="1497522201463361063">Haiwezi kulipa jina jipya "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Kifaa ambacho hakijulikani [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Akaunti hii ya mmiliki lazima iwe ya kwanza kuingiwa katika kipindi cha kuingia katika akaunti mara nyingi.</translation> @@ -1768,7 +1767,6 @@ <translation id="3697100740575341996">Msimamizi wako wa IT amezima Chrome Goodies kwa ajili ya kifaa chako. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">Anwani ya barua pepe</translation> <translation id="3702500414347826004">Kurasa zako zinazoanza zimebadilishwa kuwa <ph name="URL" />.</translation> -<translation id="3703669627274482482">Uliza wakati tovuti ingependa kuona maandishi na picha unayonakili kwenye ubao wa kunakili</translation> <translation id="370415077757856453">JavaScript imezuiwa</translation> <translation id="3704331259350077894">Haifanyi Kazi Tena</translation> <translation id="3705722231355495246">-</translation> @@ -2114,7 +2112,6 @@ <translation id="4270393598798225102">Toleo <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Hakuna matokeo yanayolingana</translation> <translation id="4275830172053184480">Washa upya kifaa chako</translation> -<translation id="4276216215490044084">Imeshindwa kupakia PPD kubwa. Kima cha juu kinachoruhusiwa ni KB 250.</translation> <translation id="4278390842282768270">Vilivyoruhusiwa</translation> <translation id="4281844954008187215">Sheria na Masharti</translation> <translation id="4282196459431406533">Smart Lock imewashwa</translation> @@ -2194,7 +2191,6 @@ <translation id="4430369329743628066">Alamisho imeongezwa</translation> <translation id="443464694732789311">Endelea</translation> <translation id="4439318412377770121">Ungependa kusajili <ph name="DEVICE_NAME" /> kwenye Vifaa vya Wingu la Google?</translation> -<translation id="4439612350502082674">Imeshindwa kuongeza printa. Zima kisha uwashe na ujaribu tena.</translation> <translation id="4441124369922430666">Je, ungependa kuanzisha programu hii kiotomatiki mashine itakapowashwa?</translation> <translation id="444134486829715816">Panua...</translation> <translation id="4441548209689510310">Onyesha chaguo za kikagua maendelezo</translation> @@ -2425,7 +2421,6 @@ <translation id="4839303808932127586">Hifadhi video kama...</translation> <translation id="4839847978919684242">Vifaa <ph name="SELCTED_FILES_COUNT" /> vilivyochaguliwa</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{Nyingine 1}other{Nyingine #}}</translation> -<translation id="4840626203080576849">Uliza wakati tovuti ingependa kuona maandishi na picha unazonakili kwenye ubao wa kunakili (inapendekezwa)</translation> <translation id="4842976633412754305">Ukurasa huu unajaribu kupakia hati kutoka kwenye vyanzo visivyothibitishwa.</translation> <translation id="4844333629810439236">Kibodi zingine</translation> <translation id="4846680374085650406">Unafuata pendekezo la msimamizi kwa mpangilio huu.</translation> @@ -2692,7 +2687,6 @@ <translation id="5254368820972107711">Onyesha faili unazotaka kuondoa</translation> <translation id="52550593576409946">Programu ya skrini nzima haikufunguliwa.</translation> <translation id="5255315797444241226">Kaulisiri uliyoingiza siyo halali.</translation> -<translation id="5259571578888203461">Usiruhusu tovuti zione maandishi na picha unazonakili kwenye ubao wa kunakili</translation> <translation id="5260508466980570042">Samahani, barua pepe au nenosiri lako havikuthibitishwa. Tafadhali jaribu tena.</translation> <translation id="5261683757250193089">Fungua katika Duka la Chrome kwenye Wavuti</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Fikia faili kutoka mahali popote, hata nje ya mtandao.<ph name="MARKUP_2" /> @@ -3166,7 +3160,6 @@ <translation id="5972708806901999743">Sogeza juu</translation> <translation id="5972826969634861500">Anzisha <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Fifiza</translation> -<translation id="5975730206036440725">Imeshindwa kupata PPD. Hakikisha kuwa Chromebook yako iko mtandaoni na ujaribu tena.</translation> <translation id="5975792506968920132">Asilimia ya Kuchaji Betri</translation> <translation id="5976160379964388480">Wengine </translation> <translation id="5978264784700053212">Kituo cha ujumbe</translation> @@ -3208,7 +3201,6 @@ <translation id="6042308850641462728">Zaidi</translation> <translation id="6042850536017090003">Gusa Arifa za programu.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> inashiriki kichupo cha Chrome na <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Imekamilika!</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> inashiriki kichupo cha Chrome na sauti pamoja na <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Bonyeza na ushikilie |<ph name="ACCELERATOR" />| ili uondoke katika hali ya skrini nzima</translation> <translation id="6049065490165456785">Picha kutoka kamera ya ndani</translation> @@ -3375,7 +3367,6 @@ <translation id="6311220991371174222">Haiwezi kuwasha Chrome kwa sababu hitilafu imetokea wakati wa kufungua wasifu wako. Jaribu kuzima kisha uwashe Chrome.</translation> <translation id="6312403991423642364">Hitilafu isiyojulikana ya mtandao</translation> <translation id="6313641880021325787">ONDOKA KWENYE VR</translation> -<translation id="6314335155547195432">Unda Nenosiri</translation> <translation id="6314819609899340042">Umefaulu kuwasha vipengele vya kutataua kwenye kifaa hiki cha <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation> <translation id="6315343732431721770">Kurasa zako zinazoanza zimebadilishwa kuwa <ph name="URL" />. Ili uzime viendelezi vinavyobadilisha ukurasa wako unaoanza, bofya Rejesha.</translation> <translation id="6315493146179903667">Leta zote mbele</translation> @@ -3413,7 +3404,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Weka mipangilio ya Smart Lock ya Android</translation> <translation id="6374469231428023295">Jaribu Tena</translation> -<translation id="6377158645544167202">Imeshindwa kuunganisha printa. Hakikisha kuwa printa imewashwa na imeunganishwa kwenye Chromebook yako kwa kutumia Wi-Fi au USB.</translation> <translation id="6380143666419481200">Kubali na uendelee</translation> <translation id="6383051423892982287">Simba data iliyosawazishwa kwa njia fiche ukitumia <ph name="BEGIN_LINK" />kauli yako ya siri ya usawazishaji<ph name="END_LINK" /></translation> <translation id="6384275966486438344">Badilisha mipangilio yako ya kutafuta iwe: <ph name="SEARCH_HOST" /></translation> @@ -3570,7 +3560,6 @@ <translation id="6606070663386660533">Kichupo cha 8</translation> <translation id="6607272825297743757">Maelezo ya faili</translation> <translation id="6607831829715835317">Zana zaidi</translation> -<translation id="6610183966322615106">Hitilafu imetokea wakati wa kuongeza printa</translation> <translation id="6612358246767739896">Maudhui yanayolindwa</translation> <translation id="6613452264606394692">Rejea hapa kwa haraka kwa kualamisha ukurasa huu</translation> <translation id="6615455863669487791">Nionyeshe</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb index 06fb26d6..fafaca6d 100644 --- a/chrome/app/resources/generated_resources_ta.xtb +++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">இயக்கத்தில் - தனிப்பயன் அமைப்புகள்</translation> <translation id="1493892686965953381"><ph name="LOAD_STATE_PARAMETER" /> க்காக காத்திருக்கிறது...</translation> <translation id="1495486559005647033">கிடைக்கும் <ph name="NUM_PRINTERS" /> பிற சாதனங்கள்.</translation> -<translation id="1497284176235884849">வழங்கிய PPD தவறானது.</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" க்கு மறுபெயரிட முடியவில்லை. <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">தெரியாத சாதனம் [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">பல உள்நுழைவு அமர்வில் இந்த உரிமையாளர் கணக்கு தான் முதலில் உள்நுழைந்த கணக்காக இருக்க வேண்டும்.</translation> @@ -1774,7 +1773,6 @@ <translation id="3697100740575341996">உங்கள் சாதனத்திற்கான Chrome குடீஸை உங்கள் IT நிர்வாகி முடக்கியுள்ளார். <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">மின்னஞ்சல் முகவரி</translation> <translation id="3702500414347826004">துவக்கப் பக்கங்களில் <ph name="URL" />ஐச் சேர்க்கும்படி மாற்றப்பட்டது.</translation> -<translation id="3703669627274482482">தளமானது நான் கிளிப்போர்டுக்கு நகலெடுக்கும் உரையையும் படங்களையும் பார்ப்பதற்கு விரும்பும்போது, கேள்</translation> <translation id="370415077757856453">JavaScript தடுக்கப்பட்டுள்ளது</translation> <translation id="3704331259350077894">செயல்பாட்டின் இடைநிறுத்தம்</translation> <translation id="3705722231355495246">-</translation> @@ -2122,7 +2120,6 @@ <translation id="4270393598798225102">பதிப்பு <ph name="NUMBER" /></translation> <translation id="4271396100647220620">பொருத்தங்கள் இல்லை</translation> <translation id="4275830172053184480">உங்கள் சாதனத்தை மீண்டும் தொடங்கவும்</translation> -<translation id="4276216215490044084">அதிகபட்ச அளவு 250கி.பை. என்பதால், பெரிய PPDஐ ஏற்ற முடியாது.</translation> <translation id="4278390842282768270">அனுமதிக்கப்பட்டது</translation> <translation id="4281844954008187215">சேவை விதிமுறைகள்</translation> <translation id="4282196459431406533">Smart Lock இயக்கப்பட்டது</translation> @@ -2202,7 +2199,6 @@ <translation id="4430369329743628066">புத்தகக்குறி சேர்க்கப்பட்டது</translation> <translation id="443464694732789311">தொடரவும்</translation> <translation id="4439318412377770121">Google கிளவுடு சாதனங்களில் <ph name="DEVICE_NAME" />ஐப் பதிவு செய்ய விருப்பமா?</translation> -<translation id="4439612350502082674">பிரிண்டரைச் சேர்க்க முடியவில்லை. மீண்டும் தொடங்கி, முயலவும்.</translation> <translation id="4441124369922430666">கணினி தொடங்கப்பட்டவுடன் தானாகவே இந்தப் பயன்பாட்டைத் தொடங்க விரும்புகிறீர்களா?</translation> <translation id="444134486829715816">விரிவாக்கு...</translation> <translation id="4441548209689510310">எழுத்துப் பிழை சரிபார்ப்பு விருப்பங்களைக் காட்டு</translation> @@ -2433,7 +2429,6 @@ <translation id="4839303808932127586">வீடியோவை இவ்வாறு சே&மி...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> உருப்படிகள் தேர்ந்தெடுக்கப்பட்டன</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{மேலும் 1}other{மேலும் #}}</translation> -<translation id="4840626203080576849">கிளிப்போர்டிற்கு நீங்கள் நகலெடுக்கும் உரை மற்றும் படங்களைப் பார்ப்பதற்குத் தளம் விரும்பும் போது கேள் (பரிந்துரைக்கப்படுவது)</translation> <translation id="4842976633412754305">அங்கீகரிக்கப்படாத மூலங்களிலிருந்து ஸ்கிரிப்ட்களை ஏற்ற இந்தப் பக்கம் முயற்சிக்கிறது.</translation> <translation id="4844333629810439236">பிற விசைப்பலகைகள்</translation> <translation id="4846680374085650406">இந்த அமைப்பிற்கு நிர்வாகியின் பரிந்துரையைப் பின்பற்றுகிறீர்கள்.</translation> @@ -2700,7 +2695,6 @@ <translation id="5254368820972107711">அகற்ற வேண்டிய கோப்புகளைக் காட்டு</translation> <translation id="52550593576409946">கியோஸ்க் பயன்பாட்டைத் தொடங்க முடியவில்லை.</translation> <translation id="5255315797444241226">நீங்கள் உள்ளிட்ட கடவுச்சொற்றொடர் தவறானது.</translation> -<translation id="5259571578888203461">நான் கிளிப்போர்டுக்கு நகலெடுக்கும் உரையையும் படங்களையும் பார்க்க, தளங்களை அனுமதிக்காதே</translation> <translation id="5260508466980570042">மன்னிக்கவும், உங்கள் மின்னஞ்சலையும் கடவுச்சொல்லையும் சரிபார்க்க முடியவில்லை. தயவுசெய்து மீண்டும் முயற்சி செய்க.</translation> <translation id="5261683757250193089">இணைய அங்காடியில் திற</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />எங்கிருந்தும் கோப்புகளை அணுகலாம் (ஆஃப்லைனில் இருந்தாலும்).<ph name="MARKUP_2" /> @@ -3175,7 +3169,6 @@ <translation id="5972708806901999743">மேலே நகர்த்து</translation> <translation id="5972826969634861500"><ph name="PRODUCT_NAME" /> ஐத் தொடங்கு</translation> <translation id="5975083100439434680">சிறிதாக்கு</translation> -<translation id="5975730206036440725">PPDஐக் கண்டறிய முடியவில்லை. உங்கள் Chromebook ஆன்லைனில் உள்ளதா என்பதைச் சரிபார்த்து, மீண்டும் முயலவும்.</translation> <translation id="5975792506968920132">பேட்டரி சார்ஜ் சதவீதம்</translation> <translation id="5976160379964388480">மற்றவை</translation> <translation id="5978264784700053212">செய்தி மையம்</translation> @@ -3217,7 +3210,6 @@ <translation id="6042308850641462728">மேலும்</translation> <translation id="6042850536017090003">பயன்பாட்டு அறிவிப்புகளில் தட்டவும்.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> <ph name="TAB_NAME" /> உடன் Chrome தாவலைப் பகிர்கிறது.</translation> -<translation id="6043357981274314628">முடிந்தது!</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> <ph name="TAB_NAME" /> உடன் Chrome தாவலையும் ஆடியோவையும் பகிர்கிறது.</translation> <translation id="6049004884579590341">முழுத் திரையிலிருந்து வெளியேற, |<ph name="ACCELERATOR" />| என்பதை அழுத்திப் பிடித்திருக்கவும்</translation> <translation id="6049065490165456785">உட்புற கேமராவிலிருந்து படம்</translation> @@ -3384,7 +3376,6 @@ <translation id="6311220991371174222">Chromeஐத் தொடங்க முடியவில்லை. ஏனெனில், சுயவிவரத்தைத் திறக்கும் போது ஏதோ தவறாகிவிட்டது. Chromeஐ மீண்டும் தொடங்கவும்.</translation> <translation id="6312403991423642364">அறியப்படாத பிணையப் பிழை</translation> <translation id="6313641880021325787">VR இலிருந்து வெளியேறு</translation> -<translation id="6314335155547195432">கடவுச்சொல்லை உருவாக்கு</translation> <translation id="6314819609899340042">இந்த <ph name="IDS_SHORT_PRODUCT_NAME" /> சாதனத்தின் பிழைதிருத்த அம்சங்களை வெற்றிகரமாக இயக்கிவிட்டீர்கள்.</translation> <translation id="6315343732431721770">துவக்கப் பக்கங்களில் <ph name="URL" />ஐச் சேர்க்கும்படி மாற்றப்பட்டது. துவக்கப் பக்கத்தை மாற்றும் நீட்டிப்புகளை முடக்க, மீட்டமை என்பதைக் கிளிக் செய்யவும்.</translation> <translation id="6315493146179903667">அனைத்தையும் முதலில் வை</translation> @@ -3422,7 +3413,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Androidக்கான Smart Lockஐ அமை</translation> <translation id="6374469231428023295">மீண்டும் முயலவும்</translation> -<translation id="6377158645544167202">பிரிண்டரை இணைக்க முடியவில்லை. பிரிண்டர் இயக்கப்பட்டு, வைஃபை அல்லது USB மூலம் அது உங்கள் Chromebook உடன் இணைக்கப்பட்டுள்ளதை உறுதிப்படுத்திக்கொள்ளவும்.</translation> <translation id="6380143666419481200">ஏற்றுக்கொண்டு தொடர்க</translation> <translation id="6383051423892982287">எனது சொந்த <ph name="BEGIN_LINK" />ஒத்திசைவுக் கடவுச்சொற்றொடர்<ph name="END_LINK" /> மூலம் ஒத்திசைக்கப்பட்ட தரவை என்கிரிப்ட் செய்</translation> <translation id="6384275966486438344">உங்கள் தேடல் அமைப்புகளை இதற்கு மாற்றவும்: <ph name="SEARCH_HOST" /></translation> @@ -3579,7 +3569,6 @@ <translation id="6606070663386660533">தாவல் 8</translation> <translation id="6607272825297743757">கோப்புத் தகவல்</translation> <translation id="6607831829715835317">மேலும் கருவி&கள்</translation> -<translation id="6610183966322615106">பிரிண்டரைச் சேர்க்கும் போது பிழை</translation> <translation id="6612358246767739896">பாதுகாக்கப்பட்ட உள்ளடக்கம்</translation> <translation id="6613452264606394692">இந்தப் பக்கத்தைப் புத்தகக்குறியிடுவதன் மூலம், விரைவாக இதை அணுகலாம்</translation> <translation id="6615455863669487791">எனக்கு காண்பி</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb index 148966b..54031279 100644 --- a/chrome/app/resources/generated_resources_te.xtb +++ b/chrome/app/resources/generated_resources_te.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">ఆన్ - అనుకూల సెట్టింగ్లు</translation> <translation id="1493892686965953381"><ph name="LOAD_STATE_PARAMETER" /> కోసం వేచి ఉంది...</translation> <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> అందుబాటులో ఉన్న ఇతర పరికరాలు.</translation> -<translation id="1497284176235884849">అందించిన PPD చెల్లదు.</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" పేరు మార్చడం సాధ్యపడలేదు. <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">తెలియని పరికరం [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">ఈ యజమాని ఖాతానే బహుళ సైన్-ఇన్ సెషన్లో మొదటిగా సైన్-ఇన్ చేయాల్సిన ఖాతా.</translation> @@ -1774,7 +1773,6 @@ <translation id="3697100740575341996">మీ పరికరం కోసం మీ IT నిర్వాహకుడు Chrome కానుకలను నిలిపివేసారు. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">ఇమెయిల్ చిరునామా</translation> <translation id="3702500414347826004">మీ ప్రారంభ పేజీలు <ph name="URL" />ని చేర్చేలా మార్చబడ్డాయి.</translation> -<translation id="3703669627274482482">క్లిప్బోర్డ్కు కాపీ అయ్యే వచనం మరియు చిత్రాలను సైట్ చూడాలనుకున్నప్పుడు అడుగు</translation> <translation id="370415077757856453">JavaScript బ్లాక్ చేయబడింది</translation> <translation id="3704331259350077894">ఆపరేషన్ రద్దు</translation> <translation id="3705722231355495246">-</translation> @@ -2122,7 +2120,6 @@ <translation id="4270393598798225102">సంస్కరణ <ph name="NUMBER" /></translation> <translation id="4271396100647220620">సరిపోలికలు లేవు</translation> <translation id="4275830172053184480">మీ పరికరాన్ని పునఃప్రారంభించండి</translation> -<translation id="4276216215490044084">పెద్ద PPDని లోడ్ చేయడం సాధ్యం కాదు. గరిష్ట పరిమాణం 250kB.</translation> <translation id="4278390842282768270">అనుమతించబడింది</translation> <translation id="4281844954008187215">సేవా నిబంధనలు</translation> <translation id="4282196459431406533">Smart Lock ఆన్లో ఉంది</translation> @@ -2202,7 +2199,6 @@ <translation id="4430369329743628066">బుక్మార్క్ జోడించబడింది</translation> <translation id="443464694732789311">కొనసాగించు</translation> <translation id="4439318412377770121">మీరు <ph name="DEVICE_NAME" />ని Google Cloud పరికరాలకు నమోదు చేయాలనుకుంటున్నారా?</translation> -<translation id="4439612350502082674">ప్రింటర్ని జోడించడం సాధ్యం కాదు. పునఃప్రారంభించిన తర్వాత మళ్లీ ప్రయత్నించండి.</translation> <translation id="4441124369922430666">మెషీన్ ప్రారంభించబడినప్పుడు స్వయంచాలకంగా ఈ అనువర్తనం ప్రారంభించబడాలని మీరు కోరుకుంటున్నారా?</translation> <translation id="444134486829715816">విస్తరించు...</translation> <translation id="4441548209689510310">అక్షరదోష తనిఖీ ఎంపికలను చూపు</translation> @@ -2433,7 +2429,6 @@ <translation id="4839303808932127586">వీడియోను ఇలా సే&వ్ చెయ్యి...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> అంశాలు ఎంచుకోబడ్డాయి</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{మరో 1}other{మరో #}}</translation> -<translation id="4840626203080576849">క్లిప్బోర్డ్కు కాపీ అయ్యే వచనం మరియు చిత్రాలను సైట్ చూడాలనుకున్నప్పుడు అడుగు (సిఫార్సు చేయబడింది)</translation> <translation id="4842976633412754305">ఈ పేజీ ప్రామాణీకరించని మూలాల నుండి స్క్రిప్ట్లను లోడ్ చేయడానికి ప్రయత్నిస్తోంది.</translation> <translation id="4844333629810439236">ఇతర కీబోర్డ్లు</translation> <translation id="4846680374085650406">మీరు ఈ సెట్టింగ్ కోసం నిర్వాహకుడి సిఫార్సును అనుసరిస్తున్నారు.</translation> @@ -2700,7 +2695,6 @@ <translation id="5254368820972107711">తీసివేయాల్సిన ఫైల్లను చూపు</translation> <translation id="52550593576409946">కియోస్క్ అనువర్తనాన్ని ప్రారంభించడం సాధ్యపడలేదు.</translation> <translation id="5255315797444241226">మీరు నమోదు చేసిన పాస్ఫ్రేజ్ చెల్లదు.</translation> -<translation id="5259571578888203461">మీరు క్లిప్బోర్డ్కు కాపీ చేసే వచనం మరియు చిత్రాలను చూడటానికి సైట్లను అనుమతించవద్దు</translation> <translation id="5260508466980570042">క్షమించండి, మీ ఇమెయిల్ లేదా పాస్వర్డ్ ధృవీకరించబడలేదు. దయచేసి మళ్ళీ ప్రయత్నించండి.</translation> <translation id="5261683757250193089">వెబ్ స్టోర్లో తెరవండి</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />ఫైల్లను ఎక్కడి నుండైనా ప్రాప్యత చేయండి, ఆఫ్లైన్లో ఉన్నప్పటికీ ప్రాప్యత చేయగలరు.<ph name="MARKUP_2" /> @@ -3174,7 +3168,6 @@ <translation id="5972708806901999743">పైకి తరలించు</translation> <translation id="5972826969634861500"><ph name="PRODUCT_NAME" /> ప్రారంభించు</translation> <translation id="5975083100439434680">దూరంగా జూమ్ చెయ్యి</translation> -<translation id="5975730206036440725">PPDని కనుగొనడం సాధ్యం కాదు. మీ Chromebook ఆన్లైన్లో ఉందో లేదో తనిఖీ చేసిన తర్వాత మళ్లీ ప్రయత్నించండి.</translation> <translation id="5975792506968920132">బ్యాటరీ ఛార్జ్ శాతం</translation> <translation id="5976160379964388480">ఇతర</translation> <translation id="5978264784700053212">సందేశ కేంద్రం</translation> @@ -3216,7 +3209,6 @@ <translation id="6042308850641462728">మరింత</translation> <translation id="6042850536017090003">యాప్ నోటిఫికేషన్లపై నొక్కండి.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> ఒక Chrome ట్యాబ్ని <ph name="TAB_NAME" />తో భాగస్వామ్యం చేస్తోంది.</translation> -<translation id="6043357981274314628">పూర్తయింది!</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> ఒక Chrome ట్యాబ్ను మరియు ఆడియోను <ph name="TAB_NAME" />తో భాగస్వామ్యం చేస్తోంది.</translation> <translation id="6049004884579590341">పూర్తి స్క్రీన్ నుండి నిష్క్రమించడానికి |<ph name="ACCELERATOR" />|ని నొక్కి, పట్టుకోండి</translation> <translation id="6049065490165456785">అంతర్గత కెమెరా నుండి ఫోటో</translation> @@ -3383,7 +3375,6 @@ <translation id="6311220991371174222">మీ ప్రొఫైల్ను తెరుస్తున్నప్పుడు ఏదో తప్పు జరిగినందున Chromeని తెరవడం సాధ్యపడదు. Chromeని పునఃప్రారంభించడానికి ప్రయత్నించండి.</translation> <translation id="6312403991423642364">తెలియని నెట్వర్క్ లోపం</translation> <translation id="6313641880021325787">VRని నిష్క్రమించు</translation> -<translation id="6314335155547195432">పాస్వర్డ్ను రూపొందించు</translation> <translation id="6314819609899340042">మీరు ఈ <ph name="IDS_SHORT_PRODUCT_NAME" /> పరికరంలో డీబగ్గింగ్ లక్షణాలను విజయవంతంగా ప్రారంభించారు.</translation> <translation id="6315343732431721770">మీ ప్రారంభ పేజీలు <ph name="URL" />ని చేర్చేలా మార్చబడ్డాయి. మీ ప్రారంభ పేజీని మార్చే పొడిగింపులను నిలిపివేయడానికి, పునరుద్ధరించు క్లిక్ చేయండి.</translation> <translation id="6315493146179903667">అన్నీ ముందుకు తీసుకెళ్లు</translation> @@ -3421,7 +3412,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Android కోసం Smart Lockను సెటప్ చేయండి</translation> <translation id="6374469231428023295">మళ్లీ ప్రయత్నించు</translation> -<translation id="6377158645544167202">ప్రింటర్ని కనెక్ట్ చేయడం సాధ్యం కాదు. ప్రింటర్ని ఆన్ చేసినట్లు, దానిని Wi-Fi లేదా USB ద్వారా మీ Chromebookకి కనెక్ట్ చేసినట్లు నిర్ధారించుకోండి.</translation> <translation id="6380143666419481200">అంగీకరించి, కొనసాగండి</translation> <translation id="6383051423892982287">మీ స్వంత <ph name="BEGIN_LINK" />సమకాలీకరణ రహస్య పదబంధం<ph name="END_LINK" />తో సమకాలీకరించబడిన డేటాని గుప్తీకరించండి</translation> <translation id="6384275966486438344">మీ శోధన సెట్టింగ్లను దీనికి మార్చండి: <ph name="SEARCH_HOST" /></translation> @@ -3578,7 +3568,6 @@ <translation id="6606070663386660533">ట్యాబ్ 8</translation> <translation id="6607272825297743757">ఫైల్ సమాచారం</translation> <translation id="6607831829715835317">మరిన్ని సాధనా&లు</translation> -<translation id="6610183966322615106">ప్రింటర్ను జోడించడంలో సమస్య ఏర్పడింది</translation> <translation id="6612358246767739896">రక్షిత కంటెంట్</translation> <translation id="6613452264606394692">ఈ పేజీని బుక్మార్క్ చేయడం ద్వారా ఇక్కడికి క్షణాల్లో తిరిగి రండి</translation> <translation id="6615455863669487791">నాకు చూపించు</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb index f55c143..5e820ce 100644 --- a/chrome/app/resources/generated_resources_th.xtb +++ b/chrome/app/resources/generated_resources_th.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">เปิด - การตั้งค่าที่กำหนดเอง</translation> <translation id="1493892686965953381">กำลังรอ <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> อุปกรณ์อื่นๆ ที่พร้อมใช้งาน</translation> -<translation id="1497284176235884849">PPD ที่ระบุไม่ถูกต้อง</translation> <translation id="1497522201463361063">ไม่สามารถเปลี่ยนชื่อ "<ph name="FILE_NAME" />" <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">อุปกรณ์ที่ไม่รู้จัก [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">บัญชีเจ้าของนี้ต้องเป็นบัญชีที่ลงชื่อเข้าใช้บัญชีแรกในเซสชันการลงชื่อเข้าใช้พร้อมกัน</translation> @@ -1774,7 +1773,6 @@ <translation id="3697100740575341996">ผู้ดูแลระบบไอทีของคุณปิดใช้ Chrome Goodies สำหรับอุปกรณ์ <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">ที่อยู่อีเมล</translation> <translation id="3702500414347826004">มีการเปลี่ยนหน้าเริ่มต้นใช้งานของคุณให้มี <ph name="URL" /></translation> -<translation id="3703669627274482482">ถามเมื่อเว็บไซต์ต้องการดูข้อความและรูปภาพที่คุณคัดลอกไปยังคลิปบอร์ด</translation> <translation id="370415077757856453">บล็อก JavaScript</translation> <translation id="3704331259350077894">หยุดดำเนินกิจการ</translation> <translation id="3705722231355495246">-</translation> @@ -2122,7 +2120,6 @@ <translation id="4270393598798225102">รุ่น <ph name="NUMBER" /></translation> <translation id="4271396100647220620">ไม่มีรายการที่ตรงกัน</translation> <translation id="4275830172053184480">รีสตาร์ทอุปกรณ์ของคุณ</translation> -<translation id="4276216215490044084">โหลด PPD ขนาดใหญ่ไม่ได้ ขนาดต้องไม่เกิน 250KB</translation> <translation id="4278390842282768270">อนุญาตแล้ว</translation> <translation id="4281844954008187215">ข้อกำหนดในการให้บริการ</translation> <translation id="4282196459431406533">Smart Lock เปิดอยู่</translation> @@ -2202,7 +2199,6 @@ <translation id="4430369329743628066">เพิ่มบุ๊กมาร์กแล้ว</translation> <translation id="443464694732789311">ต่อไป</translation> <translation id="4439318412377770121">คุณต้องการลงทะเบียน <ph name="DEVICE_NAME" /> ไปยังอุปกรณ์ Google Cloud ใช่ไหม</translation> -<translation id="4439612350502082674">เพิ่มเครื่องพิมพ์ไม่ได้ โปรดรีสตาร์ทแล้วลองอีกครั้ง</translation> <translation id="4441124369922430666">คุณต้องการเริ่มแอปนี้โดยอัตโนมัติเมื่อเครื่องเปิดไหม</translation> <translation id="444134486829715816">ขยาย...</translation> <translation id="4441548209689510310">แสดงตัวเลือกการตรวจตัวสะกด</translation> @@ -2433,7 +2429,6 @@ <translation id="4839303808932127586">บั&นทึกวิดีโอเป็น...</translation> <translation id="4839847978919684242">เลือก <ph name="SELCTED_FILES_COUNT" /> รายการ</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{อีก 1 รายการ}other{อีก # รายการ}}</translation> -<translation id="4840626203080576849">ถามเมื่อเว็บไซต์ต้องการดูข้อความและรูปภาพที่คุณคัดลอกไปที่คลิปบอร์ด (แนะนำ)</translation> <translation id="4842976633412754305">หน้านี้พยายามโหลดสคริปต์จากแหล่งที่มาที่ไม่มีการรับรอง</translation> <translation id="4844333629810439236">แป้นพิมพ์อื่นๆ</translation> <translation id="4846680374085650406">คุณทำตามคำแนะนำของผู้ดูแลระบบสำหรับการตั้งค่านี้</translation> @@ -2700,7 +2695,6 @@ <translation id="5254368820972107711">แสดงไฟล์ที่จะนำออก</translation> <translation id="52550593576409946">ไม่สามารถเรียกใช้แอปพลิเคชันคีออสก์</translation> <translation id="5255315797444241226">ข้อความรหัสผ่านที่คุณป้อนไม่ถูกต้อง</translation> -<translation id="5259571578888203461">ไม่อนุญาตให้เว็บไซต์ดูข้อความและรูปภาพที่คุณคัดลอกไปยังคลิปบอร์ด</translation> <translation id="5260508466980570042">ขออภัย ไม่สามารถยืนยันอีเมลหรือรหัสผ่านของคุณได้ โปรดลองอีกครั้ง</translation> <translation id="5261683757250193089">เปิดในเว็บสโตร์</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />เข้าถึงไฟล์ได้จากทุกที่ แม้ขณะออฟไลน์<ph name="MARKUP_2" /> @@ -3174,7 +3168,6 @@ <translation id="5972708806901999743">ย้ายไปด้านบน</translation> <translation id="5972826969634861500">เริ่มต้นใช้งาน <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">ย่อ</translation> -<translation id="5975730206036440725">ไม่พบ PPD โปรดตรวจสอบว่า Chromebook ออนไลน์อยู่และลองอีกครั้ง</translation> <translation id="5975792506968920132">เปอร์เซ็นต์การชาร์จแบตเตอรี่</translation> <translation id="5976160379964388480">อื่นๆ</translation> <translation id="5978264784700053212">ศูนย์ข้อความ</translation> @@ -3216,7 +3209,6 @@ <translation id="6042308850641462728">เพิ่มเติม</translation> <translation id="6042850536017090003">แตะการแจ้งเตือนของแอป</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> กำลังแชร์แท็บใน Chrome กับ <ph name="TAB_NAME" /></translation> -<translation id="6043357981274314628">เสร็จแล้ว</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> กำลังแชร์แท็บและเสียงใน Chrome กับ <ph name="TAB_NAME" /></translation> <translation id="6049004884579590341">กด |<ph name="ACCELERATOR" />| ค้างไว้เพื่อออกจากโหมดเต็มหน้าจอ</translation> <translation id="6049065490165456785">รูปภาพจากกล้องภายใน</translation> @@ -3383,7 +3375,6 @@ <translation id="6311220991371174222">ไม่สามารถเริ่ม Chrome ได้เนื่องจากเกิดข้อผิดพลาดขณะเปิดโปรไฟล์ ลองเริ่มต้น Chrome ใหม่</translation> <translation id="6312403991423642364">ข้อผิดพลาดเครือข่ายที่ไม่รู้จัก</translation> <translation id="6313641880021325787">ออกจาก VR</translation> -<translation id="6314335155547195432">สร้างรหัสผ่าน</translation> <translation id="6314819609899340042">คุณได้เปิดใช้ฟีเจอร์การแก้ไขข้อบกพร่องบนอุปกรณ์ <ph name="IDS_SHORT_PRODUCT_NAME" /> นี้เรียบร้อยแล้ว</translation> <translation id="6315343732431721770">มีการเปลี่ยนหน้าเริ่มต้นใช้งานของคุณให้มี <ph name="URL" /> หากต้องการปิดใช้ส่วนขยายที่เปลี่ยนหน้าเริ่มต้นใช้งาน ให้คลิก "คืนค่า"</translation> <translation id="6315493146179903667">นำขึ้นมาข้างหน้าทั้งหมด</translation> @@ -3421,7 +3412,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">ตั้งค่า Smart Lock สำหรับ Android</translation> <translation id="6374469231428023295">ลองอีกครั้ง</translation> -<translation id="6377158645544167202">เชื่อมต่อเครื่องพิมพ์ไม่ได้ โปรดตรวจสอบว่าเครื่องพิมพ์เปิดอยู่และเชื่อมต่อกับ Chromebook ด้วย Wi-Fi หรือ USB แล้ว</translation> <translation id="6380143666419481200">ยอมรับและดำเนินการต่อ</translation> <translation id="6383051423892982287">เข้ารหัสลับข้อมูลที่ซิงค์ด้วย<ph name="BEGIN_LINK" />รหัสผ่านการซิงค์<ph name="END_LINK" />ของคุณเอง</translation> <translation id="6384275966486438344">เปลี่ยนการตั้งค่าการค้นหาของคุณเป็น: <ph name="SEARCH_HOST" /></translation> @@ -3578,7 +3568,6 @@ <translation id="6606070663386660533">แท็บ 8</translation> <translation id="6607272825297743757">ข้อมูลไฟล์</translation> <translation id="6607831829715835317">เ&ครื่องมือเพิ่มเติม</translation> -<translation id="6610183966322615106">เกิดข้อผิดพลาดในการเพิ่มเครื่องพิมพ์</translation> <translation id="6612358246767739896">เนื้อหาที่ได้รับความคุ้มครอง</translation> <translation id="6613452264606394692">บุ๊กมาร์กหน้านี้ไว้เพื่อให้กลับมาได้อย่างรวดเร็ว</translation> <translation id="6615455863669487791">แสดงให้ฉันเห็น</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb index e7b9752..7c385aa 100644 --- a/chrome/app/resources/generated_resources_tr.xtb +++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">Açık - özel ayarlar</translation> <translation id="1493892686965953381"><ph name="LOAD_STATE_PARAMETER" /> bekleniyor...</translation> <translation id="1495486559005647033">Kullanılabilir <ph name="NUM_PRINTERS" /> cihaz daha var.</translation> -<translation id="1497284176235884849">Sağlanan PPD geçersiz.</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" yeniden adlandırılamıyor. <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Bilinmeyen cihaz [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Bu sahip hesabının bir çoklu oturumda ilk oturum açan hesap olması gerekir.</translation> @@ -1774,7 +1773,6 @@ <translation id="3697100740575341996">BT yöneticiniz cihazınızda Chrome Ekstralarını devre dışı bıraktı. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">E-posta adresi</translation> <translation id="3702500414347826004">Başlangıç sayfalarınız <ph name="URL" /> adresini de içerecek şekilde değiştirildi.</translation> -<translation id="3703669627274482482">Bir site panoya kopyaladığınız metin ve resimleri görmek istediğinde sorulsun</translation> <translation id="370415077757856453">JavaScript engellendi</translation> <translation id="3704331259350077894">İşleme Ara Verme</translation> <translation id="3705722231355495246">-</translation> @@ -2122,7 +2120,6 @@ <translation id="4270393598798225102">Sürüm <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Eşleşme yok</translation> <translation id="4275830172053184480">Cihazınızı yeniden başlatın</translation> -<translation id="4276216215490044084">Büyük PPD yüklenemiyor. Maksimum boyut 250 KB.</translation> <translation id="4278390842282768270">İzin verildi</translation> <translation id="4281844954008187215">Hizmet Şartları</translation> <translation id="4282196459431406533">Smart Lock açık</translation> @@ -2202,7 +2199,6 @@ <translation id="4430369329743628066">Yer işareti eklendi</translation> <translation id="443464694732789311">Devam</translation> <translation id="4439318412377770121"><ph name="DEVICE_NAME" /> adlı cihazı Google Cloud Devices'a kaydetmek istiyor musunuz?</translation> -<translation id="4439612350502082674">Yazıcı eklenemiyor. Yeniden başlatın ve tekrar deneyin.</translation> <translation id="4441124369922430666">Makine açıldığında bu uygulamayı otomatik olarak başlatmak istiyor musunuz?</translation> <translation id="444134486829715816">Genişlet...</translation> <translation id="4441548209689510310">Yazım denetimi seçeneklerini göster</translation> @@ -2433,7 +2429,6 @@ <translation id="4839303808932127586">Video olarak kay&det...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> öğe seçildi</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{1 öğe daha}other{# öğe daha}}</translation> -<translation id="4840626203080576849">Bir site panoya kopyaladığınız metin ve resimleri görmek istediğinde sorulsun (önerilen)</translation> <translation id="4842976633412754305">Bu sayfa kimliği doğrulanmamış kaynaklardan komut dosyaları yüklemeye çalışıyor.</translation> <translation id="4844333629810439236">Diğer klavyeler</translation> <translation id="4846680374085650406">Bu ayar için yöneticinin önerisini uyguluyorsunuz.</translation> @@ -2700,7 +2695,6 @@ <translation id="5254368820972107711">Kaldırılacak dosyaları göster</translation> <translation id="52550593576409946">Kiosk uygulaması başlatılamadı.</translation> <translation id="5255315797444241226">Girdiğiniz parola hatalı.</translation> -<translation id="5259571578888203461">Sitelerin panoya kopyaladığım metni ve resimleri görmesine izin verme</translation> <translation id="5260508466980570042">Maalesef, e-posta adresiniz veya şifreniz doğrulanamadı. Lütfen tekrar deneyin.</translation> <translation id="5261683757250193089">Web Mağazası'nda aç</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Dosyalara istediğiniz yerden, hatta çevrimdışı olarak erişin.<ph name="MARKUP_2" /> @@ -3175,7 +3169,6 @@ <translation id="5972708806901999743">Yukarı taşı</translation> <translation id="5972826969634861500"><ph name="PRODUCT_NAME" /> uygulamasını başlat</translation> <translation id="5975083100439434680">Uzaklaştır</translation> -<translation id="5975730206036440725">PPD bulunamıyor. Chromebook'unuzun çevrimiçi olduğundan emin olun ve tekrar deneyin.</translation> <translation id="5975792506968920132">Pil Şarjı Yüzdesi</translation> <translation id="5976160379964388480">Diğerleri</translation> <translation id="5978264784700053212">İleti merkezi</translation> @@ -3217,7 +3210,6 @@ <translation id="6042308850641462728">Daha fazla</translation> <translation id="6042850536017090003">Uygulama bildirimlerine dokunun.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" />, bir Chrome sekmesini <ph name="TAB_NAME" /> ile paylaşıyor.</translation> -<translation id="6043357981274314628">Bitti!</translation> <translation id="6044805581023976844"><ph name="APP_NAME" />, bir Chrome sekmesini ve sesi <ph name="TAB_NAME" /> ile paylaşıyor.</translation> <translation id="6049004884579590341">Tam ekrandan çıkmak için |<ph name="ACCELERATOR" />| tuşunu basılı tutun</translation> <translation id="6049065490165456785">Dahili kamera fotoğrafı</translation> @@ -3384,7 +3376,6 @@ <translation id="6311220991371174222">Profiliniz açılırken bir sorun oluştuğundan Chrome başlatılamıyor. Chrome'u yeniden başlatmayı deneyin.</translation> <translation id="6312403991423642364">Bilinmeyen ağ hatası</translation> <translation id="6313641880021325787">VR'DAN ÇIK</translation> -<translation id="6314335155547195432">Şifre Oluştur</translation> <translation id="6314819609899340042">Bu <ph name="IDS_SHORT_PRODUCT_NAME" /> cihazında hata ayıklama özelliklerini başarıyla etkinleştirdiniz.</translation> <translation id="6315343732431721770">Başlangıç sayfalarınız <ph name="URL" /> olarak değiştirildi. Başlangıç sayfanızı değiştiren uzantıları devre dışı bırakmak için Geri Yükle'yi tıklayın.</translation> <translation id="6315493146179903667">Tümünü Öne Getir</translation> @@ -3422,7 +3413,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Android için Smart Lock özelliğini kurun</translation> <translation id="6374469231428023295">Tekrar Dene</translation> -<translation id="6377158645544167202">Yazıcıya bağlanılamıyor. Yazıcının açık ve Kablosuz veya USB aracılığıyla Chromebook'unuza bağlı olduğundan emin olun.</translation> <translation id="6380143666419481200">Kabul et ve devam et</translation> <translation id="6383051423892982287">Senkronize edilen verileri kendi <ph name="BEGIN_LINK" />senkronizasyon parolanızla<ph name="END_LINK" /> şifreleyin</translation> <translation id="6384275966486438344">Arama ayarlarınızı <ph name="SEARCH_HOST" /> olarak değiştirme</translation> @@ -3579,7 +3569,6 @@ <translation id="6606070663386660533">Sekme 8</translation> <translation id="6607272825297743757">Dosya bilgileri</translation> <translation id="6607831829715835317">Diğer araç&lar</translation> -<translation id="6610183966322615106">Yazıcı eklenirken hata oluştu</translation> <translation id="6612358246767739896">Korunan içerik</translation> <translation id="6613452264606394692">Bu sayfaya yer işareti koyarak buraya hızlıca geri dönün</translation> <translation id="6615455863669487791">Göster</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb index e287597e..beb7ff3 100644 --- a/chrome/app/resources/generated_resources_uk.xtb +++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">Спеціальні налаштування ввімкнено</translation> <translation id="1493892686965953381">Очікування <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033">Інші доступні пристрої: <ph name="NUM_PRINTERS" />.</translation> -<translation id="1497284176235884849">Указаний PPD недійсний.</translation> <translation id="1497522201463361063">Не вдається перейменувати "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Невідомий пристрій [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Цей обліковий запис власника має бути першим обліковим записом, з якого здійснено вхід під час сеансу паралельного входу.</translation> @@ -1774,7 +1773,6 @@ <translation id="3697100740575341996">Ваш ІТ-адміністратор вимкнув корисні програми Chrome для вашого пристрою. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">Електронна адреса</translation> <translation id="3702500414347826004">Стартові сторінки змінено на <ph name="URL" />.</translation> -<translation id="3703669627274482482">Запитувати, коли сайт хоче переглядати тексти та зображення, скопійовані в буфер обміну</translation> <translation id="370415077757856453">JavaScript заблоковано</translation> <translation id="3704331259350077894">Припинення дії</translation> <translation id="3705722231355495246">-</translation> @@ -2122,7 +2120,6 @@ <translation id="4270393598798225102">Версія <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Немає збігів</translation> <translation id="4275830172053184480">Перезапустіть пристрій</translation> -<translation id="4276216215490044084">Не вдається завантажити великий файл PPD. Розмір не має перевищувати 250 КБ.</translation> <translation id="4278390842282768270">Дозволено</translation> <translation id="4281844954008187215">Умови використання</translation> <translation id="4282196459431406533">Smart Lock увімкнено</translation> @@ -2202,7 +2199,6 @@ <translation id="4430369329743628066">Закладку додано</translation> <translation id="443464694732789311">Продовжити</translation> <translation id="4439318412377770121">Зареєструвати <ph name="DEVICE_NAME" /> у Google Cloud Devices?</translation> -<translation id="4439612350502082674">Не вдається додати принтер. Перезавантажте його та повторіть спробу.</translation> <translation id="4441124369922430666">Запускати цю програму автоматично під час увімкнення комп’ютера?</translation> <translation id="444134486829715816">Розгорнути...</translation> <translation id="4441548209689510310">Показати налаштування перевірки правопису</translation> @@ -2433,7 +2429,6 @@ <translation id="4839303808932127586">Збере&гти відео як...</translation> <translation id="4839847978919684242">Вибрано елементів: <ph name="SELCTED_FILES_COUNT" /></translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{Ще 1}one{Ще #}few{Ще #}many{Ще #}other{Ще #}}</translation> -<translation id="4840626203080576849">Запитувати, коли сайт захоче переглядати тексти або зображення, скопійовані в буфер обміну (рекомендовано)</translation> <translation id="4842976633412754305">Ця сторінка намагається завантажити сценарії з неперевірених джерел.</translation> <translation id="4844333629810439236">Інші клавіатури</translation> <translation id="4846680374085650406">Ви дотримуєтеся рекомендації адміністратора щодо цього налаштування.</translation> @@ -2700,7 +2695,6 @@ <translation id="5254368820972107711">Показати файли, які будуть вилучені</translation> <translation id="52550593576409946">Не вдалося запустити додаток для терміналів.</translation> <translation id="5255315797444241226">Введена парольна фраза неправильна.</translation> -<translation id="5259571578888203461">Не показувати сайтам тексти й зображення, які ви копіюєте в буфер обміну</translation> <translation id="5260508466980570042">На жаль, не вдалося підтвердити вашу електронну адресу чи пароль. Повторіть спробу.</translation> <translation id="5261683757250193089">Відкрити у Веб-магазині</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Отримуйте доступ до файлів будь-де, навіть без з’єднання з Інтернетом.<ph name="MARKUP_2" /> @@ -3174,7 +3168,6 @@ <translation id="5972708806901999743">На початок</translation> <translation id="5972826969634861500">Запустити <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Зменшити масштаб</translation> -<translation id="5975730206036440725">Не вдається знайти PPD. Перевірте, чи під’єднано Chromebook до Інтернету, і повторіть спробу.</translation> <translation id="5975792506968920132">Відсоток заряду акумулятора</translation> <translation id="5976160379964388480">Інші</translation> <translation id="5978264784700053212">Центр повідомлень</translation> @@ -3216,7 +3209,6 @@ <translation id="6042308850641462728">Більше</translation> <translation id="6042850536017090003">Торкніться опції "Сповіщення додатків".</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> транслює вкладку Chrome на вкладку <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Готово</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> транслює вкладку Chrome і аудіо на вкладку <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Щоб вийти з повноекранного режиму, утримуйте клавішу |<ph name="ACCELERATOR" />|,</translation> <translation id="6049065490165456785">Фотографія з внутрішньої камери</translation> @@ -3383,7 +3375,6 @@ <translation id="6311220991371174222">Не вдається запустити Chrome, оскільки сталася помилка під час відкривання профілю. Спробуйте перезапустити Chrome.</translation> <translation id="6312403991423642364">Невідома помилка мережі</translation> <translation id="6313641880021325787">Вийти з VR-режиму</translation> -<translation id="6314335155547195432">Згенерувати пароль</translation> <translation id="6314819609899340042">Функції налагодження ввімкнено на цьому пристрої <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation> <translation id="6315343732431721770">Стартові сторінки змінено на <ph name="URL" />. Щоб вимкнути розширення, які змінюють стартову сторінку, натисніть "Відновити".</translation> <translation id="6315493146179903667">Перемістити все на передній план</translation> @@ -3421,7 +3412,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Налаштуйте Smart Lock на пристрої Android</translation> <translation id="6374469231428023295">Повторити спробу</translation> -<translation id="6377158645544167202">Не вдається під’єднати принтер. Перевірте, чи принтер увімкнено та під’єднано до Chromebook через Wi-Fi або USB.</translation> <translation id="6380143666419481200">Прийняти та продовжити</translation> <translation id="6383051423892982287">Шифрувати синхронізовані дані за допомогою власної <ph name="BEGIN_LINK" />парольної фрази<ph name="END_LINK" /></translation> <translation id="6384275966486438344">Використовувати пошукову систему <ph name="SEARCH_HOST" /></translation> @@ -3578,7 +3568,6 @@ <translation id="6606070663386660533">Вкладка 8</translation> <translation id="6607272825297743757">Інформація про файл</translation> <translation id="6607831829715835317">Інші інстру&менти</translation> -<translation id="6610183966322615106">Помилка додавання принтера</translation> <translation id="6612358246767739896">Захищений вміст</translation> <translation id="6613452264606394692">Створіть закладку цієї сторінки, щоб швидко повернутися на неї</translation> <translation id="6615455863669487791">Показати</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb index 0cb39513..a4bb0fb 100644 --- a/chrome/app/resources/generated_resources_vi.xtb +++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -328,7 +328,6 @@ <translation id="1487335504823219454">Bật - cài đặt tùy chỉnh</translation> <translation id="1493892686965953381">Đang đợi <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033"><ph name="NUM_PRINTERS" /> thiết bị hiện có khác.</translation> -<translation id="1497284176235884849">PPD đã cung cấp là không hợp lệ.</translation> <translation id="1497522201463361063">Không thể đổi tên "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">Thiết bị không xác định [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">Tài khoản của chủ sở hữu này phải là tài khoản đăng nhập đầu tiên trong phiên đăng nhập nhiều tài khoản.</translation> @@ -1775,7 +1774,6 @@ <translation id="3697100740575341996">Quản trị viên CNTT của bạn đã tắt Chrome Goodies cho thiết bị của bạn. <ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">Địa chỉ email</translation> <translation id="3702500414347826004">Trang khởi động của bạn đã được thay đổi để bao gồm <ph name="URL" />.</translation> -<translation id="3703669627274482482">Hỏi khi có một trang web muốn xem văn bản và hình ảnh mà bạn đã sao chép sang khay nhớ tạm</translation> <translation id="370415077757856453">Đã chặn Javascript</translation> <translation id="3704331259350077894">Dừng Hoạt động</translation> <translation id="3705722231355495246">-</translation> @@ -2123,7 +2121,6 @@ <translation id="4270393598798225102">Phiên bản <ph name="NUMBER" /></translation> <translation id="4271396100647220620">Không có kết quả phù hợp</translation> <translation id="4275830172053184480">Khởi động lại thiết bị của bạn</translation> -<translation id="4276216215490044084">Không thể tải PPD lớn. Kích thước tối đa là 250kB.</translation> <translation id="4278390842282768270">Được cho phép</translation> <translation id="4281844954008187215">Điều khoản dịch vụ</translation> <translation id="4282196459431406533">Đã bật Smart Lock</translation> @@ -2203,7 +2200,6 @@ <translation id="4430369329743628066">Đã thêm dấu trang</translation> <translation id="443464694732789311">Tiếp tục</translation> <translation id="4439318412377770121">Bạn có muốn đăng ký <ph name="DEVICE_NAME" /> với Google Cloud Devices không?</translation> -<translation id="4439612350502082674">Không thể thêm máy in. Hãy khởi động lại và thử lần nữa.</translation> <translation id="4441124369922430666">Bạn có muốn tự động khởi động ứng dụng này khi máy bật không?</translation> <translation id="444134486829715816">Mở rộng...</translation> <translation id="4441548209689510310">Hiển thị tùy chọn kiểm tra lỗi chính tả</translation> @@ -2434,7 +2430,6 @@ <translation id="4839303808932127586">Lưu &video thành...</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> mục được chọn</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{1 mục khác}other{# mục khác}}</translation> -<translation id="4840626203080576849">Hỏi khi có một trang web muốn xem văn bản và hình ảnh mà bạn sao chép sang khay nhớ tạm (được đề xuất)</translation> <translation id="4842976633412754305">Trang này đang cố gắng tải tập lệnh từ nguồn chưa được xác thực.</translation> <translation id="4844333629810439236">Các bàn phím khác</translation> <translation id="4846680374085650406">Bạn đang theo khuyến cáo của quản trị viên về cài đặt này.</translation> @@ -2701,7 +2696,6 @@ <translation id="5254368820972107711">Hiển thị các tệp cần xóa</translation> <translation id="52550593576409946">Không thể chạy ứng dụng Kiosk.</translation> <translation id="5255315797444241226">Cụm mật khẩu bạn đã nhập không chính xác.</translation> -<translation id="5259571578888203461">Không cho phép các trang web xem văn bản và hình ảnh mà bạn sao chép vào khay nhớ tạm</translation> <translation id="5260508466980570042">Rất tiếc, không thể xác minh được email hoặc mật khẩu của bạn. Vui lòng thử lại.</translation> <translation id="5261683757250193089">Mở trong Cửa hàng trực tuyến</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />Truy cập tệp từ mọi nơi, ngay cả khi ngoại tuyến.<ph name="MARKUP_2" /> @@ -3175,7 +3169,6 @@ <translation id="5972708806901999743">Chuyển lên trên cùng</translation> <translation id="5972826969634861500">Khởi động <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">Thu nhỏ</translation> -<translation id="5975730206036440725">Không thể tìm thấy PPD. Hãy kiểm tra để đảm bảo Chromebook của bạn kết nối mạng và thử lại.</translation> <translation id="5975792506968920132">Phần trăm sạc pin</translation> <translation id="5976160379964388480">Khác</translation> <translation id="5978264784700053212">Trung tâm thông báo</translation> @@ -3217,7 +3210,6 @@ <translation id="6042308850641462728">Thêm</translation> <translation id="6042850536017090003">Nhấn vào Thông báo của ứng dụng.</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> đang chia sẻ một tab trong Chrome với <ph name="TAB_NAME" />.</translation> -<translation id="6043357981274314628">Xong!</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> đang chia sẻ âm thanh và một tab trong Chrome với <ph name="TAB_NAME" />.</translation> <translation id="6049004884579590341">Hãy nhấn và giữ |<ph name="ACCELERATOR" />| để thoát khỏi toàn màn hình</translation> <translation id="6049065490165456785">Ảnh từ máy ảnh nội bộ</translation> @@ -3384,7 +3376,6 @@ <translation id="6311220991371174222">Không thể khởi động Chrome do đã xảy ra lỗi khi mở hồ sơ của bạn. Hãy thử khởi động lại Chrome.</translation> <translation id="6312403991423642364">Lỗi mạng không xác định</translation> <translation id="6313641880021325787">THOÁT VR</translation> -<translation id="6314335155547195432">Tạo mật khẩu</translation> <translation id="6314819609899340042">Bạn đã bật thành công tính năng gỡ lỗi trên thiết bị <ph name="IDS_SHORT_PRODUCT_NAME" /> này.</translation> <translation id="6315343732431721770">Trang khởi động của bạn đã được thay đổi để bao gồm <ph name="URL" />. Để tắt tiện ích thay đổi trang khởi động của bạn, hãy nhấp vào Khôi phục.</translation> <translation id="6315493146179903667">Đưa Tất cả lên Trước</translation> @@ -3422,7 +3413,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">Thiết lập Smart Lock dành cho Android</translation> <translation id="6374469231428023295">Thử lại</translation> -<translation id="6377158645544167202">Không thể kết nối máy in. Hãy kiểm tra để đảm bảo máy in bật và kết nối với Chromebook qua Wi-Fi hoặc USB.</translation> <translation id="6380143666419481200">Đồng ý và tiếp tục</translation> <translation id="6383051423892982287">Mã hóa dữ liệu đã đồng bộ hóa bằng <ph name="BEGIN_LINK" />cụm mật khẩu đồng bộ hóa<ph name="END_LINK" /> của riêng bạn</translation> <translation id="6384275966486438344">Thay đổi cài đặt tìm kiếm của bạn thành: <ph name="SEARCH_HOST" /></translation> @@ -3579,7 +3569,6 @@ <translation id="6606070663386660533">Tab 8</translation> <translation id="6607272825297743757">Thông tin tệp</translation> <translation id="6607831829715835317">Côn&g cụ khác</translation> -<translation id="6610183966322615106">Lỗi khi thêm máy in</translation> <translation id="6612358246767739896">Nội dung được bảo vệ</translation> <translation id="6613452264606394692">Quay lại đây nhanh chóng bằng cách đánh dấu trang này</translation> <translation id="6615455863669487791">Hiển thị cho tôi</translation> @@ -3795,7 +3784,7 @@ <translation id="6978121630131642226">Công cụ Tìm kiếm</translation> <translation id="6978611942794658017">Tệp này dành cho PC sử dụng phần mềm Windows. Tệp này không tương thích với thiết bị chạy Chrome OS của bạn. Vui lòng tìm kiếm ứng dụng thay thế phù hợp trong Cửa hàng Chrome trực tuyến.</translation> <translation id="6979158407327259162">Google Drive</translation> -<translation id="6979737339423435258">Toàn bộ thời gian</translation> +<translation id="6979737339423435258">Từ trước đến nay</translation> <translation id="6980462514016882061">Google có thể sử dụng lịch sử duyệt web của bạn để cá nhân hóa Tìm kiếm, quảng cáo và các dịch vụ khác của Google</translation> <translation id="6981982820502123353">Truy cập</translation> <translation id="6983201004195852174">Nhấn và giữ Tìm kiếm, sau đó nhấp hoặc kéo để chọn nội dung cần đọc to</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb index 69aaf72..ec05b0e 100644 --- a/chrome/app/resources/generated_resources_zh-CN.xtb +++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">开启 - 自定义设置</translation> <translation id="1493892686965953381">正在等待<ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033">另外<ph name="NUM_PRINTERS" />个可用的设备。</translation> -<translation id="1497284176235884849">所提供的 PPD 无效。</translation> <translation id="1497522201463361063">无法重命名“<ph name="FILE_NAME" />”。<ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">未知设备 [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">在多帐号登录会话中,此所有者帐号必须是最先登录的帐号。</translation> @@ -1768,7 +1767,6 @@ <translation id="3697100740575341996">您的 IT 管理员已停用了您设备的 Chrome 附赠服务。<ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">电子邮件地址</translation> <translation id="3702500414347826004">您的启动页已更改,添加了 <ph name="URL" />。</translation> -<translation id="3703669627274482482">当网站想要查看您复制到剪贴板的文字和图片时询问您</translation> <translation id="370415077757856453">已拦截 JavaScript</translation> <translation id="3704331259350077894">操作终止</translation> <translation id="3705722231355495246">-</translation> @@ -2115,7 +2113,6 @@ <translation id="4270393598798225102">版本 <ph name="NUMBER" /></translation> <translation id="4271396100647220620">找不到相符的结果</translation> <translation id="4275830172053184480">重启您的设备</translation> -<translation id="4276216215490044084">无法加载大型 PPD。大小上限为 250kB。</translation> <translation id="4278390842282768270">允许</translation> <translation id="4281844954008187215">服务条款</translation> <translation id="4282196459431406533">Smart Lock 已开启</translation> @@ -2195,7 +2192,6 @@ <translation id="4430369329743628066">已添加书签</translation> <translation id="443464694732789311">继续</translation> <translation id="4439318412377770121">要将“<ph name="DEVICE_NAME" />”注册到Google Cloud Devices吗?</translation> -<translation id="4439612350502082674">无法添加打印机。请重新启动并重试。</translation> <translation id="4441124369922430666">要在设备开启时自动启动此应用吗?</translation> <translation id="444134486829715816">展开...</translation> <translation id="4441548209689510310">显示拼写检查选项</translation> @@ -2426,7 +2422,6 @@ <translation id="4839303808932127586">视频另存为(&V)...</translation> <translation id="4839847978919684242">已经选择 <ph name="SELCTED_FILES_COUNT" /> 个文件或目录</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{另外 1 项内容}other{另外 # 项内容}}</translation> -<translation id="4840626203080576849">当网站想要查看您复制到剪贴板的文字和图片时询问您(建议)</translation> <translation id="4842976633412754305">此网页正试图从未经验证的来源加载脚本。</translation> <translation id="4844333629810439236">其他键盘布局</translation> <translation id="4846680374085650406">您目前所采用的是管理员的建议设置。</translation> @@ -2692,7 +2687,6 @@ <translation id="5254368820972107711">显示将被移除的文件</translation> <translation id="52550593576409946">无法启动自助服务终端应用。</translation> <translation id="5255315797444241226">您输入的密码不正确。</translation> -<translation id="5259571578888203461">不允许网站查看您复制到剪贴板的文字和图片</translation> <translation id="5260508466980570042">抱歉,您的电子邮件地址或密码无法进行验证,请重试。</translation> <translation id="5261683757250193089">在 Chrome 网上应用店中打开</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />可随时随地访问文件,即使处于离线状态也没关系。<ph name="MARKUP_2" />Google 云端硬盘上的文件是最新的,并可通过任意设备访问。<ph name="MARKUP_3" /><ph name="MARKUP_4" />可确保文件安全。<ph name="MARKUP_5" />无论您的设备出现什么状况,您的文件都会安全地存储在 Google 云端硬盘上。<ph name="MARKUP_6" /><ph name="MARKUP_7" />文件集中存储,方便您与他人在同一个地方共享、创建和协作处理<ph name="MARKUP_8" />文件。<ph name="MARKUP_9" /></translation> @@ -3161,7 +3155,6 @@ <translation id="5972708806901999743">移到顶部</translation> <translation id="5972826969634861500">启动<ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">缩小</translation> -<translation id="5975730206036440725">找不到所提供的 PPD。请确保您的 Chromebook 已连接到网络,然后重试。</translation> <translation id="5975792506968920132">电池充电百分比</translation> <translation id="5976160379964388480">其他</translation> <translation id="5978264784700053212">消息中心</translation> @@ -3203,7 +3196,6 @@ <translation id="6042308850641462728">更多</translation> <translation id="6042850536017090003">点按“应用通知”。</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> 正在与 <ph name="TAB_NAME" /> 共享 Chrome 标签页。</translation> -<translation id="6043357981274314628">已完成!</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> 正在与 <ph name="TAB_NAME" /> 共享 Chrome 标签页和音频。</translation> <translation id="6049004884579590341">按住 |<ph name="ACCELERATOR" />| 即可退出全屏模式</translation> <translation id="6049065490165456785">内部相机中的照片</translation> @@ -3370,7 +3362,6 @@ <translation id="6311220991371174222">打开您的个人资料时出了点问题,无法启动 Chrome。请尝试重新启动 Chrome。</translation> <translation id="6312403991423642364">未知网络错误</translation> <translation id="6313641880021325787">退出虚拟实境</translation> -<translation id="6314335155547195432">生成密码</translation> <translation id="6314819609899340042">已在此<ph name="IDS_SHORT_PRODUCT_NAME" />设备上成功启用调试功能。</translation> <translation id="6315343732431721770">您的启动页已更改,添加了 <ph name="URL" />。要停用会更改您的启动页的扩展程序,请点击“恢复”。</translation> <translation id="6315493146179903667">前置全部窗口</translation> @@ -3408,7 +3399,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">设置 Smart Lock(Android 版)</translation> <translation id="6374469231428023295">重试</translation> -<translation id="6377158645544167202">无法连接该打印机。请确保该打印机已开机,并已通过 Wi-Fi 或 USB 连接到您的 Chromebook。</translation> <translation id="6380143666419481200">接受并继续</translation> <translation id="6383051423892982287">使用您自己的<ph name="BEGIN_LINK" />同步密码<ph name="END_LINK" />加密已同步的数据</translation> <translation id="6384275966486438344">将您的搜索设置更改为:<ph name="SEARCH_HOST" /></translation> @@ -3564,7 +3554,6 @@ <translation id="6606070663386660533">标签页 8</translation> <translation id="6607272825297743757">文件信息</translation> <translation id="6607831829715835317">更多工具(&L)</translation> -<translation id="6610183966322615106">添加打印机时出错</translation> <translation id="6612358246767739896">受保护的内容</translation> <translation id="6613452264606394692">只需为此网页添加书签,便可在需要时快速返回到此处</translation> <translation id="6615455863669487791">显示图标</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb index 57a0404..22cfc44 100644 --- a/chrome/app/resources/generated_resources_zh-TW.xtb +++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -327,7 +327,6 @@ <translation id="1487335504823219454">開啟 - 自訂設定</translation> <translation id="1493892686965953381">正在等待 <ph name="LOAD_STATE_PARAMETER" />...</translation> <translation id="1495486559005647033">還有 <ph name="NUM_PRINTERS" /> 個可用裝置。</translation> -<translation id="1497284176235884849">提供的 PPD 無效。</translation> <translation id="1497522201463361063">無法重新命名「<ph name="FILE_NAME" />」。<ph name="ERROR_MESSAGE" /></translation> <translation id="1500297251995790841">不明裝置 [<ph name="VENDOR_ID" />:<ph name="PRODUCT_ID" />]</translation> <translation id="1503394326855300303">擁有者帳戶必須是多重登入工作階段中第一個登入的帳戶。</translation> @@ -1774,7 +1773,6 @@ <translation id="3697100740575341996">IT 管理員已在你的裝置上停用 Chrome Goodies。<ph name="MORE_INFO_LINK" /></translation> <translation id="3699624789011381381">電子郵件地址</translation> <translation id="3702500414347826004">你的起始網頁已變更為包含 <ph name="URL" />。</translation> -<translation id="3703669627274482482">當網站要讀取你複製到剪貼簿的文字和圖片時,必須先詢問你</translation> <translation id="370415077757856453">已封鎖 JavaScript</translation> <translation id="3704331259350077894">操作停止</translation> <translation id="3705722231355495246">-</translation> @@ -2121,7 +2119,6 @@ <translation id="4270393598798225102">第 <ph name="NUMBER" /> 版</translation> <translation id="4271396100647220620">找不到相符的項目</translation> <translation id="4275830172053184480">重新啟動裝置</translation> -<translation id="4276216215490044084">無法載入大型 PPD。大小上限為 250KB。</translation> <translation id="4278390842282768270">允許</translation> <translation id="4281844954008187215">服務條款</translation> <translation id="4282196459431406533">Smart Lock 已啟用</translation> @@ -2201,7 +2198,6 @@ <translation id="4430369329743628066">已新增書籤</translation> <translation id="443464694732789311">繼續</translation> <translation id="4439318412377770121">你要將 <ph name="DEVICE_NAME" /> 註冊到 Google 雲端裝置嗎?</translation> -<translation id="4439612350502082674">無法新增印表機。請重新啟動後再試一次。</translation> <translation id="4441124369922430666">你要在裝置開機時自動啟動這個應用程式嗎?</translation> <translation id="444134486829715816">展開...</translation> <translation id="4441548209689510310">顯示拼字檢查選項</translation> @@ -2432,7 +2428,6 @@ <translation id="4839303808932127586">將影片另存為(&V)...</translation> <translation id="4839847978919684242">已選取 <ph name="SELCTED_FILES_COUNT" /> 個項目</translation> <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{還有 1 個項目}other{還有 # 個項目}}</translation> -<translation id="4840626203080576849">當網站要讀取你複製到剪貼簿的文字和圖片時,必須先詢問你 (建議使用)</translation> <translation id="4842976633412754305">這個網頁正在嘗試載入來源未經驗證的指令碼。</translation> <translation id="4844333629810439236">其他鍵盤</translation> <translation id="4846680374085650406">你目前所採用的是管理員的建議設定。</translation> @@ -2698,7 +2693,6 @@ <translation id="5254368820972107711">顯示將被移除的檔案</translation> <translation id="52550593576409946">Kiosk 應用程式無法啟動。</translation> <translation id="5255315797444241226">你輸入的通關密語不正確。</translation> -<translation id="5259571578888203461">禁止網站查看你複製到剪貼簿的文字和圖片</translation> <translation id="5260508466980570042">抱歉,系統無法驗證你的電子郵件地址或密碼,請再試一次。</translation> <translation id="5261683757250193089">開啟線上應用程式商店</translation> <translation id="5262311848634918433"><ph name="MARKUP_1" />隨時隨地存取檔案,甚至可離線存取。<ph name="MARKUP_2" /> @@ -3172,7 +3166,6 @@ <translation id="5972708806901999743">移至頂端</translation> <translation id="5972826969634861500">啟動 <ph name="PRODUCT_NAME" /></translation> <translation id="5975083100439434680">縮小</translation> -<translation id="5975730206036440725">找不到 PPD,請確認 Chromebook 已連上網路,然後再試一次。</translation> <translation id="5975792506968920132">電池充電百分比</translation> <translation id="5976160379964388480">其他</translation> <translation id="5978264784700053212">訊息中心</translation> @@ -3214,7 +3207,6 @@ <translation id="6042308850641462728">更多</translation> <translation id="6042850536017090003">輕觸 [應用程式通知]。</translation> <translation id="6043317578411397101"><ph name="APP_NAME" /> 正在與 <ph name="TAB_NAME" /> 共用 Chrome 分頁。</translation> -<translation id="6043357981274314628">完成!</translation> <translation id="6044805581023976844"><ph name="APP_NAME" /> 正在與 <ph name="TAB_NAME" /> 共用 Chrome 分頁和音訊。</translation> <translation id="6049004884579590341">按住 |<ph name="ACCELERATOR" />| 即可結束全螢幕模式</translation> <translation id="6049065490165456785">內部相機中的相片</translation> @@ -3381,7 +3373,6 @@ <translation id="6311220991371174222">開啟你的設定檔時發生錯誤,因此無法啟動 Chrome,請嘗試重新啟動。</translation> <translation id="6312403991423642364">不明的網路錯誤</translation> <translation id="6313641880021325787">結束 VR</translation> -<translation id="6314335155547195432">產生密碼</translation> <translation id="6314819609899340042">你已成功在 <ph name="IDS_SHORT_PRODUCT_NAME" /> 裝置上啟用偵錯功能。</translation> <translation id="6315343732431721770">你的起始網頁已變更為包含 <ph name="URL" />。如要將變更起始網頁的擴充功能停用,請按一下 [還原]。</translation> <translation id="6315493146179903667">全部移至最上層</translation> @@ -3419,7 +3410,6 @@ <translation id="6374077068638737855">Iceweasel</translation> <translation id="6374108032506706911">設定 Android Smart Lock</translation> <translation id="6374469231428023295">再試一次</translation> -<translation id="6377158645544167202">無法連上印表機。請確認印表機已開啟,且已透過 Wi-Fi 或 USB 連上你的 Chromebook。</translation> <translation id="6380143666419481200">接受並繼續</translation> <translation id="6383051423892982287">使用你的<ph name="BEGIN_LINK" />同步通關密語<ph name="END_LINK" />將經過同步處理的資料加密</translation> <translation id="6384275966486438344">將你的搜尋設定變更為:<ph name="SEARCH_HOST" /></translation> @@ -3575,7 +3565,6 @@ <translation id="6606070663386660533">分頁 8</translation> <translation id="6607272825297743757">檔案資訊</translation> <translation id="6607831829715835317">更多工具(&L)</translation> -<translation id="6610183966322615106">新增印表機時發生錯誤</translation> <translation id="6612358246767739896">受保護內容</translation> <translation id="6613452264606394692">將此頁加入書籤,方便你快速返回</translation> <translation id="6615455863669487791">顯示</translation>
diff --git a/chrome/app/resources/google_chrome_strings_mr.xtb b/chrome/app/resources/google_chrome_strings_mr.xtb index a2712e6..d9e24000 100644 --- a/chrome/app/resources/google_chrome_strings_mr.xtb +++ b/chrome/app/resources/google_chrome_strings_mr.xtb
@@ -45,7 +45,7 @@ <translation id="2120620239521071941">हे या डिव्हाइस मधून <ph name="ITEMS_COUNT" /> आयटम हटवेल. नंतर आपला डेटा पुनर्प्राप्त करण्यासाठी Chrome मध्ये <ph name="USER_EMAIL" /> म्हणून साइन इन करा.</translation> <translation id="2123055963409958220"><ph name="BEGIN_LINK" />वर्तमान सेटिंग्ज<ph name="END_LINK" /> चा अहवाल देऊन Chrome ला आणखी चांगले बनविण्यात मदत करा</translation> <translation id="216054706567564023">Chrome आपल्या फोनवर स्थापित करा. आम्ही आपल्या खाते पुनर्प्राप्ती फोन नंबरवर एक SMS पाठवू.</translation> -<translation id="2246246234298806438">बिल्ट-इन PDF दर्शक गहाळ असताना Google Chrome मुद्रण पूर्वावलोकन दर्शवू शकत नाही.</translation> +<translation id="2246246234298806438">बिल्ट-इन PDF दर्शक गहाळ असताना Google Chrome प्रिंट पूर्वावलोकन दर्शवू शकत नाही.</translation> <translation id="2252923619938421629">वर्तमान सेटिंग्जचा अहवाल देऊन Google Chrome उत्कृष्ट बनविण्यास मदत करा</translation> <translation id="2286950485307333924">आपण आता Chrome वर साइन इन केले आहे</translation> <translation id="2290014774651636340">Google API की गहाळ आहेत. Google Chrome ची काही कार्यक्षमता अक्षम केली जाईल.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_te.xtb b/chrome/app/resources/google_chrome_strings_te.xtb index 3c9418b..202da766 100644 --- a/chrome/app/resources/google_chrome_strings_te.xtb +++ b/chrome/app/resources/google_chrome_strings_te.xtb
@@ -150,7 +150,7 @@ <translation id="5243785881901838525">Google చెల్లింపులు (Chromeకి కాపీ చేయబడింది)</translation> <translation id="5251420635869119124">అతిథులు ఎటువంటి చరిత్రను వదలకుండానే Chromeను ఉపయోగించవచ్చు.</translation> <translation id="5284703908158630707">{SECONDS,plural, =1{Google Chrome 1 సెకనులో పునఃప్రారంభమవుతుంది.}other{Google Chrome # సెకన్లలో పునఃప్రారంభమవుతుంది.}}</translation> -<translation id="532046782124376502">హెచ్చరిక: Google Chrome మీ బ్రౌజింగ్ చరిత్రను రికార్డ్ చేయలేకుండా పొడిగింపులను బ్లాక్ చేయలేదు. ఈ పొడిగింపును అజ్ఞాత మోడ్లో ఆపివేయడానికి, ఈ ఎంపికను రద్దు చేయండి.</translation> +<translation id="532046782124376502">హెచ్చరిక: Google Chrome మీ బ్రౌజింగ్ చరిత్రను రికార్డ్ చేయకుండా పొడిగింపులను నివారించలేదు. ఈ పొడిగింపును అజ్ఞాత మోడ్లో ఆపివేయడానికి, ఈ ఎంపికను రద్దు చేయండి.</translation> <translation id="5334545119300433702">ఈ మాడ్యూల్ Google Chromeతో వైరుధ్యంగా ఉంటుంది.</translation> <translation id="5386244825306882791">ఇది మీరు Chromeని ప్రారంభించేటప్పుడు లేదా ఓమ్నిపెట్టె నుండి శోధించేటప్పుడు చూపబడే పేజీని కూడా నియంత్రిస్తుంది.</translation> <translation id="5430073640787465221">మీ ప్రాధాన్యతల ఫైల్ పాడైంది లేదా చెల్లదు. Google Chrome మీ సెట్టింగ్లను తిరిగి పొందలేకపోయింది.</translation>
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp index 0d8a1e1..0ab9ce4 100644 --- a/chrome/app/settings_strings.grdp +++ b/chrome/app/settings_strings.grdp
@@ -2383,13 +2383,13 @@ Clipboard </message> <message name="IDS_SETTINGS_SITE_SETTINGS_CLIPBOARD_ASK" desc="The ask label for clipboard access in site settings."> - Ask when a site wants to see text and images you copy to the clipboard + Ask when a site wants to see text and images copied to the clipboard </message> <message name="IDS_SETTINGS_SITE_SETTINGS_CLIPBOARD_ASK_RECOMMENDED" desc="The ask label for clipboard access in site settings (with the 'recommended' suffix)."> - Ask when a site wants to see text and images you copy to the clipboard (recommended) + Ask when a site wants to see text and images copied to the clipboard (recommended) </message> <message name="IDS_SETTINGS_SITE_SETTINGS_CLIPBOARD_BLOCK" desc="The block label for clipboard access in site settings."> - Do not allow sites to see text and images you copy to the clipboard + Do not allow sites to see text and images copied to the clipboard </message> <message name="IDS_SETTINGS_SITE_SETTINGS_COOKIES" desc="Label for the cookies site settings."> Cookies
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 817d2c9..49cfd65 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -3933,8 +3933,8 @@ if (enable_spellcheck) { sources += [ - "spellchecker/spell_check_host_impl.cc", - "spellchecker/spell_check_host_impl.h", + "spellchecker/spell_check_host_chrome_impl.cc", + "spellchecker/spell_check_host_chrome_impl.h", "spellchecker/spellcheck_custom_dictionary.cc", "spellchecker/spellcheck_custom_dictionary.h", "spellchecker/spellcheck_factory.cc",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index faf4b361..846a4a9 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -754,6 +754,8 @@ switches::kTLS13VariantDisabled}, {flag_descriptions::kTLS13VariantDraft22, switches::kTLS13Variant, switches::kTLS13VariantDraft22}, + {flag_descriptions::kTLS13VariantDraft23, switches::kTLS13Variant, + switches::kTLS13VariantDraft23}, }; #if !defined(OS_ANDROID)
diff --git a/chrome/browser/android/compositor/compositor_view.cc b/chrome/browser/android/compositor/compositor_view.cc index 25f87cc7..0d602df 100644 --- a/chrome/browser/android/compositor/compositor_view.cc +++ b/chrome/browser/android/compositor/compositor_view.cc
@@ -44,12 +44,12 @@ JNIEnv* env, const JavaParamRef<jobject>& obj, jboolean low_mem_device, - jlong native_window_android, + const JavaParamRef<jobject>& jwindow_android, const JavaParamRef<jobject>& jlayer_title_cache, const JavaParamRef<jobject>& jtab_content_manager) { CompositorView* view; ui::WindowAndroid* window_android = - reinterpret_cast<ui::WindowAndroid*>(native_window_android); + ui::WindowAndroid::FromJavaWindowAndroid(jwindow_android); LayerTitleCache* layer_title_cache = LayerTitleCache::FromJavaObject(jlayer_title_cache); TabContentManager* tab_content_manager = @@ -270,10 +270,12 @@ // through here but through BrowserChildProcessHostDisconnected() instead. } -void CompositorView::SetCompositorWindow(JNIEnv* env, - const JavaParamRef<jobject>& object, - jlong window_android) { - ui::WindowAndroid* wa = reinterpret_cast<ui::WindowAndroid*>(window_android); +void CompositorView::SetCompositorWindow( + JNIEnv* env, + const JavaParamRef<jobject>& object, + const JavaParamRef<jobject>& window_android) { + ui::WindowAndroid* wa = + ui::WindowAndroid::FromJavaWindowAndroid(window_android); compositor_->SetRootWindow(wa); }
diff --git a/chrome/browser/android/compositor/compositor_view.h b/chrome/browser/android/compositor/compositor_view.h index 42d2f54..7833cf8c 100644 --- a/chrome/browser/android/compositor/compositor_view.h +++ b/chrome/browser/android/compositor/compositor_view.h
@@ -81,9 +81,10 @@ void SetSceneLayer(JNIEnv* env, const base::android::JavaParamRef<jobject>& object, const base::android::JavaParamRef<jobject>& jscene_layer); - void SetCompositorWindow(JNIEnv* env, - const base::android::JavaParamRef<jobject>& object, - jlong window_android); + void SetCompositorWindow( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& object, + const base::android::JavaParamRef<jobject>& window_android); // CompositorClient implementation: void UpdateLayerTreeHost() override;
diff --git a/chrome/browser/android/feedback/screenshot_task.cc b/chrome/browser/android/feedback/screenshot_task.cc index 7f1790b..f60b8ca 100644 --- a/chrome/browser/android/feedback/screenshot_task.cc +++ b/chrome/browser/android/feedback/screenshot_task.cc
@@ -41,11 +41,11 @@ JNIEnv* env, const JavaParamRef<jclass>& clazz, const JavaParamRef<jobject>& jcallback, - jlong native_window_android, + const JavaParamRef<jobject>& jwindow_android, jint window_width, jint window_height) { - WindowAndroid* window_android = reinterpret_cast<WindowAndroid*>( - native_window_android); + ui::WindowAndroid* window_android = + ui::WindowAndroid::FromJavaWindowAndroid(jwindow_android); gfx::Rect window_bounds(window_width, window_height); ui::GrabWindowSnapshotAsyncPNG( window_android, window_bounds,
diff --git a/chrome/browser/android/ntp/android_content_suggestions_notifier.cc b/chrome/browser/android/ntp/android_content_suggestions_notifier.cc index 2a6e69eb..6b12a2d 100644 --- a/chrome/browser/android/ntp/android_content_suggestions_notifier.cc +++ b/chrome/browser/android/ntp/android_content_suggestions_notifier.cc
@@ -76,7 +76,8 @@ void AndroidContentSuggestionsNotifier::HideAllNotifications( ContentSuggestionsNotificationAction why) { JNIEnv* env = base::android::AttachCurrentThread(); - Java_ContentSuggestionsNotifier_hideAllNotifications(env, why); + Java_ContentSuggestionsNotifier_hideAllNotifications(env, + static_cast<int>(why)); } void AndroidContentSuggestionsNotifier::FlushCachedMetrics() { @@ -133,29 +134,32 @@ PrefService* prefs = profile->GetPrefs(); for (int i = 0; i < tap_count; ++i) { - RecordContentSuggestionsNotificationAction(CONTENT_SUGGESTIONS_TAP); + RecordContentSuggestionsNotificationAction( + ContentSuggestionsNotificationAction::TAP); } for (int i = 0; i < dismissal_count; ++i) { - RecordContentSuggestionsNotificationAction(CONTENT_SUGGESTIONS_DISMISSAL); + RecordContentSuggestionsNotificationAction( + ContentSuggestionsNotificationAction::DISMISSAL); } for (int i = 0; i < hide_deadline_count; ++i) { RecordContentSuggestionsNotificationAction( - CONTENT_SUGGESTIONS_HIDE_DEADLINE); + ContentSuggestionsNotificationAction::HIDE_DEADLINE); } for (int i = 0; i < hide_expiry_count; ++i) { - RecordContentSuggestionsNotificationAction(CONTENT_SUGGESTIONS_HIDE_EXPIRY); + RecordContentSuggestionsNotificationAction( + ContentSuggestionsNotificationAction::HIDE_EXPIRY); } for (int i = 0; i < hide_frontmost_count; ++i) { RecordContentSuggestionsNotificationAction( - CONTENT_SUGGESTIONS_HIDE_FRONTMOST); + ContentSuggestionsNotificationAction::HIDE_FRONTMOST); } for (int i = 0; i < hide_disabled_count; ++i) { RecordContentSuggestionsNotificationAction( - CONTENT_SUGGESTIONS_HIDE_DISABLED); + ContentSuggestionsNotificationAction::HIDE_DISABLED); } for (int i = 0; i < hide_shutdown_count; ++i) { RecordContentSuggestionsNotificationAction( - CONTENT_SUGGESTIONS_HIDE_SHUTDOWN); + ContentSuggestionsNotificationAction::HIDE_SHUTDOWN); } const bool was_enabled = @@ -172,6 +176,7 @@ const bool is_enabled = ContentSuggestionsNotifier::ShouldSendNotifications(prefs); if (was_enabled && !is_enabled) { - RecordContentSuggestionsNotificationOptOut(CONTENT_SUGGESTIONS_IMPLICIT); + RecordContentSuggestionsNotificationOptOut( + ContentSuggestionsNotificationOptOut::IMPLICIT); } }
diff --git a/chrome/browser/android/ntp/content_suggestions_notifier_service.cc b/chrome/browser/android/ntp/content_suggestions_notifier_service.cc index dcdfc8a..8e26edc3 100644 --- a/chrome/browser/android/ntp/content_suggestions_notifier_service.cc +++ b/chrome/browser/android/ntp/content_suggestions_notifier_service.cc
@@ -174,21 +174,25 @@ return; } if (!ntp_snippets::IsCategoryStatusAvailable(new_status)) { - notifier_->HideAllNotifications(CONTENT_SUGGESTIONS_HIDE_DISABLED); + notifier_->HideAllNotifications( + ContentSuggestionsNotificationAction::HIDE_DISABLED); } } void OnSuggestionInvalidated( const ContentSuggestion::ID& suggestion_id) override { - notifier_->HideNotification(suggestion_id, CONTENT_SUGGESTIONS_HIDE_EXPIRY); + notifier_->HideNotification( + suggestion_id, ContentSuggestionsNotificationAction::HIDE_EXPIRY); } void OnFullRefreshRequired() override { - notifier_->HideAllNotifications(CONTENT_SUGGESTIONS_HIDE_EXPIRY); + notifier_->HideAllNotifications( + ContentSuggestionsNotificationAction::HIDE_EXPIRY); } void ContentSuggestionsServiceShutdown() override { - notifier_->HideAllNotifications(CONTENT_SUGGESTIONS_HIDE_SHUTDOWN); + notifier_->HideAllNotifications( + ContentSuggestionsNotificationAction::HIDE_SHUTDOWN); } private: @@ -209,7 +213,8 @@ return; } if (!ShouldNotifyInState(state)) { - notifier_->HideAllNotifications(CONTENT_SUGGESTIONS_HIDE_FRONTMOST); + notifier_->HideAllNotifications( + ContentSuggestionsNotificationAction::HIDE_FRONTMOST); } } @@ -233,8 +238,8 @@ timeout_at, priority)) { RecordContentSuggestionsNotificationImpression( id.category().IsKnownCategory(KnownCategories::ARTICLES) - ? CONTENT_SUGGESTIONS_ARTICLE - : CONTENT_SUGGESTIONS_NONARTICLE); + ? ContentSuggestionsNotificationImpression::ARTICLE + : ContentSuggestionsNotificationImpression::NONARTICLE); } } @@ -298,7 +303,8 @@ Enable(); } else { Disable(); - RecordContentSuggestionsNotificationOptOut(CONTENT_SUGGESTIONS_EXPLICIT); + RecordContentSuggestionsNotificationOptOut( + ContentSuggestionsNotificationOptOut::EXPLICIT); } }
diff --git a/chrome/browser/android/vr_shell/vr_shell.cc b/chrome/browser/android/vr_shell/vr_shell.cc index d8ed85d3..7c2de26 100644 --- a/chrome/browser/android/vr_shell/vr_shell.cc +++ b/chrome/browser/android/vr_shell/vr_shell.cc
@@ -78,7 +78,7 @@ namespace vr_shell { namespace { -vr_shell::VrShell* g_instance; +vr_shell::VrShell* g_vr_shell_instance; constexpr base::TimeDelta poll_media_access_interval_ = base::TimeDelta::FromSecondsD(0.2); @@ -147,8 +147,8 @@ display_size_pixels_(display_width_pixels, display_height_pixels), weak_ptr_factory_(this) { DVLOG(1) << __FUNCTION__ << "=" << this; - DCHECK(g_instance == nullptr); - g_instance = this; + DCHECK(g_vr_shell_instance == nullptr); + g_vr_shell_instance = this; j_vr_shell_.Reset(env, obj); gl_thread_ = base::MakeUnique<VrGLThread>( @@ -279,7 +279,7 @@ base::ThreadRestrictions::ScopedAllowIO allow_io; gl_thread_.reset(); } - g_instance = nullptr; + g_vr_shell_instance = nullptr; } void VrShell::PostToGlThread(const base::Location& from_here, @@ -993,7 +993,7 @@ jlong JNI_VrShellImpl_Init(JNIEnv* env, const JavaParamRef<jobject>& obj, const JavaParamRef<jobject>& delegate, - jlong window_android, + const JavaParamRef<jobject>& jwindow_android, jboolean for_web_vr, jboolean web_vr_autopresentation_expected, jboolean in_cct, @@ -1019,7 +1019,7 @@ vr::AssetsLoader::GetInstance()->ComponentReady(); return reinterpret_cast<intptr_t>(new VrShell( - env, obj, reinterpret_cast<ui::WindowAndroid*>(window_android), + env, obj, ui::WindowAndroid::FromJavaWindowAndroid(jwindow_android), ui_initial_state, VrShellDelegate::GetNativeVrShellDelegate(env, delegate), reinterpret_cast<gvr_context*>(gvr_api), reprojected_rendering,
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc index df74ffa8..e4caf27 100644 --- a/chrome/browser/chrome_browser_main.cc +++ b/chrome/browser/chrome_browser_main.cc
@@ -655,8 +655,7 @@ metrics::CallStackProfileMetricsProvider:: GetProfilerCallbackForBrowserProcessStartup()), profile_(NULL), - run_message_loop_(true), - local_state_(NULL) { + run_message_loop_(true) { if (StackSamplingConfiguration::Get()->IsProfilerEnabledForCurrentProcess()) sampling_profiler_.Start(); @@ -778,20 +777,21 @@ base::TimeTicks::Now(), is_first_run, g_browser_process->local_state()); } -void ChromeBrowserMainParts::SetupOriginTrialsCommandLine() { +void ChromeBrowserMainParts::SetupOriginTrialsCommandLine( + PrefService* local_state) { base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); if (!command_line->HasSwitch(switches::kOriginTrialPublicKey)) { std::string new_public_key = - local_state_->GetString(prefs::kOriginTrialPublicKey); + local_state->GetString(prefs::kOriginTrialPublicKey); if (!new_public_key.empty()) { command_line->AppendSwitchASCII( switches::kOriginTrialPublicKey, - local_state_->GetString(prefs::kOriginTrialPublicKey)); + local_state->GetString(prefs::kOriginTrialPublicKey)); } } if (!command_line->HasSwitch(switches::kOriginTrialDisabledFeatures)) { const base::ListValue* override_disabled_feature_list = - local_state_->GetList(prefs::kOriginTrialDisabledFeatures); + local_state->GetList(prefs::kOriginTrialDisabledFeatures); if (override_disabled_feature_list) { std::vector<base::StringPiece> disabled_features; base::StringPiece disabled_feature; @@ -810,7 +810,7 @@ } if (!command_line->HasSwitch(switches::kOriginTrialDisabledTokens)) { const base::ListValue* disabled_token_list = - local_state_->GetList(prefs::kOriginTrialDisabledTokens); + local_state->GetList(prefs::kOriginTrialDisabledTokens); if (disabled_token_list) { std::vector<base::StringPiece> disabled_tokens; base::StringPiece disabled_token; @@ -967,8 +967,8 @@ std::make_unique<BrowserProcessImpl>(local_state_task_runner.get()); } - local_state_ = InitializeLocalState( - local_state_task_runner.get(), parsed_command_line()); + PrefService* local_state = InitializeLocalState(local_state_task_runner.get(), + parsed_command_line()); #if !defined(OS_ANDROID) // These members must be initialized before returning from this function. @@ -1012,7 +1012,7 @@ base::trace_event::TraceEventETWExport::EnableETWExport(); #endif // OS_WIN - local_state_->UpdateCommandLinePrefStore( + local_state->UpdateCommandLinePrefStore( new ChromeCommandLinePrefStore(base::CommandLine::ForCurrentProcess())); // Reset the command line in the crash report details, since we may have @@ -1028,8 +1028,7 @@ parameters().ui_task ? "en-US" : l10n_util::GetLocaleOverride(); browser_process_->SetApplicationLocale(locale); #else - const std::string locale = - local_state_->GetString(prefs::kApplicationLocale); + const std::string locale = local_state->GetString(prefs::kApplicationLocale); // On a POSIX OS other than ChromeOS, the parameter that is passed to the // method InitSharedInstance is ignored. @@ -1092,18 +1091,18 @@ // Store the initial VariationsService seed in local state, if it exists // in master prefs. if (!master_prefs_->compressed_variations_seed.empty()) { - local_state_->SetString(variations::prefs::kVariationsCompressedSeed, - master_prefs_->compressed_variations_seed); + local_state->SetString(variations::prefs::kVariationsCompressedSeed, + master_prefs_->compressed_variations_seed); if (!master_prefs_->variations_seed_signature.empty()) { - local_state_->SetString(variations::prefs::kVariationsSeedSignature, - master_prefs_->variations_seed_signature); + local_state->SetString(variations::prefs::kVariationsSeedSignature, + master_prefs_->variations_seed_signature); } // Set the variation seed date to the current system time. If the user's // clock is incorrect, this may cause some field trial expiry checks to // not do the right thing until the next seed update from the server, // when this value will be updated. - local_state_->SetInt64(variations::prefs::kVariationsSeedDate, - base::Time::Now().ToInternalValue()); + local_state->SetInt64(variations::prefs::kVariationsSeedDate, + base::Time::Now().ToInternalValue()); } #if defined(OS_MACOSX) || defined(OS_LINUX) @@ -1118,14 +1117,14 @@ #endif // defined(OS_MACOSX) || defined(OS_LINUX) if (!master_prefs_->suppress_default_browser_prompt_for_version.empty()) { - local_state_->SetString( + local_state->SetString( prefs::kBrowserSuppressDefaultBrowserPrompt, master_prefs_->suppress_default_browser_prompt_for_version); } #if defined(OS_WIN) if (!master_prefs_->welcome_page_on_os_upgrade_enabled) - local_state_->SetBoolean(prefs::kWelcomePageOnOSUpgradeEnabled, false); + local_state->SetBoolean(prefs::kWelcomePageOnOSUpgradeEnabled, false); #endif } #endif // !defined(OS_ANDROID) && !defined(OS_CHROMEOS) @@ -1151,7 +1150,7 @@ chromeos::CrosSettings::Initialize(); #endif // defined(OS_CHROMEOS) - SetupOriginTrialsCommandLine(); + SetupOriginTrialsCommandLine(local_state); #if BUILDFLAG(ENABLE_VR) content::WebvrServiceProvider::SetWebvrServiceCallback( @@ -1167,7 +1166,6 @@ // Add Site Isolation switches as dictated by policy. auto* command_line = base::CommandLine::ForCurrentProcess(); - auto* local_state = g_browser_process->local_state(); if (local_state->GetBoolean(prefs::kSitePerProcess) && !command_line->HasSwitch(switches::kSitePerProcess)) { command_line->AppendSwitch(switches::kSitePerProcess);
diff --git a/chrome/browser/chrome_browser_main.h b/chrome/browser/chrome_browser_main.h index 1ebe250d..c6c7fa3 100644 --- a/chrome/browser/chrome_browser_main.h +++ b/chrome/browser/chrome_browser_main.h
@@ -95,8 +95,6 @@ Profile* profile() { return profile_; } - const PrefService* local_state() const { return local_state_; } - private: // Sets up the field trials and related initialization. Call only after // about:flags have been converted to switches. @@ -114,7 +112,7 @@ // Reads origin trial policy data from local state and configures command line // for child processes. - void SetupOriginTrialsCommandLine(); + void SetupOriginTrialsCommandLine(PrefService* local_state); // Methods for Main Message Loop ------------------------------------------- @@ -182,9 +180,6 @@ // Initialized in |SetupFieldTrials()|. scoped_refptr<FieldTrialSynchronizer> field_trial_synchronizer_; - // Members initialized in PreMainMessageLoopRun, needed in - // PreMainMessageLoopRunThreadsCreated. - PrefService* local_state_; base::FilePath user_data_dir_; DISALLOW_COPY_AND_ASSIGN(ChromeBrowserMainParts);
diff --git a/chrome/browser/chrome_service.cc b/chrome/browser/chrome_service.cc index 3ea50d9b..1bd2e1d 100644 --- a/chrome/browser/chrome_service.cc +++ b/chrome/browser/chrome_service.cc
@@ -11,7 +11,7 @@ #include "content/public/common/content_client.h" #if BUILDFLAG(ENABLE_SPELLCHECK) -#include "chrome/browser/spellchecker/spell_check_host_impl.h" +#include "chrome/browser/spellchecker/spell_check_host_chrome_impl.h" #if BUILDFLAG(HAS_SPELLCHECK_PANEL) #include "chrome/browser/spellchecker/spell_check_panel_host_impl.h" #endif @@ -35,7 +35,7 @@ base::Bind(&startup_metric_utils::StartupMetricHostImpl::Create)); #if BUILDFLAG(ENABLE_SPELLCHECK) registry_with_source_info_.AddInterface( - base::Bind(&SpellCheckHostImpl::Create), + base::BindRepeating(&SpellCheckHostChromeImpl::Create), content::BrowserThread::GetTaskRunnerForThread( content::BrowserThread::UI)); #if BUILDFLAG(HAS_SPELLCHECK_PANEL)
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index 614490f..2569847 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -234,8 +234,6 @@ "accessibility/accessibility_highlight_manager.h", "accessibility/accessibility_manager.cc", "accessibility/accessibility_manager.h", - "accessibility/accessibility_util.cc", - "accessibility/accessibility_util.h", "accessibility/chromevox_panel.cc", "accessibility/chromevox_panel.h", "accessibility/event_handler_common.cc", @@ -1674,6 +1672,8 @@ testonly = true sources = [ + "app_mode/test_kiosk_extension_builder.cc", + "app_mode/test_kiosk_extension_builder.h", "extensions/test_external_cache.cc", "extensions/test_external_cache.h", "lock_screen_apps/fake_lock_screen_profile_creator.cc", @@ -1731,6 +1731,7 @@ "accessibility/magnification_manager_unittest.cc", "accessibility/select_to_speak_event_rewriter_unittest.cc", "accessibility/spoken_feedback_event_rewriter_unittest.cc", + "app_mode/startup_app_launcher_unittest.cc", "arc/accessibility/arc_accessibility_helper_bridge_unittest.cc", "arc/arc_play_store_enabled_preference_handler_unittest.cc", "arc/arc_session_manager_unittest.cc",
diff --git a/chrome/browser/chromeos/accessibility/accessibility_manager.cc b/chrome/browser/chromeos/accessibility/accessibility_manager.cc index 718b581f..3445ae4 100644 --- a/chrome/browser/chromeos/accessibility/accessibility_manager.cc +++ b/chrome/browser/chromeos/accessibility/accessibility_manager.cc
@@ -51,10 +51,12 @@ #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" +#include "chrome/browser/ui/singleton_tabs.h" #include "chrome/common/chrome_paths.h" #include "chrome/common/extensions/api/accessibility_private.h" #include "chrome/common/extensions/extension_constants.h" #include "chrome/common/pref_names.h" +#include "chrome/common/url_constants.h" #include "chrome/grit/browser_resources.h" #include "chromeos/audio/chromeos_sounds.h" #include "chromeos/chromeos_switches.h" @@ -89,6 +91,7 @@ #include "ui/keyboard/keyboard_util.h" #include "ui/views/widget/widget.h" #include "ui/views/widget/widget_observer.h" +#include "url/gurl.h" using content::BrowserThread; using extensions::api::braille_display_private::BrailleController; @@ -233,6 +236,11 @@ return g_accessibility_manager; } +// static +void AccessibilityManager::ShowAccessibilityHelp(Browser* browser) { + ShowSingletonTab(browser, GURL(chrome::kChromeAccessibilityHelpURL)); +} + AccessibilityManager::AccessibilityManager() : profile_(NULL), large_cursor_pref_handler_(ash::prefs::kAccessibilityLargeCursorEnabled),
diff --git a/chrome/browser/chromeos/accessibility/accessibility_manager.h b/chrome/browser/chromeos/accessibility/accessibility_manager.h index a1b21e9..56998deb 100644 --- a/chrome/browser/chromeos/accessibility/accessibility_manager.h +++ b/chrome/browser/chromeos/accessibility/accessibility_manager.h
@@ -16,7 +16,6 @@ #include "base/memory/weak_ptr.h" #include "base/scoped_observer.h" #include "base/time/time.h" -#include "chrome/browser/chromeos/accessibility/accessibility_util.h" #include "chrome/browser/chromeos/accessibility/chromevox_panel.h" #include "chrome/browser/extensions/api/braille_display_private/braille_controller.h" #include "components/prefs/pref_change_registrar.h" @@ -28,6 +27,7 @@ #include "extensions/browser/extension_system.h" #include "ui/base/ime/chromeos/input_method_manager.h" +class Browser; class Profile; namespace gfx { @@ -108,6 +108,9 @@ // Returns the existing instance. If there is no instance, returns NULL. static AccessibilityManager* Get(); + // Show the accessibility help as a tab in the browser. + static void ShowAccessibilityHelp(Browser* browser); + // On a user's first login into a device, any a11y features enabled/disabled // by the user on the login screen are enabled/disabled in the user's profile. // This class watches for profile changes and copies settings into the user's
diff --git a/chrome/browser/chromeos/accessibility/accessibility_util.cc b/chrome/browser/chromeos/accessibility/accessibility_util.cc deleted file mode 100644 index 6b368f9f..0000000 --- a/chrome/browser/chromeos/accessibility/accessibility_util.cc +++ /dev/null
@@ -1,43 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/chromeos/accessibility/accessibility_util.h" - -#include "ash/public/cpp/ash_pref_names.h" -#include "chrome/browser/browser_process.h" -#include "chrome/browser/ui/singleton_tabs.h" -#include "chrome/common/url_constants.h" -#include "components/prefs/pref_service.h" -#include "url/gurl.h" - -// TODO(yoshiki): move the following method to accessibility_manager.cc and -// remove this file. - -namespace chromeos { -namespace accessibility { - -void EnableVirtualKeyboard(bool enabled) { - PrefService* pref_service = g_browser_process->local_state(); - pref_service->SetBoolean(ash::prefs::kAccessibilityVirtualKeyboardEnabled, - enabled); - pref_service->CommitPendingWrite(); -} - -bool IsVirtualKeyboardEnabled() { - if (!g_browser_process) { - return false; - } - PrefService* prefs = g_browser_process->local_state(); - bool virtual_keyboard_enabled = - prefs && - prefs->GetBoolean(ash::prefs::kAccessibilityVirtualKeyboardEnabled); - return virtual_keyboard_enabled; -} - -void ShowAccessibilityHelp(Browser* browser) { - ShowSingletonTab(browser, GURL(chrome::kChromeAccessibilityHelpURL)); -} - -} // namespace accessibility -} // namespace chromeos
diff --git a/chrome/browser/chromeos/accessibility/accessibility_util.h b/chrome/browser/chromeos/accessibility/accessibility_util.h deleted file mode 100644 index 7f70312..0000000 --- a/chrome/browser/chromeos/accessibility/accessibility_util.h +++ /dev/null
@@ -1,25 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_CHROMEOS_ACCESSIBILITY_ACCESSIBILITY_UTIL_H_ -#define CHROME_BROWSER_CHROMEOS_ACCESSIBILITY_ACCESSIBILITY_UTIL_H_ - -class Browser; - -namespace chromeos { -namespace accessibility { - -// Enables or disable the virtual keyboard. -void EnableVirtualKeyboard(bool enabled); - -// Returns true if the Virtual Keyboard is enabled, or false if not. -bool IsVirtualKeyboardEnabled(); - -// Shows the accessibility help tab on the browser. -void ShowAccessibilityHelp(Browser* browser); - -} // namespace accessibility -} // namespace chromeos - -#endif // CHROME_BROWSER_CHROMEOS_ACCESSIBILITY_ACCESSIBILITY_UTIL_H_
diff --git a/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.cc b/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.cc index d066905..f221d70 100644 --- a/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.cc +++ b/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.cc
@@ -16,8 +16,6 @@ #include "ui/base/layout.h" #include "ui/display/display.h" #include "ui/display/screen.h" -#include "ui/message_center/message_center.h" -#include "ui/message_center/notification_blocker.h" namespace chromeos { @@ -25,31 +23,6 @@ constexpr base::TimeDelta kArcKioskMaintenanceSessionTimeout = base::TimeDelta::FromMinutes(30); -// Blocks all notifications for ARC Kiosk -class ArcKioskNotificationBlocker : public message_center::NotificationBlocker { - public: - ArcKioskNotificationBlocker() - : message_center::NotificationBlocker( - message_center::MessageCenter::Get()) { - NotifyBlockingStateChanged(); - } - - ~ArcKioskNotificationBlocker() override {} - - private: - bool ShouldShowNotification( - const message_center::Notification& notification) const override { - return false; - } - - bool ShouldShowNotificationAsPopup( - const message_center::Notification& notification) const override { - return false; - } - - DISALLOW_COPY_AND_ASSIGN(ArcKioskNotificationBlocker); -}; - // static ArcKioskAppService* ArcKioskAppService::Create(Profile* profile) { return new ArcKioskAppService(profile); @@ -160,7 +133,6 @@ arc::prefs::kArcPolicyComplianceReported, base::Bind(&ArcKioskAppService::PreconditionsChanged, base::Unretained(this))); - notification_blocker_.reset(new ArcKioskNotificationBlocker()); PreconditionsChanged(); }
diff --git a/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.h b/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.h index a210341..42fc942 100644 --- a/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.h +++ b/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.h
@@ -23,8 +23,6 @@ namespace chromeos { -class ArcKioskNotificationBlocker; - // Keeps track of ARC session state and auto-launches kiosk app when it's ready. // App is started when the following conditions are satisfied: // 1. App id is registered in ArcAppListPrefs and set to "ready" state. @@ -105,7 +103,6 @@ std::unique_ptr<PrefChangeRegistrar> pref_change_registrar_; // Keeps track whether the app is already launched std::unique_ptr<ArcKioskAppLauncher> app_launcher_; - std::unique_ptr<ArcKioskNotificationBlocker> notification_blocker_; // Not owning the delegate, delegate removes itself in destructor Delegate* delegate_ = nullptr;
diff --git a/chrome/browser/chromeos/app_mode/kiosk_app_manager.cc b/chrome/browser/chromeos/app_mode/kiosk_app_manager.cc index d166a82..22e3611 100644 --- a/chrome/browser/chromeos/app_mode/kiosk_app_manager.cc +++ b/chrome/browser/chromeos/app_mode/kiosk_app_manager.cc
@@ -74,6 +74,8 @@ // its signature. constexpr char kCrxUnpackDir[] = "kiosk_unpack"; +KioskAppManager::Overrides* g_test_overrides = nullptr; + std::string GenerateKioskAppAccountId(const std::string& app_id) { return app_id + '@' + kKioskAppAccountDomain; } @@ -161,6 +163,9 @@ std::unique_ptr<ExternalCache> CreateExternalCache( ExternalCacheDelegate* delegate) { + if (g_test_overrides) + return g_test_overrides->CreateExternalCache(delegate, true); + auto cache = std::make_unique<ExternalCacheImpl>( GetCrxCacheDir(), g_browser_process->system_request_context(), GetBackgroundTaskRunner(), delegate, true /* always_check_updates */, @@ -169,6 +174,12 @@ return cache; } +std::unique_ptr<AppSession> CreateAppSession() { + if (g_test_overrides) + return g_test_overrides->CreateAppSession(); + return std::make_unique<AppSession>(); +} + base::Version GetPlatformVersion() { int32_t major_version; int32_t minor_version; @@ -202,11 +213,19 @@ } // static +void KioskAppManager::InitializeForTesting(Overrides* overrides) { + DCHECK(!instance.IsCreated()); + g_test_overrides = overrides; +} + +// static void KioskAppManager::Shutdown() { if (!instance.IsCreated()) return; instance.Pointer()->CleanUp(); + + g_test_overrides = nullptr; } // static @@ -295,8 +314,9 @@ flags); } - app_session_.reset(new AppSession); - app_session_->Init(profile, app_id); + app_session_ = CreateAppSession(); + if (app_session_) + app_session_->Init(profile, app_id); } bool KioskAppManager::GetSwitchesForSessionRestore(
diff --git a/chrome/browser/chromeos/app_mode/kiosk_app_manager.h b/chrome/browser/chromeos/app_mode/kiosk_app_manager.h index 987161e..24482b5 100644 --- a/chrome/browser/chromeos/app_mode/kiosk_app_manager.h +++ b/chrome/browser/chromeos/app_mode/kiosk_app_manager.h
@@ -39,6 +39,7 @@ namespace chromeos { class AppSession; +class ExternalCache; class KioskAppData; class KioskAppManagerObserver; class KioskExternalUpdater; @@ -81,6 +82,26 @@ }; typedef std::vector<App> Apps; + // Interface that can be used to override default KioskAppManager behavior. + // For example, it can be used in tests to inject test components + // implementations. + class Overrides { + public: + virtual ~Overrides() = default; + + // Creates the external cache that should be used by the + // KioskAppManager. It should always return a valid object. + virtual std::unique_ptr<ExternalCache> CreateExternalCache( + ExternalCacheDelegate* delegate, + bool always_check_updates) = 0; + + // Creates an AppSession object that will mantain a started kiosk app + // session. + // Called when the KioskAppManager initializes the session. + // It can return nullptr. + virtual std::unique_ptr<AppSession> CreateAppSession() = 0; + }; + // Name of a dictionary that holds kiosk app info in Local State. // Sample layout: // "kiosk": { @@ -92,9 +113,15 @@ // Sub directory under DIR_USER_DATA to store cached icon files. static const char kIconCacheDir[]; - // Gets the KioskAppManager instance, which is lazily created on first call.. + // Gets the KioskAppManager instance, which is lazily created on first call. static KioskAppManager* Get(); + // Initializes KioskAppManager for testing, injecting the provided overrides. + // |overrides| can be null, in which case KioskAppManager will use default + // behavior. + // Must be called before Get(). + static void InitializeForTesting(Overrides* overrides); + // Prepares for shutdown and calls CleanUp() if needed. static void Shutdown();
diff --git a/chrome/browser/chromeos/app_mode/startup_app_launcher.cc b/chrome/browser/chromeos/app_mode/startup_app_launcher.cc index d3d0b0c..cbe9800 100644 --- a/chrome/browser/chromeos/app_mode/startup_app_launcher.cc +++ b/chrome/browser/chromeos/app_mode/startup_app_launcher.cc
@@ -71,8 +71,10 @@ void StartupAppLauncher::ContinueWithNetworkReady() { SYSLOG(INFO) << "ContinueWithNetworkReady" - << ", network_ready_handled_=" << network_ready_handled_; - if (network_ready_handled_) + << ", network_ready_handled_=" << network_ready_handled_ + << ", ready_to_launch_=" << ready_to_launch_; + + if (ready_to_launch_ || network_ready_handled_) return; network_ready_handled_ = true; @@ -90,6 +92,10 @@ } void StartupAppLauncher::RestartLauncher() { + // Do not allow restarts after the launcher finishes kiosk apps installation. + if (ready_to_launch_) + return; + // If the installer is still running in the background, we don't need to // restart the launch process. We will just wait until it completes and // launches the kiosk app. @@ -105,6 +111,8 @@ } void StartupAppLauncher::MaybeInitializeNetwork() { + DCHECK(!ready_to_launch_); + network_ready_handled_ = false; const Extension* extension = GetPrimaryAppExtension(); @@ -137,6 +145,8 @@ } void StartupAppLauncher::MaybeLaunchApp() { + DCHECK(!ready_to_launch_); + SYSLOG(INFO) << "MaybeLaunchApp"; const Extension* extension = GetPrimaryAppExtension(); // Verify that requred apps are installed. While the apps should be @@ -153,6 +163,11 @@ // If the app is not offline enabled, make sure the network is ready before // launching. if (offline_enabled || delegate_->IsNetworkReady()) { + ready_to_launch_ = true; + // Updates to cached primary app crx will be ignored after this point, so + // there is no need to observe the kiosk app manager any longer. + kiosk_app_manager_observer_.RemoveAll(); + base::ThreadTaskRunnerHandle::Get()->PostTask( FROM_HERE, base::BindOnce(&StartupAppLauncher::OnReadyToLaunch, weak_ptr_factory_.GetWeakPtr())); @@ -169,6 +184,8 @@ } void StartupAppLauncher::MaybeCheckExtensionUpdate() { + DCHECK(!ready_to_launch_); + SYSLOG(INFO) << "MaybeCheckExtensionUpdate"; if (!delegate_->IsNetworkReady()) { MaybeLaunchApp(); @@ -192,9 +209,10 @@ } void StartupAppLauncher::OnExtensionUpdateCheckFinished(bool update_found) { - update_checker_.reset(); + DCHECK(!ready_to_launch_); SYSLOG(INFO) << "OnExtensionUpdateCheckFinished"; + update_checker_.reset(); if (update_found) { // Reload the primary app to make sure any reference to the previous version // of the shared module, extension, etc will be cleaned up andthe new @@ -209,8 +227,17 @@ void StartupAppLauncher::OnFinishCrxInstall(const std::string& extension_id, bool success) { + DCHECK(!ready_to_launch_); + SYSLOG(INFO) << "OnFinishCrxInstall, id=" << extension_id << ", success=" << success; + + if (DidPrimaryOrSecondaryAppFailedToInstall(success, extension_id)) { + install_observer_.RemoveAll(); + OnLaunchFailure(KioskAppLaunchError::UNABLE_TO_INSTALL); + return; + } + // Wait for pending updates or dependent extensions to download. if (extensions::ExtensionSystem::Get(profile_) ->extension_service() @@ -226,22 +253,20 @@ } const extensions::Extension* primary_app = GetPrimaryAppExtension(); - if (primary_app && !extensions::KioskModeInfo::IsKioskEnabled(primary_app)) { - OnLaunchFailure(KioskAppLaunchError::NOT_KIOSK_ENABLED); - return; - } - - if (DidPrimaryOrSecondaryAppFailedToInstall(success, extension_id)) { + if (!primary_app) { OnLaunchFailure(KioskAppLaunchError::UNABLE_TO_INSTALL); return; } - if (primary_app) { - if (!secondary_apps_installed_) - MaybeInstallSecondaryApps(); - else - MaybeCheckExtensionUpdate(); + if (!extensions::KioskModeInfo::IsKioskEnabled(primary_app)) { + OnLaunchFailure(KioskAppLaunchError::NOT_KIOSK_ENABLED); + return; } + + if (!secondary_apps_installed_) + MaybeInstallSecondaryApps(); + else + MaybeCheckExtensionUpdate(); } void StartupAppLauncher::OnKioskExtensionLoadedInCache( @@ -256,6 +281,8 @@ void StartupAppLauncher::OnKioskAppDataLoadStatusChanged( const std::string& app_id) { + DCHECK(!ready_to_launch_); + if (app_id != app_id_ || !wait_for_crx_update_) return; @@ -388,6 +415,8 @@ } void StartupAppLauncher::BeginInstall() { + DCHECK(!ready_to_launch_); + SYSLOG(INFO) << "BeginInstall"; extensions::file_util::SetUseSafeInstallation(true); KioskAppManager::Get()->UpdatePrimaryAppLoaderPrefs(app_id_); @@ -420,6 +449,9 @@ } void StartupAppLauncher::MaybeInstallSecondaryApps() { + if (ready_to_launch_) + return; + if (!AreSecondaryAppsInstalled() && !delegate_->IsNetworkReady()) { DelayNetworkCall( base::TimeDelta::FromMilliseconds(kDefaultNetworkRetryDelayMS), @@ -450,8 +482,8 @@ } void StartupAppLauncher::OnReadyToLaunch() { + DCHECK(ready_to_launch_); SYSLOG(INFO) << "Kiosk app is ready to launch."; - ready_to_launch_ = true; MaybeUpdateAppData(); delegate_->OnReadyToLaunch(); }
diff --git a/chrome/browser/chromeos/app_mode/startup_app_launcher_unittest.cc b/chrome/browser/chromeos/app_mode/startup_app_launcher_unittest.cc new file mode 100644 index 0000000..0469d11 --- /dev/null +++ b/chrome/browser/chromeos/app_mode/startup_app_launcher_unittest.cc
@@ -0,0 +1,980 @@ +// Copyright 2018 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/app_mode/startup_app_launcher.h" + +#include <memory> +#include <set> +#include <string> +#include <utility> +#include <vector> + +#include "base/callback.h" +#include "base/command_line.h" +#include "base/compiler_specific.h" +#include "base/files/file_path.h" +#include "base/macros.h" +#include "base/memory/ref_counted.h" +#include "base/run_loop.h" +#include "base/test/scoped_command_line.h" +#include "base/version.h" +#include "chrome/browser/chromeos/app_mode/app_session.h" +#include "chrome/browser/chromeos/app_mode/kiosk_app_external_loader.h" +#include "chrome/browser/chromeos/app_mode/kiosk_app_launch_error.h" +#include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" +#include "chrome/browser/chromeos/app_mode/test_kiosk_extension_builder.h" +#include "chrome/browser/chromeos/extensions/test_external_cache.h" +#include "chrome/browser/chromeos/policy/device_local_account.h" +#include "chrome/browser/chromeos/settings/scoped_cros_settings_test_helper.h" +#include "chrome/browser/extensions/extension_service.h" +#include "chrome/browser/extensions/extension_service_test_base.h" +#include "chrome/browser/extensions/external_provider_impl.h" +#include "chrome/browser/extensions/install_tracker.h" +#include "chrome/browser/extensions/pending_extension_manager.h" +#include "chrome/common/chrome_switches.h" +#include "chromeos/settings/cros_settings_names.h" +#include "components/session_manager/core/session_manager.h" +#include "components/signin/core/account_id/account_id.h" +#include "extensions/browser/external_install_info.h" +#include "extensions/browser/test_event_router.h" +#include "extensions/common/api/app_runtime.h" +#include "extensions/common/extension.h" +#include "extensions/common/manifest.h" +#include "url/gurl.h" + +using extensions::ExternalInstallInfoFile; +using extensions::ExternalInstallInfoUpdateUrl; +using extensions::Manifest; +using ::testing::AssertionFailure; +using ::testing::AssertionResult; +using ::testing::AssertionSuccess; + +namespace chromeos { + +namespace { + +constexpr char kTestPrimaryAppId[] = "abcdefghabcdefghabcdefghabcdefgh"; + +constexpr char kSecondaryAppId[] = "aaaabbbbaaaabbbbaaaabbbbaaaabbbb"; + +constexpr char kExtraSecondaryAppId[] = "aaaaccccaaaaccccaaaaccccaaaacccc"; + +constexpr char kTestUserAccount[] = "user@test"; + +enum class LaunchState { + kNotStarted, + kInitializingNetwork, + kInstallingApp, + kReadyToLaunch, + kLaunchSucceeded, + kLaunchFailed +}; + +class TestAppLaunchDelegate : public StartupAppLauncher::Delegate { + public: + TestAppLaunchDelegate() = default; + ~TestAppLaunchDelegate() override = default; + + const std::vector<LaunchState>& launch_state_changes() const { + return launch_state_changes_; + } + KioskAppLaunchError::Error launch_error() const { return launch_error_; } + + void set_network_ready(bool network_ready) { network_ready_ = network_ready; } + void set_should_skip_app_installation(bool skip_app_installation) { + should_skip_app_installation_ = skip_app_installation; + } + void set_showing_network_config_screen(bool showing) { + showing_network_config_screen_ = showing; + } + + void ClearLaunchStateChanges() { launch_state_changes_.clear(); } + + void WaitForLaunchStates(const std::set<LaunchState>& states) { + if (states.count(launch_state_)) + return; + + ASSERT_FALSE(run_loop_.get()); + + waiting_for_launch_states_ = states; + run_loop_ = std::make_unique<base::RunLoop>(); + run_loop_->Run(); + } + + // StartupAppLauncher::Delegate: + void InitializeNetwork() override { + SetLaunchState(LaunchState::kInitializingNetwork); + } + bool IsNetworkReady() override { return network_ready_; } + bool ShouldSkipAppInstallation() override { + return should_skip_app_installation_; + } + void OnInstallingApp() override { + SetLaunchState(LaunchState::kInstallingApp); + } + void OnReadyToLaunch() override { + SetLaunchState(LaunchState::kReadyToLaunch); + } + void OnLaunchSucceeded() override { + SetLaunchState(LaunchState::kLaunchSucceeded); + } + void OnLaunchFailed(KioskAppLaunchError::Error error) override { + launch_error_ = error; + SetLaunchState(LaunchState::kLaunchFailed); + } + bool IsShowingNetworkConfigScreen() override { + return showing_network_config_screen_; + } + + private: + void SetLaunchState(LaunchState state) { + launch_state_changes_.push_back(state); + launch_state_ = state; + + if (run_loop_ && waiting_for_launch_states_.count(state)) { + waiting_for_launch_states_.clear(); + std::move(run_loop_)->Quit(); + } + } + + LaunchState launch_state_ = LaunchState::kNotStarted; + std::vector<LaunchState> launch_state_changes_; + KioskAppLaunchError::Error launch_error_ = KioskAppLaunchError::NONE; + + bool network_ready_ = false; + bool showing_network_config_screen_ = false; + + bool should_skip_app_installation_ = false; + + std::unique_ptr<base::RunLoop> run_loop_; + std::set<LaunchState> waiting_for_launch_states_; + + DISALLOW_COPY_AND_ASSIGN(TestAppLaunchDelegate); +}; + +class AppLaunchTracker : public extensions::TestEventRouter::EventObserver { + public: + AppLaunchTracker(const std::string& app_id, + extensions::TestEventRouter* event_router) + : app_id_(app_id), event_router_(event_router) { + event_router->AddEventObserver(this); + } + ~AppLaunchTracker() override { event_router_->RemoveEventObserver(this); } + + int kiosk_launch_count() const { return kiosk_launch_count_; } + + // TestEventRouter::EventObserver: + void OnBroadcastEvent(const extensions::Event& event) override { + ADD_FAILURE() << "Unexpected broadcast " << event.event_name; + } + + void OnDispatchEventToExtension(const std::string& extension_id, + const extensions::Event& event) override { + ASSERT_EQ(extension_id, app_id_); + + ASSERT_EQ(event.event_name, + extensions::api::app_runtime::OnLaunched::kEventName); + ASSERT_TRUE(event.event_args); + ASSERT_EQ(1u, event.event_args->GetList().size()); + + const base::Value& launch_data = event.event_args->GetList()[0]; + const base::Value* is_kiosk_session = + launch_data.FindKeyOfType("isKioskSession", base::Value::Type::BOOLEAN); + ASSERT_TRUE(is_kiosk_session); + EXPECT_TRUE(is_kiosk_session->GetBool()); + ++kiosk_launch_count_; + } + + private: + const std::string app_id_; + extensions::TestEventRouter* event_router_; + int kiosk_launch_count_ = 0; + + DISALLOW_COPY_AND_ASSIGN(AppLaunchTracker); +}; + +// Simulates extension service behavior related to external extensions loading, +// but does not initiate found extension's CRX installation - instead, it keeps +// track of pending extension installations, and expect the test code to finish +// the pending extension installations. +class TestKioskLoaderVisitor + : public extensions::ExternalProviderInterface::VisitorInterface { + public: + TestKioskLoaderVisitor(content::BrowserContext* browser_context, + ExtensionService* extension_service) + : browser_context_(browser_context), + extension_service_(extension_service) {} + + ~TestKioskLoaderVisitor() override = default; + + const std::set<std::string>& pending_crx_files() const { + return pending_crx_files_; + } + const std::set<std::string>& pending_update_urls() const { + return pending_update_urls_; + } + + bool FinishPendingInstall(const extensions::Extension* extension) { + if (!pending_crx_files_.count(extension->id()) && + !pending_update_urls_.count(extension->id())) { + return false; + } + + if (!extension_service_->pending_extension_manager()->IsIdPending( + extension->id())) { + return false; + } + + pending_crx_files_.erase(extension->id()); + pending_update_urls_.erase(extension->id()); + extension_service_->OnExtensionInstalled( + extension, syncer::StringOrdinal::CreateInitialOrdinal(), + extensions::kInstallFlagInstallImmediately); + extensions::InstallTracker::Get(browser_context_) + ->OnFinishCrxInstall(extension->id(), true); + return true; + } + + bool FailPendingInstall(const std::string& extension_id) { + if (!pending_crx_files_.count(extension_id) && + !pending_update_urls_.count(extension_id)) { + return false; + } + + if (!extension_service_->pending_extension_manager()->IsIdPending( + extension_id)) { + return false; + } + + pending_crx_files_.erase(extension_id); + pending_update_urls_.erase(extension_id); + extensions::InstallTracker::Get(browser_context_) + ->OnFinishCrxInstall(extension_id, false); + return true; + } + + // extensions::ExternalProviderInterface::VisitorInterface: + bool OnExternalExtensionFileFound( + const ExternalInstallInfoFile& info) override { + const extensions::Extension* existing = + extension_service_->GetExtensionById(info.extension_id, true); + // Alredy exists, and does not require update. + if (existing && existing->version().CompareTo(info.version) >= 0) + return false; + + if (!extension_service_->pending_extension_manager()->AddFromExternalFile( + info.extension_id, info.crx_location, info.version, + info.creation_flags, info.mark_acknowledged)) { + return false; + } + + pending_crx_files_.insert(info.extension_id); + extensions::InstallTracker::Get(browser_context_) + ->OnBeginCrxInstall(info.extension_id); + return true; + } + bool OnExternalExtensionUpdateUrlFound( + const ExternalInstallInfoUpdateUrl& info, + bool is_initial_load) override { + if (extension_service_->GetExtensionById(info.extension_id, true)) + return false; + + if (!extension_service_->pending_extension_manager() + ->AddFromExternalUpdateUrl( + info.extension_id, info.install_parameter, info.update_url, + info.download_location, info.creation_flags, + info.mark_acknowledged)) { + return false; + } + + pending_update_urls_.insert(info.extension_id); + extensions::InstallTracker::Get(browser_context_) + ->OnBeginCrxInstall(info.extension_id); + return true; + } + void OnExternalProviderReady( + const extensions::ExternalProviderInterface* provider) override {} + void OnExternalProviderUpdateComplete( + const extensions::ExternalProviderInterface* provider, + const std::vector<ExternalInstallInfoUpdateUrl>& update_url_extensions, + const std::vector<ExternalInstallInfoFile>& file_extensions, + const std::set<std::string>& removed_extensions) override { + for (const auto& extension : update_url_extensions) + OnExternalExtensionUpdateUrlFound(extension, false); + + for (const auto& extension : file_extensions) + OnExternalExtensionFileFound(extension); + + for (const auto& extension_id : removed_extensions) { + extension_service_->UninstallExtension( + extension_id, + extensions::UNINSTALL_REASON_ORPHANED_EXTERNAL_EXTENSION, nullptr); + } + } + + private: + content::BrowserContext* const browser_context_; + ExtensionService* const extension_service_; + + std::set<std::string> pending_crx_files_; + std::set<std::string> pending_update_urls_; + + DISALLOW_COPY_AND_ASSIGN(TestKioskLoaderVisitor); +}; + +} // namespace + +class StartupAppLauncherTest : public extensions::ExtensionServiceTestBase, + public KioskAppManager::Overrides { + public: + StartupAppLauncherTest() = default; + ~StartupAppLauncherTest() override = default; + + // testing::Test: + void SetUp() override { + command_line_.GetProcessCommandLine()->AppendSwitch( + switches::kForceAppMode); + command_line_.GetProcessCommandLine()->AppendSwitch(switches::kAppId); + + KioskAppManager::InitializeForTesting(this); + + InitializePrimaryAppState(); + + extensions::ExtensionServiceTestBase::SetUp(); + + InitializeEmptyExtensionService(); + external_apps_loader_handler_ = + std::make_unique<TestKioskLoaderVisitor>(browser_context(), service()); + CreateAndInitializeKioskAppsProviders(external_apps_loader_handler_.get()); + + extensions::TestEventRouter* event_router = + extensions::CreateAndUseTestEventRouter(browser_context()); + app_launch_tracker_ = + std::make_unique<AppLaunchTracker>(kTestPrimaryAppId, event_router); + + startup_app_launcher_ = std::make_unique<StartupAppLauncher>( + profile(), kTestPrimaryAppId, false /*diagnostic_mode*/, + &startup_launch_delegate_); + } + + void TearDown() override { + startup_app_launcher_.reset(); + external_cache_ = nullptr; + + primary_app_provider_->ServiceShutdown(); + secondary_apps_provider_->ServiceShutdown(); + external_apps_loader_handler_.reset(); + + app_launch_tracker_.reset(); + + KioskAppManager::Shutdown(); + + accounts_settings_helper_.reset(); + + extensions::ExtensionServiceTestBase::TearDown(); + } + + // KioskAppManager::Overrides: + std::unique_ptr<ExternalCache> CreateExternalCache( + ExternalCacheDelegate* delegate, + bool always_check_updates) override { + auto cache = + std::make_unique<TestExternalCache>(delegate, always_check_updates); + external_cache_ = cache.get(); + return cache; + } + + std::unique_ptr<AppSession> CreateAppSession() override { + EXPECT_FALSE(kiosk_app_session_initialized_); + kiosk_app_session_initialized_ = true; + return nullptr; + } + + protected: + // Note: These tests should not actually create files, so the actual returned + // path is not too important. Still, putting it under the test's temp dir, in + // case something unexpectedly tries to do file I/O with the file paths + // returned here. + std::string GetExtensionPath(const std::string& app_id) { + return temp_dir() + .GetPath() + .AppendASCII("test_crx_file") + .AppendASCII(app_id) + .value(); + } + + void InitializeLauncherWithNetworkReady() { + startup_app_launcher_->Initialize(); + EXPECT_EQ(std::vector<LaunchState>({LaunchState::kInitializingNetwork}), + startup_launch_delegate_.launch_state_changes()); + startup_launch_delegate_.ClearLaunchStateChanges(); + + startup_launch_delegate_.set_network_ready(true); + startup_app_launcher_->ContinueWithNetworkReady(); + EXPECT_TRUE(startup_launch_delegate_.launch_state_changes().empty()); + startup_launch_delegate_.ClearLaunchStateChanges(); + } + + AssertionResult DownloadPrimaryApp( + const TestKioskExtensionBuilder& app_builder) WARN_UNUSED_RESULT { + return DownloadPrimaryApp(app_builder.extension_id(), + app_builder.version()); + } + + AssertionResult DownloadPrimaryApp(const std::string& app_id, + const std::string& version) + WARN_UNUSED_RESULT { + if (!external_cache_) + return AssertionFailure() << "External cache not initialized"; + + if (!external_cache_->pending_downloads().count(app_id)) + return AssertionFailure() << "Download not pending: " << app_id; + + if (!external_cache_->SimulateExtensionDownloadFinished( + app_id, GetExtensionPath(app_id), version)) { + return AssertionFailure() << " Finish download attempt failed"; + } + + return AssertionSuccess(); + } + + AssertionResult FinishPrimaryAppInstall( + const TestKioskExtensionBuilder& app_builder) WARN_UNUSED_RESULT { + const std::string& id = app_builder.extension_id(); + if (!external_apps_loader_handler_->pending_crx_files().count(id)) + return AssertionFailure() << "App install not peding: " << id; + + scoped_refptr<const extensions::Extension> app = app_builder.Build(); + if (!app) + return AssertionFailure() << "App builder failed: " << id; + + if (!external_apps_loader_handler_->FinishPendingInstall(app.get())) + return AssertionFailure() << "Finish install attempt failed: " << id; + + return AssertionSuccess(); + } + + AssertionResult DownloadAndInstallPrimaryApp( + const TestKioskExtensionBuilder& app_builder) WARN_UNUSED_RESULT { + AssertionResult download_result = DownloadPrimaryApp(app_builder); + if (!download_result) + return download_result; + + AssertionResult install_result = FinishPrimaryAppInstall(app_builder); + if (!install_result) + return install_result; + + return AssertionSuccess(); + } + + AssertionResult FinishSecondaryExtensionInstall( + const TestKioskExtensionBuilder& builder) WARN_UNUSED_RESULT { + const std::string& id = builder.extension_id(); + if (!external_apps_loader_handler_->pending_update_urls().count(id)) { + return AssertionFailure() + << "Secondary extension install not pending: " << id; + } + + scoped_refptr<const extensions::Extension> extension = builder.Build(); + if (!extension) + return AssertionFailure() << "Extension builder failed: " << id; + + if (!external_apps_loader_handler_->FinishPendingInstall(extension.get())) + return AssertionFailure() << "Finish install attempt failed: " << id; + + return AssertionSuccess(); + } + + private: + void InitializePrimaryAppState() { + // Inject test kiosk app data to prevent KioskAppManager from attempting to + // load it. + // TODO(tbarzic): Introducing a test KioskAppData class that overrides app + // data load logic, and injecting a KioskAppData object factory to + // KioskAppManager would be a cleaner solution here. + KioskAppManager::Get()->AddAppForTest( + kTestPrimaryAppId, AccountId::FromUserEmail(kTestUserAccount), + GURL("http://cws/"), ""); + + accounts_settings_helper_ = std::make_unique<ScopedCrosSettingsTestHelper>( + false /*create_service*/); + accounts_settings_helper_->ReplaceProvider( + kAccountsPrefDeviceLocalAccounts); + + auto account = std::make_unique<base::DictionaryValue>(); + account->SetKey(kAccountsPrefDeviceLocalAccountsKeyId, + base::Value(kTestUserAccount)); + account->SetKey(kAccountsPrefDeviceLocalAccountsKeyType, + base::Value(policy::DeviceLocalAccount::TYPE_KIOSK_APP)); + account->SetKey(kAccountsPrefDeviceLocalAccountsKeyKioskAppId, + base::Value(kTestPrimaryAppId)); + base::ListValue accounts; + accounts.Append(std::move(account)); + + accounts_settings_helper_->Set(kAccountsPrefDeviceLocalAccounts, accounts); + accounts_settings_helper_->SetString( + kAccountsPrefDeviceLocalAccountAutoLoginId, kTestUserAccount); + accounts_settings_helper_->SetInteger( + kAccountsPrefDeviceLocalAccountAutoLoginDelay, 0); + } + + void CreateAndInitializeKioskAppsProviders(TestKioskLoaderVisitor* visitor) { + primary_app_provider_ = std::make_unique<extensions::ExternalProviderImpl>( + visitor, + base::MakeRefCounted<KioskAppExternalLoader>( + KioskAppExternalLoader::AppClass::kPrimary), + profile(), extensions::Manifest::EXTERNAL_POLICY, + extensions::Manifest::INVALID_LOCATION, + extensions::Extension::NO_FLAGS); + InitializeKioskAppsProvider(primary_app_provider_.get()); + + secondary_apps_provider_ = + std::make_unique<extensions::ExternalProviderImpl>( + visitor, + base::MakeRefCounted<KioskAppExternalLoader>( + KioskAppExternalLoader::AppClass::kSecondary), + profile(), extensions::Manifest::EXTERNAL_PREF, + extensions::Manifest::EXTERNAL_PREF_DOWNLOAD, + extensions::Extension::NO_FLAGS); + InitializeKioskAppsProvider(secondary_apps_provider_.get()); + } + + void InitializeKioskAppsProvider(extensions::ExternalProviderImpl* provider) { + provider->set_auto_acknowledge(true); + provider->set_install_immediately(true); + provider->set_allow_updates(true); + provider->VisitRegisteredExtension(); + } + + protected: + TestAppLaunchDelegate startup_launch_delegate_; + + std::unique_ptr<StartupAppLauncher> startup_app_launcher_; + std::unique_ptr<AppLaunchTracker> app_launch_tracker_; + std::unique_ptr<TestKioskLoaderVisitor> external_apps_loader_handler_; + + TestExternalCache* external_cache_ = nullptr; + + bool kiosk_app_session_initialized_ = false; + session_manager::SessionManager session_manager_; + + private: + base::test::ScopedCommandLine command_line_; + + std::unique_ptr<ScopedCrosSettingsTestHelper> accounts_settings_helper_; + + std::unique_ptr<extensions::ExternalProviderImpl> primary_app_provider_; + std::unique_ptr<extensions::ExternalProviderImpl> secondary_apps_provider_; + + DISALLOW_COPY_AND_ASSIGN(StartupAppLauncherTest); +}; + +TEST_F(StartupAppLauncherTest, PrimaryAppLaunchFlow) { + InitializeLauncherWithNetworkReady(); + + ASSERT_TRUE(external_cache_); + EXPECT_EQ(std::set<std::string>({kTestPrimaryAppId}), + external_cache_->pending_downloads()); + + EXPECT_TRUE(external_apps_loader_handler_->pending_crx_files().empty()); + EXPECT_TRUE(external_apps_loader_handler_->pending_update_urls().empty()); + + TestKioskExtensionBuilder primary_app_builder(Manifest::TYPE_PLATFORM_APP, + kTestPrimaryAppId); + ASSERT_TRUE(DownloadPrimaryApp(primary_app_builder)); + + EXPECT_EQ(std::vector<LaunchState>({LaunchState::kInstallingApp}), + startup_launch_delegate_.launch_state_changes()); + startup_launch_delegate_.ClearLaunchStateChanges(); + + ASSERT_TRUE(FinishPrimaryAppInstall(primary_app_builder)); + + EXPECT_TRUE(external_apps_loader_handler_->pending_update_urls().empty()); + EXPECT_TRUE(external_apps_loader_handler_->pending_crx_files().empty()); + + startup_launch_delegate_.WaitForLaunchStates({LaunchState::kReadyToLaunch}); + EXPECT_EQ(std::vector<LaunchState>({LaunchState::kReadyToLaunch}), + startup_launch_delegate_.launch_state_changes()); + startup_launch_delegate_.ClearLaunchStateChanges(); + + EXPECT_FALSE(kiosk_app_session_initialized_); + EXPECT_FALSE(session_manager_.IsSessionStarted()); + startup_app_launcher_->LaunchApp(); + + EXPECT_EQ(std::vector<LaunchState>({LaunchState::kLaunchSucceeded}), + startup_launch_delegate_.launch_state_changes()); + EXPECT_EQ(1, app_launch_tracker_->kiosk_launch_count()); + + EXPECT_TRUE(kiosk_app_session_initialized_); + EXPECT_TRUE(session_manager_.IsSessionStarted()); +} + +TEST_F(StartupAppLauncherTest, OfflineLaunchWithPrimaryAppPreInstalled) { + TestKioskExtensionBuilder primary_app_builder(Manifest::TYPE_PLATFORM_APP, + kTestPrimaryAppId); + primary_app_builder.set_version("1.0"); + scoped_refptr<const extensions::Extension> primary_app = + primary_app_builder.Build(); + service()->AddExtension(primary_app.get()); + + startup_app_launcher_->Initialize(); + + // Given that the app is offline enabled and installed, the app should be + // launched immediately, without waiting for network or checking for updates. + startup_launch_delegate_.WaitForLaunchStates({LaunchState::kReadyToLaunch}); + EXPECT_EQ(std::vector<LaunchState>({LaunchState::kReadyToLaunch}), + startup_launch_delegate_.launch_state_changes()); + startup_launch_delegate_.ClearLaunchStateChanges(); + + EXPECT_FALSE(kiosk_app_session_initialized_); + EXPECT_FALSE(session_manager_.IsSessionStarted()); + + // Primary app cache checks finished after the startup app launcher reports + // it's ready should be ignored - i.e. startup app launcher should not attempt + // to relaunch the app, nor request the update installation. + startup_app_launcher_->ContinueWithNetworkReady(); + ASSERT_TRUE(DownloadPrimaryApp(kTestPrimaryAppId, "1.1")); + base::RunLoop().RunUntilIdle(); + + EXPECT_TRUE(external_apps_loader_handler_->pending_crx_files().empty()); + EXPECT_TRUE(external_apps_loader_handler_->pending_update_urls().empty()); + EXPECT_TRUE(startup_launch_delegate_.launch_state_changes().empty()); + + startup_app_launcher_->LaunchApp(); + + EXPECT_EQ(std::vector<LaunchState>({LaunchState::kLaunchSucceeded}), + startup_launch_delegate_.launch_state_changes()); + EXPECT_EQ(1, app_launch_tracker_->kiosk_launch_count()); + + EXPECT_TRUE(kiosk_app_session_initialized_); + EXPECT_TRUE(session_manager_.IsSessionStarted()); +} + +TEST_F(StartupAppLauncherTest, + OfflineLaunchWithPrimaryAppPreInstalled_UpdateFoundAfterLaunch) { + TestKioskExtensionBuilder primary_app_builder(Manifest::TYPE_PLATFORM_APP, + kTestPrimaryAppId); + primary_app_builder.set_version("1.0"); + scoped_refptr<const extensions::Extension> primary_app = + primary_app_builder.Build(); + service()->AddExtension(primary_app.get()); + + startup_app_launcher_->Initialize(); + + // Given that the app is offline enabled and installed, the app should be + // launched immediately, without waiting for network or checking for updates. + startup_launch_delegate_.WaitForLaunchStates({LaunchState::kReadyToLaunch}); + EXPECT_EQ(std::vector<LaunchState>({LaunchState::kReadyToLaunch}), + startup_launch_delegate_.launch_state_changes()); + startup_launch_delegate_.ClearLaunchStateChanges(); + + EXPECT_FALSE(kiosk_app_session_initialized_); + EXPECT_FALSE(session_manager_.IsSessionStarted()); + + startup_app_launcher_->LaunchApp(); + + EXPECT_EQ(std::vector<LaunchState>({LaunchState::kLaunchSucceeded}), + startup_launch_delegate_.launch_state_changes()); + startup_launch_delegate_.ClearLaunchStateChanges(); + EXPECT_EQ(1, app_launch_tracker_->kiosk_launch_count()); + + EXPECT_TRUE(kiosk_app_session_initialized_); + EXPECT_TRUE(session_manager_.IsSessionStarted()); + + // Primary app cache checks finished after the app launch + // it's ready should be ignored - i.e. startup app launcher should not attempt + // to relaunch the app, nor request the update installation. + startup_app_launcher_->ContinueWithNetworkReady(); + ASSERT_TRUE(DownloadPrimaryApp(kTestPrimaryAppId, "1.1")); + base::RunLoop().RunUntilIdle(); + + EXPECT_TRUE(external_apps_loader_handler_->pending_crx_files().empty()); + EXPECT_TRUE(external_apps_loader_handler_->pending_update_urls().empty()); + EXPECT_TRUE(startup_launch_delegate_.launch_state_changes().empty()); +} + +TEST_F(StartupAppLauncherTest, PrimaryAppDownloadFailure) { + InitializeLauncherWithNetworkReady(); + + ASSERT_TRUE(external_cache_); + EXPECT_EQ(std::set<std::string>({kTestPrimaryAppId}), + external_cache_->pending_downloads()); + ASSERT_TRUE( + external_cache_->SimulateExtensionDownloadFailed(kTestPrimaryAppId)); + + EXPECT_TRUE(external_apps_loader_handler_->pending_update_urls().empty()); + EXPECT_TRUE(external_apps_loader_handler_->pending_crx_files().empty()); + + EXPECT_EQ(std::vector<LaunchState>({LaunchState::kLaunchFailed}), + startup_launch_delegate_.launch_state_changes()); + + EXPECT_EQ(KioskAppLaunchError::UNABLE_TO_DOWNLOAD, + startup_launch_delegate_.launch_error()); + + EXPECT_FALSE(kiosk_app_session_initialized_); + EXPECT_FALSE(session_manager_.IsSessionStarted()); +} + +TEST_F(StartupAppLauncherTest, PrimaryAppCrxInstallFailure) { + InitializeLauncherWithNetworkReady(); + + ASSERT_TRUE(DownloadPrimaryApp(kTestPrimaryAppId, "1.0")); + startup_launch_delegate_.ClearLaunchStateChanges(); + + ASSERT_TRUE( + external_apps_loader_handler_->FailPendingInstall(kTestPrimaryAppId)); + + EXPECT_EQ(std::vector<LaunchState>({LaunchState::kLaunchFailed}), + startup_launch_delegate_.launch_state_changes()); + + EXPECT_EQ(KioskAppLaunchError::UNABLE_TO_INSTALL, + startup_launch_delegate_.launch_error()); + + EXPECT_FALSE(kiosk_app_session_initialized_); + EXPECT_FALSE(session_manager_.IsSessionStarted()); +} + +TEST_F(StartupAppLauncherTest, PrimaryAppNotKioskEnabled) { + InitializeLauncherWithNetworkReady(); + + TestKioskExtensionBuilder primary_app_builder(Manifest::TYPE_PLATFORM_APP, + kTestPrimaryAppId); + primary_app_builder.set_kiosk_enabled(false); + ASSERT_TRUE(DownloadPrimaryApp(primary_app_builder)); + + EXPECT_EQ(std::vector<LaunchState>({LaunchState::kInstallingApp}), + startup_launch_delegate_.launch_state_changes()); + startup_launch_delegate_.ClearLaunchStateChanges(); + + ASSERT_TRUE(FinishPrimaryAppInstall(primary_app_builder)); + + EXPECT_EQ(std::vector<LaunchState>({LaunchState::kLaunchFailed}), + startup_launch_delegate_.launch_state_changes()); + + EXPECT_EQ(KioskAppLaunchError::NOT_KIOSK_ENABLED, + startup_launch_delegate_.launch_error()); + + EXPECT_FALSE(kiosk_app_session_initialized_); + EXPECT_FALSE(session_manager_.IsSessionStarted()); +} + +TEST_F(StartupAppLauncherTest, PrimaryAppIsExtension) { + InitializeLauncherWithNetworkReady(); + + TestKioskExtensionBuilder primary_app_builder(Manifest::TYPE_EXTENSION, + kTestPrimaryAppId); + ASSERT_TRUE(DownloadPrimaryApp(primary_app_builder)); + + EXPECT_EQ(std::vector<LaunchState>({LaunchState::kInstallingApp}), + startup_launch_delegate_.launch_state_changes()); + startup_launch_delegate_.ClearLaunchStateChanges(); + + ASSERT_TRUE(FinishPrimaryAppInstall(primary_app_builder)); + + EXPECT_EQ(std::vector<LaunchState>({LaunchState::kLaunchFailed}), + startup_launch_delegate_.launch_state_changes()); + + EXPECT_EQ(KioskAppLaunchError::NOT_KIOSK_ENABLED, + startup_launch_delegate_.launch_error()); + + EXPECT_FALSE(kiosk_app_session_initialized_); + EXPECT_FALSE(session_manager_.IsSessionStarted()); +} + +TEST_F(StartupAppLauncherTest, LaunchWithSecondaryApp) { + InitializeLauncherWithNetworkReady(); + + TestKioskExtensionBuilder primary_app_builder(Manifest::TYPE_PLATFORM_APP, + kTestPrimaryAppId); + primary_app_builder.AddSecondaryExtension(kSecondaryAppId); + + ASSERT_TRUE(DownloadPrimaryApp(primary_app_builder)); + + EXPECT_EQ(std::vector<LaunchState>({LaunchState::kInstallingApp}), + startup_launch_delegate_.launch_state_changes()); + startup_launch_delegate_.ClearLaunchStateChanges(); + + ASSERT_TRUE(FinishPrimaryAppInstall(primary_app_builder)); + + // Installing primary app with a non-installed secondary app should notify + // delegate about pending app installation - in this case for secondary app. + EXPECT_EQ(std::vector<LaunchState>({LaunchState::kInstallingApp}), + startup_launch_delegate_.launch_state_changes()); + startup_launch_delegate_.ClearLaunchStateChanges(); + + TestKioskExtensionBuilder secondary_app_builder(Manifest::TYPE_PLATFORM_APP, + kSecondaryAppId); + secondary_app_builder.set_kiosk_enabled(false); + ASSERT_TRUE(FinishSecondaryExtensionInstall(secondary_app_builder)); + + startup_launch_delegate_.WaitForLaunchStates({LaunchState::kReadyToLaunch}); + EXPECT_EQ(std::vector<LaunchState>({LaunchState::kReadyToLaunch}), + startup_launch_delegate_.launch_state_changes()); + startup_launch_delegate_.ClearLaunchStateChanges(); + + EXPECT_FALSE(kiosk_app_session_initialized_); + EXPECT_FALSE(session_manager_.IsSessionStarted()); + startup_app_launcher_->LaunchApp(); + + EXPECT_EQ(std::vector<LaunchState>({LaunchState::kLaunchSucceeded}), + startup_launch_delegate_.launch_state_changes()); + EXPECT_EQ(1, app_launch_tracker_->kiosk_launch_count()); + + EXPECT_TRUE(kiosk_app_session_initialized_); + EXPECT_TRUE(session_manager_.IsSessionStarted()); +} + +TEST_F(StartupAppLauncherTest, LaunchWithSecondaryExtension) { + InitializeLauncherWithNetworkReady(); + + TestKioskExtensionBuilder primary_app_builder(Manifest::TYPE_PLATFORM_APP, + kTestPrimaryAppId); + primary_app_builder.AddSecondaryExtension(kSecondaryAppId); + + ASSERT_TRUE(DownloadPrimaryApp(primary_app_builder)); + + EXPECT_EQ(std::vector<LaunchState>({LaunchState::kInstallingApp}), + startup_launch_delegate_.launch_state_changes()); + startup_launch_delegate_.ClearLaunchStateChanges(); + + ASSERT_TRUE(FinishPrimaryAppInstall(primary_app_builder)); + + // Installing primary app with a non-installed secondary app should notify + // delegate about pending app installation - in this case for secondary app. + EXPECT_EQ(std::vector<LaunchState>({LaunchState::kInstallingApp}), + startup_launch_delegate_.launch_state_changes()); + startup_launch_delegate_.ClearLaunchStateChanges(); + + TestKioskExtensionBuilder secondary_extension_builder( + Manifest::TYPE_EXTENSION, kSecondaryAppId); + secondary_extension_builder.set_kiosk_enabled(false); + ASSERT_TRUE(FinishSecondaryExtensionInstall(secondary_extension_builder)); + + startup_launch_delegate_.WaitForLaunchStates({LaunchState::kReadyToLaunch}); + EXPECT_EQ(std::vector<LaunchState>({LaunchState::kReadyToLaunch}), + startup_launch_delegate_.launch_state_changes()); + startup_launch_delegate_.ClearLaunchStateChanges(); + + EXPECT_FALSE(kiosk_app_session_initialized_); + EXPECT_FALSE(session_manager_.IsSessionStarted()); + startup_app_launcher_->LaunchApp(); + + EXPECT_EQ(std::vector<LaunchState>({LaunchState::kLaunchSucceeded}), + startup_launch_delegate_.launch_state_changes()); + EXPECT_EQ(1, app_launch_tracker_->kiosk_launch_count()); + + EXPECT_TRUE(kiosk_app_session_initialized_); + EXPECT_TRUE(session_manager_.IsSessionStarted()); +} + +TEST_F(StartupAppLauncherTest, OfflineWithPrimaryAndSecondaryAppInstalled) { + TestKioskExtensionBuilder primary_app_builder(Manifest::TYPE_PLATFORM_APP, + kTestPrimaryAppId); + primary_app_builder.set_version("1.0"); + primary_app_builder.AddSecondaryExtension(kSecondaryAppId); + scoped_refptr<const extensions::Extension> primary_app = + primary_app_builder.Build(); + service()->AddExtension(primary_app.get()); + + TestKioskExtensionBuilder secondary_app_builder(Manifest::TYPE_PLATFORM_APP, + kSecondaryAppId); + secondary_app_builder.set_kiosk_enabled(false); + scoped_refptr<const extensions::Extension> secondary_app = + secondary_app_builder.Build(); + service()->AddExtension(secondary_app.get()); + + startup_app_launcher_->Initialize(); + + // Given that the app is offline enabled and installed, the app should be + // launched immediately, without waiting for network or checking for updates. + startup_launch_delegate_.WaitForLaunchStates({LaunchState::kReadyToLaunch}); + EXPECT_EQ(std::vector<LaunchState>({LaunchState::kReadyToLaunch}), + startup_launch_delegate_.launch_state_changes()); + startup_launch_delegate_.ClearLaunchStateChanges(); + + EXPECT_FALSE(kiosk_app_session_initialized_); + EXPECT_FALSE(session_manager_.IsSessionStarted()); + + // Primary app cache checks finished after the startup app launcher reports + // it's ready should be ignored - i.e. startup app launcher should not attempt + // to relaunch the app, nor request the update installation. + startup_app_launcher_->ContinueWithNetworkReady(); + ASSERT_TRUE(DownloadPrimaryApp(kTestPrimaryAppId, "1.1")); + base::RunLoop().RunUntilIdle(); + + EXPECT_TRUE(external_apps_loader_handler_->pending_crx_files().empty()); + EXPECT_TRUE(external_apps_loader_handler_->pending_update_urls().empty()); + EXPECT_TRUE(startup_launch_delegate_.launch_state_changes().empty()); + + startup_app_launcher_->LaunchApp(); + + EXPECT_EQ(std::vector<LaunchState>({LaunchState::kLaunchSucceeded}), + startup_launch_delegate_.launch_state_changes()); + EXPECT_EQ(1, app_launch_tracker_->kiosk_launch_count()); + + EXPECT_TRUE(kiosk_app_session_initialized_); + EXPECT_TRUE(session_manager_.IsSessionStarted()); +} + +TEST_F(StartupAppLauncherTest, IgnoreSecondaryAppsSecondaryApps) { + InitializeLauncherWithNetworkReady(); + + TestKioskExtensionBuilder primary_app_builder(Manifest::TYPE_PLATFORM_APP, + kTestPrimaryAppId); + primary_app_builder.AddSecondaryExtension(kSecondaryAppId); + + ASSERT_TRUE(DownloadAndInstallPrimaryApp(primary_app_builder)); + + startup_launch_delegate_.ClearLaunchStateChanges(); + + TestKioskExtensionBuilder secondary_extension_builder( + Manifest::TYPE_PLATFORM_APP, kSecondaryAppId); + secondary_extension_builder.set_kiosk_enabled(true); + secondary_extension_builder.AddSecondaryExtension(kExtraSecondaryAppId); + + ASSERT_TRUE(FinishSecondaryExtensionInstall(secondary_extension_builder)); + + EXPECT_TRUE(external_apps_loader_handler_->pending_crx_files().empty()); + EXPECT_TRUE(external_apps_loader_handler_->pending_update_urls().empty()); + + startup_launch_delegate_.WaitForLaunchStates({LaunchState::kReadyToLaunch}); + EXPECT_EQ(std::vector<LaunchState>({LaunchState::kReadyToLaunch}), + startup_launch_delegate_.launch_state_changes()); + startup_launch_delegate_.ClearLaunchStateChanges(); + + EXPECT_FALSE(kiosk_app_session_initialized_); + EXPECT_FALSE(session_manager_.IsSessionStarted()); + startup_app_launcher_->LaunchApp(); + + EXPECT_EQ(std::vector<LaunchState>({LaunchState::kLaunchSucceeded}), + startup_launch_delegate_.launch_state_changes()); + EXPECT_EQ(1, app_launch_tracker_->kiosk_launch_count()); + + EXPECT_TRUE(kiosk_app_session_initialized_); + EXPECT_TRUE(session_manager_.IsSessionStarted()); +} + +TEST_F(StartupAppLauncherTest, SecondaryAppCrxInstallFailure) { + InitializeLauncherWithNetworkReady(); + + TestKioskExtensionBuilder primary_app_builder(Manifest::TYPE_PLATFORM_APP, + kTestPrimaryAppId); + primary_app_builder.AddSecondaryExtension(kSecondaryAppId); + + ASSERT_TRUE(DownloadAndInstallPrimaryApp(primary_app_builder)); + startup_launch_delegate_.ClearLaunchStateChanges(); + + ASSERT_EQ(std::set<std::string>({kSecondaryAppId}), + external_apps_loader_handler_->pending_update_urls()); + ASSERT_TRUE( + external_apps_loader_handler_->FailPendingInstall(kSecondaryAppId)); + + EXPECT_EQ(KioskAppLaunchError::UNABLE_TO_INSTALL, + startup_launch_delegate_.launch_error()); + + EXPECT_FALSE(kiosk_app_session_initialized_); + EXPECT_FALSE(session_manager_.IsSessionStarted()); +} + +} // namespace chromeos
diff --git a/chrome/browser/chromeos/app_mode/test_kiosk_extension_builder.cc b/chrome/browser/chromeos/app_mode/test_kiosk_extension_builder.cc new file mode 100644 index 0000000..9e23c817 --- /dev/null +++ b/chrome/browser/chromeos/app_mode/test_kiosk_extension_builder.cc
@@ -0,0 +1,76 @@ +// Copyright 2018 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/app_mode/test_kiosk_extension_builder.h" + +#include "base/values.h" +#include "extensions/common/extension.h" +#include "extensions/common/extension_builder.h" +#include "extensions/common/value_builder.h" + +using extensions::DictionaryBuilder; +using extensions::ListBuilder; +using extensions::ExtensionBuilder; + +namespace chromeos { + +TestKioskExtensionBuilder::TestKioskExtensionBuilder( + extensions::Manifest::Type type, + const std::string& extension_id) + : type_(type), extension_id_(extension_id) {} + +TestKioskExtensionBuilder::~TestKioskExtensionBuilder() = default; + +void TestKioskExtensionBuilder::AddSecondaryExtension(const std::string& id) { + secondary_extensions_.push_back(id); +} + +scoped_refptr<const extensions::Extension> TestKioskExtensionBuilder::Build() + const { + DictionaryBuilder manifest_builder; + manifest_builder.Set("name", "Test kiosk app") + .Set("version", version_) + .Set("manifest_version", 2); + + std::unique_ptr<base::DictionaryValue> background = + DictionaryBuilder() + .Set("scripts", ListBuilder().Append("background.js").Build()) + .Build(); + + switch (type_) { + case extensions::Manifest::TYPE_PLATFORM_APP: + manifest_builder.Set( + "app", + DictionaryBuilder().Set("background", std::move(background)).Build()); + break; + case extensions::Manifest::TYPE_EXTENSION: + manifest_builder.Set("background", std::move(background)); + break; + default: + LOG(ERROR) << "Unsupported extension type"; + return nullptr; + } + + if (kiosk_enabled_) + manifest_builder.SetBoolean("kiosk_enabled", kiosk_enabled_); + + manifest_builder.SetBoolean("offline_enabled", offline_enabled_); + + if (!secondary_extensions_.empty()) { + ListBuilder secondary_extension_list_builder; + for (const auto& secondary_extension : secondary_extensions_) { + secondary_extension_list_builder.Append( + DictionaryBuilder().Set("id", secondary_extension).Build()); + } + manifest_builder.Set("kiosk_secondary_apps", + secondary_extension_list_builder.Build()); + } + + return ExtensionBuilder() + .SetManifest(manifest_builder.Build()) + .SetID(extension_id_) + .Build(); +} + +} // namespace chromeos
diff --git a/chrome/browser/chromeos/app_mode/test_kiosk_extension_builder.h b/chrome/browser/chromeos/app_mode/test_kiosk_extension_builder.h new file mode 100644 index 0000000..4ee565e --- /dev/null +++ b/chrome/browser/chromeos/app_mode/test_kiosk_extension_builder.h
@@ -0,0 +1,53 @@ +// Copyright 2018 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_APP_MODE_TEST_KIOSK_EXTENSION_BUILDER_H_ +#define CHROME_BROWSER_CHROMEOS_APP_MODE_TEST_KIOSK_EXTENSION_BUILDER_H_ + +#include <string> +#include <vector> + +#include "base/memory/ref_counted.h" +#include "extensions/common/manifest.h" + +namespace extensions { +class Extension; +} + +namespace chromeos { + +// Wrapper around extensions::ExtensionBuilder for creating extension::Extension +// instances for usage in kiosk app tests. +class TestKioskExtensionBuilder { + public: + TestKioskExtensionBuilder(extensions::Manifest::Type type, + const std::string& extension_id); + ~TestKioskExtensionBuilder(); + + const std::string& extension_id() const { return extension_id_; } + const std::string& version() const { return version_; } + + void set_kiosk_enabled(bool enabled) { kiosk_enabled_ = enabled; } + void set_offline_enabled(bool enabled) { offline_enabled_ = enabled; } + void set_version(const std::string& version) { version_ = version; } + + void AddSecondaryExtension(const std::string& extension_id); + + scoped_refptr<const extensions::Extension> Build() const; + + private: + const extensions::Manifest::Type type_; + const std::string extension_id_; + + bool kiosk_enabled_ = true; + bool offline_enabled_ = true; + std::vector<std::string> secondary_extensions_; + std::string version_ = "1.0"; + + DISALLOW_COPY_AND_ASSIGN(TestKioskExtensionBuilder); +}; + +} // namespace chromeos + +#endif // CHROME_BROWSER_CHROMEOS_APP_MODE_TEST_KIOSK_EXTENSION_BUILDER_H_
diff --git a/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.cc b/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.cc index e3c8a44..066d1652 100644 --- a/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.cc +++ b/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.cc
@@ -157,6 +157,13 @@ void PopulateAXRole(arc::mojom::AccessibilityNodeInfoData* node, ui::AXNodeData* out_data) { + std::string class_name; + if (GetStringProperty(node, + arc::mojom::AccessibilityStringProperty::CLASS_NAME, + &class_name)) { + out_data->AddStringAttribute(ui::AX_ATTR_CLASS_NAME, class_name); + } + if (HasCoveringSpan(node, arc::mojom::AccessibilityStringProperty::TEXT, arc::mojom::SpanType::URL) || HasCoveringSpan( @@ -190,13 +197,6 @@ } } - std::string class_name; - if (GetStringProperty(node, - arc::mojom::AccessibilityStringProperty::CLASS_NAME, - &class_name)) { - out_data->AddStringAttribute(ui::AX_ATTR_CLASS_NAME, class_name); - } - #define MAP_ROLE(android_class_name, chrome_role) \ if (class_name == android_class_name) { \ out_data->role = chrome_role; \ @@ -215,6 +215,7 @@ MAP_ROLE(ui::kAXEditTextClassname, ui::AX_ROLE_TEXT_FIELD); MAP_ROLE(ui::kAXGridViewClassname, ui::AX_ROLE_TABLE); MAP_ROLE(ui::kAXImageClassname, ui::AX_ROLE_IMAGE); + MAP_ROLE(ui::kAXImageButtonClassname, ui::AX_ROLE_BUTTON); if (GetBooleanProperty(node, arc::mojom::AccessibilityBooleanProperty::CLICKABLE)) { MAP_ROLE(ui::kAXImageViewClassname, ui::AX_ROLE_BUTTON); @@ -508,6 +509,17 @@ out_data->AddBoolAttribute(ui::AX_ATTR_CLICKABLE, true); } + // Range info. + arc::mojom::AccessibilityRangeInfoData* range_info = node->range_info.get(); + if (range_info) { + out_data->AddFloatAttribute(ui::AX_ATTR_VALUE_FOR_RANGE, + range_info->current); + out_data->AddFloatAttribute(ui::AX_ATTR_MIN_VALUE_FOR_RANGE, + range_info->min); + out_data->AddFloatAttribute(ui::AX_ATTR_MAX_VALUE_FOR_RANGE, + range_info->max); + } + exo::WMHelper* wm_helper = exo::WMHelper::HasInstance() ? exo::WMHelper::GetInstance() : nullptr;
diff --git a/chrome/browser/chromeos/arc/voice_interaction/voice_interaction_controller_client.cc b/chrome/browser/chromeos/arc/voice_interaction/voice_interaction_controller_client.cc index 8102964..9ed58ca9 100644 --- a/chrome/browser/chromeos/arc/voice_interaction/voice_interaction_controller_client.cc +++ b/chrome/browser/chromeos/arc/voice_interaction/voice_interaction_controller_client.cc
@@ -26,12 +26,13 @@ namespace { // Weak pointer. This class is owned by ChromeBrowserMainPartsChromeos. -VoiceInteractionControllerClient* g_instance = nullptr; +VoiceInteractionControllerClient* + g_voice_interaction_controller_client_instance = nullptr; } // namespace VoiceInteractionControllerClient::VoiceInteractionControllerClient() { - DCHECK(!g_instance); + DCHECK(!g_voice_interaction_controller_client_instance); ConnectToVoiceInteractionController(); notification_registrar_.Add(this, @@ -42,17 +43,17 @@ notification_registrar_.Add(this, chrome::NOTIFICATION_PROFILE_DESTROYED, content::NotificationService::AllSources()); - g_instance = this; + g_voice_interaction_controller_client_instance = this; } VoiceInteractionControllerClient::~VoiceInteractionControllerClient() { - DCHECK_EQ(g_instance, this); - g_instance = nullptr; + DCHECK_EQ(g_voice_interaction_controller_client_instance, this); + g_voice_interaction_controller_client_instance = nullptr; } // static VoiceInteractionControllerClient* VoiceInteractionControllerClient::Get() { - return g_instance; + return g_voice_interaction_controller_client_instance; } void VoiceInteractionControllerClient::NotifyStatusChanged(
diff --git a/chrome/browser/chromeos/first_run/first_run_controller.cc b/chrome/browser/chromeos/first_run/first_run_controller.cc index 09e8242..af5f552 100644 --- a/chrome/browser/chromeos/first_run/first_run_controller.cc +++ b/chrome/browser/chromeos/first_run/first_run_controller.cc
@@ -26,7 +26,7 @@ // Instance of currently running controller, or NULL if controller is not // running now. -chromeos::FirstRunController* g_instance; +chromeos::FirstRunController* g_first_run_controller_instance; void RecordCompletion(chromeos::first_run::TutorialCompletion type) { UMA_HISTOGRAM_ENUMERATION("CrosFirstRun.TutorialCompletion", @@ -42,27 +42,28 @@ // static void FirstRunController::Start() { - if (g_instance) { + if (g_first_run_controller_instance) { LOG(WARNING) << "First-run tutorial is running already."; return; } - g_instance = new FirstRunController(); - g_instance->Init(); + g_first_run_controller_instance = new FirstRunController(); + g_first_run_controller_instance->Init(); } // static void FirstRunController::Stop() { - if (!g_instance) { + if (!g_first_run_controller_instance) { LOG(WARNING) << "First-run tutorial is not running."; return; } - g_instance->Finalize(); - base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, g_instance); - g_instance = NULL; + g_first_run_controller_instance->Finalize(); + base::ThreadTaskRunnerHandle::Get()->DeleteSoon( + FROM_HERE, g_first_run_controller_instance); + g_first_run_controller_instance = NULL; } FirstRunController* FirstRunController::GetInstanceForTest() { - return g_instance; + return g_first_run_controller_instance; } FirstRunController::FirstRunController()
diff --git a/chrome/browser/chromeos/lock_screen_apps/state_controller.cc b/chrome/browser/chromeos/lock_screen_apps/state_controller.cc index b74efd83..dc2b438 100644 --- a/chrome/browser/chromeos/lock_screen_apps/state_controller.cc +++ b/chrome/browser/chromeos/lock_screen_apps/state_controller.cc
@@ -56,7 +56,7 @@ // encrypt persisted user data created on the lock screen. constexpr char kDataCryptoKeyPref[] = "lockScreenAppDataCryptoKey"; -StateController* g_instance = nullptr; +StateController* g_state_controller_instance = nullptr; // Generates a random 256 bit AES key. Returns an empty string on error. std::string GenerateCryptoKey() { @@ -77,8 +77,8 @@ // static StateController* StateController::Get() { - DCHECK(g_instance || !IsEnabled()); - return g_instance; + DCHECK(g_state_controller_instance || !IsEnabled()); + return g_state_controller_instance; } // static @@ -94,15 +94,15 @@ input_devices_observer_(this), power_manager_client_observer_(this), weak_ptr_factory_(this) { - DCHECK(!g_instance); + DCHECK(!g_state_controller_instance); DCHECK(IsEnabled()); - g_instance = this; + g_state_controller_instance = this; } StateController::~StateController() { - DCHECK_EQ(g_instance, this); - g_instance = nullptr; + DCHECK_EQ(g_state_controller_instance, this); + g_state_controller_instance = nullptr; } void StateController::SetTrayActionPtrForTesting(
diff --git a/chrome/browser/chromeos/login/lock/webui_screen_locker.cc b/chrome/browser/chromeos/login/lock/webui_screen_locker.cc index 314e251..da785bd 100644 --- a/chrome/browser/chromeos/login/lock/webui_screen_locker.cc +++ b/chrome/browser/chromeos/login/lock/webui_screen_locker.cc
@@ -12,7 +12,6 @@ #include "base/values.h" #include "chrome/browser/browser_shutdown.h" #include "chrome/browser/chrome_notification_types.h" -#include "chrome/browser/chromeos/accessibility/accessibility_util.h" #include "chrome/browser/chromeos/ash_config.h" #include "chrome/browser/chromeos/login/helper.h" #include "chrome/browser/chromeos/login/lock/screen_locker.h"
diff --git a/chrome/browser/chromeos/login/ui/webui_login_view.cc b/chrome/browser/chromeos/login/ui/webui_login_view.cc index f5b3aaa..d9a112ae 100644 --- a/chrome/browser/chromeos/login/ui/webui_login_view.cc +++ b/chrome/browser/chromeos/login/ui/webui_login_view.cc
@@ -22,7 +22,6 @@ #include "base/trace_event/trace_event.h" #include "base/values.h" #include "chrome/browser/chrome_notification_types.h" -#include "chrome/browser/chromeos/accessibility/accessibility_util.h" #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" #include "chrome/browser/chromeos/lock_screen_apps/state_controller.h" #include "chrome/browser/chromeos/login/ui/login_display_host_webui.h"
diff --git a/chrome/browser/chromeos/options/network_config_view.cc b/chrome/browser/chromeos/options/network_config_view.cc index c82f4c9ac..fc1ad20e 100644 --- a/chrome/browser/chromeos/options/network_config_view.cc +++ b/chrome/browser/chromeos/options/network_config_view.cc
@@ -42,7 +42,7 @@ namespace { // Used to check if a network config dialog is already showing. -NetworkConfigView* g_instance = nullptr; +NetworkConfigView* g_network_config_view_instance = nullptr; } // namespace @@ -54,8 +54,8 @@ : child_config_view_(nullptr), delegate_(nullptr), advanced_button_(nullptr) { - DCHECK(!g_instance); - g_instance = this; + DCHECK(!g_network_config_view_instance); + g_network_config_view_instance = this; chrome::RecordDialogCreation(chrome::DialogIdentifier::NETWORK_CONFIG); } @@ -89,20 +89,20 @@ } NetworkConfigView::~NetworkConfigView() { - DCHECK_EQ(g_instance, this); - g_instance = nullptr; + DCHECK_EQ(g_network_config_view_instance, this); + g_network_config_view_instance = nullptr; } // static bool NetworkConfigView::HasInstance() { - return !!g_instance; + return !!g_network_config_view_instance; } // static NetworkConfigView* NetworkConfigView::ShowForNetworkId( const std::string& network_id) { - if (g_instance) - return g_instance; + if (g_network_config_view_instance) + return g_network_config_view_instance; const NetworkState* network = NetworkHandler::Get()->network_state_handler()->GetNetworkStateFromGuid( network_id); @@ -126,8 +126,8 @@ // static NetworkConfigView* NetworkConfigView::ShowForType(const std::string& type) { - if (g_instance) - return g_instance; + if (g_network_config_view_instance) + return g_network_config_view_instance; NetworkConfigView* view = new NetworkConfigView(); if (!view->InitWithType(type)) { LOG(ERROR) << "NetworkConfigView::ShowForType called with invalid type: "
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 23f261e..2a645e8 100644 --- a/chrome/browser/chromeos/system/input_device_settings_impl_ozone.cc +++ b/chrome/browser/chromeos/system/input_device_settings_impl_ozone.cc
@@ -16,7 +16,7 @@ namespace system { namespace { -InputDeviceSettings* g_instance = nullptr; +InputDeviceSettings* g_input_device_settings_impl_ozone_instance = nullptr; // Callback from SetInternalTouchpadEnabled(). void OnSetInternalTouchpadEnabled(bool result) {} @@ -158,13 +158,15 @@ // static InputDeviceSettings* InputDeviceSettings::Get() { - if (!g_instance) { + if (!g_input_device_settings_impl_ozone_instance) { if (IsRunningAsSystemCompositor()) - g_instance = new InputDeviceSettingsImplOzone; + g_input_device_settings_impl_ozone_instance = + new InputDeviceSettingsImplOzone; else - g_instance = new FakeInputDeviceSettings(); + g_input_device_settings_impl_ozone_instance = + new FakeInputDeviceSettings(); } - return g_instance; + return g_input_device_settings_impl_ozone_instance; } } // namespace system
diff --git a/chrome/browser/chromeos/tether/tether_service.cc b/chrome/browser/chromeos/tether/tether_service.cc index 521d6dbb..c1c7148 100644 --- a/chrome/browser/chromeos/tether/tether_service.cc +++ b/chrome/browser/chromeos/tether/tether_service.cc
@@ -80,10 +80,10 @@ // static. std::string TetherService::TetherFeatureStateToString( - TetherFeatureState state) { + const TetherFeatureState& state) { switch (state) { - case (TetherFeatureState::OTHER_OR_UNKNOWN): - return "[other or unknown]"; + case (TetherFeatureState::SHUT_DOWN): + return "[TetherService shut down]"; case (TetherFeatureState::BLE_ADVERTISING_NOT_SUPPORTED): return "[BLE advertising not supported]"; case (TetherFeatureState::NO_AVAILABLE_HOSTS): @@ -100,10 +100,17 @@ return "[Enabled]"; case (TetherFeatureState::BLE_NOT_PRESENT): return "[BLE is not present on the device]"; - default: + case (TetherFeatureState::WIFI_NOT_PRESENT): + return "[Wi-Fi is not present on the device]"; + case (TetherFeatureState::SUSPENDED): + return "[Suspended]"; + case (TetherFeatureState::TETHER_FEATURE_STATE_MAX): // |previous_feature_state_| is initialized to TETHER_FEATURE_STATE_MAX, // and this value is never actually used in practice. return "[TetherService initializing]"; + default: + NOTREACHED(); + return "[Invalid state]"; } } @@ -378,7 +385,8 @@ } switch (new_feature_state) { - case OTHER_OR_UNKNOWN: + case SHUT_DOWN: + case SUSPENDED: case BLE_NOT_PRESENT: case BLE_ADVERTISING_NOT_SUPPORTED: case WIFI_NOT_PRESENT: @@ -493,8 +501,11 @@ } TetherService::TetherFeatureState TetherService::GetTetherFeatureState() { - if (shut_down_ || suspended_) - return OTHER_OR_UNKNOWN; + if (shut_down_) + return SHUT_DOWN; + + if (suspended_) + return SUSPENDED; if (!IsBluetoothPresent()) return BLE_NOT_PRESENT; @@ -529,6 +540,15 @@ void TetherService::RecordTetherFeatureState() { TetherFeatureState tether_feature_state = GetTetherFeatureState(); DCHECK(tether_feature_state != TetherFeatureState::TETHER_FEATURE_STATE_MAX); + + // If the feature is shut down, there is no need to log a metric. Since this + // state occurs every time the user logs out (as of crbug.com/782879), logging + // a metric here does not provide any value since it does not indicate + // anything about how the user utilizes Instant Tethering and would dilute the + // contributions of meaningful states. + if (tether_feature_state == TetherFeatureState::SHUT_DOWN) + return; + UMA_HISTOGRAM_ENUMERATION("InstantTethering.FeatureState", tether_feature_state, TetherFeatureState::TETHER_FEATURE_STATE_MAX);
diff --git a/chrome/browser/chromeos/tether/tether_service.h b/chrome/browser/chromeos/tether/tether_service.h index f4e2b0c..c90a39e 100644 --- a/chrome/browser/chromeos/tether/tether_service.h +++ b/chrome/browser/chromeos/tether/tether_service.h
@@ -147,10 +147,12 @@ // Reflects InstantTethering_TechnologyStateAndReason enum in enums.xml. Do // not rearrange. enum TetherFeatureState { - OTHER_OR_UNKNOWN = 0, + // Note: Value 0 was previously OTHER_OR_UNKNOWN, but this was a vague + // description. + SHUT_DOWN = 0, BLE_ADVERTISING_NOT_SUPPORTED = 1, - // Note: SCREEN_LOCKED is an obsolete value, and should not be used. - SCREEN_LOCKED = 2, + // Note: Value 2 was previously SCREEN_LOCKED, but this value is obsolete + // and should no longer be used. NO_AVAILABLE_HOSTS = 3, CELLULAR_DISABLED = 4, PROHIBITED = 5, @@ -159,11 +161,13 @@ ENABLED = 8, BLE_NOT_PRESENT = 9, WIFI_NOT_PRESENT = 10, + SUSPENDED = 11, TETHER_FEATURE_STATE_MAX }; // For debug logs. - static std::string TetherFeatureStateToString(TetherFeatureState state); + static std::string TetherFeatureStateToString( + const TetherFeatureState& state); void OnBluetoothAdapterFetched( scoped_refptr<device::BluetoothAdapter> adapter);
diff --git a/chrome/browser/chromeos/tether/tether_service_unittest.cc b/chrome/browser/chromeos/tether/tether_service_unittest.cc index 5ec723d..2300919 100644 --- a/chrome/browser/chromeos/tether/tether_service_unittest.cc +++ b/chrome/browser/chromeos/tether/tether_service_unittest.cc
@@ -303,6 +303,15 @@ void TearDown() override { ShutdownTetherService(); + if (tether_service_) { + // As of crbug.com/798605, SHUT_DOWN should not be logged since it does not + // contribute meaningful data. + histogram_tester_.ExpectBucketCount( + "InstantTethering.FeatureState", + TetherService::TetherFeatureState::SHUT_DOWN, 0 /* count */); + tether_service_.reset(); + } + message_center::MessageCenter::Shutdown(); chromeos::NetworkConnect::Shutdown(); chromeos::NetworkHandler::Shutdown(); @@ -503,9 +512,8 @@ fake_power_manager_client_->SendSuspendImminent( power_manager::SuspendImminent_Reason_OTHER); - VerifyTetherFeatureStateRecorded( - TetherService::TetherFeatureState::OTHER_OR_UNKNOWN, - 2 /* expected_count */); + VerifyTetherFeatureStateRecorded(TetherService::TetherFeatureState::SUSPENDED, + 2 /* expected_count */); } TEST_F(TetherServiceTest, TestBleAdvertisingNotSupported) {
diff --git a/chrome/browser/conflicts/module_database_win.cc b/chrome/browser/conflicts/module_database_win.cc index 0ceb293a..539d06fe 100644 --- a/chrome/browser/conflicts/module_database_win.cc +++ b/chrome/browser/conflicts/module_database_win.cc
@@ -22,7 +22,7 @@ "assumes browser process type has value 2"); constexpr uint32_t kFirstValidProcessType = content::PROCESS_TYPE_BROWSER; -ModuleDatabase* g_instance = nullptr; +ModuleDatabase* g_module_database_win_instance = nullptr; } // namespace @@ -51,22 +51,22 @@ } ModuleDatabase::~ModuleDatabase() { - if (this == g_instance) - g_instance = nullptr; + if (this == g_module_database_win_instance) + g_module_database_win_instance = nullptr; } // static ModuleDatabase* ModuleDatabase::GetInstance() { - return g_instance; + return g_module_database_win_instance; } // static void ModuleDatabase::SetInstance( std::unique_ptr<ModuleDatabase> module_database) { - DCHECK_EQ(nullptr, g_instance); + DCHECK_EQ(nullptr, g_module_database_win_instance); // This is deliberately leaked. It can be cleaned up by manually deleting the // ModuleDatabase. - g_instance = module_database.release(); + g_module_database_win_instance = module_database.release(); } bool ModuleDatabase::IsIdle() {
diff --git a/chrome/browser/devtools/devtools_ui_bindings.cc b/chrome/browser/devtools/devtools_ui_bindings.cc index fc517ad..6f54f8b 100644 --- a/chrome/browser/devtools/devtools_ui_bindings.cc +++ b/chrome/browser/devtools/devtools_ui_bindings.cc
@@ -107,8 +107,8 @@ const size_t kMaxMessageChunkSize = IPC::Channel::kMaximumMessageSize / 4; typedef std::vector<DevToolsUIBindings*> DevToolsUIBindingsList; -base::LazyInstance<DevToolsUIBindingsList>::Leaky g_instances = - LAZY_INSTANCE_INITIALIZER; +base::LazyInstance<DevToolsUIBindingsList>::Leaky + g_devtools_ui_bindings_instances = LAZY_INSTANCE_INITIALIZER; std::unique_ptr<base::DictionaryValue> CreateFileSystemValue( DevToolsFileHelper::FileSystem file_system) { @@ -480,9 +480,10 @@ DevToolsUIBindings* DevToolsUIBindings::ForWebContents( content::WebContents* web_contents) { - if (!g_instances.IsCreated()) + if (!g_devtools_ui_bindings_instances.IsCreated()) return NULL; - DevToolsUIBindingsList* instances = g_instances.Pointer(); + DevToolsUIBindingsList* instances = + g_devtools_ui_bindings_instances.Pointer(); for (DevToolsUIBindingsList::iterator it(instances->begin()); it != instances->end(); ++it) { if ((*it)->web_contents() == web_contents) @@ -500,7 +501,7 @@ frontend_loaded_(false), reloading_(false), weak_factory_(this) { - g_instances.Get().push_back(this); + g_devtools_ui_bindings_instances.Get().push_back(this); frontend_contents_observer_.reset(new FrontendWebContentsObserver(this)); web_contents_->GetMutableRendererPrefs()->can_accept_load_drops = false; @@ -529,7 +530,8 @@ SetDevicesUpdatesEnabled(false); // Remove self from global list. - DevToolsUIBindingsList* instances = g_instances.Pointer(); + DevToolsUIBindingsList* instances = + g_devtools_ui_bindings_instances.Pointer(); DevToolsUIBindingsList::iterator it( std::find(instances->begin(), instances->end(), this)); DCHECK(it != instances->end());
diff --git a/chrome/browser/devtools/devtools_window.cc b/chrome/browser/devtools/devtools_window.cc index 3b9a13c..7e1ccbc 100644 --- a/chrome/browser/devtools/devtools_window.cc +++ b/chrome/browser/devtools/devtools_window.cc
@@ -75,7 +75,7 @@ namespace { typedef std::vector<DevToolsWindow*> DevToolsWindows; -base::LazyInstance<DevToolsWindows>::Leaky g_instances = +base::LazyInstance<DevToolsWindows>::Leaky g_devtools_window_instances = LAZY_INSTANCE_INITIALIZER; base::LazyInstance<std::vector<base::Callback<void(DevToolsWindow*)>>>::Leaky @@ -410,7 +410,7 @@ if (toolbox_web_contents_) delete toolbox_web_contents_; - DevToolsWindows* instances = g_instances.Pointer(); + DevToolsWindows* instances = g_devtools_window_instances.Pointer(); DevToolsWindows::iterator it( std::find(instances->begin(), instances->end(), this)); DCHECK(it != instances->end()); @@ -471,9 +471,9 @@ // static DevToolsWindow* DevToolsWindow::GetInstanceForInspectedWebContents( WebContents* inspected_web_contents) { - if (!inspected_web_contents || !g_instances.IsCreated()) + if (!inspected_web_contents || !g_devtools_window_instances.IsCreated()) return NULL; - DevToolsWindows* instances = g_instances.Pointer(); + DevToolsWindows* instances = g_devtools_window_instances.Pointer(); for (DevToolsWindows::iterator it(instances->begin()); it != instances->end(); ++it) { if ((*it)->GetInspectedWebContents() == inspected_web_contents) @@ -484,9 +484,9 @@ // static bool DevToolsWindow::IsDevToolsWindow(content::WebContents* web_contents) { - if (!web_contents || !g_instances.IsCreated()) + if (!web_contents || !g_devtools_window_instances.IsCreated()) return false; - DevToolsWindows* instances = g_instances.Pointer(); + DevToolsWindows* instances = g_devtools_window_instances.Pointer(); for (DevToolsWindows::iterator it(instances->begin()); it != instances->end(); ++it) { if ((*it)->main_web_contents_ == web_contents || @@ -622,7 +622,7 @@ // static void DevToolsWindow::OpenNodeFrontendWindow(Profile* profile) { - for (DevToolsWindow* window : g_instances.Get()) { + for (DevToolsWindow* window : g_devtools_window_instances.Get()) { if (window->frontend_type_ == kFrontendNode) { window->ActivateWindow(); return; @@ -910,7 +910,7 @@ zoom::ZoomController::FromWebContents(main_web_contents_) ->SetShowsNotificationBubble(false); - g_instances.Get().push_back(this); + g_devtools_window_instances.Get().push_back(this); // There is no inspected_web_contents in case of various workers. if (inspected_web_contents) @@ -1025,9 +1025,9 @@ // static DevToolsWindow* DevToolsWindow::FindDevToolsWindow( DevToolsAgentHost* agent_host) { - if (!agent_host || !g_instances.IsCreated()) + if (!agent_host || !g_devtools_window_instances.IsCreated()) return NULL; - DevToolsWindows* instances = g_instances.Pointer(); + DevToolsWindows* instances = g_devtools_window_instances.Pointer(); for (DevToolsWindows::iterator it(instances->begin()); it != instances->end(); ++it) { if ((*it)->bindings_->IsAttachedTo(agent_host)) @@ -1039,9 +1039,9 @@ // static DevToolsWindow* DevToolsWindow::AsDevToolsWindow( content::WebContents* web_contents) { - if (!web_contents || !g_instances.IsCreated()) + if (!web_contents || !g_devtools_window_instances.IsCreated()) return NULL; - DevToolsWindows* instances = g_instances.Pointer(); + DevToolsWindows* instances = g_devtools_window_instances.Pointer(); for (DevToolsWindows::iterator it(instances->begin()); it != instances->end(); ++it) { if ((*it)->main_web_contents_ == web_contents)
diff --git a/chrome/browser/devtools/devtools_window_testing.cc b/chrome/browser/devtools/devtools_window_testing.cc index 35be47f..aba0303 100644 --- a/chrome/browser/devtools/devtools_window_testing.cc +++ b/chrome/browser/devtools/devtools_window_testing.cc
@@ -20,9 +20,8 @@ const char kHarnessScript[] = "Tests.js"; typedef std::vector<DevToolsWindowTesting*> DevToolsWindowTestings; -base::LazyInstance<DevToolsWindowTestings>::Leaky g_instances = - LAZY_INSTANCE_INITIALIZER; - +base::LazyInstance<DevToolsWindowTestings>::Leaky + g_devtools_window_testing_instances = LAZY_INSTANCE_INITIALIZER; } DevToolsWindowTesting::DevToolsWindowTesting(DevToolsWindow* window) @@ -30,11 +29,12 @@ DCHECK(window); window->close_callback_ = base::Bind(&DevToolsWindowTesting::WindowClosed, window); - g_instances.Get().push_back(this); + g_devtools_window_testing_instances.Get().push_back(this); } DevToolsWindowTesting::~DevToolsWindowTesting() { - DevToolsWindowTestings* instances = g_instances.Pointer(); + DevToolsWindowTestings* instances = + g_devtools_window_testing_instances.Pointer(); DevToolsWindowTestings::iterator it( std::find(instances->begin(), instances->end(), this)); DCHECK(it != instances->end()); @@ -55,9 +55,10 @@ // static DevToolsWindowTesting* DevToolsWindowTesting::Find(DevToolsWindow* window) { - if (!g_instances.IsCreated()) + if (!g_devtools_window_testing_instances.IsCreated()) return NULL; - DevToolsWindowTestings* instances = g_instances.Pointer(); + DevToolsWindowTestings* instances = + g_devtools_window_testing_instances.Pointer(); for (DevToolsWindowTestings::iterator it(instances->begin()); it != instances->end(); ++it) {
diff --git a/chrome/browser/download/download_item_model.cc b/chrome/browser/download/download_item_model.cc index 59e6124..c50d434 100644 --- a/chrome/browser/download/download_item_model.cc +++ b/chrome/browser/download/download_item_model.cc
@@ -392,13 +392,14 @@ int max_width) const { base::string16 tooltip = gfx::ElideFilename(download_->GetFileNameToReportUser(), font_list, - max_width, gfx::Typesetter::TOOLTIPS); + max_width, gfx::Typesetter::NATIVE); content::DownloadInterruptReason reason = download_->GetLastReason(); if (download_->GetState() == DownloadItem::INTERRUPTED && reason != content::DOWNLOAD_INTERRUPT_REASON_USER_CANCELED) { tooltip += base::ASCIIToUTF16("\n"); - tooltip += gfx::ElideText(InterruptReasonStatusMessage(reason), - font_list, max_width, gfx::ELIDE_TAIL); + tooltip += + gfx::ElideText(InterruptReasonStatusMessage(reason), font_list, + max_width, gfx::ELIDE_TAIL, gfx::Typesetter::NATIVE); } return tooltip; } @@ -409,7 +410,7 @@ DCHECK(IsDangerous()); base::string16 elided_filename = gfx::ElideFilename(download_->GetFileNameToReportUser(), font_list, - base_width, gfx::Typesetter::PLATFORM); + base_width, gfx::Typesetter::BROWSER); switch (download_->GetDangerType()) { case content::DOWNLOAD_DANGER_TYPE_DANGEROUS_URL: { return l10n_util::GetStringUTF16(IDS_PROMPT_MALICIOUS_DOWNLOAD_URL);
diff --git a/chrome/browser/extensions/api/cloud_print_private/cloud_print_private_api.cc b/chrome/browser/extensions/api/cloud_print_private/cloud_print_private_api.cc index a1c2baeb..a00c43c 100644 --- a/chrome/browser/extensions/api/cloud_print_private/cloud_print_private_api.cc +++ b/chrome/browser/extensions/api/cloud_print_private/cloud_print_private_api.cc
@@ -21,20 +21,20 @@ const char kErrorIncognito[] = "Cannot access in incognito mode"; -CloudPrintTestsDelegate* g_instance = nullptr; +CloudPrintTestsDelegate* g_cloud_print_private_api_instance = nullptr; } // namespace CloudPrintTestsDelegate* CloudPrintTestsDelegate::Get() { - return g_instance; + return g_cloud_print_private_api_instance; } CloudPrintTestsDelegate::CloudPrintTestsDelegate() { - g_instance = this; + g_cloud_print_private_api_instance = this; } CloudPrintTestsDelegate::~CloudPrintTestsDelegate() { - g_instance = nullptr; + g_cloud_print_private_api_instance = nullptr; } CloudPrintPrivateSetupConnectorFunction::
diff --git a/chrome/browser/extensions/api/metrics_private/metrics_apitest.cc b/chrome/browser/extensions/api/metrics_private/metrics_apitest.cc index c6fd082..b41a3e1 100644 --- a/chrome/browser/extensions/api/metrics_private/metrics_apitest.cc +++ b/chrome/browser/extensions/api/metrics_private/metrics_apitest.cc
@@ -94,8 +94,8 @@ void ValidateHistograms(const RecordedHistogram* recorded, int count) { - base::StatisticsRecorder::Histograms histograms; - base::StatisticsRecorder::GetHistograms(&histograms); + const base::StatisticsRecorder::Histograms histograms = + base::StatisticsRecorder::GetHistograms(); // Code other than the tests tun here will record some histogram values, but // we will ignore those. This function validates that all the histogram we
diff --git a/chrome/browser/extensions/extension_garbage_collector_unittest.cc b/chrome/browser/extensions/extension_garbage_collector_unittest.cc index 5de2e94a..4294a39 100644 --- a/chrome/browser/extensions/extension_garbage_collector_unittest.cc +++ b/chrome/browser/extensions/extension_garbage_collector_unittest.cc
@@ -20,6 +20,7 @@ #include "content/public/test/test_browser_thread_bundle.h" #include "content/public/test/test_utils.h" #include "extensions/browser/extension_prefs.h" +#include "extensions/browser/pref_names.h" #include "ppapi/features/features.h" namespace extensions { @@ -52,7 +53,7 @@ // Simulate that one of them got partially deleted by clearing its pref. { - DictionaryPrefUpdate update(profile_->GetPrefs(), "extensions.settings"); + DictionaryPrefUpdate update(profile_->GetPrefs(), pref_names::kExtensions); base::DictionaryValue* dict = update.Get(); ASSERT_TRUE(dict != NULL); dict->Remove(kExtensionId, NULL); @@ -87,7 +88,7 @@ // Simulate that one of them got partially deleted by clearing its pref. { - DictionaryPrefUpdate update(profile_->GetPrefs(), "extensions.settings"); + DictionaryPrefUpdate update(profile_->GetPrefs(), pref_names::kExtensions); base::DictionaryValue* dict = update.Get(); ASSERT_TRUE(dict != NULL); dict->Remove(kExtensionId, NULL);
diff --git a/chrome/browser/extensions/extension_messages_apitest.cc b/chrome/browser/extensions/extension_messages_apitest.cc index 9f298505..1538c309 100644 --- a/chrome/browser/extensions/extension_messages_apitest.cc +++ b/chrome/browser/extensions/extension_messages_apitest.cc
@@ -211,13 +211,7 @@ DISALLOW_COPY_AND_ASSIGN(MessagingApiTest); }; -// Failing on linux-chromeos-rel: http://crbug.com/798560 -#if defined(OS_CHROMEOS) -#define MAYBE_Messaging DISABLED_Messaging -#else -#define MAYBE_Messaging Messaging -#endif -IN_PROC_BROWSER_TEST_P(MessagingApiTest, MAYBE_Messaging) { +IN_PROC_BROWSER_TEST_P(MessagingApiTest, Messaging) { ASSERT_TRUE(RunExtensionTest("messaging/connect")) << message_; }
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc index 7ca58ab..e42397b 100644 --- a/chrome/browser/extensions/extension_service.cc +++ b/chrome/browser/extensions/extension_service.cc
@@ -924,6 +924,9 @@ registry_->RemoveBlocked(extension->id()); AddExtension(extension.get()); } + // While extensions are blocked, we won't display any external install + // warnings. Now that they are unblocked, we should update the error. + external_install_manager_->UpdateExternalExtensionAlert(); } void ExtensionService::GrantPermissionsAndEnableExtension(
diff --git a/chrome/browser/extensions/extension_service_test_base.cc b/chrome/browser/extensions/extension_service_test_base.cc index 74eee1b4..09b97fd9 100644 --- a/chrome/browser/extensions/extension_service_test_base.cc +++ b/chrome/browser/extensions/extension_service_test_base.cc
@@ -32,6 +32,7 @@ #include "content/public/browser/browser_context.h" #include "extensions/browser/extension_prefs.h" #include "extensions/browser/extension_registry.h" +#include "extensions/browser/pref_names.h" #if defined(OS_CHROMEOS) #include "chrome/browser/chromeos/extensions/install_limiter.h" @@ -190,7 +191,7 @@ size_t ExtensionServiceTestBase::GetPrefKeyCount() { const base::DictionaryValue* dict = - profile()->GetPrefs()->GetDictionary("extensions.settings"); + profile()->GetPrefs()->GetDictionary(pref_names::kExtensions); if (!dict) { ADD_FAILURE(); return 0; @@ -212,7 +213,7 @@ PrefService* prefs = profile()->GetPrefs(); const base::DictionaryValue* dict = - prefs->GetDictionary("extensions.settings"); + prefs->GetDictionary(pref_names::kExtensions); if (!dict) { return testing::AssertionFailure() << "extension.settings does not exist " << msg; @@ -245,7 +246,7 @@ PrefService* prefs = profile()->GetPrefs(); const base::DictionaryValue* dict = - prefs->GetDictionary("extensions.settings"); + prefs->GetDictionary(pref_names::kExtensions); ASSERT_TRUE(dict != NULL) << msg; const base::DictionaryValue* pref = NULL; ASSERT_TRUE(dict->GetDictionary(extension_id, &pref)) << msg; @@ -264,7 +265,7 @@ expected_val.c_str()); const base::DictionaryValue* dict = - profile()->GetPrefs()->GetDictionary("extensions.settings"); + profile()->GetPrefs()->GetDictionary(pref_names::kExtensions); ASSERT_TRUE(dict != NULL) << msg; const base::DictionaryValue* pref = NULL; std::string manifest_path = extension_id + ".manifest";
diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc index 9dbb7864..3c9a7cf 100644 --- a/chrome/browser/extensions/extension_service_unittest.cc +++ b/chrome/browser/extensions/extension_service_unittest.cc
@@ -112,6 +112,7 @@ #include "extensions/browser/install_flag.h" #include "extensions/browser/management_policy.h" #include "extensions/browser/mock_external_provider.h" +#include "extensions/browser/pref_names.h" #include "extensions/browser/test_extension_registry_observer.h" #include "extensions/browser/test_management_policy.h" #include "extensions/browser/uninstall_reason.h" @@ -693,8 +694,8 @@ bool IsPrefExist(const std::string& extension_id, const std::string& pref_path) { - const base::DictionaryValue* dict = - profile()->GetPrefs()->GetDictionary("extensions.settings"); + const base::DictionaryValue* dict = profile()->GetPrefs()->GetDictionary( + extensions::pref_names::kExtensions); if (dict == NULL) return false; const base::DictionaryValue* pref = NULL; if (!dict->GetDictionary(extension_id, &pref)) { @@ -714,7 +715,8 @@ const std::string& pref_path, std::unique_ptr<base::Value> value, const std::string& msg) { - DictionaryPrefUpdate update(profile()->GetPrefs(), "extensions.settings"); + DictionaryPrefUpdate update(profile()->GetPrefs(), + extensions::pref_names::kExtensions); base::DictionaryValue* dict = update.Get(); ASSERT_TRUE(dict != NULL) << msg; base::DictionaryValue* pref = NULL; @@ -752,7 +754,8 @@ std::string msg = " while clearing: "; msg += extension_id + " " + pref_path; - DictionaryPrefUpdate update(profile()->GetPrefs(), "extensions.settings"); + DictionaryPrefUpdate update(profile()->GetPrefs(), + extensions::pref_names::kExtensions); base::DictionaryValue* dict = update.Get(); ASSERT_TRUE(dict != NULL) << msg; base::DictionaryValue* pref = NULL; @@ -6451,6 +6454,31 @@ ASSERT_FALSE(AddPendingSyncInstall()); } +// Test that the blocked pending external extension should be ignored until +// it's unblocked. (crbug.com/797369) +TEST_F(ExtensionServiceTest, BlockedExternalExtension) { + FeatureSwitch::ScopedOverride prompt( + FeatureSwitch::prompt_for_external_extensions(), true); + + InitializeEmptyExtensionService(); + MockExternalProvider* provider = + AddMockExternalProvider(Manifest::EXTERNAL_PREF); + + service()->external_install_manager()->UpdateExternalExtensionAlert(); + EXPECT_FALSE(HasExternalInstallErrors(service())); + + service()->BlockAllExtensions(); + + provider->UpdateOrAddExtension(page_action, "1.0.0.0", + data_dir().AppendASCII("page_action.crx")); + + WaitForExternalExtensionInstalled(); + EXPECT_FALSE(HasExternalInstallErrors(service())); + + service()->UnblockAllExtensions(); + EXPECT_TRUE(HasExternalInstallErrors(service())); +} + // Test that installing an external extension displays a GlobalError. TEST_F(ExtensionServiceTest, ExternalInstallGlobalError) { FeatureSwitch::ScopedOverride prompt(
diff --git a/chrome/browser/extensions/external_install_manager.cc b/chrome/browser/extensions/external_install_manager.cc index 6f89f09..76052ee 100644 --- a/chrome/browser/extensions/external_install_manager.cc +++ b/chrome/browser/extensions/external_install_manager.cc
@@ -136,10 +136,17 @@ // external extensions. const ExtensionSet& disabled_extensions = ExtensionRegistry::Get(browser_context_)->disabled_extensions(); + const ExtensionSet& blocked_extensions = + ExtensionRegistry::Get(browser_context_)->blocked_extensions(); for (const auto& id : unacknowledged_ids_) { if (base::ContainsKey(errors_, id) || shown_ids_.count(id) > 0) continue; + // Ignore the blocked and disabled extensions. They will be put into + // disabled list once unblocked. + if (blocked_extensions.GetByID(id)) + continue; + const Extension* extension = disabled_extensions.GetByID(id); CHECK(extension);
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index 51f936a8..44dbac4 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -1409,6 +1409,7 @@ const char kTLS13VariantDisabled[] = "Disabled"; const char kTLS13VariantDeprecated[] = "Disabled (Deprecated Setting)"; const char kTLS13VariantDraft22[] = "Enabled (Draft 22)"; +const char kTLS13VariantDraft23[] = "Enabled (Draft 23)"; const char kTLS13VariantExperiment2[] = "Enabled (Experiment 2)"; const char kTopDocumentIsolationName[] = "Top document isolation";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 06df3d93..5119532 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -837,6 +837,7 @@ extern const char kTLS13VariantDisabled[]; extern const char kTLS13VariantDeprecated[]; extern const char kTLS13VariantDraft22[]; +extern const char kTLS13VariantDraft23[]; extern const char kTLS13VariantExperiment2[]; extern const char kSuggestionsWithSubStringMatchName[];
diff --git a/chrome/browser/infobars/infobars_browsertest.cc b/chrome/browser/infobars/infobars_browsertest.cc index a69bf23..6c6d5e0 100644 --- a/chrome/browser/infobars/infobars_browsertest.cc +++ b/chrome/browser/infobars/infobars_browsertest.cc
@@ -270,7 +270,7 @@ break; case IBD::EXTENSION_DEV_TOOLS_INFOBAR_DELEGATE: - extensions::ExtensionDevToolsInfoBar::Create("id", "name", nullptr, + extensions::ExtensionDevToolsInfoBar::Create("id", "Extension", nullptr, base::Closure()); break; @@ -344,10 +344,15 @@ CollectedCookiesInfoBarDelegate::Create(GetInfoBarService()); break; - case IBD::INSTALLATION_ERROR_INFOBAR_DELEGATE: - InstallationErrorInfoBarDelegate::Create(GetInfoBarService(), - extensions::CrxInstallError()); + case IBD::INSTALLATION_ERROR_INFOBAR_DELEGATE: { + const base::string16 msg = + l10n_util::GetStringUTF16(IDS_EXTENSION_INSTALL_DISALLOWED_ON_SITE); + InstallationErrorInfoBarDelegate::Create( + GetInfoBarService(), + extensions::CrxInstallError( + extensions::CrxInstallError::ERROR_OFF_STORE, msg)); break; + } case IBD::ALTERNATE_NAV_INFOBAR_DELEGATE: { AutocompleteMatch match; @@ -410,9 +415,9 @@ case IBD::DATA_REDUCTION_PROXY_PREVIEW_INFOBAR_DELEGATE: PreviewsInfoBarDelegate::Create( - GetWebContents(), previews::PreviewsType::LOFI, base::Time(), true, - false, PreviewsInfoBarDelegate::OnDismissPreviewsInfobarCallback(), - nullptr); + GetWebContents(), previews::PreviewsType::LOFI, base::Time::Now(), + true, true, + PreviewsInfoBarDelegate::OnDismissPreviewsInfobarCallback(), nullptr); break; case IBD::AUTOMATION_INFOBAR_DELEGATE:
diff --git a/chrome/browser/installable/installable_manager.cc b/chrome/browser/installable/installable_manager.cc index 92a7245..7b6a061 100644 --- a/chrome/browser/installable/installable_manager.cc +++ b/chrome/browser/installable/installable_manager.cc
@@ -334,6 +334,7 @@ has_pwa_check_ = false; metrics_ = base::MakeUnique<InstallableMetrics>(); + eligibility_ = base::MakeUnique<EligiblityProperty>(); manifest_ = base::MakeUnique<ManifestProperty>(); valid_manifest_ = base::MakeUnique<ValidManifestProperty>(); worker_ = base::MakeUnique<ServiceWorkerProperty>();
diff --git a/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc b/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc index 65c3337a1..1e05704 100644 --- a/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc +++ b/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc
@@ -798,15 +798,28 @@ // Update the PreviewsState for main frame response if needed. if (info->GetResourceType() == content::RESOURCE_TYPE_MAIN_FRAME && request->url().SchemeIsHTTPOrHTTPS()) { + // Annotate request if no-transform directive found in response headers. + if (request->response_headers() && + request->response_headers()->HasHeaderValue("cache-control", + "no-transform")) { + previews::PreviewsUserData* previews_user_data = + previews::PreviewsUserData::GetData(*request); + previews_user_data->SetCacheControlNoTransformDirective(); + } + + // Determine effective PreviewsState for this committed main frame response. content::PreviewsState committed_state = DetermineCommittedPreviews( request, static_cast<content::PreviewsState>(response->head.previews_state)); + // Update previews state in response to renderer. response->head.previews_state = static_cast<int>(committed_state); + // Update previews state in nav data to UI. ChromeNavigationData* data = ChromeNavigationData::GetDataAndCreateIfNecessary(request); data->set_previews_state(committed_state); + // Capture committed previews type, if any, in PreviewsUserData. // Note: this is for the subset of previews types that are decided upon // navigation commit. Previews types that are determined prior to
diff --git a/chrome/browser/loader/chrome_resource_dispatcher_host_delegate_unittest.cc b/chrome/browser/loader/chrome_resource_dispatcher_host_delegate_unittest.cc index 11887380..4717d0f 100644 --- a/chrome/browser/loader/chrome_resource_dispatcher_host_delegate_unittest.cc +++ b/chrome/browser/loader/chrome_resource_dispatcher_host_delegate_unittest.cc
@@ -142,4 +142,13 @@ content::NOSCRIPT_ON, ChromeResourceDispatcherHostDelegateTest::DetermineCommittedPreviews( fake_request.get(), enabled_previews)); + + // Now ensure that the no transform directive honored for NoScript. + previews::PreviewsUserData::Create(fake_request.get(), 1); + previews::PreviewsUserData::GetData(*fake_request.get()) + ->SetCacheControlNoTransformDirective(); + EXPECT_EQ( + content::PREVIEWS_OFF, + ChromeResourceDispatcherHostDelegateTest::DetermineCommittedPreviews( + fake_request.get(), enabled_previews)); }
diff --git a/chrome/browser/mac/exception_processor_unittest.mm b/chrome/browser/mac/exception_processor_unittest.mm index a0aa908..2253e50 100644 --- a/chrome/browser/mac/exception_processor_unittest.mm +++ b/chrome/browser/mac/exception_processor_unittest.mm
@@ -12,6 +12,7 @@ #include "base/metrics/histogram_macros.h" #include "base/metrics/histogram_samples.h" #include "base/metrics/statistics_recorder.h" +#include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" using base::HistogramBase; @@ -47,9 +48,8 @@ } TEST(ExceptionProcessorTest, RecordException) { - StatisticsRecorder::Histograms histograms; - StatisticsRecorder::GetSnapshot("OSX.NSException", &histograms); - EXPECT_EQ(0U, histograms.size()); + EXPECT_THAT(StatisticsRecorder::GetSnapshot("OSX.NSException"), + testing::IsEmpty()); // Record some known exceptions. RecordExceptionWithUma(ExceptionNamed(NSGenericException)); @@ -70,8 +70,9 @@ RecordExceptionWithUma(nil); // We should have exactly the right number of exceptions. - StatisticsRecorder::GetSnapshot("OSX.NSException", &histograms); - EXPECT_EQ(1U, histograms.size()); + const StatisticsRecorder::Histograms histograms = + StatisticsRecorder::GetSnapshot("OSX.NSException"); + ASSERT_THAT(histograms, testing::SizeIs(1)); EXPECT_EQ(HistogramBase::kUmaTargetedHistogramFlag, histograms[0]->flags()); std::unique_ptr<HistogramSamples> samples(histograms[0]->SnapshotSamples());
diff --git a/chrome/browser/memory/memory_kills_monitor.cc b/chrome/browser/memory/memory_kills_monitor.cc index e9b989d..1fd6347 100644 --- a/chrome/browser/memory/memory_kills_monitor.cc +++ b/chrome/browser/memory/memory_kills_monitor.cc
@@ -41,7 +41,7 @@ namespace { -base::LazyInstance<MemoryKillsMonitor>::Leaky g_instance = +base::LazyInstance<MemoryKillsMonitor>::Leaky g_memory_kills_monitor_instance = LAZY_INSTANCE_INITIALIZER; int64_t GetTimestamp(const std::string& line) { @@ -93,14 +93,14 @@ auto* login_state = chromeos::LoginState::Get(); if (login_state) - login_state->AddObserver(g_instance.Pointer()); + login_state->AddObserver(g_memory_kills_monitor_instance.Pointer()); else LOG(ERROR) << "LoginState is not initialized"; // The MemoryKillsMonitor::Handle will notify the MemoryKillsMonitor // when it is destroyed so that the underlying thread can at a minimum not // do extra work during shutdown. - return base::MakeUnique<Handle>(g_instance.Pointer()); + return base::MakeUnique<Handle>(g_memory_kills_monitor_instance.Pointer()); } // static @@ -108,7 +108,8 @@ const std::string& type, int estimated_freed_kb) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - g_instance.Get().LogLowMemoryKillImpl(type, estimated_freed_kb); + g_memory_kills_monitor_instance.Get().LogLowMemoryKillImpl( + type, estimated_freed_kb); } // static @@ -121,7 +122,7 @@ "Out of memory: Kill process .* score (\\d+)", &oom_badness)) { int64_t time_stamp = GetTimestamp(line); - g_instance.Get().LogOOMKill(time_stamp, oom_badness); + g_memory_kills_monitor_instance.Get().LogOOMKill(time_stamp, oom_badness); } } @@ -265,7 +266,7 @@ } MemoryKillsMonitor* MemoryKillsMonitor::GetForTesting() { - return g_instance.Pointer(); + return g_memory_kills_monitor_instance.Pointer(); } } // namespace memory
diff --git a/chrome/browser/memory/memory_kills_monitor_unittest.cc b/chrome/browser/memory/memory_kills_monitor_unittest.cc index 09990cb0..cba304c 100644 --- a/chrome/browser/memory/memory_kills_monitor_unittest.cc +++ b/chrome/browser/memory/memory_kills_monitor_unittest.cc
@@ -36,7 +36,8 @@ std::unique_ptr<base::StatisticsRecorder> statistic_recorder( base::StatisticsRecorder::CreateTemporaryForTesting()); - MemoryKillsMonitor* g_instance = MemoryKillsMonitor::GetForTesting(); + MemoryKillsMonitor* g_memory_kills_monitor_unittest_instance = + MemoryKillsMonitor::GetForTesting(); MemoryKillsMonitor::LogLowMemoryKill("APP", 123); MemoryKillsMonitor::LogLowMemoryKill("APP", 100); @@ -49,7 +50,7 @@ ASSERT_FALSE(oom_count_histogram); // Start monitoring. - g_instance->StartMonitoring(); + g_memory_kills_monitor_unittest_instance->StartMonitoring(); lmk_count_histogram = GetLowMemoryKillsCountHistogram(); oom_count_histogram = GetOOMKillsCountHistogram(); ASSERT_TRUE(lmk_count_histogram); @@ -157,9 +158,11 @@ } // Call StartMonitoring multiple times. - base::PlatformThreadId tid1 = g_instance->non_joinable_worker_thread_->tid(); - g_instance->StartMonitoring(); - base::PlatformThreadId tid2 = g_instance->non_joinable_worker_thread_->tid(); + base::PlatformThreadId tid1 = g_memory_kills_monitor_unittest_instance + ->non_joinable_worker_thread_->tid(); + g_memory_kills_monitor_unittest_instance->StartMonitoring(); + base::PlatformThreadId tid2 = g_memory_kills_monitor_unittest_instance + ->non_joinable_worker_thread_->tid(); EXPECT_EQ(tid1, tid2); lmk_count_histogram = GetLowMemoryKillsCountHistogram();
diff --git a/chrome/browser/metrics/desktop_session_duration/desktop_session_duration_tracker.cc b/chrome/browser/metrics/desktop_session_duration/desktop_session_duration_tracker.cc index acacacc..92a11780 100644 --- a/chrome/browser/metrics/desktop_session_duration/desktop_session_duration_tracker.cc +++ b/chrome/browser/metrics/desktop_session_duration/desktop_session_duration_tracker.cc
@@ -13,7 +13,8 @@ namespace { -DesktopSessionDurationTracker* g_instance = nullptr; +DesktopSessionDurationTracker* g_desktop_session_duration_tracker_instance = + nullptr; const base::TimeDelta kZeroTime = base::TimeDelta::FromSeconds(0); @@ -21,19 +22,20 @@ // static void DesktopSessionDurationTracker::Initialize() { - DCHECK(!g_instance); - g_instance = new DesktopSessionDurationTracker; + DCHECK(!g_desktop_session_duration_tracker_instance); + g_desktop_session_duration_tracker_instance = + new DesktopSessionDurationTracker; } // static bool DesktopSessionDurationTracker::IsInitialized() { - return g_instance != nullptr; + return g_desktop_session_duration_tracker_instance != nullptr; } // static DesktopSessionDurationTracker* DesktopSessionDurationTracker::Get() { - DCHECK(g_instance); - return g_instance; + DCHECK(g_desktop_session_duration_tracker_instance); + return g_desktop_session_duration_tracker_instance; } void DesktopSessionDurationTracker::StartTimer(base::TimeDelta duration) { @@ -78,9 +80,9 @@ // static void DesktopSessionDurationTracker::CleanupForTesting() { - DCHECK(g_instance); - delete g_instance; - g_instance = nullptr; + DCHECK(g_desktop_session_duration_tracker_instance); + delete g_desktop_session_duration_tracker_instance; + g_desktop_session_duration_tracker_instance = nullptr; } void DesktopSessionDurationTracker::OnAudioStart() {
diff --git a/chrome/browser/metrics/leak_detector/leak_detector_controller_unittest.cc b/chrome/browser/metrics/leak_detector/leak_detector_controller_unittest.cc index b233aac..03904c6 100644 --- a/chrome/browser/metrics/leak_detector/leak_detector_controller_unittest.cc +++ b/chrome/browser/metrics/leak_detector/leak_detector_controller_unittest.cc
@@ -60,15 +60,16 @@ // DCHECK when called outside the scope of a TestBrowserThreadBundle. // // See src/components/metrics/leak_detector/leak_detector.h for more info. -base::LazyInstance<TestLeakDetectorController>::Leaky g_instance = - LAZY_INSTANCE_INITIALIZER; +base::LazyInstance<TestLeakDetectorController>::Leaky + g_leak_detector_controller_unittest_instance = LAZY_INSTANCE_INITIALIZER; TEST_F(LeakDetectorControllerTest, SingleReport) { MemoryLeakReportProto report; report.set_size_bytes(8); InitializeRepeatedField({1, 2, 3, 4}, report.mutable_call_stack()); - TestLeakDetectorController* controller = &g_instance.Get(); + TestLeakDetectorController* controller = + &g_leak_detector_controller_unittest_instance.Get(); controller->OnLeaksFound({report}); std::vector<MemoryLeakReportProto> stored_reports; @@ -113,7 +114,8 @@ entry->mutable_counts_by_size()); entry->set_count_for_call_stack(45); - TestLeakDetectorController* controller = &g_instance.Get(); + TestLeakDetectorController* controller = + &g_leak_detector_controller_unittest_instance.Get(); controller->OnLeaksFound({report}); std::vector<MemoryLeakReportProto> stored_reports; @@ -150,7 +152,8 @@ } TEST_F(LeakDetectorControllerTest, MultipleReportsSeparately) { - TestLeakDetectorController* controller = &g_instance.Get(); + TestLeakDetectorController* controller = + &g_leak_detector_controller_unittest_instance.Get(); std::vector<MemoryLeakReportProto> stored_reports; // Pass in first report. @@ -228,7 +231,8 @@ InitializeRepeatedField({9, 10, 11, 12, 13, 14, 15, 16}, reports[2].mutable_call_stack()); - TestLeakDetectorController* controller = &g_instance.Get(); + TestLeakDetectorController* controller = + &g_leak_detector_controller_unittest_instance.Get(); controller->OnLeaksFound(reports); std::vector<MemoryLeakReportProto> stored_reports;
diff --git a/chrome/browser/metrics/renderer_uptime_tracker.cc b/chrome/browser/metrics/renderer_uptime_tracker.cc index 9597605..39d320e 100644 --- a/chrome/browser/metrics/renderer_uptime_tracker.cc +++ b/chrome/browser/metrics/renderer_uptime_tracker.cc
@@ -18,28 +18,28 @@ namespace { -RendererUptimeTracker* g_instance = nullptr; +RendererUptimeTracker* g_renderer_uptime_tracker_instance = nullptr; } // namespace // static void RendererUptimeTracker::Initialize() { - DCHECK(!g_instance); - g_instance = new RendererUptimeTracker; + DCHECK(!g_renderer_uptime_tracker_instance); + g_renderer_uptime_tracker_instance = new RendererUptimeTracker; } // static RendererUptimeTracker* RendererUptimeTracker::SetMockRendererUptimeTracker( RendererUptimeTracker* tracker) { - RendererUptimeTracker* old_tracker = g_instance; - g_instance = tracker; + RendererUptimeTracker* old_tracker = g_renderer_uptime_tracker_instance; + g_renderer_uptime_tracker_instance = tracker; return old_tracker; } // static RendererUptimeTracker* RendererUptimeTracker::Get() { - DCHECK(g_instance); - return g_instance; + DCHECK(g_renderer_uptime_tracker_instance); + return g_renderer_uptime_tracker_instance; } RendererUptimeTracker::RendererUptimeTracker() {
diff --git a/chrome/browser/metrics/tab_stats_tracker.cc b/chrome/browser/metrics/tab_stats_tracker.cc index a400635..9563453 100644 --- a/chrome/browser/metrics/tab_stats_tracker.cc +++ b/chrome/browser/metrics/tab_stats_tracker.cc
@@ -32,7 +32,7 @@ base::TimeDelta::FromMilliseconds(60 * 30); // The global TabStatsTracker instance. -TabStatsTracker* g_instance = nullptr; +TabStatsTracker* g_tab_stats_tracker_instance = nullptr; } // namespace @@ -102,12 +102,12 @@ // static void TabStatsTracker::SetInstance(std::unique_ptr<TabStatsTracker> instance) { - DCHECK_EQ(nullptr, g_instance); - g_instance = instance.release(); + DCHECK_EQ(nullptr, g_tab_stats_tracker_instance); + g_tab_stats_tracker_instance = instance.release(); } TabStatsTracker* TabStatsTracker::GetInstance() { - return g_instance; + return g_tab_stats_tracker_instance; } void TabStatsTracker::RegisterPrefs(PrefRegistrySimple* registry) {
diff --git a/chrome/browser/notifications/arc_application_notifier_controller_chromeos.cc b/chrome/browser/notifications/arc_application_notifier_controller_chromeos.cc index 0e54121b..dc00ad1 100644 --- a/chrome/browser/notifications/arc_application_notifier_controller_chromeos.cc +++ b/chrome/browser/notifications/arc_application_notifier_controller_chromeos.cc
@@ -71,8 +71,8 @@ message_center::NotifierId notifier_id( message_center::NotifierId::ARC_APPLICATION, app_id); auto ui_data = ash::mojom::NotifierUiData::New( - notifier_id, base::UTF8ToUTF16(app->name), false, - app->notifications_enabled, false /* enforced */, icon->image_skia()); + notifier_id, base::UTF8ToUTF16(app->name), app->notifications_enabled, + false /* enforced */, icon->image_skia()); icons_.push_back(std::move(icon)); results.push_back(std::move(ui_data)); }
diff --git a/chrome/browser/notifications/chrome_ash_message_center_client.cc b/chrome/browser/notifications/chrome_ash_message_center_client.cc index 3c776ff..e06dada 100644 --- a/chrome/browser/notifications/chrome_ash_message_center_client.cc +++ b/chrome/browser/notifications/chrome_ash_message_center_client.cc
@@ -139,12 +139,6 @@ notifier_id, enabled); } -void ChromeAshMessageCenterClient::HandleNotifierAdvancedSettingsRequested( - const NotifierId& notifier_id) { - sources_[notifier_id.type]->OnNotifierAdvancedSettingsRequested( - GetProfileForNotifiers(), notifier_id); -} - void ChromeAshMessageCenterClient::GetNotifierList( GetNotifierListCallback callback) { std::vector<ash::mojom::NotifierUiDataPtr> notifiers;
diff --git a/chrome/browser/notifications/chrome_ash_message_center_client.h b/chrome/browser/notifications/chrome_ash_message_center_client.h index fffa589..7dd0dde 100644 --- a/chrome/browser/notifications/chrome_ash_message_center_client.h +++ b/chrome/browser/notifications/chrome_ash_message_center_client.h
@@ -47,8 +47,6 @@ int button_index) override; void SetNotifierEnabled(const message_center::NotifierId& notifier_id, bool enabled) override; - void HandleNotifierAdvancedSettingsRequested( - const message_center::NotifierId& notifier_id) override; void GetNotifierList(GetNotifierListCallback callback) override; // NotifierController::Observer:
diff --git a/chrome/browser/notifications/extension_notifier_controller.cc b/chrome/browser/notifications/extension_notifier_controller.cc index 29dd7f7a..4042525 100644 --- a/chrome/browser/notifications/extension_notifier_controller.cc +++ b/chrome/browser/notifications/extension_notifier_controller.cc
@@ -51,20 +51,10 @@ message_center::NotifierId notifier_id( message_center::NotifierId::APPLICATION, extension->id()); - // This may be null in unit tests. - extensions::EventRouter* event_router = - extensions::EventRouter::Get(profile); - bool has_advanced_settings_button = - event_router - ? event_router->ExtensionHasEventListener( - extension->id(), - extensions::api::notifications::OnShowSettings::kEventName) - : false; NotifierStateTracker* const notifier_state_tracker = NotifierStateTrackerFactory::GetForProfile(profile); ui_data.push_back(ash::mojom::NotifierUiData::New( notifier_id, base::UTF8ToUTF16(extension->name()), - has_advanced_settings_button, notifier_state_tracker->IsNotifierEnabled(notifier_id), false /* enforced */, gfx::ImageSkia())); app_icon_loader_->FetchImage(extension->id()); @@ -82,21 +72,6 @@ observer_->OnNotifierEnabledChanged(notifier_id, enabled); } -void ExtensionNotifierController::OnNotifierAdvancedSettingsRequested( - Profile* profile, - const message_center::NotifierId& notifier_id) { - const std::string& extension_id = notifier_id.id; - - extensions::EventRouter* event_router = extensions::EventRouter::Get(profile); - std::unique_ptr<base::ListValue> args(new base::ListValue()); - - std::unique_ptr<extensions::Event> event(new extensions::Event( - extensions::events::NOTIFICATIONS_ON_SHOW_SETTINGS, - extensions::api::notifications::OnShowSettings::kEventName, - std::move(args))); - event_router->DispatchEventToExtension(extension_id, std::move(event)); -} - void ExtensionNotifierController::OnAppImageUpdated( const std::string& id, const gfx::ImageSkia& image) {
diff --git a/chrome/browser/notifications/extension_notifier_controller.h b/chrome/browser/notifications/extension_notifier_controller.h index 516e645..179cc8d 100644 --- a/chrome/browser/notifications/extension_notifier_controller.h +++ b/chrome/browser/notifications/extension_notifier_controller.h
@@ -24,9 +24,6 @@ void SetNotifierEnabled(Profile* profile, const message_center::NotifierId& notifier_id, bool enabled) override; - void OnNotifierAdvancedSettingsRequested( - Profile* profile, - const message_center::NotifierId& notifier_id) override; private: // Overridden from AppIconLoaderDelegate.
diff --git a/chrome/browser/notifications/notifier_controller.h b/chrome/browser/notifications/notifier_controller.h index bb5b86c1..bf685d9 100644 --- a/chrome/browser/notifications/notifier_controller.h +++ b/chrome/browser/notifications/notifier_controller.h
@@ -43,11 +43,6 @@ const message_center::NotifierId& notifier_id, bool enabled) = 0; - // Called when the advanced settings button has been clicked. - virtual void OnNotifierAdvancedSettingsRequested( - Profile* profile, - const message_center::NotifierId& notifier_id) {} - private: DISALLOW_COPY_AND_ASSIGN(NotifierController); };
diff --git a/chrome/browser/notifications/web_page_notifier_controller.cc b/chrome/browser/notifications/web_page_notifier_controller.cc index 748b3c50..36ff5b3 100644 --- a/chrome/browser/notifications/web_page_notifier_controller.cc +++ b/chrome/browser/notifications/web_page_notifier_controller.cc
@@ -50,7 +50,7 @@ HostContentSettingsMapFactory::GetForProfile(profile)->GetWebsiteSetting( url, GURL(), CONTENT_SETTINGS_TYPE_NOTIFICATIONS, std::string(), &info); notifiers.push_back(ash::mojom::NotifierUiData::New( - notifier_id, name, false /* has_advanced_settings */, + notifier_id, name, notifier_state_tracker->IsNotifierEnabled(notifier_id), info.source == content_settings::SETTING_SOURCE_POLICY, gfx::ImageSkia()));
diff --git a/chrome/browser/ntp_snippets/ntp_snippets_metrics.cc b/chrome/browser/ntp_snippets/ntp_snippets_metrics.cc index 5084741c..acb3273 100644 --- a/chrome/browser/ntp_snippets/ntp_snippets_metrics.cc +++ b/chrome/browser/ntp_snippets/ntp_snippets_metrics.cc
@@ -20,17 +20,17 @@ void RecordContentSuggestionsNotificationImpression( ContentSuggestionsNotificationImpression what) { UMA_HISTOGRAM_ENUMERATION(kContentSuggestionsNotificationImpressions, what, - MAX_CONTENT_SUGGESTIONS_NOTIFICATION_IMPRESSION); + ContentSuggestionsNotificationImpression::MAX); } void RecordContentSuggestionsNotificationAction( ContentSuggestionsNotificationAction what) { UMA_HISTOGRAM_ENUMERATION(kContentSuggestionsNotificationActions, what, - MAX_CONTENT_SUGGESTIONS_NOTIFICATION_ACTION); + ContentSuggestionsNotificationAction::MAX); } void RecordContentSuggestionsNotificationOptOut( ContentSuggestionsNotificationOptOut what) { UMA_HISTOGRAM_ENUMERATION(kContentSuggestionsNotificationOptOuts, what, - MAX_CONTENT_SUGGESTIONS_NOTIFICATION_OPT_OUT); + ContentSuggestionsNotificationOptOut::MAX); }
diff --git a/chrome/browser/ntp_snippets/ntp_snippets_metrics.h b/chrome/browser/ntp_snippets/ntp_snippets_metrics.h index 2e70f56..9c899c3 100644 --- a/chrome/browser/ntp_snippets/ntp_snippets_metrics.h +++ b/chrome/browser/ntp_snippets/ntp_snippets_metrics.h
@@ -5,39 +5,35 @@ #ifndef CHROME_BROWSER_NTP_SNIPPETS_NTP_SNIPPETS_METRICS_H_ #define CHROME_BROWSER_NTP_SNIPPETS_NTP_SNIPPETS_METRICS_H_ -enum ContentSuggestionsNotificationImpression { - CONTENT_SUGGESTIONS_ARTICLE = 0, // Server-provided "articles" category. - CONTENT_SUGGESTIONS_NONARTICLE, // Anything else. +enum class ContentSuggestionsNotificationImpression { + ARTICLE = 0, // Server-provided "articles" category. + NONARTICLE, // Anything else. - MAX_CONTENT_SUGGESTIONS_NOTIFICATION_IMPRESSION -}; - -// TODO(https://crbug.com/710254) Switch to enum class to remove need for -// prefix strip. -// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.ntp.snippets -// GENERATED_JAVA_PREFIX_TO_STRIP: CONTENT_SUGGESTIONS_ -enum ContentSuggestionsNotificationAction { - CONTENT_SUGGESTIONS_TAP = 0, // User tapped notification to open article. - CONTENT_SUGGESTIONS_DISMISSAL, // User swiped notification to dismiss it. - - CONTENT_SUGGESTIONS_HIDE_DEADLINE, // notification_extra().deadline passed. - CONTENT_SUGGESTIONS_HIDE_EXPIRY, // NTP no longer shows notified article. - CONTENT_SUGGESTIONS_HIDE_FRONTMOST, // Chrome became the frontmost app. - CONTENT_SUGGESTIONS_HIDE_DISABLED, // NTP no longer shows whole category. - CONTENT_SUGGESTIONS_HIDE_SHUTDOWN, // Content sugg service is shutting down. - - CONTENT_SUGGESTIONS_OPEN_SETTINGS, // User opened settings from notification. - - MAX_CONTENT_SUGGESTIONS_NOTIFICATION_ACTION + MAX }; // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.ntp.snippets -// GENERATED_JAVA_PREFIX_TO_STRIP: CONTENT_SUGGESTIONS_ -enum ContentSuggestionsNotificationOptOut { - CONTENT_SUGGESTIONS_IMPLICIT = 0, // User ignored notifications. - CONTENT_SUGGESTIONS_EXPLICIT, // User explicitly opted-out. +enum class ContentSuggestionsNotificationAction { + TAP = 0, // User tapped notification to open article. + DISMISSAL, // User swiped notification to dismiss it. - MAX_CONTENT_SUGGESTIONS_NOTIFICATION_OPT_OUT + HIDE_DEADLINE, // notification_extra().deadline passed. + HIDE_EXPIRY, // NTP no longer shows notified article. + HIDE_FRONTMOST, // Chrome became the frontmost app. + HIDE_DISABLED, // NTP no longer shows whole category. + HIDE_SHUTDOWN, // Content sugg service is shutting down. + + OPEN_SETTINGS, // User opened settings from notification. + + MAX +}; + +// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.ntp.snippets +enum class ContentSuggestionsNotificationOptOut { + IMPLICIT = 0, // User ignored notifications. + EXPLICIT, // User explicitly opted-out. + + MAX }; void RecordContentSuggestionsNotificationImpression(
diff --git a/chrome/browser/offline_pages/android/offline_pages_download_manager_bridge.cc b/chrome/browser/offline_pages/android/offline_pages_download_manager_bridge.cc index faab823..46584954 100644 --- a/chrome/browser/offline_pages/android/offline_pages_download_manager_bridge.cc +++ b/chrome/browser/offline_pages/android/offline_pages_download_manager_bridge.cc
@@ -16,8 +16,7 @@ namespace offline_pages { namespace android { -// Returns true if ADM is available on this phone. -bool OfflinePagesDownloadManagerBridge::IsAndroidDownloadManagerInstalled() { +bool OfflinePagesDownloadManagerBridge::IsDownloadManagerInstalled() { JNIEnv* env = base::android::AttachCurrentThread(); jboolean is_installed = Java_OfflinePagesDownloadManagerBridge_isAndroidDownloadManagerInstalled( @@ -25,9 +24,7 @@ return is_installed; } -// Returns the ADM ID of the download, which we will place in the offline -// pages database as part of the offline page item. -long OfflinePagesDownloadManagerBridge::addCompletedDownload( +int64_t OfflinePagesDownloadManagerBridge::AddCompletedDownload( const std::string& title, const std::string& description, const std::string& path, @@ -47,13 +44,11 @@ ScopedJavaLocalRef<jstring> j_referer = base::android::ConvertUTF8ToJavaString(env, referer); - long count = Java_OfflinePagesDownloadManagerBridge_addCompletedDownload( + return Java_OfflinePagesDownloadManagerBridge_addCompletedDownload( env, j_title, j_description, j_path, length, j_uri, j_referer); - return count; } -// Returns the number of pages removed. -int OfflinePagesDownloadManagerBridge::remove( +int OfflinePagesDownloadManagerBridge::Remove( const std::vector<int64_t>& android_download_manager_ids) { JNIEnv* env = base::android::AttachCurrentThread(); // Build a JNI array with our ID data.
diff --git a/chrome/browser/offline_pages/android/offline_pages_download_manager_bridge.h b/chrome/browser/offline_pages/android/offline_pages_download_manager_bridge.h index b2fd2aa..e22ba6af 100644 --- a/chrome/browser/offline_pages/android/offline_pages_download_manager_bridge.h +++ b/chrome/browser/offline_pages/android/offline_pages_download_manager_bridge.h
@@ -5,31 +5,29 @@ #ifndef CHROME_BROWSER_OFFLINE_PAGES_ANDROID_OFFLINE_PAGES_DOWNLOAD_MANAGER_BRIDGE_H_ #define CHROME_BROWSER_OFFLINE_PAGES_ANDROID_OFFLINE_PAGES_DOWNLOAD_MANAGER_BRIDGE_H_ +#include <stdint.h> + #include <vector> +#include "components/offline_pages/core/system_download_manager.h" + namespace offline_pages { namespace android { // Bridge between C++ and Java for communicating with the AndroidDownloadManager // on Android. -class OfflinePagesDownloadManagerBridge { +class OfflinePagesDownloadManagerBridge : public SystemDownloadManager { public: - // Returns true if ADM is available on this phone. - static bool IsAndroidDownloadManagerInstalled(); + bool IsDownloadManagerInstalled() override; - // Adds the download to the list managed by the AndroidDownloadManager. - // Returns the ADM ID of the download, which we will place in the offline - // pages database as part of the offline page item. - static long addCompletedDownload(const std::string& title, - const std::string& description, - const std::string& path, - int64_t length, - const std::string& uri, - const std::string& referer); + int64_t AddCompletedDownload(const std::string& title, + const std::string& description, + const std::string& path, + int64_t length, + const std::string& uri, + const std::string& referer) override; - // Removes the pages with the given download IDs, and returns the number of - // pages removed. - static int remove(const std::vector<int64_t>& android_download_manager_ids); + int Remove(const std::vector<int64_t>& android_download_manager_ids) override; }; } // namespace android
diff --git a/chrome/browser/prefs/chrome_command_line_pref_store_ssl_manager_unittest.cc b/chrome/browser/prefs/chrome_command_line_pref_store_ssl_manager_unittest.cc index 7bf34dd3..fbe10a6 100644 --- a/chrome/browser/prefs/chrome_command_line_pref_store_ssl_manager_unittest.cc +++ b/chrome/browser/prefs/chrome_command_line_pref_store_ssl_manager_unittest.cc
@@ -38,7 +38,7 @@ base::CommandLine command_line(base::CommandLine::NO_PROGRAM); command_line.AppendSwitchASCII(switches::kSSLVersionMin, "tls1.1"); command_line.AppendSwitchASCII(switches::kSSLVersionMax, "tls1.2"); - command_line.AppendSwitchASCII(switches::kTLS13Variant, "draft22"); + command_line.AppendSwitchASCII(switches::kTLS13Variant, "draft23"); sync_preferences::PrefServiceMockFactory factory; factory.set_user_prefs(local_state_store); @@ -60,7 +60,7 @@ // Command-line flags should be respected. EXPECT_EQ(net::SSL_PROTOCOL_VERSION_TLS1_1, ssl_config.version_min); EXPECT_EQ(net::SSL_PROTOCOL_VERSION_TLS1_3, ssl_config.version_max); - EXPECT_EQ(net::kTLS13VariantDraft22, ssl_config.tls13_variant); + EXPECT_EQ(net::kTLS13VariantDraft23, ssl_config.tls13_variant); // Explicitly double-check the settings are not in the preference store. const PrefService::Preference* version_min_pref =
diff --git a/chrome/browser/previews/previews_browsertest.cc b/chrome/browser/previews/previews_browsertest.cc index dc77bb48..2986755 100644 --- a/chrome/browser/previews/previews_browsertest.cc +++ b/chrome/browser/previews/previews_browsertest.cc
@@ -34,6 +34,10 @@ https_url_ = https_server_.GetURL("/noscript_test.html"); EXPECT_TRUE(https_url_.SchemeIs(url::kHttpsScheme)); + https_no_transform_url_ = + https_server_.GetURL("/noscript_test_with_no_transform_header.html"); + EXPECT_TRUE(https_no_transform_url_.SchemeIs(url::kHttpsScheme)); + // Set up http server with resource monitor and redirect handler. http_server_.ServeFilesFromSourceDirectory("chrome/test/data/previews"); http_server_.RegisterRequestMonitor(base::Bind( @@ -57,6 +61,7 @@ } const GURL& https_url() const { return https_url_; } + const GURL& https_no_transform_url() const { return https_no_transform_url_; } const GURL& http_url() const { return http_url_; } const GURL& redirect_url() const { return redirect_url_; } bool noscript_css_requested() const { return noscript_css_requested_; } @@ -88,6 +93,7 @@ net::EmbeddedTestServer https_server_; net::EmbeddedTestServer http_server_; GURL https_url_; + GURL https_no_transform_url_; GURL http_url_; GURL redirect_url_; bool noscript_css_requested_; @@ -164,6 +170,19 @@ } IN_PROC_BROWSER_TEST_F(PreviewsNoScriptBrowserTest, + NoScriptPreviewsEnabledButNoTransformDirective) { + base::HistogramTester histogram_tester; + ui_test_utils::NavigateToURL(browser(), https_no_transform_url()); + + // Verify loaded js resource but not css triggered by noscript tag. + EXPECT_TRUE(noscript_js_requested()); + EXPECT_FALSE(noscript_css_requested()); + + histogram_tester.ExpectUniqueSample( + "Previews.CacheControlNoTransform.BlockedPreview", 5 /* NoScript */, 1); +} + +IN_PROC_BROWSER_TEST_F(PreviewsNoScriptBrowserTest, MAYBE_NoScriptPreviewsEnabledHttpRedirectToHttps) { base::HistogramTester histogram_tester; ui_test_utils::NavigateToURL(browser(), redirect_url());
diff --git a/chrome/browser/previews/previews_infobar_tab_helper.cc b/chrome/browser/previews/previews_infobar_tab_helper.cc index db71da1c..f27c121 100644 --- a/chrome/browser/previews/previews_infobar_tab_helper.cc +++ b/chrome/browser/previews/previews_infobar_tab_helper.cc
@@ -146,7 +146,7 @@ // Check for committed main frame preview. if (previews_user_data_ && previews_user_data_->HasCommittedPreviewsType()) { previews::PreviewsType main_frame_preview = - previews_user_data_->GetCommittedPreviewsType(); + previews_user_data_->committed_previews_type(); if (main_frame_preview != previews::PreviewsType::NONE && main_frame_preview != previews::PreviewsType::LOFI) { PreviewsInfoBarDelegate::Create(
diff --git a/chrome/browser/profiles/profile.cc b/chrome/browser/profiles/profile.cc index 89468b9..10a18d7 100644 --- a/chrome/browser/profiles/profile.cc +++ b/chrome/browser/profiles/profile.cc
@@ -54,10 +54,10 @@ namespace { -base::LazyInstance<base::Lock>::Leaky g_instances_lock = +base::LazyInstance<base::Lock>::Leaky g_profile_instances_lock = LAZY_INSTANCE_INITIALIZER; -base::LazyInstance<std::set<content::BrowserContext*>>::Leaky g_instances = - LAZY_INSTANCE_INITIALIZER; +base::LazyInstance<std::set<content::BrowserContext*>>::Leaky + g_profile_instances = LAZY_INSTANCE_INITIALIZER; } // namespace @@ -70,8 +70,8 @@ is_guest_profile_(false), is_system_profile_(false) { #if DCHECK_IS_ON() - base::AutoLock lock(g_instances_lock.Get()); - g_instances.Get().insert(this); + base::AutoLock lock(g_profile_instances_lock.Get()); + g_profile_instances.Get().insert(this); #endif // DCHECK_IS_ON() BrowserContextDependencyManager::GetInstance()->MarkBrowserContextLive(this); @@ -79,8 +79,8 @@ Profile::~Profile() { #if DCHECK_IS_ON() - base::AutoLock lock(g_instances_lock.Get()); - g_instances.Get().erase(this); + base::AutoLock lock(g_profile_instances_lock.Get()); + g_profile_instances.Get().erase(this); #endif // DCHECK_IS_ON() } @@ -94,8 +94,8 @@ // testing, however, there are several BrowserContext subclasses that are not // Profile subclasses, and we can catch them. http://crbug.com/725276 #if DCHECK_IS_ON() - base::AutoLock lock(g_instances_lock.Get()); - if (!g_instances.Get().count(browser_context)) { + base::AutoLock lock(g_profile_instances_lock.Get()); + if (!g_profile_instances.Get().count(browser_context)) { DCHECK(false) << "Non-Profile BrowserContext passed to Profile::FromBrowserContext! " "If you have a test linked in chrome/ you need a chrome/ based test "
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/automation_predicate.js b/chrome/browser/resources/chromeos/chromevox/cvox2/background/automation_predicate.js index 570fbcd..59704ef 100644 --- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/automation_predicate.js +++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/automation_predicate.js
@@ -225,11 +225,20 @@ if (node.name && node.name.length > constants.OBJECT_MAX_CHARCOUNT) return false; - return node.state.focusable || - (AutomationPredicate.leafOrStaticText(node) && - (/\S+/.test(node.name) || - (node.role != Role.LINE_BREAK && node.role != Role.STATIC_TEXT && - node.role != Role.INLINE_TEXT_BOX))); + // Given no other information, ChromeVox wants to visit focusable + // (e.g. tabindex=0) nodes only when it has a name or is a control. + if (node.state.focusable && + (node.name || node.state[State.EDITABLE] || + AutomationPredicate.formField(node))) + return true; + + // Otherwise, leaf or static text nodes that don't contain only whitespace + // should be visited with the exception of non-text only nodes. This covers + // cases where an author might make a link with a name of ' '. + return AutomationPredicate.leafOrStaticText(node) && + (/\S+/.test(node.name) || + (node.role != Role.LINE_BREAK && node.role != Role.STATIC_TEXT && + node.role != Role.INLINE_TEXT_BOX)); }; /**
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js b/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js index c64d530..bdbaac30 100644 --- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js +++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js
@@ -416,7 +416,7 @@ }, paragraph: {speak: `$descendants`}, popUpButton: { - speak: `$value $name $role @aria_has_popup + speak: `$if($value, $value, $descendants) $name $role @aria_has_popup $state $restriction $description` }, radioButton: { @@ -1117,14 +1117,26 @@ this.format_(node, formatString, buff); } } else if (token == 'descendants') { - if (!node || AutomationPredicate.leafOrStaticText(node)) + if (!node) return; - // Construct a range to the leftmost and rightmost leaves. - var leftmost = AutomationUtil.findNodePre( - node, Dir.FORWARD, AutomationPredicate.leafOrStaticText); - var rightmost = AutomationUtil.findNodePre( - node, Dir.BACKWARD, AutomationPredicate.leafOrStaticText); + var leftmost = node; + var rightmost = node; + if (AutomationPredicate.leafOrStaticText(node)) { + // Find any deeper leaves, if any, by starting from one level down. + leftmost = node.firstChild; + rightmost = node.lastChild; + if (!leftmost || !rightmost) + return; + } + + // Construct a range to the leftmost and rightmost leaves. This range + // gets rendered below which results in output that is the same as if + // a user navigated through the entire subtree of |node|. + leftmost = AutomationUtil.findNodePre( + leftmost, Dir.FORWARD, AutomationPredicate.leafOrStaticText); + rightmost = AutomationUtil.findNodePre( + rightmost, Dir.BACKWARD, AutomationPredicate.leafOrStaticText); if (!leftmost || !rightmost) return;
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ar.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ar.xtb index 18ffbcf..b9a5181 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ar.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ar.xtb
@@ -396,7 +396,7 @@ <translation id="4391478986194775161">cntntinfo</translation> <translation id="443163561286008705">reset</translation> <translation id="4457472090507035117">تحديد الصوت الحالي:</translation> -<translation id="4471074325120394300">ليست هناك أية روابط.</translation> +<translation id="4471074325120394300">ليست هناك أي روابط.</translation> <translation id="4476183483923481720">سطر جديد</translation> <translation id="4482330759234983253">الجدول السابق</translation> <translation id="4491109536499578614">صورة</translation> @@ -853,7 +853,7 @@ <translation id="8943175951035496220">ليست هناك خلية في اليمين.</translation> <translation id="8978496506222343566">tltip</translation> <translation id="900114243503212879">file</translation> -<translation id="9027462562263121875">ليست هناك أية جداول.</translation> +<translation id="9027462562263121875">ليست هناك أي جداول.</translation> <translation id="9040132695316389094">العنوان الأول</translation> <translation id="9043969572162476692"><ph name="NUM" />%</translation> <translation id="9061884144798498064">تحديد جدول نمط برايل مكوّن من 8 نقاط:</translation>
diff --git a/chrome/browser/resources/chromeos/select_to_speak/BUILD.gn b/chrome/browser/resources/chromeos/select_to_speak/BUILD.gn index 73c2551a..3a2962e1c 100644 --- a/chrome/browser/resources/chromeos/select_to_speak/BUILD.gn +++ b/chrome/browser/resources/chromeos/select_to_speak/BUILD.gn
@@ -88,3 +88,69 @@ output_file = "$select_to_speak_out_dir/manifest_guest.json" is_guest_manifest = true } + +test("select_to_speak_extension_tests") { + sources = [ + "//chrome/browser/extensions/browsertest_util.cc", + "//chrome/browser/extensions/browsertest_util.h", + "//chrome/browser/ui/webui/web_ui_test_handler.cc", + "//chrome/browser/ui/webui/web_ui_test_handler.h", + "//chrome/test/base/extension_js_browser_test.cc", + "//chrome/test/base/extension_js_browser_test.h", + "//chrome/test/base/extension_load_waiter_one_shot.cc", + "//chrome/test/base/extension_load_waiter_one_shot.h", + "//chrome/test/base/javascript_browser_test.cc", + "//chrome/test/base/javascript_browser_test.h", + "//chrome/test/base/test_chrome_web_ui_controller_factory.cc", + "//chrome/test/base/test_chrome_web_ui_controller_factory.h", + "//chrome/test/base/web_ui_browser_test.cc", + "//chrome/test/base/web_ui_browser_test.h", + ] + + deps = [ + ":select_to_speak_extjs_tests", + "//base", + "//base/test:test_support", + "//chrome:browser_tests_pak", + "//chrome:packed_resources", + "//chrome:resources", + "//chrome/browser", + "//chrome/renderer", + "//chrome/test:browser_tests_runner", + "//chrome/test:test_support", + "//chrome/test:test_support_ui", + "//content/test:test_support", + "//testing/gmock", + "//testing/gtest", + ] + + data = [ + "$root_out_dir/chrome_100_percent.pak", + "$root_out_dir/chrome_200_percent.pak", + "$root_out_dir/locales/en-US.pak", + "$root_out_dir/resources.pak", + "$root_out_dir/resources/chromeos/select_to_speak/", + "$root_out_dir/test_data/chrome/browser/resources/chromeos/select_to_speak/", + + # The test uses data from the original location, not the copied one. + "//chrome/browser/resources/chromeos/chromevox/", + "//chrome/browser/resources/chromeos/select_to_speak/", + "//chrome/test/data/webui/test_api.js", + "//chrome/third_party/mock4js/", + "//third_party/accessibility-audit/axs_testing.js", + "//third_party/chaijs/chai.js", + ] +} + +js2gtest("select_to_speak_extjs_tests") { + test_type = "extension" + sources = [ + "select_to_speak_keystroke_selection_test.extjs", + ] + gen_include_files = [ + "../chromevox/testing/callback_helper.js", + "mock_tts.js", + "select_to_speak_e2e_test_base.js", + ] + defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ] +}
diff --git a/chrome/browser/resources/chromeos/select_to_speak/mock_tts.js b/chrome/browser/resources/chromeos/select_to_speak/mock_tts.js new file mode 100644 index 0000000..75cf4ae --- /dev/null +++ b/chrome/browser/resources/chromeos/select_to_speak/mock_tts.js
@@ -0,0 +1,49 @@ +// Copyright 2018 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. + +/* + * A mock text-to-speech engine for tests. + * This class has functions and callbacks necessary for Select-to-Speak + * to function. It keeps track of the utterances currently being spoken, + * and whether TTS should be speaking or is stopped. + */ +var MockTts = function() { + /** + * @type {Array<String>} + * @private + */ + this.pendingUtterances_ = []; + + /** + * @type {boolean} + * @private + */ + this.currentlySpeaking_ = false; +}; + +MockTts.prototype = { + // Functions based on methods in + // https://developer.chrome.com/extensions/tts + speak: function(utterance, options) { + this.pendingUtterances_.push(utterance); + this.currentlySpeaking_ = true; + }, + stop: function() { + this.pendingUtterances_ = []; + this.currentlySpeaking_ = false; + }, + getVoices: function(callback) { + callback([{voiceName: 'English US', lang: 'English'}]); + }, + isSpeaking: function(callback) { + callback(this.currentlySpeaking_); + }, + // Functions for testing + currentlySpeaking: function() { + return this.currentlySpeaking_; + }, + pendingUtterances: function() { + return this.pendingUtterances_; + } +};
diff --git a/chrome/browser/resources/chromeos/select_to_speak/select_to_speak.js b/chrome/browser/resources/chromeos/select_to_speak/select_to_speak.js index 5630df7..b4a91cf4 100644 --- a/chrome/browser/resources/chromeos/select_to_speak/select_to_speak.js +++ b/chrome/browser/resources/chromeos/select_to_speak/select_to_speak.js
@@ -9,6 +9,15 @@ // Whether reading selected text is enabled. const READ_SELECTION_ENABLED = false; +// CrosSelectToSpeakStartSpeechMethod enums. +// These values are persited to logs and should not be renumbered or re-used. +// See tools/metrics/histograms/enums.xml. +const START_SPEECH_METHOD_MOUSE = 0; +const START_SPEECH_METHOD_KEYSTROKE = 1; +// The number of enum values in CrosSelectToSpeapStartSpeechMethod. This should +// be kept in sync with the enum count in tools/metrics/histograms/enums.xml. +const START_SPEECH_METHOD_COUNT = 2; + /** * Return the rect that encloses two points. * @param {number} x1 The first x coordinate. @@ -388,6 +397,8 @@ */ this.intervalId_; + this.readSelectionEnabled_ = READ_SELECTION_ENABLED; + this.initPreferences_(); this.setUpEventListeners_(); @@ -515,8 +526,7 @@ if (!findAllMatching(root, rect, nodes) && focusedNode) findAllMatching(focusedNode.root, rect, nodes); this.startSpeechQueue_(nodes); - // TODO: Include a metric to say this was started using search+mouse. - this.recordStartEvent_(); + this.recordStartEvent_(START_SPEECH_METHOD_MOUSE); }.bind(this)); }, @@ -528,7 +538,7 @@ evt.keyCode == SelectToSpeak.SEARCH_KEY_CODE) { this.isSearchKeyDown_ = true; } else if ( - READ_SELECTION_ENABLED && this.keysCurrentlyDown_.size == 1 && + this.readSelectionEnabled_ && this.keysCurrentlyDown_.size == 1 && evt.keyCode == SelectToSpeak.READ_SELECTION_KEY_CODE && !this.trackingMouse_) { // Only go into selection mode if we aren't already tracking the mouse. @@ -650,8 +660,7 @@ this.startSpeechQueue_(nodes, firstPosition.offset, lastPosition.offset); - // TODO: Include a metric to say this was started using search+mouse. - this.recordStartEvent_(); + this.recordStartEvent_(START_SPEECH_METHOD_KEYSTROKE); }, /** @@ -895,8 +904,10 @@ /** * Records an event that Select-to-Speak has begun speaking. + * @param {number} method The CrosSelectToSpeakStartSpeechMethod enum + * that reflects how this event was triggered by the user. */ - recordStartEvent_: function() { + recordStartEvent_: function(method) { chrome.metricsPrivate.recordUserAction( 'Accessibility.CrosSelectToSpeak.StartSpeech'); chrome.metricsPrivate.recordSparseValue( @@ -908,6 +919,9 @@ chrome.metricsPrivate.recordBoolean( 'Accessibility.CrosSelectToSpeak.WordHighlighting', this.wordHighlight_); + chrome.metricsPrivate.recordEnumerationValue( + 'Accessibility.CrosSelectToSpeak.StartSpeechMethod', method, + START_SPEECH_METHOD_COUNT); }, /** @@ -1150,5 +1164,34 @@ this.currentNodeWord_ = {'start': nodeStart, 'end': nodeEnd}; this.testCurrentNode_(); } + }, + + // ---------- Functionality for testing ---------- // + + /** + * Fires a mock key down event for testing. + * @param {!Event} event The fake key down event to fire. The object + * must contain at minimum a keyCode. + */ + fireMockKeyDownEvent: function(event) { + this.onKeyDown_(event); + }, + + /** + * Fires a mock key up event for testing. + * @param {!Event} event The fake key up event to fire. The object + * must contain at minimum a keyCode. + */ + fireMockKeyUpEvent: function(event) { + this.onKeyUp_(event); + }, + + /** + * Overrides default setting to read selected text and enables the + * ability to read selected text at a keystroke. Should only be used + * for testing. + */ + enableReadSelectedTextForTesting: function() { + this.readSelectionEnabled_ = true; } };
diff --git a/chrome/browser/resources/chromeos/select_to_speak/select_to_speak_e2e_test_base.js b/chrome/browser/resources/chromeos/select_to_speak/select_to_speak_e2e_test_base.js new file mode 100644 index 0000000..5d23b85 --- /dev/null +++ b/chrome/browser/resources/chromeos/select_to_speak/select_to_speak_e2e_test_base.js
@@ -0,0 +1,111 @@ +// Copyright 2018 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. + +GEN_INCLUDE(['../chromevox/testing/callback_helper.js']); + +/** + * Base class for browser tests for select-to-speak. + * @constructor + */ +function SelectToSpeakE2ETest() { + this.callbackHelper_ = new CallbackHelper(this); +} + +SelectToSpeakE2ETest.prototype = { + __proto__: testing.Test.prototype, + + /** + * @override + * No UI in the background context. + */ + runAccessibilityChecks: false, + + /** @override */ + isAsync: true, + + /** @override */ + browsePreload: null, + + /** @override */ + testGenCppIncludes: function() { + GEN_BLOCK(function() { /*! +#include "ash/accessibility/accessibility_delegate.h" +#include "ash/shell.h" +#include "base/bind.h" +#include "base/callback.h" +#include "chrome/browser/chromeos/accessibility/accessibility_manager.h" +#include "chrome/common/extensions/extension_constants.h" +#include "ui/keyboard/keyboard_util.h" + */ }); + }, + + /** @override */ + testGenPreamble: function() { + GEN_BLOCK(function() { /*! + //keyboard::SetRequestedKeyboardState(keyboard::KEYBOARD_STATE_ENABLED); + //ash::Shell::Get()->CreateKeyboard(); + base::Closure load_cb = + base::Bind(&chromeos::AccessibilityManager::SetSelectToSpeakEnabled, + base::Unretained(chromeos::AccessibilityManager::Get()), + true); + chromeos::AccessibilityManager::Get()->SetSelectToSpeakEnabled(true); + WaitForExtension(extension_misc::kSelectToSpeakExtensionId, load_cb); + */ }); + }, + + /** + * Creates a callback that optionally calls {@code opt_callback} when + * called. If this method is called one or more times, then + * {@code testDone()} will be called when all callbacks have been called. + * @param {Function=} opt_callback Wrapped callback that will have its this + * reference bound to the test fixture. + * @return {Function} + */ + newCallback: function(opt_callback) { + return this.callbackHelper_.wrap(opt_callback); + }, + + /** + * Asserts that two strings are equal, collapsing repeated spaces and + * removing leading / trailing whitespace. + * @param {string} first The first string to compare. + * @param {string} second The second string to compare. + */ + assertEqualsCollapseWhitespace: function(first, second) { + assertEquals( + first.replace(/\s+/g, ' ').replace(/^\s/, '').replace(/\s$/, ''), + second.replace(/\s+/g, ' ').replace(/^\s/, '').replace(/\s$/, '')); + }, + + /** + * From chromevox_next_e2e_test_base.js + * Gets the desktop from the automation API and Launches a new tab with + * the given document, and runs |callback| when a load complete fires. + * Arranges to call |testDone()| after |callback| returns. + * NOTE: Callbacks created inside |callback| must be wrapped with + * |this.newCallback| if passed to asynchonous calls. Otherwise, the test + * will be finished prematurely. + * @param {string} url Url to load and wait for. + * @param {function(chrome.automation.AutomationNode)} callback + * Called once the document is ready. + */ + runWithLoadedTree: function(url, callback) { + callback = this.newCallback(callback); + chrome.automation.getDesktop(function(r) { + var listener = function(evt) { + if (evt.target.root.url != url) + return; + + r.removeEventListener('focus', listener, true); + r.removeEventListener('loadComplete', listener, true); + callback && callback(evt.target); + callback = null; + }; + r.addEventListener('focus', listener, true); + r.addEventListener('loadComplete', listener, true); + var createParams = {active: true, url: url}; + chrome.tabs.create(createParams); + }.bind(this)); + }, +};
diff --git a/chrome/browser/resources/chromeos/select_to_speak/select_to_speak_keystroke_selection_test.extjs b/chrome/browser/resources/chromeos/select_to_speak/select_to_speak_keystroke_selection_test.extjs new file mode 100644 index 0000000..b9706c7 --- /dev/null +++ b/chrome/browser/resources/chromeos/select_to_speak/select_to_speak_keystroke_selection_test.extjs
@@ -0,0 +1,163 @@ +// Copyright 2018 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. + +GEN_INCLUDE(['select_to_speak_e2e_test_base.js']); +GEN_INCLUDE(['mock_tts.js']); + +/** + * Browser tests for select-to-speak's feature to speak text + * at the press of a keystroke. + * @constructor + * @extends {SelectToSpeakE2ETest} + */ +function SelectToSpeakKeystrokeSelectionTest() { + SelectToSpeakE2ETest.call(this); + this.mockTts = new MockTts(); + chrome.tts = this.mockTts; + selectToSpeak.enableReadSelectedTextForTesting(); +} + +SelectToSpeakKeystrokeSelectionTest.prototype = { + __proto__: SelectToSpeakE2ETest.prototype, + + /** + * Function to trigger select-to-speak to read selected text at a + * keystroke. + */ + triggerReadSelectedText: function() { + assertFalse(this.mockTts.currentlySpeaking()); + assertEquals(this.mockTts.pendingUtterances().length, 0); + selectToSpeak.fireMockKeyDownEvent( + {keyCode: SelectToSpeak.SEARCH_KEY_CODE}); + selectToSpeak.fireMockKeyDownEvent( + {keyCode: SelectToSpeak.READ_SELECTION_KEY_CODE}); + assertTrue(selectToSpeak.isSelectionKeyDown_); + selectToSpeak.fireMockKeyUpEvent( + {keyCode: SelectToSpeak.READ_SELECTION_KEY_CODE}); + selectToSpeak.fireMockKeyUpEvent( + {keyCode: SelectToSpeak.SEARCH_KEY_CODE}); + }, + + /** + * Helper function to find a staticText node from a root + * @param {AutomationNode} root The root node to search through + * @param {string} text The text to search for + * @return {AutomationNode} The found text node, or null if none is found. + */ + findTextNode: function(root, text) { + return root.find({ + role: 'staticText', attributes: {name: text} + }); + }, + + /** + * Function to load a simple webpage, select some of the single text + * node, and trigger Select-to-Speak to read that partial node. Tests + * that the selected region creates tts output that matches the expected + * output. + * @param {string} text The text to load on the simple webpage. + * @param {number} anchorOffset The offset into the text node where + * focus starts. + * @param {number} focusOffset The offset into the text node where + * focus ends. + * @param {string} expected The expected string that will be read, ignoring + * extra whitespace, after this selection is triggered. + */ + testSimpleTextAtKeystroke: function(text, anchorOffset, focusOffset, expected) { + this.testReadTextAtKeystroke('<p>' + text + '</p>', + function(desktop) { + // Set the document selection. This will fire the changed event + // above, allowing us to do the keystroke and test that speech + // occurred properly. + let textNode = this.findTextNode(desktop, 'This is some text'); + chrome.automation.setDocumentSelection({ + anchorObject: textNode, anchorOffset: anchorOffset, + focusObject: textNode, focusOffset: focusOffset + }); + }, expected); + }, + + /** + * Function to load given html using a data url, have the caller set a + * selection on that page, and then trigger select-to-speak to read + * the selected text. Tests that the tts output matches the expected + * output. + * @param {string} contents The web contents to load as part of a + * data:text/html link. + * @param {function(AutomationNode)} setSelectionCallback Callback + * to take the root node and set the selection appropriately. Once + * selection is set, the test will listen for the focus set event and + * trigger select-to-speak, comparing the resulting tts output to what + * was expected. + * will trigger select-to-speak to speak any selected text + * @param {string} expected The expected string that will be read, ignoring + * extra whitespace, after this selection is triggered. + */ + testReadTextAtKeystroke: function(contents, setFocusCallback, expected) { + setFocusCallback = this.newCallback(setFocusCallback); + this.runWithLoadedTree('data:text/html;charset=utf-8,' + contents, + function(desktop) { + // Add an event listener that will start the user interaction + // of the test once the selection is completed. + desktop.addEventListener('documentSelectionChanged', + this.newCallback(function(event) { + this.triggerReadSelectedText(); + assertTrue(this.mockTts.currentlySpeaking()); + assertEquals(this.mockTts.pendingUtterances().length, 1); + this.assertEqualsCollapseWhitespace( + this.mockTts.pendingUtterances()[0], expected); + }), false); + setFocusCallback(desktop); + }); + }, +} + +TEST_F('SelectToSpeakKeystrokeSelectionTest', 'SpeaksTextAtKeystrokeFullText', + function() { + this.testSimpleTextAtKeystroke('This is some text', 0, 17, 'This is some text'); +}); + +TEST_F('SelectToSpeakKeystrokeSelectionTest', 'SpeaksTextAtKeystrokePartialText', + function() { + this.testSimpleTextAtKeystroke('This is some text', 0, 12, 'This is some'); +}); + +TEST_F('SelectToSpeakKeystrokeSelectionTest', 'SpeaksTextAtKeystrokeSingleWord', + function() { + this.testSimpleTextAtKeystroke('This is some text', 8, 12, 'some'); +}); + +TEST_F('SelectToSpeakKeystrokeSelectionTest', 'SpeaksTextAtKeystrokePartialWord', + function() { + this.testSimpleTextAtKeystroke('This is some text', 8, 10, 'so'); +}); + +TEST_F('SelectToSpeakKeystrokeSelectionTest', 'SpeaksAcrossNodesAtKeystroke', + function() { + this.testReadTextAtKeystroke( + '<p>This is some <b>bold</b> text</p><p>Second paragraph</p>', + function(desktop) { + let firstNode = this.findTextNode(desktop, 'This is some '); + let lastNode = this.findTextNode(desktop, ' text'); + chrome.automation.setDocumentSelection({ + anchorObject: firstNode, anchorOffset: 0, + focusObject: lastNode, focusOffset: 6 + }); + }, 'This is some bold text'); +}); + +TEST_F('SelectToSpeakKeystrokeSelectionTest', + 'SpeaksAcrossNodesSelectedBackwardsAtKeystroke', function() { + this.testReadTextAtKeystroke( + '<p>This is some <b>bold</b> text</p><p>Second paragraph</p>', + function(desktop) { + // Set the document selection backwards in page order. + let lastNode = this.findTextNode(desktop, 'This is some '); + let firstNode = this.findTextNode(desktop, ' text'); + chrome.automation.setDocumentSelection({ + anchorObject: firstNode, anchorOffset: 6, + focusObject: lastNode, focusOffset: 0 + }); + }, 'This is some bold text'); +});
diff --git a/chrome/browser/resources/chromeos/select_to_speak/select_to_speak_main.js b/chrome/browser/resources/chromeos/select_to_speak/select_to_speak_main.js index 54d8d085..b959e4a 100644 --- a/chrome/browser/resources/chromeos/select_to_speak/select_to_speak_main.js +++ b/chrome/browser/resources/chromeos/select_to_speak/select_to_speak_main.js
@@ -2,4 +2,4 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -new SelectToSpeak(); +let selectToSpeak = new SelectToSpeak();
diff --git a/chrome/browser/resources/local_ntp/most_visited_util.js b/chrome/browser/resources/local_ntp/most_visited_util.js index 12eb39e..cc90b7e 100644 --- a/chrome/browser/resources/local_ntp/most_visited_util.js +++ b/chrome/browser/resources/local_ntp/most_visited_util.js
@@ -12,19 +12,6 @@ /** - * The different types of events that are logged from the NTP. The multi-iframe - * version of the NTP does *not* actually log any statistics anymore; this is - * only required as a workaround for crbug.com/698675. - * Note: Keep in sync with common/ntp_logging_events.h - * @enum {number} - * @const - */ -var NTP_LOGGING_EVENT_TYPE = { - NTP_ALL_TILES_RECEIVED: 12, -}; - - -/** * The origin of this request. * @const {string} */ @@ -104,18 +91,6 @@ window.parent.postMessage('linkBlurred', DOMAIN_ORIGIN); }); - var navigateFunction = function handleNavigation(e) { - var isServerSuggestion = 'url' in params; - - // Ping are only populated for server-side suggestions, never for MV. - if (isServerSuggestion && params.ping) { - generatePing(DOMAIN_ORIGIN + params.ping); - } - - // Follow <a> normally, so transition type will be LINK. - }; - - link.addEventListener('click', navigateFunction); link.addEventListener('keydown', function(event) { if (event.keyCode == 46 /* DELETE */ || event.keyCode == 8 /* BACKSPACE */) { @@ -205,6 +180,16 @@ /** + * Returns whether the given URL has a known, safe scheme. + * @param {string} url URL to check. + */ +var isSchemeAllowed = function(url) { + return url.startsWith('http://') || url.startsWith('https://') || + url.startsWith('ftp://') || url.startsWith('chrome-extension://'); +}; + + +/** * @param {string} location A location containing URL parameters. * @param {function(Object, Object)} fill A function called with styles and * data to fill. @@ -212,47 +197,19 @@ function fillMostVisited(location, fill) { var params = parseQueryParams(location); params.rid = parseInt(params.rid, 10); - if (!isFinite(params.rid) && !params.url) + if (!isFinite(params.rid)) return; - var data; - if (params.url) { - // Means that the suggestion data comes from the server. Create data object. - data = { - url: params.url, - thumbnailUrl: params.tu || '', - title: params.ti || '', - direction: params.di || '', - domain: params.dom || '' - }; - } else { - data = chrome.embeddedSearch.newTabPage.getMostVisitedItemData(params.rid); - if (!data) - return; - } + var data = + chrome.embeddedSearch.newTabPage.getMostVisitedItemData(params.rid); + if (!data) + return; + if (data.url && !isSchemeAllowed(data.url)) + return; - if (isFinite(params.dummy) && parseInt(params.dummy, 10)) { + if (isFinite(params.dummy) && parseInt(params.dummy, 10)) data.dummy = true; - } - if (/^javascript:/i.test(data.url) || /^javascript:/i.test(data.thumbnailUrl)) - return; + if (data.direction) document.body.dir = data.direction; fill(params, data); } - - -/** - * Sends a POST request to ping url. - * @param {string} url URL to be pinged. - */ -function generatePing(url) { - if (navigator.sendBeacon) { - navigator.sendBeacon(url); - } else { - // if sendBeacon is not enabled, we fallback for "a ping". - var a = document.createElement('a'); - a.href = '#'; - a.ping = url; - a.click(); - } -}
diff --git a/chrome/browser/resources/md_bookmarks/command_manager.js b/chrome/browser/resources/md_bookmarks/command_manager.js index e48aadd8..f7387f4 100644 --- a/chrome/browser/resources/md_bookmarks/command_manager.js +++ b/chrome/browser/resources/md_bookmarks/command_manager.js
@@ -667,6 +667,11 @@ Command.IMPORT, Command.EXPORT, ]; + case MenuSource.LIST: + return [ + Command.ADD_BOOKMARK, + Command.ADD_FOLDER, + ]; case MenuSource.NONE: return []; }
diff --git a/chrome/browser/resources/md_bookmarks/constants.js b/chrome/browser/resources/md_bookmarks/constants.js index 00bd2a0..752037b 100644 --- a/chrome/browser/resources/md_bookmarks/constants.js +++ b/chrome/browser/resources/md_bookmarks/constants.js
@@ -58,6 +58,7 @@ ITEM: 1, TREE: 2, TOOLBAR: 3, + LIST: 4, }; /**
diff --git a/chrome/browser/resources/md_bookmarks/list.js b/chrome/browser/resources/md_bookmarks/list.js index bf84521a..3b6aa84 100644 --- a/chrome/browser/resources/md_bookmarks/list.js +++ b/chrome/browser/resources/md_bookmarks/list.js
@@ -46,6 +46,7 @@ listeners: { 'click': 'deselectItems_', + 'contextmenu': 'onContextMenu_', 'open-command-menu': 'onOpenCommandMenu_', }, @@ -275,4 +276,19 @@ if (handled) e.stopPropagation(); }, + + /** + * @param {Event} e + * @private + */ + onContextMenu_: function(e) { + e.preventDefault(); + this.deselectItems_(); + + this.fire('open-command-menu', { + x: e.clientX, + y: e.clientY, + source: MenuSource.LIST, + }); + }, });
diff --git a/chrome/browser/resources/md_extensions/manager.html b/chrome/browser/resources/md_extensions/manager.html index a556faa..2cfe43d 100644 --- a/chrome/browser/resources/md_extensions/manager.html +++ b/chrome/browser/resources/md_extensions/manager.html
@@ -55,7 +55,9 @@ } </style> <extensions-drop-overlay></extensions-drop-overlay> - <extensions-toolbar is-guest="[[isGuest_]]" in-dev-mode="[[inDevMode]]" + <extensions-toolbar is-guest="[[isGuest_]]" + in-dev-mode="[[inDevMode]]" + dev-mode-controlled-by-policy="[[devModeControlledByPolicy]]" on-pack-tap="onPackTap_" delegate="[[delegate]]" on-cr-toolbar-menu-tap="onMenuButtonTap_" on-search-changed="onFilterChanged_"
diff --git a/chrome/browser/resources/md_extensions/manager.js b/chrome/browser/resources/md_extensions/manager.js index bdf2e3f6..0a341d9 100644 --- a/chrome/browser/resources/md_extensions/manager.js +++ b/chrome/browser/resources/md_extensions/manager.js
@@ -54,6 +54,11 @@ value: () => loadTimeData.getBoolean('inDevMode'), }, + devModeControlledByPolicy: { + type: Boolean, + value: false, + }, + filter: { type: String, value: '', @@ -153,6 +158,8 @@ let service = extensions.Service.getInstance(); let onProfileStateChanged = profileInfo => { + this.devModeControlledByPolicy = + profileInfo.isDeveloperModeControlledByPolicy; this.inDevMode = profileInfo.inDeveloperMode; }; service.getProfileStateChangedTarget().addListener(onProfileStateChanged);
diff --git a/chrome/browser/resources/md_extensions/toolbar.html b/chrome/browser/resources/md_extensions/toolbar.html index 371c0db..35024761 100644 --- a/chrome/browser/resources/md_extensions/toolbar.html +++ b/chrome/browser/resources/md_extensions/toolbar.html
@@ -4,6 +4,7 @@ <link rel="import" href="chrome://resources/cr_elements/cr_toolbar/cr_toolbar.html"> <link rel="import" href="chrome://resources/cr_elements/hidden_style_css.html"> <link rel="import" href="chrome://resources/cr_elements/paper_button_style_css.html"> +<link rel="import" href="chrome://resources/cr_elements/policy/cr_tooltip_icon.html"> <link rel="import" href="chrome://resources/html/assert.html"> <link rel="import" href="chrome://resources/html/cr.html"> <link rel="import" href="chrome://resources/html/i18n_behavior.html"> @@ -34,6 +35,10 @@ --cr-toggle-unchecked-ink-color: white; } + cr-tooltip-icon { + -webkit-margin-end: 20px; + } + #devDrawer[expanded] #button-strip { top: 0; } @@ -90,7 +95,13 @@ narrow-threshold="1000"> <div class="more-actions" hidden$="[[isGuest]]"> <span id="devModeLabel">$i18n{toolbarDevMode}</span> + <cr-tooltip-icon hidden$="[[!devModeControlledByPolicy]]" + tooltip-text="$i18n{controlledSettingPolicy}" + icon-class="cr20:domain" + icon-aria-label="$i18n{controlledSettingPolicy}"> + </cr-tooltip-icon> <cr-toggle id="dev-mode" on-change="onDevModeToggleChange_" + disabled="[[devModeControlledByPolicy]]" checked="[[inDevMode]]" aria-labelledby="devModeLabel"> </cr-toggle> </div>
diff --git a/chrome/browser/resources/md_extensions/toolbar.js b/chrome/browser/resources/md_extensions/toolbar.js index 62cedb6..961ef9e 100644 --- a/chrome/browser/resources/md_extensions/toolbar.js +++ b/chrome/browser/resources/md_extensions/toolbar.js
@@ -39,6 +39,11 @@ observer: 'onInDevModeChanged_', }, + devModeControlledByPolicy: { + type: Boolean, + value: false, + }, + isGuest: Boolean, // <if expr="chromeos">
diff --git a/chrome/browser/resources/settings/basic_page/basic_page.js b/chrome/browser/resources/settings/basic_page/basic_page.js index 6c93d8f..9e1869e 100644 --- a/chrome/browser/resources/settings/basic_page/basic_page.js +++ b/chrome/browser/resources/settings/basic_page/basic_page.js
@@ -116,15 +116,14 @@ }); // </if> - this.addEventListener('change-password-dismissed', () => { - this.showChangePassword = false; - }); - this.addWebUIListener('change-password-visibility', visibility => { this.showChangePassword = visibility; }); - settings.ChangePasswordBrowserProxyImpl.getInstance() - .initializeChangePasswordHandler(); + + if (loadTimeData.getBoolean('passwordProtectionAvailable')) { + settings.ChangePasswordBrowserProxyImpl.getInstance() + .initializeChangePasswordHandler(); + } if (settings.AndroidAppsBrowserProxyImpl) { this.addWebUIListener(
diff --git a/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.html b/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.html index adb7eb4..245dbdd0 100644 --- a/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.html +++ b/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.html
@@ -141,7 +141,7 @@ </div> <div id="powered-by-settings-box" class="settings-box continuation"> <div id="powered-by-container" class="secondary" - hidden="[[!isPartnerPowered_]]"> + hidden="[[!isPoweredByPartner_]]"> $i18nRaw{chromeCleanupPoweredByHtml} </div> </div>
diff --git a/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.js b/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.js index f6045e5a..ec8cc5a 100644 --- a/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.js +++ b/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.js
@@ -251,12 +251,9 @@ }, /** @private */ - isPartnerPowered_: { + isPoweredByPartner_: { type: Boolean, - value: function() { - return loadTimeData.valueExists('cleanupPoweredByPartner') && - loadTimeData.getBoolean('cleanupPoweredByPartner'); - }, + value: false, }, }, @@ -372,14 +369,6 @@ }, /** - * @return {boolean} - * @private - */ - showPoweredBy_: function() { - return this.itemsToRemoveSectionExpanded_ && this.isPartnerPowered_; - }, - - /** * @param {string} explanation * @return {boolean} * @private @@ -517,11 +506,14 @@ /** * Listener of event 'chrome-cleanup-on-infected'. * Offers a cleanup to the user and enables presenting files to be removed. + * @param {boolean} isPoweredByPartner If scanning results are provided by a + * partner's engine. * @param {!settings.ChromeCleanerScannerResults} scannerResults The cleanup * items to be presented to the user. * @private */ - onInfected_: function(scannerResults) { + onInfected_: function(isPoweredByPartner, scannerResults) { + this.isPoweredByPartner_ = isPoweredByPartner; this.ongoingAction_ = settings.ChromeCleanupOngoingAction.NONE; this.renderScanOfferedByDefault_ = false; this.scannerResults_ = scannerResults; @@ -533,11 +525,14 @@ * Listener of event 'chrome-cleanup-on-cleaning'. * Shows a spinner indicating that an on-going action and enables presenting * files to be removed. + * @param {boolean} isPoweredByPartner If scanning results are provided by a + * partner's engine. * @param {!settings.ChromeCleanerScannerResults} scannerResults The cleanup * items to be presented to the user. * @private */ - onCleaning_: function(scannerResults) { + onCleaning_: function(isPoweredByPartner, scannerResults) { + this.isPoweredByPartner_ = isPoweredByPartner; this.ongoingAction_ = settings.ChromeCleanupOngoingAction.CLEANING; this.renderScanOfferedByDefault_ = false; this.scannerResults_ = scannerResults;
diff --git a/chrome/browser/resources/settings/people_page/change_picture.js b/chrome/browser/resources/settings/people_page/change_picture.js index 862278b..48eaa44 100644 --- a/chrome/browser/resources/settings/people_page/change_picture.js +++ b/chrome/browser/resources/settings/people_page/change_picture.js
@@ -185,7 +185,7 @@ case CrPicture.SelectionTypes.OLD: const imageIndex = image.dataset.imageIndex; if (imageIndex !== undefined && imageIndex >= 0 && image.src) - this.browserProxy_.selectDefaultImage(image.src); + this.browserProxy_.selectDefaultImage(image.dataset.url); else this.browserProxy_.selectOldImage(); break;
diff --git a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_impl_win.cc b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_impl_win.cc index 5404a63d..640160d58 100644 --- a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_impl_win.cc +++ b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_impl_win.cc
@@ -228,23 +228,6 @@ idle_reason_ == IdleReason::kConnectionLost)); } -bool ChromeCleanerControllerImpl::IsPoweredByPartner() { - // |reporter_invocation_| is not expected to hold a value for the entire - // lifecycle of the ChromeCleanerController instance. To be consistent, use - // a cached return value if the |reporter_invocation_| has been cleaned up. - if (!reporter_invocation_) { - return powered_by_partner_; - } - - const std::string& reporter_engine = - reporter_invocation_->command_line().GetSwitchValueASCII( - chrome_cleaner::kEngineSwitch); - // Currently, only engine=2 corresponds to a partner-powered engine. This - // condition should be updated if other partner-powered engines are added. - powered_by_partner_ = !reporter_engine.empty() && reporter_engine == "2"; - return powered_by_partner_; -} - ChromeCleanerController::State ChromeCleanerControllerImpl::state() const { return state_; } @@ -448,6 +431,14 @@ DCHECK(!reporter_invocation_); reporter_invocation_ = base::MakeUnique<SwReporterInvocation>(reporter_invocation); + + const std::string& reporter_engine = + reporter_invocation_->command_line().GetSwitchValueASCII( + chrome_cleaner::kEngineSwitch); + // Currently, only engine=2 corresponds to a partner-powered engine. This + // condition should be updated if other partner-powered engines are added. + powered_by_partner_ = !reporter_engine.empty() && reporter_engine == "2"; + SetStateAndNotifyObservers(State::kScanning); // base::Unretained is safe because the ChromeCleanerController instance is // guaranteed to outlive the UI thread. @@ -537,10 +528,10 @@ observer->OnScanning(); break; case State::kInfected: - observer->OnInfected(scanner_results_); + observer->OnInfected(powered_by_partner_, scanner_results_); break; case State::kCleaning: - observer->OnCleaning(scanner_results_); + observer->OnCleaning(powered_by_partner_, scanner_results_); break; case State::kRebootRequired: observer->OnRebootRequired();
diff --git a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_impl_win.h b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_impl_win.h index 2968fa7..52f5e69 100644 --- a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_impl_win.h +++ b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_impl_win.h
@@ -56,7 +56,6 @@ // ChromeCleanerController overrides. bool ShouldShowCleanupInSettingsUI() override; - bool IsPoweredByPartner() override; State state() const override; IdleReason idle_reason() const override; void SetLogsEnabled(bool logs_enabled) override;
diff --git a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_impl_win_unittest.cc b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_impl_win_unittest.cc index 98e440c..6ec9e7e0 100644 --- a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_impl_win_unittest.cc +++ b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_impl_win_unittest.cc
@@ -75,8 +75,8 @@ MOCK_METHOD1(OnIdle, void(ChromeCleanerController::IdleReason)); MOCK_METHOD0(OnReporterRunning, void()); MOCK_METHOD0(OnScanning, void()); - MOCK_METHOD1(OnInfected, void(const ChromeCleanerScannerResults&)); - MOCK_METHOD1(OnCleaning, void(const ChromeCleanerScannerResults&)); + MOCK_METHOD2(OnInfected, void(bool, const ChromeCleanerScannerResults&)); + MOCK_METHOD2(OnCleaning, void(bool, const ChromeCleanerScannerResults&)); MOCK_METHOD0(OnRebootRequired, void()); MOCK_METHOD0(OnRebootFailed, void()); MOCK_METHOD1(OnLogsEnabledChanged, void(bool)); @@ -510,8 +510,8 @@ } if (ExpectedOnInfectedCalled()) { - EXPECT_CALL(mock_observer_, OnInfected(_)) - .WillOnce(DoAll(SaveArg<0>(&scanner_results_on_infected), + EXPECT_CALL(mock_observer_, OnInfected(_, _)) + .WillOnce(DoAll(SaveArg<1>(&scanner_results_on_infected), InvokeWithoutArgs([this, profile1]() { controller_->ReplyWithUserResponse(profile1, user_response_); @@ -521,14 +521,14 @@ if (user_response_ == UserResponse::kAcceptedWithoutLogs) EXPECT_CALL(mock_observer_, OnLogsEnabledChanged(false)); } else { - EXPECT_CALL(mock_observer_, OnInfected(_)).Times(0); + EXPECT_CALL(mock_observer_, OnInfected(_, _)).Times(0); } if (ExpectedOnCleaningCalled()) { - EXPECT_CALL(mock_observer_, OnCleaning(_)) - .WillOnce(SaveArg<0>(&scanner_results_on_cleaning)); + EXPECT_CALL(mock_observer_, OnCleaning(_, _)) + .WillOnce(SaveArg<1>(&scanner_results_on_cleaning)); } else { - EXPECT_CALL(mock_observer_, OnCleaning(_)).Times(0); + EXPECT_CALL(mock_observer_, OnCleaning(_, _)).Times(0); } if (ExpectedOnRebootRequiredCalled()) {
diff --git a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_win.h b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_win.h index e4ade5f..39fa3d0 100644 --- a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_win.h +++ b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_win.h
@@ -100,8 +100,10 @@ virtual void OnReporterRunning() {} virtual void OnScanning() {} virtual void OnInfected( + bool is_powered_by_partner, const ChromeCleanerScannerResults& scanner_results) {} virtual void OnCleaning( + bool is_powered_by_partner, const ChromeCleanerScannerResults& scanner_results) {} virtual void OnRebootRequired() {} virtual void OnRebootFailed() {} @@ -117,9 +119,6 @@ // Returns whether the Cleanup card in settings should be displayed. virtual bool ShouldShowCleanupInSettingsUI() = 0; - // Returns whether Cleanup is powered by a partner company. - virtual bool IsPoweredByPartner() = 0; - virtual State state() const = 0; virtual IdleReason idle_reason() const = 0;
diff --git a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_dialog_controller_impl_browsertest_win.cc b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_dialog_controller_impl_browsertest_win.cc index 232d548..a590cc83 100644 --- a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_dialog_controller_impl_browsertest_win.cc +++ b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_dialog_controller_impl_browsertest_win.cc
@@ -98,14 +98,14 @@ IN_PROC_BROWSER_TEST_P(ChromeCleanerPromptUserTest, OnInfectedBrowserAvailable) { EXPECT_CALL(mock_delegate_, ShowChromeCleanerPrompt(_, _, _)).Times(1); - dialog_controller_->OnInfected(ChromeCleanerScannerResults()); + dialog_controller_->OnInfected(false, ChromeCleanerScannerResults()); } IN_PROC_BROWSER_TEST_P(ChromeCleanerPromptUserTest, DISABLED_OnInfectedBrowserNotAvailable) { browser()->window()->Minimize(); base::RunLoop().RunUntilIdle(); - dialog_controller_->OnInfected(ChromeCleanerScannerResults()); + dialog_controller_->OnInfected(false, ChromeCleanerScannerResults()); base::RunLoop run_loop; // We only set the expectation here because we want to make sure that the @@ -124,7 +124,7 @@ CloseAllBrowsers(); base::RunLoop().RunUntilIdle(); - dialog_controller_->OnInfected(ChromeCleanerScannerResults()); + dialog_controller_->OnInfected(false, ChromeCleanerScannerResults()); base::RunLoop run_loop; // We only set the expectation here because we want to make sure that the
diff --git a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_dialog_controller_impl_win.cc b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_dialog_controller_impl_win.cc index 717ed4a..564c70d2 100644 --- a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_dialog_controller_impl_win.cc +++ b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_dialog_controller_impl_win.cc
@@ -184,6 +184,7 @@ } void ChromeCleanerDialogControllerImpl::OnInfected( + bool is_powered_by_partner, const ChromeCleanerScannerResults& reported_results) { DCHECK(!dialog_shown_); @@ -201,6 +202,7 @@ } void ChromeCleanerDialogControllerImpl::OnCleaning( + bool is_powered_by_partner, const ChromeCleanerScannerResults& reported_results) { if (!dialog_shown_) OnInteractionDone();
diff --git a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_dialog_controller_impl_win.h b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_dialog_controller_impl_win.h index 3009762..67b8a10e 100644 --- a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_dialog_controller_impl_win.h +++ b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_dialog_controller_impl_win.h
@@ -51,8 +51,10 @@ // ChromeCleanerController::Observer overrides. void OnIdle(ChromeCleanerController::IdleReason idle_reason) override; void OnScanning() override; - void OnInfected(const ChromeCleanerScannerResults& reported_results) override; - void OnCleaning(const ChromeCleanerScannerResults& reported_results) override; + void OnInfected(bool is_powered_by_partner, + const ChromeCleanerScannerResults& reported_results) override; + void OnCleaning(bool is_powered_by_partner, + const ChromeCleanerScannerResults& reported_results) override; void OnRebootRequired() override; // BrowserListObserver overrides.
diff --git a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_state_change_observer_win.cc b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_state_change_observer_win.cc index ddc55dc..260d61d 100644 --- a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_state_change_observer_win.cc +++ b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_state_change_observer_win.cc
@@ -16,8 +16,7 @@ : on_show_cleanup_ui_change_(on_show_cleanup_ui_change), controller_(ChromeCleanerController::GetInstance()), cached_should_show_cleanup_in_settings_ui_( - controller_->ShouldShowCleanupInSettingsUI()), - cached_cleanup_powered_by_partner_(controller_->IsPoweredByPartner()) { + controller_->ShouldShowCleanupInSettingsUI()) { DCHECK_CURRENTLY_ON(BrowserThread::UI); controller_->AddObserver(this); } @@ -31,17 +30,14 @@ DCHECK_CURRENTLY_ON(BrowserThread::UI); bool show_cleanup = controller_->ShouldShowCleanupInSettingsUI(); - bool powered_by_partner = controller_->IsPoweredByPartner(); // Avoid calling the observer if nothing changed. - if (show_cleanup == cached_should_show_cleanup_in_settings_ui_ && - powered_by_partner == cached_cleanup_powered_by_partner_) { + if (show_cleanup == cached_should_show_cleanup_in_settings_ui_) { return; } cached_should_show_cleanup_in_settings_ui_ = show_cleanup; - cached_cleanup_powered_by_partner_ = powered_by_partner; - on_show_cleanup_ui_change_.Run(show_cleanup, powered_by_partner); + on_show_cleanup_ui_change_.Run(show_cleanup); } void ChromeCleanerStateChangeObserver::OnIdle( @@ -58,11 +54,13 @@ } void ChromeCleanerStateChangeObserver::OnInfected( + bool is_powered_by_partner, const ChromeCleanerScannerResults& reported_results) { OnCleanupStateChange(); } void ChromeCleanerStateChangeObserver::OnCleaning( + bool is_powered_by_partner, const ChromeCleanerScannerResults& reported_results) { OnCleanupStateChange(); }
diff --git a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_state_change_observer_win.h b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_state_change_observer_win.h index 8f06de8..1600f732 100644 --- a/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_state_change_observer_win.h +++ b/chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_state_change_observer_win.h
@@ -11,16 +11,18 @@ namespace safe_browsing { // A helper class which automatically starts observing |ChromeCleanerController| -// when instantiated and calls the given callback with new |show_cleanup| and -// |powered_by_partner| values if either of them changed. -// Un-registerers itself as an observer on deletion. -// Since ChromeCleanupController lives and has its methods called on the UI -// thread, this class should live on and be destroyed on the UI thread as well -// to guarantee that a state change does not race the destructor. +// when instantiated and calls the given callback with a new |show_cleanup| +// value if it changed. Un-registerers itself as an observer on deletion. Since +// ChromeCleanupController lives and has its methods called on the UI thread, +// this class should live on and be destroyed on the UI thread as well to +// guarantee that a state change does not race the destructor. +// +// TODO(crbug.com/800507): Remove this once user-initiated cleanups is enabled +// by default. class ChromeCleanerStateChangeObserver : public ChromeCleanerController::Observer { public: - typedef base::RepeatingCallback<void(bool showCleanup, bool partnerPowered)> + typedef base::RepeatingCallback<void(bool showCleanup)> OnShowCleanupUIChangeCallback; ChromeCleanerStateChangeObserver( @@ -31,8 +33,10 @@ void OnIdle(ChromeCleanerController::IdleReason idle_reason) override; void OnScanning() override; void OnReporterRunning() override; - void OnInfected(const ChromeCleanerScannerResults& scanner_results) override; - void OnCleaning(const ChromeCleanerScannerResults& scanner_results) override; + void OnInfected(bool is_powered_by_partner, + const ChromeCleanerScannerResults& scanner_results) override; + void OnCleaning(bool is_powered_by_partner, + const ChromeCleanerScannerResults& scanner_results) override; void OnRebootRequired() override; void OnLogsEnabledChanged(bool logs_enabled) override; @@ -45,7 +49,6 @@ // Raw pointer to a singleton. Must outlive this object. ChromeCleanerController* controller_; bool cached_should_show_cleanup_in_settings_ui_; - bool cached_cleanup_powered_by_partner_; DISALLOW_COPY_AND_ASSIGN(ChromeCleanerStateChangeObserver); };
diff --git a/chrome/browser/safe_browsing/chrome_cleaner/mock_chrome_cleaner_controller_win.h b/chrome/browser/safe_browsing/chrome_cleaner/mock_chrome_cleaner_controller_win.h index 1b8cc8b..aee851ff 100644 --- a/chrome/browser/safe_browsing/chrome_cleaner/mock_chrome_cleaner_controller_win.h +++ b/chrome/browser/safe_browsing/chrome_cleaner/mock_chrome_cleaner_controller_win.h
@@ -21,7 +21,6 @@ void OnSwReporterReady(SwReporterInvocationSequence&& sequence) override; MOCK_METHOD0(ShouldShowCleanupInSettingsUI, bool()); - MOCK_METHOD0(IsPoweredByPartner, bool()); MOCK_CONST_METHOD0(state, State()); MOCK_CONST_METHOD0(idle_reason, IdleReason()); MOCK_METHOD1(SetLogsEnabled, void(bool));
diff --git a/chrome/browser/spellchecker/spell_check_host_impl.cc b/chrome/browser/spellchecker/spell_check_host_chrome_impl.cc similarity index 83% rename from chrome/browser/spellchecker/spell_check_host_impl.cc rename to chrome/browser/spellchecker/spell_check_host_chrome_impl.cc index 0e59a20..0aafa6a 100644 --- a/chrome/browser/spellchecker/spell_check_host_impl.cc +++ b/chrome/browser/spellchecker/spell_check_host_chrome_impl.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/spellchecker/spell_check_host_impl.h" +#include "chrome/browser/spellchecker/spell_check_host_chrome_impl.h" #include "base/bind.h" #include "base/memory/ptr_util.h" @@ -16,22 +16,22 @@ #include "content/public/browser/browser_thread.h" #include "mojo/public/cpp/bindings/strong_binding.h" -SpellCheckHostImpl::SpellCheckHostImpl( +SpellCheckHostChromeImpl::SpellCheckHostChromeImpl( const service_manager::Identity& renderer_identity) : renderer_identity_(renderer_identity) {} -SpellCheckHostImpl::~SpellCheckHostImpl() = default; +SpellCheckHostChromeImpl::~SpellCheckHostChromeImpl() = default; // static -void SpellCheckHostImpl::Create( +void SpellCheckHostChromeImpl::Create( spellcheck::mojom::SpellCheckHostRequest request, const service_manager::BindSourceInfo& source_info) { mojo::MakeStrongBinding( - base::MakeUnique<SpellCheckHostImpl>(source_info.identity), + base::MakeUnique<SpellCheckHostChromeImpl>(source_info.identity), std::move(request)); } -void SpellCheckHostImpl::RequestDictionary() { +void SpellCheckHostChromeImpl::RequestDictionary() { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); // The renderer has requested that we initialize its spellchecker. This @@ -50,8 +50,8 @@ // more than once if we get requests from different renderers. } -void SpellCheckHostImpl::NotifyChecked(const base::string16& word, - bool misspelled) { +void SpellCheckHostChromeImpl::NotifyChecked(const base::string16& word, + bool misspelled) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); SpellcheckService* spellcheck = GetSpellcheckService(); @@ -61,7 +61,7 @@ spellcheck->GetMetrics()->RecordCheckedWordStats(word, misspelled); } -void SpellCheckHostImpl::CallSpellingService( +void SpellCheckHostChromeImpl::CallSpellingService( const base::string16& text, CallSpellingServiceCallback callback) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); @@ -82,7 +82,7 @@ renderer_identity_.user_id()); client_.RequestTextCheck( context, SpellingServiceClient::SPELLCHECK, text, - base::BindOnce(&SpellCheckHostImpl::CallSpellingServiceDone, + base::BindOnce(&SpellCheckHostChromeImpl::CallSpellingServiceDone, base::Unretained(this), base::Passed(&callback))); #else std::move(callback).Run(false, std::vector<SpellCheckResult>()); @@ -90,7 +90,7 @@ } #if !BUILDFLAG(USE_BROWSER_SPELLCHECKER) -void SpellCheckHostImpl::CallSpellingServiceDone( +void SpellCheckHostChromeImpl::CallSpellingServiceDone( CallSpellingServiceCallback callback, bool success, const base::string16& text, @@ -111,7 +111,7 @@ } // static -std::vector<SpellCheckResult> SpellCheckHostImpl::FilterCustomWordResults( +std::vector<SpellCheckResult> SpellCheckHostChromeImpl::FilterCustomWordResults( const std::string& text, const SpellcheckCustomDictionary& custom_dictionary, const std::vector<SpellCheckResult>& service_results) { @@ -126,6 +126,6 @@ } #endif // !BUILDFLAG(USE_BROWSER_SPELLCHECKER) -SpellcheckService* SpellCheckHostImpl::GetSpellcheckService() const { +SpellcheckService* SpellCheckHostChromeImpl::GetSpellcheckService() const { return SpellcheckServiceFactory::GetForRenderer(renderer_identity_); }
diff --git a/chrome/browser/spellchecker/spell_check_host_impl.h b/chrome/browser/spellchecker/spell_check_host_chrome_impl.h similarity index 82% rename from chrome/browser/spellchecker/spell_check_host_impl.h rename to chrome/browser/spellchecker/spell_check_host_chrome_impl.h index e8c90543..1e712fc 100644 --- a/chrome/browser/spellchecker/spell_check_host_impl.h +++ b/chrome/browser/spellchecker/spell_check_host_chrome_impl.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_SPELLCHECKER_SPELL_CHECK_HOST_IMPL_H_ -#define CHROME_BROWSER_SPELLCHECKER_SPELL_CHECK_HOST_IMPL_H_ +#ifndef CHROME_BROWSER_SPELLCHECKER_SPELL_CHECK_HOST_CHROME_IMPL_H_ +#define CHROME_BROWSER_SPELLCHECKER_SPELL_CHECK_HOST_CHROME_IMPL_H_ #include "base/macros.h" #include "components/spellcheck/browser/spelling_service_client.h" @@ -20,17 +20,17 @@ struct SpellCheckResult; -class SpellCheckHostImpl : public spellcheck::mojom::SpellCheckHost { +class SpellCheckHostChromeImpl : public spellcheck::mojom::SpellCheckHost { public: - explicit SpellCheckHostImpl( + explicit SpellCheckHostChromeImpl( const service_manager::Identity& renderer_identity); - ~SpellCheckHostImpl() override; + ~SpellCheckHostChromeImpl() override; static void Create(spellcheck::mojom::SpellCheckHostRequest request, const service_manager::BindSourceInfo& source_info); private: - friend class TestSpellCheckHostImpl; + friend class TestSpellCheckHostChromeImpl; // spellcheck::mojom::SpellCheckHost: void RequestDictionary() override; @@ -65,7 +65,7 @@ // A JSON-RPC client that calls the remote Spelling service. SpellingServiceClient client_; - DISALLOW_COPY_AND_ASSIGN(SpellCheckHostImpl); + DISALLOW_COPY_AND_ASSIGN(SpellCheckHostChromeImpl); }; -#endif // CHROME_BROWSER_SPELLCHECKER_SPELL_CHECK_HOST_IMPL_H_ +#endif // CHROME_BROWSER_SPELLCHECKER_SPELL_CHECK_HOST_CHROME_IMPL_H_
diff --git a/chrome/browser/spellchecker/spell_check_host_impl_unittest.cc b/chrome/browser/spellchecker/spell_check_host_chrome_impl_unittest.cc similarity index 88% rename from chrome/browser/spellchecker/spell_check_host_impl_unittest.cc rename to chrome/browser/spellchecker/spell_check_host_chrome_impl_unittest.cc index 8dff386e..e991fddc 100644 --- a/chrome/browser/spellchecker/spell_check_host_impl_unittest.cc +++ b/chrome/browser/spellchecker/spell_check_host_chrome_impl_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/spellchecker/spell_check_host_impl.h" +#include "chrome/browser/spellchecker/spell_check_host_chrome_impl.h" #include "base/macros.h" #include "base/memory/ptr_util.h" @@ -19,9 +19,9 @@ #error !BUILDFLAG(USE_BROWSER_SPELLCHECKER) is required for these tests. #endif -class TestSpellCheckHostImpl { +class TestSpellCheckHostChromeImpl { public: - TestSpellCheckHostImpl() + TestSpellCheckHostChromeImpl() : spellcheck_(base::MakeUnique<SpellcheckService>(&testing_profile_)) {} SpellcheckCustomDictionary& GetCustomDictionary() const { @@ -34,7 +34,7 @@ std::vector<SpellCheckResult> FilterCustomWordResults( const std::string& text, const std::vector<SpellCheckResult>& service_results) const { - return SpellCheckHostImpl::FilterCustomWordResults( + return SpellCheckHostChromeImpl::FilterCustomWordResults( text, GetCustomDictionary(), service_results); } @@ -43,18 +43,18 @@ TestingProfile testing_profile_; std::unique_ptr<SpellcheckService> spellcheck_; - DISALLOW_COPY_AND_ASSIGN(TestSpellCheckHostImpl); + DISALLOW_COPY_AND_ASSIGN(TestSpellCheckHostChromeImpl); }; // Spelling corrections of custom dictionary words should be removed from the // results returned by the remote Spelling service. -TEST(SpellCheckHostImplTest, CustomSpellingResults) { +TEST(SpellCheckHostChromeImplTest, CustomSpellingResults) { std::vector<SpellCheckResult> service_results; service_results.push_back(SpellCheckResult(SpellCheckResult::SPELLING, 0, 6, base::ASCIIToUTF16("Hello"))); service_results.push_back(SpellCheckResult(SpellCheckResult::SPELLING, 7, 5, base::ASCIIToUTF16("World"))); - TestSpellCheckHostImpl host_impl; + TestSpellCheckHostChromeImpl host_impl; host_impl.GetCustomDictionary().AddWord("Helllo"); std::vector<SpellCheckResult> results = host_impl.FilterCustomWordResults("Helllo Warld", service_results); @@ -70,13 +70,13 @@ // Spelling corrections of words that are not in the custom dictionary should // be retained in the results returned by the remote Spelling service. -TEST(SpellCheckHostImplTest, SpellingServiceResults) { +TEST(SpellCheckHostChromeImplTest, SpellingServiceResults) { std::vector<SpellCheckResult> service_results; service_results.push_back(SpellCheckResult(SpellCheckResult::SPELLING, 0, 6, base::ASCIIToUTF16("Hello"))); service_results.push_back(SpellCheckResult(SpellCheckResult::SPELLING, 7, 5, base::ASCIIToUTF16("World"))); - TestSpellCheckHostImpl host_impl; + TestSpellCheckHostChromeImpl host_impl; host_impl.GetCustomDictionary().AddWord("Hulo"); std::vector<SpellCheckResult> results = host_impl.FilterCustomWordResults("Helllo Warld", service_results);
diff --git a/chrome/browser/spellchecker/spellcheck_service_browsertest.cc b/chrome/browser/spellchecker/spellcheck_service_browsertest.cc index 6aca4e68..854b69c 100644 --- a/chrome/browser/spellchecker/spellcheck_service_browsertest.cc +++ b/chrome/browser/spellchecker/spellcheck_service_browsertest.cc
@@ -19,7 +19,7 @@ #include "base/threading/thread_restrictions.h" #include "base/values.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/spellchecker/spell_check_host_impl.h" +#include "chrome/browser/spellchecker/spell_check_host_chrome_impl.h" #include "chrome/browser/spellchecker/spellcheck_factory.h" #include "chrome/browser/spellchecker/spellcheck_service.h" #include "chrome/browser/ui/browser.h" @@ -256,7 +256,7 @@ void RequestSpellCheckHost(spellcheck::mojom::SpellCheckHostPtr* interface) { service_manager::BindSourceInfo source_info; source_info.identity = GetRenderer()->GetChildIdentity(); - SpellCheckHostImpl::Create(mojo::MakeRequest(interface), source_info); + SpellCheckHostChromeImpl::Create(mojo::MakeRequest(interface), source_info); } void SpellingServiceDone(bool success,
diff --git a/chrome/browser/supervised_user/legacy/supervised_user_registration_utility.cc b/chrome/browser/supervised_user/legacy/supervised_user_registration_utility.cc index 243754a5..ce6390c9 100644 --- a/chrome/browser/supervised_user/legacy/supervised_user_registration_utility.cc +++ b/chrome/browser/supervised_user/legacy/supervised_user_registration_utility.cc
@@ -43,7 +43,8 @@ namespace { -SupervisedUserRegistrationUtility* g_instance_for_tests = NULL; +SupervisedUserRegistrationUtility* + g_supervised_user_registration_utility_instance_for_tests = NULL; // Actual implementation of SupervisedUserRegistrationUtility. class SupervisedUserRegistrationUtilityImpl @@ -155,9 +156,10 @@ SupervisedUserRegistrationUtility::Create(Profile* profile) { DCHECK(base::FeatureList::IsEnabled(features::kSupervisedUserCreation)); - if (g_instance_for_tests) { - SupervisedUserRegistrationUtility* result = g_instance_for_tests; - g_instance_for_tests = NULL; + if (g_supervised_user_registration_utility_instance_for_tests) { + SupervisedUserRegistrationUtility* result = + g_supervised_user_registration_utility_instance_for_tests; + g_supervised_user_registration_utility_instance_for_tests = NULL; return base::WrapUnique(result); } @@ -192,9 +194,9 @@ // static void SupervisedUserRegistrationUtility::SetUtilityForTests( SupervisedUserRegistrationUtility* utility) { - if (g_instance_for_tests) - delete g_instance_for_tests; - g_instance_for_tests = utility; + if (g_supervised_user_registration_utility_instance_for_tests) + delete g_supervised_user_registration_utility_instance_for_tests; + g_supervised_user_registration_utility_instance_for_tests = utility; } // static
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 28d3e9f..6e988c1 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -3734,6 +3734,7 @@ "//skia", "//testing/gtest", "//ui/base", + "//ui/base:test_support", "//ui/gfx:test_support", "//ui/shell_dialogs", ] @@ -3756,7 +3757,6 @@ "cocoa/extensions/browser_action_test_util_mac.mm", "cocoa/find_bar/find_bar_host_unittest_util_cocoa.mm", ] - deps += [ "//ui/base:test_support" ] } }
diff --git a/chrome/browser/ui/ash/accessibility/ax_tree_source_aura_unittest.cc b/chrome/browser/ui/ash/accessibility/ax_tree_source_aura_unittest.cc index 3704424..424a702 100644 --- a/chrome/browser/ui/ash/accessibility/ax_tree_source_aura_unittest.cc +++ b/chrome/browser/ui/ash/accessibility/ax_tree_source_aura_unittest.cc
@@ -84,8 +84,8 @@ AXTreeSourceAura ax_tree; ASSERT_TRUE(ax_tree.GetRoot()); - // ID's should start at 1 and there should be a root. - ASSERT_EQ(1, ax_tree.GetRoot()->GetID()); + // ID's should be > 0. + ASSERT_GE(ax_tree.GetRoot()->GetUniqueId().Get(), 1); // Grab the content view directly from cache to avoid walking down the tree. AXAuraObjWrapper* content = @@ -105,6 +105,8 @@ ASSERT_EQ(content, textfield->GetParent()); + ASSERT_NE(textfield->GetUniqueId(), ax_tree.GetRoot()->GetUniqueId()); + // Try walking up the tree to the root. AXAuraObjWrapper* test_root = NULL; for (AXAuraObjWrapper* root_finder = ax_tree.GetParent(content); root_finder; @@ -124,7 +126,7 @@ ASSERT_FALSE(textfield_->HasFocus()); ui::AXActionData action_data; action_data.action = ui::AX_ACTION_DO_DEFAULT; - action_data.target_node_id = textfield_wrapper->GetID(); + action_data.target_node_id = textfield_wrapper->GetUniqueId().Get(); textfield_wrapper->HandleAccessibleAction(action_data); ASSERT_TRUE(textfield_->HasFocus()); } @@ -140,7 +142,7 @@ ASSERT_FALSE(textfield_->HasFocus()); ui::AXActionData action_data; action_data.action = ui::AX_ACTION_FOCUS; - action_data.target_node_id = textfield_wrapper->GetID(); + action_data.target_node_id = textfield_wrapper->GetUniqueId().Get(); textfield_wrapper->HandleAccessibleAction(action_data); ASSERT_TRUE(textfield_->HasFocus()); } @@ -177,7 +179,7 @@ int text_field_update_index = -1; for (size_t i = 0; i < node_count; ++i) { - if (textfield_wrapper->GetID() == out_update2.nodes[i].id) + if (textfield_wrapper->GetUniqueId().Get() == out_update2.nodes[i].id) text_field_update_index = i; }
diff --git a/chrome/browser/ui/ash/chrome_new_window_client.cc b/chrome/browser/ui/ash/chrome_new_window_client.cc index bfc5d2e..61f41cb 100644 --- a/chrome/browser/ui/ash/chrome_new_window_client.cc +++ b/chrome/browser/ui/ash/chrome_new_window_client.cc
@@ -36,7 +36,7 @@ namespace { -ChromeNewWindowClient* g_instance = nullptr; +ChromeNewWindowClient* g_chrome_new_window_client_instance = nullptr; void RestoreTabUsingProfile(Profile* profile) { sessions::TabRestoreService* service = @@ -63,18 +63,18 @@ binding_.Bind(mojo::MakeRequest(&ptr_info)); new_window_controller_->SetClient(std::move(ptr_info)); - DCHECK(!g_instance); - g_instance = this; + DCHECK(!g_chrome_new_window_client_instance); + g_chrome_new_window_client_instance = this; } ChromeNewWindowClient::~ChromeNewWindowClient() { - DCHECK_EQ(g_instance, this); - g_instance = nullptr; + DCHECK_EQ(g_chrome_new_window_client_instance, this); + g_chrome_new_window_client_instance = nullptr; } // static ChromeNewWindowClient* ChromeNewWindowClient::Get() { - return g_instance; + return g_chrome_new_window_client_instance; } // TabRestoreHelper is used to restore a tab. In particular when the user
diff --git a/chrome/browser/ui/ash/chrome_screenshot_grabber.cc b/chrome/browser/ui/ash/chrome_screenshot_grabber.cc index f1e2176..3bf7662c 100644 --- a/chrome/browser/ui/ash/chrome_screenshot_grabber.cc +++ b/chrome/browser/ui/ash/chrome_screenshot_grabber.cc
@@ -60,7 +60,7 @@ base::MayBlock(), base::TaskPriority::USER_VISIBLE, base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}; -ChromeScreenshotGrabber* g_instance = nullptr; +ChromeScreenshotGrabber* g_chrome_screenshot_grabber_instance = nullptr; void CopyScreenshotToClipboard(const SkBitmap& decoded_image) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); @@ -310,19 +310,19 @@ : screenshot_grabber_(new ui::ScreenshotGrabber(this)), weak_factory_(this) { screenshot_grabber_->AddObserver(this); - DCHECK(!g_instance); - g_instance = this; + DCHECK(!g_chrome_screenshot_grabber_instance); + g_chrome_screenshot_grabber_instance = this; } ChromeScreenshotGrabber::~ChromeScreenshotGrabber() { - DCHECK_EQ(this, g_instance); - g_instance = nullptr; + DCHECK_EQ(this, g_chrome_screenshot_grabber_instance); + g_chrome_screenshot_grabber_instance = nullptr; screenshot_grabber_->RemoveObserver(this); } // static ChromeScreenshotGrabber* ChromeScreenshotGrabber::Get() { - return g_instance; + return g_chrome_screenshot_grabber_instance; } void ChromeScreenshotGrabber::HandleTakeScreenshotForAllRootWindows() {
diff --git a/chrome/browser/ui/ash/chrome_shell_content_state.cc b/chrome/browser/ui/ash/chrome_shell_content_state.cc index 6d8ecb1..86920b7 100644 --- a/chrome/browser/ui/ash/chrome_shell_content_state.cc +++ b/chrome/browser/ui/ash/chrome_shell_content_state.cc
@@ -11,24 +11,24 @@ namespace { -ChromeShellContentState* g_instance = nullptr; +ChromeShellContentState* g_chrome_shell_content_state_instance = nullptr; } // namespace // static ChromeShellContentState* ChromeShellContentState::GetInstance() { - DCHECK(g_instance); - return g_instance; + DCHECK(g_chrome_shell_content_state_instance); + return g_chrome_shell_content_state_instance; } ChromeShellContentState::ChromeShellContentState() { - DCHECK(!g_instance); - g_instance = this; + DCHECK(!g_chrome_shell_content_state_instance); + g_chrome_shell_content_state_instance = this; } ChromeShellContentState::~ChromeShellContentState() { - DCHECK_EQ(this, g_instance); - g_instance = nullptr; + DCHECK_EQ(this, g_chrome_shell_content_state_instance); + g_chrome_shell_content_state_instance = nullptr; } content::BrowserContext* ChromeShellContentState::GetActiveBrowserContext() {
diff --git a/chrome/browser/ui/ash/ime_controller_client.cc b/chrome/browser/ui/ash/ime_controller_client.cc index 6eb24cd..0d57d70 100644 --- a/chrome/browser/ui/ash/ime_controller_client.cc +++ b/chrome/browser/ui/ash/ime_controller_client.cc
@@ -24,7 +24,7 @@ namespace { -ImeControllerClient* g_instance = nullptr; +ImeControllerClient* g_ime_controller_client_instance = nullptr; } // namespace @@ -40,13 +40,13 @@ // This does not need to send the initial state to ash because that happens // via observers when the InputMethodManager initializes its list of IMEs. - DCHECK(!g_instance); - g_instance = this; + DCHECK(!g_ime_controller_client_instance); + g_ime_controller_client_instance = this; } ImeControllerClient::~ImeControllerClient() { - DCHECK_EQ(this, g_instance); - g_instance = nullptr; + DCHECK_EQ(this, g_ime_controller_client_instance); + g_ime_controller_client_instance = nullptr; InputMethodMenuManager::GetInstance()->RemoveObserver(this); input_method_manager_->RemoveImeMenuObserver(this); @@ -71,7 +71,7 @@ // static ImeControllerClient* ImeControllerClient::Get() { - return g_instance; + return g_ime_controller_client_instance; } void ImeControllerClient::SetImesManagedByPolicy(bool managed) {
diff --git a/chrome/browser/ui/ash/login_screen_client.cc b/chrome/browser/ui/ash/login_screen_client.cc index df27b1f..e11cdb4 100644 --- a/chrome/browser/ui/ash/login_screen_client.cc +++ b/chrome/browser/ui/ash/login_screen_client.cc
@@ -15,7 +15,7 @@ #include "services/service_manager/public/cpp/connector.h" namespace { -LoginScreenClient* g_instance = nullptr; +LoginScreenClient* g_login_screen_client_instance = nullptr; } // namespace LoginScreenClient::Delegate::Delegate() = default; @@ -30,24 +30,24 @@ binding_.Bind(mojo::MakeRequest(&client)); login_screen_->SetClient(std::move(client)); - DCHECK(!g_instance); - g_instance = this; + DCHECK(!g_login_screen_client_instance); + g_login_screen_client_instance = this; } LoginScreenClient::~LoginScreenClient() { - DCHECK_EQ(this, g_instance); - g_instance = nullptr; + DCHECK_EQ(this, g_login_screen_client_instance); + g_login_screen_client_instance = nullptr; } // static bool LoginScreenClient::HasInstance() { - return !!g_instance; + return !!g_login_screen_client_instance; } // static LoginScreenClient* LoginScreenClient::Get() { - DCHECK(g_instance); - return g_instance; + DCHECK(g_login_screen_client_instance); + return g_login_screen_client_instance; } void LoginScreenClient::AuthenticateUser(const AccountId& account_id,
diff --git a/chrome/browser/ui/ash/multi_user/multi_user_window_manager.cc b/chrome/browser/ui/ash/multi_user/multi_user_window_manager.cc index e0a0324..b7408da 100644 --- a/chrome/browser/ui/ash/multi_user/multi_user_window_manager.cc +++ b/chrome/browser/ui/ash/multi_user/multi_user_window_manager.cc
@@ -16,16 +16,16 @@ #include "components/user_manager/user_manager.h" namespace { -MultiUserWindowManager* g_instance = nullptr; +MultiUserWindowManager* g_multi_user_window_manager_instance = nullptr; } // namespace // static MultiUserWindowManager* MultiUserWindowManager::GetInstance() { - return g_instance; + return g_multi_user_window_manager_instance; } MultiUserWindowManager* MultiUserWindowManager::CreateInstance() { - DCHECK(!g_instance); + DCHECK(!g_multi_user_window_manager_instance); ash::MultiProfileUMA::SessionMode mode = ash::MultiProfileUMA::SESSION_SINGLE_USER_MODE; // TODO(crbug.com/557406): Enable this component in Mash. The object itself @@ -35,43 +35,43 @@ MultiUserWindowManagerChromeOS* manager = new MultiUserWindowManagerChromeOS( user_manager::UserManager::Get()->GetActiveUser()->GetAccountId()); - g_instance = manager; + g_multi_user_window_manager_instance = manager; manager->Init(); mode = ash::MultiProfileUMA::SESSION_SEPARATE_DESKTOP_MODE; } ash::MultiProfileUMA::RecordSessionMode(mode); // If there was no instance created yet we create a dummy instance. - if (!g_instance) - g_instance = new MultiUserWindowManagerStub(); + if (!g_multi_user_window_manager_instance) + g_multi_user_window_manager_instance = new MultiUserWindowManagerStub(); - return g_instance; + return g_multi_user_window_manager_instance; } // static bool MultiUserWindowManager::ShouldShowAvatar(aura::Window* window) { // Session restore can open a window for the first user before the instance // is created. - if (!g_instance) + if (!g_multi_user_window_manager_instance) return false; // Show the avatar icon if the window is on a different desktop than the // window's owner's desktop. The stub implementation does the right thing // for single-user mode. - return !g_instance->IsWindowOnDesktopOfUser( - window, g_instance->GetWindowOwner(window)); + return !g_multi_user_window_manager_instance->IsWindowOnDesktopOfUser( + window, g_multi_user_window_manager_instance->GetWindowOwner(window)); } // static void MultiUserWindowManager::DeleteInstance() { - DCHECK(g_instance); - delete g_instance; - g_instance = nullptr; + DCHECK(g_multi_user_window_manager_instance); + delete g_multi_user_window_manager_instance; + g_multi_user_window_manager_instance = nullptr; } void MultiUserWindowManager::SetInstanceForTest( MultiUserWindowManager* instance) { - if (g_instance) + if (g_multi_user_window_manager_instance) DeleteInstance(); - g_instance = instance; + g_multi_user_window_manager_instance = instance; }
diff --git a/chrome/browser/ui/ash/session_controller_client.cc b/chrome/browser/ui/ash/session_controller_client.cc index 959dffd..507e66b 100644 --- a/chrome/browser/ui/ash/session_controller_client.cc +++ b/chrome/browser/ui/ash/session_controller_client.cc
@@ -61,7 +61,7 @@ // The maximum session length limit that can be set. const int kSessionLengthLimitMaxMs = 24 * 60 * 60 * 1000; // 24 hours. -SessionControllerClient* g_instance = nullptr; +SessionControllerClient* g_session_controller_client_instance = nullptr; // Returns the session id of a given user or 0 if user has no session. uint32_t GetSessionId(const User& user) { @@ -174,13 +174,13 @@ chromeos::DeviceSettingsService::Get() ->device_off_hours_controller() ->AddObserver(this); - DCHECK(!g_instance); - g_instance = this; + DCHECK(!g_session_controller_client_instance); + g_session_controller_client_instance = this; } SessionControllerClient::~SessionControllerClient() { - DCHECK_EQ(this, g_instance); - g_instance = nullptr; + DCHECK_EQ(this, g_session_controller_client_instance); + g_session_controller_client_instance = nullptr; if (supervised_user_profile_) { SupervisedUserServiceFactory::GetForProfile(supervised_user_profile_) @@ -208,7 +208,7 @@ // static SessionControllerClient* SessionControllerClient::Get() { - return g_instance; + return g_session_controller_client_instance; } void SessionControllerClient::PrepareForLock(base::OnceClosure callback) { @@ -434,7 +434,7 @@ // static void SessionControllerClient::FlushForTesting() { - g_instance->session_controller_.FlushForTesting(); + g_session_controller_client_instance->session_controller_.FlushForTesting(); } void SessionControllerClient::OnSessionStateChanged() {
diff --git a/chrome/browser/ui/ash/system_tray_client.cc b/chrome/browser/ui/ash/system_tray_client.cc index 84e81f3..f112f00 100644 --- a/chrome/browser/ui/ash/system_tray_client.cc +++ b/chrome/browser/ui/ash/system_tray_client.cc
@@ -14,7 +14,7 @@ #include "base/metrics/user_metrics.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process_platform_part.h" -#include "chrome/browser/chromeos/accessibility/accessibility_util.h" +#include "chrome/browser/chromeos/accessibility/accessibility_manager.h" #include "chrome/browser/chromeos/login/help_app_launcher.h" #include "chrome/browser/chromeos/options/network_config_view.h" #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" @@ -69,7 +69,7 @@ namespace { -SystemTrayClient* g_instance = nullptr; +SystemTrayClient* g_system_tray_client_instance = nullptr; void ShowSettingsSubPageForActiveUser(const std::string& sub_page) { chrome::ShowSettingsSubPageForProfile(ProfileManager::GetActiveUserProfile(), @@ -138,14 +138,14 @@ policy_manager->core()->store()->AddObserver(this); UpdateEnterpriseDisplayDomain(); - DCHECK(!g_instance); - g_instance = this; + DCHECK(!g_system_tray_client_instance); + g_system_tray_client_instance = this; UpgradeDetector::GetInstance()->AddObserver(this); } SystemTrayClient::~SystemTrayClient() { - DCHECK_EQ(this, g_instance); - g_instance = nullptr; + DCHECK_EQ(this, g_system_tray_client_instance); + g_system_tray_client_instance = nullptr; policy::BrowserPolicyConnectorChromeOS* connector = g_browser_process->platform_part()->browser_policy_connector_chromeos(); @@ -160,7 +160,7 @@ // static SystemTrayClient* SystemTrayClient::Get() { - return g_instance; + return g_system_tray_client_instance; } // static @@ -284,7 +284,7 @@ void SystemTrayClient::ShowAccessibilityHelp() { chrome::ScopedTabbedBrowserDisplayer displayer( ProfileManager::GetActiveUserProfile()); - chromeos::accessibility::ShowAccessibilityHelp(displayer.browser()); + chromeos::AccessibilityManager::ShowAccessibilityHelp(displayer.browser()); } void SystemTrayClient::ShowAccessibilitySettings() {
diff --git a/chrome/browser/ui/ash/tablet_mode_client.cc b/chrome/browser/ui/ash/tablet_mode_client.cc index 8b6ea1ed..93d3532 100644 --- a/chrome/browser/ui/ash/tablet_mode_client.cc +++ b/chrome/browser/ui/ash/tablet_mode_client.cc
@@ -15,7 +15,7 @@ namespace { -TabletModeClient* g_instance = nullptr; +TabletModeClient* g_tablet_mode_client_instance = nullptr; } // namespace @@ -23,13 +23,13 @@ : auto_hide_title_bars_(!base::CommandLine::ForCurrentProcess()->HasSwitch( ash::switches::kAshDisableTabletAutohideTitlebars)), binding_(this) { - DCHECK(!g_instance); - g_instance = this; + DCHECK(!g_tablet_mode_client_instance); + g_tablet_mode_client_instance = this; } TabletModeClient::~TabletModeClient() { - DCHECK_EQ(this, g_instance); - g_instance = nullptr; + DCHECK_EQ(this, g_tablet_mode_client_instance); + g_tablet_mode_client_instance = nullptr; } void TabletModeClient::Init() { @@ -47,7 +47,7 @@ // static TabletModeClient* TabletModeClient::Get() { - return g_instance; + return g_tablet_mode_client_instance; } void TabletModeClient::AddObserver(TabletModeClientObserver* observer) {
diff --git a/chrome/browser/ui/ash/wallpaper_controller_client.cc b/chrome/browser/ui/ash/wallpaper_controller_client.cc index 4949513..c234460 100644 --- a/chrome/browser/ui/ash/wallpaper_controller_client.cc +++ b/chrome/browser/ui/ash/wallpaper_controller_client.cc
@@ -22,7 +22,7 @@ // Known user keys. const char kWallpaperFilesId[] = "wallpaper-files-id"; -WallpaperControllerClient* g_instance = nullptr; +WallpaperControllerClient* g_wallpaper_controller_client_instance = nullptr; // Creates a mojom::WallpaperUserInfo for the account id. Returns nullptr if // user manager cannot find the user. @@ -88,13 +88,13 @@ WallpaperControllerClient::WallpaperControllerClient() : policy_handler_(this), binding_(this) { - DCHECK(!g_instance); - g_instance = this; + DCHECK(!g_wallpaper_controller_client_instance); + g_wallpaper_controller_client_instance = this; } WallpaperControllerClient::~WallpaperControllerClient() { - DCHECK_EQ(this, g_instance); - g_instance = nullptr; + DCHECK_EQ(this, g_wallpaper_controller_client_instance); + g_wallpaper_controller_client_instance = nullptr; } void WallpaperControllerClient::Init() { @@ -112,7 +112,7 @@ // static WallpaperControllerClient* WallpaperControllerClient::Get() { - return g_instance; + return g_wallpaper_controller_client_instance; } bool WallpaperControllerClient::CanGetWallpaperFilesId() const {
diff --git a/chrome/browser/ui/aura/accessibility/automation_manager_aura.cc b/chrome/browser/ui/aura/accessibility/automation_manager_aura.cc index 3f9b666..109267c 100644 --- a/chrome/browser/ui/aura/accessibility/automation_manager_aura.cc +++ b/chrome/browser/ui/aura/accessibility/automation_manager_aura.cc
@@ -202,7 +202,7 @@ current_tree_serializer_->SerializeChanges(focus, ¶ms.update); params.tree_id = 0; - params.id = aura_obj->GetID(); + params.id = aura_obj->GetUniqueId().Get(); params.event_type = event_type; params.mouse_location = aura::Env::GetInstance()->last_mouse_location(); AutomationEventRouter* router = AutomationEventRouter::GetInstance();
diff --git a/chrome/browser/ui/aura/accessibility/ax_root_obj_wrapper.cc b/chrome/browser/ui/aura/accessibility/ax_root_obj_wrapper.cc index b723c3b1..dd03af7 100644 --- a/chrome/browser/ui/aura/accessibility/ax_root_obj_wrapper.cc +++ b/chrome/browser/ui/aura/accessibility/ax_root_obj_wrapper.cc
@@ -12,8 +12,7 @@ #include "ui/views/accessibility/ax_aura_obj_cache.h" #include "ui/views/accessibility/ax_window_obj_wrapper.h" -AXRootObjWrapper::AXRootObjWrapper(int32_t id) - : id_(id), alert_window_(new aura::Window(NULL)) { +AXRootObjWrapper::AXRootObjWrapper() : alert_window_(new aura::Window(NULL)) { alert_window_->Init(ui::LAYER_NOT_DRAWN); } @@ -52,12 +51,12 @@ } void AXRootObjWrapper::Serialize(ui::AXNodeData* out_node_data) { - out_node_data->id = id_; + out_node_data->id = unique_id_.Get(); out_node_data->role = ui::AX_ROLE_DESKTOP; out_node_data->AddStringAttribute(ui::AX_ATTR_CHROME_CHANNEL, chrome::GetChannelString()); } -int32_t AXRootObjWrapper::GetID() { - return id_; +const ui::AXUniqueId& AXRootObjWrapper::GetUniqueId() const { + return unique_id_; }
diff --git a/chrome/browser/ui/aura/accessibility/ax_root_obj_wrapper.h b/chrome/browser/ui/aura/accessibility/ax_root_obj_wrapper.h index fab9ced..189c6c5 100644 --- a/chrome/browser/ui/aura/accessibility/ax_root_obj_wrapper.h +++ b/chrome/browser/ui/aura/accessibility/ax_root_obj_wrapper.h
@@ -10,6 +10,7 @@ #include <string> #include "base/macros.h" +#include "ui/accessibility/platform/ax_unique_id.h" #include "ui/views/accessibility/ax_aura_obj_wrapper.h" namespace aura { @@ -18,7 +19,7 @@ class AXRootObjWrapper : public views::AXAuraObjWrapper { public: - explicit AXRootObjWrapper(int32_t id); + AXRootObjWrapper(); ~AXRootObjWrapper() override; // Returns an AXAuraObjWrapper for an alert window with title set to |text|. @@ -32,10 +33,10 @@ void GetChildren( std::vector<views::AXAuraObjWrapper*>* out_children) override; void Serialize(ui::AXNodeData* out_node_data) override; - int32_t GetID() override; + const ui::AXUniqueId& GetUniqueId() const override; private: - int32_t id_; + ui::AXUniqueId unique_id_; aura::Window* alert_window_;
diff --git a/chrome/browser/ui/aura/accessibility/ax_tree_source_aura.cc b/chrome/browser/ui/aura/accessibility/ax_tree_source_aura.cc index a1532829..e6cca88 100644 --- a/chrome/browser/ui/aura/accessibility/ax_tree_source_aura.cc +++ b/chrome/browser/ui/aura/accessibility/ax_tree_source_aura.cc
@@ -24,7 +24,7 @@ using views::AXAuraObjWrapper; AXTreeSourceAura::AXTreeSourceAura() { - root_.reset(new AXRootObjWrapper(AXAuraObjCache::GetInstance()->GetNextID())); + root_.reset(new AXRootObjWrapper()); } AXTreeSourceAura::~AXTreeSourceAura() { @@ -57,7 +57,7 @@ tree_data->loading_progress = 1.0; AXAuraObjWrapper* focus = AXAuraObjCache::GetInstance()->GetFocus(); if (focus) - tree_data->focus_id = focus->GetID(); + tree_data->focus_id = focus->GetUniqueId().Get(); return true; } @@ -66,13 +66,13 @@ } AXAuraObjWrapper* AXTreeSourceAura::GetFromId(int32_t id) const { - if (id == root_->GetID()) + if (id == root_->GetUniqueId().Get()) return root_.get(); return AXAuraObjCache::GetInstance()->Get(id); } int32_t AXTreeSourceAura::GetId(AXAuraObjWrapper* node) const { - return node->GetID(); + return node->GetUniqueId().Get(); } void AXTreeSourceAura::GetChildren( @@ -83,13 +83,13 @@ AXAuraObjWrapper* AXTreeSourceAura::GetParent(AXAuraObjWrapper* node) const { AXAuraObjWrapper* parent = node->GetParent(); - if (!parent && node->GetID() != root_->GetID()) + if (!parent && node->GetUniqueId() != root_->GetUniqueId()) parent = root_.get(); return parent; } bool AXTreeSourceAura::IsValid(AXAuraObjWrapper* node) const { - return node && node->GetID() != -1; + return node != nullptr; } bool AXTreeSourceAura::IsEqual(AXAuraObjWrapper* node1, @@ -97,7 +97,7 @@ if (!node1 || !node2) return false; - return node1->GetID() == node2->GetID() && node1->GetID() != -1; + return node1->GetUniqueId() == node2->GetUniqueId(); } AXAuraObjWrapper* AXTreeSourceAura::GetNull() const { @@ -118,7 +118,7 @@ ui::AXNodeData parent_data; parent->Serialize(&parent_data); out_data->location.Offset(-parent_data.location.OffsetFromOrigin()); - out_data->offset_container_id = parent->GetID(); + out_data->offset_container_id = parent->GetUniqueId().Get(); } if (out_data->role == ui::AX_ROLE_WEB_VIEW) {
diff --git a/chrome/browser/ui/cocoa/download/download_item_cell.mm b/chrome/browser/ui/cocoa/download/download_item_cell.mm index ee3b9da..9249bbf 100644 --- a/chrome/browser/ui/cocoa/download/download_item_cell.mm +++ b/chrome/browser/ui/cocoa/download/download_item_cell.mm
@@ -378,7 +378,7 @@ - (NSString*)elideTitle:(int)availableWidth { return base::SysUTF16ToNSString( gfx::ElideFilename(downloadPath_, gfx::FontList(gfx::Font([self font])), - availableWidth, gfx::Typesetter::PLATFORM)); + availableWidth, gfx::Typesetter::BROWSER)); } - (NSString*)elideStatus:(int)availableWidth {
diff --git a/chrome/browser/ui/cocoa/download/md_download_item_view.mm b/chrome/browser/ui/cocoa/download/md_download_item_view.mm index 17c63227..a32d23a 100644 --- a/chrome/browser/ui/cocoa/download/md_download_item_view.mm +++ b/chrome/browser/ui/cocoa/download/md_download_item_view.mm
@@ -557,7 +557,7 @@ gfx::ElideFilename(downloadModel->download()->GetFileNameToReportUser(), gfx::FontList(gfx::Font(filenameView_.font)), NSWidth(filenameView_.bounds) - lineFragmentPadding, - gfx::Typesetter::PLATFORM)); + gfx::Typesetter::BROWSER)); NSString* statusString = base::SysUTF16ToNSString(downloadModel->GetStatusText());
diff --git a/chrome/browser/ui/cocoa/hung_renderer_controller.mm b/chrome/browser/ui/cocoa/hung_renderer_controller.mm index 76b3ed3..e4d7c0bc 100644 --- a/chrome/browser/ui/cocoa/hung_renderer_controller.mm +++ b/chrome/browser/ui/cocoa/hung_renderer_controller.mm
@@ -60,7 +60,7 @@ namespace { // We only support showing one of these at a time per app. The // controller owns itself and is released when its window is closed. -HungRendererController* g_instance = NULL; +HungRendererController* g_hung_renderer_controller_instance = NULL; } // namespace class HungRendererWebContentsObserverBridge @@ -103,7 +103,7 @@ } - (void)dealloc { - DCHECK(!g_instance); + DCHECK(!g_hung_renderer_controller_instance); [tableView_ setDataSource:nil]; [tableView_ setDelegate:nil]; [killButton_ setTarget:nil]; @@ -152,20 +152,20 @@ + (void)showForWebContents:(content::WebContents*)contents { if (!logging::DialogsAreSuppressed()) { - if (!g_instance) - g_instance = [[HungRendererController alloc] + if (!g_hung_renderer_controller_instance) + g_hung_renderer_controller_instance = [[HungRendererController alloc] initWithWindowNibName:@"HungRendererDialog"]; - [g_instance showForWebContents:contents]; + [g_hung_renderer_controller_instance showForWebContents:contents]; } } + (void)endForWebContents:(content::WebContents*)contents { - if (!logging::DialogsAreSuppressed() && g_instance) - [g_instance endForWebContents:contents]; + if (!logging::DialogsAreSuppressed() && g_hung_renderer_controller_instance) + [g_hung_renderer_controller_instance endForWebContents:contents]; } + (bool)isShowing { - return g_instance; + return g_hung_renderer_controller_instance; } - (IBAction)kill:(id)sender { @@ -213,11 +213,11 @@ } - (void)windowWillClose:(NSNotification*)notification { - // We have to reset g_instance before autoreleasing the window, - // because we want to avoid reusing the same dialog if someone calls - // chrome::ShowHungRendererDialog() between the autorelease call and the + // We have to reset g_hung_renderer_controller_instance before autoreleasing + // the window, because we want to avoid reusing the same dialog if someone + // calls chrome::ShowHungRendererDialog() between the autorelease call and the // actual dealloc. - g_instance = nil; + g_hung_renderer_controller_instance = nil; // Prevent kills from happening after close if the user had the // button depressed just when new activity was detected.
diff --git a/chrome/browser/ui/uma_browsing_activity_observer.cc b/chrome/browser/ui/uma_browsing_activity_observer.cc index a84c9f6..3c55f01 100644 --- a/chrome/browser/ui/uma_browsing_activity_observer.cc +++ b/chrome/browser/ui/uma_browsing_activity_observer.cc
@@ -23,16 +23,16 @@ namespace chrome { namespace { -UMABrowsingActivityObserver* g_instance = NULL; +UMABrowsingActivityObserver* g_uma_browsing_activity_observer_instance = NULL; } // namespace // static void UMABrowsingActivityObserver::Init() { - DCHECK(!g_instance); + DCHECK(!g_uma_browsing_activity_observer_instance); // Must be created before any Browsers are. DCHECK_EQ(0U, chrome::GetTotalBrowserCount()); - g_instance = new UMABrowsingActivityObserver; + g_uma_browsing_activity_observer_instance = new UMABrowsingActivityObserver; } UMABrowsingActivityObserver::UMABrowsingActivityObserver() { @@ -76,8 +76,8 @@ LogRenderProcessHostCount(); LogBrowserTabCount(); } else if (type == chrome::NOTIFICATION_APP_TERMINATING) { - delete g_instance; - g_instance = NULL; + delete g_uma_browsing_activity_observer_instance; + g_uma_browsing_activity_observer_instance = NULL; } }
diff --git a/chrome/browser/ui/views/chrome_cleaner_dialog_win.cc b/chrome/browser/ui/views/chrome_cleaner_dialog_win.cc index 6c799d9..73bdf99 100644 --- a/chrome/browser/ui/views/chrome_cleaner_dialog_win.cc +++ b/chrome/browser/ui/views/chrome_cleaner_dialog_win.cc
@@ -219,6 +219,7 @@ } void ChromeCleanerDialog::OnCleaning( + bool is_powered_by_partner, const safe_browsing::ChromeCleanerScannerResults& scanner_results) { Abort(); }
diff --git a/chrome/browser/ui/views/chrome_cleaner_dialog_win.h b/chrome/browser/ui/views/chrome_cleaner_dialog_win.h index e0c4584..0c7a8cc 100644 --- a/chrome/browser/ui/views/chrome_cleaner_dialog_win.h +++ b/chrome/browser/ui/views/chrome_cleaner_dialog_win.h
@@ -72,7 +72,8 @@ void OnIdle( safe_browsing::ChromeCleanerController::IdleReason idle_reason) override; void OnScanning() override; - void OnCleaning(const safe_browsing::ChromeCleanerScannerResults& + void OnCleaning(bool is_powered_by_partner, + const safe_browsing::ChromeCleanerScannerResults& scanner_results) override; void OnRebootRequired() override;
diff --git a/chrome/browser/ui/views/extensions/extension_install_dialog_view_browsertest.cc b/chrome/browser/ui/views/extensions/extension_install_dialog_view_browsertest.cc index 181ab885..db8f3840 100644 --- a/chrome/browser/ui/views/extensions/extension_install_dialog_view_browsertest.cc +++ b/chrome/browser/ui/views/extensions/extension_install_dialog_view_browsertest.cc
@@ -7,11 +7,13 @@ #include <string> #include <utility> +#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" #include "chrome/browser/extensions/chrome_test_extension_loader.h" #include "chrome/browser/extensions/extension_browsertest.h" #include "chrome/browser/extensions/extension_icon_manager.h" @@ -247,6 +249,8 @@ : ExtensionInstallPrompt::INLINE_INSTALL_PROMPT); prompt->AddPermissions(permissions_, ExtensionInstallPrompt::REGULAR_PERMISSIONS); + prompt->set_retained_files(retained_files_); + prompt->set_retained_device_messages(retained_devices_); if (from_webstore_) prompt->SetWebstoreData("69,420", true, 2.5, 37); @@ -267,6 +271,14 @@ PermissionMessage(base::ASCIIToUTF16(permission), PermissionIDSet())); } + void AddRetainedFile(const base::FilePath& path) { + retained_files_.push_back(path); + } + + void AddRetainedDevice(const std::string& device) { + retained_devices_.push_back(base::ASCIIToUTF16(device)); + } + void AddPermissionWithDetails( std::string main_permission, std::vector<base::string16> detailed_permissions) { @@ -279,6 +291,8 @@ bool external_install_ = false; bool from_webstore_ = false; PermissionMessages permissions_; + std::vector<base::FilePath> retained_files_; + std::vector<base::string16> retained_devices_; DISALLOW_COPY_AND_ASSIGN(ExtensionInstallDialogViewInteractiveBrowserTest); }; @@ -339,6 +353,27 @@ ShowAndVerifyUi(); } +IN_PROC_BROWSER_TEST_F(ExtensionInstallDialogViewInteractiveBrowserTest, + InvokeUi_WithRetainedFiles) { + AddRetainedFile(base::FilePath(FILE_PATH_LITERAL("/dev/null"))); + AddRetainedFile(base::FilePath(FILE_PATH_LITERAL("/dev/zero"))); + AddRetainedFile(base::FilePath(FILE_PATH_LITERAL("/dev/random"))); + AddRetainedFile(base::FilePath(FILE_PATH_LITERAL( + "/some/very/very/very/very/very/long/path/longer/than/the/" + "line/length/file_with_long_name_too.txt"))); + ShowAndVerifyUi(); +} + +IN_PROC_BROWSER_TEST_F(ExtensionInstallDialogViewInteractiveBrowserTest, + InvokeUi_WithRetainedDevices) { + AddRetainedDevice("USB Device"); + AddRetainedDevice("USB Device With Longer Name"); + AddRetainedDevice( + "Another USB Device With A Very Very Very Very Very Very " + "Long Name So That It Hopefully Wraps to A New Line"); + ShowAndVerifyUi(); +} + class ExtensionInstallDialogRatingsSectionTest : public ExtensionInstallDialogViewTest { public:
diff --git a/chrome/browser/ui/views/toolbar/toolbar_view.cc b/chrome/browser/ui/views/toolbar/toolbar_view.cc index 53302df8..b26f9cb 100644 --- a/chrome/browser/ui/views/toolbar/toolbar_view.cc +++ b/chrome/browser/ui/views/toolbar/toolbar_view.cc
@@ -121,9 +121,11 @@ ToolbarView::~ToolbarView() { UpgradeDetector::GetInstance()->RemoveObserver(this); - // NOTE: Don't remove the command observers here. This object gets destroyed - // after the Browser (which owns the CommandUpdater), so the CommandUpdater is - // already gone. + chrome::RemoveCommandObserver(browser_, IDC_BACK, this); + chrome::RemoveCommandObserver(browser_, IDC_FORWARD, this); + chrome::RemoveCommandObserver(browser_, IDC_RELOAD, this); + chrome::RemoveCommandObserver(browser_, IDC_HOME, this); + chrome::RemoveCommandObserver(browser_, IDC_LOAD_NEW_TAB_PAGE, this); } void ToolbarView::Init() {
diff --git a/chrome/browser/ui/webui/extensions/extensions_ui.cc b/chrome/browser/ui/webui/extensions/extensions_ui.cc index 782d1ed..0b745fc 100644 --- a/chrome/browser/ui/webui/extensions/extensions_ui.cc +++ b/chrome/browser/ui/webui/extensions/extensions_ui.cc
@@ -129,6 +129,8 @@ source->AddLocalizedString("confirm", IDS_CONFIRM); source->AddLocalizedString("done", IDS_DONE); source->AddLocalizedString("ok", IDS_OK); + source->AddLocalizedString("controlledSettingPolicy", + IDS_CONTROLLED_SETTING_POLICY); // Add extension-specific strings. source->AddLocalizedString("title",
diff --git a/chrome/browser/ui/webui/settings/chrome_cleanup_handler.cc b/chrome/browser/ui/webui/settings/chrome_cleanup_handler.cc index 535fbb2..03cdaf7 100644 --- a/chrome/browser/ui/webui/settings/chrome_cleanup_handler.cc +++ b/chrome/browser/ui/webui/settings/chrome_cleanup_handler.cc
@@ -176,14 +176,18 @@ } void ChromeCleanupHandler::OnInfected( + bool is_powered_by_partner, const safe_browsing::ChromeCleanerScannerResults& scanner_results) { FireWebUIListener("chrome-cleanup-on-infected", + base::Value(is_powered_by_partner), GetScannerResultsAsDictionary(scanner_results)); } void ChromeCleanupHandler::OnCleaning( + bool is_powered_by_partner, const safe_browsing::ChromeCleanerScannerResults& scanner_results) { FireWebUIListener("chrome-cleanup-on-cleaning", + base::Value(is_powered_by_partner), GetScannerResultsAsDictionary(scanner_results)); }
diff --git a/chrome/browser/ui/webui/settings/chrome_cleanup_handler.h b/chrome/browser/ui/webui/settings/chrome_cleanup_handler.h index c0d2a83..199ca79 100644 --- a/chrome/browser/ui/webui/settings/chrome_cleanup_handler.h +++ b/chrome/browser/ui/webui/settings/chrome_cleanup_handler.h
@@ -35,9 +35,11 @@ safe_browsing::ChromeCleanerController::IdleReason idle_reason) override; void OnReporterRunning() override; void OnScanning() override; - void OnInfected(const safe_browsing::ChromeCleanerScannerResults& + void OnInfected(bool is_powered_by_partner, + const safe_browsing::ChromeCleanerScannerResults& reported_results) override; - void OnCleaning(const safe_browsing::ChromeCleanerScannerResults& + void OnCleaning(bool is_powered_by_partner, + const safe_browsing::ChromeCleanerScannerResults& reported_results) override; void OnRebootRequired() override; void OnLogsEnabledChanged(bool logs_enabled) override;
diff --git a/chrome/browser/ui/webui/settings/chromeos/change_picture_handler.cc b/chrome/browser/ui/webui/settings/chromeos/change_picture_handler.cc index 3601355..cca3cc6 100644 --- a/chrome/browser/ui/webui/settings/chromeos/change_picture_handler.cc +++ b/chrome/browser/ui/webui/settings/chromeos/change_picture_handler.cc
@@ -316,17 +316,18 @@ VLOG(1) << "Selected old user image"; } else if (image_type == "default") { int image_index = user_manager::User::USER_IMAGE_INVALID; - if (!default_user_image::IsDefaultImageUrl(image_url, &image_index)) - LOG(FATAL) << "Invalid image_url for default image type: " << image_url; + if (default_user_image::IsDefaultImageUrl(image_url, &image_index)) { + // One of the default user images. + user_image_manager->SaveUserDefaultImageIndex(image_index); - // One of the default user images. - user_image_manager->SaveUserDefaultImageIndex(image_index); - - UMA_HISTOGRAM_EXACT_LINEAR( - "UserImage.ChangeChoice", - default_user_image::GetDefaultImageHistogramValue(image_index), - default_user_image::kHistogramImagesCount); - VLOG(1) << "Selected default user image: " << image_index; + UMA_HISTOGRAM_EXACT_LINEAR( + "UserImage.ChangeChoice", + default_user_image::GetDefaultImageHistogramValue(image_index), + default_user_image::kHistogramImagesCount); + VLOG(1) << "Selected default user image: " << image_index; + } else { + LOG(WARNING) << "Invalid image_url for default image type: " << image_url; + } } else if (image_type == "camera") { // Camera image is selected. if (user_photo_.isNull()) {
diff --git a/chrome/browser/ui/webui/settings/md_settings_ui.cc b/chrome/browser/ui/webui/settings/md_settings_ui.cc index 41b7383..a152c22 100644 --- a/chrome/browser/ui/webui/settings/md_settings_ui.cc +++ b/chrome/browser/ui/webui/settings/md_settings_ui.cc
@@ -211,9 +211,6 @@ userInitiatedCleanupsEnabled = safe_browsing::UserInitiatedCleanupsEnabled(); #if defined(GOOGLE_CHROME_BUILD) - if (cleaner_controller->IsPoweredByPartner()) - html_source->AddBoolean("cleanupPoweredByPartner", true); - html_source->AddResourcePath("partner-logo.svg", IDR_CHROME_CLEANUP_PARTNER); #if BUILDFLAG(OPTIMIZE_WEBUI) exclude_from_gzip.push_back("partner-logo.svg"); @@ -228,15 +225,19 @@ #endif // defined(OS_WIN) + bool password_protection_available = false; #if defined(SAFE_BROWSING_DB_LOCAL) safe_browsing::ChromePasswordProtectionService* password_protection = safe_browsing::ChromePasswordProtectionService:: GetPasswordProtectionService(profile); + password_protection_available = !!password_protection; if (password_protection) { AddSettingsPageUIHandler( base::MakeUnique<ChangePasswordHandler>(profile, password_protection)); } #endif + html_source->AddBoolean("passwordProtectionAvailable", + password_protection_available); #if defined(OS_CHROMEOS) chromeos::settings::EasyUnlockSettingsHandler* easy_unlock_handler = @@ -358,14 +359,12 @@ } #if defined(OS_WIN) -void MdSettingsUI::UpdateCleanupDataSource(bool cleanupEnabled, - bool partnerPowered) { +void MdSettingsUI::UpdateCleanupDataSource(bool cleanupEnabled) { DCHECK(web_ui()); Profile* profile = Profile::FromWebUI(web_ui()); std::unique_ptr<base::DictionaryValue> update(new base::DictionaryValue); update->SetBoolean("chromeCleanupEnabled", cleanupEnabled); - update->SetBoolean("cleanupPoweredByPartner", partnerPowered); content::WebUIDataSource::Update(profile, chrome::kChromeUISettingsHost, std::move(update));
diff --git a/chrome/browser/ui/webui/settings/md_settings_ui.h b/chrome/browser/ui/webui/settings/md_settings_ui.h index 2d3fd4e..034c00d 100644 --- a/chrome/browser/ui/webui/settings/md_settings_ui.h +++ b/chrome/browser/ui/webui/settings/md_settings_ui.h
@@ -50,7 +50,7 @@ base::Time load_start_time_; #if defined(OS_WIN) - void UpdateCleanupDataSource(bool cleanupEnabled, bool partnerPowered); + void UpdateCleanupDataSource(bool cleanupEnabled); std::unique_ptr<safe_browsing::ChromeCleanerStateChangeObserver> cleanup_observer_; #endif
diff --git a/chrome/browser/ui/webui/snippets_internals_message_handler.cc b/chrome/browser/ui/webui/snippets_internals_message_handler.cc index 54bfd17..4dc7b2c 100644 --- a/chrome/browser/ui/webui/snippets_internals_message_handler.cc +++ b/chrome/browser/ui/webui/snippets_internals_message_handler.cc
@@ -433,7 +433,7 @@ 0); pref_service_->SetInteger(prefs::kContentSuggestionsNotificationsSentDay, 0); AndroidContentSuggestionsNotifier().HideAllNotifications( - ContentSuggestionsNotificationAction::CONTENT_SUGGESTIONS_HIDE_FRONTMOST); + ContentSuggestionsNotificationAction::HIDE_FRONTMOST); } void SnippetsInternalsMessageHandler::OnContextualSuggestionsFetched(
diff --git a/chrome/common/extensions/api/notifications.idl b/chrome/common/extensions/api/notifications.idl index 5ed7a7f..60a97dfc 100644 --- a/chrome/common/extensions/api/notifications.idl +++ b/chrome/common/extensions/api/notifications.idl
@@ -198,6 +198,8 @@ // The user clicked on a link for the app's notification settings. As of // Chrome 47, only ChromeOS has UI that dispatches this event. + // As of Chrome 65, that UI has been removed from ChromeOS, too. + [deprecated="Custom notification settings button is no longer supported."] static void onShowSettings(); }; };
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 8c6ea5ab..7a7b91b 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -3133,7 +3133,8 @@ ] if (!use_browser_spellchecker) { - sources += [ "../browser/spellchecker/spell_check_host_impl_unittest.cc" ] + sources += + [ "../browser/spellchecker/spell_check_host_chrome_impl_unittest.cc" ] } }
diff --git a/chrome/test/data/extensions/api_test/messaging/connect/test.js b/chrome/test/data/extensions/api_test/messaging/connect/test.js index 6956e82..604beef 100644 --- a/chrome/test/data/extensions/api_test/messaging/connect/test.js +++ b/chrome/test/data/extensions/api_test/messaging/connect/test.js
@@ -24,6 +24,24 @@ // Keep track of the tab that we're running tests in, for simplicity. var testTab = null; +function compareSenders(expected, actual) { + // The `tab` property on the sender is the full tabs.Tab definition of the + // tab that the message was sent from. This includes a *bunch* of extraneous + // data, like dimensions, loading status, etc, which can change over the + // course of the test. In order to help ensure determinism, only compare the + // properties we really care about. + if (expected.tab) { + chrome.test.assertEq(expected.tab.id, actual.tab.id); + chrome.test.assertEq(expected.tab.url, actual.tab.url); + } else { + chrome.test.assertFalse(!!actual.tab); + } + + chrome.test.assertEq(expected.frameId, actual.frameId); + chrome.test.assertEq(expected.url, actual.url); + chrome.test.assertEq(expected.id, actual.id); +} + chrome.test.getConfig(function(config) { chrome.test.runTests([ function setupTestTab() { @@ -68,12 +86,13 @@ // Tests that postMessage from the tab and its response works. function postMessageFromTab() { listenOnce(chrome.runtime.onConnect, function(port) { - chrome.test.assertEq({ + let expectedSender = { tab: testTab, frameId: 0, // Main frame url: testTab.url, - id: chrome.runtime.id - }, port.sender); + id: chrome.runtime.id, + }; + compareSenders(expectedSender, port.sender); listenOnce(port.onMessage, function(msg) { chrome.test.assertTrue(msg.testPostMessageFromTab); port.postMessage({success: true, portName: port.name}); @@ -94,12 +113,13 @@ var doneListening = listenForever( chrome.runtime.onMessage, function(request, sender, sendResponse) { - chrome.test.assertEq({ + let expectedSender = { tab: testTab, frameId: 0, // Main frame url: testTab.url, - id: chrome.runtime.id - }, sender); + id: chrome.runtime.id + }; + compareSenders(expectedSender, sender); if (request.step == 1) { // Step 1: Page should send another request for step 2. chrome.test.log("sendMessageFromTab: got step 1"); @@ -120,41 +140,40 @@ // Tests that a message from a child frame has a correct frameId. function sendMessageFromFrameInTab() { - var senders = []; + var actualSenders = []; var doneListening = listenForever( chrome.runtime.onMessage, function(request, sender, sendResponse) { - // The tab's load status could either be "loading" or "complete", - // depending on whether all frames have finished loading. Since we - // want this test to be deterministic, set status to "complete". - sender.tab.status = 'complete'; - // Child frames have a positive frameId. - senders.push(sender); + actualSenders.push(sender); // testSendMessageFromFrame() in page.js adds 2 frames. Wait for // messages from each. - if (senders.length == 2) { - chrome.webNavigation.getAllFrames({ - tabId: testTab.id - }, function(details) { - function sortByFrameId(a, b) { - return a.frameId < b.frameId ? 1 : -1; - } - var expectedSenders = details.filter(function(frame) { - return frame.frameId > 0; // Exclude main frame. - }).map(function(frame) { - return { - tab: testTab, - frameId: frame.frameId, - url: frame.url, - id: chrome.runtime.id - }; - }).sort(sortByFrameId); - senders.sort(sortByFrameId); - chrome.test.assertEq(expectedSenders, senders); - doneListening(); - }); - } + if (actualSenders.length < 2) + return; + + chrome.webNavigation.getAllFrames({ + tabId: testTab.id + }, function(details) { + function sortByFrameId(a, b) { + return a.frameId < b.frameId ? 1 : -1; + } + var expectedSenders = details.filter(function(frame) { + return frame.frameId > 0; // Exclude main frame. + }).map(function(frame) { + return { + tab: testTab, + frameId: frame.frameId, + url: frame.url, + id: chrome.runtime.id + }; + }).sort(sortByFrameId); + + actualSenders.sort(sortByFrameId); + + compareSenders(expectedSenders[0], actualSenders[0]); + compareSenders(expectedSenders[1], actualSenders[1]); + doneListening(); + }); } );
diff --git a/chrome/test/data/previews/noscript_test_with_no_transform_header.html b/chrome/test/data/previews/noscript_test_with_no_transform_header.html new file mode 100644 index 0000000..e7dc052 --- /dev/null +++ b/chrome/test/data/previews/noscript_test_with_no_transform_header.html
@@ -0,0 +1,14 @@ +<html> + <head> + <meta name="viewport" content="width=device-width" /> + <noscript> + <title>Page with Script Disabled</title> + <link rel="stylesheet" href="noscript_test.css"> + </noscript> + <script>document.title='Page with Script Enabled and Executed';</script> + </head> + <body> + <p>Test page for NoScript Previews.</p> + <script src="noscript_test.js"></script> + </body> +</html>
diff --git a/chrome/test/data/previews/noscript_test_with_no_transform_header.html.mock-http-headers b/chrome/test/data/previews/noscript_test_with_no_transform_header.html.mock-http-headers new file mode 100644 index 0000000..fd4507e5f --- /dev/null +++ b/chrome/test/data/previews/noscript_test_with_no_transform_header.html.mock-http-headers
@@ -0,0 +1,2 @@ +HTTP/1.1 200 OK +Cache-Control: no-transform
diff --git a/chrome/test/data/vr/e2e_test_files/html/test_presentation_locks_focus.html b/chrome/test/data/vr/e2e_test_files/html/test_presentation_locks_focus.html index 3d6a496d..651fa01 100644 --- a/chrome/test/data/vr/e2e_test_files/html/test_presentation_locks_focus.html +++ b/chrome/test/data/vr/e2e_test_files/html/test_presentation_locks_focus.html
@@ -15,12 +15,13 @@ <script> var t = async_test("Focus is locked to presentation"); var rafCount = 0; - window.onfocus = function() { + window.addEventListener("vrdisplaypresentchange", () => { onPresentingAnimationFrameCallback = null; setTimeout(function() { document.getElementById('externalframe').contentWindow.focus(); }, 1000); - }; + }, false); + window.onblur = function() { onPresentingAnimationFrameCallback = function() { if (rafCount == 3) {
diff --git a/chrome/test/data/webui/extensions/extension_toolbar_test.js b/chrome/test/data/webui/extensions/extension_toolbar_test.js index 9d941f3..37b4ba1 100644 --- a/chrome/test/data/webui/extensions/extension_toolbar_test.js +++ b/chrome/test/data/webui/extensions/extension_toolbar_test.js
@@ -30,6 +30,7 @@ var testVisible = extension_test_util.testVisible.bind(null, toolbar); testVisible('#dev-mode', true); + assertEquals(toolbar.$$('#dev-mode').disabled, false); testVisible('#load-unpacked', false); testVisible('#pack-extensions', false); testVisible('#update-now', false); @@ -38,9 +39,15 @@ Polymer.dom.flush(); testVisible('#dev-mode', true); + assertEquals(toolbar.$$('#dev-mode').disabled, false); testVisible('#load-unpacked', true); testVisible('#pack-extensions', true); testVisible('#update-now', true); + + // Test that the dev-mode toggle is disabled when a policy exists. + toolbar.set('devModeControlledByPolicy', true); + Polymer.dom.flush(); + assertEquals(toolbar.$$('#dev-mode').disabled, true); }); test(assert(TestNames.ClickHandlers), function() {
diff --git a/chrome/test/data/webui/md_bookmarks/list_test.js b/chrome/test/data/webui/md_bookmarks/list_test.js index c392e5e..f63d938 100644 --- a/chrome/test/data/webui/md_bookmarks/list_test.js +++ b/chrome/test/data/webui/md_bookmarks/list_test.js
@@ -161,3 +161,38 @@ assertDeepEquals('5', store.data.selection.anchor); }); }); + +suite('<bookmarks-list> command manager integration test', function() { + let app; + let store; + + setup(function() { + store = new bookmarks.TestStore({ + nodes: testTree(createFolder('1', [])), + selectedFolder: '1', + }); + store.replaceSingleton(); + store.setReducersEnabled(true); + + app = document.createElement('bookmarks-app'); + app.style.height = '100%'; + app.style.width = '100%'; + app.style.position = 'absolute'; + + replaceBody(app); + + Polymer.dom.flush(); + }); + + test('show context menu', () => { + const list = app.$$('bookmarks-list'); + list.fire('contextmenu', {clientX: 0, clientY: 0}); + + const commandManager = app.$$('bookmarks-command-manager'); + + assertEquals(MenuSource.LIST, commandManager.menuSource_); + assertDeepEquals( + [Command.ADD_BOOKMARK, Command.ADD_FOLDER], + commandManager.menuCommands_); + }); +});
diff --git a/chrome/test/data/webui/settings/chrome_cleanup_page_test.js b/chrome/test/data/webui/settings/chrome_cleanup_page_test.js index d0e2d40..a4377dd 100644 --- a/chrome/test/data/webui/settings/chrome_cleanup_page_test.js +++ b/chrome/test/data/webui/settings/chrome_cleanup_page_test.js
@@ -149,7 +149,9 @@ const scannerResults = {'files': files, 'registryKeys': registryKeys}; cr.webUIListenerCallback('chrome-cleanup-upload-permission-change', false); - cr.webUIListenerCallback('chrome-cleanup-on-infected', scannerResults); + cr.webUIListenerCallback( + 'chrome-cleanup-on-infected', true /* isPoweredByPartner */, + scannerResults); Polymer.dom.flush(); const showItemsButton = chromeCleanupPage.$$('#show-items-button'); @@ -183,7 +185,8 @@ .then(function(logsUploadEnabled) { assertFalse(logsUploadEnabled); cr.webUIListenerCallback( - 'chrome-cleanup-on-cleaning', defaultScannerResults); + 'chrome-cleanup-on-cleaning', true /* isPoweredByPartner */, + defaultScannerResults); Polymer.dom.flush(); const spinner = chromeCleanupPage.$$('#waiting-spinner'); @@ -207,7 +210,9 @@ */ function cleanupFailure(userInitiatedCleanupsEnabled) { cr.webUIListenerCallback('chrome-cleanup-upload-permission-change', false); - cr.webUIListenerCallback('chrome-cleanup-on-cleaning', defaultScannerResults); + cr.webUIListenerCallback( + 'chrome-cleanup-on-cleaning', true /* isPoweredByPartner */, + defaultScannerResults); cr.webUIListenerCallback( 'chrome-cleanup-on-idle', settings.ChromeCleanupIdleReason.CLEANING_FAILED); @@ -228,7 +233,9 @@ * cleanup feature is enabled. */ function cleanupSuccess(userInitiatedCleanupsEnabled) { - cr.webUIListenerCallback('chrome-cleanup-on-cleaning', defaultScannerResults); + cr.webUIListenerCallback( + 'chrome-cleanup-on-cleaning', true /* isPoweredByPartner */, + defaultScannerResults); cr.webUIListenerCallback( 'chrome-cleanup-on-idle', settings.ChromeCleanupIdleReason.CLEANING_SUCCEEDED); @@ -251,7 +258,8 @@ function testLogsUploading(testingScanOffered) { if (testingScanOffered) { cr.webUIListenerCallback( - 'chrome-cleanup-on-infected', defaultScannerResults); + 'chrome-cleanup-on-infected', true /* isPoweredByPartner */, + defaultScannerResults); } else { cr.webUIListenerCallback( 'chrome-cleanup-on-idle', settings.ChromeCleanupIdleReason.INITIAL); @@ -276,6 +284,24 @@ }); } +/** + * @param {boolean} onInfected Whether to test the case where current state is + * INFECTED, as opposed to CLEANING. + * @param {boolean} isPoweredByPartner Whether to test the case when scan + * results are provided by a partner. + */ +function testPartnerLogoShown(onInfected, isPoweredByPartner) { + cr.webUIListenerCallback( + onInfected ? 'chrome-cleanup-on-infected' : 'chrome-cleanup-on-cleaning', + isPoweredByPartner, defaultScannerResults); + Polymer.dom.flush(); + + const poweredByContainerControl = + chromeCleanupPage.$$('#powered-by-container'); + assertTrue(!!poweredByContainerControl); + assertNotEquals(poweredByContainerControl.hidden, isPoweredByPartner); +} + suite('ChromeCleanupHandler_UserInitiatedCleanupsDisabled', function() { setup(function() { initParametrizedTest(false /* userInitiatedCleanupsEnabled */); @@ -367,6 +393,26 @@ test('logsUploadingOnInfected', function() { return testLogsUploading(false /* testingScanOffered */); }); + + test('onInfectedResultsProvidedByPartner_True', function() { + return testPartnerLogoShown( + true /* onInfected */, true /* isPoweredByPartner */); + }); + + test('onInfectedResultsProvidedByPartner_False', function() { + return testPartnerLogoShown( + true /* onInfected */, false /* isPoweredByPartner */); + }); + + test('onCleaningResultsProvidedByPartner_True', function() { + return testPartnerLogoShown( + false /* onInfected */, true /* isPoweredByPartner */); + }); + + test('onCleaningResultsProvidedByPartner_False', function() { + return testPartnerLogoShown( + false /* onInfected */, false /* isPoweredByPartner */); + }); }); suite('ChromeCleanupHandler_UserInitiatedCleanupsEnabled', function() { @@ -594,4 +640,24 @@ test('logsUploadingOnInfected', function() { return testLogsUploading(false /* testingScanOffered */); }); + + test('onInfectedResultsProvidedByPartner_True', function() { + return testPartnerLogoShown( + true /* onInfected */, true /* isPoweredByPartner */); + }); + + test('onInfectedResultsProvidedByPartner_False', function() { + return testPartnerLogoShown( + true /* onInfected */, false /* isPoweredByPartner */); + }); + + test('onCleaningResultsProvidedByPartner_True', function() { + return testPartnerLogoShown( + false /* onInfected */, true /* isPoweredByPartner */); + }); + + test('onCleaningResultsProvidedByPartner_False', function() { + return testPartnerLogoShown( + false /* onInfected */, false /* isPoweredByPartner */); + }); });
diff --git a/chrome_elf/chrome_elf_x64.def b/chrome_elf/chrome_elf_x64.def index 8ae8723..690cfae 100644 --- a/chrome_elf/chrome_elf_x64.def +++ b/chrome_elf/chrome_elf_x64.def
@@ -8,24 +8,16 @@ ; chrome_elf_x86.def ; From components/crash/content/app/crash_export_stubs.cc - ClearCrashKeyValueEx_ExportThunk - ClearCrashKeyValue_ExportThunk CrashForException_ExportThunk GetCrashReports_ExportThunk InjectDumpForHungInput_ExportThunk RequestSingleCrashUpload_ExportThunk - SetCrashKeyValueEx_ExportThunk - SetCrashKeyValue_ExportThunk SetUploadConsent_ExportThunk ; X64-only exports RegisterNonABICompliantCodeRange_ExportThunk UnregisterNonABICompliantCodeRange_ExportThunk - ; This export is used by SyzyASAN, do not rename or remove without talking - ; to syzygy-team@chromium.org first. - SetCrashKeyValue = SetCrashKeyValue_ExportThunk - ; From chrome_elf/crash_helper.cc SetMetricsClientId
diff --git a/chrome_elf/chrome_elf_x86.def b/chrome_elf/chrome_elf_x86.def index a4fae06..7a59f7e0 100644 --- a/chrome_elf/chrome_elf_x86.def +++ b/chrome_elf/chrome_elf_x86.def
@@ -8,20 +8,12 @@ ; chrome_elf_x86.def ; From components/crash/content/app/crash_export_stubs.cc - ClearCrashKeyValueEx_ExportThunk - ClearCrashKeyValue_ExportThunk CrashForException_ExportThunk GetCrashReports_ExportThunk InjectDumpForHungInput_ExportThunk RequestSingleCrashUpload_ExportThunk - SetCrashKeyValueEx_ExportThunk - SetCrashKeyValue_ExportThunk SetUploadConsent_ExportThunk - ; This export is used by SyzyASAN, do not rename or remove without talking - ; to syzygy-team@chromium.org first. - SetCrashKeyValue = SetCrashKeyValue_ExportThunk - ; From chrome_elf/crash_helper.cc SetMetricsClientId
diff --git a/chromecast/browser/url_request_context_factory.cc b/chromecast/browser/url_request_context_factory.cc index 91e76b0..7e6c0f4 100644 --- a/chromecast/browser/url_request_context_factory.cc +++ b/chromecast/browser/url_request_context_factory.cc
@@ -320,6 +320,10 @@ session_params->enable_quic = base::FeatureList::IsEnabled(kEnableQuic); LOG(INFO) << "Set HttpNetworkSessionParams.enable_quic = " << session_params->enable_quic; + + // Do not close idle sockets on memory pressure, otherwise it will open too + // much connections to the server. + session_params->disable_idle_sockets_close_on_memory_pressure = true; } net::URLRequestContext* URLRequestContextFactory::CreateSystemRequestContext() {
diff --git a/chromecast/public/avsettings.h b/chromecast/public/avsettings.h index a9cffbd..4cf6887 100644 --- a/chromecast/public/avsettings.h +++ b/chromecast/public/avsettings.h
@@ -37,6 +37,9 @@ DTS_HD = 1 << 2, EAC3 = 1 << 3, LPCM = 1 << 4, + + // All known audio codecs. + ALL = AC3 | DTS | DTS_HD | EAC3 | LPCM }; // Defines the type of audio volume control of the device.
diff --git a/components/arc/common/ime.mojom b/components/arc/common/ime.mojom index 1dd5917..db7517c0 100644 --- a/components/arc/common/ime.mojom +++ b/components/arc/common/ime.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: 7 +// Next MinVersion: 8 module arc.mojom; @@ -81,11 +81,13 @@ // Commits the specified text and clears the composition. InsertText@3(string text); - // Informs the virtual keyboard bounds on screen is changing. - // |new_bounds| Represents a ChromeOS virtual keyboard bounds in ChromeOS - // screen coordinate, physical pixel as a unit. - // When all members are zero value, virtual keyboard is being hidden. - [MinVersion=3] OnKeyboardBoundsChanging@4(Rect new_bounds); + // Informs the virtual keyboard availability and bounds on screen is changing. + // |is_available| whether a virtual keyboard is visible or not. + // |new_bounds| Represents a virtual keyboard bounds covering below windows in + // screen coordinate. physical pixel as a unit. + [MinVersion=3] OnKeyboardAppearanceChanging@4( + Rect new_bounds, + [MinVersion=7] bool is_available); // Deletes current selection plus the specified number of char16 values // before and after selection or caret.
diff --git a/components/arc/ime/arc_ime_bridge.h b/components/arc/ime/arc_ime_bridge.h index cb8f220..1ed1008 100644 --- a/components/arc/ime/arc_ime_bridge.h +++ b/components/arc/ime/arc_ime_bridge.h
@@ -45,8 +45,9 @@ const ui::CompositionText& composition) = 0; virtual void SendConfirmCompositionText() = 0; virtual void SendInsertText(const base::string16& text) = 0; - virtual void SendOnKeyboardBoundsChanging(const gfx::Rect& new_bounds) = 0; virtual void SendExtendSelectionAndDelete(size_t before, size_t after) = 0; + virtual void SendOnKeyboardAppearanceChanging(const gfx::Rect& new_bounds, + bool is_available) = 0; protected: ArcImeBridge() {}
diff --git a/components/arc/ime/arc_ime_bridge_impl.cc b/components/arc/ime/arc_ime_bridge_impl.cc index 6e4840f..ee10026 100644 --- a/components/arc/ime/arc_ime_bridge_impl.cc +++ b/components/arc/ime/arc_ime_bridge_impl.cc
@@ -113,16 +113,6 @@ ime_instance->InsertText(base::UTF16ToUTF8(text)); } -void ArcImeBridgeImpl::SendOnKeyboardBoundsChanging( - const gfx::Rect& new_bounds) { - auto* ime_instance = ARC_GET_INSTANCE_FOR_METHOD(bridge_service_->ime(), - OnKeyboardBoundsChanging); - if (!ime_instance) - return; - - ime_instance->OnKeyboardBoundsChanging(new_bounds); -} - void ArcImeBridgeImpl::SendExtendSelectionAndDelete( size_t before, size_t after) { auto* ime_instance = ARC_GET_INSTANCE_FOR_METHOD(bridge_service_->ime(), @@ -133,6 +123,17 @@ ime_instance->ExtendSelectionAndDelete(before, after); } +void ArcImeBridgeImpl::SendOnKeyboardAppearanceChanging( + const gfx::Rect& new_bounds, + bool is_available) { + auto* ime_instance = ARC_GET_INSTANCE_FOR_METHOD( + bridge_service_->ime(), OnKeyboardAppearanceChanging); + if (!ime_instance) + return; + + ime_instance->OnKeyboardAppearanceChanging(new_bounds, is_available); +} + void ArcImeBridgeImpl::OnTextInputTypeChanged(mojom::TextInputType type) { delegate_->OnTextInputTypeChanged(ConvertTextInputType(type)); }
diff --git a/components/arc/ime/arc_ime_bridge_impl.h b/components/arc/ime/arc_ime_bridge_impl.h index dbac40f..669c130 100644 --- a/components/arc/ime/arc_ime_bridge_impl.h +++ b/components/arc/ime/arc_ime_bridge_impl.h
@@ -33,8 +33,9 @@ void SendSetCompositionText(const ui::CompositionText& composition) override; void SendConfirmCompositionText() override; void SendInsertText(const base::string16& text) override; - void SendOnKeyboardBoundsChanging(const gfx::Rect& new_bounds) override; void SendExtendSelectionAndDelete(size_t before, size_t after) override; + void SendOnKeyboardAppearanceChanging(const gfx::Rect& new_bounds, + bool is_available) override; // mojom::ImeHost overrides: void OnTextInputTypeChanged(mojom::TextInputType type) override;
diff --git a/components/arc/ime/arc_ime_service.cc b/components/arc/ime/arc_ime_service.cc index 51935c3..603b66f1 100644 --- a/components/arc/ime/arc_ime_service.cc +++ b/components/arc/ime/arc_ime_service.cc
@@ -289,9 +289,8 @@ gfx::Rect bounds_in_px = gfx::ScaleToEnclosingRect( new_bounds, window->layer()->device_scale_factor()); - // TODO(b/70251261): In addition to the bounds, the state.is_available value - // needs to be conveyed to the ime bridge as well. - ime_bridge_->SendOnKeyboardBoundsChanging(bounds_in_px); + ime_bridge_->SendOnKeyboardAppearanceChanging(bounds_in_px, + state.is_available); } ////////////////////////////////////////////////////////////////////////////////
diff --git a/components/arc/ime/arc_ime_service_unittest.cc b/components/arc/ime/arc_ime_service_unittest.cc index 4535311..34e759f5b 100644 --- a/components/arc/ime/arc_ime_service_unittest.cc +++ b/components/arc/ime/arc_ime_service_unittest.cc
@@ -35,10 +35,11 @@ void SendInsertText(const base::string16& text) override { count_send_insert_text_++; } - void SendOnKeyboardBoundsChanging(const gfx::Rect& new_bounds) override { - } void SendExtendSelectionAndDelete(size_t before, size_t after) override { } + void SendOnKeyboardAppearanceChanging(const gfx::Rect& new_bounds, + bool is_available) override { + } int count_send_insert_text() const { return count_send_insert_text_; }
diff --git a/components/crash/content/app/crash_export_stubs.cc b/components/crash/content/app/crash_export_stubs.cc index d7e2178..462b5d8 100644 --- a/components/crash/content/app/crash_export_stubs.cc +++ b/components/crash/content/app/crash_export_stubs.cc
@@ -27,17 +27,6 @@ void SetUploadConsent_ExportThunk(bool consent) {} -void SetCrashKeyValue_ExportThunk(const wchar_t* key, const wchar_t* value) {} - -void ClearCrashKeyValue_ExportThunk(const wchar_t* key) {} - -void SetCrashKeyValueEx_ExportThunk(const char* key, - size_t key_len, - const char* value, - size_t value_len) {} - -void ClearCrashKeyValueEx_ExportThunk(const char* key, size_t key_len) {} - HANDLE InjectDumpForHungInput_ExportThunk(HANDLE process) { return nullptr; }
diff --git a/components/crash/content/app/crash_export_thunks.cc b/components/crash/content/app/crash_export_thunks.cc index 8e8a85b..ea2ffda 100644 --- a/components/crash/content/app/crash_export_thunks.cc +++ b/components/crash/content/app/crash_export_thunks.cc
@@ -53,31 +53,6 @@ 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 SetCrashKeyValue_ExportThunk(const wchar_t* key, const wchar_t* value) { - crash_reporter::SetCrashKeyValue(base::UTF16ToUTF8(key), - base::UTF16ToUTF8(value)); -} - -void ClearCrashKeyValue_ExportThunk(const wchar_t* key) { - crash_reporter::ClearCrashKey(base::UTF16ToUTF8(key)); -} - -void SetCrashKeyValueEx_ExportThunk(const char* key, - size_t key_len, - const char* value, - size_t value_len) { - crash_reporter::SetCrashKeyValue(base::StringPiece(key, key_len), - base::StringPiece(value, value_len)); -} - -void ClearCrashKeyValueEx_ExportThunk(const char* key, size_t key_len) { - crash_reporter::ClearCrashKey(base::StringPiece(key, key_len)); -} - HANDLE InjectDumpForHungInput_ExportThunk(HANDLE process) { return CreateRemoteThread( process, nullptr, 0,
diff --git a/components/crash/content/app/crash_export_thunks.h b/components/crash/content/app/crash_export_thunks.h index c2115e9..43d0a4e 100644 --- a/components/crash/content/app/crash_export_thunks.h +++ b/components/crash/content/app/crash_export_thunks.h
@@ -50,21 +50,6 @@ // not enforced to avoid blocking startup code on synchronizing them. void SetUploadConsent_ExportThunk(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 SetCrashKeyValue_ExportThunk(const wchar_t* key, const wchar_t* value); - -void ClearCrashKeyValue_ExportThunk(const wchar_t* key); - -void SetCrashKeyValueEx_ExportThunk(const char* key, - size_t key_len, - const char* value, - size_t value_len); - -void ClearCrashKeyValueEx_ExportThunk(const char* key, size_t key_len); - // Injects a thread into a remote process to dump state when there is no crash. // |process| that represents serialized crash keys sent from the browser. // This method is used solely to classify hung input.
diff --git a/components/crash/content/app/crashpad.cc b/components/crash/content/app/crashpad.cc index c2e98eaa..dde11eab 100644 --- a/components/crash/content/app/crashpad.cc +++ b/components/crash/content/app/crashpad.cc
@@ -32,7 +32,6 @@ #include "third_party/crashpad/crashpad/client/crashpad_client.h" #include "third_party/crashpad/crashpad/client/crashpad_info.h" #include "third_party/crashpad/crashpad/client/settings.h" -#include "third_party/crashpad/crashpad/client/simple_string_dictionary.h" #include "third_party/crashpad/crashpad/client/simulate_crash.h" #if defined(OS_POSIX) @@ -47,7 +46,6 @@ namespace { -crashpad::SimpleStringDictionary* g_simple_string_dictionary; crashpad::CrashReportDatabase* g_database; bool LogMessageHandler(int severity, @@ -81,7 +79,8 @@ CHECK_LE(message_start, string.size()); std::string message = base::StringPrintf("%s:%d: %s", file, line, string.c_str() + message_start); - SetCrashKeyValue("LOG_FATAL", message); + static crashpad::StringAnnotation<512> crash_key("LOG_FATAL"); + crash_key.Set(message); // Rather than including the code to force the crash here, allow the caller to // do it. @@ -120,9 +119,6 @@ base::FilePath database_path = internal::PlatformCrashpadInitialization( initial_client, browser_process, embedded_handler, user_data_dir); - crashpad::CrashpadInfo* crashpad_info = - crashpad::CrashpadInfo::GetCrashpadInfo(); - #if defined(OS_MACOSX) #if defined(NDEBUG) const bool is_debug_build = false; @@ -138,26 +134,22 @@ // browser process, because the system's crash reporter can take a very long // time to chew on symbols. if (!browser_process || is_debug_build) { - crashpad_info->set_system_crash_reporter_forwarding( - crashpad::TriState::kDisabled); + crashpad::CrashpadInfo::GetCrashpadInfo() + ->set_system_crash_reporter_forwarding(crashpad::TriState::kDisabled); } #endif // OS_MACOSX - g_simple_string_dictionary = new crashpad::SimpleStringDictionary(); - crashpad_info->set_simple_annotations(g_simple_string_dictionary); - crashpad::AnnotationList::Register(); - // TODO(rsesek): Remove this test annotation. - static crashpad::StringAnnotation<8> test_annotation("annotation-v2-test"); - test_annotation.Set("it works"); + static crashpad::StringAnnotation<24> ptype_key("ptype"); + ptype_key.Set(browser_process ? base::StringPiece("browser") + : base::StringPiece(process_type)); - SetCrashKeyValue("ptype", browser_process ? base::StringPiece("browser") - : base::StringPiece(process_type)); + static crashpad::StringAnnotation<12> pid_key("pid"); #if defined(OS_POSIX) - SetCrashKeyValue("pid", base::IntToString(getpid())); + pid_key.Set(base::IntToString(getpid())); #elif defined(OS_WIN) - SetCrashKeyValue("pid", base::IntToString(::GetCurrentProcessId())); + pid_key.Set(base::IntToString(::GetCurrentProcessId())); #endif logging::SetLogMessageHandler(LogMessageHandler); @@ -189,15 +181,6 @@ } // namespace -void SetCrashKeyValue(const base::StringPiece& key, - const base::StringPiece& value) { - g_simple_string_dictionary->SetKeyValue(key, value); -} - -void ClearCrashKey(const base::StringPiece& key) { - g_simple_string_dictionary->RemoveKey(key); -} - void InitializeCrashpad(bool initial_client, const std::string& process_type) { InitializeCrashpadImpl(initial_client, process_type, std::string(), false); }
diff --git a/components/crash/content/app/crashpad.h b/components/crash/content/app/crashpad.h index a3d6bf74..b77e1cc8 100644 --- a/components/crash/content/app/crashpad.h +++ b/components/crash/content/app/crashpad.h
@@ -120,13 +120,6 @@ // 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_mac.mm b/components/crash/content/app/crashpad_mac.mm index 485c2b4..6508c2a0 100644 --- a/components/crash/content/app/crashpad_mac.mm +++ b/components/crash/content/app/crashpad_mac.mm
@@ -25,7 +25,6 @@ #include "third_party/crashpad/crashpad/client/crashpad_client.h" #include "third_party/crashpad/crashpad/client/crashpad_info.h" #include "third_party/crashpad/crashpad/client/settings.h" -#include "third_party/crashpad/crashpad/client/simple_string_dictionary.h" #include "third_party/crashpad/crashpad/client/simulate_crash.h" namespace crash_reporter {
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_data_use_observer.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_data_use_observer.cc index 97a821e..a8a3ff74 100644 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_data_use_observer.cc +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_data_use_observer.cc
@@ -156,7 +156,7 @@ data_use->GetUserData(kDataUsePreviewsUserDataKey)); if (previews_user_data) { // Report estimated data savings for NOSCRIPT if applicable. - if (previews_user_data->GetCommittedPreviewsType() == + if (previews_user_data->committed_previews_type() == previews::PreviewsType::NOSCRIPT) { int inflated_bytes = (data_use->total_bytes_received() *
diff --git a/components/download/internal/in_memory_download.cc b/components/download/internal/in_memory_download.cc index d1d0e55..b1f5ed4 100644 --- a/components/download/internal/in_memory_download.cc +++ b/components/download/internal/in_memory_download.cc
@@ -135,7 +135,7 @@ // TODO(xingliu): Use response writer to avoid one extra copies. And destroy // |url_fetcher_| at the correct time. std::unique_ptr<std::string> data = std::make_unique<std::string>(); - DCHECK(url_fetcher_->GetResponseAsString(data.get())); + url_fetcher_->GetResponseAsString(data.get()); auto callback = base::BindOnce(&InMemoryDownload::OnSaveBlobDone, weak_ptr_factory_.GetWeakPtr());
diff --git a/components/metrics/metrics_service_unittest.cc b/components/metrics/metrics_service_unittest.cc index d8ce062..fb6f3b3c 100644 --- a/components/metrics/metrics_service_unittest.cc +++ b/components/metrics/metrics_service_unittest.cc
@@ -126,8 +126,8 @@ void CheckForNonStabilityHistograms( const ChromeUserMetricsExtension& uma_log) { const int kStabilityFlags = base::HistogramBase::kUmaStabilityHistogramFlag; - base::StatisticsRecorder::Histograms histograms; - base::StatisticsRecorder::GetHistograms(&histograms); + const base::StatisticsRecorder::Histograms histograms = + base::StatisticsRecorder::GetHistograms(); for (int i = 0; i < uma_log.histogram_event_size(); ++i) { const uint64_t hash = uma_log.histogram_event(i).name_hash();
diff --git a/components/network_session_configurator/browser/network_session_configurator.cc b/components/network_session_configurator/browser/network_session_configurator.cc index dd2034b..4b43a465 100644 --- a/components/network_session_configurator/browser/network_session_configurator.cc +++ b/components/network_session_configurator/browser/network_session_configurator.cc
@@ -239,6 +239,14 @@ GetVariationParam(quic_trial_params, "estimate_initial_rtt"), "true"); } +bool ShouldQuicHeadersIncludeH2StreamDependencies( + const VariationParameters& quic_trial_params) { + return base::LowerCaseEqualsASCII( + GetVariationParam(quic_trial_params, + "headers_include_h2_stream_dependency"), + "true"); +} + bool ShouldQuicConnectUsingDefaultNetwork( const VariationParameters& quic_trial_params) { return base::LowerCaseEqualsASCII( @@ -393,6 +401,8 @@ ShouldQuicRaceCertVerification(quic_trial_params); params->quic_estimate_initial_rtt = ShouldQuicEstimateInitialRtt(quic_trial_params); + params->quic_headers_include_h2_stream_dependency = + ShouldQuicHeadersIncludeH2StreamDependencies(quic_trial_params); params->quic_connect_using_default_network = ShouldQuicConnectUsingDefaultNetwork(quic_trial_params); params->quic_migrate_sessions_on_network_change =
diff --git a/components/network_session_configurator/browser/network_session_configurator_unittest.cc b/components/network_session_configurator/browser/network_session_configurator_unittest.cc index 372b112d..b8d7dc77 100644 --- a/components/network_session_configurator/browser/network_session_configurator_unittest.cc +++ b/components/network_session_configurator/browser/network_session_configurator_unittest.cc
@@ -763,4 +763,15 @@ #endif } +TEST_F(NetworkSessionConfiguratorTest, QuicHeadersIncludeH2StreamDependency) { + std::map<std::string, std::string> field_trial_params; + field_trial_params["headers_include_h2_stream_dependency"] = "true"; + variations::AssociateVariationParams("QUIC", "Enabled", field_trial_params); + base::FieldTrialList::CreateFieldTrial("QUIC", "Enabled"); + + ParseFieldTrials(); + + EXPECT_TRUE(params_.quic_headers_include_h2_stream_dependency); +} + } // namespace network_session_configurator
diff --git a/components/offline_pages/core/BUILD.gn b/components/offline_pages/core/BUILD.gn index 5bdb2d8..c023de7 100644 --- a/components/offline_pages/core/BUILD.gn +++ b/components/offline_pages/core/BUILD.gn
@@ -21,6 +21,8 @@ "file_existence_checker.h", "model/add_page_task.cc", "model/add_page_task.h", + "model/add_page_to_download_manager_task.cc", + "model/add_page_to_download_manager_task.h", "model/clear_digest_task.cc", "model/clear_digest_task.h", "model/clear_legacy_temporary_pages_task.cc", @@ -76,6 +78,7 @@ "offline_store_utils.h", "snapshot_controller.cc", "snapshot_controller.h", + "system_download_manager.h", "task.cc", "task.h", "task_queue.cc", @@ -147,6 +150,7 @@ "client_policy_controller_unittest.cc", "file_existence_checker_unittest.cc", "model/add_page_task_unittest.cc", + "model/add_page_to_download_manager_task_unittest.cc", "model/clear_digest_task_unittest.cc", "model/clear_legacy_temporary_pages_task_unittest.cc", "model/clear_storage_task_unittest.cc", @@ -168,6 +172,8 @@ "offline_page_storage_manager_unittest.cc", "offline_pages_ukm_reporter_unittest.cc", "snapshot_controller_unittest.cc", + "system_download_manager_stub.cc", + "system_download_manager_stub.h", "task_queue_unittest.cc", "task_unittest.cc", ]
diff --git a/components/offline_pages/core/model/add_page_to_download_manager_task.cc b/components/offline_pages/core/model/add_page_to_download_manager_task.cc new file mode 100644 index 0000000..462763aa --- /dev/null +++ b/components/offline_pages/core/model/add_page_to_download_manager_task.cc
@@ -0,0 +1,88 @@ +// Copyright 2018 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/offline_pages/core/model/add_page_to_download_manager_task.h" + +#include "base/bind.h" +#include "components/offline_pages/core/offline_page_metadata_store_sql.h" +#include "components/offline_pages/core/system_download_manager.h" +#include "sql/connection.h" +#include "sql/statement.h" + +#define OFFLINE_PAGES_TABLE_NAME "offlinepages_v1" + +namespace offline_pages { + +namespace { + +bool SetDownloadIdSync(int64_t offline_id, + int64_t download_id, + sql::Connection* db) { + if (!db) + return false; + + const char kSql[] = "UPDATE OR IGNORE " OFFLINE_PAGES_TABLE_NAME + " SET system_download_id = ?" + " WHERE offline_id = ?"; + sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql)); + statement.BindInt64(0, download_id); + statement.BindInt64(1, offline_id); + return statement.Run(); +} + +} // namespace + +AddPageToDownloadManagerTask::AddPageToDownloadManagerTask( + OfflinePageMetadataStoreSQL* store, + SystemDownloadManager* download_manager, + int64_t offline_id, + const std::string& title, + const std::string& description, + const std::string& path, + long length, + const std::string& uri, + const std::string& referer) + : store_(store), + title_(title), + description_(description), + path_(path), + uri_(uri), + referer_(referer), + offline_id_(offline_id), + length_(length), + download_manager_(download_manager), + weak_ptr_factory_(this) {} + +AddPageToDownloadManagerTask::~AddPageToDownloadManagerTask() {} + +void AddPageToDownloadManagerTask::Run() { + // Check to see if we have a system download manager. + if (!download_manager_->IsDownloadManagerInstalled()) { + OnAddIdDone(false); + return; + } + + // Tell the download manager about our file, get back an id. + int64_t download_id = download_manager_->AddCompletedDownload( + title_, description_, path_, length_, uri_, referer_); + + if (download_id == 0) { + OnAddIdDone(false); + return; + } + + // Add the download ID to the OfflinePageModel database. + store_->Execute(base::BindOnce(&SetDownloadIdSync, offline_id_, download_id), + base::BindOnce(&AddPageToDownloadManagerTask::OnAddIdDone, + weak_ptr_factory_.GetWeakPtr())); +} + +void AddPageToDownloadManagerTask::OnAddIdDone(bool result) { + // There is no callback to the code that added the task, so we are done now. + // SQL errors are ignored because there isn't much that the calling code can + // do to fix the situation if we can't write to the DB. + TaskComplete(); +} + +} // namespace offline_pages
diff --git a/components/offline_pages/core/model/add_page_to_download_manager_task.h b/components/offline_pages/core/model/add_page_to_download_manager_task.h new file mode 100644 index 0000000..3295979 --- /dev/null +++ b/components/offline_pages/core/model/add_page_to_download_manager_task.h
@@ -0,0 +1,59 @@ +// Copyright 2018 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_OFFLINE_PAGES_CORE_BACKGROUND_ADD_PAGE_TO_DOWNLOAD_MANAGER_TASK_H_ +#define COMPONENTS_OFFLINE_PAGES_CORE_BACKGROUND_ADD_PAGE_TO_DOWNLOAD_MANAGER_TASK_H_ + +#include <stdint.h> + +#include <memory> +#include <string> +#include <vector> + +#include "base/memory/weak_ptr.h" +#include "components/offline_pages/core/task.h" + +namespace offline_pages { + +class OfflinePageMetadataStoreSQL; +class SystemDownloadManager; + +class AddPageToDownloadManagerTask : public Task { + public: + AddPageToDownloadManagerTask(OfflinePageMetadataStoreSQL* store, + SystemDownloadManager* download_manager, + int64_t offline_id, + const std::string& title, + const std::string& description, + const std::string& path, + long length, + const std::string& uri, + const std::string& referer); + ~AddPageToDownloadManagerTask() override; + + // Task implementation + void Run() override; + + private: + // Internal callback + void OnAddIdDone(bool result); + + // Unowned pointer to the Metadata SQL store. + OfflinePageMetadataStoreSQL* store_; + const std::string title_; + const std::string description_; + const std::string path_; + const std::string uri_; + const std::string referer_; + int64_t offline_id_; + long length_; + // Unowned pointer to a download manager for this system, if any. + SystemDownloadManager* download_manager_; + + base::WeakPtrFactory<AddPageToDownloadManagerTask> weak_ptr_factory_; +}; + +} // namespace offline_pages + +#endif // COMPONENTS_OFFLINE_PAGES_CORE_BACKGROUND_ADD_PAGE_TO_DOWNLOAD_MANAGER_TASK_H_
diff --git a/components/offline_pages/core/model/add_page_to_download_manager_task_unittest.cc b/components/offline_pages/core/model/add_page_to_download_manager_task_unittest.cc new file mode 100644 index 0000000..5d9ed71 --- /dev/null +++ b/components/offline_pages/core/model/add_page_to_download_manager_task_unittest.cc
@@ -0,0 +1,177 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/offline_pages/core/model/add_page_to_download_manager_task.h" + +#include "base/memory/ptr_util.h" +#include "base/test/test_mock_time_task_runner.h" +#include "base/threading/thread_task_runner_handle.h" +#include "components/offline_pages/core/model/offline_page_item_generator.h" +#include "components/offline_pages/core/offline_page_metadata_store_test_util.h" +#include "components/offline_pages/core/system_download_manager_stub.h" +#include "components/offline_pages/core/task.h" +#include "components/offline_pages/core/test_task_runner.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace { + +const char kTitle[] = "testPageTitle"; +const char kDescription[] = "test page description"; +const char kPath[] = "/sdcard/Download/page.mhtml"; +const char kUri[] = "https://www.google.com"; +const char kReferer[] = "https://google.com"; +const long kTestLength = 1024; +const long kTestDownloadId = 42; +const long kDefaultDownloadId = 1; +} // namespace + +namespace offline_pages { + +class AddPageToDownloadManagerTaskTest : public testing::Test { + public: + AddPageToDownloadManagerTaskTest(); + ~AddPageToDownloadManagerTaskTest() override; + + void SetUp() override; + void TearDown() override; + + OfflinePageMetadataStoreSQL* store() { return store_test_util_.store(); } + + OfflinePageMetadataStoreTestUtil* store_test_util() { + return &store_test_util_; + } + + OfflinePageItemGenerator* generator() { return &generator_; } + + scoped_refptr<base::TestMockTimeTaskRunner> task_runner() { + return task_runner_.get(); + } + + SystemDownloadManagerStub* download_manager() { + return download_manager_.get(); + } + + void AddTaskDone(Task* task) { add_task_done_ = true; } + + bool add_task_done() { return add_task_done_; } + + void PumpLoop(); + + void SetTaskCompletionCallbackForTesting(Task* task); + + private: + scoped_refptr<base::TestMockTimeTaskRunner> task_runner_; + base::ThreadTaskRunnerHandle task_runner_handle_; + OfflinePageMetadataStoreTestUtil store_test_util_; + OfflinePageItemGenerator generator_; + std::unique_ptr<SystemDownloadManagerStub> download_manager_; + bool add_task_done_; +}; + +AddPageToDownloadManagerTaskTest::AddPageToDownloadManagerTaskTest() + : task_runner_(new base::TestMockTimeTaskRunner()), + task_runner_handle_(task_runner_), + store_test_util_(task_runner_), + download_manager_(new SystemDownloadManagerStub(kTestDownloadId, true)), + add_task_done_(false) {} + +AddPageToDownloadManagerTaskTest::~AddPageToDownloadManagerTaskTest() {} + +void AddPageToDownloadManagerTaskTest::SetUp() { + store_test_util_.BuildStoreInMemory(); +} + +void AddPageToDownloadManagerTaskTest::TearDown() { + store_test_util_.DeleteStore(); +} + +void AddPageToDownloadManagerTaskTest::PumpLoop() { + task_runner_->RunUntilIdle(); +} + +void AddPageToDownloadManagerTaskTest::SetTaskCompletionCallbackForTesting( + Task* task) { + task->SetTaskCompletionCallbackForTesting( + task_runner_.get(), + base::BindRepeating(&AddPageToDownloadManagerTaskTest::AddTaskDone, + base::Unretained(this))); +} + +TEST_F(AddPageToDownloadManagerTaskTest, AddSimpleId) { + OfflinePageItem page = generator()->CreateItem(); + store_test_util()->InsertItem(page); + + auto task = base::MakeUnique<AddPageToDownloadManagerTask>( + store(), download_manager(), page.offline_id, kTitle, kDescription, kPath, + kTestLength, kUri, kReferer); + SetTaskCompletionCallbackForTesting(task.get()); + task->Run(); + PumpLoop(); + + // Check that task finished running. + ASSERT_TRUE(add_task_done()); + + // Check the download ID got set in the offline page item in the database. + auto offline_page = store_test_util()->GetPageByOfflineId(page.offline_id); + ASSERT_TRUE(offline_page); + EXPECT_EQ(offline_page->system_download_id, kTestDownloadId); + + // Check that the system download manager stub saw the arguments it expected + EXPECT_EQ(download_manager()->title(), std::string(kTitle)); + EXPECT_EQ(download_manager()->description(), kDescription); + EXPECT_EQ(download_manager()->path(), kPath); + EXPECT_EQ(download_manager()->uri(), kUri); + EXPECT_EQ(download_manager()->referer(), kReferer); + EXPECT_EQ(download_manager()->length(), kTestLength); +} + +TEST_F(AddPageToDownloadManagerTaskTest, NoADM) { + // Simulate the ADM being unavailable on the system. + download_manager()->set_installed(false); + + OfflinePageItem page = generator()->CreateItem(); + store_test_util()->InsertItem(page); + + auto task = base::MakeUnique<AddPageToDownloadManagerTask>( + store(), download_manager(), page.offline_id, kTitle, kDescription, kPath, + kTestLength, kUri, kReferer); + SetTaskCompletionCallbackForTesting(task.get()); + task->Run(); + PumpLoop(); + + // Check that task finished running. + ASSERT_TRUE(add_task_done()); + + // Check the download ID did not get set in the offline page item in the + // database. + auto offline_page = store_test_util()->GetPageByOfflineId(page.offline_id); + ASSERT_TRUE(offline_page); + EXPECT_EQ(offline_page->system_download_id, 0); +} + +TEST_F(AddPageToDownloadManagerTaskTest, AddDownloadFailed) { + // Simulate failure by asking the download manager to return id of 0. + download_manager()->set_download_id(0); + OfflinePageItem page = generator()->CreateItem(); + page.system_download_id = kDefaultDownloadId; + store_test_util()->InsertItem(page); + + auto task = base::MakeUnique<AddPageToDownloadManagerTask>( + store(), download_manager(), page.offline_id, kTitle, kDescription, kPath, + kTestLength, kUri, kReferer); + SetTaskCompletionCallbackForTesting(task.get()); + task->Run(); + PumpLoop(); + + // Check that task finished running. + ASSERT_TRUE(add_task_done()); + + // Check the download ID did not get set in the offline page item in the + // database. + auto offline_page = store_test_util()->GetPageByOfflineId(page.offline_id); + ASSERT_TRUE(offline_page); + EXPECT_EQ(offline_page->system_download_id, kDefaultDownloadId); +} + +} // namespace offline_pages
diff --git a/components/offline_pages/core/model/clear_digest_task.h b/components/offline_pages/core/model/clear_digest_task.h index 8d56f0da..6f73396 100644 --- a/components/offline_pages/core/model/clear_digest_task.h +++ b/components/offline_pages/core/model/clear_digest_task.h
@@ -5,7 +5,7 @@ #ifndef COMPONENTS_OFFLINE_PAGES_CORE_MODEL_CLEAR_DIGEST_TASK_H_ #define COMPONENTS_OFFLINE_PAGES_CORE_MODEL_CLEAR_DIGEST_TASK_H_ -#include "stdint.h" +#include <stdint.h> #include "base/macros.h" #include "base/memory/weak_ptr.h"
diff --git a/components/offline_pages/core/system_download_manager.h b/components/offline_pages/core/system_download_manager.h new file mode 100644 index 0000000..b6520ac --- /dev/null +++ b/components/offline_pages/core/system_download_manager.h
@@ -0,0 +1,40 @@ +// Copyright 2018 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_OFFLINE_PAGES_CORE_SYSTEM_DOWNLOAD_MANAGER_H_ +#define COMPONENTS_OFFLINE_PAGES_CORE_SYSTEM_DOWNLOAD_MANAGER_H_ + +#include <string> +#include <vector> + +namespace offline_pages { + +// Interface of a class responsible for interacting with the Android download +// manager +class SystemDownloadManager { + public: + SystemDownloadManager() = default; + virtual ~SystemDownloadManager() = default; + + // Returns true if a system download manager is available on this platform. + virtual bool IsDownloadManagerInstalled() = 0; + + // Returns the download manager ID of the download, which we will place in the + // offline pages database as part of the offline page item. + // TODO(petewil): it might make sense to move all these params into a struct. + virtual int64_t AddCompletedDownload(const std::string& title, + const std::string& description, + const std::string& path, + int64_t length, + const std::string& uri, + const std::string& referer) = 0; + + // Returns the number of pages removed. + virtual int Remove( + const std::vector<int64_t>& android_download_manager_ids) = 0; +}; + +} // namespace offline_pages + +#endif // COMPONENTS_OFFLINE_PAGES_CORE_SYSTEM_DOWNLOAD_MANAGER_H_
diff --git a/components/offline_pages/core/system_download_manager_stub.cc b/components/offline_pages/core/system_download_manager_stub.cc new file mode 100644 index 0000000..96a1eed --- /dev/null +++ b/components/offline_pages/core/system_download_manager_stub.cc
@@ -0,0 +1,41 @@ +// Copyright 2018 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/offline_pages/core/system_download_manager_stub.h" + +namespace offline_pages { + +SystemDownloadManagerStub::SystemDownloadManagerStub(int64_t id_to_use, + bool installed) + : download_id_(id_to_use), installed_(installed) {} + +SystemDownloadManagerStub::~SystemDownloadManagerStub() {} + +bool SystemDownloadManagerStub::IsDownloadManagerInstalled() { + return installed_; +} + +int64_t SystemDownloadManagerStub::AddCompletedDownload( + const std::string& title, + const std::string& description, + const std::string& path, + int64_t length, + const std::string& uri, + const std::string& referer) { + title_ = title; + description_ = description; + path_ = path; + length_ = length; + uri_ = uri; + referer_ = referer; + + return download_id_; +} + +int SystemDownloadManagerStub::Remove( + const std::vector<int64_t>& android_download_manager_ids) { + return android_download_manager_ids.size(); +} + +} // namespace offline_pages
diff --git a/components/offline_pages/core/system_download_manager_stub.h b/components/offline_pages/core/system_download_manager_stub.h new file mode 100644 index 0000000..6791cc1 --- /dev/null +++ b/components/offline_pages/core/system_download_manager_stub.h
@@ -0,0 +1,52 @@ +// Copyright 2018 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_OFFLINE_PAGES_CORE_SYSTEM_DOWNLOAD_MANAGER_STUB_H_ +#define COMPONENTS_OFFLINE_PAGES_CORE_SYSTEM_DOWNLOAD_MANAGER_STUB_H_ + +#include "components/offline_pages/core/system_download_manager.h" + +namespace offline_pages { + +// Stub replacement for the DownloadManager to be used by unit tests. +class SystemDownloadManagerStub : public SystemDownloadManager { + public: + SystemDownloadManagerStub(int64_t download_id, bool installed); + ~SystemDownloadManagerStub() override; + + bool IsDownloadManagerInstalled() override; + + int64_t AddCompletedDownload(const std::string& title, + const std::string& description, + const std::string& path, + int64_t length, + const std::string& uri, + const std::string& referer) override; + + int Remove(const std::vector<int64_t>& android_download_manager_ids) override; + + // Accessors for the test to use to check passed parameters. + std::string title() { return title_; } + std::string description() { return description_; } + std::string path() { return path_; } + std::string uri() { return uri_; } + std::string referer() { return referer_; } + long length() { return length_; } + void set_installed(bool installed) { installed_ = installed; } + void set_download_id(int64_t download_id) { download_id_ = download_id; } + + private: + int64_t download_id_; + std::string title_; + std::string description_; + std::string path_; + std::string uri_; + std::string referer_; + long length_; + bool installed_; +}; + +} // namespace offline_pages + +#endif // COMPONENTS_OFFLINE_PAGES_CORE_SYSTEM_DOWNLOAD_MANAGER_STUB_H_
diff --git a/components/omnibox/browser/omnibox_popup_model.cc b/components/omnibox/browser/omnibox_popup_model.cc index 2d44eb2..da1ed54 100644 --- a/components/omnibox/browser/omnibox_popup_model.cc +++ b/components/omnibox/browser/omnibox_popup_model.cc
@@ -276,6 +276,11 @@ if (base::FeatureList::IsEnabled( omnibox::kUIExperimentShowSuggestionFavicons) && !AutocompleteMatch::IsSearchType(match.type)) { + // Because the Views UI code calls GetMatchIcon in both the layout and + // painting code, we may generate multiple OnFaviconFetched callbacks, + // all run one after another. This seems to be harmless as the callback + // just flips a flag to schedule a repaint. However, if it turns out to be + // costly, we can optimize away the redundant extra callbacks. gfx::Image favicon = edit_model_->client()->GetFaviconForPageUrl( match.destination_url, base::Bind(&OmniboxPopupModel::OnFaviconFetched,
diff --git a/components/password_manager/core/browser/credential_manager_impl.cc b/components/password_manager/core/browser/credential_manager_impl.cc index 2708d60..c8d85dd 100644 --- a/components/password_manager/core/browser/credential_manager_impl.cc +++ b/components/password_manager/core/browser/credential_manager_impl.cc
@@ -244,11 +244,7 @@ // 'skip_zero_click' state, as we've gotten an explicit signal that the page // understands the credential management API and so can be trusted to notify // us when they sign the user out. - auto best_match = form_manager_->best_matches().find(form.username_value); - // NOTE: We can't use DCHECK_NE here, since std::map<>::iterator does not - // support operator<<. - DCHECK(best_match != form_manager_->best_matches().end()); - form_manager_->Update(*best_match->second); + form_manager_->Update(form_manager_->pending_credentials()); return; }
diff --git a/components/password_manager/core/browser/credential_manager_impl_unittest.cc b/components/password_manager/core/browser/credential_manager_impl_unittest.cc index eedb852..46fca823 100644 --- a/components/password_manager/core/browser/credential_manager_impl_unittest.cc +++ b/components/password_manager/core/browser/credential_manager_impl_unittest.cc
@@ -457,7 +457,13 @@ } TEST_F(CredentialManagerImplTest, CredentialManagerStoreOverwrite) { + // Add an unrelated form to complicate the task. + origin_path_form_.preferred = true; + store_->AddLogin(origin_path_form_); // Populate the PasswordStore with a form. + form_.preferred = false; + form_.display_name = base::ASCIIToUTF16("Old Name"); + form_.icon_url = GURL(); store_->AddLogin(form_); RunAllPendingTasks(); @@ -465,6 +471,8 @@ // the password without prompting the user. CredentialInfo info(form_, CredentialType::CREDENTIAL_TYPE_PASSWORD); info.password = base::ASCIIToUTF16("Totally new password."); + info.name = base::ASCIIToUTF16("New Name"); + info.icon = GURL("https://example.com/icon.png"); EXPECT_CALL(*client_, PromptUserToSavePasswordPtr(_)).Times(0); EXPECT_CALL(*client_, NotifyStorePasswordCalled()); bool called = false; @@ -478,9 +486,15 @@ TestPasswordStore::PasswordMap passwords = store_->stored_passwords(); EXPECT_EQ(1U, passwords.size()); - EXPECT_EQ(1U, passwords[form_.signon_realm].size()); + EXPECT_EQ(2U, passwords[form_.signon_realm].size()); + origin_path_form_.preferred = false; + EXPECT_EQ(origin_path_form_, passwords[form_.signon_realm][0]); EXPECT_EQ(base::ASCIIToUTF16("Totally new password."), - passwords[form_.signon_realm][0].password_value); + passwords[form_.signon_realm][1].password_value); + EXPECT_EQ(base::ASCIIToUTF16("New Name"), + passwords[form_.signon_realm][1].display_name); + EXPECT_EQ(GURL("https://example.com/icon.png"), + passwords[form_.signon_realm][1].icon_url); } TEST_F(CredentialManagerImplTest,
diff --git a/components/policy/resources/policy_templates_ar.xtb b/components/policy/resources/policy_templates_ar.xtb index a18b894..0f0274f 100644 --- a/components/policy/resources/policy_templates_ar.xtb +++ b/components/policy/resources/policy_templates_ar.xtb
@@ -454,7 +454,7 @@ <translation id="2436445024487698630">للسماح بتسجيل الدخول إلى <ph name="PRODUCT_NAME" /></translation> <translation id="244317009688098048">يمكنك تمكين اختصار لوحة المفاتيح للخروج لتسجيل الدخول تلقائيًا. - في حالة عدم ضبط هذه السياسة أو ضبطها على True، وتهيئة حساب محلي على الجهاز لتسجيل الدخول تلقائيًا بدون انتظار أية مهلة، فإن <ph name="PRODUCT_OS_NAME" /> سيسمح لاختصار لوحة المفاتيح Ctrl+Alt+S بتجاوز تسجيل الدخول التلقائي وعرض شاشة تسجيل الدخول. + في حالة عدم ضبط هذه السياسة أو ضبطها على True، وتهيئة حساب محلي على الجهاز لتسجيل الدخول تلقائيًا بدون انتظار أي مهلة، فإن <ph name="PRODUCT_OS_NAME" /> سيسمح لاختصار لوحة المفاتيح Ctrl+Alt+S بتجاوز تسجيل الدخول التلقائي وعرض شاشة تسجيل الدخول. في حالة ضبط هذه السياسة على False، لا يمكن تجاوز إعداد تسجيل الدخول تلقائيًا بدون مهلة (في حالة تهيئته).</translation> <translation id="2463365186486772703">لغة التطبيق</translation> @@ -610,7 +610,7 @@ <translation id="3046192273793919231">إرسال حزم الشبكة إلى خادم الإدارة لمراقبة الحالة عبر الإنترنت</translation> <translation id="3048744057455266684">إذا تم تعيين هذه السياسة واحتوى عنوان URL للبحث تم اقتراحه من المربع متعدد الاستخدامات على هذه المعلمة في سلسلة طلب البحث أو في معرّف التجزئة، فسيعرض الاقتراح نتائج البحث وموفر البحث بدلاً من عنوان URL غير المنسق للبحث. - هذه السياسة اختيارية. فإذا لم يتم تعيينها، لن يتم استبدال أية عبارة بحث. + هذه السياسة اختيارية. فإذا لم يتم تعيينها، لن يتم استبدال أي عبارة بحث. تُطبق هذه السياسة فقط عند تمكين سياسة "DefaultSearchProviderEnabled".</translation> <translation id="3069958900488014740">تسمح لك بإيقاف تشغيل التحسين لاكتشاف الخادم الوكيل للويب تلقائيًا (WPAD) في <ph name="PRODUCT_NAME" />. @@ -1129,7 +1129,7 @@ <translation id="4858735034935305895">السماح بوضع ملء الشاشة</translation> <translation id="4869787217450099946">لتحديد ما إذا كانت مفاتيح قفل تشغيل الشاشة مسموح بها أم لا. يمكن أن تطلب الإضافات مفاتيح قفل تشغيل الشاشة عبر واجهة برمجة التطبيقات للإضافة المعنية بإدارة الطاقة. - في حالة ضبط هذه السياسة على true أو عدم ضبطها على أية قيمة، سيتم السماح باستخدام مفاتيح قفل تشغيل الشاشة لإدارة الطاقة. + في حالة ضبط هذه السياسة على true أو عدم ضبطها على أي قيمة، سيتم السماح باستخدام مفاتيح قفل تشغيل الشاشة لإدارة الطاقة. في حالة ضبط هذه السياسة على false، سيتم تجاهل طلبات مفاتيح قفل تشغيل الشاشة.</translation> <translation id="487460824085252184">يمكنك الترحيل تلقائيًا، ولا تطلب موافقة المستخدم.</translation> @@ -1439,7 +1439,7 @@ عند عدم تعيين السياسة أو تعيينها على "false"، لن ينفِّذ <ph name="PRODUCT_NAME" /> عمليات فحص لحالات الإلغاء في الإصدار 19 من <ph name="PRODUCT_NAME" /> والإصدارات الأحدث.</translation> <translation id="5966615072639944554">الإضافات مسموح لها باستخدام واجهة برمجة التطبيقات للتأكيد عن بُعد</translation> -<translation id="5983708779415553259">طريقة العمل الافتراضية للمواقع التي ليست في أية حزمة محتوى</translation> +<translation id="5983708779415553259">طريقة العمل الافتراضية للمواقع التي ليست في أي حزمة محتوى</translation> <translation id="5997543603646547632">استخدام التنسيق 24 ساعة افتراضيًا</translation> <translation id="5997846976342452720">تحديد ما إذا كان يجب إيقاف الباحث عن المكوّن الإضافي أم لا (متوقف)</translation> <translation id="6005179188836322782">لتمكين ميزة التصفح الآمن في <ph name="PRODUCT_NAME" /> ومنع المستخدمين من تغيير هذا الإعداد. @@ -1608,7 +1608,7 @@ عندما لا يتم تعيين هذه السياسة، يتم استخدام مدة زمنية افتراضية. - الطريقة الموصى بها لقفل الشاشة عند الدخول إلى وضع الخمول هي تمكين قفل الشاشة عند التعليق وضبط <ph name="PRODUCT_OS_NAME" /> بحيث يتم تعليقه بعد انقضاء مهلة وضع الخمول. يجب عدم استخدام هذه السياسة إلا إذا كان من المراد أن يحدث قفل الشاشة قبل حدوث التعليق بفترة زمنية ملموسة أو في حالة عدم توفر أية رغبة في التعليق عند الدخول إلى وضع الخمول على الإطلاق. + الطريقة الموصى بها لقفل الشاشة عند الدخول إلى وضع الخمول هي تمكين قفل الشاشة عند التعليق وضبط <ph name="PRODUCT_OS_NAME" /> بحيث يتم تعليقه بعد انقضاء مهلة وضع الخمول. يجب عدم استخدام هذه السياسة إلا إذا كان من المراد أن يحدث قفل الشاشة قبل حدوث التعليق بفترة زمنية ملموسة أو في حالة عدم توفر أي رغبة في التعليق عند الدخول إلى وضع الخمول على الإطلاق. يجب تحديد قيمة السياسة بالمللي ثانية. يجب أن تكون القيم أقل من مهلة وضع الخمول.</translation> <translation id="6536600139108165863">إعادة التشغيل التلقائي عند إغلاق الجهاز</translation> @@ -1683,7 +1683,7 @@ <translation id="6899705656741990703">اكتشاف إعدادات الخادم الوكيل تلقائيًا</translation> <translation id="6903814433019432303">تكون هذه السياسة نشطة في وضع البيع بالتجزئة فقط. - لتحديد مجموعة عناوين URL التي يتم تحميلها عند بدء جلسة الوضع التجريبي. ستتجاوز هذه السياسة أية آليات أخرى لتعيين عنوان URL الأولي ولذلك لا يمكن أن تنطبق سوى على جلسة غير مرتبطة بمستخدم محدد.</translation> + لتحديد مجموعة عناوين URL التي يتم تحميلها عند بدء جلسة الوضع التجريبي. ستتجاوز هذه السياسة أي آليات أخرى لتعيين عنوان URL الأولي ولذلك لا يمكن أن تنطبق سوى على جلسة غير مرتبطة بمستخدم محدد.</translation> <translation id="6908347296939885026">تمكّن ميزة تسجيل الدخول المقيد لـ <ph name="PRODUCT_NAME" /> في G Suite وتمنع المستخدمين من تغيير هذا الإعداد. إذا حددت هذا الإعداد، سيتمكن المستخدم فقط من الدخول إلى Google @@ -2004,7 +2004,7 @@ يتم دعم التحديث الديناميكي لهذه السياسة في M56 ولاحقًا.</translation> <translation id="7831595031698917016">لتحديد الحد الأقصى لحد التأخير بالميللي ثانية بين تلقي إلغاء السياسة وجلب السياسة الجديدة من خدمة إدارة الجهاز. - يؤدي تحديد هذه السياسة إلى إلغاء القيمة الافتراضية 5000 ميللي ثانية. وتتراوح القيم الصالحة لهذه السياسة بين 1000 (1 ثانية) و300000 (5 دقائق). وسيتم تثبيت أية قيم ليست في هذا النطاق على الحد المناسب. + يؤدي تحديد هذه السياسة إلى إلغاء القيمة الافتراضية 5000 ميللي ثانية. وتتراوح القيم الصالحة لهذه السياسة بين 1000 (1 ثانية) و300000 (5 دقائق). وسيتم تثبيت أي قيم ليست في هذا النطاق على الحد المناسب. يؤدي ترك هذه السياسة بدون تحديد إلى أن يستخدم <ph name="PRODUCT_NAME" /> القيمة الافتراضية وهي 5000 ميللي ثانية.</translation> <translation id="7841880500990419427">الحد الأدنى لإصدار طبقة النقل الآمنة للرجوع إلى</translation> @@ -2220,7 +2220,7 @@ <translation id="867410340948518937">U2F (العامل الثاني العالمي)</translation> <translation id="8693243869659262736">استخدام عميل نظام أسماء النطاقات المدمج</translation> <translation id="8704831857353097849">قائمة بالمكونات الإضافية المُعطّلة</translation> -<translation id="8711086062295757690">لتحديد الكلمة الرئيسية، وهي الاختصار المستخدَم في المربع متعدد الاستخدامات لتشغيل البحث لهذا المزود. هذه السياسة اختيارية. إذا لم يتم تعيينها، فلن تنشّط أية كلمة رئيسية مزود البحث. لا يتم الالتزام بهذه السياسة إلا إذا تم تمكين السياسة 'DefaultSearchProviderEnabled'.</translation> +<translation id="8711086062295757690">لتحديد الكلمة الرئيسية، وهي الاختصار المستخدَم في المربع متعدد الاستخدامات لتشغيل البحث لهذا المزود. هذه السياسة اختيارية. إذا لم يتم تعيينها، فلن تنشّط أي كلمة رئيسية مزود البحث. لا يتم الالتزام بهذه السياسة إلا إذا تم تمكين السياسة 'DefaultSearchProviderEnabled'.</translation> <translation id="8731693562790917685">تتيح لك "إعدادات المحتوى" تحديد كيفية التعامل مع أنواع محددة من المحتويات (على سبيل المثال، ملفات تعريف الارتباط أو الصور أو جافا سكريبت).</translation> <translation id="8736538322216687231">فرض وضع تقييد المحتوى الأدنى على YouTube</translation> <translation id="8749370016497832113">لتمكين حذف سجل المتصفح وسجل التنزيل في <ph name="PRODUCT_NAME" /> ومنع المستخدمين من تغيير هذا الإعداد. @@ -2289,7 +2289,7 @@ عند عدم تعيين هذه السياسة، يتم استخدام مدة زمنية افتراضية. - الطريقة الموصى بها لقفل الشاشة عند الدخول إلى وضع الخمول هي تمكين قفل الشاشة عند التعليق وضبط <ph name="PRODUCT_OS_NAME" /> بحث يتم تعليقه بعد انقضاء مهلة وضع الخمول. يجب عدم استخدام هذه السياسة إلا إذا كان من المراد أن يحدث قفل الشاشة قبل حدوث التعليق بفترة زمنية ملموسة أو في حالة عدم توفر أية رغبة في التعليق عند الدخول إلى وضع الخمول على الإطلاق. + الطريقة الموصى بها لقفل الشاشة عند الدخول إلى وضع الخمول هي تمكين قفل الشاشة عند التعليق وضبط <ph name="PRODUCT_OS_NAME" /> بحث يتم تعليقه بعد انقضاء مهلة وضع الخمول. يجب عدم استخدام هذه السياسة إلا إذا كان من المراد أن يحدث قفل الشاشة قبل حدوث التعليق بفترة زمنية ملموسة أو في حالة عدم توفر أي رغبة في التعليق عند الدخول إلى وضع الخمول على الإطلاق. يجب تحديد قيمة السياسة بالمللي ثانية. يجب أن تكون القيم أقل من مهلة وضع الخمول.</translation> <translation id="891435090623616439">مشفرة على هيئة JSON string، اطلع على <ph name="COMPLEX_POLICIES_URL" /> لمزيد من التفاصيل</translation>
diff --git a/components/policy/resources/policy_templates_fa.xtb b/components/policy/resources/policy_templates_fa.xtb index 394bfc4..fafd128 100644 --- a/components/policy/resources/policy_templates_fa.xtb +++ b/components/policy/resources/policy_templates_fa.xtb
@@ -143,7 +143,7 @@ برای جزئیات بیشتر، به اینجا بروید: <ph name="PROXY_HELP_URL" />.</translation> <translation id="1503487916067509762">مسدود کردن تزریق نرمافزار شخص ثالث را فعال میکند</translation> -<translation id="1504431521196476721">تأیید هویت از راه دور</translation> +<translation id="1504431521196476721">تأیید هویت ازراهدور</translation> <translation id="1509692106376861764">این خطمشی از نسخه ۲۹ <ph name="PRODUCT_NAME" /> کنار گذاشته شده است.</translation> <translation id="1522425503138261032">به سایتها برای ردیابی موقعیت مکانی فیزیکی کاربر اجازه داده شود</translation> <translation id="152657506688053119">فهرست آدرسهای اینترنتی دیگر برای ارائهدهنده جستجوی پیشفرض</translation> @@ -192,7 +192,7 @@ <translation id="1689963000958717134">اجازه میدهد پیکربندی شبکه ارسال داده برای همه کاربران یک دستگاه <ph name="PRODUCT_OS_NAME" /> اعمال شود. پیکربندی شبکه یک رشته با قالب JSON است، به صورتی که توسط قالب پیکربندی شبکه باز در <ph name="ONC_SPEC_URL" /> توضیح داده شده است.</translation> <translation id="1708496595873025510">تنظیم محدودیت بر واکشی seed نسخههای مختلف</translation> <translation id="172374442286684480">مجازکردن همه سایتها برای تنظیم دادههای محلی</translation> -<translation id="1734716591049455502">پیکربندی گزینههای دسترسی از راه دور</translation> +<translation id="1734716591049455502">پیکربندی گزینههای دسترسی ازراهدور</translation> <translation id="1736269219679256369">مجاز بودن ادامه مسیر و رد شدن از هشدار SSL</translation> <translation id="1749815929501097806">شرایط خدماتی را تنظیم میکند که کاربرباید قبل از شروع جلسه حساب محلی دستگاه قبول کند. @@ -249,7 +249,7 @@ <translation id="1960840544413786116">مشخص میکند گواهینامههای صادرشده توسط اتصالات مورد اعتماد محلی فاقد افزونه subjectAlternativeName مجاز باشند یا نه</translation> <translation id="1964634611280150550">حالت ناشناس غیرفعال شد</translation> <translation id="1964802606569741174">این خطمشی بر برنامه Android YouTube تأثیری ندارد. اگر حالت ایمن در YouTube باید اجرا شود، نباید به نصب برنامه Android YouTube اجازه داده شود.</translation> -<translation id="1969212217917526199">خطمشیهای مربوط به ساختهای Debug میزبان دسترسی از راه دور را لغو میکند. +<translation id="1969212217917526199">خطمشیهای مربوط به ساختهای Debug میزبان دسترسی ازراهدور را لغو میکند. این مقدار بهعنوان یک واژهنامه JSON از نام خطمشی در نگاشتهای مقدار خطمشی تفسیر میشود.</translation> <translation id="1969808853498848952">افزایههایی را که نیاز به مجوز دارند همیشه اجرا میکند (منسوخشده)</translation> @@ -265,7 +265,7 @@ تنظیم نکردن این خطمشی باعث میشود <ph name="PRODUCT_NAME" /> از مقدار پیشفرض ۳ ساعت استفاده کند. توجه داشته باشید اگر پلتفورم از اعلانهای خطمشی پشتیبانی کند، تأخیر زمانی بازخوانی روی ۲۴ ساعت تنظیم میشود (همه مقادیر و پیشفرضهای این خطمشی نادیده گرفته میشوند) زیرا انتظار میرود هر زمان که خطمشی تغییر کند، اعلانهای خطمشی، بازخوانی خودکاری را به وجود آورند و در نتیجه بازخوانیهای مکرر لازم نباشد.</translation> -<translation id="2024476116966025075">پیکربندی نام دامنه ضروری برای کلاینتهای دسترسی از راه دور</translation> +<translation id="2024476116966025075">پیکربندی نام دامنه ضروری برای کلاینتهای دسترسی ازراهدور</translation> <translation id="2030905906517501646">کلید میانبر ارائه دهنده جستجوی پیشفرض</translation> <translation id="203096360153626918">این خطمشی بر برنامههای Android تأثیری ندارد. حتی اگر این خطمشی روی <ph name="FALSE" /> تنظیم شده باشد، این برنامهها میتوانند وارد حالت تمامصفحه شوند.</translation> <translation id="2043770014371753404">چاپگرهای شرکتی غیرفعال</translation> @@ -538,7 +538,7 @@ درصورت استفاده از این خطمشی، فقط چاپگرهای دارای شناسه مطابق با مقادیر این خطمشی دردسترس کاربر قرار میگیرند. شناسهها باید مطابق با ورودیهای موجود در فایل مشخصشده در <ph name="BULK_PRINTERS_POLICY" /> باشند. </translation> -<translation id="2769952903507981510">پیکربندی نام دامنه مورد نیاز برای میزبانهای دسترسی از راه دور</translation> +<translation id="2769952903507981510">پیکربندی نام دامنه مورد نیاز برای میزبانهای دسترسی ازراهدور</translation> <translation id="2787173078141616821">گزارش اطلاعات درباره وضعیت Android</translation> <translation id="2793923553868251161">منابع اصلی که بافت ایمن محسوب میشوند.</translation> <translation id="2801230735743888564">به کاربران امکان داده میشود وقتی دستگاهشان آفلاین است بازی dinosaur easter egg را انجام دهند. @@ -761,7 +761,7 @@ <translation id="3711895659073496551">تعویق</translation> <translation id="3732106275571017176">این تنظیم به کاربران اجازه میدهد بعد از ورود به سیستم دستگاه <ph name="PRODUCT_OS_NAME" /> خود، بین حسابهای Google در قسمت محتوای پنجره مرورگر جابهجا شوند. - اگر این خطمشی روی نادرست تنظیم شود، ورود به سیستم حساب دیگری از قسمت محتوای مرورگر غیرناشناس مجاز نخواهد بود. + اگر این خطمشی روی نادرست تنظیم شود، ورود به سیستم حساب دیگری از قسمت محتوای مرورگر ناشناس مجاز نخواهد بود. اگر این خطمشی تنظیم نشود یا روی درست تنظیم شود، از رفتار پیشفرض استفاده خواهد شد: ورود به سیستم حساب دیگری از قسمت محتوای مرورگر مجاز خواهد بود بهجز برای حساب کودک که این مورد برای قسمت محتوای غیرناشناس مسدود خواهد بود. @@ -817,7 +817,7 @@ اگر این خطمشی را تنظیم کنید، کاربران نمیتوانند آن را تغییر دهند یا لغو کنند. اگر این خطمشی تنظیم نشود، صفحهکلید روی صفحه از ابتدا غیرفعال میشود اما کاربر میتواند هر وقت خواست آن را فعال کند.</translation> -<translation id="382476126209906314">پیکربندی پیشوند TalkGadget برای میزبانهای دسترسی از راه دور</translation> +<translation id="382476126209906314">پیکربندی پیشوند TalkGadget برای میزبانهای دسترسی ازراهدور</translation> <translation id="383466854578875212">به شما امکان میدهد مشخص کنید کدام میزبانهای پیامرسانی داخلی شامل فهرست سیاه نمیشوند. مقدار * در فهرست سیاه به معنی این است که کلیه میزبانهای پیامرسانی داخلی در فهرست سیاه قرار دارند و تنها میزبانهای پیامرسانی داخلی که در فهرست سفید قرار دارند بارگیری میشوند. @@ -884,7 +884,7 @@ اگر این خطمشی روی «درست» تنظیم شود، بستههای نظارتی شبکه (بهنام <ph name="HEARTBEATS_TERM" />) ارسال خواهند شد. اگر روی «نادرست» تنظیم شود یا تنظیم نشود، بستهای ارسال نخواهد شد.</translation> -<translation id="3963602271515417124">چنانچه روی صحیح تنظیم شده باشد، به دستگاه اجازه تأیید هویت از راه دور داده میشود و گواهینامهای بهطور خودکار ایجاد شده و در «سرور مدیریت دستگاه» بارگذاری میشود. +<translation id="3963602271515417124">چنانچه روی صحیح تنظیم شده باشد، به دستگاه اجازه تأیید هویت ازراهدور داده میشود و گواهینامهای بهطور خودکار ایجاد شده و در «سرور مدیریت دستگاه» بارگذاری میشود. چنانچه روی غلط تنظیم شده باشد یا اصلاً تنظیم نشده باشد، هیچ گواهینامهای ایجاد نمیشود و تماس با رابط برنامهنویسی نرمافزار افزونه platformKeys سازمان انجام نمیشود.</translation> <translation id="3964909636571393861">دسترسی به لیستی از URLها را مجاز میکند</translation> @@ -1046,7 +1046,7 @@ برای توصیف کامل تنظیمات و ساختار ممکن این خطمشی، لطفاً به اینجا بروید: https://www.chromium.org/administrators/policy-list-3/extension-settings-full </translation> -<translation id="4555850956567117258">فعال کردن اعطای گواهی از راه دور برای کاربر</translation> +<translation id="4555850956567117258">فعال کردن اعطای گواهی ازراهدور برای کاربر</translation> <translation id="4557134566541205630">نشانی وب صفحه برگه جدید ارائه دهنده جستجوی پیشفرض</translation> <translation id="4600786265870346112">به کار انداختن نشانگر موشواره بزرگ</translation> <translation id="4604931264910482931">پیکربندی فهرست سیاه پیامرسانی داخلی</translation> @@ -1235,7 +1235,7 @@ مقدار «*» در فهرست سیاه به این معنی است که کلیه میزبانهای پیامرسانی داخلی در فهرست سیاه قرار گرفتهاند مگر اینکه بهطور مشخص در فهرست سفید قرار بگیرند. اگر این خطمشی تنظیم نشد، <ph name="PRODUCT_NAME" /> کلیه میزبانهای پیامرسانی داخلی نصب شده را بارگیری میکند.</translation> -<translation id="5272684451155669299">اگر روی «درست» تنظیم شود، کاربر میتواند برای تصدیق از راه دور هویت خود برای CA رازداری ازطریق <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> با استفاده از <ph name="CHALLENGE_USER_KEY_FUNCTION" />، از سختافزار در دستگاههای Chrome استفاده کند. +<translation id="5272684451155669299">اگر روی «درست» تنظیم شود، کاربر میتواند برای تصدیق ازراهدور هویت خود برای CA رازداری ازطریق <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> با استفاده از <ph name="CHALLENGE_USER_KEY_FUNCTION" />، از سختافزار در دستگاههای Chrome استفاده کند. اگر روی «نادرست» تنظیم شود یا اگر تنظیم نشود، فراخوانی API با کد خطا همراه خواهد بود.</translation> <translation id="5283457834853986457">غیرفعال کردن افزایهیاب (منسوخشده)</translation> @@ -1444,7 +1444,7 @@ <translation id="5950205771952201658">با توجه به این اصل که پیدایش خطا، بررسیهای برگردان آنلاین، امنیت را تضمین نمیکند، به صورت پیشفرض در نسخه ۱۹ و نسخههای بعدی <ph name="PRODUCT_NAME" /> غیرفعال شده است. با تنظیم این خطمشی روی درست، رفتار قبلی بازیابی میشود و بررسیهای آنلاین OCSP/CRL انجام میشود. اگر خطمشی تنظیم نشود، یا روی نادرست تنظیم شود، <ph name="PRODUCT_NAME" /> بررسیهای برگردان آنلاین را در نسخه 19 <ph name="PRODUCT_NAME" /> و نسخههای بعدی انجام نمیدهد.</translation> -<translation id="5966615072639944554">افزونههایی که مجاز به استفاده از API اعطای گواهی از راه دور هستند</translation> +<translation id="5966615072639944554">افزونههایی که مجاز به استفاده از API اعطای گواهی ازراهدور هستند</translation> <translation id="5983708779415553259">رفتار پیشفرض برای سایتهایی که در هیچ بسته محتوایی نمیگنجند</translation> <translation id="5997543603646547632">استفاده از قالب ۲۴ ساعته بهطور پیشفرض</translation> <translation id="5997846976342452720">تعیین اینکه آیا افزایهیاب باید غیرفعال باشد یا خیر (منسوخشده)</translation> @@ -1523,7 +1523,7 @@ اگر این خطمشی پیکربندی نشود، فهرست دستگاههای قابل جداشدن USB خالی میماند.</translation> <translation id="6083631234867522991">Windows (کارخواههای Windows):</translation> -<translation id="6093156968240188330">به کاربران راه دور امکان میدهد با پنجرههای بالاآمده در جلسههای کمک از راه دور تعامل داشته باشند</translation> +<translation id="6093156968240188330">به کاربران راه دور امکان میدهد با پنجرههای بالاآمده در جلسههای کمک ازراهدور تعامل داشته باشند</translation> <translation id="6095999036251797924">هنگام کار کردن دستگاه با نیروی باتری یا برق مستقیم، طول زمانی که کاربر فعالیتی ندارد و پس از آن صفحه قفل میشود را مشخص میکند. اگر طول زمان روی مقداری بزرگتر از صفر تنظیم شود، نمایانگر مدت زمانی است که کاربر قبل از اینکه <ph name="PRODUCT_OS_NAME" /> صفحه را قفل کند باید بدون فعالیت باشد. @@ -1677,7 +1677,7 @@ اگر این خط مشی تنظیم نشده باقی بماند، پیشبینی شبکه فعال خواهد شد اما کاربر میتواند آن را تغییر دهد.</translation> <translation id="6658245400435704251">تعداد ثانیههایی را مشخص میکند که دستگاه میتواند حداکثر تا آن زمان بهطور تصادفی بارگیری بهروزرسانی خود را به تأخیر بیندازد این زمان از وقتی اندازه گیری میشود که ابتدا بهروزرسانی به سرور ارسال شده است. دستگاه میتواند مقداری از این زمان را بهعنوان زمان شروع تا پایان کار و بقیه را بهعنوان تعداد بررسیها برای بهروزرسانی منتظر باشد. در هر حال پراکندگی به مقدار ثابتی از زمان بستگی دارد به این ترتیب که دستگاه هزگز برای بارگیری بهروزرسانی همیشه به انتظار نمیماند.</translation> <translation id="6689792153960219308">گزارش وضعیت سختافزار</translation> -<translation id="6699880231565102694">فعال کردن احراز هویت با دو فاکتور برای میزبانهای دسترسی از راه دور</translation> +<translation id="6699880231565102694">فعال کردن احراز هویت با دو فاکتور برای میزبانهای دسترسی ازراهدور</translation> <translation id="6724842112053619797">اگر این تنظیم را فعال کنید، تنظیمات ذخیرهشده در نمایههای <ph name="PRODUCT_NAME" /> (ازجمله نشانکها، دادههای تکمیل خودکار، گذرواژهها و غیره) روی فایل ذخیرهشدهای در پوشه نمایه کاربر «رومینگ» یا مکانی که توسط «سرپرست سیستم» ازطریق خطمشی <ph name="ROAMING_PROFILE_LOCATION_POLICY_NAME" /> مشخص شده است نیز نوشته خواهد شد. فعال کردن این خطمشی همگامسازی ابری را غیرفعال میکند. اگر این خطمشی غیرفعال شود یا تنظیمنشده باقی بماند، فقط از نمایههای محلی معمولی استفاده خواهد شد. @@ -1931,7 +1931,7 @@ <translation id="7604169113182304895">ممکن است برنامههای Android بهطور داوطلبانه از این فهرست استفاده کنند اما شما نمیتوانید آنها را مجبور به استفاده از این فهرست کنید.</translation> <translation id="7612157962821894603">پرچمهای سیستم که باید هنگام شروع به کار <ph name="PRODUCT_NAME" /> در همه سیستم اعمال شوند</translation> <translation id="7614663184588396421">فهرست طرح پروتکل های غیر فعال شده</translation> -<translation id="7617319494457709698">این خطمشی افزونههایی را که مجازند از عملکرد <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> <ph name="CHALLENGE_USER_KEY_FUNCTION" /> برای تصدیق از راه دور استفاده کنند، مشخص میکند. افزونهها برای استفاده از API باید به این فهرست اضافه شوند. +<translation id="7617319494457709698">این خطمشی افزونههایی را که مجازند از عملکرد <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> <ph name="CHALLENGE_USER_KEY_FUNCTION" /> برای تصدیق ازراهدور استفاده کنند، مشخص میکند. افزونهها برای استفاده از API باید به این فهرست اضافه شوند. اگر افزونهای در این فهرست نباشد یا فهرست تنظیم نشده باشد، فراخوانی API با کد خطا همراه خواهد بود.</translation> <translation id="7625444193696794922">کانال نشری را تعیین میکند که این دستگاه باید بر روی آن قفل باشد.</translation> @@ -2222,11 +2222,11 @@ <translation id="8614804915612153606">بهروزرسانیهای خودکار را غیرفعال میکند</translation> <translation id="8631434304112909927">تا نسخه <ph name="UNTIL_VERSION" /></translation> <translation id="863319402127182273">برای برنامههای Android، این خطمشی فقط بر دوربین داخلی تأثیر میگذارد. وقتی این خطمشی روی درست تنظیم شده باشد، دوربین برای همه برنامههای Android (بدون استثنا) غیرفعال میشود.</translation> -<translation id="8649763579836720255">دستگاههای سیستم عامل Chrome میتوانند از گواهی از راه دور (دسترسی تأیید شده) برای دریافت یک مجوز ارائه شده توسط Chrome OS CA که اثبات میکند دستگاه برای پخش محتوای محافظت شده واجد شرایط است، استفاده کنند. این فرآیند شامل ارسال اطلاعات تأییدیه سختافزار به OS CA که بهصورت منحصر به فرد دستگاه را شناسایی میکند، است. +<translation id="8649763579836720255">دستگاههای سیستم عامل Chrome میتوانند از گواهی ازراهدور (دسترسی تأیید شده) برای دریافت یک مجوز ارائه شده توسط Chrome OS CA که اثبات میکند دستگاه برای پخش محتوای محافظت شده واجد شرایط است، استفاده کنند. این فرآیند شامل ارسال اطلاعات تأییدیه سختافزار به OS CA که بهصورت منحصر به فرد دستگاه را شناسایی میکند، است. - اگر این تنظیم «نادرست» باشد، دستگاه از گواهی از راه دور برای محافظت از محتوا استفاده نخواهد کرد و ممکن است دستگاه قادر به پخش محتوای محافظت شده نباشد. + اگر این تنظیم «نادرست» باشد، دستگاه از گواهی ازراهدور برای محافظت از محتوا استفاده نخواهد کرد و ممکن است دستگاه قادر به پخش محتوای محافظت شده نباشد. - اگر این تنظیم «درست» باشد یا اگر تنظیم نشود، گواهی از راه دور برای محافظت از محتوا استفاده میشود.</translation> + اگر این تنظیم «درست» باشد یا اگر تنظیم نشود، گواهی ازراهدور برای محافظت از محتوا استفاده میشود.</translation> <translation id="8650974590712548439">مکان رجیستری Windows برای کارخواههای Windows:</translation> <translation id="8654286232573430130">مشخص میکند کدام سرورها باید برای راستیآزمایی یکپارچه در فهرست سفید قرار بگیرند. راستیآزمایی یکپارچه تنها هنگامی فعال است که <ph name="PRODUCT_NAME" /> یک مشکل راستیآزمایی از پروکسی یا از سروری که در این فهرست مجاز قرار دارد، دریافت کند. @@ -2252,7 +2252,7 @@ اگر این تنظیم غیرفعال باشد، سابقه مرور و بارگیری قابل حذف نیستند.</translation> <translation id="8764119899999036911">تعیین میکند که Kerberos SPN تولید شده براساس نام DNS معیار باشد یا براساس نام اصلی وارد شده تعیین شود. اگر این گزینه را فعال کنید، جستجوی CNAME نادیده گرفته میشود و نام سرور همان نامی خواهد بود که وارد شده است. اگر این گزینه را غیرفعال کنید یا آن را بدون تنظیم باقی بگذارید، نام معیار سرور از طریق جستجوی CNAME تعیین میشود.</translation> -<translation id="87812015706645271">لازم میداند نام کاربر محلی و مالک میزبان دسترسی از راه دور منطبق باشند</translation> +<translation id="87812015706645271">لازم میداند نام کاربر محلی و مالک میزبان دسترسی ازراهدور منطبق باشند</translation> <translation id="8782750230688364867">درصدی را نشان میدهد که با آن تأخیر عدم فعالیت صفحه نمایش هنگامی که دستگاه در حالت ارائه است، اندازهگیری میشود. اگر این خطمشی تنظیم شود، درصدی را نشان میدهد که با آن تأخیر عدم فعالیت صفحه نمایش، هنگامی که دستگاه در حالت ارائه است اندازهگیری میشود. وقتی تأخیر عدم فعالیت صفحه نمایش اندازهگیری شود خاموش شدن صفحه و تأخیر قفل و بدون فعالیت بودن صفحه به گونهای تنظیم میشود که تأخیر عدم فعالیت صفحه نمایش همانطوری باشد که در ابتدا پیکربندی شده بود. @@ -2342,7 +2342,7 @@ توجه: تا قبل از نسخه ۴۵، این خطمشی فقط در «حالت کیوسک» پشتیبانی میشد.</translation> <translation id="8970205333161758602">توقف درخواست <ph name="PRODUCT_FRAME_NAME" /></translation> <translation id="8971221018777092728">تایمر ورود خودکار به جلسه عمومی</translation> -<translation id="8976248126101463034">مجاز کردن احراز هویت gnubby برای میزبانهای دسترسی از راه دور</translation> +<translation id="8976248126101463034">مجاز کردن احراز هویت gnubby برای میزبانهای دسترسی ازراهدور</translation> <translation id="8976531594979650914">استفاده از «چاپگر پیشفرض سیستم» بهعنوان «پیشفرض»</translation> <translation id="8992176907758534924">به هیچ سایتی اجازه نمایش تصاویر داده نشود</translation> <translation id="9035964157729712237">شناسه افزونه هایی که از فهرست سیاه مستثنا شدهاند</translation>
diff --git a/components/policy/resources/policy_templates_hr.xtb b/components/policy/resources/policy_templates_hr.xtb index e81c0f9..d5ce038 100644 --- a/components/policy/resources/policy_templates_hr.xtb +++ b/components/policy/resources/policy_templates_hr.xtb
@@ -789,7 +789,7 @@ Ako se ta pravila ne postave, korisnici će moći sami odabrati postavke proxyja.</translation> <translation id="3758249152301468420">Onemogući Razvojne alate</translation> <translation id="3765260570442823273">Trajanje poruke upozorenja za odjavu u stanju mirovanja</translation> -<translation id="377044054160169374">Provedi intervenciju za uvredljiv sadržaj</translation> +<translation id="377044054160169374">Provedi intervenciju za zlonamjerni sadržaj</translation> <translation id="3780152581321609624">Uključi nestandardni port u Kerberos SPN-u</translation> <translation id="3780319008680229708">Ako se to pravilo postavi na "istinito", ikona Casta na alatnoj traci uvijek će se prikazivati na alatnoj traci ili u dodatnom izborniku te je korisnici neće moći ukloniti.
diff --git a/components/policy/resources/policy_templates_hu.xtb b/components/policy/resources/policy_templates_hu.xtb index 2d25e75..39011655 100644 --- a/components/policy/resources/policy_templates_hu.xtb +++ b/components/policy/resources/policy_templates_hu.xtb
@@ -766,11 +766,11 @@ <translation id="3711895659073496551">Felfüggesztés</translation> <translation id="3732106275571017176">A beállítás lehetővé teszi a felhasználók számára a Google-fiókok közötti váltást a böngészőablak tartalomterületén belül, miután bejelentkeztek <ph name="PRODUCT_OS_NAME" />-eszközükbe. - Ha a házirend beállítása „hamis”, nem engedélyezett a másik fiókba történő bejelentkezés a nem inkognitómódban használt böngésző tartalomterületén. +Ha a házirend beállítása „hamis”, nem engedélyezett a másik fiókba történő bejelentkezés a nem inkognitómódban használt böngésző tartalomterületén. - Ha a házirend nincs beállítva, vagy értéke „igaz”, az alapértelmezett beállítás van használatban: engedélyezett a másik fiókba történő bejelentkezés a böngésző tartalomterületéről, kivéve alfiókok esetén, amelyeknél ez a lehetőség le van tiltva a nem inkognitómódban használt tartalomterületeken. +Ha a házirend nincs beállítva, vagy értéke „igaz”, az alapértelmezett beállítás van használatban: engedélyezett a másik fiókba történő bejelentkezés a böngésző tartalomterületéről, kivéve gyermek fiókok esetén, amelyeknél ez a lehetőség le van tiltva a nem inkognitómódban használt tartalomterületeken. - Ha nem szeretné engedélyezni a másik fiókba történő bejelentkezést inkognitómódban, fontolja meg a mód letiltását az IncognitoModeAvailability házirenddel.</translation> +Ha nem szeretné engedélyezni a másik fiókba történő bejelentkezést inkognitómódban, fontolja meg a mód letiltását az IncognitoModeAvailability házirenddel.</translation> <translation id="3736879847913515635">Engedélyezi a személyek hozzáadását a felhasználókezelőben</translation> <translation id="3737544779868348650">Eszköz hálózati gazdagépneve</translation> <translation id="3750220015372671395">Kulcslétrehozás letiltása a következő webhelyeken</translation>
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb index 1df786a6..cdbb804 100644 --- a/components/policy/resources/policy_templates_id.xtb +++ b/components/policy/resources/policy_templates_id.xtb
@@ -1175,7 +1175,7 @@ <translation id="4899708173828500852">Aktifkan Safe Browsing</translation> <translation id="4906194810004762807">Segarkan peringkat untuk Kebijakan Perangkat</translation> <translation id="494613465159630803">Penerima Cast</translation> -<translation id="4962262530309732070">Jika kebijakan ini disetel ke true atau tidak dikonfigurasi, <ph name="PRODUCT_NAME" /> akan mengizinkan setelan Tambahkan Orang dari pengelola pengguna. +<translation id="4962262530309732070">Jika kebijakan ini disetel ke true atau tidak dikonfigurasi, <ph name="PRODUCT_NAME" /> akan mengizinkan setelan Tambahkan Pengguna dari pengelola pengguna. Jika kebijakan ini disetel ke false, <ph name="PRODUCT_NAME" /> tidak akan mengizinkan pembuatan profil baru dari pengelola pengguna.</translation> <translation id="4971529314808359013">Memungkinkan Anda menentukan daftar pola URL yang menetapkan situs tempat <ph name="PRODUCT_NAME" /> akan memilih sertifikat klien secara otomatis, jika situs meminta sertifikat.
diff --git a/components/policy/resources/policy_templates_mr.xtb b/components/policy/resources/policy_templates_mr.xtb index 402f2e7..88c45730 100644 --- a/components/policy/resources/policy_templates_mr.xtb +++ b/components/policy/resources/policy_templates_mr.xtb
@@ -479,7 +479,7 @@ हे सेटिंग अक्षम केले असल्यास किंवा सेट केले नसल्यास, ब्राउझिंग इतिहास जतन केला जातो.</translation> <translation id="2424023834246613232"><ph name="PRODUCT_NAME" /> डीफॉल्ट प्रिंटर निवड नियम अधिशून्य करते. - प्रोफाईलसह पहिल्यांदा मुद्रण कार्य वापरले जाते तेव्हा हे धोरण <ph name="PRODUCT_NAME" /> मध्ये डीफॉल्ट प्रिंटर निवडण्यासाठी नियम निर्धारित करते. + प्रोफाईलसह पहिल्यांदा प्रिंट कार्य वापरले जाते तेव्हा हे धोरण <ph name="PRODUCT_NAME" /> मध्ये डीफॉल्ट प्रिंटर निवडण्यासाठी नियम निर्धारित करते. हे धोरण सेट केले जाते तेव्हा, निर्दिष्ट केलेल्या सर्व विशेषतांशी जुळणारे प्रिंटर शोधण्याचा <ph name="PRODUCT_NAME" /> प्रयत्न करेल आणि त्या प्रिंटरला डीफॉल्ट प्रिंटर म्हणून निवडेल. धोरणाशी जुळणारा प्रथम प्रिंटर आढळल्यास तो निवडला जातो, अद्वितीय-नसलेल्या जुळणीबाबतीत प्रिंटर ज्या क्रमात शोधले जातात त्यावर आधारित कोणताही जुळणारा प्रिंटर निवडला जाऊ शकतो. @@ -507,7 +507,7 @@ } <ph name="CLOUD_PRINT_NAME" /> शी कनेक्ट केलेल्या प्रिंटरचा <ph name="PRINTER_TYPE_CLOUD" /> म्हणून विचार केला जातो, उर्वरित प्रिंटरचे <ph name="PRINTER_TYPE_LOCAL" /> म्हणून वर्गीकरण केले जाते. - फील्ड वगळणे अर्थात सर्व मूल्ये जुळतात असा होय, उदाहरणार्थ, कनेक्टिव्हिटी निर्दिष्ट न करण्यामुळे मुद्रण पूर्वावलोकनास सर्व प्रकारचे प्रिंटर, स्थानिक आणि क्लाउडचा शोध आरंभ करावा लागेल. + फील्ड वगळणे अर्थात सर्व मूल्ये जुळतात असा होय, उदाहरणार्थ, कनेक्टिव्हिटी निर्दिष्ट न करण्यामुळे प्रिंट पूर्वावलोकनास सर्व प्रकारचे प्रिंटर, स्थानिक आणि क्लाउडचा शोध आरंभ करावा लागेल. रेग्युलर एक्स्प्रेशन नमुन्यांनी JavaScript RegExp मांडणीचे अनुसरण करणे आवश्यक आहे आणि जुळण्या प्रकरण संवेदी असतात.</translation> <translation id="2426782419955104525"><ph name="PRODUCT_NAME" />चे झटपट वैशिष्ट्य सक्षम करते आणि वापरकर्त्यांना ही सेटिंग बदलण्यापासून प्रतिबंध करते. @@ -553,11 +553,11 @@ हे धोरण पर्यायी आहे. सेट न केल्यास, शोध प्रदात्यासाठी कोणतेही चिन्ह उपस्थित असणार नाही. 'डीफॉल्ट शोध प्रदाता धोरण सक्षम' धोरण समक्ष केले असल्यासच या धोरणाचे पालन केले जाते.</translation> -<translation id="2516600974234263142"><ph name="PRODUCT_NAME" /> मध्ये मुद्रण सक्षम करते आणि वापरकर्त्यांना हे सेटिंग बदलण्यापासून प्रतिबंधित करते. +<translation id="2516600974234263142"><ph name="PRODUCT_NAME" /> मध्ये प्रिंट सक्षम करते आणि वापरकर्त्यांना हे सेटिंग बदलण्यापासून प्रतिबंधित करते. - हे सेटिंग सक्षम केलेले असल्यास किंवा कॉन्फिगर केलेले नसल्यास, वापरकर्ते मुद्रण करू शकतात. + हे सेटिंग सक्षम केलेले असल्यास किंवा कॉन्फिगर केलेले नसल्यास, वापरकर्ते प्रिंट करू शकतात. - हे सेटिंग अक्षम केलेले असल्यास, वापरकर्ते <ph name="PRODUCT_NAME" /> वरून मुद्रण करू शकत नाहीत. मुद्रण करणे पाना मेनू, विस्तार, JavaScript अॅप्लिकेशन, इ. मध्ये अक्षम केले आहे. मुद्रण करताना <ph name="PRODUCT_NAME" /> ला बायपास करणार्या प्लगिनवरून मुद्रण करणे शक्य आहे. उदाहरणार्थ, विशिष्ट Flash अॅप्लिकेशनांना त्यांच्या संदर्भ मेनूमध्ये मुद्रण पर्याय असतात, जे या धोरणाद्वारे कव्हर केले जात नाही.</translation> + हे सेटिंग अक्षम केलेले असल्यास, वापरकर्ते <ph name="PRODUCT_NAME" /> वरून प्रिंट करू शकत नाहीत. प्रिंट करणे पाना मेनू, विस्तार, JavaScript अॅप्लिकेशन, इ. मध्ये अक्षम केले आहे. प्रिंट करताना <ph name="PRODUCT_NAME" /> ला बायपास करणार्या प्लगिनवरून प्रिंट करणे शक्य आहे. उदाहरणार्थ, विशिष्ट Flash अॅप्लिकेशनांना त्यांच्या संदर्भ मेनूमध्ये प्रिंट पर्याय असतात, जे या धोरणाद्वारे कव्हर केले जात नाही.</translation> <translation id="2518231489509538392">ऑडिओ प्ले करण्यास अनुमती द्या</translation> <translation id="2521581787935130926">बुकमार्क बार मध्ये अॅप्स शार्टकट दर्शवा</translation> <translation id="2529700525201305165"><ph name="PRODUCT_NAME" /> मध्ये साइन इन करण्यासाठी अनुमत असलेल्या वापरकर्त्यांना प्रतिबंधित करा.</translation> @@ -1374,7 +1374,7 @@ हे धोरण सत्य वर सेट केले असल्यास किंवा सेट न करता सोडले असल्यास, उर्जा व्यवस्थापनासाठी स्क्रीन वेक लॉक मर्यादित केली जातील. हे धोरण खोटे वर सेट केले असल्यास, स्क्रीन लॉक विनंत्या दुर्लक्षित केल्या जातील.</translation> -<translation id="487460824085252184">आपोआप मायग्रेट करा, वापरकर्त्याची संमती विचारू नका.</translation> +<translation id="487460824085252184">आपोआप स्थलांतरित करा, वापरकर्त्याची संमती विचारू नका.</translation> <translation id="4876805738539874299">कमाल SSL आवृत्ती सक्षम केली</translation> <translation id="4881315447528084360">वापरकर्ता संवादाविना आणि वापरकर्ता अनइंस्टॉल किंवा बंद करू शकत नसलेल्या, शांतपणे इंस्टॉल केल्या गेलेल्या अॅप्सची आणि एक्स्टेंशनची @@ -1438,7 +1438,7 @@ <translation id="5075834892754086022">धोरण सेट केलेले असल्यास, कॉन्फिगर केलेल्या पिनची किमान लांबी लागू होते. (निरपेक्ष किमान पिन लांबी 1 आहे; 1 पेक्षा कमी मूल्य असलेल्या मूल्यांना 1 म्हणून वापरले जाते.) धोरण सेट नसल्यास, किमान लागू पिन लांबी 6 संख्यांची आहे. हे सिफारस केलेले किमान आहे.</translation> -<translation id="5085647276663819155">मुद्रण पूर्वावलोकन अक्षम करा</translation> +<translation id="5085647276663819155">प्रिंट पूर्वावलोकन अक्षम करा</translation> <translation id="5090209345759901501">फ्लॅश आशय सेटिंग सर्व आशयावर विस्तारित करा</translation> <translation id="5105313908130842249">बॅटरी उर्जेवर चालताना स्क्रीन लॉक विलंब</translation> <translation id="5108031557082757679">बंद केलेले एंटरप्राइझ डीव्हाइस प्रिंटर</translation> @@ -1506,7 +1506,7 @@ <translation id="5272684451155669299">सत्य असल्यास, वापरकर्ता <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> द्वारे <ph name="CHALLENGE_USER_KEY_FUNCTION" /> वापरून गोपनीयता CA मध्ये त्याची ओळख दूरस्थ अनुप्रमाणित करण्यासाठी Chrome डिव्हाइसवरील हार्डवेअर वापरू शकतो. ते असत्यवर सेट केले असल्यास किंवा ते सेट केले नसल्यास, API वरील कॉल एरर कोडसह अयशस्वी होतील.</translation> -<translation id="5283457834853986457">प्लग-इन फाइंडर (नापसंत) बंद कर</translation> +<translation id="5283457834853986457">प्लग-इन फाइंडर (कालबाह्य) बंद करा</translation> <translation id="5288772341821359899">धोरण सेट केले असल्यास, WebRTC ने वापरलेली UDP पोर्ट श्रेणी ही निर्दिष्ट केलेल्या पोर्टपुरती मर्यादित केली जाते (समाप्ती बिंदू समाविष्ट केले आहेत). धोरण सेट केले नसल्यास किंवा ते रिक्त स्ट्रिंगवर किंवा अवैध पोर्ट श्रेणीवर सेट केले असल्यास, WebRTC ला कोणतेही उपलब्ध असलेले स्थानिक UDP पोर्ट वापरण्याची अनुमती दिली जाते.</translation> @@ -1586,7 +1586,7 @@ हे धोरण सेट न करता सोडल्यास सर्व साइटसाठी सर्वंकष डीफॉल्ट मूल्य हे सेट केले असल्यास 'डीफॉल्ट कुकीज सेटिंग' धोरण, किंवा अन्यथा वापरकर्त्याचे वैयक्तिक कॉन्फिगरेशन वापरले जाईल.</translation> <translation id="5469825884154817306">या साइटवरील प्रतिमा अवरोधित करा</translation> -<translation id="5475361623548884387">मुद्रण सक्षम करा</translation> +<translation id="5475361623548884387">प्रिंट सक्षम करा</translation> <translation id="5483777239978559943">हे धोरण बहिष्कृत केले आहे. कृपया फ्लॅश प्लगिनची उपलब्धता नियंत्रित करण्यासाठी <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> आणि संकलित PDF फायली उघडण्यासाठी PDF दर्शक वापरला जावा किंवा नाही ते नियंत्रित करण्यासाठी <ph name="ALWAYS_OPEN_PDF_EXTERNALLY_POLICY_NAME" /> वापरा. वापरकर्ते <ph name="PRODUCT_NAME" /> मधून चालू किंवा बंद करू शकतील असा प्लगिनची सूची निर्दिष्ट करते. @@ -1791,11 +1791,11 @@ हे धोरण सेट न केल्यास, हे चालू होईल पण वापरकर्ता त्यामध्ये बदल करू शकेल. सुरक्षित ब्राउझिंगबद्दल अधिक माहितीसाठी https://developers.google.com/safe-browsing पहा</translation> -<translation id="6017568866726630990">मुद्रण पूर्वावलोकनाच्या ऐवजी सिस्टम मुद्रण संवाद दर्शवा. +<translation id="6017568866726630990">प्रिंट पूर्वावलोकनाच्या ऐवजी सिस्टम प्रिंट संवाद दर्शवा. - हे सेटिंग सक्षम केलेले असताना, जेव्हा एखादा वापरकर्ता एका पृष्ठाच्या मुद्रणाची विनंती करतो, तेव्हा अंगभूत मुद्रण पूर्ववावलोकनाच्या ऐवजी <ph name="PRODUCT_NAME" /> हे सिस्टम मुद्रण संवाद उघडेल. + हे सेटिंग सक्षम केलेले असताना, जेव्हा एखादा वापरकर्ता एका पृष्ठाच्या प्रिंटाची विनंती करतो, तेव्हा अंगभूत प्रिंट पूर्ववावलोकनाच्या ऐवजी <ph name="PRODUCT_NAME" /> हे सिस्टम प्रिंट संवाद उघडेल. - हे धोरण सेट केले नसल्यास किंवा चुकीचे सेट केले असल्यास, मुद्रण आज्ञा मुद्रण पूर्वावलोकन स्क्रीन ट्रिगर करते.</translation> + हे धोरण सेट केले नसल्यास किंवा चुकीचे सेट केले असल्यास, प्रिंट आज्ञा प्रिंट पूर्वावलोकन स्क्रीन ट्रिगर करते.</translation> <translation id="6022948604095165524">स्टार्टअपच्या वेळची क्रिया</translation> <translation id="6023030044732320798">ARC रनटाइमला दिला जाणारा धोरणांचा संच निर्दिष्ट करते. हे मूल्य वैध JSON असणे आवश्यक आहे. @@ -2207,7 +2207,7 @@ <translation id="7258823566580374486">दूरस्थ प्रवेश होस्टचे झाकणे सक्षम करा</translation> <translation id="7260277299188117560">p2p सक्षम केलेले स्वयं अपडेट</translation> <translation id="7261252191178797385">डिव्हाइस वॉलपेपर प्रतिमा</translation> -<translation id="7266471712301230894">या धोरणाला <ph name="PRODUCT_NAME" /> ६४ मधून काढून टाकले आहे. +<translation id="7266471712301230894">या धोरणाला <ph name="PRODUCT_NAME" /> 6 मधून काढले गेले आहे गहाळ प्लग-इनचे आपोआप शोध आणि इंस्टॉलेशन यापुढे सपोर्ट करणार नाही.</translation> <translation id="7267809745244694722">कार्य की वर मीडिया की डीफॉल्ट</translation> @@ -2456,7 +2456,7 @@ तुम्ही ही सेटिंग बंद केल्यास, बुकमार्क जोडले, काढले किंवा सुधारित केले जाऊ शकत नाहीत. विद्यमान असलेले बुकमार्क अद्याप उपलब्ध आहेत.</translation> <translation id="802147957407376460">स्क्रीन 0 अंश फिरवा</translation> <translation id="8044493735196713914">डिव्हाइस बूट मोडचा अहवाल द्या</translation> -<translation id="8050080920415773384">मुळ मुद्रण</translation> +<translation id="8050080920415773384">मुळ प्रिंट</translation> <translation id="8059164285174960932">URL जिथे दूरस्थ प्रवेश क्लायंटनी त्यांचे प्रमाणीकरण टोकन मिळवावे</translation> <translation id="806280865577636339">हे धोरण सत्य वर सेट केले असल्यास, अॅक्सेसयोग्यता पर्याय नेहमी सिस्टम ट्रे मेनू मध्ये दिसतात. @@ -2511,7 +2511,7 @@ हे धोरण सेट न करता सोडल्यास, उच्च तीव्रता मोड सुरुवातीस अक्षम असतो परंतु कोणत्याही वेळी वापरकर्त्याद्वारे सक्षम केले जाऊ शकते.</translation> <translation id="815061180603915310">सक्षम केलेल्यावर सेट केल्यास हे धोरण तात्पुरत्या मोडवर स्विच केले जाण्यासाठी प्रोफाईलला सक्ती करते. हे धोरण OS धोरण (उदा. Windows वरील GPO) म्हणून निर्दिष्ट केल्यास ते सिस्टम वरील प्रत्येक प्रोफाईलवर लागू होईल; धोरण क्लाउड धोरण म्हणून सेट केल्यास ते व्यवस्थापित केलेल्या खात्यासह साइन इन केलेल्या प्रोफाईलवरच लागू होईल. - या मोडमध्ये वापरकर्ता सत्रासाठीच डिस्कवर प्रोफाईल डेटा कायम ठेवला जातो. ब्राउझर बंद झाल्यानंतर ब्राउझर इतिहास, विस्तार आणि त्यांचा डेटा, कुकीज आणि वेब डेटाबेस सारखा वेब डेटा यासारखी वैशिष्ट्ये संरक्षित केली जात नाहीत. तथापि हे डिस्कवर कोणताही डेटा व्यक्तिचलितपणे डाउनलोड करण्यापासून, पृष्ठे जतन करणे किंवा त्यांचे मुद्रण करण्यापासून वापरकर्त्यास प्रतिबंधित करत नाही. + या मोडमध्ये वापरकर्ता सत्रासाठीच डिस्कवर प्रोफाईल डेटा कायम ठेवला जातो. ब्राउझर बंद झाल्यानंतर ब्राउझर इतिहास, विस्तार आणि त्यांचा डेटा, कुकीज आणि वेब डेटाबेस सारखा वेब डेटा यासारखी वैशिष्ट्ये संरक्षित केली जात नाहीत. तथापि हे डिस्कवर कोणताही डेटा व्यक्तिचलितपणे डाउनलोड करण्यापासून, पृष्ठे जतन करणे किंवा त्यांचे प्रिंट करण्यापासून वापरकर्त्यास प्रतिबंधित करत नाही. वापरकर्त्याने संकालन सक्षम केल्यास हा सर्व डेटा अगदी नियमित प्रोफाईलप्रमाणे त्याच्या संकालित प्रोफाईलमध्ये संरक्षित केला जातो. धोरणाद्वारे गुप्त मोड स्पष्टपणे अक्षम केलेला नसल्यास तो देखील उपलब्ध असतो. @@ -2552,7 +2552,7 @@ <translation id="8259592978873597235">हे धोरण सत्य वर सेट केले असल्यास किंवा सेट केले नसल्यास, व्हिडिओ प्ले होत असताना वापरकर्ता निष्क्रिय होण्याचा विचार करत नाही. हे निष्क्रिय विलंबास, स्क्रीन अंधुक विलंब, स्क्रीन बंद विलंब आणि स्क्रीन लॉक विलंबास होण्यापासून आणि संबंधित कारवाई केली जाण्यापासून प्रतिबंध करते. हे धोरण असत्य वर सेट केलेले असल्यास, व्हिडिओ अॅक्टिव्हिटी वापरकर्त्यास निष्क्रिय होण्याचा विचार करण्यापासून प्रतिबंध करत नाही.</translation> -<translation id="8274603902181597201">वापरकर्त्याची एन्क्रिप्ट होम डिरेक्टरी पुसा आणि नवीन एक्स्टें४-एन्क्रिप्टेड होम डिरेक्टरीसोबत सुरुवात करा.</translation> +<translation id="8274603902181597201">वापरकर्त्याची एन्क्रिप्ट होम डिरेक्टरी पुसा आणि नवीन एक्स्टें4-एन्क्रिप्टेड होम डिरेक्टरीसोबत सुरुवात करा.</translation> <translation id="8279832363395120715">प्रॉक्सी रिझोल्यूशन दरम्यान <ph name="PRODUCT_NAME" /> नी वापरलेले https:// URL चे गोपनीय आणि सुरक्षा संवेदनशील भाग PAC स्क्रिप्टवर (प्रॉक्सी स्वयं कॉन्फिगरेशन) पास करण्यापूर्वी स्ट्रिप करते. सत्य असते तेव्हा, सुरक्षा वैशिष्ट्य सक्षम केलेले असते आणि PAC स्क्रिप्टवर सबमिट करण्यापूर्वी https:// URL स्ट्रिप केलेल्या असतात. अशा पद्धतीने PAC स्क्रिप्ट सामान्यपणे कूटबद्ध केलेल्या चॅनेलने (URL चा पथ आणि क्वेरीसारख्या) संरक्षित केलेला डेटा पाहण्यास सक्षम नसते.
diff --git a/components/policy/resources/policy_templates_te.xtb b/components/policy/resources/policy_templates_te.xtb index bdc5e60..f2f045c 100644 --- a/components/policy/resources/policy_templates_te.xtb +++ b/components/policy/resources/policy_templates_te.xtb
@@ -2010,8 +2010,7 @@ ఈ సెట్టింగ్ వినియోగదారును Google ప్రమాణీకరణ అవసరమయ్యే నిర్వహిత పరికరంలో లాగిన్ చేయనీయకుండా నిరోధించదు. వినియోగదారు ఇప్పటికీ ఇతర డొమైన్ల నుండి సైన్ ఇన్ చేయడానికి అనుమతించబడతారు, కానీ - ఆ ఖాతాలతో G Suite ఉపయోగించడానికి ప్రయత్నించినప్పుడు ఎర్రర్ ఉంది - అనే సందేశం అందుకుంటారు. + ఆ ఖాతాలతో G Suite ఉపయోగించడానికి ప్రయత్నించినప్పుడు ఎర్రర్ సందేశం అందుకుంటారు. మీరు ఈ సెట్టింగ్ను ఖాళీగా వదిలేసినా/కాన్ఫిగర్ చేయకపోయినా, వినియోగదారు ఏ ఖాతాతోనైనా G Suiteని యాక్సెస్ చేయగలరు.
diff --git a/components/previews/content/previews_content_util.cc b/components/previews/content/previews_content_util.cc index f2ab2e7..69ebc37 100644 --- a/components/previews/content/previews_content_util.cc +++ b/components/previews/content/previews_content_util.cc
@@ -4,6 +4,8 @@ #include "components/previews/content/previews_content_util.h" +#include "base/metrics/histogram_macros.h" +#include "components/previews/core/previews_user_data.h" #include "net/url_request/url_request.h" namespace previews { @@ -53,15 +55,29 @@ bool is_https = url_request.url().SchemeIs(url::kHttpsScheme); // If a server preview is set, retain only the bits determined for the server. - // |previes_state| must already have been updated for server previews from the - // main frame response headers (so if they are set here, then they are the - // specify the committed preview). + // |previews_state| must already have been updated for server previews from + // the main frame response headers (so if they are set here, then they are + // the specify the committed preview). Note: for Server LoFi we keep the + // Client LoFi bit on so that it is applied to both HTTP and HTTPS images. if (previews_state & (content::SERVER_LITE_PAGE_ON | content::SERVER_LOFI_ON)) { return previews_state & (content::SERVER_LITE_PAGE_ON | content::SERVER_LOFI_ON | content::CLIENT_LOFI_ON); } + previews::PreviewsUserData* previews_user_data = + previews::PreviewsUserData::GetData(url_request); + if (previews_user_data && + previews_user_data->cache_control_no_transform_directive()) { + if (HasEnabledPreviews(previews_state)) { + UMA_HISTOGRAM_ENUMERATION( + "Previews.CacheControlNoTransform.BlockedPreview", + GetMainFramePreviewsType(previews_state), + previews::PreviewsType::LAST); + } + return content::PREVIEWS_OFF; + } + // Make priority decision among allow client preview types that can be decided // at Commit time. if (previews_state & content::NOSCRIPT_ON) { @@ -87,8 +103,12 @@ content::PreviewsState previews_state) { if (previews_state & content::SERVER_LITE_PAGE_ON) { return previews::PreviewsType::LITE_PAGE; + } else if (previews_state & content::SERVER_LOFI_ON) { + return previews::PreviewsType::LOFI; } else if (previews_state & content::NOSCRIPT_ON) { return previews::PreviewsType::NOSCRIPT; + } else if (previews_state & content::CLIENT_LOFI_ON) { + return previews::PreviewsType::LOFI; } return previews::PreviewsType::NONE; }
diff --git a/components/previews/content/previews_content_util.h b/components/previews/content/previews_content_util.h index 28e7f91..6063ef8e 100644 --- a/components/previews/content/previews_content_util.h +++ b/components/previews/content/previews_content_util.h
@@ -30,8 +30,10 @@ content::PreviewsState previews_state); // Returns the effective PreviewsType known on a main frame basis given the -// |previews_state| bitmask for the committed main frame. Will return NONE -// for LoFi since it would be determined at image subresource load time. +// |previews_state| bitmask for the committed main frame. This uses the same +// previews precendence consideration as |DetermineCommittedClientPreviewsState| +// in case it is called on a PreviewsState value that has not been filtered +// through that method. previews::PreviewsType GetMainFramePreviewsType( content::PreviewsState previews_state);
diff --git a/components/previews/content/previews_content_util_unittest.cc b/components/previews/content/previews_content_util_unittest.cc index 2734f29..6989f32c 100644 --- a/components/previews/content/previews_content_util_unittest.cc +++ b/components/previews/content/previews_content_util_unittest.cc
@@ -150,19 +150,34 @@ } TEST_F(PreviewsContentUtilTest, GetMainFramePreviewsType) { - // Main frame preview cases: + // Simple cases: EXPECT_EQ(previews::PreviewsType::LITE_PAGE, previews::GetMainFramePreviewsType(content::SERVER_LITE_PAGE_ON)); + EXPECT_EQ(previews::PreviewsType::LOFI, + previews::GetMainFramePreviewsType(content::SERVER_LOFI_ON)); EXPECT_EQ(previews::PreviewsType::NOSCRIPT, previews::GetMainFramePreviewsType(content::NOSCRIPT_ON)); + EXPECT_EQ(previews::PreviewsType::LOFI, + previews::GetMainFramePreviewsType(content::CLIENT_LOFI_ON)); // NONE cases: EXPECT_EQ(previews::PreviewsType::NONE, previews::GetMainFramePreviewsType(content::PREVIEWS_UNSPECIFIED)); EXPECT_EQ(previews::PreviewsType::NONE, - previews::GetMainFramePreviewsType(content::CLIENT_LOFI_ON)); - EXPECT_EQ(previews::PreviewsType::NONE, - previews::GetMainFramePreviewsType(content::SERVER_LOFI_ON)); + previews::GetMainFramePreviewsType(content::PREVIEWS_NO_TRANSFORM)); + + // Precedence cases: + EXPECT_EQ(previews::PreviewsType::LITE_PAGE, + previews::GetMainFramePreviewsType( + content::SERVER_LITE_PAGE_ON | content::SERVER_LOFI_ON | + content::NOSCRIPT_ON | content::CLIENT_LOFI_ON)); + EXPECT_EQ(previews::PreviewsType::LOFI, + previews::GetMainFramePreviewsType(content::SERVER_LOFI_ON | + content::NOSCRIPT_ON | + content::CLIENT_LOFI_ON)); + EXPECT_EQ(previews::PreviewsType::NOSCRIPT, + previews::GetMainFramePreviewsType(content::NOSCRIPT_ON | + content::CLIENT_LOFI_ON)); } } // namespace
diff --git a/components/previews/core/previews_user_data.cc b/components/previews/core/previews_user_data.cc index 37cb2e83..50b2d18f 100644 --- a/components/previews/core/previews_user_data.cc +++ b/components/previews/core/previews_user_data.cc
@@ -12,12 +12,16 @@ const void* const kPreviewsUserDataKey = &kPreviewsUserDataKey; PreviewsUserData::PreviewsUserData(uint64_t page_id) - : page_id_(page_id), committed_previews_type_(PreviewsType::NONE) {} + : page_id_(page_id), + cache_control_no_transform_directive_(false), + committed_previews_type_(PreviewsType::NONE) {} PreviewsUserData::~PreviewsUserData() {} std::unique_ptr<PreviewsUserData> PreviewsUserData::DeepCopy() const { std::unique_ptr<PreviewsUserData> copy(new PreviewsUserData(page_id_)); + copy->cache_control_no_transform_directive_ = + cache_control_no_transform_directive_; copy->SetCommittedPreviewsType(committed_previews_type_); return copy; }
diff --git a/components/previews/core/previews_user_data.h b/components/previews/core/previews_user_data.h index a1fdc83..16e070eb 100644 --- a/components/previews/core/previews_user_data.h +++ b/components/previews/core/previews_user_data.h
@@ -36,11 +36,24 @@ // A session unique ID related to this navigation. uint64_t page_id() const { return page_id_; } + // Sets that the page load received the Cache-Control:no-transform + // directive. Expected to be set upon receiving a committed response. + void SetCacheControlNoTransformDirective() { + cache_control_no_transform_directive_ = true; + } + + // Returns whether the Cache-Control:no-transform directive has been + // detected for the request. Should not be called prior to receiving + // a committed response. + bool cache_control_no_transform_directive() { + return cache_control_no_transform_directive_; + } + // Sets the committed previews type. Should only be called once. void SetCommittedPreviewsType(previews::PreviewsType previews_type); // The committed previews type, if any. Otherwise PreviewsType::NONE. - previews::PreviewsType GetCommittedPreviewsType() const { + previews::PreviewsType committed_previews_type() const { return committed_previews_type_; } @@ -52,6 +65,7 @@ private: // A session unique ID related to this navigation. const uint64_t page_id_; + bool cache_control_no_transform_directive_; // The committed previews type, if any. previews::PreviewsType committed_previews_type_;
diff --git a/components/ssl_config/ssl_config_service_manager_pref.cc b/components/ssl_config/ssl_config_service_manager_pref.cc index f34c62e7..f924fe26 100644 --- a/components/ssl_config/ssl_config_service_manager_pref.cc +++ b/components/ssl_config/ssl_config_service_manager_pref.cc
@@ -202,6 +202,9 @@ } else if (tls13_variant == "draft22") { tls13_value = switches::kTLS13VariantDraft22; experiment_value = switches::kSSLVersionTLSv13; + } else if (tls13_variant == "draft23") { + tls13_value = switches::kTLS13VariantDraft23; + experiment_value = switches::kSSLVersionTLSv13; } else if (tls13_variant == "experiment2") { tls13_value = switches::kTLS13VariantExperiment2; experiment_value = switches::kSSLVersionTLSv13; @@ -323,6 +326,8 @@ config->version_max = net::SSL_PROTOCOL_VERSION_TLS1_2; } else if (tls13_variant_str == switches::kTLS13VariantDraft22) { config->tls13_variant = net::kTLS13VariantDraft22; + } else if (tls13_variant_str == switches::kTLS13VariantDraft23) { + config->tls13_variant = net::kTLS13VariantDraft23; } else if (tls13_variant_str == switches::kTLS13VariantExperiment2) { config->tls13_variant = net::kTLS13VariantExperiment2; }
diff --git a/components/ssl_config/ssl_config_service_manager_pref_unittest.cc b/components/ssl_config/ssl_config_service_manager_pref_unittest.cc index 346b982..a53bd9b3 100644 --- a/components/ssl_config/ssl_config_service_manager_pref_unittest.cc +++ b/components/ssl_config/ssl_config_service_manager_pref_unittest.cc
@@ -292,6 +292,27 @@ EXPECT_EQ(net::kTLS13VariantDraft22, ssl_config.tls13_variant); } +// Tests that Draft23 TLS 1.3 can be enabled via field trials. +TEST_F(SSLConfigServiceManagerPrefTest, TLS13VariantFeatureDraft23) { + // Toggle the field trial. + variations::testing::VariationParamsManager variation_params( + "TLS13Variant", {{"variant", "draft23"}}); + + TestingPrefServiceSimple local_state; + SSLConfigServiceManager::RegisterPrefs(local_state.registry()); + + std::unique_ptr<SSLConfigServiceManager> config_manager( + SSLConfigServiceManager::CreateDefaultManager( + &local_state, base::ThreadTaskRunnerHandle::Get())); + scoped_refptr<SSLConfigService> config_service(config_manager->Get()); + ASSERT_TRUE(config_service.get()); + + SSLConfig ssl_config; + config_service->GetSSLConfig(&ssl_config); + EXPECT_EQ(net::SSL_PROTOCOL_VERSION_TLS1_3, ssl_config.version_max); + EXPECT_EQ(net::kTLS13VariantDraft23, ssl_config.tls13_variant); +} + // Tests that the SSLVersionMax preference overwites the TLS 1.3 variant // field trial. TEST_F(SSLConfigServiceManagerPrefTest, TLS13SSLVersionMax) {
diff --git a/components/ssl_config/ssl_config_switches.cc b/components/ssl_config/ssl_config_switches.cc index 054ed91..49434ac4e 100644 --- a/components/ssl_config/ssl_config_switches.cc +++ b/components/ssl_config/ssl_config_switches.cc
@@ -26,6 +26,7 @@ const char kTLS13VariantDisabled[] = "disabled"; const char kTLS13VariantDraft22[] = "draft22"; +const char kTLS13VariantDraft23[] = "draft23"; const char kTLS13VariantExperiment2[] = "experiment2"; } // namespace switches
diff --git a/components/ssl_config/ssl_config_switches.h b/components/ssl_config/ssl_config_switches.h index 6c8832b..a80adaa8f 100644 --- a/components/ssl_config/ssl_config_switches.h +++ b/components/ssl_config/ssl_config_switches.h
@@ -16,6 +16,7 @@ extern const char kSSLVersionTLSv13[]; extern const char kTLS13VariantDisabled[]; extern const char kTLS13VariantDraft22[]; +extern const char kTLS13VariantDraft23[]; extern const char kTLS13VariantExperiment2[]; } // namespace switches
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb index 63bcf66..fc6abe3f 100644 --- a/components/strings/components_strings_am.xtb +++ b/components/strings/components_strings_am.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">ማረጋገጫ ያስፈልጋል</translation> <translation id="2079545284768500474">ቀልብስ</translation> <translation id="20817612488360358">የስርዓት ተኪ ቅንብሮች ስራ ላይ እንዲውሉ ተቀናብረዋል ግን ግልጽ የሆነ የተኪ ውቅርም ተገልጿል።</translation> -<translation id="2086652334978798447">በGoogle የሚጠቆም ግላዊነት የተላበሰ ይዘትን ለማግኘት በመለያ ወደ Chrome ይግቡ።</translation> <translation id="2091887806945687916">ድምፅ</translation> <translation id="2094505752054353250">የጎራ አለመዛመድ</translation> <translation id="2096368010154057602">ክፍል</translation> @@ -640,7 +639,6 @@ <translation id="5633066919399395251">በአሁኑ ጊዜ በ<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="563324245173044180">አታላይ ይዘት ታግዷል።</translation> <translation id="5659593005791499971">ኢሜይል</translation> -<translation id="5669703222995421982">ግላዊነት የተላበሰ ይዘት ያግኙ</translation> <translation id="5675650730144413517">ይህ ገጽ እየሠራ አይደለም</translation> <translation id="5685654322157854305">የመላኪያ አድራሻ ያክሉ</translation> <translation id="5689199277474810259">ወደ JSON ላክ</translation> @@ -811,7 +809,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> የደህንነት መስፈርቶችን አያከብርም።</translation> <translation id="721197778055552897">ስለዚህ ችግር <ph name="BEGIN_LINK" />ተጨማሪ ለመረዳት<ph name="END_LINK" /> ።</translation> <translation id="7219179957768738017">ግንኙነቱ <ph name="SSL_VERSION" />ን ይጠቀማል።</translation> -<translation id="7220019174139618249">የይለፍ ቃላትን ወደ «<ph name="FOLDER" />» መላክ አልተቻለም</translation> <translation id="7220786058474068424">በማስሄድ ላይ</translation> <translation id="724691107663265825">ፊት ያለው ጣቢያ ተንኮል-አዘል ዌር አለው</translation> <translation id="724975217298816891">የካርድ ዝርዝሮችዎን ለማዘመን የ<ph name="CREDIT_CARD" /> ጊዜ ማለፊያ ቀን እና ሲቪሲ ያስገቡ። አንዴ ካረጋገጡ በኋላ የካርድ ዝርዝሮችዎ ለዚህ ጣቢያ ይጋራሉ።</translation>
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb index e1f7d709..806c8fd 100644 --- a/components/strings/components_strings_ar.xtb +++ b/components/strings/components_strings_ar.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">يجب إدخال اسم المستخدم وكلمة المرور</translation> <translation id="2079545284768500474">تراجع</translation> <translation id="20817612488360358">تم تعيين إعدادات الخادم الوكيل ليتم استخدامها وتم أيضًا تحديد تهيئة صريحة للخادم الوكيل.</translation> -<translation id="2086652334978798447">للحصول على محتوى مخصص اقترحته Google، سجِّلْ الدخول إلى Chrome.</translation> <translation id="2091887806945687916">الصوت</translation> <translation id="2094505752054353250">النطاق غير متطابق</translation> <translation id="2096368010154057602">الإدارة</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251">يمكن حاليًا للمهاجمين على <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="563324245173044180">تم حظر المحتوى المُضلّل.</translation> <translation id="5659593005791499971">البريد الإلكتروني</translation> -<translation id="5669703222995421982">الحصول على محتوى مخصص</translation> <translation id="5675650730144413517">يتعذّر على هذه الصفحة العمل</translation> <translation id="5685654322157854305">إضافة عنوان الشحن</translation> <translation id="5689199277474810259">تصدير إلى JSON</translation> @@ -805,14 +803,13 @@ <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" /> آخر}two{<ph name="SHIPPING_OPTION_PREVIEW" /> وخياران (<ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />) آخران}few{<ph name="SHIPPING_OPTION_PREVIEW" /> و<ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> خيارات أخرى}many{<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="7182878459783632708">لم يتم تعيين أية سياسات</translation> +<translation id="7182878459783632708">لم يتم تعيين أي سياسات</translation> <translation id="7186367841673660872">تمت ترجمة هذه الصفحة من اللغة<ph name="ORIGINAL_LANGUAGE" />إلى اللغة<ph name="LANGUAGE_LANGUAGE" /></translation> <translation id="7192203810768312527">يوفِّر <ph name="SIZE" />. قد يتم تحميل بعض مواقع الويب بشكل أبطأ عند زيارتها في المرة القادمة.</translation> <translation id="719464814642662924">Visa</translation> <translation id="7210863904660874423">لا يلتزم <ph name="HOST_NAME" /> بمعايير الأمان.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />مزيد من المعلومات<ph name="END_LINK" /> حول هذه المشكلة.</translation> <translation id="7219179957768738017">الاتصال يستخدم <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">تعذّر تصدير كلمات المرور إلى "<ph name="FOLDER" />"</translation> <translation id="7220786058474068424">جارٍ المعالجة</translation> <translation id="724691107663265825">يحتوي موقع الويب المقصود على برامج ضارة</translation> <translation id="724975217298816891">أدخل تاريخ انتهاء الصلاحية ورمز التحقق من البطاقة (CVC) لـ <ph name="CREDIT_CARD" /> لتحديث تفاصيل بطاقتك. بعد تأكيدك، ستتم مشاركة تفاصيل بطاقتك مع هذا الموقع.</translation>
diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb index 233a724..0ba2167 100644 --- a/components/strings/components_strings_bg.xtb +++ b/components/strings/components_strings_bg.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Изисква се удостоверяване на самоличността</translation> <translation id="2079545284768500474">Отмяна</translation> <translation id="20817612488360358">За използване са зададени системни настройки за прокси сървъра, но е посочена и изрична конфигурация.</translation> -<translation id="2086652334978798447">За да получавате персонализирано съдържание, предлагано от Google, влезте в Chrome.</translation> <translation id="2091887806945687916">Звук</translation> <translation id="2094505752054353250">Несъответствие в домейна</translation> <translation id="2096368010154057602">Департамент</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251">Извършители на атака, понастоящем използващи <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="563324245173044180">Блокирахме измамно съдържание.</translation> <translation id="5659593005791499971">Имейл</translation> -<translation id="5669703222995421982">Получаване на персонализирано съдържание</translation> <translation id="5675650730144413517">Тази страница не работи</translation> <translation id="5685654322157854305">Добавяне на адрес за доставка</translation> <translation id="5689199277474810259">Експортиране във формат JSON</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> не се придържа към стандартите за сигурност.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Научете повече<ph name="END_LINK" /> за този проблем.</translation> <translation id="7219179957768738017">Връзката използва <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Паролите не могат да бъдат експортирани в папката „<ph name="FOLDER" />“</translation> <translation id="7220786058474068424">Обработва се</translation> <translation id="724691107663265825">На хоризонта се задава сайт със злонамерен софтуер</translation> <translation id="724975217298816891">Въведете датата на валидност и кода за проверка за <ph name="CREDIT_CARD" />, за да актуализирате данните за картата си. След като я потвърдите, те ще бъдат споделени с този сайт.</translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb index a22724a..b4beea5 100644 --- a/components/strings/components_strings_bn.xtb +++ b/components/strings/components_strings_bn.xtb
@@ -150,7 +150,6 @@ <translation id="2065985942032347596">প্রমাণীকরণ প্রয়োজন</translation> <translation id="2079545284768500474">পূর্বাবস্থায় ফিরুন</translation> <translation id="20817612488360358">সিস্টেম প্রক্সি সেটিংস ব্যবহার করার জন্য সেট আছে কিন্তু একটি সুনির্দিষ্ট প্রক্সি কনফিগারেশনও নির্দিষ্ট করা আছে৷</translation> -<translation id="2086652334978798447">Google দ্বারা প্রস্তাবিত ব্যক্তিগতকৃত সামগ্রী পেতে, Chrome এ সাইন ইন করুন।</translation> <translation id="2091887806945687916">আওয়াজ</translation> <translation id="2094505752054353250">ডোমেন মেলেনি</translation> <translation id="2096368010154057602">বিভাগ</translation> @@ -642,7 +641,6 @@ <translation id="5633066919399395251"><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="563324245173044180">প্রতারণামূলক কন্টেন্ট ব্লক করা হয়েছে।</translation> <translation id="5659593005791499971">ইমেল</translation> -<translation id="5669703222995421982">ব্যক্তিগতকৃত সামগ্রী পান</translation> <translation id="5675650730144413517">এই পৃষ্ঠাটি কাজ করছে না</translation> <translation id="5685654322157854305">শিপিং ঠিকানা যোগ করুন</translation> <translation id="5689199277474810259">JSON এ রপ্তানি করুন</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> নিরাপত্তা মান মেনে চলে না।</translation> <translation id="721197778055552897">এই সমস্যাটি সম্পর্কে <ph name="BEGIN_LINK" />আরও জানুন<ph name="END_LINK" />৷</translation> <translation id="7219179957768738017">এই সংযোগটি <ph name="SSL_VERSION" />টি ব্যবহার করে</translation> -<translation id="7220019174139618249">"<ph name="FOLDER" />" এ পাসওয়ার্ড এক্সপোর্ট করাযাবে না</translation> <translation id="7220786058474068424">প্রক্রিয়ায় রয়েছে</translation> <translation id="724691107663265825">এই সাইটটিতে ম্যালওয়্যার আছে</translation> <translation id="724975217298816891">আপনার কার্ডের বিবরণ আপডেট করার জন্য মেয়াদ শেষের তারিখ এবং <ph name="CREDIT_CARD" /> এর CVC লিখুন। আপনি নিশ্চিত করলে, আপনার কার্ডের বিবরণ এই সাইটের সাথে শেয়ার করা হবে।</translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb index 9752464..375c5b0 100644 --- a/components/strings/components_strings_ca.xtb +++ b/components/strings/components_strings_ca.xtb
@@ -26,7 +26,7 @@ <translation id="1151972924205500581">Es requereix una contrasenya</translation> <translation id="1152921474424827756">Accediu a una <ph name="BEGIN_LINK" />còpia emmagatzemada a la memòria cau<ph name="END_LINK" /> de la pàgina <ph name="URL" />.</translation> <translation id="1158211211994409885"><ph name="HOST_NAME" /> ha tancat la connexió de manera inesperada.</translation> -<translation id="1161325031994447685">Torneu-vos a connectar a la xarxa Wi-Fi</translation> +<translation id="1161325031994447685">Torna't a connectar a la xarxa Wi-Fi.</translation> <translation id="1165039591588034296">Error</translation> <translation id="1175364870820465910">&Imprimeix...</translation> <translation id="1181037720776840403">Suprimeix</translation> @@ -149,7 +149,6 @@ <translation id="2065985942032347596">Es necessita autenticació</translation> <translation id="2079545284768500474">Desfés</translation> <translation id="20817612488360358">S'ha definit la configuració del servidor intermediari del sistema perquè es pugui utilitzar, però també s'ha especificat una configuració del servidor intermediari explícita.</translation> -<translation id="2086652334978798447">Inicia la sessió a Chrome perquè Google et suggereixi contingut personalitzat</translation> <translation id="2091887806945687916">So</translation> <translation id="2094505752054353250">Els dominis no coincideixen.</translation> <translation id="2096368010154057602">Departament</translation> @@ -210,7 +209,7 @@ <translation id="2498091847651709837">Escaneja una targeta nova</translation> <translation id="2501278716633472235">Enrere</translation> <translation id="2503184589641749290">Targetes de dèbit i de prepagament acceptades</translation> -<translation id="2515629240566999685">Comproveu el senyal a la vostra zona</translation> +<translation id="2515629240566999685">Comprova el senyal a la teva zona.</translation> <translation id="2524461107774643265">Afegeix més informació</translation> <translation id="2536110899380797252">Afegeix una adreça</translation> <translation id="2539524384386349900">Detecta</translation> @@ -291,7 +290,7 @@ <translation id="3063697135517575841">Chrome no ha pogut confirmar la teva targeta. Torna-ho a provar més tard.</translation> <translation id="3064966200440839136">Per pagar amb una aplicació externa sortiràs del mode d'incògnit. Vols continuar?</translation> <translation id="3083099961703215236">{COUNT,plural, =0{Cap}=1{1 contrasenya}other{# contrasenyes}}</translation> -<translation id="3093245981617870298">Esteu fora de línia.</translation> +<translation id="3093245981617870298">No tens connexió</translation> <translation id="3096100844101284527">Afegeix l'adreça de recollida</translation> <translation id="3105172416063519923">Identificador de l'element:</translation> <translation id="3109728660330352905">No teniu permís per veure aquesta pàgina.</translation> @@ -391,7 +390,7 @@ <translation id="3704609568417268905"><ph name="TIME" /> <ph name="BOOKMARKED" /> <ph name="TITLE" /> <ph name="DOMAIN" /></translation> <translation id="370665806235115550">S'està carregant...</translation> <translation id="3712624925041724820">Llicències exhaurides</translation> -<translation id="3714780639079136834">Activeu les dades mòbils o la Wi-Fi</translation> +<translation id="3714780639079136834">Activa les dades mòbils o la Wi-Fi.</translation> <translation id="3715597595485130451">Connexió a xarxes Wi-Fi</translation> <translation id="3717027428350673159"><ph name="BEGIN_LINK" />Comproveu el servidor intermediari, el tallafoc i la configuració de DNS<ph name="END_LINK" /></translation> <translation id="372429172604983730">Entre les aplicacions que poden provocar aquest error hi ha l'antivirus, el tallafoc i el programari de filtratge web o del servidor intermediari.</translation> @@ -438,7 +437,7 @@ <translation id="4116663294526079822">Permet sempre en aquest lloc web</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> -<translation id="4130226655945681476">Comproveu els cables de xarxa, el mòdem i l'encaminador</translation> +<translation id="4130226655945681476">Comprova els cables de xarxa, el mòdem i l'encaminador.</translation> <translation id="413544239732274901">Més informació</translation> <translation id="4148925816941278100">American Express</translation> <translation id="4151403195736952345">Utilitza el valor predeterminat global (detecta)</translation> @@ -500,7 +499,7 @@ <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation> <translation id="4708268264240856090">La connexió s'ha interromput</translation> <translation id="471880041731876836">No tens permís per visitar aquest lloc web</translation> -<translation id="4722547256916164131"><ph name="BEGIN_LINK" />Executar el Diagnòstic de xarxa de Windows<ph name="END_LINK" /></translation> +<translation id="4722547256916164131"><ph name="BEGIN_LINK" />Executa el Diagnòstic de xarxa de Windows<ph name="END_LINK" />.</translation> <translation id="472349245089439925">El teu pagament</translation> <translation id="4726672564094551039">Torna a carregar les polítiques</translation> <translation id="4728558894243024398">Plataforma</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251">És possible que els atacants del lloc web <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> provin d'instal·lar programes perillosos a l'ordinador per robar o suprimir la teva informació (per exemple, les fotos, les contrasenyes, els missatges i les targetes de crèdit). <ph name="BEGIN_LEARN_MORE_LINK" />Més informació<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="563324245173044180">S'ha bloquejat el contingut enganyós.</translation> <translation id="5659593005791499971">Correu electrònic</translation> -<translation id="5669703222995421982">Obtén contingut personalitzat</translation> <translation id="5675650730144413517">Aquesta pàgina no funciona</translation> <translation id="5685654322157854305">Afegeix una adreça d'enviament</translation> <translation id="5689199277474810259">Exporta a JSON</translation> @@ -693,7 +691,7 @@ <translation id="6144381551823904650">{COUNT,plural, =0{Cap}=1{1 contrasenya (sincronitzada)}other{# contrasenyes (sincronitzades)}}</translation> <translation id="6146055958333702838">Reviseu els cables i reinicieu els encaminadors, els mòdems o altres dispositius de xarxa que feu servir.</translation> -<translation id="614940544461990577">Proveu aquestes solucions:</translation> +<translation id="614940544461990577">Prova el següent:</translation> <translation id="6151417162996330722">El període de validesa del certificat del servidor és massa gran.</translation> <translation id="6157877588268064908">Per veure els mètodes i els requisits d'enviament, selecciona una adreça</translation> <translation id="6165508094623778733">Més informació</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> no compleix la normativa de seguretat.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Més informació<ph name="END_LINK" /> sobre aquest problema.</translation> <translation id="7219179957768738017">La connexió utilitza <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">No es poden exportar les contrasenyes a <ph name="FOLDER" /></translation> <translation id="7220786058474068424">S'està processant</translation> <translation id="724691107663265825">Aquest lloc web conté programari maliciós</translation> <translation id="724975217298816891">Introdueix la data de caducitat i el CVC de la targeta <ph name="CREDIT_CARD" /> per actualitzar-ne els detalls. Un cop confirmada, els detalls de la targeta es compartiran amb aquest lloc.</translation> @@ -966,7 +963,7 @@ <translation id="8332188693563227489">S'ha rebutjat l'accés a <ph name="HOST_NAME" /></translation> <translation id="834457929814110454">Si enteneu el risc que suposa per a la vostra seguretat, podeu <ph name="BEGIN_LINK" />visitar aquest lloc<ph name="END_LINK" /> abans que no s'hagin suprimit els programes perjudicials.</translation> <translation id="8349305172487531364">Barra d'adreces d'interès</translation> -<translation id="8363502534493474904">Desactiveu el mode d'avió</translation> +<translation id="8363502534493474904">Desactiva el mode d'avió.</translation> <translation id="8364627913115013041">No s'ha definit.</translation> <translation id="8368476060205742148">Serveis de Google Play</translation> <translation id="8380941800586852976">Perillosa</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb index 40c5d73..01e3720 100644 --- a/components/strings/components_strings_cs.xtb +++ b/components/strings/components_strings_cs.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Vyžaduje se ověření</translation> <translation id="2079545284768500474" /> <translation id="20817612488360358">Jako aktivní jsou nakonfigurována systémová nastavení proxy serveru, je však určena i explicitní konfigurace proxy serveru.</translation> -<translation id="2086652334978798447">Chcete-li od Googlu získat personalizované návrhy obsahu, přihlaste se do Chromu.</translation> <translation id="2091887806945687916">Zvuk</translation> <translation id="2094505752054353250">Neshoda domén</translation> <translation id="2096368010154057602">Oddělení</translation> @@ -637,7 +636,6 @@ <translation id="5633066919399395251">Útočníci, kteří se aktuálně nacházejí na webu <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />, se mohou pokusit nainstalovat vám do počítače nebezpečné programy, které mohou ukrást nebo smazat vaše informace (například fotky, hesla, zprávy nebo platební karty). <ph name="BEGIN_LEARN_MORE_LINK" />Další informace<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="563324245173044180">Byl zablokován klamavý obsah.</translation> <translation id="5659593005791499971">E-mail</translation> -<translation id="5669703222995421982">Získejte personalizovaný obsah</translation> <translation id="5675650730144413517">Tato stránka nefunguje</translation> <translation id="5685654322157854305">Přidat dodací adresu</translation> <translation id="5689199277474810259">Exportovat do formátu JSON</translation> @@ -807,7 +805,6 @@ <translation id="7210863904660874423">Web <ph name="HOST_NAME" /> nevyhovuje bezpečnostním standardům.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Další informace<ph name="END_LINK" /> o tomto problému.</translation> <translation id="7219179957768738017">Připojení používá protokol <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Hesla nelze exportovat do složky „<ph name="FOLDER" />“</translation> <translation id="7220786058474068424">Zpracovávání</translation> <translation id="724691107663265825">Webové stránky, které chcete otevřít, obsahují malware</translation> <translation id="724975217298816891">Chcete-li aktualizovat údaje o kartě, zadejte datum vypršení platnosti a kód CVC karty <ph name="CREDIT_CARD" />. Po ověření budou údaje o kartě sdíleny s tímto webem.</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb index 6d005fd..fdb08fc 100644 --- a/components/strings/components_strings_da.xtb +++ b/components/strings/components_strings_da.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Godkendelse påkrævet</translation> <translation id="2079545284768500474">Fortryd</translation> <translation id="20817612488360358">Indstillingerne for systemproxy er angivet at blive brugt, men en eksplicit proxykonfiguration er også angivet.</translation> -<translation id="2086652334978798447">Log ind på Chrome for at hente brugertilpasset indhold, som er foreslået af Chrome.</translation> <translation id="2091887806945687916">Lyd</translation> <translation id="2094505752054353250">Uoverensstemmelse mellem domæner</translation> <translation id="2096368010154057602">Departement</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251">Brugere med ondsindede hensigter, der i øjeblikket er på <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />, kan forsøge at installere farlige programmer på din computer, der stjæler eller sletter dine oplysninger (f.eks. fotos, adgangskoder, beskeder og kreditkort). <ph name="BEGIN_LEARN_MORE_LINK" />Få flere oplysninger<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="563324245173044180">Vildledende indhold er blokeret.</translation> <translation id="5659593005791499971">E-mail</translation> -<translation id="5669703222995421982">Få tilpasset indhold</translation> <translation id="5675650730144413517">Denne side virker ikke</translation> <translation id="5685654322157854305">Tilføj leveringsadresse</translation> <translation id="5689199277474810259">Eksportér i JSON</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> overholder ikke sikkerhedsstandarderne.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Få flere oplysninger<ph name="END_LINK" /> om dette problem.</translation> <translation id="7219179957768738017">Forbindelsen bruger <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Adgangskoderne kan ikke eksporteres til "<ph name="FOLDER" />"</translation> <translation id="7220786058474068424">Behandler</translation> <translation id="724691107663265825">Det site, du er på vej til, indeholder malware</translation> <translation id="724975217298816891">Opdater dine kortoplysninger ved at indtaste udløbsdatoen og kontrolkoden for <ph name="CREDIT_CARD" />. Når du bekræfter, deles dine kortoplysninger med dette website.</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb index f727339..f30083c 100644 --- a/components/strings/components_strings_de.xtb +++ b/components/strings/components_strings_de.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Authentifizierung erforderlich</translation> <translation id="2079545284768500474">Rückgängig machen</translation> <translation id="20817612488360358">Die System-Proxy-Einstellungen sind zur Verwendung angegeben, gleichzeitig wurde aber auch eine explizite Proxy-Konfiguration festgelegt.</translation> -<translation id="2086652334978798447">Melden Sie sich in Chrome an, um personalisierte, von Google vorgeschlagene Inhalte zu erhalten.</translation> <translation id="2091887806945687916">Ton</translation> <translation id="2094505752054353250">Domains stimmen nicht überein.</translation> <translation id="2096368010154057602">Verwaltungsbezirk</translation> @@ -364,7 +363,7 @@ <translation id="3530944546672790857">{COUNT,plural, =0{Mindestens 1 Eintrag auf synchronisierten Geräten}=1{1 Eintrag (und weitere auf synchronisierten Geräten)}other{# Einträge (und weitere auf synchronisierten Geräten)}}</translation> <translation id="3539171420378717834">Kopie dieser Karte auf diesem Gerät speichern</translation> <translation id="3542684924769048008">Passwort verwenden für:</translation> -<translation id="3549644494707163724">Alle synchronisierten Daten mit Ihrer eigenen Synchronisierungspassphrase verschlüsseln</translation> +<translation id="3549644494707163724">Alle synchronisierten Daten mit meiner eigenen Synchronisierungspassphrase verschlüsseln</translation> <translation id="3556433843310711081">Dein Administrator kann die Blockierung aufheben</translation> <translation id="3566021033012934673">Dies ist keine sichere Verbindung</translation> <translation id="3574305903863751447"><ph name="CITY" />, <ph name="STATE" /> <ph name="COUNTRY" /></translation> @@ -640,7 +639,6 @@ <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="5659593005791499971">E-Mail-Adresse</translation> -<translation id="5669703222995421982">Personalisierte Inhalte erhalten</translation> <translation id="5675650730144413517">Diese Seite funktioniert nicht</translation> <translation id="5685654322157854305">Versandadresse hinzufügen</translation> <translation id="5689199277474810259">Als JSON exportieren</translation> @@ -811,7 +809,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> erfüllt die Sicherheitsstandards nicht.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Weitere Informationen<ph name="END_LINK" /> zu diesem Problem.</translation> <translation id="7219179957768738017">Die Verbindung verwendet <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Passwort kann nicht in "<ph name="FOLDER" />" exportiert werden</translation> <translation id="7220786058474068424">Verarbeitung läuft</translation> <translation id="724691107663265825">Malware auf nachfolgender Website</translation> <translation id="724975217298816891">Geben Sie das Gültigkeitsdatum und den CVC für <ph name="CREDIT_CARD" /> ein, um Ihre Kartendetails zu aktualisieren. Nach erfolgter Bestätigung werden die Kartendetails an diese Website weitergegeben.</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb index db36f8b..e050b14 100644 --- a/components/strings/components_strings_el.xtb +++ b/components/strings/components_strings_el.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Απαιτείται έλεγχος ταυτότητας</translation> <translation id="2079545284768500474">Αναίρεση</translation> <translation id="20817612488360358">Οι ρυθμίσεις διακομιστή μεσολάβησης του συστήματος έχουν οριστεί για να χρησιμοποιηθούν, αλλά καθορίζεται επίσης μια ρητή διαμόρφωση του διακομιστή μεσολάβησης.</translation> -<translation id="2086652334978798447">Για να λάβετε εξατομικευμένο περιεχόμενο που προτείνεται από την Google, συνδεθείτε στο Chrome.</translation> <translation id="2091887806945687916">Ήχος</translation> <translation id="2094505752054353250">Αναντιστοιχία τομέα</translation> <translation id="2096368010154057602">Νομός</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251">Οι εισβολείς που βρίσκονται αυτήν τη στιγμή στον ιστότοπο <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="563324245173044180">Το παραπλανητικό περιεχόμενο αποκλείστηκε.</translation> <translation id="5659593005791499971">Διεύθυνση ηλεκτρονικού ταχυδρομείου</translation> -<translation id="5669703222995421982">Λήψη εξατομικευμένου περιεχομένου</translation> <translation id="5675650730144413517">Αυτή η σελίδα δεν λειτουργεί</translation> <translation id="5685654322157854305">Προσθήκη διεύθυνσης αποστολής</translation> <translation id="5689199277474810259">Εξαγωγή σε JSON</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423">Ο κεντρικός υπολογιστής <ph name="HOST_NAME" /> δεν συμμορφώνεται με τα πρότυπα ασφάλειας.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Μάθετε περισσότερα<ph name="END_LINK" /> σχετικά με αυτό το πρόβλημα.</translation> <translation id="7219179957768738017">Στη σύνδεση χρησιμοποιείται <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Δεν είναι δυνατή η εξαγωγή κωδικών πρόσβασης στο "<ph name="FOLDER" />"</translation> <translation id="7220786058474068424">Επεξεργασία</translation> <translation id="724691107663265825">Ο ιστότοπος μετάβασης περιέχει κακόβουλο λογισμικό</translation> <translation id="724975217298816891">Εισαγάγετε την ημερομηνία λήξης και τον κωδικό CVC για την πιστωτική κάρτα <ph name="CREDIT_CARD" />, προκειμένου να ενημερώσετε τα στοιχεία της κάρτας σας. Μετά την επιβεβαίωση, θα κοινοποιηθούν τα στοιχεία της κάρτας σας με αυτόν τον ιστότοπο.</translation>
diff --git a/components/strings/components_strings_en-GB.xtb b/components/strings/components_strings_en-GB.xtb index b9d9bd0..fd497fc9 100644 --- a/components/strings/components_strings_en-GB.xtb +++ b/components/strings/components_strings_en-GB.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Authentication Required</translation> <translation id="2079545284768500474">Undo</translation> <translation id="20817612488360358">System proxy settings are set to be used but an explicit proxy configuration is also specified.</translation> -<translation id="2086652334978798447">To get personalised content suggested by Google, sign in to Chrome.</translation> <translation id="2091887806945687916">Sound</translation> <translation id="2094505752054353250">Domain mismatch</translation> <translation id="2096368010154057602">Department</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251">Attackers currently on <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> might attempt to install dangerous programs on your computer 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> <translation id="563324245173044180">Deceptive content blocked.</translation> <translation id="5659593005791499971">Email</translation> -<translation id="5669703222995421982">Get personalised content</translation> <translation id="5675650730144413517">This page isn’t working</translation> <translation id="5685654322157854305">Add delivery address</translation> <translation id="5689199277474810259">Export to JSON</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> doesn't adhere to security standards.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Learn more<ph name="END_LINK" /> about this problem.</translation> <translation id="7219179957768738017">The connection uses <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Can't export passwords to '<ph name="FOLDER" />'</translation> <translation id="7220786058474068424">Processing</translation> <translation id="724691107663265825">The site ahead contains malware</translation> <translation id="724975217298816891">Enter the expiry date and CVC for <ph name="CREDIT_CARD" /> to update your card details. Once you've confirmed, your card details will be shared with this site.</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb index a05ba2d..59d7878 100644 --- a/components/strings/components_strings_es-419.xtb +++ b/components/strings/components_strings_es-419.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Se requiere autenticación</translation> <translation id="2079545284768500474">Deshacer</translation> <translation id="20817612488360358">Se ha establecido la configuración de proxy del sistema, pero también se ha especificado una configuración explícita de proxy.</translation> -<translation id="2086652334978798447">Para obtener contenido personalizado y sugerido por Google, accede a tu cuenta en Chrome.</translation> <translation id="2091887806945687916">Sonido</translation> <translation id="2094505752054353250">El dominio no coincide.</translation> <translation id="2096368010154057602">Departamento</translation> @@ -642,7 +641,6 @@ <translation id="5633066919399395251">Es posible que los atacantes que actualmente se encuentran en <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> intenten instalar programas peligrosos en tu computadora para robar o borrar información (p. ej., fotos, contraseñas, mensajes y tarjetas de crédito). <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="563324245173044180">Se bloqueó contenido engañoso.</translation> <translation id="5659593005791499971">Correo electrónico</translation> -<translation id="5669703222995421982">Obtener contenido personalizado</translation> <translation id="5675650730144413517">Esta página no funciona</translation> <translation id="5685654322157854305">Agregar dirección de envío</translation> <translation id="5689199277474810259">Exportar a JSON</translation> @@ -813,7 +811,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> no cumple con los estándares de seguridad.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /> acerca de este problema.</translation> <translation id="7219179957768738017">La conexión usa <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">No se pueden exportar las contraseñas a "<ph name="FOLDER" />"</translation> <translation id="7220786058474068424">Procesando</translation> <translation id="724691107663265825">Este sitio web contiene software malicioso</translation> <translation id="724975217298816891">Ingresa la fecha de vencimiento y el CVC de la tarjeta <ph name="CREDIT_CARD" /> para actualizar sus datos. Después de confirmarla, los datos de tu tarjeta se compartirán con este sitio.</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb index 0bac4f8..b2c57e72 100644 --- a/components/strings/components_strings_es.xtb +++ b/components/strings/components_strings_es.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Se requiere autenticación</translation> <translation id="2079545284768500474">Deshacer</translation> <translation id="20817612488360358">Se ha establecido la configuración del proxy del sistema, pero también se han especificado ajustes de proxy explícitos.</translation> -<translation id="2086652334978798447">Para obtener contenido personalizado sugerido por Google, inicia sesión en Chrome.</translation> <translation id="2091887806945687916">Sonido</translation> <translation id="2094505752054353250">El dominio no coincide</translation> <translation id="2096368010154057602">Departamento</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251">Es posible que los atacantes que se encuentren en <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> intenten instalar programas peligrosos en tu ordenador para robar o eliminar tu información (por ejemplo, fotos, contraseñas, mensajes y tarjetas de crédito). <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="563324245173044180">Contenido engañoso bloqueado.</translation> <translation id="5659593005791499971">Correo electrónico</translation> -<translation id="5669703222995421982">Obtener contenido personalizado</translation> <translation id="5675650730144413517">Esta página no funciona</translation> <translation id="5685654322157854305">Añadir dirección de envío</translation> <translation id="5689199277474810259">Exportar a JSON</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423">La página <ph name="HOST_NAME" /> no cumple los estándares de seguridad.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /> sobre este problema.</translation> <translation id="7219179957768738017">La conexión utiliza <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">No se pueden exportar contraseñas a la carpeta "<ph name="FOLDER" />"</translation> <translation id="7220786058474068424">Procesando pago</translation> <translation id="724691107663265825">El sitio web al que vas a acceder contiene software malicioso</translation> <translation id="724975217298816891">Introduce la fecha de caducidad y el código CVC de la tarjeta <ph name="CREDIT_CARD" /> para actualizar sus detalles. Cuando la confirmes, su información se compartirá con este sitio web.</translation>
diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb index 57afc07..5df4f8a6 100644 --- a/components/strings/components_strings_et.xtb +++ b/components/strings/components_strings_et.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Vajalik autentimine</translation> <translation id="2079545284768500474">Võta tagasi</translation> <translation id="20817612488360358">Kasutamiseks on määratud süsteemi puhverserveri seaded, kuid määratud on ka konkreetne puhverserveri konfigureerimine.</translation> -<translation id="2086652334978798447">Google'i soovitatud isikupärastatud sisu hankimiseks logige Chrome'i sisse.</translation> <translation id="2091887806945687916">Heli</translation> <translation id="2094505752054353250">Domeeni vastuolu</translation> <translation id="2096368010154057602">Osakond</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251">Saidil <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> olevad ründajad võivad proovida installida teie arvutisse ohtlikke programme, mis varastavad teie teavet või kustutavad selle (nt fotod, paroolid, sõnumid ja krediitkaarditeave). <ph name="BEGIN_LEARN_MORE_LINK" />Lisateave<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="563324245173044180">Petlik sisu blokeeriti.</translation> <translation id="5659593005791499971">Meil</translation> -<translation id="5669703222995421982">Isikupärastatud sisu hankimine</translation> <translation id="5675650730144413517">See leht ei tööta</translation> <translation id="5685654322157854305">Lisage tarneaadress</translation> <translation id="5689199277474810259">Ekspordi JSON-vormingus</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423">Host <ph name="HOST_NAME" /> ei pea turvastandarditest kinni.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Lisateave<ph name="END_LINK" /> selle probleemi kohta.</translation> <translation id="7219179957768738017">Ühendus kasutab protokolli <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Paroole ei saa kausta „<ph name="FOLDER" />” eksportida</translation> <translation id="7220786058474068424">Töötlemine</translation> <translation id="724691107663265825">Avatav veebisait sisaldab pahavara</translation> <translation id="724975217298816891">Kaardi üksikasjade värskendamiseks sisestage krediitkaardi <ph name="CREDIT_CARD" /> aegumiskuupäev ja CVC. Kui selle kinnitate, jagatakse teie kaardi üksikasju selle saidiga.</translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb index e1f6bbd0..be12f90 100644 --- a/components/strings/components_strings_fa.xtb +++ b/components/strings/components_strings_fa.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">راستیآزمایی لازم است</translation> <translation id="2079545284768500474">لغو</translation> <translation id="20817612488360358">تنظیمات پروکسی سیستم تنظیم شده تا مورد استفاده قرار گیرد، اما یک پیکربندی مشخص برای پروکسی نیز تعیین شده است.</translation> -<translation id="2086652334978798447">برای دریافت محتوای شخصیسازیشده پیشنهادی Google، به Chrome وارد شوید.</translation> <translation id="2091887806945687916">صدا</translation> <translation id="2094505752054353250">عدم تطابق دامنه</translation> <translation id="2096368010154057602">حوزه</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251">شاید درحالحاضر مهاجمها در <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="563324245173044180">محتوای فریبدهنده مسدود شد.</translation> <translation id="5659593005791499971">رایانامه</translation> -<translation id="5669703222995421982">دریافت محتوای شخصیسازیشده</translation> <translation id="5675650730144413517">این صفحه کار نمیکند</translation> <translation id="5685654322157854305">افزودن نشانی تحویل کالا</translation> <translation id="5689199277474810259">صادر کردن به JSON</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> از استانداردهای امنیتی پیروی نمیکند.</translation> <translation id="721197778055552897">دربارهٔ این مشکل <ph name="BEGIN_LINK" />بیشتر بیاموزید<ph name="END_LINK" />.</translation> <translation id="7219179957768738017">اتصال از <ph name="SSL_VERSION" /> استفاده میکند.</translation> -<translation id="7220019174139618249">گذرواژهها در «<ph name="FOLDER" />» صادر نمیشوند</translation> <translation id="7220786058474068424">درحال پردازش</translation> <translation id="724691107663265825">این وبسایت بدافزار دارد</translation> <translation id="724975217298816891">برای بهروزرسانی جزئیات کارتتان، تاریخ انقضا و CVC کارت <ph name="CREDIT_CARD" /> را وارد کنید. بعد از تأیید شدن، جزئیات کارتتان با این سایت به اشتراک گذاشته میشود.</translation>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb index 3814ed0..417f7ce 100644 --- a/components/strings/components_strings_fi.xtb +++ b/components/strings/components_strings_fi.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Käyttöoikeustarkistus pakollinen</translation> <translation id="2079545284768500474">Kumoa</translation> <translation id="20817612488360358">Järjestelmän välityspalvelinasetukset on määritetty käytettäviksi, mutta erilliset välityspalvelimen asetukset on myös määritetty.</translation> -<translation id="2086652334978798447">Kirjaudu Chromeen, niin voit lisätä Googlen suosittelemaa sisältöä.</translation> <translation id="2091887806945687916">Ääni</translation> <translation id="2094505752054353250">Verkkotunnukset eivät ole yhteensopivat</translation> <translation id="2096368010154057602">Osasto</translation> @@ -642,7 +641,6 @@ <translation id="5633066919399395251">Sivustolle <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> hyökännyt taho voi yrittää asentaa tietokoneellesi vaarallisia ohjelmia, jotka varastavat tai poistavat tietojasi, esimerkiksi kuvia, salasanoja, viestejä tai luottokorttitietoja. <ph name="BEGIN_LEARN_MORE_LINK" />Lisätietoja<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="563324245173044180">Harhaanjohtava sisältö estetty</translation> <translation id="5659593005791499971">Sähköposti</translation> -<translation id="5669703222995421982">Hanki räätälöityä sisältöä</translation> <translation id="5675650730144413517">Sivu ei toimi</translation> <translation id="5685654322157854305">Lisää toimitusosoite</translation> <translation id="5689199277474810259">Vie JSON-tiedostoon</translation> @@ -813,7 +811,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> ei noudata tietoturvastandardeja.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Lisätietoja<ph name="END_LINK" /> ongelmasta.</translation> <translation id="7219179957768738017">Yhteys käyttää protokollaa <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Salasanojen tuonti kansioon <ph name="FOLDER" /> epäonnistui.</translation> <translation id="7220786058474068424">Käsitellään.</translation> <translation id="724691107663265825">Seuraava verkkosivusto sisältää haittaohjelmia</translation> <translation id="724975217298816891">Päivitä kortin <ph name="CREDIT_CARD" /> tiedot antamalla sen CVC ja vanhenemispäivämäärä. Vahvistamisen jälkeen korttisi tiedot jaetaan sivuston kanssa.</translation>
diff --git a/components/strings/components_strings_fil.xtb b/components/strings/components_strings_fil.xtb index 6f2ace5..6583853 100644 --- a/components/strings/components_strings_fil.xtb +++ b/components/strings/components_strings_fil.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Kinakailangan na Pagpapatunay</translation> <translation id="2079545284768500474">I-undo</translation> <translation id="20817612488360358">Itinatakda ang mga setting ng proxy ng system upang magamit ngunit tinutukoy rin ang isang tahasang configuration ng proxy.</translation> -<translation id="2086652334978798447">Upang makakuha ng naka-personalize na content na iminumungkahi ng Google, mag-sign in sa Chrome.</translation> <translation id="2091887806945687916">Tunog</translation> <translation id="2094505752054353250">Maling pagtutugma sa domain</translation> <translation id="2096368010154057602">Departamento</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251">Maaaring magtangka ang mga attacker na kasalukuyang nasa <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> na mag-install ng mga mapanganib na program sa iyong computer na magnanakaw o magde-delete ng impormasyon mo (halimbawa, mga larawan, password, mensahe, at credit card). <ph name="BEGIN_LEARN_MORE_LINK" />Matuto pa<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="563324245173044180">Na-block ang mapanlinlang na content.</translation> <translation id="5659593005791499971">Email</translation> -<translation id="5669703222995421982">Makakuha ng naka-personalize na content</translation> <translation id="5675650730144413517">Hindi gumagana ang page na ito</translation> <translation id="5685654322157854305">Magdagdag ng Address sa Pagpapadala</translation> <translation id="5689199277474810259">I-export sa JSON</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423">Hindi sumusunod ang <ph name="HOST_NAME" /> sa mga pamantayan sa seguridad.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Dagdagan ang nalalaman<ph name="END_LINK" /> tungkol sa problemang ito.</translation> <translation id="7219179957768738017">Gumagamit ng <ph name="SSL_VERSION" /> ang koneksyon.</translation> -<translation id="7220019174139618249">Hindi ma-export ang mga password sa "<ph name="FOLDER" />"</translation> <translation id="7220786058474068424">Pinoproseso</translation> <translation id="724691107663265825">Naglalaman ng malware ang site</translation> <translation id="724975217298816891">Ilagay ang petsa ng expiration at CVC para sa <ph name="CREDIT_CARD" /> upang i-update ang mga detalye ng iyong card. Kapag nagkumpirma ka na, ibabahagi ang mga detalye ng iyong card sa site na ito.</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb index 733ad2af..37421d44 100644 --- a/components/strings/components_strings_fr.xtb +++ b/components/strings/components_strings_fr.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Authentification requise</translation> <translation id="2079545284768500474">Annuler</translation> <translation id="20817612488360358">Les paramètres de proxy du système sont configurés pour être utilisés, mais une configuration de proxy explicite est également spécifiée.</translation> -<translation id="2086652334978798447">Pour obtenir une recommandation de contenu personnalisé de la part de Google, connectez-vous à Chrome.</translation> <translation id="2091887806945687916">Son</translation> <translation id="2094505752054353250">Le domaine ne correspond pas</translation> <translation id="2096368010154057602">Département</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251">Des individus malveillants à l'œuvre sur le site <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> pourraient tenter d'installer des programmes dangereux sur votre ordinateur afin de récupérer ou de supprimer certaines informations (photos, mots de passe, messages ou numéros de carte de crédit, par exemple). <ph name="BEGIN_LEARN_MORE_LINK" />En savoir plus<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="563324245173044180">Contenu trompeur bloqué.</translation> <translation id="5659593005791499971">E-mail</translation> -<translation id="5669703222995421982">Obtenir une recommandation de contenu personnalisé</translation> <translation id="5675650730144413517">Cette page ne fonctionne pas</translation> <translation id="5685654322157854305">Ajouter une adresse de livraison</translation> <translation id="5689199277474810259">Exporter au format JSON</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> ne respecte pas les normes de sécurité.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /> sur ce problème.</translation> <translation id="7219179957768738017">La connexion utilise <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Impossible d'exporter les mots de passe vers "<ph name="FOLDER" />"</translation> <translation id="7220786058474068424">Traitement en cours</translation> <translation id="724691107663265825">Le site que vous allez ouvrir contient des logiciels malveillants</translation> <translation id="724975217298816891">Saisissez la date d'expiration et le code CVC de la carte <ph name="CREDIT_CARD" /> pour mettre à jour les informations relatives à celle-ci. Une fois la validation effectuée, les informations seront partagées avec ce site.</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb index e94c959a..12ebcd2 100644 --- a/components/strings/components_strings_gu.xtb +++ b/components/strings/components_strings_gu.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">પ્રમાણીકરણ આવશ્યક</translation> <translation id="2079545284768500474">પૂર્વવત કરો</translation> <translation id="20817612488360358">સિસ્ટમ પ્રોક્સી સેટિંગ્સ ઉપયોગમાં લેવા માટે સેટ છે પણ એક સ્પષ્ટ પ્રોક્સી ગોઠવણી પણ ઉલ્લેખિત કરેલી છે.</translation> -<translation id="2086652334978798447">Google દ્વારા સૂચવેલ વ્યક્તિગત કરેલ સામગ્રી મેળવવા માટે, Chrome માં સાઇન ઇન કરો.</translation> <translation id="2091887806945687916">ધ્વનિ</translation> <translation id="2094505752054353250">ડોમેન મેળ ખાતું નથી</translation> <translation id="2096368010154057602">વિભાગ</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251"><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="563324245173044180">ભ્રામક કન્ટેન્ટ અવરોધિત કરી</translation> <translation id="5659593005791499971">ઇમેઇલ</translation> -<translation id="5669703222995421982">વ્યક્તિગત કરેલ સામગ્રી મેળવો</translation> <translation id="5675650730144413517">આ પૃષ્ઠ કામ કરી રહ્યું નથી</translation> <translation id="5685654322157854305">વિતરણ માટેનું સરનામું ઉમેરો</translation> <translation id="5689199277474810259">JSON પર નિકાસ કરો</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" />, સુરક્ષા માનકોનું પાલન કરતું નથી.</translation> <translation id="721197778055552897">આ સમસ્યા વિશે <ph name="BEGIN_LINK" />વધુ જાણો<ph name="END_LINK" />.</translation> <translation id="7219179957768738017">કનેક્શન <ph name="SSL_VERSION" /> નો ઉપયોગ કરે છે.</translation> -<translation id="7220019174139618249">પાસવર્ડને "<ph name="FOLDER" />"માં મોકલી શકાતો નથી</translation> <translation id="7220786058474068424">પ્રક્રિયા કરી રહ્યું છે</translation> <translation id="724691107663265825">સાઇટ આગળ મૉલવેર ધરાવે છે</translation> <translation id="724975217298816891">તમારા કાર્ડની વિગતોને અપડેટ કરવા <ph name="CREDIT_CARD" /> માટે સમાપ્તિ તારીખ અને CVC દાખલ કરો. એકવાર તમે પુષ્ટિ કરી લો, તે પછી આ સાઇટ સાથે તમારા કાર્ડની વિગતો શેર કરવામાં આવશે.</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb index 82f9dfc5..2940b381 100644 --- a/components/strings/components_strings_hi.xtb +++ b/components/strings/components_strings_hi.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">प्रमाणीकरण आवश्यक</translation> <translation id="2079545284768500474">वापस लाएं</translation> <translation id="20817612488360358">सिस्टम प्रॉक्सी सेटिंग उपयोग किए जाने के लिए सेट हैं लेकिन कोई स्पष्ट प्रॉक्सी कॉन्फ़िगरेशन भी निर्दिष्ट है.</translation> -<translation id="2086652334978798447">Google द्वारा सुझाई गई वैयक्तिकृत सामग्री प्राप्त करने के लिए, Chrome में प्रवेश करें.</translation> <translation id="2091887806945687916">ध्वनि</translation> <translation id="2094505752054353250">डोमेन का गलत-मिलान</translation> <translation id="2096368010154057602">विभाग</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251">इस समय <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="563324245173044180">भ्रामक सामग्री ब्लॉक की गई.</translation> <translation id="5659593005791499971">ईमेल</translation> -<translation id="5669703222995421982">खास आपके लिए बनी सामग्री पाएं</translation> <translation id="5675650730144413517">यह पेज काम नहीं कर रहा है</translation> <translation id="5685654322157854305">शिपिंग पता जोड़ें</translation> <translation id="5689199277474810259">JSON में निर्यात करें</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> सुरक्षा मानकों का पालन नहीं करता.</translation> <translation id="721197778055552897">इस समस्या के बारे में <ph name="BEGIN_LINK" />अधिक जानें<ph name="END_LINK" />.</translation> <translation id="7219179957768738017">कनेक्शन <ph name="SSL_VERSION" /> का उपयोग करता है.</translation> -<translation id="7220019174139618249">पासवर्ड "<ph name="FOLDER" />" में निर्यात नहीं किए जा सकते</translation> <translation id="7220786058474068424">संसाधित हो रहा है</translation> <translation id="724691107663265825">साइट में आगे मैलवेयर हैं</translation> <translation id="724975217298816891">अपने कार्ड विवरण अपडेट करने के लिए <ph name="CREDIT_CARD" /> का समय समाप्ति दिनांक और CVC डालें. आपकी तरफ से पुष्टि हो जाने पर, आपके कार्ड के विवरण इस साइट के साथ साझा किए जाएंगे.</translation>
diff --git a/components/strings/components_strings_hr.xtb b/components/strings/components_strings_hr.xtb index 2361a79..b5052827 100644 --- a/components/strings/components_strings_hr.xtb +++ b/components/strings/components_strings_hr.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Potrebna autentikacija</translation> <translation id="2079545284768500474">Poništi</translation> <translation id="20817612488360358">Postavljena je upotreba sistemskih postavki proxy poslužitelja, ali također je određena izričita konfiguracija proxy poslužitelja.</translation> -<translation id="2086652334978798447">Prijavite se u Chrome ako želite da vam Google predlaže sadržaje.</translation> <translation id="2091887806945687916">Zvuk</translation> <translation id="2094505752054353250">Domena se ne podudara</translation> <translation id="2096368010154057602">Departman</translation> @@ -640,7 +639,6 @@ <translation id="5633066919399395251">Napadači koji su trenutačno na web-lokaciji <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> mogu pokušati instalirati opasne programe na vaše računalo radi krađe ili brisanja vaših podataka (na primjer fotografija, zaporki, poruka i brojeva kreditnih kartica). <ph name="BEGIN_LEARN_MORE_LINK" />Saznajte više<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="563324245173044180">Blokiran je obmanjujući sadržaj.</translation> <translation id="5659593005791499971">E-pošta</translation> -<translation id="5669703222995421982">Predlaganje sadržaja</translation> <translation id="5675650730144413517">Stranica ne funkcionira</translation> <translation id="5685654322157854305">Dodajte adresu za dostavu</translation> <translation id="5689199277474810259">Izvezi u JSON</translation> @@ -811,7 +809,6 @@ <translation id="7210863904660874423">Host <ph name="HOST_NAME" /> ne pridržava se sigurnosnih standarda.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /> o ovom problemu.</translation> <translation id="7219179957768738017">Veza upotrebljava <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Izvoz zaporki u mapu "<ph name="FOLDER" />" nije moguć</translation> <translation id="7220786058474068424">Obrada</translation> <translation id="724691107663265825">Web-lokacija pred vama sadrži zlonamjerni softver</translation> <translation id="724975217298816891">Unesite datum isteka i CVC za karticu <ph name="CREDIT_CARD" /> da biste ažurirali podatke o kartici. Nakon što ih potvrdite, podaci o kartici dijelit će se s ovom web-lokacijom.</translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb index e76ba86..223a1887 100644 --- a/components/strings/components_strings_hu.xtb +++ b/components/strings/components_strings_hu.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Hitelesítés szükséges</translation> <translation id="2079545284768500474">Visszavonás</translation> <translation id="20817612488360358">A rendszer proxybeállításai konfigurálva vannak a használathoz, de kifejezett proxykonfiguráció is meg van adva.</translation> -<translation id="2086652334978798447">A Google által javasolt, személyre szabott tartalmak fogadásához jelentkezzen be a Chrome-ba.</translation> <translation id="2091887806945687916">Hang</translation> <translation id="2094505752054353250">Domainkeveredés</translation> <translation id="2096368010154057602">Megye</translation> @@ -639,7 +638,6 @@ <translation id="5633066919399395251">Előfordulhat, hogy a(z) <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> webhely támadói veszélyes programokat kísérelnek meg telepíteni számítógépére, amelyek ellopják vagy törlik az Ön adatait (például fotóit, jelszavait, üzeneteit és hitelkártyaadatait). <ph name="BEGIN_LEARN_MORE_LINK" />További információ<ph name="END_LEARN_MORE_LINK" />.</translation> <translation id="563324245173044180">Megtévesztő tartalom letiltva.</translation> <translation id="5659593005791499971">E-mail</translation> -<translation id="5669703222995421982">Személyre szabott tartalmak fogadása</translation> <translation id="5675650730144413517">Az oldal nem működik</translation> <translation id="5685654322157854305">Szállítási cím hozzáadása</translation> <translation id="5689199277474810259">Exportálás JSON formátumba</translation> @@ -810,7 +808,6 @@ <translation id="7210863904660874423">A(z) <ph name="HOST_NAME" /> nem felel meg a biztonsági szabványoknak.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />További információ<ph name="END_LINK" /> erről a hibáról.</translation> <translation id="7219179957768738017">A kapcsolat a következőt használja: <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Nem sikerült a jelszavak exportálása a következő helyre: <ph name="FOLDER" /></translation> <translation id="7220786058474068424">Feldolgozás alatt</translation> <translation id="724691107663265825">A megnyíló oldal rosszindulatú programot tartalmaz</translation> <translation id="724975217298816891">Adja meg a(z) <ph name="CREDIT_CARD" /> kártya lejárati dátumát és CVC-kódját. Az ellenőrzést követően a böngésző megosztja kártyaadatait ezzel a webhellyel.</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb index 7ddfe7b..f5ccfbd 100644 --- a/components/strings/components_strings_id.xtb +++ b/components/strings/components_strings_id.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Diperlukan Otentikasi</translation> <translation id="2079545284768500474">Urungkan</translation> <translation id="20817612488360358">Setelan proxy sistem disetel untuk digunakan namun konfigurasi proxy eksplisit juga ditentukan.</translation> -<translation id="2086652334978798447">Untuk mendapatkan konten hasil personalisasi yang disarankan oleh Google, masuk ke Chrome.</translation> <translation id="2091887806945687916">Suara</translation> <translation id="2094505752054353250">Ketidakcocokan domain</translation> <translation id="2096368010154057602">Departemen</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251">Saat ini, penyerang di <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> mungkin berusaha menginstal program berbahaya di komputer Anda yang dapat mencuri atau menghapus informasi Anda (misalnya, foto, sandi, pesan, dan kartu kredit). <ph name="BEGIN_LEARN_MORE_LINK" />Pelajari lebih lanjut<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="563324245173044180">Konten penipuan diblokir.</translation> <translation id="5659593005791499971">Email</translation> -<translation id="5669703222995421982">Mendapatkan konten hasil personalisasi</translation> <translation id="5675650730144413517">Halaman ini tidak berfungsi</translation> <translation id="5685654322157854305">Tambahkan Alamat Pengiriman</translation> <translation id="5689199277474810259">Ekspor ke JSON</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> tidak mematuhi standar keamanan.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Selengkapnya<ph name="END_LINK" /> tentang masalah ini.</translation> <translation id="7219179957768738017">Koneksi menggunakan <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Tidak dapat mengekspor sandi ke "<ph name="FOLDER" />"</translation> <translation id="7220786058474068424">Dalam proses</translation> <translation id="724691107663265825">Situs yang akan dibuka berisi software perusak</translation> <translation id="724975217298816891">Masukkan tanggal habis masa berlaku dan CVC untuk <ph name="CREDIT_CARD" /> guna memperbarui detail kartu. Setelah mengonfirmasi, detail kartu Anda akan dibagikan dengan situs ini.</translation>
diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb index 6532ab01..398d37d 100644 --- a/components/strings/components_strings_it.xtb +++ b/components/strings/components_strings_it.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Autenticazione richiesta</translation> <translation id="2079545284768500474">Annulla</translation> <translation id="20817612488360358">Devono essere utilizzate le impostazioni del proxy di sistema ma è stata specificata anche una configurazione proxy esplicita.</translation> -<translation id="2086652334978798447">Per ricevere contenuti suggeriti appositamente per te da Google, accedi a Chrome.</translation> <translation id="2091887806945687916">Audio</translation> <translation id="2094505752054353250">Dominio non corrispondente</translation> <translation id="2096368010154057602">Dipartimento</translation> @@ -638,7 +637,6 @@ <translation id="5633066919399395251">Gli utenti malintenzionati attualmente presenti sul sito <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> potrebbero cercare di installare sul tuo computer programmi pericolosi che carpiscono o eliminano le tue informazioni (ad esempio, foto, password, messaggi e carte di credito). <ph name="BEGIN_LEARN_MORE_LINK" />Ulteriori informazioni<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="563324245173044180">Contenuti ingannevoli bloccati.</translation> <translation id="5659593005791499971">Email</translation> -<translation id="5669703222995421982">Ricevi contenuti suggeriti appositamente per te</translation> <translation id="5675650730144413517">La pagina non funziona</translation> <translation id="5685654322157854305">Aggiungi l'indirizzo di spedizione</translation> <translation id="5689199277474810259">Esporta in JSON</translation> @@ -808,7 +806,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> non è conforme agli standard di sicurezza.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Ulteriori informazioni<ph name="END_LINK" /> su questo problema.</translation> <translation id="7219179957768738017">La connessione utilizza <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Impossibile esportare le password in "<ph name="FOLDER" />"</translation> <translation id="7220786058474068424">Elaborazione in corso</translation> <translation id="724691107663265825">Il sito che stai per visitare contiene malware</translation> <translation id="724975217298816891">Inserisci la data di scadenza e il codice CVC della carta <ph name="CREDIT_CARD" /> per aggiornare i relativi dettagli. Dopo essere stati confermati, i dettagli della carta saranno condivisi con questo sito.</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb index d9ede71..ed4e6238 100644 --- a/components/strings/components_strings_iw.xtb +++ b/components/strings/components_strings_iw.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">נדרש אימות</translation> <translation id="2079545284768500474">בטל פעולה</translation> <translation id="20817612488360358">נקבע שימוש בהגדרות שרת Proxy של מערכת אך בנוסף מצוינת גם תצורה מפורשת של שרת Proxy.</translation> -<translation id="2086652334978798447">כדי לקבל מ-Google הצעות לתוכן מותאם אישית, היכנס אל Chrome.</translation> <translation id="2091887806945687916">צליל</translation> <translation id="2094505752054353250">אי התאמה בדומיינים</translation> <translation id="2096368010154057602">מחלקה</translation> @@ -646,7 +645,6 @@ <translation id="5633066919399395251">תוקפים שנמצאים כרגע באתר <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="563324245173044180">תוכן מטעה נחסם</translation> <translation id="5659593005791499971">אימייל</translation> -<translation id="5669703222995421982">התאמה אישית של תוכן</translation> <translation id="5675650730144413517">הדף הזה לא עובד</translation> <translation id="5685654322157854305">הוספת כתובת למשלוח</translation> <translation id="5689199277474810259">ייצוא אל JSON</translation> @@ -817,7 +815,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> לא פועל בהתאם לתקני האבטחה.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />מידע נוסף<ph name="END_LINK" /> בנושא זה.</translation> <translation id="7219179957768738017">החיבור משתמש ב-<ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">אי אפשר לייצא סיסמאות אל "<ph name="FOLDER" />"</translation> <translation id="7220786058474068424">מעבד</translation> <translation id="724691107663265825">האתר שלפניך מכיל תוכנה זדונית</translation> <translation id="724975217298816891">הזן את תאריך התפוגה ואת קוד האימות של <ph name="CREDIT_CARD" /> כדי לעדכן את פרטי הכרטיס. ברגע שתאשר, פרטי הכרטיס שלך ישותפו עם האתר הזה.</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb index f3789a578..023fd20 100644 --- a/components/strings/components_strings_ja.xtb +++ b/components/strings/components_strings_ja.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">認証が必要</translation> <translation id="2079545284768500474">元に戻す</translation> <translation id="20817612488360358">システム プロキシ設定を使用するように設定されていますが、明示的なプロキシの設定も指定されています。</translation> -<translation id="2086652334978798447">ユーザーに合わせた Google からのおすすめコンテンツを表示するには、Chrome にログインします。</translation> <translation id="2091887806945687916">音声</translation> <translation id="2094505752054353250">ドメインが一致しません</translation> <translation id="2096368010154057602">県</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251"><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="563324245173044180">不正の可能性があるコンテンツがブロックされました。</translation> <translation id="5659593005791499971">メール</translation> -<translation id="5669703222995421982">自分向けのコンテンツを表示</translation> <translation id="5675650730144413517">このページは動作していません</translation> <translation id="5685654322157854305">配送先住所を追加</translation> <translation id="5689199277474810259">JSON にエクスポート</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> ではセキュリティ規格が遵守されていません。</translation> <translation id="721197778055552897">この問題の詳細については、<ph name="BEGIN_LINK" />こちら<ph name="END_LINK" />をご覧ください。</translation> <translation id="7219179957768738017">この接続には <ph name="SSL_VERSION" /> を使用しています。</translation> -<translation id="7220019174139618249">パスワードを「<ph name="FOLDER" />」にエクスポートできません</translation> <translation id="7220786058474068424">処理しています</translation> <translation id="724691107663265825">アクセス先のサイトで不正なソフトウェアを検出しました</translation> <translation id="724975217298816891">カードの詳細を更新するには <ph name="CREDIT_CARD" /> の有効期限と CVC を入力します。確認を行うと、カードの詳細がこのサイトと共有されます。</translation>
diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb index 46ed5b0..9d8836a 100644 --- a/components/strings/components_strings_kn.xtb +++ b/components/strings/components_strings_kn.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">ದೃಢೀಕರಣದ ಅವಶ್ಯಕತೆಯಿದೆ</translation> <translation id="2079545284768500474">ರದ್ದುಮಾಡಿ</translation> <translation id="20817612488360358">ಸಿಸ್ಟಂ ಪ್ರಾಕ್ಸಿ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಬಳಸಲು ಹೊಂದಿಸಲಾಗಿದೆ ಆದರೆ ಬಹಿರಂಗವಾದ ಪ್ರಾಕ್ಸಿ ಕಾನ್ಫಿಗರೇಶನ್ ಅನ್ನು ಸಹ ನಿರ್ದಿಷ್ಟಪಡಿಸಲಾಗಿದೆ.</translation> -<translation id="2086652334978798447">Google ಸಲಹೆ ನೀಡಲಾದ ವೈಯಕ್ತೀಕರಿಸಲಾದ ವಿಷಯವನ್ನು ಪಡೆದುಕೊಳ್ಳಲು, Chrome ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ.</translation> <translation id="2091887806945687916">ಶಬ್ಧ</translation> <translation id="2094505752054353250">ಡೊಮೇನ್ ಹೊಂದುತ್ತಿಲ್ಲ</translation> <translation id="2096368010154057602">ವಿಭಾಗ</translation> @@ -637,7 +636,6 @@ <translation id="5633066919399395251"><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="563324245173044180">ವಂಚನೀಯ ವಿಷಯವನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ.</translation> <translation id="5659593005791499971">ಇಮೇಲ್</translation> -<translation id="5669703222995421982">ವೈಯಕ್ತೀಕರಿಸಲಾದ ವಿಷಯವನ್ನು ಪಡೆಯಿರಿ</translation> <translation id="5675650730144413517">ಈ ಪುಟ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿಲ್ಲ</translation> <translation id="5685654322157854305">ಶಿಪ್ಪಿಂಗ್ ವಿಳಾಸವನ್ನು ಸೇರಿಸಿ</translation> <translation id="5689199277474810259">JSON ಗೆ ರಫ್ತು ಮಾಡಿ</translation> @@ -807,7 +805,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> ಭದ್ರತೆ ಮಾನದಂಡಗಳನ್ನು ಅನುಸರಿಸುತ್ತಿಲ್ಲ.</translation> <translation id="721197778055552897">ಈ ತೊಂದರೆಯ ಬಗ್ಗೆ <ph name="BEGIN_LINK" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="END_LINK" />.</translation> <translation id="7219179957768738017">ಸಂಪರ್ಕವು <ph name="SSL_VERSION" /> ಅನ್ನು ಬಳಸುತ್ತದೆ.</translation> -<translation id="7220019174139618249">"<ph name="FOLDER" />" ಗೆ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ರಫ್ತು ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ</translation> <translation id="7220786058474068424">ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲಾಗುತ್ತಿದೆ</translation> <translation id="724691107663265825">ಮುಂದಿರುವ ಸೈಟ್ನಲ್ಲಿ ಮಾಲ್ವೇರ್ ಇದೆ</translation> <translation id="724975217298816891">ನಿಮ್ಮ ಕಾರ್ಡ್ ವಿವರಗಳನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಲು <ph name="CREDIT_CARD" /> ಗೆ ಮುಕ್ತಾಯ ದಿನಾಂಕ ಮತ್ತು CVC ಅನ್ನು ನಮೂದಿಸಿ. ನೀವು ಒಮ್ಮೆ ಖಚಿತಪಡಿಸಿದರೆ, ನಿಮ್ಮ ಕಾರ್ಡ್ ವಿವರಗಳನ್ನು ಈ ಸೈಟ್ ಜೊತೆಗೆ ಹಂಚಿಕೊಳ್ಳಲಾಗುತ್ತದೆ.</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb index 210f36a..3cfc7cd 100644 --- a/components/strings/components_strings_ko.xtb +++ b/components/strings/components_strings_ko.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">인증 필요</translation> <translation id="2079545284768500474">실행취소</translation> <translation id="20817612488360358">시스템 프록시 설정이 사용하도록 설정되었지만 명시적 프록시 설정도 지정되어 있습니다.</translation> -<translation id="2086652334978798447">Google에서 추천한 맞춤설정 콘텐츠를 받으려면 Chrome에 로그인합니다.</translation> <translation id="2091887806945687916">소리</translation> <translation id="2094505752054353250">도메인이 일치하지 않음</translation> <translation id="2096368010154057602">자치구</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251">현재 <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="563324245173044180">사기성 콘텐츠 차단됨</translation> <translation id="5659593005791499971">이메일</translation> -<translation id="5669703222995421982">내게 맞는 콘텐츠 추천 받기</translation> <translation id="5675650730144413517">페이지가 작동하지 않습니다.</translation> <translation id="5685654322157854305">배송지 주소 추가</translation> <translation id="5689199277474810259">JSON 형식으로 내보내기</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" />에서 보안 기준을 준수하지 않습니다.</translation> <translation id="721197778055552897">이 문제에 대해 <ph name="BEGIN_LINK" />자세히 알아보기<ph name="END_LINK" /></translation> <translation id="7219179957768738017"><ph name="SSL_VERSION" /> 연결입니다.</translation> -<translation id="7220019174139618249">'<ph name="FOLDER" />'(으)로 비밀번호를 내보낼 수 없음</translation> <translation id="7220786058474068424">처리 중</translation> <translation id="724691107663265825">다음 사이트에 멀웨어가 있습니다.</translation> <translation id="724975217298816891">카드 세부정보를 업데이트하려면 <ph name="CREDIT_CARD" /> 카드의 만료일과 CVC를 입력하세요. 카드를 확인하면 카드 세부정보가 이 사이트와 공유됩니다.</translation>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb index b992eeb..50d0a3c 100644 --- a/components/strings/components_strings_lt.xtb +++ b/components/strings/components_strings_lt.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Reikalingas tapatybės nustatymas</translation> <translation id="2079545284768500474">Anuliuoti</translation> <translation id="20817612488360358">Sistemos įgaliotojo serverio nustatymai nustatyti kaip naudotini, bet taip pat nurodyta tiksli įgaliotojo serverio konfigūracija.</translation> -<translation id="2086652334978798447">Jei norite gauti „Google“ siūlomo suasmeninto turinio, prisijunkite prie „Chrome“.</translation> <translation id="2091887806945687916">Garsas</translation> <translation id="2094505752054353250">Domeno neatitikimas</translation> <translation id="2096368010154057602">Departamentas</translation> @@ -642,7 +641,6 @@ <translation id="5633066919399395251">Šiuo metu <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> užpuolikai gali jūsų kompiuteryje bandyti įdiegti pavojingas programas, kurios vagia arba ištrina informaciją (pvz., nuotraukas, slaptažodžius, pranešimus ir kredito kortelių duomenis). <ph name="BEGIN_LEARN_MORE_LINK" />Sužinokite daugiau<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="563324245173044180">Klaidinantis turinys užblokuotas.</translation> <translation id="5659593005791499971">El. paštas</translation> -<translation id="5669703222995421982">Suasmeninto turinio gavimas</translation> <translation id="5675650730144413517">Šis puslapis neveikia</translation> <translation id="5685654322157854305">Pridėti pristatymo adresą</translation> <translation id="5689199277474810259">Eksportuoti kaip JSON</translation> @@ -813,7 +811,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> nesilaikoma saugos standartų.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Sužinokite daugiau<ph name="END_LINK" /> apie šią problemą.</translation> <translation id="7219179957768738017">Ryšiui naudojama <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Nepavyksta eksportuoti slaptažodžių į aplanką „<ph name="FOLDER" />“</translation> <translation id="7220786058474068424">Apdorojama</translation> <translation id="724691107663265825">Svetainėje, kurioje ketinate apsilankyti, yra kenkėjiškų programų</translation> <translation id="724975217298816891">Jei norite atnaujinti išsamią kortelės informaciją, įveskite „<ph name="CREDIT_CARD" />“ galiojimo pabaigos datą ir kortelės saugos kodą (CVC). Kai patvirtinsite, išsami kortelės informacija bus bendrinama su šia svetaine.</translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb index e7d9ccd..fadfb161 100644 --- a/components/strings/components_strings_lv.xtb +++ b/components/strings/components_strings_lv.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Nepieciešama autentiskuma noteikšana</translation> <translation id="2079545284768500474">Atsaukt</translation> <translation id="20817612488360358">Ir iestatīta datora starpniekserveru iestatījumu lietošana, bet ir norādīta arī atklāta starpniekservera konfigurācija.</translation> -<translation id="2086652334978798447">Lai saņemtu Google ieteikto personalizēto saturu, pierakstieties pārlūkā Chrome.</translation> <translation id="2091887806945687916">Signāls</translation> <translation id="2094505752054353250">Domēni nesaskan</translation> <translation id="2096368010154057602">Departaments</translation> @@ -640,7 +639,6 @@ <translation id="5633066919399395251">Uzbrucēji vietnē <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> var mēģināt jūsu datorā instalēt bīstamas programmas, kas zog vai izdzēš informāciju (piemēram, fotoattēlus, paroles, ziņojumus un kredītkaršu datus). <ph name="BEGIN_LEARN_MORE_LINK" />Uzziniet vairāk<ph name="END_LEARN_MORE_LINK" />.</translation> <translation id="563324245173044180">Bloķēts maldinošs saturs</translation> <translation id="5659593005791499971">E-pasts</translation> -<translation id="5669703222995421982">Saņemiet personalizētu saturu</translation> <translation id="5675650730144413517">Šī lapa nedarbojas</translation> <translation id="5685654322157854305">Pievienot nosūtīšanas adresi</translation> <translation id="5689199277474810259">Eksportēt JSON formātā</translation> @@ -811,7 +809,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> neatbilst drošības standartiem.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Uzziniet vairāk<ph name="END_LINK" /> par šo problēmu.</translation> <translation id="7219179957768738017">Savienojums izmanto <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Nevar eksportēt paroles uz mapi “<ph name="FOLDER" />”.</translation> <translation id="7220786058474068424">Notiek apstrāde</translation> <translation id="724691107663265825">Vietnē ir ļaunprātīga programmatūra</translation> <translation id="724975217298816891">Lai atjauninātu kartes informāciju, ievadiet kredītkartes <ph name="CREDIT_CARD" /> derīguma termiņu un CVC. Pēc apstiprināšanas kartes informācija tiks kopīgota ar šo vietni.</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb index 9829b34b..c6ca9263 100644 --- a/components/strings/components_strings_ml.xtb +++ b/components/strings/components_strings_ml.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">ആധികാരികത ആവശ്യമാണ്</translation> <translation id="2079545284768500474">പഴയപടിയാക്കുക</translation> <translation id="20817612488360358">സിസ്റ്റം പ്രോക്സി ക്രമീകരണം ഉപയോഗിക്കുന്നതിനായി സജ്ജമാക്കി, പക്ഷെ ഒരു സ്പഷ്ടമായ പ്രോക്സി കോൺഫിഗറേഷനും അതോടൊപ്പം നിർദ്ദേശിച്ചിരിക്കുന്നു.</translation> -<translation id="2086652334978798447">Google നിർദ്ദേശിച്ച, വ്യക്തിപരമാക്കിയ ഉള്ളടക്കം സ്വന്തമാക്കാൻ, Chrome-ൽ സൈൻ ഇൻ ചെയ്യുക.</translation> <translation id="2091887806945687916">ശബ്ദം</translation> <translation id="2094505752054353250">ഡൊമെയ്ൻ പൊരുത്തമില്ലായ്മ</translation> <translation id="2096368010154057602">വകുപ്പ്</translation> @@ -640,7 +639,6 @@ <translation id="5633066919399395251"><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="563324245173044180">തെറ്റിദ്ധരിപ്പിക്കുന്ന ഉള്ളടക്കം ബ്ലോക്കുചെയ്തു.</translation> <translation id="5659593005791499971">ഇമെയില്</translation> -<translation id="5669703222995421982">വ്യക്തിപരമാക്കിയ ഉള്ളടക്കം സ്വന്തമാക്കുക</translation> <translation id="5675650730144413517">ഈ പേജ് പ്രവർത്തിക്കുന്നില്ല</translation> <translation id="5685654322157854305">ഷിപ്പിംഗ് വിലാസം ചേർക്കുക</translation> <translation id="5689199277474810259">JSON-ലേക്ക് എക്സ്പോർട്ട് ചെയ്യുക</translation> @@ -811,7 +809,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" />, സുരക്ഷാ മാനദണ്ഡങ്ങൾ പാലിക്കുന്നില്ല.</translation> <translation id="721197778055552897">ഈ പ്രശ്നത്തെക്കുറിച്ച് <ph name="BEGIN_LINK" />കൂടുതൽ മനസിലാക്കുക<ph name="END_LINK" />.</translation> <translation id="7219179957768738017">കണക്ഷന് <ph name="SSL_VERSION" /> ഉപയോഗിക്കുന്നു.</translation> -<translation id="7220019174139618249">"<ph name="FOLDER" />" ഫോൾഡറിലേക്ക് പാസ്വേഡുകൾ എക്സ്പോർട്ട് ചെയ്യാനാകില്ല</translation> <translation id="7220786058474068424">പ്രോസസ്സുചെയ്യുന്നു</translation> <translation id="724691107663265825">സൈറ്റിൽ മാൽവെയർ അടങ്ങിയിരിക്കുന്നു</translation> <translation id="724975217298816891">നിങ്ങളുടെ കാർഡ് വിശദാംശങ്ങൾ അപ്ഡേറ്റുചെയ്യാൻ <ph name="CREDIT_CARD" />-ന്റെ കാലാവധി തീരുന്ന തീയതിയും CVC-യും നൽകുക. സ്ഥിരീകരിച്ച് കഴിഞ്ഞാൽ, ഈ സൈറ്റുമായി കാർഡ് വിശദാംശങ്ങൾ പങ്കിടും.</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb index cccbc0d..4d2b3fe 100644 --- a/components/strings/components_strings_mr.xtb +++ b/components/strings/components_strings_mr.xtb
@@ -67,7 +67,7 @@ <translation id="1413809658975081374">गोपनीयता एरर</translation> <translation id="14171126816530869"><ph name="ISSUER" /> द्वारे <ph name="LOCALITY" /> स्थित <ph name="ORGANIZATION" /> ची ओळख सत्यापित केली गेली आहे.</translation> <translation id="1426410128494586442">होय</translation> -<translation id="1430915738399379752">मुद्रण</translation> +<translation id="1430915738399379752">प्रिंट</translation> <translation id="1484290072879560759">पाठवण्याचा पत्ता निवडा</translation> <translation id="1506687042165942984">या पृष्ठाची जतन केलेली (उदा. कालबाह्य होणारे ज्ञात) प्रत दर्शवा.</translation> <translation id="1517433312004943670">फोन नंबर आवश्यक आहे</translation> @@ -149,7 +149,6 @@ <translation id="2065985942032347596">प्रमाणीकरण आवश्यक</translation> <translation id="2079545284768500474">पूर्ववत करा</translation> <translation id="20817612488360358">सिस्टम प्रॉक्सी सेटिंग्ज वापरण्यास सेट करण्यात आल्या परंतु एक सुस्पष्ट प्रॉक्सी कॉन्फिगरेशन देखील निर्दिष्ट करण्यात आले.</translation> -<translation id="2086652334978798447">Google ने सुचविलेली वैयक्तीकृत सामग्री मिळविण्यासाठी, Chrome मध्ये साइन इन करा.</translation> <translation id="2091887806945687916">ध्वनी</translation> <translation id="2094505752054353250">डोमेन जुळत नाही</translation> <translation id="2096368010154057602">विभाग</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251">सध्या <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="563324245173044180">फसवणारा आशय ब्लॉक केला.</translation> <translation id="5659593005791499971">ईमेल</translation> -<translation id="5669703222995421982">वैयक्तीकृत सामग्री मिळवा</translation> <translation id="5675650730144413517">हे पृष्ठ कार्य करीत नाही</translation> <translation id="5685654322157854305">पाठवण्याचा पत्ता जोडा</translation> <translation id="5689199277474810259">JSON वर निर्यात करा</translation> @@ -813,7 +811,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> नी सुरक्षितता मानकांचे पालन केले नाही.</translation> <translation id="721197778055552897">या समस्येबद्दल <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" />.</translation> <translation id="7219179957768738017">कनेक्शन <ph name="SSL_VERSION" /> वापरते.</translation> -<translation id="7220019174139618249">पासवर्ड "<ph name="FOLDER" />" वर निर्यात करू शकत नाही</translation> <translation id="7220786058474068424">प्रक्रिया करत आहे</translation> <translation id="724691107663265825">साइटमध्ये पुढे मालवेअर आहे</translation> <translation id="724975217298816891">आपले कार्ड तपशील अपडेट करण्यासाठी <ph name="CREDIT_CARD" /> करिता कालबाह्यता तारीख आणि CVC प्रविष्ट करा. आपण पुष्टी केल्यावर, आपले कार्ड तपशील या साइटसह सामायिक केले जातील.</translation>
diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb index 82f30ee..cfd12977 100644 --- a/components/strings/components_strings_ms.xtb +++ b/components/strings/components_strings_ms.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Pengesahan Diperlukan</translation> <translation id="2079545284768500474">Buat asal</translation> <translation id="20817612488360358">Tetapan proksi sistem telah sedia untuk digunakan tetapi konfigurasi proksi jelas juga telah ditentukan.</translation> -<translation id="2086652334978798447">Untuk mendapatkan kandungan diperibadikan yang dicadangkan oleh Google, log masuk ke Chrome.</translation> <translation id="2091887806945687916">Bunyi</translation> <translation id="2094505752054353250">Domain tidak padan</translation> <translation id="2096368010154057602">Jabatan</translation> @@ -642,7 +641,6 @@ <translation id="5633066919399395251">Penyerang yang sedang berada di <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> mungkin cuba memasang atur cara berbahaya pada komputer anda. Atur cara tersebut boleh mencuri atau memadamkan maklumat anda (contohnya, foto, kata laluan, mesej dan kad kredit). <ph name="BEGIN_LEARN_MORE_LINK" />Ketahui lebih lanjut<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="563324245173044180">Kandungan mengelirukan disekat.</translation> <translation id="5659593005791499971">E-mel</translation> -<translation id="5669703222995421982">Dapatkan kandungan yang diperibadikan</translation> <translation id="5675650730144413517">Halaman ini tidak berfungsi</translation> <translation id="5685654322157854305">Tambahkan Alamat Penghantaran</translation> <translation id="5689199277474810259">Eksport ke JSON</translation> @@ -813,7 +811,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> tidak mematuhi piawaian keselamatan.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Ketahui lebih lanjut<ph name="END_LINK" /> mengenai masalah ini.</translation> <translation id="7219179957768738017">Sambungan menggunakan <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Tidak dapat mengeksport kata laluan ke "<ph name="FOLDER" />"</translation> <translation id="7220786058474068424">Memproses</translation> <translation id="724691107663265825">Tapak di hadapan mengandungi perisian hasad</translation> <translation id="724975217298816891">Masukkan tarikh tamat tempoh dan CVC untuk <ph name="CREDIT_CARD" /> bagi mengemas kini butiran kad anda. Setelah anda mengesahkan, butiran kad anda akan dikongsi dengan tapak ini.</translation>
diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb index 11425a1..c9db4ac 100644 --- a/components/strings/components_strings_nl.xtb +++ b/components/strings/components_strings_nl.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Verificatie vereist</translation> <translation id="2079545284768500474">Ongedaan maken</translation> <translation id="20817612488360358">De proxyinstellingen van het systeem moeten worden gebruikt, maar er is ook een expliciete proxyconfiguratie opgegeven.</translation> -<translation id="2086652334978798447">Log in bij Chrome om suggesties met gepersonaliseerde content van Google te ontvangen.</translation> <translation id="2091887806945687916">Geluid</translation> <translation id="2094505752054353250">Domeinen komen niet overeen</translation> <translation id="2096368010154057602">Departement</translation> @@ -193,7 +192,7 @@ <translation id="2359808026110333948">Doorgaan</translation> <translation id="2365563543831475020">Het crashrapport dat is vastgelegd op <ph name="CRASH_TIME" />, is niet geüpload</translation> <translation id="2367567093518048410">Niveau</translation> -<translation id="2384307209577226199">Standaardinstelling van bedrijf</translation> +<translation id="2384307209577226199">Zakelijk standaard</translation> <translation id="2386255080630008482">Het servercertificaat is ingetrokken.</translation> <translation id="2392959068659972793">Beleid weergeven zonder waarde ingesteld</translation> <translation id="239429038616798445">Deze verzendmethode is niet beschikbaar. Kies een andere methode.</translation> @@ -637,7 +636,6 @@ <translation id="5633066919399395251">Cybercriminelen op <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> proberen mogelijk gevaarlijke programma's op je computer te installeren waarmee je gegevens kunnen worden gestolen of verwijderd (bijvoorbeeld foto's, wachtwoorden, berichten en creditcardgegevens). <ph name="BEGIN_LEARN_MORE_LINK" />Meer informatie<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="563324245173044180">Misleidende content geblokkeerd.</translation> <translation id="5659593005791499971">E-mailadres</translation> -<translation id="5669703222995421982">Gepersonaliseerde content ontvangen</translation> <translation id="5675650730144413517">Deze pagina werkt niet</translation> <translation id="5685654322157854305">Verzendadres toevoegen</translation> <translation id="5689199277474810259">Exporteren naar JSON</translation> @@ -807,7 +805,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> voldoet niet aan de beveiligingsnormen.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Meer informatie<ph name="END_LINK" /> over dit probleem.</translation> <translation id="7219179957768738017">De verbinding maakt gebruik van <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Kan geen wachtwoorden exporteren naar '<ph name="FOLDER" />'</translation> <translation id="7220786058474068424">Verwerken</translation> <translation id="724691107663265825">De volgende website bevat malware</translation> <translation id="724975217298816891">Geef de vervaldatum en CVC-code voor <ph name="CREDIT_CARD" /> op om je creditcardgegevens te updaten. Zodra je bevestigt, worden je creditcardgegevens gedeeld met deze site.</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb index 1709e72e..e5f8ad19 100644 --- a/components/strings/components_strings_no.xtb +++ b/components/strings/components_strings_no.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Godkjenning kreves</translation> <translation id="2079545284768500474">Angre</translation> <translation id="20817612488360358">Innstillinger for systemmellomtjener er stilt inn på å brukes, men en uttrykkelig mellomtjenerkonfigurasjon er også angitt.</translation> -<translation id="2086652334978798447">For å få forslag om personlig tilpasset innhold fra Google, logg på Chrome.</translation> <translation id="2091887806945687916">Lyd</translation> <translation id="2094505752054353250">Domenene samsvarer ikke</translation> <translation id="2096368010154057602">Avdeling</translation> @@ -640,7 +639,6 @@ <translation id="5633066919399395251">Angripere som for øyeblikket er på <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />, kan prøve å installere farlige programmer på datamaskinen du bruker, for å stjele eller slette informasjonen din (for eksempel bilder, passord, meldinger og kredittkortinformasjon). <ph name="BEGIN_LEARN_MORE_LINK" />Finn ut mer<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="563324245173044180">Villedende innhold er blokkert.</translation> <translation id="5659593005791499971">E-post</translation> -<translation id="5669703222995421982">Få innhold med et personlig preg</translation> <translation id="5675650730144413517">Denne siden fungerer ikke</translation> <translation id="5685654322157854305">Legg til leveringsadresse</translation> <translation id="5689199277474810259">Eksportér til JSON</translation> @@ -811,7 +809,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> retter seg ikke etter sikkerhetsstandardene.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Mer informasjon<ph name="END_LINK" /> om dette problemet.</translation> <translation id="7219179957768738017">Tilkoblingen bruker <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Kan ikke eksportere passord til «<ph name="FOLDER" />»</translation> <translation id="7220786058474068424">Behandler</translation> <translation id="724691107663265825">Nettstedet du er på vei til, inneholder skadelig programvare</translation> <translation id="724975217298816891">Skriv inn utløpsdatoen og verifiseringskoden for <ph name="CREDIT_CARD" /> for å oppdatere kortinformasjonen din. Når du bekrefter, deles denne informasjonen med dette nettstedet.</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb index 7ab6c59..07ae4fd 100644 --- a/components/strings/components_strings_pl.xtb +++ b/components/strings/components_strings_pl.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Wymagane uwierzytelnienie</translation> <translation id="2079545284768500474">Cofnij</translation> <translation id="20817612488360358">Skonfigurowano używanie systemowych ustawień proxy, ale podano też jawną konfigurację proxy.</translation> -<translation id="2086652334978798447">Aby uzyskać dostęp do spersonalizowanej treści proponowanej przez Google, zaloguj się w Chrome.</translation> <translation id="2091887806945687916">Dźwięk</translation> <translation id="2094505752054353250">Niewłaściwa domena</translation> <translation id="2096368010154057602">Departament</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251">Osoby obecnie atakujące stronę <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> mogą próbować zainstalować na Twoim komputerze niebezpieczne programy, które wykradają lub usuwają informacje (na przykład zdjęcia, hasła, wiadomości lub dane kart kredytowych). <ph name="BEGIN_LEARN_MORE_LINK" />Więcej informacji<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="563324245173044180">Zablokowano treści wprowadzające w błąd.</translation> <translation id="5659593005791499971">E-mail</translation> -<translation id="5669703222995421982">Otrzymywanie spersonalizowanych treści</translation> <translation id="5675650730144413517">Ta strona nie działa</translation> <translation id="5685654322157854305">Dodaj adres wysyłki</translation> <translation id="5689199277474810259">Eksportuj w formacie JSON</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423">Serwer <ph name="HOST_NAME" /> nie spełnia norm bezpieczeństwa.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Więcej informacji<ph name="END_LINK" /> na temat tego problemu.</translation> <translation id="7219179957768738017">Połączenie z szyfrowaniem <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Nie można wyeksportować haseł do folderu „<ph name="FOLDER" />”</translation> <translation id="7220786058474068424">Przetwarzanie</translation> <translation id="724691107663265825">Strona, którą chcesz otworzyć, zawiera złośliwe oprogramowanie</translation> <translation id="724975217298816891">Wpisz datę ważności i kod CVC karty <ph name="CREDIT_CARD" />, by zaktualizować jej szczegółowe dane. Po potwierdzeniu zostaną one udostępnione tej stronie.</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb index 7627df4..9d0015c 100644 --- a/components/strings/components_strings_pt-BR.xtb +++ b/components/strings/components_strings_pt-BR.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Autenticação obrigatória</translation> <translation id="2079545284768500474">Desfazer</translation> <translation id="20817612488360358">As configurações de proxy do sistema são definidas para serem utilizadas, mas uma configuração explícita de proxy também foi especificada.</translation> -<translation id="2086652334978798447">Para receber conteúdo personalizado sugerido pelo Google, faça login no Chrome.</translation> <translation id="2091887806945687916">Som</translation> <translation id="2094505752054353250">Incompatibilidade de domínio</translation> <translation id="2096368010154057602">Departamento</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251">Invasores que estão em <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> no momento podem tentar instalar programas perigosos no seu computador e roubar ou excluir suas informações (por exemplo, fotos, senhas, mensagens e cartões de crédito). <ph name="BEGIN_LEARN_MORE_LINK" />Saiba mais<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="563324245173044180">Conteúdo enganoso bloqueado.</translation> <translation id="5659593005791499971">E-mail</translation> -<translation id="5669703222995421982">Receber conteúdo personalizado</translation> <translation id="5675650730144413517">Esta página não está funcionando</translation> <translation id="5685654322157854305">Adicionar endereço para envio</translation> <translation id="5689199277474810259">Exportar para JSON</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> não adere aos padrões de segurança.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /> sobre este problema.</translation> <translation id="7219179957768738017">A conexão usa a <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Não é possível exportar senhas para "<ph name="FOLDER" />"</translation> <translation id="7220786058474068424">Processando</translation> <translation id="724691107663265825">O site a seguir contém malware</translation> <translation id="724975217298816891">Digite a data de validade e o CVC do <ph name="CREDIT_CARD" /> para atualizar os detalhes do cartão. Depois da confirmação, os detalhes do cartão serão compartilhados com esse site.</translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb index 3ed9fe1..585fe58 100644 --- a/components/strings/components_strings_pt-PT.xtb +++ b/components/strings/components_strings_pt-PT.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Autenticação necessária</translation> <translation id="2079545284768500474">Anular</translation> <translation id="20817612488360358">As definições de proxy do sistema estão definidas para serem utilizadas, mas também está especificada uma configuração de proxy explícita.</translation> -<translation id="2086652334978798447">Para obter conteúdo personalizado sugerido pelo Google, inicie sessão no Chrome.</translation> <translation id="2091887806945687916">Som</translation> <translation id="2094505752054353250">Falta de correspondência de domínio</translation> <translation id="2096368010154057602">Departamento</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251">Os atacantes atualmente em <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> podem tentar instalar programas perigosos no seu computador que roubem ou eliminem as suas informações (por exemplo, fotos, palavras-passe, mensagens e cartões de crédito). <ph name="BEGIN_LEARN_MORE_LINK" />Saiba mais<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="563324245173044180">Conteúdo fraudulento bloqueado.</translation> <translation id="5659593005791499971">Email</translation> -<translation id="5669703222995421982">Obter conteúdo personalizado</translation> <translation id="5675650730144413517">Esta página não está a funcionar</translation> <translation id="5685654322157854305">Adicionar morada para envio</translation> <translation id="5689199277474810259">Exportar para JSON</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> não respeita os padrões de segurança.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /> sobre este problema.</translation> <translation id="7219179957768738017">A ligação utiliza <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Não é possível exportar as palavras-passe para "<ph name="FOLDER" />"</translation> <translation id="7220786058474068424">A processar</translation> <translation id="724691107663265825">O site que pretende visitar contém software malicioso</translation> <translation id="724975217298816891">Introduza a data de validade e o Código de Segurança/CVC de <ph name="CREDIT_CARD" /> para atualizar os detalhes do cartão. Ao confirmar, os detalhes do cartão são partilhados com este site.</translation>
diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb index 0c801e0c..c5af100 100644 --- a/components/strings/components_strings_ro.xtb +++ b/components/strings/components_strings_ro.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Autentificare obligatorie</translation> <translation id="2079545284768500474">Anulează</translation> <translation id="20817612488360358">Setările proxy de sistem sunt setate pentru a fi utilizate, dar o configurație explicită pentru proxy este, de asemenea, specificată.</translation> -<translation id="2086652334978798447">Pentru a obține sugestii de conținut personalizat de la Google, conectează-te la Chrome.</translation> <translation id="2091887806945687916">Sunet</translation> <translation id="2094505752054353250">Nepotrivire domeniu</translation> <translation id="2096368010154057602">Departament</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251">Atacatorii de pe <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> pot încerca să instaleze programe periculoase pe computerul tău, care să îți fure sau să îți șteargă informațiile (de exemplu, fotografii, parole, mesaje sau date despre cardurile de credit). <ph name="BEGIN_LEARN_MORE_LINK" />Află mai multe<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="563324245173044180">Conținutul înșelător a fost blocat.</translation> <translation id="5659593005791499971">Adresă de e-mail</translation> -<translation id="5669703222995421982">Obține conținut personalizat</translation> <translation id="5675650730144413517">Pagina nu funcționează</translation> <translation id="5685654322157854305">Adaugă adresa de expediere</translation> <translation id="5689199277474810259">Exportă în format JSON</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> nu respectă standardele de securitate.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Află mai multe<ph name="END_LINK" /> despre această problemă.</translation> <translation id="7219179957768738017">Conexiunea utilizează <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Nu se pot exporta parole în „<ph name="FOLDER" />”</translation> <translation id="7220786058474068424">Se procesează</translation> <translation id="724691107663265825">Site-ul pe care urmează să îl accesezi conține programe malware</translation> <translation id="724975217298816891">Introdu data de expirare și codul CVC pentru <ph name="CREDIT_CARD" />, pentru a actualiza detaliile cardului. După ce confirmi, acest site va avea acces la detaliile cardului tău.</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb index ec0a195..19133e4 100644 --- a/components/strings/components_strings_ru.xtb +++ b/components/strings/components_strings_ru.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Необходима авторизация</translation> <translation id="2079545284768500474">Отмена</translation> <translation id="20817612488360358">Включены системные настройки прокси-сервера, но при этом его конфигурация задана явным образом.</translation> -<translation id="2086652334978798447">Чтобы мы могли рекомендовать вам интересный контент, войдите в свой аккаунт в Chrome.</translation> <translation id="2091887806945687916">Звук</translation> <translation id="2094505752054353250">Несоответствие домена</translation> <translation id="2096368010154057602">Округ</translation> @@ -640,7 +639,6 @@ <translation id="5633066919399395251">Сайт <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="563324245173044180">Мошеннический контент заблокирован</translation> <translation id="5659593005791499971">Электронная почта</translation> -<translation id="5669703222995421982">Получение персонализированного контента</translation> <translation id="5675650730144413517">Страница недоступна</translation> <translation id="5685654322157854305">Добавить адрес доставки посылок</translation> <translation id="5689199277474810259">Экспортировать как JSON</translation> @@ -811,7 +809,6 @@ <translation id="7210863904660874423">Сайт <ph name="HOST_NAME" /> не соответствует стандартам безопасности.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Подробнее <ph name="END_LINK" /> об этой неполадке.</translation> <translation id="7219179957768738017">В этом подключении используется протокол <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Не удалось экспортировать пароли в папку "<ph name="FOLDER" />"</translation> <translation id="7220786058474068424">Подождите…</translation> <translation id="724691107663265825">Осторожно, вредоносное ПО!</translation> <translation id="724975217298816891">Введите срок действия и CVC-код карты <ph name="CREDIT_CARD" />. После этого ее данные будут переданы сайту.</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb index 746f54e8..f10b778 100644 --- a/components/strings/components_strings_sk.xtb +++ b/components/strings/components_strings_sk.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Vyžaduje sa autentifikácia</translation> <translation id="2079545284768500474">Späť</translation> <translation id="20817612488360358">Používanie systémových nastavení servera proxy je nastavené, avšak je určená aj explicitná konfigurácia servera proxy.</translation> -<translation id="2086652334978798447">Ak chcete získavať prispôsobený obsah navrhnutý Googlom, prihláste sa do Chromu.</translation> <translation id="2091887806945687916">Zvuk</translation> <translation id="2094505752054353250">Domény sa nezhodujú</translation> <translation id="2096368010154057602">Správna oblasť</translation> @@ -637,7 +636,6 @@ <translation id="5633066919399395251">Útočníci na webe <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> sa môžu pokúsiť nainštalovať nebezpečné programy vo vašom počítači, pomocou ktorých ukradnú alebo odstránia informácie (napríklad fotky, heslá, správy a kreditné karty). <ph name="BEGIN_LEARN_MORE_LINK" />Ďalšie informácie<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="563324245173044180">Klamlivý obsah bol zablokovaný.</translation> <translation id="5659593005791499971">E-mail</translation> -<translation id="5669703222995421982">Ako získať prispôsobený obsah</translation> <translation id="5675650730144413517">Táto stránka nefunguje</translation> <translation id="5685654322157854305">Pridať dodaciu adresu</translation> <translation id="5689199277474810259">Exportovať vo formáte JSON</translation> @@ -807,7 +805,6 @@ <translation id="7210863904660874423">Web <ph name="HOST_NAME" /> nespĺňa bezpečnostné štandardy.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Ďalšie informácie<ph name="END_LINK" /> o tomto probléme.</translation> <translation id="7219179957768738017">Spojenie používa protokol <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Heslá sa nedajú exportovať do priečinka <ph name="FOLDER" /></translation> <translation id="7220786058474068424">Spracováva sa</translation> <translation id="724691107663265825">Webové stránky, ktoré chcete otvoriť, obsahujú malvér</translation> <translation id="724975217298816891">Ak chcete aktualizovať podrobnosti o karte <ph name="CREDIT_CARD" />, zadajte dátum vypršania platnosti a kód CVC. Po potvrdení budú podrobnosti o karte zdieľané s týmto webom.</translation>
diff --git a/components/strings/components_strings_sl.xtb b/components/strings/components_strings_sl.xtb index a00f18b9..a8ae0ee 100644 --- a/components/strings/components_strings_sl.xtb +++ b/components/strings/components_strings_sl.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Zahtevano je preverjanje pristnosti</translation> <translation id="2079545284768500474">Razveljavi</translation> <translation id="20817612488360358">Za uporabo so nastavljene sistemske nastavitve strežnika proxy, vendar je navedena tudi izrecna konfiguracija proxyja.</translation> -<translation id="2086652334978798447">Če želite prejemati prilagojeno vsebino, ki jo predlaga Google, se prijavite v Chrome.</translation> <translation id="2091887806945687916">Zvok</translation> <translation id="2094505752054353250">Neujemanje domen</translation> <translation id="2096368010154057602">Departma</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251">Napadalci na spletnem mestu <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> lahko poskusijo v vašem računalniku namestiti nevarne programe, ki kradejo ali brišejo podatke (na primer fotografije, gesla, sporočila in podatke kreditnih kartic). <ph name="BEGIN_LEARN_MORE_LINK" />Več o tem<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="563324245173044180">Zavajajoča vsebina blokirana.</translation> <translation id="5659593005791499971">E-pošta</translation> -<translation id="5669703222995421982">Prilagojena vsebina</translation> <translation id="5675650730144413517">Ta stran ne deluje</translation> <translation id="5685654322157854305">Dodajanje naslova za pošiljanje</translation> <translation id="5689199277474810259">Izvozi v JSON</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423">Spletno mesto <ph name="HOST_NAME" /> ne upošteva varnostnih standardov.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Več o<ph name="END_LINK" /> tej težavi.</translation> <translation id="7219179957768738017">Povezava uporablja <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Gesel ni mogoče izvoziti v »<ph name="FOLDER" />«</translation> <translation id="7220786058474068424">Obdelovanje</translation> <translation id="724691107663265825">Spletno mesto z zlonamerno programsko opremo</translation> <translation id="724975217298816891">Vnesite datum poteka in CVC za <ph name="CREDIT_CARD" />, da posodobite podatke o kartici. Ko potrdite, bodo temu spletnemu mestu razkriti podatki o kartici.</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb index ee5e928..c6cda17 100644 --- a/components/strings/components_strings_sr.xtb +++ b/components/strings/components_strings_sr.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Потребна је потврда идентитета</translation> <translation id="2079545284768500474">Опозови</translation> <translation id="20817612488360358">Подешено је да се користе системска подешавања проксија, али је наведена експлицитна конфигурација проксија.</translation> -<translation id="2086652334978798447">Да бисте добијали персонализовани садржај који предлаже Google, пријавите се у Chrome.</translation> <translation id="2091887806945687916">Звук</translation> <translation id="2094505752054353250">Домени се не подударају</translation> <translation id="2096368010154057602">Департман</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251">Нападачи на <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="563324245173044180">Обмањујући садржај је блокиран.</translation> <translation id="5659593005791499971">Имејл</translation> -<translation id="5669703222995421982">Добијте персонализовани садржај</translation> <translation id="5675650730144413517">Ова страница не функционише</translation> <translation id="5685654322157854305">Додај адресу за испоруку</translation> <translation id="5689199277474810259">Извези у JSON</translation> @@ -811,7 +809,6 @@ <translation id="7210863904660874423">Хост <ph name="HOST_NAME" /> не поштује безбедносне стандарде.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Сазнајте више<ph name="END_LINK" /> о овом проблему.</translation> <translation id="7219179957768738017">Веза користи <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Извоз лозинки у датотеку „<ph name="FOLDER" />“ није успео</translation> <translation id="7220786058474068424">Обрада</translation> <translation id="724691107663265825">Сајт који ћете посетити садржи малвер</translation> <translation id="724975217298816891">Унесите рок трајања и CVC за картицу <ph name="CREDIT_CARD" /> да бисте ажурирали податке о картици. Када будете потврдили, подаци о картици ће бити послати овом сајту.</translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb index 1a65acf..24c958c 100644 --- a/components/strings/components_strings_sv.xtb +++ b/components/strings/components_strings_sv.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Verifiering krävs</translation> <translation id="2079545284768500474">Ångra</translation> <translation id="20817612488360358">Datorns proxyinställningar är inställda på att användas, men det finns också en explicit proxykonfiguration.</translation> -<translation id="2086652334978798447">Logga in i Chrome om du vill få förslag på anpassat innehåll från Google.</translation> <translation id="2091887806945687916">Ljud</translation> <translation id="2094505752054353250">Domänen matchar inte</translation> <translation id="2096368010154057602">Departement</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251">Angripare på <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> kan försöka installera skadliga program som stjäl eller raderar information (t.ex. foton, lösenord, meddelanden och kreditkortsuppgifter) på datorn. <ph name="BEGIN_LEARN_MORE_LINK" />Läs mer<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="563324245173044180">Bedrägligt innehåll har blockerats.</translation> <translation id="5659593005791499971">E-post</translation> -<translation id="5669703222995421982">Få anpassat innehåll</translation> <translation id="5675650730144413517">Sidan fungerar inte</translation> <translation id="5685654322157854305">Lägg till leveransadress</translation> <translation id="5689199277474810259">Exportera som JSON</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> följer inte säkerhetsstandarderna.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Läs mer<ph name="END_LINK" /> om problemet.</translation> <translation id="7219179957768738017">För anslutningen används <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Det gick inte att exportera lösenord till <ph name="FOLDER" /></translation> <translation id="7220786058474068424">Bearbetning pågår</translation> <translation id="724691107663265825">Det förekommer skadlig programvara på följande sida</translation> <translation id="724975217298816891">Ange utgångsdatum och CVC-kod för <ph name="CREDIT_CARD" /> om du vill uppdatera kortinformationen. När du bekräftar delas kortinformationen med den här webbplatsen.</translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb index 91ca24ec..874f2708 100644 --- a/components/strings/components_strings_sw.xtb +++ b/components/strings/components_strings_sw.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Uthibitishaji Unahitajika</translation> <translation id="2079545284768500474">Tendua</translation> <translation id="20817612488360358">Mipangilio ya mfumo ya proksi imewekwa ili kutumiwa lakini usanidi dhahiri wa proksi pia umebainishwa.</translation> -<translation id="2086652334978798447">Ili Google ikupendekezee maudhui yanayokufaa, ingia katika Chrome.</translation> <translation id="2091887806945687916">Sauti</translation> <translation id="2094505752054353250">Kitolingana kwa kikoa</translation> <translation id="2096368010154057602">Idara</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251">Wavamizi ambao sasa wako kwenye <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> huenda wakajaribu kusakinisha programu hatari kwenye kompyuta yako ambazo zinaiba au kufuta maelezo yako (kwa mfano, picha, manenosiri, ujumbe na kadi za mikopo). <ph name="BEGIN_LEARN_MORE_LINK" />Pata maelezo zaidi<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="563324245173044180">Maudhui ya udanganyifu yamezuiwa.</translation> <translation id="5659593005791499971">Barua pepe</translation> -<translation id="5669703222995421982">Pata maudhui yanayokufaa</translation> <translation id="5675650730144413517">Ukurasa huu haufanyi kazi</translation> <translation id="5685654322157854305">Ongeza Anwani ya Mahali Bidhaa Zitakapopelekwa</translation> <translation id="5689199277474810259">Tuma katika mfumo wa JSON</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> haizingatii viwango vya usalama.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Pata maelezo zaidi<ph name="END_LINK" /> kuhusu tatizo hili.</translation> <translation id="7219179957768738017">Muunganisho unatumia <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Imeshindwa kuhamishia manenosiri kwenye "<ph name="FOLDER" />"</translation> <translation id="7220786058474068424">Malipo yanashughulikiwa</translation> <translation id="724691107663265825">Tovuti unayoelekea kufungua ina programu hasidi</translation> <translation id="724975217298816891">Weka tarehe ya kuisha kwa muda wa matumizi na CVC ya <ph name="CREDIT_CARD" /> ili usasishe maelezo ya kadi yako. Baada ya kuthibitisha, maelezo ya kadi yako yatashirikiwa na tovuti hii.</translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb index 28253cd..bd6e6ee 100644 --- a/components/strings/components_strings_ta.xtb +++ b/components/strings/components_strings_ta.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">அங்கீகாரம் தேவைப்படுகிறது</translation> <translation id="2079545284768500474">செயல்தவிர்</translation> <translation id="20817612488360358">கணினி ப்ராக்ஸி அமைப்புகள் பயன்படுத்த அமைக்கப்பட்டுள்ளது. வெளிப்படையான ப்ராக்ஸி உள்ளமைவும் குறிப்பிடப்பட்டுள்ளது.</translation> -<translation id="2086652334978798447">Google பரிந்துரைக்கும் தனிப்பயனாக்கிய உள்ளடக்கத்தைப் பெற, Chrome இல் உள்நுழையவும்.</translation> <translation id="2091887806945687916">ஒலி</translation> <translation id="2094505752054353250">டொமைன் பொருந்தவில்லை</translation> <translation id="2096368010154057602">துறை</translation> @@ -638,7 +637,6 @@ <translation id="5633066919399395251"><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="563324245173044180">ஏமாற்றத்தக்க உள்ளடக்கம் தடுக்கப்பட்டது.</translation> <translation id="5659593005791499971">மின்னஞ்சல்</translation> -<translation id="5669703222995421982">தனிப்பயனாக்கிய உள்ளடக்கத்தைப் பெறுங்கள்</translation> <translation id="5675650730144413517">இந்தப் பக்கம் செயல்படவில்லை</translation> <translation id="5685654322157854305">ஷிப்பிங் முகவரியைச் சேர்</translation> <translation id="5689199277474810259">JSONக்கு ஏற்று</translation> @@ -808,7 +806,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> பாதுகாப்புத் தரநிலைகளுக்கு உட்படவில்லை.</translation> <translation id="721197778055552897">இந்த சிக்கல் குறித்து <ph name="BEGIN_LINK" />மேலும் அறிக<ph name="END_LINK" />.</translation> <translation id="7219179957768738017">இணைப்பு <ph name="SSL_VERSION" /> ஐப் பயன்படுத்துகிறது.</translation> -<translation id="7220019174139618249">"<ph name="FOLDER" />" எனும் கோப்புறைக்குக் கடவுச்சொற்களை ஏற்ற முடியவில்லை</translation> <translation id="7220786058474068424">செயல்படுத்துகிறது</translation> <translation id="724691107663265825">தளத்தில் தீப்பொருள் உள்ளது</translation> <translation id="724975217298816891">கார்டு விவரங்களைப் புதுப்பிக்க, <ph name="CREDIT_CARD" /> இன் காலாவதி தேதியையும் CVC எண்ணையும் உள்ளிடவும். உறுதிசெய்த பின்னர், உங்கள் கார்டு விவரங்கள் இந்தத் தளத்திற்குப் பகிரப்படும்.</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb index 3d8cb687..ed4e7d6 100644 --- a/components/strings/components_strings_te.xtb +++ b/components/strings/components_strings_te.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">ప్రామాణీకరణ అవసరం</translation> <translation id="2079545284768500474">చర్య రద్దు</translation> <translation id="20817612488360358">సిస్టమ్ ప్రాక్సీ సెట్టింగ్లు ఉపయోగించడానికి సెట్ చేయబడ్డాయి కానీ స్పష్టమైన ప్రాక్సీ కాన్ఫిగరేషన్ కూడా పేర్కొనబడింది.</translation> -<translation id="2086652334978798447">Google సూచించే వ్యక్తిగతీకృత కంటెంట్ను పొందడానికి, Chromeకి సైన్ ఇన్ చేయండి.</translation> <translation id="2091887806945687916">ధ్వని</translation> <translation id="2094505752054353250">డొమైన్ సరిపోలలేదు</translation> <translation id="2096368010154057602">శాఖ</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251"><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="563324245173044180">మోసపూరితమైన కంటెంట్ బ్లాక్ చేయబడింది.</translation> <translation id="5659593005791499971">ఇమెయిల్</translation> -<translation id="5669703222995421982">వ్యక్తిగతీకరించిన కంటెంట్ను పొందండి</translation> <translation id="5675650730144413517">ఈ పేజీ పని చేయడం లేదు</translation> <translation id="5685654322157854305">షిప్పింగ్ చిరునామాను జోడించండి</translation> <translation id="5689199277474810259">JSONకు ఎగుమతి చేయి</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> భద్రతా ప్రమాణాలకు కట్టుబడి లేదు.</translation> <translation id="721197778055552897">ఈ సమస్య గురించి <ph name="BEGIN_LINK" />మరింత తెలుసుకోండి <ph name="END_LINK" />.</translation> <translation id="7219179957768738017">కనెక్షన్ <ph name="SSL_VERSION" />ని ఉపయోగిస్తుంది.</translation> -<translation id="7220019174139618249">"<ph name="FOLDER" />"కు పాస్వర్డ్లను ఎగుమతి చేయడం సాధ్యపడలేదు.</translation> <translation id="7220786058474068424">ప్రాసెస్ చేస్తోంది</translation> <translation id="724691107663265825">సైట్ మున్ముందు మాల్వేర్ కలిగి ఉంది</translation> <translation id="724975217298816891">మీ కార్డ్ వివరాలను నవీకరించడానికి <ph name="CREDIT_CARD" /> కార్డ్ గడువు ముగింపు తేదీ మరియు CVCని నమోదు చేయండి. మీరు నిర్ధారించిన తర్వాత, మీ కార్డ్ వివరాలు ఈ సైట్తో భాగస్వామ్యం చేయబడతాయి.</translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb index f2281d8b..09d2a2f 100644 --- a/components/strings/components_strings_th.xtb +++ b/components/strings/components_strings_th.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">ต้องมีการตรวจสอบความถูกต้อง</translation> <translation id="2079545284768500474">เลิกทำ</translation> <translation id="20817612488360358">มีการกำหนดให้ใช้การตั้งค่าพร็อกซีระบบ แต่ก็มีการระบุการกำหนดค่าพร็อกซีอย่างชัดเจนไว้ด้วยเช่นกัน</translation> -<translation id="2086652334978798447">หากต้องการรับคำแนะนำเนื้อหาที่เหมาะสำหรับคุณจาก Google ให้ลงชื่อเข้าใช้ Chrome</translation> <translation id="2091887806945687916">เสียง</translation> <translation id="2094505752054353250">โดเมนไม่ตรง</translation> <translation id="2096368010154057602">จังหวัด</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251">ผู้โจมตีที่กำลังอยู่ใน <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="563324245173044180">บล็อกเนื้อหาที่หลอกลวงแล้ว</translation> <translation id="5659593005791499971">อีเมล</translation> -<translation id="5669703222995421982">รับเนื้อหาที่ปรับเปลี่ยนในแบบของคุณ</translation> <translation id="5675650730144413517">หน้านี้ใช้ไม่ได้</translation> <translation id="5685654322157854305">เพิ่มที่อยู่สำหรับจัดส่ง</translation> <translation id="5689199277474810259">ส่งออกไปยัง JSON</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> ไม่เป็นไปตามมาตรฐานความปลอดภัย</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />เรียนรู้เพิ่มเติม<ph name="END_LINK" /> เกี่ยวกับปัญหานี้</translation> <translation id="7219179957768738017">การเชื่อมต่อใช้ <ph name="SSL_VERSION" /></translation> -<translation id="7220019174139618249">ส่งออกรหัสผ่านไปยัง "<ph name="FOLDER" />" ไม่ได้</translation> <translation id="7220786058474068424">กำลังดำเนินการ</translation> <translation id="724691107663265825">ไซต์ที่จะเปิดมีมัลแวร์</translation> <translation id="724975217298816891">ป้อนวันหมดอายุและ CVC สำหรับ <ph name="CREDIT_CARD" /> เพื่ออัปเดตรายละเอียดของบัตร เมื่อคุณยืนยันแล้ว รายละเอียดบัตรของคุณจะแชร์กับเว็บไซต์นี้</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb index 17cfba9..3f4e1e8 100644 --- a/components/strings/components_strings_tr.xtb +++ b/components/strings/components_strings_tr.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Kimlik Doğrulaması Gerekiyor</translation> <translation id="2079545284768500474">Geri al</translation> <translation id="20817612488360358">Sistem proxy ayarları kullanılmak üzere ayarlandı, ancak açık bir proxy yapılandırması da belirtildi.</translation> -<translation id="2086652334978798447">Google tarafından önerilen kişiselleştirilmiş içeriği almak için Chrome'da oturum açın.</translation> <translation id="2091887806945687916">Ses</translation> <translation id="2094505752054353250">Alan adı uyuşmazlığı</translation> <translation id="2096368010154057602">Bölüm</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251">Şu anda <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> sitesindeki saldırganlar, bilgilerinizi (örneğin, fotoğraflar, şifreler, mesajlar ve kredi kartları) çalabilecek veya silebilecek tehlikeli programları bilgisayarınıza yüklemeye çalışabilir. <ph name="BEGIN_LEARN_MORE_LINK" />Daha fazla bilgi<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="563324245173044180">Yanıltıcı içerik engellendi.</translation> <translation id="5659593005791499971">E-posta</translation> -<translation id="5669703222995421982">Kişiselleştirilmiş içerikler alma</translation> <translation id="5675650730144413517">Bu sayfa çalışmıyor</translation> <translation id="5685654322157854305">Gönderim Adresi Ekle</translation> <translation id="5689199277474810259">JSON'a aktar</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> güvenlik standartlarına uymuyor.</translation> <translation id="721197778055552897">Bu sorun hakkında <ph name="BEGIN_LINK" />daha fazla<ph name="END_LINK" /> bilgi edinin.</translation> <translation id="7219179957768738017">Bağlantı <ph name="SSL_VERSION" /> kullanıyor.</translation> -<translation id="7220019174139618249">Şifreler "<ph name="FOLDER" />" klasörüne aktarılamıyor</translation> <translation id="7220786058474068424">İşleme koyuluyor</translation> <translation id="724691107663265825">Gideceğiniz site kötü amaçlı yazılım içeriyor</translation> <translation id="724975217298816891">Kart ayrıntılarınızı güncellemek için <ph name="CREDIT_CARD" /> numaralı karta ilişkin son kullanma tarihini ve CVC kodunu girin. Onayladığınızda kart ayrıntılarınız bu siteyle paylaşılacaktır.</translation>
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb index c6f8e60..5728e7d 100644 --- a/components/strings/components_strings_uk.xtb +++ b/components/strings/components_strings_uk.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Потрібна автентифікація</translation> <translation id="2079545284768500474">Відмінити</translation> <translation id="20817612488360358">Системні параметри проксі-сервера налаштовано для використання, але чітко вказано налаштування проксі-сервера.</translation> -<translation id="2086652334978798447">Щоб отримувати персоналізовані пропозиції від Google, увійдіть в обліковий запис Chrome.</translation> <translation id="2091887806945687916">Сигнал</translation> <translation id="2094505752054353250">Невідповідність домену</translation> <translation id="2096368010154057602">Департамент</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251">Зловмисники на сайті <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="563324245173044180">Заблоковано оманливий вміст.</translation> <translation id="5659593005791499971">Електронна пошта</translation> -<translation id="5669703222995421982">Отримувати персоналізовані пропозиції</translation> <translation id="5675650730144413517">Сторінка не працює</translation> <translation id="5685654322157854305">Додати адресу доставки</translation> <translation id="5689199277474810259">Експортувати у формат JSON</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423">Хост <ph name="HOST_NAME" /> не відповідає стандартам безпеки.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Докладніше<ph name="END_LINK" /> про цю проблему.</translation> <translation id="7219179957768738017">З'єднання використовує версію <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Не вдається експортувати паролі в папку "<ph name="FOLDER" />"</translation> <translation id="7220786058474068424">Обробка</translation> <translation id="724691107663265825">Сайт містить зловмисне програмне забезпечення</translation> <translation id="724975217298816891">Введіть термін дії та код CVC картки <ph name="CREDIT_CARD" />, щоб оновити її дані. Щойно ви підтвердите дані картки, цей сайт отримає доступ до них.</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb index 2fcd6f0..6d741aa3 100644 --- a/components/strings/components_strings_vi.xtb +++ b/components/strings/components_strings_vi.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">Yêu cầu Xác thực</translation> <translation id="2079545284768500474">Hoàn tác</translation> <translation id="20817612488360358">Cài đặt proxy hệ thống được đặt để sử dụng nhưng cấu hình proxy rõ ràng cũng được chỉ định.</translation> -<translation id="2086652334978798447">Để nhận nội dung được cá nhân hóa do Google đề xuất, hãy đăng nhập vào Chrome.</translation> <translation id="2091887806945687916">Âm thanh</translation> <translation id="2094505752054353250">Miền không khớp</translation> <translation id="2096368010154057602">Khu hành chính</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251">Những kẻ tấn công hiện ở trên <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> có thể cố gắng cài đặt các chương trình nguy hiểm vào máy tính của bạn. Các chương trình này sẽ đánh cắp hoặc xóa thông tin của bạn (ví dụ: ảnh, mật khẩu, thư và thẻ tín dụng). <ph name="BEGIN_LEARN_MORE_LINK" />Tìm hiểu thêm<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="563324245173044180">Đã chặn nội dung lừa đảo.</translation> <translation id="5659593005791499971">Email</translation> -<translation id="5669703222995421982">Nhận nội dung được cá nhân hóa</translation> <translation id="5675650730144413517">Trang này hiện không hoạt động</translation> <translation id="5685654322157854305">Thêm địa chỉ giao hàng</translation> <translation id="5689199277474810259">Xuất sang định dạng JSON</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> không tuân thủ các tiêu chuẩn bảo mật.</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />Tìm hiểu thêm<ph name="END_LINK" /> về sự cố này.</translation> <translation id="7219179957768738017">Kết nối sử dụng <ph name="SSL_VERSION" />.</translation> -<translation id="7220019174139618249">Không thể xuất mật khẩu sang "<ph name="FOLDER" />"</translation> <translation id="7220786058474068424">Đang xử lý</translation> <translation id="724691107663265825">Trang web bạn sắp truy cập chứa phần mềm độc hại</translation> <translation id="724975217298816891">Nhập ngày hết hạn và CVC cho <ph name="CREDIT_CARD" /> để cập nhật chi tiết thẻ của bạn. 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>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb index bc585af5..f557e5c 100644 --- a/components/strings/components_strings_zh-CN.xtb +++ b/components/strings/components_strings_zh-CN.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">需要进行身份验证</translation> <translation id="2079545284768500474">撤消</translation> <translation id="20817612488360358">已设置为使用系统代理设置,但同时指定了一个明确的代理配置。</translation> -<translation id="2086652334978798447">要获取 Google 推荐的个性化内容,请登录 Chrome。</translation> <translation id="2091887806945687916">声音</translation> <translation id="2094505752054353250">网域不匹配</translation> <translation id="2096368010154057602">省</translation> @@ -638,7 +637,6 @@ <translation id="5633066919399395251">攻击者可能会试图通过 <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="563324245173044180">欺骗性内容已被拦截。</translation> <translation id="5659593005791499971">电子邮件</translation> -<translation id="5669703222995421982">获取个性化内容</translation> <translation id="5675650730144413517">该网页无法正常运作</translation> <translation id="5685654322157854305">添加送货地址</translation> <translation id="5689199277474810259">导出为 JSON 格式</translation> @@ -808,7 +806,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> 不符合相关安全标准。</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />详细了解<ph name="END_LINK" />此问题。</translation> <translation id="7219179957768738017">该连接使用 <ph name="SSL_VERSION" />。</translation> -<translation id="7220019174139618249">无法将密码导出到“<ph name="FOLDER" />”</translation> <translation id="7220786058474068424">正在处理</translation> <translation id="724691107663265825">您要访问的网站包含恶意软件</translation> <translation id="724975217298816891">输入“<ph name="CREDIT_CARD" />”的过期日期和银行卡验证码 (CVC) 以更新您的信用卡详情。在您确认后,您的信用卡详情将与此网站共享。</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb index cd041bf..a8735a3 100644 --- a/components/strings/components_strings_zh-TW.xtb +++ b/components/strings/components_strings_zh-TW.xtb
@@ -149,7 +149,6 @@ <translation id="2065985942032347596">需要驗證</translation> <translation id="2079545284768500474">復原</translation> <translation id="20817612488360358">雖然系統 Proxy 設定已設為使用,不過也指定了明確 Proxy 設定。</translation> -<translation id="2086652334978798447">如要取得個人化的 Google 推薦內容,請登入 Chrome。</translation> <translation id="2091887806945687916">音訊</translation> <translation id="2094505752054353250">網域不符</translation> <translation id="2096368010154057602">省</translation> @@ -641,7 +640,6 @@ <translation id="5633066919399395251">攻擊者目前可能會試圖透過 <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="563324245173044180">已封鎖欺騙性內容。</translation> <translation id="5659593005791499971">電子郵件</translation> -<translation id="5669703222995421982">取得個人化內容</translation> <translation id="5675650730144413517">這個網頁無法正常運作</translation> <translation id="5685654322157854305">新增運送地址</translation> <translation id="5689199277474810259">以 JSON 格式匯出</translation> @@ -812,7 +810,6 @@ <translation id="7210863904660874423"><ph name="HOST_NAME" /> 不符合安全性標準。</translation> <translation id="721197778055552897"><ph name="BEGIN_LINK" />進一步瞭解<ph name="END_LINK" />這個問題。</translation> <translation id="7219179957768738017">這個連線使用 <ph name="SSL_VERSION" />。</translation> -<translation id="7220019174139618249">無法將密碼匯出到「<ph name="FOLDER" />」</translation> <translation id="7220786058474068424">處理中</translation> <translation id="724691107663265825">你要造訪的網站含有惡意軟體</translation> <translation id="724975217298816891">請輸入 <ph name="CREDIT_CARD" /> 的有效日期和信用卡安全碼,更新您的信用卡詳細資訊。完成驗證後,這個網站就會取得您的信用卡詳細資訊。</translation>
diff --git a/components/ukm/ukm_recorder_impl.cc b/components/ukm/ukm_recorder_impl.cc index 8cfdb8f..7f431a8 100644 --- a/components/ukm/ukm_recorder_impl.cc +++ b/components/ukm/ukm_recorder_impl.cc
@@ -32,8 +32,7 @@ } bool IsWhitelistedSourceId(SourceId source_id) { - return (static_cast<int64_t>(source_id) & - static_cast<int64_t>(SourceIdType::NAVIGATION_ID)) != 0; + return GetSourceIdType(source_id) == SourceIdType::NAVIGATION_ID; } // Gets the maximum number of Sources we'll keep in memory before discarding any
diff --git a/components/ukm/ukm_source.cc b/components/ukm/ukm_source.cc index 21ee88f0..75ed807 100644 --- a/components/ukm/ukm_source.cc +++ b/components/ukm/ukm_source.cc
@@ -53,7 +53,12 @@ DCHECK(!url.is_empty()); if (url_ == url) return; - if (initial_url_.is_empty()) + // We only track multiple URLs for navigation-based Sources. These are + // currently the only sources that intentionally record multiple entries, + // and this makes it easier to compare other source URLs against a + // whitelist. + if (initial_url_.is_empty() && + GetSourceIdType(id_) == SourceIdType::NAVIGATION_ID) initial_url_ = url_; url_ = url; } @@ -65,8 +70,10 @@ proto_source->set_id(id_); proto_source->set_url(GetShortenedURL(url_)); - if (!initial_url_.is_empty()) + if (!initial_url_.is_empty()) { + DCHECK_EQ(SourceIdType::NAVIGATION_ID, GetSourceIdType(id_)); proto_source->set_initial_url(GetShortenedURL(initial_url_)); + } if (custom_tab_state_ != kCustomTabUnset) proto_source->set_is_custom_tab(custom_tab_state_ == kCustomTabTrue);
diff --git a/components/ukm/ukm_source.h b/components/ukm/ukm_source.h index d2cb74f2..9ad8ace 100644 --- a/components/ukm/ukm_source.h +++ b/components/ukm/ukm_source.h
@@ -54,7 +54,8 @@ GURL url_; // The initial URL for this source. - // Only set if more than one value of URL was recorded. + // Only set for navigation-id based sources where more than one value of URL + // was recorded. GURL initial_url_; // A flag indicating if metric was collected in a custom tab. This is set
diff --git a/components/url_formatter/elide_url.cc b/components/url_formatter/elide_url.cc index 222fefa..dd530b3b 100644 --- a/components/url_formatter/elide_url.cc +++ b/components/url_formatter/elide_url.cc
@@ -405,13 +405,15 @@ base::string16 ElideHost(const GURL& url, const gfx::FontList& font_list, - float available_pixel_width) { + float available_pixel_width, + gfx::Typesetter typesetter) { base::string16 url_host; base::string16 url_domain; base::string16 url_subdomain; SplitHost(url, &url_host, &url_domain, &url_subdomain); - const float pixel_width_url_host = gfx::GetStringWidthF(url_host, font_list); + const float pixel_width_url_host = + gfx::GetStringWidthF(url_host, font_list, typesetter); if (available_pixel_width >= pixel_width_url_host) return url_host; @@ -419,13 +421,13 @@ return url_domain; const float pixel_width_url_domain = - gfx::GetStringWidthF(url_domain, font_list); + gfx::GetStringWidthF(url_domain, font_list, typesetter); float subdomain_width = available_pixel_width - pixel_width_url_domain; if (subdomain_width <= 0) return base::string16(gfx::kEllipsisUTF16) + kDot + url_domain; return gfx::ElideText(url_host, font_list, available_pixel_width, - gfx::ELIDE_HEAD); + gfx::ELIDE_HEAD, typesetter); } #endif // !defined(OS_ANDROID)
diff --git a/components/url_formatter/elide_url.h b/components/url_formatter/elide_url.h index 82fb96c..cc86db3 100644 --- a/components/url_formatter/elide_url.h +++ b/components/url_formatter/elide_url.h
@@ -11,6 +11,7 @@ #include "base/strings/string16.h" #include "build/build_config.h" +#include "ui/gfx/text_constants.h" class GURL; @@ -50,7 +51,8 @@ // depending on the width. base::string16 ElideHost(const GURL& host_url, const gfx::FontList& font_list, - float available_pixel_width); + float available_pixel_width, + gfx::Typesetter typesetter = gfx::Typesetter::DEFAULT); #endif // !defined(OS_ANDROID) // Similar to ElideUrl, this function shortens a URL to fit a specified width,
diff --git a/components/viz/common/features.cc b/components/viz/common/features.cc index 7c5c867b..7f24bdf 100644 --- a/components/viz/common/features.cc +++ b/components/viz/common/features.cc
@@ -10,8 +10,13 @@ namespace features { +#if defined(USE_AURA) +const base::Feature kEnableSurfaceSynchronization{ + "SurfaceSynchronization", base::FEATURE_ENABLED_BY_DEFAULT}; +#else const base::Feature kEnableSurfaceSynchronization{ "SurfaceSynchronization", base::FEATURE_DISABLED_BY_DEFAULT}; +#endif bool IsSurfaceSynchronizationEnabled() { auto* command_line = base::CommandLine::ForCurrentProcess();
diff --git a/components/viz/common/surfaces/local_surface_id.cc b/components/viz/common/surfaces/local_surface_id.cc index 49bc0852..eea2ece 100644 --- a/components/viz/common/surfaces/local_surface_id.cc +++ b/components/viz/common/surfaces/local_surface_id.cc
@@ -9,8 +9,9 @@ namespace viz { std::string LocalSurfaceId::ToString() const { - return base::StringPrintf("LocalSurfaceId(%d, %d, %s" PRIu64 ")", parent_id_, - child_sequence_number_, nonce_.ToString().c_str()); + return base::StringPrintf("LocalSurfaceId(%d, %d, %s" PRIu64 ")", + parent_sequence_number_, child_sequence_number_, + nonce_.ToString().c_str()); } std::ostream& operator<<(std::ostream& out,
diff --git a/components/viz/common/surfaces/local_surface_id.h b/components/viz/common/surfaces/local_surface_id.h index 35d170d8..44a884a 100644 --- a/components/viz/common/surfaces/local_surface_id.h +++ b/components/viz/common/surfaces/local_surface_id.h
@@ -23,29 +23,35 @@ class VIZ_COMMON_EXPORT LocalSurfaceId { public: - constexpr LocalSurfaceId() : parent_id_(0), child_sequence_number_(0) {} + constexpr LocalSurfaceId() + : parent_sequence_number_(0), child_sequence_number_(0) {} constexpr LocalSurfaceId(const LocalSurfaceId& other) - : parent_id_(other.parent_id_), + : parent_sequence_number_(other.parent_sequence_number_), child_sequence_number_(other.child_sequence_number_), nonce_(other.nonce_) {} - constexpr LocalSurfaceId(uint32_t parent_id, + constexpr LocalSurfaceId(uint32_t parent_sequence_number, const base::UnguessableToken& nonce) - : parent_id_(parent_id), child_sequence_number_(1), nonce_(nonce) {} + : parent_sequence_number_(parent_sequence_number), + child_sequence_number_(1), + nonce_(nonce) {} - constexpr LocalSurfaceId(uint32_t parent_id, + constexpr LocalSurfaceId(uint32_t parent_sequence_number, uint32_t child_sequence_number, const base::UnguessableToken& nonce) - : parent_id_(parent_id), + : parent_sequence_number_(parent_sequence_number), child_sequence_number_(child_sequence_number), nonce_(nonce) {} constexpr bool is_valid() const { - return parent_id_ != 0 && child_sequence_number_ != 0 && !nonce_.is_empty(); + return parent_sequence_number_ != 0 && child_sequence_number_ != 0 && + !nonce_.is_empty(); } - constexpr uint32_t parent_id() const { return parent_id_; } + constexpr uint32_t parent_sequence_number() const { + return parent_sequence_number_; + } constexpr uint32_t child_sequence_number() const { return child_sequence_number_; @@ -54,7 +60,7 @@ constexpr const base::UnguessableToken& nonce() const { return nonce_; } bool operator==(const LocalSurfaceId& other) const { - return parent_id_ == other.parent_id_ && + return parent_sequence_number_ == other.parent_sequence_number_ && child_sequence_number_ == other.child_sequence_number_ && nonce_ == other.nonce_; } @@ -67,7 +73,7 @@ DCHECK(is_valid()) << ToString(); return base::HashInts( static_cast<uint64_t>( - base::HashInts(parent_id_, child_sequence_number_)), + base::HashInts(parent_sequence_number_, child_sequence_number_)), static_cast<uint64_t>(base::UnguessableTokenHash()(nonce_))); } @@ -79,7 +85,7 @@ friend bool operator<(const LocalSurfaceId& lhs, const LocalSurfaceId& rhs); - uint32_t parent_id_; + uint32_t parent_sequence_number_; uint32_t child_sequence_number_; base::UnguessableToken nonce_; }; @@ -89,8 +95,10 @@ const LocalSurfaceId& local_surface_id); inline bool operator<(const LocalSurfaceId& lhs, const LocalSurfaceId& rhs) { - return std::tie(lhs.parent_id_, lhs.child_sequence_number_, lhs.nonce_) < - std::tie(rhs.parent_id_, rhs.child_sequence_number_, rhs.nonce_); + return std::tie(lhs.parent_sequence_number_, lhs.child_sequence_number_, + lhs.nonce_) < std::tie(rhs.parent_sequence_number_, + rhs.child_sequence_number_, + rhs.nonce_); } inline bool operator>(const LocalSurfaceId& lhs, const LocalSurfaceId& rhs) {
diff --git a/components/viz/service/display/ca_layer_overlay.cc b/components/viz/service/display/ca_layer_overlay.cc index 38bbfdb..eb6c8aa99 100644 --- a/components/viz/service/display/ca_layer_overlay.cc +++ b/components/viz/service/display/ca_layer_overlay.cc
@@ -7,7 +7,7 @@ #include <algorithm> #include "base/metrics/histogram_macros.h" -#include "cc/resources/resource_provider.h" +#include "cc/resources/display_resource_provider.h" #include "components/viz/common/quads/render_pass_draw_quad.h" #include "components/viz/common/quads/solid_color_draw_quad.h" #include "components/viz/common/quads/stream_video_draw_quad.h" @@ -75,7 +75,7 @@ } CALayerResult FromRenderPassQuad( - cc::ResourceProvider* resource_provider, + cc::DisplayResourceProvider* resource_provider, const RenderPassDrawQuad* quad, const base::flat_map<RenderPassId, cc::FilterOperations*>& render_pass_filters, @@ -104,9 +104,10 @@ return CA_LAYER_SUCCESS; } -CALayerResult FromStreamVideoQuad(cc::ResourceProvider* resource_provider, - const StreamVideoDrawQuad* quad, - CALayerOverlay* ca_layer_overlay) { +CALayerResult FromStreamVideoQuad( + cc::DisplayResourceProvider* resource_provider, + const StreamVideoDrawQuad* quad, + CALayerOverlay* ca_layer_overlay) { unsigned resource_id = quad->resource_id(); if (!resource_provider->IsOverlayCandidate(resource_id)) return CA_LAYER_FAILED_STREAM_VIDEO_NOT_CANDIDATE; @@ -131,7 +132,7 @@ return CA_LAYER_SUCCESS; } -CALayerResult FromTextureQuad(cc::ResourceProvider* resource_provider, +CALayerResult FromTextureQuad(cc::DisplayResourceProvider* resource_provider, const TextureDrawQuad* quad, CALayerOverlay* ca_layer_overlay) { unsigned resource_id = quad->resource_id(); @@ -159,7 +160,7 @@ return CA_LAYER_SUCCESS; } -CALayerResult FromTileQuad(cc::ResourceProvider* resource_provider, +CALayerResult FromTileQuad(cc::DisplayResourceProvider* resource_provider, const TileDrawQuad* quad, CALayerOverlay* ca_layer_overlay) { unsigned resource_id = quad->resource_id(); @@ -176,7 +177,7 @@ class CALayerOverlayProcessor { public: CALayerResult FromDrawQuad( - cc::ResourceProvider* resource_provider, + cc::DisplayResourceProvider* resource_provider, const gfx::RectF& display_rect, const DrawQuad* quad, const base::flat_map<RenderPassId, cc::FilterOperations*>& @@ -276,7 +277,7 @@ CALayerOverlay::~CALayerOverlay() {} bool ProcessForCALayerOverlays( - cc::ResourceProvider* resource_provider, + cc::DisplayResourceProvider* resource_provider, const gfx::RectF& display_rect, const QuadList& quad_list, const base::flat_map<RenderPassId, cc::FilterOperations*>&
diff --git a/components/viz/service/display/ca_layer_overlay.h b/components/viz/service/display/ca_layer_overlay.h index eee6623..248fbeee 100644 --- a/components/viz/service/display/ca_layer_overlay.h +++ b/components/viz/service/display/ca_layer_overlay.h
@@ -15,7 +15,7 @@ #include "ui/gl/ca_renderer_layer_params.h" namespace cc { -class ResourceProvider; +class DisplayResourceProvider; } namespace viz { @@ -77,7 +77,7 @@ // Returns true if all quads in the root render pass have been replaced by // CALayerOverlays. bool ProcessForCALayerOverlays( - cc::ResourceProvider* resource_provider, + cc::DisplayResourceProvider* resource_provider, const gfx::RectF& display_rect, const QuadList& quad_list, const base::flat_map<RenderPassId, cc::FilterOperations*>&
diff --git a/components/viz/service/display/dc_layer_overlay.cc b/components/viz/service/display/dc_layer_overlay.cc index bdf8ea2..592eb099 100644 --- a/components/viz/service/display/dc_layer_overlay.cc +++ b/components/viz/service/display/dc_layer_overlay.cc
@@ -6,7 +6,7 @@ #include "base/metrics/histogram_macros.h" #include "cc/base/math_util.h" -#include "cc/resources/resource_provider.h" +#include "cc/resources/display_resource_provider.h" #include "components/viz/common/quads/render_pass_draw_quad.h" #include "components/viz/common/quads/solid_color_draw_quad.h" #include "components/viz/common/quads/yuv_video_draw_quad.h" @@ -19,7 +19,7 @@ namespace { DCLayerOverlayProcessor::DCLayerResult FromYUVQuad( - cc::ResourceProvider* resource_provider, + cc::DisplayResourceProvider* resource_provider, const YUVVideoDrawQuad* quad, DCLayerOverlay* ca_layer_overlay) { for (const auto& resource : quad->resources) { @@ -90,7 +90,7 @@ DCLayerOverlayProcessor::~DCLayerOverlayProcessor() = default; DCLayerOverlayProcessor::DCLayerResult DCLayerOverlayProcessor::FromDrawQuad( - cc::ResourceProvider* resource_provider, + cc::DisplayResourceProvider* resource_provider, const gfx::RectF& display_rect, QuadList::ConstIterator quad_list_begin, QuadList::ConstIterator quad, @@ -129,12 +129,13 @@ return result; } -void DCLayerOverlayProcessor::Process(cc::ResourceProvider* resource_provider, - const gfx::RectF& display_rect, - RenderPassList* render_passes, - gfx::Rect* overlay_damage_rect, - gfx::Rect* damage_rect, - DCLayerOverlayList* ca_layer_overlays) { +void DCLayerOverlayProcessor::Process( + cc::DisplayResourceProvider* resource_provider, + const gfx::RectF& display_rect, + RenderPassList* render_passes, + gfx::Rect* overlay_damage_rect, + gfx::Rect* damage_rect, + DCLayerOverlayList* ca_layer_overlays) { DCHECK(pass_info_.empty()); processed_overlay_in_frame_ = false; if (base::FeatureList::IsEnabled( @@ -217,7 +218,7 @@ } void DCLayerOverlayProcessor::ProcessRenderPass( - cc::ResourceProvider* resource_provider, + cc::DisplayResourceProvider* resource_provider, const gfx::RectF& display_rect, RenderPass* render_pass, bool is_root,
diff --git a/components/viz/service/display/dc_layer_overlay.h b/components/viz/service/display/dc_layer_overlay.h index 6ef9025..280b8dfe2 100644 --- a/components/viz/service/display/dc_layer_overlay.h +++ b/components/viz/service/display/dc_layer_overlay.h
@@ -15,7 +15,7 @@ #include "ui/gl/dc_renderer_layer_params.h" namespace cc { -class ResourceProvider; +class DisplayResourceProvider; } namespace viz { @@ -96,7 +96,7 @@ DCLayerOverlayProcessor(); ~DCLayerOverlayProcessor(); - void Process(cc::ResourceProvider* resource_provider, + void Process(cc::DisplayResourceProvider* resource_provider, const gfx::RectF& display_rect, RenderPassList* render_passes, gfx::Rect* overlay_damage_rect, @@ -108,7 +108,7 @@ } private: - DCLayerResult FromDrawQuad(cc::ResourceProvider* resource_provider, + DCLayerResult FromDrawQuad(cc::DisplayResourceProvider* resource_provider, const gfx::RectF& display_rect, QuadList::ConstIterator quad_list_begin, QuadList::ConstIterator quad, @@ -117,7 +117,7 @@ QuadList::Iterator ProcessRenderPassDrawQuad(RenderPass* render_pass, gfx::Rect* damage_rect, QuadList::Iterator it); - void ProcessRenderPass(cc::ResourceProvider* resource_provider, + void ProcessRenderPass(cc::DisplayResourceProvider* resource_provider, const gfx::RectF& display_rect, RenderPass* render_pass, bool is_root,
diff --git a/components/viz/service/display/display.cc b/components/viz/service/display/display.cc index f42c38c7..d923dda 100644 --- a/components/viz/service/display/display.cc +++ b/components/viz/service/display/display.cc
@@ -204,8 +204,7 @@ void Display::InitializeRenderer() { resource_provider_ = std::make_unique<cc::DisplayResourceProvider>( - output_surface_->context_provider(), bitmap_manager_, - settings_.resource_settings); + output_surface_->context_provider(), bitmap_manager_); if (output_surface_->context_provider()) { if (!settings_.use_skia_renderer) {
diff --git a/components/viz/service/display/gl_renderer_unittest.cc b/components/viz/service/display/gl_renderer_unittest.cc index 862f1cf..6830c10 100644 --- a/components/viz/service/display/gl_renderer_unittest.cc +++ b/components/viz/service/display/gl_renderer_unittest.cc
@@ -212,6 +212,9 @@ TestShadersWithOutputColorMatrix(ProgramKey::DebugBorder()); TestShadersWithOutputColorMatrix(ProgramKey::SolidColor(NO_AA, false)); TestShadersWithOutputColorMatrix(ProgramKey::SolidColor(USE_AA, false)); + + TestShader(ProgramKey::SolidColor(NO_AA, true)); + TestShadersWithOutputColorMatrix(ProgramKey::SolidColor(NO_AA, true)); } void TestColorShaders() {
diff --git a/components/viz/service/display/renderer_pixeltest.cc b/components/viz/service/display/renderer_pixeltest.cc index db4a4f1..d440e5a 100644 --- a/components/viz/service/display/renderer_pixeltest.cc +++ b/components/viz/service/display/renderer_pixeltest.cc
@@ -347,7 +347,7 @@ } ResourceFormat yuv_highbit_resource_format = - resource_provider->YuvResourceFormat(bits_per_channel); + child_resource_provider->YuvResourceFormat(bits_per_channel); float multiplier = 1.0;
diff --git a/components/viz/service/display/vulkan_renderer.cc b/components/viz/service/display/vulkan_renderer.cc index 8d778c6..87ede657 100644 --- a/components/viz/service/display/vulkan_renderer.cc +++ b/components/viz/service/display/vulkan_renderer.cc
@@ -31,7 +31,8 @@ } ResourceFormat VulkanRenderer::BackbufferFormat() const { - return resource_provider_->best_texture_format(); + NOTIMPLEMENTED(); + return RGBA_8888; } void VulkanRenderer::BindFramebufferToTexture(
diff --git a/components/viz/service/frame_sinks/compositor_frame_sink_support.cc b/components/viz/service/frame_sinks/compositor_frame_sink_support.cc index 471bd03..79aa485 100644 --- a/components/viz/service/frame_sinks/compositor_frame_sink_support.cc +++ b/components/viz/service/frame_sinks/compositor_frame_sink_support.cc
@@ -207,8 +207,8 @@ // LocalSurfaceIds should be monotonically increasing. This ID is used // to determine the freshness of a surface at aggregation time. bool monotonically_increasing_id = - local_surface_id.parent_id() > - current_surface_id_.local_surface_id().parent_id(); + local_surface_id.parent_sequence_number() > + current_surface_id_.local_surface_id().parent_sequence_number(); if (!surface_info.is_valid() || !monotonically_increasing_id) { TRACE_EVENT_INSTANT0("viz", "Surface Invariants Violation",
diff --git a/components/viz/service/surfaces/surface.cc b/components/viz/service/surfaces/surface.cc index 0fc08cf8..f72763dc 100644 --- a/components/viz/service/surfaces/surface.cc +++ b/components/viz/service/surfaces/surface.cc
@@ -211,7 +211,7 @@ if (it == frame_sink_id_dependencies_.end()) return; - if (surface_id.local_surface_id().parent_id() >= it->second) { + if (surface_id.local_surface_id().parent_sequence_number() >= it->second) { frame_sink_id_dependencies_.erase(it); surface_manager_->SurfaceDependenciesChanged(this, {}, {surface_id.frame_sink_id()}); @@ -327,11 +327,13 @@ // If a activation dependency does not have a corresponding active frame in // the display compositor, then it blocks this frame. if (!dependency || !dependency->HasActiveFrame()) { - // Record the latest |local_id| this surface is interested in observing - // for the provided FrameSinkId. - uint32_t& local_id = + // Record the latest |parent_sequence_number| this surface is interested + // in observing for the provided FrameSinkId. + uint32_t& parent_sequence_number = new_frame_sink_id_dependencies[surface_id.frame_sink_id()]; - local_id = std::max(local_id, surface_id.local_surface_id().parent_id()); + parent_sequence_number = + std::max(parent_sequence_number, + surface_id.local_surface_id().parent_sequence_number()); new_activation_dependencies.insert(surface_id); } }
diff --git a/components/viz/service/surfaces/surface_manager.cc b/components/viz/service/surfaces/surface_manager.cc index ccc7262..9937db8 100644 --- a/components/viz/service/surfaces/surface_manager.cc +++ b/components/viz/service/surfaces/surface_manager.cc
@@ -514,8 +514,8 @@ const std::vector<LocalSurfaceId>& temp_surfaces = it->second; for (const LocalSurfaceId& local_surface_id : base::Reversed(temp_surfaces)) { // The in-flight surface cannot be newer than the primary surface ID. - if (local_surface_id.parent_id() > - primary_surface_id.local_surface_id().parent_id()) { + if (local_surface_id.parent_sequence_number() > + primary_surface_id.local_surface_id().parent_sequence_number()) { continue; }
diff --git a/content/app/strings/translations/content_strings_fr.xtb b/content/app/strings/translations/content_strings_fr.xtb index 5630b67..a17289c3 100644 --- a/content/app/strings/translations/content_strings_fr.xtb +++ b/content/app/strings/translations/content_strings_fr.xtb
@@ -138,7 +138,7 @@ <translation id="7223624360433298498">temps écoulé</translation> <translation id="7263440858009898357">Sélectionnez un élément dans la liste.</translation> <translation id="727747134524199931">en-tête de colonne</translation> -<translation id="7364796246159120393">Choisissez un fichier</translation> +<translation id="7364796246159120393">Choisir un fichier</translation> <translation id="739024184232394898">Autre…</translation> <translation id="7491962110804786152">tabulation</translation> <translation id="7514365320538308">Télécharger</translation>
diff --git a/content/browser/accessibility/accessibility_tree_formatter_blink.cc b/content/browser/accessibility/accessibility_tree_formatter_blink.cc index b2c4170..82e3ab3 100644 --- a/content/browser/accessibility/accessibility_tree_formatter_blink.cc +++ b/content/browser/accessibility/accessibility_tree_formatter_blink.cc
@@ -283,12 +283,13 @@ } // Offscreen and Focused states are not in the state list. - bool value = false; - dict.GetBoolean(STATE_OFFSCREEN, &value); - if (value) + bool offscreen = false; + dict.GetBoolean(STATE_OFFSCREEN, &offscreen); + if (offscreen) WriteAttribute(false, STATE_OFFSCREEN, &line); - dict.GetBoolean(STATE_FOCUSED, &value); - if (value) + bool focused = false; + dict.GetBoolean(STATE_FOCUSED, &focused); + if (focused) WriteAttribute(false, STATE_FOCUSED, &line); WriteAttribute(false, @@ -394,11 +395,11 @@ WriteAttribute(false, attr_string, &line); } - std::string string_value; - if (dict.GetString("actions", &string_value)) { - WriteAttribute(false, - base::StringPrintf("%s=%s", "actions", string_value.c_str()), - &line); + std::string actions_value; + if (dict.GetString("actions", &actions_value)) { + WriteAttribute( + false, base::StringPrintf("%s=%s", "actions", actions_value.c_str()), + &line); } for (const char* attribute_name : TREE_DATA_ATTRIBUTES) {
diff --git a/content/browser/accessibility/browser_accessibility.cc b/content/browser/accessibility/browser_accessibility.cc index 09fcfc8..7e9b123 100644 --- a/content/browser/accessibility/browser_accessibility.cc +++ b/content/browser/accessibility/browser_accessibility.cc
@@ -17,6 +17,7 @@ #include "content/common/accessibility_messages.h" #include "ui/accessibility/ax_role_properties.h" #include "ui/accessibility/ax_text_utils.h" +#include "ui/accessibility/platform/ax_unique_id.h" #include "ui/gfx/geometry/rect_conversions.h" #include "ui/gfx/geometry/rect_f.h" @@ -868,6 +869,13 @@ return manager_->ax_tree()->GetReverseRelations(attr, dst_id); } +const ui::AXUniqueId& BrowserAccessibility::GetUniqueId() const { + // This is not the same as GetData().id which comes from Blink, because + // those ids are only unique within the Blink process. We need one that is + // unique for the browser process. + return unique_id_; +} + gfx::NativeViewAccessible BrowserAccessibility::GetNativeViewAccessible() { // TODO(703369) On Windows, where we have started to migrate to an // AXPlatformNode implementation, the BrowserAccessibilityWin subclass has
diff --git a/content/browser/accessibility/browser_accessibility.h b/content/browser/accessibility/browser_accessibility.h index c86fa3035..222a191 100644 --- a/content/browser/accessibility/browser_accessibility.h +++ b/content/browser/accessibility/browser_accessibility.h
@@ -366,8 +366,11 @@ // The underlying node. ui::AXNode* node_; - // A unique ID, since node IDs are frame-local. - int32_t unique_id_; + // Protected so that it can't be called directly on a BrowserAccessibility + // where it could be confused with an id that comes from the node data, + // which is only unique to the Blink process. + // Does need to be called by subclasses such as BrowserAccessibilityAndroid. + const ui::AXUniqueId& GetUniqueId() const override; private: // |GetInnerText| recursively includes all the text from descendants such as @@ -376,6 +379,9 @@ // text, depending on the platform. base::string16 GetInnerText() const; + // A unique ID, since node IDs are frame-local. + ui::AXUniqueId unique_id_; + DISALLOW_COPY_AND_ASSIGN(BrowserAccessibility); };
diff --git a/content/browser/accessibility/browser_accessibility_android.cc b/content/browser/accessibility/browser_accessibility_android.cc index b1f7586b..667dfab9 100644 --- a/content/browser/accessibility/browser_accessibility_android.cc +++ b/content/browser/accessibility/browser_accessibility_android.cc
@@ -18,8 +18,8 @@ #include "third_party/skia/include/core/SkColor.h" #include "ui/accessibility/ax_role_properties.h" #include "ui/accessibility/platform/ax_android_constants.h" -#include "ui/accessibility/platform/ax_platform_unique_id.h" #include "ui/accessibility/platform/ax_snapshot_node_android_platform.h" +#include "ui/accessibility/platform/ax_unique_id.h" namespace { @@ -76,14 +76,13 @@ return nullptr; } -BrowserAccessibilityAndroid::BrowserAccessibilityAndroid() - : unique_id_(ui::GetNextAXPlatformNodeUniqueId()) { - g_unique_id_map.Get()[unique_id_] = this; +BrowserAccessibilityAndroid::BrowserAccessibilityAndroid() { + g_unique_id_map.Get()[unique_id()] = this; } BrowserAccessibilityAndroid::~BrowserAccessibilityAndroid() { - if (unique_id_) - g_unique_id_map.Get().erase(unique_id_); + if (unique_id()) + g_unique_id_map.Get().erase(unique_id()); } bool BrowserAccessibilityAndroid::IsNative() const {
diff --git a/content/browser/accessibility/browser_accessibility_android.h b/content/browser/accessibility/browser_accessibility_android.h index e30bb699..8ac237a8 100644 --- a/content/browser/accessibility/browser_accessibility_android.h +++ b/content/browser/accessibility/browser_accessibility_android.h
@@ -18,7 +18,7 @@ class CONTENT_EXPORT BrowserAccessibilityAndroid : public BrowserAccessibility { public: static BrowserAccessibilityAndroid* GetFromUniqueId(int32_t unique_id); - int32_t unique_id() const { return unique_id_; } + int32_t unique_id() const { return GetUniqueId().Get(); } // Overrides from BrowserAccessibility. void OnDataChanged() override;
diff --git a/content/browser/accessibility/browser_accessibility_com_win.cc b/content/browser/accessibility/browser_accessibility_com_win.cc index 56be8f7..a9288ce 100644 --- a/content/browser/accessibility/browser_accessibility_com_win.cc +++ b/content/browser/accessibility/browser_accessibility_com_win.cc
@@ -1109,7 +1109,7 @@ *name_space_id = 0; *node_value = SysAllocString(value().c_str()); *num_children = owner()->PlatformChildCount(); - *unique_id = -AXPlatformNodeWin::unique_id(); + *unique_id = -AXPlatformNodeWin::GetUniqueId(); if (owner()->IsDocument()) { *node_type = NODETYPE_DOCUMENT; @@ -1914,7 +1914,7 @@ void BrowserAccessibilityComWin::Init(ui::AXPlatformNodeDelegate* delegate) { owner_ = static_cast<BrowserAccessibilityWin*>(delegate); - AXPlatformNodeBase::Init(delegate); + AXPlatformNodeWin::Init(delegate); } std::vector<base::string16> BrowserAccessibilityComWin::ComputeTextAttributes()
diff --git a/content/browser/accessibility/browser_accessibility_manager_win.cc b/content/browser/accessibility/browser_accessibility_manager_win.cc index 4cbb1b3..e5a1c931 100644 --- a/content/browser/accessibility/browser_accessibility_manager_win.cc +++ b/content/browser/accessibility/browser_accessibility_manager_win.cc
@@ -220,7 +220,7 @@ // argument to NotifyWinEvent; the AT client will then call get_accChild // on the HWND's accessibility object and pass it that same id, which // we can use to retrieve the IAccessible for this node. - LONG child_id = -(ToBrowserAccessibilityWin(node)->GetCOM()->unique_id()); + LONG child_id = -(ToBrowserAccessibilityWin(node)->GetCOM()->GetUniqueId()); ::NotifyWinEvent(win_event_type, hwnd, OBJID_CLIENT, child_id); }
diff --git a/content/browser/accessibility/browser_accessibility_win_unittest.cc b/content/browser/accessibility/browser_accessibility_win_unittest.cc index ab7238f..d0fa26b 100644 --- a/content/browser/accessibility/browser_accessibility_win_unittest.cc +++ b/content/browser/accessibility/browser_accessibility_win_unittest.cc
@@ -711,7 +711,7 @@ int32_t GetUniqueId(BrowserAccessibility* accessibility) { BrowserAccessibilityWin* win_root = ToBrowserAccessibilityWin(accessibility); - return win_root->GetCOM()->unique_id(); + return win_root->GetCOM()->GetUniqueId(); } // This is a regression test for a bug where the initial empty document
diff --git a/content/browser/android/content_view_core.cc b/content/browser/android/content_view_core.cc index 7126ad8a8..d57e89b 100644 --- a/content/browser/android/content_view_core.cc +++ b/content/browser/android/content_view_core.cc
@@ -221,8 +221,9 @@ void ContentViewCore::UpdateWindowAndroid( JNIEnv* env, const base::android::JavaParamRef<jobject>& obj, - jlong window_android) { - auto* window = reinterpret_cast<ui::WindowAndroid*>(window_android); + const JavaParamRef<jobject>& jwindow_android) { + ui::WindowAndroid* window = + ui::WindowAndroid::FromJavaWindowAndroid(jwindow_android); auto* old_window = GetWindowAndroid(); if (window == old_window) return; @@ -849,7 +850,7 @@ const JavaParamRef<jobject>& obj, const JavaParamRef<jobject>& jweb_contents, const JavaParamRef<jobject>& jview_android_delegate, - jlong jwindow_android, + const JavaParamRef<jobject>& jwindow_android, jfloat dip_scale) { WebContentsImpl* web_contents = static_cast<WebContentsImpl*>( WebContents::FromJavaWebContents(jweb_contents)); @@ -859,7 +860,7 @@ view_android->SetDelegate(jview_android_delegate); ui::WindowAndroid* window_android = - reinterpret_cast<ui::WindowAndroid*>(jwindow_android); + ui::WindowAndroid::FromJavaWindowAndroid(jwindow_android); DCHECK(window_android); window_android->AddChild(view_android);
diff --git a/content/browser/android/content_view_core.h b/content/browser/android/content_view_core.h index 5e90b91c..5f3bf8e 100644 --- a/content/browser/android/content_view_core.h +++ b/content/browser/android/content_view_core.h
@@ -60,9 +60,10 @@ JNIEnv* env, const base::android::JavaParamRef<jobject>& obj); - void UpdateWindowAndroid(JNIEnv* env, - const base::android::JavaParamRef<jobject>& obj, - jlong window_android); + void UpdateWindowAndroid( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& obj, + const base::android::JavaParamRef<jobject>& jwindow_android); void OnJavaContentViewCoreDestroyed( JNIEnv* env, const base::android::JavaParamRef<jobject>& obj);
diff --git a/content/browser/android/content_view_render_view.cc b/content/browser/android/content_view_render_view.cc index f6ca2f8e..be2b361 100644 --- a/content/browser/android/content_view_render_view.cc +++ b/content/browser/android/content_view_render_view.cc
@@ -21,6 +21,7 @@ #include "content/public/browser/web_contents.h" #include "jni/ContentViewRenderView_jni.h" #include "ui/android/view_android.h" +#include "ui/android/window_android.h" #include "ui/gfx/android/java_bitmap.h" #include "ui/gfx/geometry/size.h" @@ -40,11 +41,12 @@ } // static -static jlong JNI_ContentViewRenderView_Init(JNIEnv* env, - const JavaParamRef<jobject>& obj, - jlong native_root_window) { +static jlong JNI_ContentViewRenderView_Init( + JNIEnv* env, + const JavaParamRef<jobject>& obj, + const JavaParamRef<jobject>& jroot_window_android) { gfx::NativeWindow root_window = - reinterpret_cast<gfx::NativeWindow>(native_root_window); + ui::WindowAndroid::FromJavaWindowAndroid(jroot_window_android); ContentViewRenderView* content_view_render_view = new ContentViewRenderView(env, obj, root_window); return reinterpret_cast<intptr_t>(content_view_render_view);
diff --git a/content/browser/blob_storage/blob_dispatcher_host.cc b/content/browser/blob_storage/blob_dispatcher_host.cc index 557e1292..a623060 100644 --- a/content/browser/blob_storage/blob_dispatcher_host.cc +++ b/content/browser/blob_storage/blob_dispatcher_host.cc
@@ -137,12 +137,13 @@ DVLOG(1) << "BlobDispatcherHost::OnRegisterBlob(" << uuid << "): Invalid or prohibited FileSystem URL: " << filesystem_url.DebugString(); - HostedBlobState hosted_state( - context->AddBrokenBlob(uuid, content_type, content_disposition, - BlobStatus::ERR_FILE_WRITE_FAILED)); + HostedBlobState hosted_state(context->AddBrokenBlob( + uuid, content_type, content_disposition, + BlobStatus::ERR_REFERENCED_FILE_UNAVAILABLE)); blobs_inuse_map_.insert( std::make_pair(uuid, std::move(hosted_state))); - SendFinalBlobStatus(uuid, BlobStatus::ERR_FILE_WRITE_FAILED); + SendFinalBlobStatus(uuid, + BlobStatus::ERR_REFERENCED_FILE_UNAVAILABLE); return; } break; @@ -152,12 +153,13 @@ DVLOG(1) << "BlobDispatcherHost::OnRegisterBlob(" << uuid << "): Invalid or prohibited FilePath: " << item.path().value(); - HostedBlobState hosted_state( - context->AddBrokenBlob(uuid, content_type, content_disposition, - BlobStatus::ERR_FILE_WRITE_FAILED)); + HostedBlobState hosted_state(context->AddBrokenBlob( + uuid, content_type, content_disposition, + BlobStatus::ERR_REFERENCED_FILE_UNAVAILABLE)); blobs_inuse_map_.insert( std::make_pair(uuid, std::move(hosted_state))); - SendFinalBlobStatus(uuid, BlobStatus::ERR_FILE_WRITE_FAILED); + SendFinalBlobStatus(uuid, + BlobStatus::ERR_REFERENCED_FILE_UNAVAILABLE); return; } break;
diff --git a/content/browser/child_process_launcher_helper_mac.cc b/content/browser/child_process_launcher_helper_mac.cc index 836af8e..a12aa08 100644 --- a/content/browser/child_process_launcher_helper_mac.cc +++ b/content/browser/child_process_launcher_helper_mac.cc
@@ -68,17 +68,25 @@ bool no_sandbox = command_line_->HasSwitch(switches::kNoSandbox) || service_manager::IsUnsandboxedSandboxType(sandbox_type); + // TODO(kerrnel): Delete this switch once the V2 sandbox is always enabled. bool v2_process = false; switch (sandbox_type) { + case service_manager::SANDBOX_TYPE_NO_SANDBOX: + break; case service_manager::SANDBOX_TYPE_CDM: case service_manager::SANDBOX_TYPE_GPU: case service_manager::SANDBOX_TYPE_PPAPI: case service_manager::SANDBOX_TYPE_RENDERER: case service_manager::SANDBOX_TYPE_UTILITY: case service_manager::SANDBOX_TYPE_NACL_LOADER: + case service_manager::SANDBOX_TYPE_PDF_COMPOSITOR: + case service_manager::SANDBOX_TYPE_PROFILING: v2_process = true; break; default: + // This is a 'break' because the V2 sandbox is not enabled for all + // processes yet, and so there are sandbox types like NETWORK that + // should not be run under the V2 sandbox. break; } @@ -107,10 +115,12 @@ profile += service_manager::kSeatbeltPolicyString_renderer_v2; break; case service_manager::SANDBOX_TYPE_UTILITY: + case service_manager::SANDBOX_TYPE_PDF_COMPOSITOR: + case service_manager::SANDBOX_TYPE_PROFILING: profile += service_manager::kSeatbeltPolicyString_utility; break; default: - NOTREACHED(); + CHECK(false); } // Disable os logging to com.apple.diagnosticd which is a performance @@ -131,11 +141,13 @@ SetupCommonSandboxParameters(seatbelt_exec_client_.get()); break; case service_manager::SANDBOX_TYPE_UTILITY: + case service_manager::SANDBOX_TYPE_PDF_COMPOSITOR: + case service_manager::SANDBOX_TYPE_PROFILING: SetupUtilitySandboxParameters(seatbelt_exec_client_.get(), *command_line_.get()); break; default: - NOTREACHED(); + CHECK(false); } int pipe = seatbelt_exec_client_->SendProfileAndGetFD();
diff --git a/content/browser/devtools/devtools_http_handler.cc b/content/browser/devtools/devtools_http_handler.cc index 72ffe59..3652516 100644 --- a/content/browser/devtools/devtools_http_handler.cc +++ b/content/browser/devtools/devtools_http_handler.cc
@@ -362,7 +362,6 @@ LOG(ERROR) << "GetMimeType doesn't know mime type for: " << filename << " text/plain will be returned"; - NOTREACHED(); return "text/plain"; }
diff --git a/content/browser/devtools/protocol/browser_handler.cc b/content/browser/devtools/protocol/browser_handler.cc index b5fd5f4..93c8b18b 100644 --- a/content/browser/devtools/protocol/browser_handler.cc +++ b/content/browser/devtools/protocol/browser_handler.cc
@@ -4,6 +4,12 @@ #include "content/browser/devtools/protocol/browser_handler.h" +#include <string.h> +#include <algorithm> + +#include "base/metrics/histogram_base.h" +#include "base/metrics/histogram_samples.h" +#include "base/metrics/statistics_recorder.h" #include "content/public/browser/devtools_agent_host.h" #include "content/public/common/content_client.h" #include "content/public/common/user_agent.h" @@ -34,5 +40,71 @@ return Response::OK(); } +namespace { + +// Converts an histogram. +std::unique_ptr<Browser::Histogram> Convert( + const base::HistogramBase& in_histogram) { + const std::unique_ptr<const base::HistogramSamples> in_buckets = + in_histogram.SnapshotSamples(); + DCHECK(in_buckets); + + auto out_buckets = std::make_unique<Array<Browser::Bucket>>(); + + for (const std::unique_ptr<base::SampleCountIterator> bucket_it = + in_buckets->Iterator(); + !bucket_it->Done(); bucket_it->Next()) { + base::HistogramBase::Count count; + base::HistogramBase::Sample low; + int64_t high; + bucket_it->Get(&low, &high, &count); + out_buckets->addItem(Browser::Bucket::Create() + .SetLow(low) + .SetHigh(high) + .SetCount(count) + .Build()); + } + + return Browser::Histogram::Create() + .SetName(in_histogram.histogram_name()) + .SetSum(in_buckets->sum()) + .SetCount(in_buckets->TotalCount()) + .SetBuckets(std::move(out_buckets)) + .Build(); +} + +} // namespace + +Response BrowserHandler::GetHistograms( + const Maybe<std::string> in_query, + std::unique_ptr<Array<Browser::Histogram>>* const out_histograms) { + // Convert histograms. + DCHECK(out_histograms); + *out_histograms = std::make_unique<Array<Browser::Histogram>>(); + for (const base::HistogramBase* const h : + base::StatisticsRecorder::GetSnapshot(in_query.fromMaybe(""))) { + DCHECK(h); + (*out_histograms)->addItem(Convert(*h)); + } + + return Response::OK(); +} + +Response BrowserHandler::GetHistogram( + const std::string& in_name, + std::unique_ptr<Browser::Histogram>* const out_histogram) { + // Get histogram by name. + const base::HistogramBase* const in_histogram = + base::StatisticsRecorder::FindHistogram(in_name); + if (!in_histogram) + return Response::InvalidParams("Cannot find histogram: " + in_name); + + // Convert histogram. + DCHECK(out_histogram); + *out_histogram = Convert(*in_histogram); + + return Response::OK(); +} + } // namespace protocol } // namespace content
diff --git a/content/browser/devtools/protocol/browser_handler.h b/content/browser/devtools/protocol/browser_handler.h index fe109fe..0f2d4b7a 100644 --- a/content/browser/devtools/protocol/browser_handler.h +++ b/content/browser/devtools/protocol/browser_handler.h
@@ -10,7 +10,6 @@ #include "content/browser/devtools/protocol/devtools_domain_handler.h" namespace content { - namespace protocol { class BrowserHandler : public DevToolsDomainHandler, public Browser::Backend { @@ -27,6 +26,14 @@ std::string* user_agent, std::string* js_version) override; + Response GetHistograms( + Maybe<std::string> in_query, + std::unique_ptr<Array<Browser::Histogram>>* histograms) override; + + Response GetHistogram( + const std::string& in_name, + std::unique_ptr<Browser::Histogram>* out_histogram) override; + private: DISALLOW_COPY_AND_ASSIGN(BrowserHandler); };
diff --git a/content/browser/devtools/protocol_config.json b/content/browser/devtools/protocol_config.json index dcd6a6f..9903903e 100644 --- a/content/browser/devtools/protocol_config.json +++ b/content/browser/devtools/protocol_config.json
@@ -11,7 +11,7 @@ "options": [ { "domain": "Browser", - "include": ["getVersion"] + "include": ["getVersion", "getHistograms", "getHistogram"] }, { "domain": "DOM",
diff --git a/content/browser/devtools/render_frame_devtools_agent_host.cc b/content/browser/devtools/render_frame_devtools_agent_host.cc index af6628a..df70bfd 100644 --- a/content/browser/devtools/render_frame_devtools_agent_host.cc +++ b/content/browser/devtools/render_frame_devtools_agent_host.cc
@@ -362,6 +362,20 @@ DevToolsSession* session, int x, int y) { + // When there are nested WebContents, the renderer expects coordinates + // relative to the main frame, so we need to transform the coordinates from + // the root space to the current WebContents' main frame space. + + if (frame_tree_node_) { + if (auto* main_view = + frame_tree_node_->frame_tree()->GetMainFrame()->GetView()) { + gfx::Point transformed_point = gfx::ToRoundedPoint( + main_view->TransformRootPointToViewCoordSpace(gfx::PointF(x, y))); + x = transformed_point.x(); + y = transformed_point.y(); + } + } + session->InspectElement(gfx::Point(x, y)); }
diff --git a/content/browser/frame_host/interstitial_page_navigator_impl.cc b/content/browser/frame_host/interstitial_page_navigator_impl.cc index f4f1d1d8..057443c 100644 --- a/content/browser/frame_host/interstitial_page_navigator_impl.cc +++ b/content/browser/frame_host/interstitial_page_navigator_impl.cc
@@ -36,25 +36,6 @@ // Do not proceed if the interstitial itself has been disabled. if (!enabled_) return; - - // The interstitial page should only navigate once. - DCHECK(!render_frame_host->navigation_handle()); - render_frame_host->SetNavigationHandle(NavigationHandleImpl::Create( - url, redirect_chain, render_frame_host->frame_tree_node(), - false, /* is_renderer_initiated */ - false, /* is_same_document */ - navigation_start, /* navigation_state */ - 0, /* pending_nav_entry_id */ - false, /* started_in_context_menu */ - CSPDisposition::CHECK, /* should_check_main_world_csp */ - false, /* is_form_submission */ - base::nullopt, /* suggested_filename */ - std::string(), /* method */ - nullptr, /* resource_request_body */ - content::Referrer(), false, /* has_user_gesture */ - ui::PAGE_TRANSITION_LINK, false, /* is_external_protocol */ - REQUEST_CONTEXT_TYPE_UNSPECIFIED, - blink::WebMixedContentContextType::kBlockable)); } void InterstitialPageNavigatorImpl::DidNavigate(
diff --git a/content/browser/frame_host/navigation_controller_impl_browsertest.cc b/content/browser/frame_host/navigation_controller_impl_browsertest.cc index 2bcb7df..fcbada9 100644 --- a/content/browser/frame_host/navigation_controller_impl_browsertest.cc +++ b/content/browser/frame_host/navigation_controller_impl_browsertest.cc
@@ -112,6 +112,17 @@ // in the expected parts of the NavigationEntry in each stage of navigation, and // that we don't kill the renderer on reload. See https://crbug.com/522567. IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, LoadDataWithBaseURL) { + // LoadDataWithBaseURL is never subject to --site-per-process policy today + // (this API is only used by Android WebView [where OOPIFs have not shipped + // yet] and WebView Guest tag [which always hosts guests inside a renderer + // without an origin lock]). Therefore, skip the test in --site-per-process + // mode to avoid renderer kills which won't happen in practice as described + // above. + // TODO(lukasza): https://crbug.com/614463: Consider enabling this test + // once WebView guests support OOPIFs and/or origin locks. + if (AreAllSitesIsolatedForTesting()) + return; + const GURL base_url("http://baseurl"); const GURL history_url("http://historyurl"); const std::string data = "<html><body>foo</body></html>"; @@ -165,6 +176,17 @@ // See https://crbug.com/612196. IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, LoadDataWithBaseURLTitleAfterBack) { + // LoadDataWithBaseURL is never subject to --site-per-process policy today + // (this API is only used by Android WebView [where OOPIFs have not shipped + // yet] and WebView Guest tag [which always hosts guests inside a renderer + // without an origin lock]). Therefore, skip the test in --site-per-process + // mode to avoid renderer kills which won't happen in practice as described + // above. + // TODO(lukasza): https://crbug.com/614463: Consider enabling this test + // once WebView guests support OOPIFs and/or origin locks. + if (AreAllSitesIsolatedForTesting()) + return; + const GURL base_url("http://baseurl"); const GURL history_url( embedded_test_server()->GetURL("/navigation_controller/form.html")); @@ -285,6 +307,17 @@ IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, NavigateFromLoadDataWithBaseURL) { + // LoadDataWithBaseURL is never subject to --site-per-process policy today + // (this API is only used by Android WebView [where OOPIFs have not shipped + // yet] and WebView Guest tag [which always hosts guests inside a renderer + // without an origin lock]). Therefore, skip the test in --site-per-process + // mode to avoid renderer kills which won't happen in practice as described + // above. + // TODO(lukasza): https://crbug.com/614463: Consider enabling this test + // once WebView guests support OOPIFs and/or origin locks. + if (AreAllSitesIsolatedForTesting()) + return; + const GURL base_url("http://baseurl"); const GURL history_url("http://historyurl"); const std::string data = "<html><body></body></html>"; @@ -329,6 +362,17 @@ IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, FragmentNavigateFromLoadDataWithBaseURL) { + // LoadDataWithBaseURL is never subject to --site-per-process policy today + // (this API is only used by Android WebView [where OOPIFs have not shipped + // yet] and WebView Guest tag [which always hosts guests inside a renderer + // without an origin lock]). Therefore, skip the test in --site-per-process + // mode to avoid renderer kills which won't happen in practice as described + // above. + // TODO(lukasza): https://crbug.com/614463: Consider enabling this test + // once WebView guests support OOPIFs and/or origin locks. + if (AreAllSitesIsolatedForTesting()) + return; + const GURL base_url("http://baseurl"); const GURL history_url("http://historyurl"); const std::string data = @@ -697,6 +741,17 @@ // crash. See https://crbug.com/768575. IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, NavigateBackInChildOfLoadDataWithBaseURL) { + // LoadDataWithBaseURL is never subject to --site-per-process policy today + // (this API is only used by Android WebView [where OOPIFs have not shipped + // yet] and WebView Guest tag [which always hosts guests inside a renderer + // without an origin lock]). Therefore, skip the test in --site-per-process + // mode to avoid renderer kills which won't happen in practice as described + // above. + // TODO(lukasza): https://crbug.com/614463: Consider enabling this test + // once WebView guests support OOPIFs and/or origin locks. + if (AreAllSitesIsolatedForTesting()) + return; + GURL iframe_url(embedded_test_server()->GetURL( "/navigation_controller/page_with_links.html"));
diff --git a/content/browser/frame_host/navigation_controller_impl_unittest.cc b/content/browser/frame_host/navigation_controller_impl_unittest.cc index 210f076..b49d022 100644 --- a/content/browser/frame_host/navigation_controller_impl_unittest.cc +++ b/content/browser/frame_host/navigation_controller_impl_unittest.cc
@@ -245,6 +245,11 @@ return navigation_request->common_params().url; } + TestRenderFrameHost* GetNavigatingRenderFrameHost() { + return AreAllSitesIsolatedForTesting() ? contents()->GetPendingMainFrame() + : contents()->GetMainFrame(); + } + protected: GURL navigated_url_; size_t navigation_entry_committed_counter_ = 0; @@ -975,9 +980,7 @@ // ... Do a new navigation. const GURL kNewURL("http://see"); - main_test_rfh()->SendRendererInitiatedNavigationRequest(kNewURL, true); - main_test_rfh()->PrepareForCommit(); - contents()->GetMainFrame()->SendNavigate(0, true, kNewURL); + NavigationSimulator::NavigateAndCommitFromDocument(kNewURL, main_test_rfh()); // There should no longer be any pending entry, and the third navigation we // just made should be committed. @@ -1435,7 +1438,8 @@ EXPECT_EQ(0U, navigation_list_pruned_counter_); main_test_rfh()->PrepareForCommitWithServerRedirect(url2); - main_test_rfh()->SendNavigate(entry_id, true, url2); + TestRenderFrameHost* navigating_rfh = GetNavigatingRenderFrameHost(); + navigating_rfh->SendNavigate(entry_id, true, url2); EXPECT_EQ(1U, navigation_entry_committed_counter_); navigation_entry_committed_counter_ = 0; @@ -1631,7 +1635,7 @@ // Normal navigation will preserve redirects in the committed entry. main_test_rfh()->PrepareForCommitWithServerRedirect(url2); - main_test_rfh()->SendNavigateWithModificationCallback(entry_id, true, url1, + main_test_rfh()->SendNavigateWithModificationCallback(entry_id, true, url2, set_redirects_callback); NavigationEntryImpl* committed_entry = controller.GetLastCommittedEntry(); ASSERT_EQ(1U, committed_entry->GetRedirectChain().size()); @@ -1717,11 +1721,9 @@ EXPECT_GE(controller.GetEntryAtIndex(1)->GetTimestamp(), controller.GetEntryAtIndex(0)->GetTimestamp()); - TestRenderFrameHost* navigating_rfh = AreAllSitesIsolatedForTesting() - ? contents()->GetPendingMainFrame() - : contents()->GetMainFrame(); + TestRenderFrameHost* navigating_rfh = GetNavigatingRenderFrameHost(); navigating_rfh->PrepareForCommit(); - navigating_rfh->SendNavigate(entry_id, false, url2); + navigating_rfh->SendNavigate(entry_id, false, url1); EXPECT_EQ(1U, navigation_entry_committed_counter_); navigation_entry_committed_counter_ = 0; @@ -1836,25 +1838,16 @@ const GURL url1("http://foo1"); const GURL url2("http://foo2"); - main_test_rfh()->SendRendererInitiatedNavigationRequest(url1, true); - main_test_rfh()->PrepareForCommit(); - main_test_rfh()->SendNavigate(0, true, url1); - NavigationEntry* entry1 = controller.GetLastCommittedEntry(); + NavigationSimulator::NavigateAndCommitFromDocument(url1, main_test_rfh()); EXPECT_EQ(1U, navigation_entry_committed_counter_); navigation_entry_committed_counter_ = 0; - main_test_rfh()->SendRendererInitiatedNavigationRequest(url2, true); - main_test_rfh()->PrepareForCommit(); - main_test_rfh()->SendNavigate(0, true, url2); + NavigationSimulator::NavigateAndCommitFromDocument(url2, main_test_rfh()); NavigationEntry* entry2 = controller.GetLastCommittedEntry(); EXPECT_EQ(1U, navigation_entry_committed_counter_); navigation_entry_committed_counter_ = 0; - controller.GoBack(); - main_test_rfh()->PrepareForCommit(); - main_test_rfh()->SendNavigateWithTransition( - entry1->GetUniqueID(), false, url1, - controller.GetPendingEntry()->GetTransitionType()); + NavigationSimulator::GoBack(contents()); EXPECT_EQ(1U, navigation_entry_committed_counter_); navigation_entry_committed_counter_ = 0; @@ -1878,8 +1871,9 @@ EXPECT_GE(controller.GetEntryAtIndex(0)->GetTimestamp(), controller.GetEntryAtIndex(1)->GetTimestamp()); - main_test_rfh()->PrepareForCommit(); - main_test_rfh()->SendNavigateWithTransition( + TestRenderFrameHost* navigating_rfh = GetNavigatingRenderFrameHost(); + navigating_rfh->PrepareForCommit(); + navigating_rfh->SendNavigateWithTransition( entry2->GetUniqueID(), false, url2, controller.GetPendingEntry()->GetTransitionType()); EXPECT_EQ(1U, navigation_entry_committed_counter_); @@ -1911,24 +1905,16 @@ const GURL url2("http://foo2"); const GURL url3("http://foo3"); - main_test_rfh()->SendRendererInitiatedNavigationRequest(url1, true); - main_test_rfh()->PrepareForCommit(); - main_test_rfh()->SendNavigate(0, true, url1); + NavigationSimulator::NavigateAndCommitFromDocument(url1, main_test_rfh()); EXPECT_EQ(1U, navigation_entry_committed_counter_); - NavigationEntry* entry1 = controller.GetLastCommittedEntry(); navigation_entry_committed_counter_ = 0; - main_test_rfh()->SendRendererInitiatedNavigationRequest(url2, true); - main_test_rfh()->PrepareForCommit(); - main_test_rfh()->SendNavigate(0, true, url2); + + NavigationSimulator::NavigateAndCommitFromDocument(url2, main_test_rfh()); EXPECT_EQ(1U, navigation_entry_committed_counter_); NavigationEntry* entry2 = controller.GetLastCommittedEntry(); navigation_entry_committed_counter_ = 0; - controller.GoBack(); - main_test_rfh()->PrepareForCommit(); - main_test_rfh()->SendNavigateWithTransition( - entry1->GetUniqueID(), false, url1, - controller.GetPendingEntry()->GetTransitionType()); + NavigationSimulator::GoBack(contents()); EXPECT_EQ(1U, navigation_entry_committed_counter_); navigation_entry_committed_counter_ = 0; @@ -1944,8 +1930,9 @@ EXPECT_TRUE(controller.CanGoBack()); EXPECT_FALSE(controller.CanGoForward()); - main_test_rfh()->PrepareForCommit(); - main_test_rfh()->SendNavigate(entry2->GetUniqueID(), true, url3); + GetNavigatingRenderFrameHost()->PrepareForCommitWithServerRedirect(url3); + GetNavigatingRenderFrameHost()->SendNavigate(entry2->GetUniqueID(), true, + url3); EXPECT_EQ(1U, navigation_entry_committed_counter_); navigation_entry_committed_counter_ = 0; EXPECT_EQ(1U, navigation_list_pruned_counter_); @@ -3066,23 +3053,18 @@ NavigationControllerImpl& controller = controller_impl(); // First navigate somewhere normal. const GURL url1("http://foo"); - controller.LoadURL( - url1, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); - int entry_id = controller.GetPendingEntry()->GetUniqueID(); - main_test_rfh()->PrepareForCommit(); - main_test_rfh()->SendNavigate(entry_id, true, url1); + NavigationSimulator::NavigateAndCommitFromBrowser(contents(), url1); // Now navigate somewhere with an interstitial. const GURL url2("http://bar"); - controller.LoadURL(url2, Referrer(), ui::PAGE_TRANSITION_TYPED, - std::string()); - entry_id = controller.GetPendingEntry()->GetUniqueID(); + std::unique_ptr<NavigationSimulator> simulator = + NavigationSimulator::CreateBrowserInitiated(url2, contents()); + simulator->Start(); controller.GetPendingEntry()->set_page_type(PAGE_TYPE_INTERSTITIAL); // At this point the interstitial will be displayed and the load will still // be pending. If the user continues, the load will commit. - main_test_rfh()->PrepareForCommit(); - main_test_rfh()->SendNavigate(entry_id, true, url2); + simulator->Commit(); // The page should be a normal page again. EXPECT_EQ(url2, controller.GetLastCommittedEntry()->GetURL()); @@ -3455,14 +3437,15 @@ // If the user clicks another link, we should replace the pending entry. main_test_rfh()->SendRendererInitiatedNavigationRequest(url2, false); - main_test_rfh()->PrepareForCommit(); - navigator->DidStartProvisionalLoad(main_test_rfh(), url2, std::vector<GURL>(), + TestRenderFrameHost* navigating_rfh = GetNavigatingRenderFrameHost(); + navigating_rfh->PrepareForCommit(); + navigator->DidStartProvisionalLoad(navigating_rfh, url2, std::vector<GURL>(), base::TimeTicks::Now()); EXPECT_EQ(url2, controller.GetPendingEntry()->GetURL()); EXPECT_EQ(url2, controller.GetPendingEntry()->GetVirtualURL()); // Once it commits, the URL and virtual URL should reflect the actual page. - main_test_rfh()->SendNavigate(0, true, url2); + navigating_rfh->SendNavigate(0, true, url2); EXPECT_EQ(url2, controller.GetLastCommittedEntry()->GetURL()); EXPECT_EQ(url2, controller.GetLastCommittedEntry()->GetVirtualURL()); @@ -3824,7 +3807,8 @@ // Don't honor allow_universal_access_from_file_urls if actual URL is // not file scheme. const GURL url("http://www.google.com/home.html"); - main_test_rfh()->NavigateAndCommitRendererInitiated(true, url); + NavigationSimulator::NavigateAndCommitFromDocument(url, main_test_rfh()); + rph = main_test_rfh()->GetProcess(); // Navigation could swap the process. EXPECT_FALSE(controller.IsURLSameDocumentNavigation( different_origin_url, url::Origin::Create(different_origin_url), true, main_test_rfh())); @@ -4737,13 +4721,11 @@ favicon_status.valid = true; EXPECT_FALSE(DoImagesMatch(kDefaultFavicon, entry->GetFavicon().image)); - main_test_rfh()->SendRendererInitiatedNavigationRequest(kPageWithoutFavicon, - false); - main_test_rfh()->PrepareForCommit(); - main_test_rfh()->SendNavigateWithTransition( - 0, // nav_entry_id - false, // no new entry - kPageWithoutFavicon, ui::PAGE_TRANSITION_CLIENT_REDIRECT); + std::unique_ptr<NavigationSimulator> simulator = + NavigationSimulator::CreateRendererInitiated(kPageWithoutFavicon, + main_test_rfh()); + simulator->SetTransition(ui::PAGE_TRANSITION_CLIENT_REDIRECT); + simulator->Commit(); EXPECT_EQ(1U, navigation_entry_committed_counter_); navigation_entry_committed_counter_ = 0;
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc index 5523379..3a8839e4 100644 --- a/content/browser/frame_host/render_frame_host_impl.cc +++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -11,6 +11,7 @@ #include "base/command_line.h" #include "base/containers/hash_tables.h" #include "base/containers/queue.h" +#include "base/debug/crash_logging.h" #include "base/feature_list.h" #include "base/lazy_instance.h" #include "base/memory/ptr_util.h" @@ -3232,7 +3233,9 @@ } // It is safe to commit into a unique origin, regardless of the URL, as it is - // restricted from accessing other origins. + // restricted from accessing other origins. Note that all error pages commit + // as a unique origin - this helps avoid renderer kills when + // ERR_BLOCKED_BY_CLIENT commits in an unexpected renderer process. if (origin.unique()) return true; @@ -3245,6 +3248,34 @@ // conversion to GURL. GURL origin_url = origin.GetPhysicalOrigin().GetURL(); + // Check the origin against the (potential) origin lock of the current + // process. + // TODO(lukasza): https://crbug.com/770239: Expand the check to cover other + // verifications from RenderProcessHostImpl::IsSuitableHost (e.g. WebUI + // bindings, extension process privilege level, etc.). Avoid duplicating + // the code here and in IsSuitableHost. + BrowserContext* browser_context = GetSiteInstance()->GetBrowserContext(); + GURL site_url = SiteInstance::GetSiteForURL(browser_context, origin_url); + auto* policy = ChildProcessSecurityPolicyImpl::GetInstance(); + switch (policy->CheckOriginLock(GetProcess()->GetID(), site_url)) { + case ChildProcessSecurityPolicyImpl::CheckOriginLockResult::HAS_EQUAL_LOCK: + break; + case ChildProcessSecurityPolicyImpl::CheckOriginLockResult::HAS_WRONG_LOCK: + // If the process is locked to an origin, disallow reusing this process + // for a different origin. + base::debug::SetCrashKeyString(bad_message::GetRequestedSiteURLKey(), + site_url.possibly_invalid_spec()); + return false; + case ChildProcessSecurityPolicyImpl::CheckOriginLockResult::NO_LOCK: + // TODO(lukasza): https://crbug.com/794315: Return false if + // ShouldLockToOrigin(site_url) returns true, similarily to how this is + // done by RenderProcessHostImpl::IsSuitableHost. We don't do this here, + // because this breaks hosted apps (which can return + // !ShouldLockToOrigin(full_url_with_path, but here they would return + // ShouldLockToOrigin(origin_only_part_of_url)). + break; + } + // Verify that the origin is allowed to commit in this process. // Note: This also handles non-standard cases for |url|, such as // about:blank, data, and blob URLs. @@ -3439,7 +3470,7 @@ ResourceResponseHead(), GURL(), common_params, request_params, mojom::URLLoaderClientEndpointsPtr(), /*subresource_loader_factories=*/base::nullopt, - devtools_navigation_token); + /*controller_service_worker=*/nullptr, devtools_navigation_token); return; } @@ -3462,8 +3493,8 @@ const bool is_same_document = FrameMsg_Navigate_Type::IsSameDocument(common_params.navigation_type); - // TODO(scottmg): Pass a factory for SW, etc. once we have one. base::Optional<URLLoaderFactoryBundle> subresource_loader_factories; + mojom::ControllerServiceWorkerInfoPtr controller_service_worker_info; if (base::FeatureList::IsEnabled(features::kNetworkService) && (!is_same_document || is_first_navigation)) { subresource_loader_factories.emplace(); @@ -3550,6 +3581,12 @@ subresource_loader_factories->RegisterFactory(factory.first, std::move(factory_proxy)); } + + // Pass the controller service worker info if we have one. + if (subresource_loader_params) { + controller_service_worker_info = + std::move(subresource_loader_params->controller_service_worker_info); + } } // It is imperative that cross-document navigations always provide a set of @@ -3561,7 +3598,8 @@ GetNavigationControl()->CommitNavigation( head, body_url, common_params, request_params, std::move(url_loader_client_endpoints), - std::move(subresource_loader_factories), devtools_navigation_token); + std::move(subresource_loader_factories), + std::move(controller_service_worker_info), devtools_navigation_token); // If a network request was made, update the Previews state. if (IsURLHandledByNetworkStack(common_params.url) &&
diff --git a/content/browser/frame_host/render_frame_host_manager.cc b/content/browser/frame_host/render_frame_host_manager.cc index 075b6397..84c6222 100644 --- a/content/browser/frame_host/render_frame_host_manager.cc +++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -501,8 +501,12 @@ if (speculative_render_frame_host_) { // If the speculative RenderFrameHost is trying to commit a navigation, // inform the NavigationController that the load of the corresponding - // NavigationEntry stopped. - if (speculative_render_frame_host_->navigation_handle()) { + // NavigationEntry stopped if needed. This is the case if the new + // navigation was started from BeginNavigation. If the navigation was + // started through the NavigationController, the NavigationController has + // already updated its state properly, and doesn't need to be notified. + if (speculative_render_frame_host_->navigation_handle() && + request.from_begin_navigation()) { frame_tree_node_->navigator()->DiscardPendingEntryIfNeeded( speculative_render_frame_host_->navigation_handle() ->pending_nav_entry_id());
diff --git a/content/browser/frame_host/render_frame_host_manager_browsertest.cc b/content/browser/frame_host/render_frame_host_manager_browsertest.cc index 514ae9d..60e8d72f 100644 --- a/content/browser/frame_host/render_frame_host_manager_browsertest.cc +++ b/content/browser/frame_host/render_frame_host_manager_browsertest.cc
@@ -1576,6 +1576,123 @@ EXPECT_EQ(kAttackInitialURL, shell()->web_contents()->GetVisibleURL()); } +// Ensures that deleting a speculative RenderFrameHost trying to commit a +// navigation to the pending NavigationEntry will not crash if it happens +// because a new navigation to the same pending NavigationEntry started. This is +// a regression test for crbug.com/796135. +IN_PROC_BROWSER_TEST_F( + RenderFrameHostManagerTest, + DeleteSpeculativeRFHPedningCommitOfPendingEntryOnInterrupted) { + const std::string kOriginalPath = "/original.html"; + const std::string kFirstRedirectPath = "/redirect1.html"; + const std::string kSecondRedirectPath = "/reidrect2.html"; + ControllableHttpResponse original_response1(embedded_test_server(), + kOriginalPath); + ControllableHttpResponse original_response2(embedded_test_server(), + kOriginalPath); + ControllableHttpResponse original_response3(embedded_test_server(), + kOriginalPath); + ControllableHttpResponse first_redirect_response(embedded_test_server(), + kFirstRedirectPath); + ControllableHttpResponse second_redirect_response(embedded_test_server(), + kSecondRedirectPath); + EXPECT_TRUE(embedded_test_server()->Start()); + + const GURL kOriginalURL = + embedded_test_server()->GetURL("a.com", kOriginalPath); + const GURL kFirstRedirectURL = + embedded_test_server()->GetURL("b.com", kFirstRedirectPath); + const GURL kSecondRedirectURL = + embedded_test_server()->GetURL("c.com", kSecondRedirectPath); + + // First navigate to the initial URL. This page will have a cross-site + // redirect. + shell()->LoadURL(kOriginalURL); + original_response1.WaitForRequest(); + original_response1.Send( + "HTTP/1.1 302 FOUND\r\n" + "Location: " + + kFirstRedirectURL.spec() + + "\r\n" + "\r\n"); + original_response1.Done(); + first_redirect_response.WaitForRequest(); + first_redirect_response.Send( + "HTTP/1.1 200 OK\r\n" + "Content-Type: text/html; charset=utf-8\r\n" + "\r\n"); + first_redirect_response.Send( + "<html>" + "<body></body>" + "</html>"); + first_redirect_response.Done(); + EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); + EXPECT_EQ(kFirstRedirectURL, shell()->web_contents()->GetVisibleURL()); + + // Now reload the original request, but redirect to yet another site. + TestNavigationManager first_reload(shell()->web_contents(), kOriginalURL); + shell()->web_contents()->GetController().Reload( + ReloadType::ORIGINAL_REQUEST_URL, false); + EXPECT_TRUE(first_reload.WaitForRequestStart()); + first_reload.ResumeNavigation(); + + original_response2.WaitForRequest(); + original_response2.Send( + "HTTP/1.1 302 FOUND\r\n" + "Location: " + + kSecondRedirectURL.spec() + + "\r\n" + "\r\n"); + original_response2.Done(); + second_redirect_response.WaitForRequest(); + second_redirect_response.Send( + "HTTP/1.1 200 OK\r\n" + "Content-Type: text/html; charset=utf-8\r\n" + "\r\n"); + EXPECT_TRUE(first_reload.WaitForResponse()); + first_reload.ResumeNavigation(); + + // The navigation is ready to commit: it has been handed to the speculative + // RenderFrameHost for commit. + RenderFrameHostImpl* speculative_rfh = + static_cast<WebContentsImpl*>(shell()->web_contents()) + ->GetFrameTree() + ->root() + ->render_manager() + ->speculative_frame_host(); + CHECK(speculative_rfh); + EXPECT_TRUE(speculative_rfh->is_loading()); + + // The user requests a new reload while the previous reload hasn't committed + // yet. The navigation start deletes the speculative RenderFrameHost that was + // supposed to commit the browser-initiated navigation. This should not crash. + TestNavigationManager second_reload(shell()->web_contents(), kOriginalURL); + shell()->web_contents()->GetController().Reload( + ReloadType::ORIGINAL_REQUEST_URL, false); + EXPECT_TRUE(second_reload.WaitForRequestStart()); + speculative_rfh = static_cast<WebContentsImpl*>(shell()->web_contents()) + ->GetFrameTree() + ->root() + ->render_manager() + ->speculative_frame_host(); + EXPECT_FALSE(speculative_rfh); + + // The second reload results in a 204. + second_reload.ResumeNavigation(); + original_response3.WaitForRequest(); + original_response3.Send( + "HTTP/1.1 204 OK\r\n" + "Connection: close\r\n" + "\r\n"); + second_reload.WaitForNavigationFinished(); + speculative_rfh = static_cast<WebContentsImpl*>(shell()->web_contents()) + ->GetFrameTree() + ->root() + ->render_manager() + ->speculative_frame_host(); + EXPECT_FALSE(speculative_rfh); +} + // Test for crbug.com/9682. We should not show the URL for a pending renderer- // initiated navigation in a new tab if it is not the initial navigation. In // this case, the renderer will not notify us of a modification, so we cannot
diff --git a/content/browser/gpu/gpu_process_host.cc b/content/browser/gpu/gpu_process_host.cc index 046b3de..4bfbe17 100644 --- a/content/browser/gpu/gpu_process_host.cc +++ b/content/browser/gpu/gpu_process_host.cc
@@ -199,13 +199,6 @@ delete message; } -void RouteMessageToOzoneOnUI(const IPC::Message& message) { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - ui::OzonePlatform::GetInstance() - ->GetGpuPlatformSupportHost() - ->OnMessageReceived(message); -} - #endif // defined(USE_OZONE) void OnGpuProcessHostDestroyedOnUI(int host_id, const std::string& message) { @@ -692,8 +685,9 @@ bool GpuProcessHost::OnMessageReceived(const IPC::Message& message) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); #if defined(USE_OZONE) - BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, - base::BindOnce(&RouteMessageToOzoneOnUI, message)); + ui::OzonePlatform::GetInstance() + ->GetGpuPlatformSupportHost() + ->OnMessageReceived(message); #endif return true; }
diff --git a/content/browser/loader/navigation_url_loader_network_service.cc b/content/browser/loader/navigation_url_loader_network_service.cc index d6f63565..98f8bc6 100644 --- a/content/browser/loader/navigation_url_loader_network_service.cc +++ b/content/browser/loader/navigation_url_loader_network_service.cc
@@ -406,7 +406,6 @@ // See if the next handler wants to handle the request. if (handler_index_ < handlers_.size()) { - DCHECK(!subresource_loader_params_); auto* next_handler = handlers_[handler_index_++].get(); next_handler->MaybeCreateLoader( *resource_request_, resource_context_,
diff --git a/content/browser/media/media_color_browsertest.cc b/content/browser/media/media_color_browsertest.cc index bf60b0e8..3b6b5cf 100644 --- a/content/browser/media/media_color_browsertest.cc +++ b/content/browser/media/media_color_browsertest.cc
@@ -92,12 +92,18 @@ RunColorTest("yuv420p_rec709.mp4"); } -// Android devices usually only support baseline, main and high. -#if !defined(OS_ANDROID) -IN_PROC_BROWSER_TEST_F(MediaColorTest, Yuv420pHighBitDepth) { +// This fails on Linux: http://crbug.com/767926. Android doesn't support 10bpc. +#if defined(OS_LINUX) || defined(OS_ANDROID) +#define MAYBE_Yuv420pHighBitDepth DISABLED_Yuv420pHighBitDepth +#else +#define MAYBE_Yuv420pHighBitDepth Yuv420pHighBitDepth +#endif +IN_PROC_BROWSER_TEST_F(MediaColorTest, MAYBE_Yuv420pHighBitDepth) { RunColorTest("yuv420p_hi10p.mp4"); } +// Android devices usually only support baseline, main and high. +#if !defined(OS_ANDROID) IN_PROC_BROWSER_TEST_F(MediaColorTest, Yuv422pH264) { RunColorTest("yuv422p.mp4"); }
diff --git a/content/browser/message_port_provider_browsertest.cc b/content/browser/message_port_provider_browsertest.cc index 3563529..5f8892193 100644 --- a/content/browser/message_port_provider_browsertest.cc +++ b/content/browser/message_port_provider_browsertest.cc
@@ -23,25 +23,34 @@ // Verify that messages can be posted to main frame. IN_PROC_BROWSER_TEST_F(MessagePortProviderBrowserTest, PostMessage) { - const std::string data = - "<!DOCTYPE html><html><body>" - " <script type=\"text/javascript\">" - " onmessage = function (e) { document.title = e.data; }" - " </script>" - "</body></html>"; - const base::string16 target_origin(base::UTF8ToUTF16("http://baseurl")); - const GURL base_url(target_origin); - const GURL history_url; - // Load data. Blocks until it is done. - content::LoadDataWithBaseURL(shell(), history_url, data, base_url); - const base::string16 source_origin(base::UTF8ToUTF16("source")); - const base::string16 message(base::UTF8ToUTF16("success")); - content::TitleWatcher title_watcher(shell()->web_contents(), message); - MessagePortProvider::PostMessageToFrame(shell()->web_contents(), - source_origin, - target_origin, - message); - EXPECT_EQ(message, title_watcher.WaitAndGetTitle()); + // Listen for a message. + ASSERT_TRUE(embedded_test_server()->Start()); + GURL url(embedded_test_server()->GetURL("/title1.html")); + EXPECT_TRUE(NavigateToURL(shell(), url)); + EXPECT_TRUE(ExecuteScript(shell(), R"( + onmessage = function(e) { + domAutomationController.send(e.origin + ':' + e.data); + } )")); + + // Post a message. + const std::string target_origin(url.GetOrigin().spec()); + const std::string source_origin("https://source.origin.com"); + const std::string message("success"); + DOMMessageQueue msg_queue; + MessagePortProvider::PostMessageToFrame( + shell()->web_contents(), base::UTF8ToUTF16(source_origin), + base::UTF8ToUTF16(target_origin), base::UTF8ToUTF16(message)); + + // Verify that the message was received (and had the expected payload). + std::string expected_test_reply; + expected_test_reply += '"'; + expected_test_reply += source_origin; + expected_test_reply += ':'; + expected_test_reply += message; + expected_test_reply += '"'; + std::string actual_test_reply; + EXPECT_TRUE(msg_queue.WaitForMessage(&actual_test_reply)); + EXPECT_EQ(expected_test_reply, actual_test_reply); } } // namespace content
diff --git a/content/browser/renderer_host/delegated_frame_host.cc b/content/browser/renderer_host/delegated_frame_host.cc index 51cd0a4..c47066ec 100644 --- a/content/browser/renderer_host/delegated_frame_host.cc +++ b/content/browser/renderer_host/delegated_frame_host.cc
@@ -293,8 +293,10 @@ client_->DelegatedFrameHostGetLayer()->SetShowPrimarySurface( surface_id, current_frame_size_in_dip_, GetGutterColor(), GetSurfaceReferenceFactory()); - if (compositor_) + if (compositor_ && !base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kDisableResizeLock)) { compositor_->OnChildResizing(); + } // Input throttling and guttering are handled differently when surface // synchronization is enabled so exit early here. return; @@ -578,8 +580,7 @@ UpdateGutters(); } - if (HasFallbackSurface()) - frame_evictor_->SwappedFrame(client_->DelegatedFrameHostIsVisible()); + frame_evictor_->SwappedFrame(client_->DelegatedFrameHostIsVisible()); // Note: the frame may have been evicted immediately. }
diff --git a/content/browser/renderer_host/input/gesture_event_queue_unittest.cc b/content/browser/renderer_host/input/gesture_event_queue_unittest.cc index bb50f40..78d709e 100644 --- a/content/browser/renderer_host/input/gesture_event_queue_unittest.cc +++ b/content/browser/renderer_host/input/gesture_event_queue_unittest.cc
@@ -232,12 +232,10 @@ base::test::ScopedFeatureList feature_list_; }; -#if GTEST_HAS_PARAM_TEST // This is for tests that are to be run for all source devices. class GestureEventQueueWithSourceTest : public GestureEventQueueTest, public testing::WithParamInterface<WebGestureDevice> {}; -#endif // GTEST_HAS_PARAM_TEST class GestureEventQueueWithCompositorEventQueueTest : public GestureEventQueueTest { @@ -997,7 +995,6 @@ EXPECT_EQ(0U, GetAndResetSentGestureEventCount()); } -#if GTEST_HAS_PARAM_TEST TEST_P(GestureEventQueueWithSourceTest, GestureFlingCancelsFiltered) { WebGestureDevice source_device = GetParam(); @@ -1095,7 +1092,6 @@ GestureEventQueueWithSourceTest, testing::Values(blink::kWebGestureDeviceTouchscreen, blink::kWebGestureDeviceTouchpad)); -#endif // GTEST_HAS_PARAM_TEST // Test that a GestureScrollEnd is deferred during the debounce interval, // that Scrolls are not and that the deferred events are sent after that
diff --git a/content/browser/renderer_host/render_widget_host_unittest.cc b/content/browser/renderer_host/render_widget_host_unittest.cc index 7f16f2b..b226a61 100644 --- a/content/browser/renderer_host/render_widget_host_unittest.cc +++ b/content/browser/renderer_host/render_widget_host_unittest.cc
@@ -19,6 +19,8 @@ #include "base/threading/thread_task_runner_handle.h" #include "base/timer/timer.h" #include "build/build_config.h" +#include "components/viz/common/surfaces/local_surface_id.h" +#include "components/viz/common/surfaces/parent_local_surface_id_allocator.h" #include "components/viz/test/begin_frame_args_test.h" #include "components/viz/test/compositor_frame_helpers.h" #include "content/browser/gpu/compositor_util.h" @@ -294,8 +296,11 @@ bottom_controls_height_(0.f) {} // Sets the bounds returned by GetViewBounds. - void set_bounds(const gfx::Rect& bounds) { + void SetBounds(const gfx::Rect& bounds) override { + if (bounds_ == bounds) + return; bounds_ = bounds; + local_surface_id_ = local_surface_id_allocator_.GenerateId(); } void set_top_controls_height(float top_controls_height) { @@ -340,6 +345,10 @@ float GetBottomControlsHeight() const override { return bottom_controls_height_; } + viz::LocalSurfaceId GetLocalSurfaceId() const override { + return local_surface_id_; + } + void ProcessAckedTouchEvent(const TouchEventWithLatencyInfo& touch, InputEventAckState ack_result) override { acked_event_ = touch.event; @@ -379,6 +388,8 @@ float top_controls_height_; float bottom_controls_height_; viz::BeginFrameAck last_did_not_produce_frame_ack_; + viz::LocalSurfaceId local_surface_id_; + viz::ParentLocalSurfaceIdAllocator local_surface_id_allocator_; private: DISALLOW_COPY_AND_ASSIGN(TestView); @@ -895,14 +906,12 @@ kAsyncWheelEvents) {} }; -#if GTEST_HAS_PARAM_TEST // RenderWidgetHostWithSourceTest ---------------------------------------------- // This is for tests that are to be run for all source devices. class RenderWidgetHostWithSourceTest : public RenderWidgetHostTest, public testing::WithParamInterface<WebGestureDevice> {}; -#endif // GTEST_HAS_PARAM_TEST } // namespace @@ -911,7 +920,7 @@ TEST_F(RenderWidgetHostTest, Resize) { // The initial bounds is the empty rect, so setting it to the same thing // shouldn't send the resize message. - view_->set_bounds(gfx::Rect()); + view_->SetBounds(gfx::Rect()); host_->WasResized(); EXPECT_FALSE(host_->resize_ack_pending_); EXPECT_FALSE(process_->sink().GetUniqueMessageMatching(ViewMsg_Resize::ID)); @@ -926,7 +935,7 @@ // but should not expect ack for empty physical backing size. gfx::Rect original_size(0, 0, 100, 100); process_->sink().ClearMessages(); - view_->set_bounds(original_size); + view_->SetBounds(original_size); view_->SetMockPhysicalBackingSize(gfx::Size()); host_->WasResized(); EXPECT_FALSE(host_->resize_ack_pending_); @@ -952,7 +961,7 @@ process_->sink().ClearMessages(); gfx::Rect second_size(0, 0, 110, 110); EXPECT_FALSE(host_->resize_ack_pending_); - view_->set_bounds(second_size); + view_->SetBounds(second_size); host_->WasResized(); EXPECT_TRUE(host_->resize_ack_pending_); params.flags = 0; @@ -965,7 +974,7 @@ // a resize ACK is pending. gfx::Rect third_size(0, 0, 120, 120); process_->sink().ClearMessages(); - view_->set_bounds(third_size); + view_->SetBounds(third_size); host_->WasResized(); EXPECT_TRUE(host_->resize_ack_pending_); EXPECT_EQ(second_size.size(), host_->old_resize_params_->new_size); @@ -995,7 +1004,7 @@ // expect a resize ack (since the renderer won't ack empty sizes). The message // should contain the new size (0x0) and not the previous one that we skipped process_->sink().ClearMessages(); - view_->set_bounds(gfx::Rect()); + view_->SetBounds(gfx::Rect()); host_->WasResized(); EXPECT_FALSE(host_->resize_ack_pending_); EXPECT_EQ(gfx::Size(), host_->old_resize_params_->new_size); @@ -1003,7 +1012,7 @@ // Send a rect that has no area but has either width or height set. process_->sink().ClearMessages(); - view_->set_bounds(gfx::Rect(0, 0, 0, 30)); + view_->SetBounds(gfx::Rect(0, 0, 0, 30)); host_->WasResized(); EXPECT_FALSE(host_->resize_ack_pending_); EXPECT_EQ(gfx::Size(0, 30), host_->old_resize_params_->new_size); @@ -1017,7 +1026,7 @@ EXPECT_FALSE(process_->sink().GetFirstMessageMatching(ViewMsg_Resize::ID)); // A different size should be sent again, however. - view_->set_bounds(gfx::Rect(0, 0, 0, 31)); + view_->SetBounds(gfx::Rect(0, 0, 0, 31)); host_->WasResized(); EXPECT_FALSE(host_->resize_ack_pending_); EXPECT_EQ(gfx::Size(0, 31), host_->old_resize_params_->new_size); @@ -1075,7 +1084,7 @@ // Setting the bounds to a "real" rect should send out the notification. gfx::Rect original_size(0, 0, 100, 100); - view_->set_bounds(original_size); + view_->SetBounds(original_size); host_->WasResized(); EXPECT_TRUE(host_->resize_ack_pending_); EXPECT_EQ(original_size.size(), host_->old_resize_params_->new_size); @@ -1839,7 +1848,7 @@ TouchEmulator::Mode::kEmulatingTouchFromMouse, ui::GestureProviderConfigType::GENERIC_MOBILE); process_->sink().ClearMessages(); - view_->set_bounds(gfx::Rect(0, 0, 400, 200)); + view_->SetBounds(gfx::Rect(0, 0, 400, 200)); view_->Show(); SimulateMouseEvent(WebInputEvent::kMouseMove, 10, 10, 0, false); @@ -1992,7 +2001,7 @@ TouchEmulator::Mode::kEmulatingTouchFromMouse, ui::GestureProviderConfigType::GENERIC_MOBILE); process_->sink().ClearMessages(); - view_->set_bounds(gfx::Rect(0, 0, 400, 200)); + view_->SetBounds(gfx::Rect(0, 0, 400, 200)); view_->Show(); SimulateMouseEvent(WebInputEvent::kMouseMove, 10, 10, 0, false); @@ -2593,7 +2602,7 @@ TEST_F(RenderWidgetHostTest, ResizeParams) { gfx::Rect bounds(0, 0, 100, 100); gfx::Size physical_backing_size(40, 50); - view_->set_bounds(bounds); + view_->SetBounds(bounds); view_->SetMockPhysicalBackingSize(physical_backing_size); ResizeParams resize_params; @@ -2659,7 +2668,7 @@ : RenderWidgetHostTest(), initial_size_(200, 100) {} void ConfigureView(TestView* view) override { - view->set_bounds(gfx::Rect(initial_size_)); + view->SetBounds(gfx::Rect(initial_size_)); } protected:
diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc index 2a7b4ba..8fb1c1dd 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc +++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
@@ -2644,6 +2644,11 @@ // If the view size is larger than the compositor frame then extra layers // should be created to fill the gap. TEST_F(RenderWidgetHostViewAuraTest, DelegatedFrameGutter) { + // TODO(fsamuel): Delete this test once surface synchronization is on for + // all platforms. + if (features::IsSurfaceSynchronizationEnabled()) + return; + gfx::Size large_size(100, 100); gfx::Size small_size(40, 45); gfx::Size medium_size(40, 95); @@ -2831,6 +2836,11 @@ // Skipped frames should not drop their damage. TEST_F(RenderWidgetHostViewAuraTest, SkippedDelegatedFrames) { + // TODO(fsamuel): Delete this test once surface synchronization is on for + // all platforms. + if (features::IsSurfaceSynchronizationEnabled()) + return; + gfx::Rect view_rect(100, 100); gfx::Size frame_size = view_rect.size(); viz::LocalSurfaceId local_surface_id = @@ -2945,6 +2955,11 @@ // If resize races with a renderer frame, we should lock for the right size. TEST_F(RenderWidgetHostViewAuraTest, ResizeAfterReceivingFrame) { + // TODO(fsamuel): Delete this test once surface synchronization is on for + // all platforms. + if (features::IsSurfaceSynchronizationEnabled()) + return; + gfx::Rect view_rect(100, 100); gfx::Size frame_size = view_rect.size(); viz::LocalSurfaceId local_surface_id = @@ -3020,6 +3035,11 @@ // no reason to lock the compositor as there can't be guttering around a // renderer frame that doesn't exist. TEST_F(RenderWidgetHostViewAuraTest, MissingFramesDontLock) { + // TODO(fsamuel): Delete this test once surface synchronization is on for + // all platforms. + if (features::IsSurfaceSynchronizationEnabled()) + return; + gfx::Rect view_rect(100, 100); gfx::Size frame_size = view_rect.size(); @@ -3374,6 +3394,11 @@ } TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) { + // TODO(fsamuel): Delete this test once surface synchronization is on for + // all platforms. + if (features::IsSurfaceSynchronizationEnabled()) + return; + view_->InitAsChild(nullptr); size_t max_renderer_frames =
diff --git a/content/browser/renderer_host/render_widget_host_view_child_frame.cc b/content/browser/renderer_host/render_widget_host_view_child_frame.cc index 575f78d..a5730456 100644 --- a/content/browser/renderer_host/render_widget_host_view_child_frame.cc +++ b/content/browser/renderer_host/render_widget_host_view_child_frame.cc
@@ -780,6 +780,24 @@ transformed_point); } +gfx::PointF RenderWidgetHostViewChildFrame::TransformRootPointToViewCoordSpace( + const gfx::PointF& point) { + if (!frame_connector_) + return point; + + RenderWidgetHostViewBase* root_rwhv = + frame_connector_->GetRootRenderWidgetHostView(); + if (!root_rwhv) + return point; + + gfx::PointF transformed_point; + if (!root_rwhv->TransformPointToCoordSpaceForView(point, this, + &transformed_point)) { + return point; + } + return transformed_point; +} + bool RenderWidgetHostViewChildFrame::IsRenderWidgetHostViewChildFrame() { return true; }
diff --git a/content/browser/renderer_host/render_widget_host_view_child_frame.h b/content/browser/renderer_host/render_widget_host_view_child_frame.h index bca6513e..841f5a5 100644 --- a/content/browser/renderer_host/render_widget_host_view_child_frame.h +++ b/content/browser/renderer_host/render_widget_host_view_child_frame.h
@@ -153,6 +153,8 @@ const gfx::PointF& point, RenderWidgetHostViewBase* target_view, gfx::PointF* transformed_point) override; + gfx::PointF TransformRootPointToViewCoordSpace( + const gfx::PointF& point) override; TouchSelectionControllerClientManager* GetTouchSelectionControllerClientManager() override;
diff --git a/content/browser/service_worker/service_worker_client_utils.cc b/content/browser/service_worker/service_worker_client_utils.cc index dbb9e2e..7a7fd67 100644 --- a/content/browser/service_worker/service_worker_client_utils.cc +++ b/content/browser/service_worker/service_worker_client_utils.cc
@@ -510,8 +510,8 @@ base::Bind(&DidNavigate, context, script_url.GetOrigin(), callback))); } -void GetClient(ServiceWorkerProviderHost* provider_host, - const ClientCallback& callback) { +void GetClient(const ServiceWorkerProviderHost* provider_host, + GetClientCallback callback) { DCHECK_CURRENTLY_ON(BrowserThread::IO); blink::mojom::ServiceWorkerClientType client_type = @@ -523,21 +523,27 @@ if (client_type == blink::mojom::ServiceWorkerClientType::kWindow) { BrowserThread::PostTaskAndReplyWithResult( BrowserThread::UI, FROM_HERE, - base::Bind(&GetWindowClientInfoOnUI, provider_host->process_id(), - provider_host->route_id(), provider_host->create_time(), - provider_host->client_uuid()), - callback); + base::BindOnce(&GetWindowClientInfoOnUI, provider_host->process_id(), + provider_host->route_id(), provider_host->create_time(), + provider_host->client_uuid()), + base::BindOnce( + [](GetClientCallback callback, + const blink::mojom::ServiceWorkerClientInfo& client_info) { + std::move(callback).Run(client_info.Clone()); + }, + std::move(callback))); return; } - blink::mojom::ServiceWorkerClientInfo client_info( + auto client_info = blink::mojom::ServiceWorkerClientInfo::New( provider_host->document_url(), provider_host->client_uuid(), provider_host->client_type(), blink::mojom::PageVisibilityState::kHidden, false, // is_focused network::mojom::RequestContextFrameType::kNone, base::TimeTicks(), provider_host->create_time()); - BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, - base::BindOnce(callback, client_info)); + BrowserThread::PostTask( + BrowserThread::IO, FROM_HERE, + base::BindOnce(std::move(callback), std::move(client_info))); } void GetClients(const base::WeakPtr<ServiceWorkerVersion>& controller,
diff --git a/content/browser/service_worker/service_worker_client_utils.h b/content/browser/service_worker/service_worker_client_utils.h index 19e8f50b..87ed835 100644 --- a/content/browser/service_worker/service_worker_client_utils.h +++ b/content/browser/service_worker/service_worker_client_utils.h
@@ -29,6 +29,8 @@ const blink::mojom::ServiceWorkerClientInfo& client_info)>; using ClientCallback = base::Callback<void( const blink::mojom::ServiceWorkerClientInfo& client_info)>; +using GetClientCallback = base::OnceCallback<void( + blink::mojom::ServiceWorkerClientInfoPtr client_info)>; using ServiceWorkerClientPtrs = std::vector<blink::mojom::ServiceWorkerClientInfoPtr>; using ClientsCallback = @@ -59,8 +61,8 @@ // Gets the client specified by |provider_host|. |callback| is called with the // client information on completion. -void GetClient(ServiceWorkerProviderHost* provider_host, - const ClientCallback& callback); +void GetClient(const ServiceWorkerProviderHost* provider_host, + GetClientCallback callback); // Collects clients matched with |options|. |callback| is called with the client // information sorted in MRU order (most recently focused order) on completion.
diff --git a/content/browser/service_worker/service_worker_controllee_request_handler.cc b/content/browser/service_worker/service_worker_controllee_request_handler.cc index 6651c4e..c0c6660 100644 --- a/content/browser/service_worker/service_worker_controllee_request_handler.cc +++ b/content/browser/service_worker/service_worker_controllee_request_handler.cc
@@ -17,6 +17,7 @@ #include "content/browser/service_worker/service_worker_response_info.h" #include "content/browser/service_worker/service_worker_url_job_wrapper.h" #include "content/browser/service_worker/service_worker_url_request_job.h" +#include "content/common/navigation_subresource_loader_params.h" #include "content/common/service_worker/service_worker_utils.h" #include "content/public/browser/content_browser_client.h" #include "content/public/browser/render_frame_host.h" @@ -242,6 +243,37 @@ // We will asynchronously continue on DidLookupRegistrationForMainResource. } +base::Optional<SubresourceLoaderParams> +ServiceWorkerControlleeRequestHandler::MaybeCreateSubresourceLoaderParams() { + DCHECK(ServiceWorkerUtils::IsServicificationEnabled()); + + // We didn't create URLLoader for this request. + if (!url_job_) + return base::nullopt; + + // DidLookupRegistrationForMainResource() for the request didn't find + // a matching service worker for this request, and + // ServiceWorkerProviderHost::AssociateRegistration() was not called. + if (!provider_host_ || !provider_host_->controller()) + return base::nullopt; + + // Otherwise let's send the controller service worker information along + // with the navigation commit. + // Note that |controller_info->endpoint| could be null if the controller + // service worker isn't starting up or running, e.g. in no-fetch worker + // cases. In that case the renderer frame won't get the controller pointer + // upon the navigation commit, and subresource loading will not be intercepted + // at least until the frame gets a new controller ptr by SetController. + SubresourceLoaderParams params; + auto controller_info = mojom::ControllerServiceWorkerInfo::New(); + controller_info->endpoint = + provider_host_->GetControllerServiceWorkerPtr().PassInterface(); + controller_info->object_info = provider_host_->GetOrCreateServiceWorkerHandle( + provider_host_->controller()); + params.controller_service_worker_info = std::move(controller_info); + return params; +} + void ServiceWorkerControlleeRequestHandler::PrepareForMainResource( const GURL& url, const GURL& site_for_cookies) {
diff --git a/content/browser/service_worker/service_worker_controllee_request_handler.h b/content/browser/service_worker/service_worker_controllee_request_handler.h index ea80915..48ed31f0 100644 --- a/content/browser/service_worker/service_worker_controllee_request_handler.h +++ b/content/browser/service_worker/service_worker_controllee_request_handler.h
@@ -58,6 +58,7 @@ scoped_refptr<ResourceRequestBody> body); ~ServiceWorkerControlleeRequestHandler() override; + // Non-S13nServiceWorker: // Called via custom URLRequestJobFactory. // Returning a nullptr indicates that the request is not handled by // this handler. @@ -77,6 +78,11 @@ void MaybeCreateLoader(const ResourceRequest& request, ResourceContext* resource_context, LoaderCallback callback) override; + // Returns params with the ControllerServiceWorkerPtr if we have found + // a matching controller service worker for the |request| that is given + // to MaybeCreateLoader(). Otherwise this returns base::nullopt. + base::Optional<SubresourceLoaderParams> MaybeCreateSubresourceLoaderParams() + override; private: FRIEND_TEST_ALL_PREFIXES(ServiceWorkerControlleeRequestHandlerTest,
diff --git a/content/browser/service_worker/service_worker_data_pipe_reader.cc b/content/browser/service_worker/service_worker_data_pipe_reader.cc index b0d9a98..c6edd1327 100644 --- a/content/browser/service_worker/service_worker_data_pipe_reader.cc +++ b/content/browser/service_worker/service_worker_data_pipe_reader.cc
@@ -18,7 +18,7 @@ : owner_(owner), streaming_version_(streaming_version), stream_pending_buffer_size_(0), - handle_watcher_(FROM_HERE, mojo::SimpleWatcher::ArmingPolicy::AUTOMATIC), + handle_watcher_(FROM_HERE, mojo::SimpleWatcher::ArmingPolicy::MANUAL), stream_(std::move(stream_handle->stream)), binding_(this, std::move(stream_handle->callback_request)), producer_state_(State::kStreaming) { @@ -51,10 +51,7 @@ void ServiceWorkerDataPipeReader::OnHandleGotSignal(MojoResult) { TRACE_EVENT_ASYNC_STEP_INTO0("ServiceWorker", "ServiceWorkerDataPipeReader", this, "OnHandleGotSignal"); - // Do nothing if stream_pending_buffer_ is empty, i.e. there's no ReadRawData - // operation waiting for IO completion. - if (!stream_pending_buffer_) - return; + DCHECK(stream_pending_buffer_); // If state() is not STREAMING, it means the data pipe was disconnected and // OnCompleted/OnAborted has already been called. @@ -84,7 +81,8 @@ AsyncComplete(); return; case MOJO_RESULT_SHOULD_WAIT: - return; + // MOJO_RESULT_SHOULD_WAIT should not be returned since + // OnHandleGotSignal should be called by readable or closed signals. case MOJO_RESULT_INVALID_ARGUMENT: case MOJO_RESULT_OUT_OF_RANGE: case MOJO_RESULT_BUSY: @@ -122,6 +120,7 @@ case MOJO_RESULT_SHOULD_WAIT: stream_pending_buffer_ = buf; stream_pending_buffer_size_ = buf_size; + handle_watcher_.ArmOrNotify(); return net::ERR_IO_PENDING; case MOJO_RESULT_INVALID_ARGUMENT: case MOJO_RESULT_OUT_OF_RANGE:
diff --git a/content/browser/service_worker/service_worker_dispatcher_host.cc b/content/browser/service_worker/service_worker_dispatcher_host.cc index 6b5b6312..e3b22ed 100644 --- a/content/browser/service_worker/service_worker_dispatcher_host.cc +++ b/content/browser/service_worker/service_worker_dispatcher_host.cc
@@ -53,12 +53,8 @@ void SetMessageEventSource( mojom::ExtendableMessageEventPtr* event, - const blink::mojom::ServiceWorkerClientInfo& source_info) { - (*event)->source_info_for_client = blink::mojom::ServiceWorkerClientInfo::New( - source_info.url, source_info.client_uuid, source_info.client_type, - source_info.page_visibility_state, source_info.is_focused, - source_info.frame_type, source_info.last_focus_time, - source_info.creation_time); + blink::mojom::ServiceWorkerClientInfoPtr source_info) { + (*event)->source_info_for_client = std::move(source_info); // Hide the client url if the client has a unique origin. if ((*event)->source_origin.unique()) @@ -67,17 +63,27 @@ void SetMessageEventSource( mojom::ExtendableMessageEventPtr* event, - const blink::mojom::ServiceWorkerObjectInfo& source_info) { - (*event)->source_info_for_service_worker = - blink::mojom::ServiceWorkerObjectInfo::New( - source_info.handle_id, source_info.version_id, source_info.state, - source_info.url); + blink::mojom::ServiceWorkerObjectInfoPtr source_info) { + (*event)->source_info_for_service_worker = std::move(source_info); // Hide the client url if the client has a unique origin. if ((*event)->source_origin.unique()) (*event)->source_info_for_service_worker->url = GURL(); } +bool IsValidSourceInfo( + const blink::mojom::ServiceWorkerClientInfoPtr& source_info) { + return !source_info->client_uuid.empty(); +} + +bool IsValidSourceInfo( + const blink::mojom::ServiceWorkerObjectInfoPtr& source_info) { + return source_info->handle_id != + blink::mojom::kInvalidServiceWorkerHandleId && + source_info->version_id != + blink::mojom::kInvalidServiceWorkerVersionId; +} + } // namespace ServiceWorkerDispatcherHost::ServiceWorkerDispatcherHost( @@ -261,11 +267,11 @@ case blink::mojom::ServiceWorkerProviderType::kForSharedWorker: service_worker_client_utils::GetClient( sender_provider_host, - base::Bind(&ServiceWorkerDispatcherHost:: - DispatchExtendableMessageEventInternal< - blink::mojom::ServiceWorkerClientInfo>, - this, worker, message, source_origin, sent_message_ports, - base::nullopt, callback)); + base::BindOnce(&ServiceWorkerDispatcherHost:: + DispatchExtendableMessageEventInternal< + blink::mojom::ServiceWorkerClientInfoPtr>, + this, worker, message, source_origin, + sent_message_ports, base::nullopt, callback)); break; case blink::mojom::ServiceWorkerProviderType::kForServiceWorker: { // Clamp timeout to the sending worker's remaining timeout, to prevent @@ -280,10 +286,10 @@ FROM_HERE, base::BindOnce(&ServiceWorkerDispatcherHost:: DispatchExtendableMessageEventInternal< - blink::mojom::ServiceWorkerObjectInfo>, + blink::mojom::ServiceWorkerObjectInfoPtr>, this, worker, message, source_origin, sent_message_ports, base::make_optional(timeout), - callback, *worker_info)); + callback, std::move(worker_info))); break; } case blink::mojom::ServiceWorkerProviderType::kUnknown: @@ -352,7 +358,7 @@ } } -template <typename SourceInfo> +template <typename SourceInfoPtr> void ServiceWorkerDispatcherHost::DispatchExtendableMessageEventInternal( scoped_refptr<ServiceWorkerVersion> worker, const base::string16& message, @@ -360,43 +366,44 @@ const std::vector<MessagePortChannel>& sent_message_ports, const base::Optional<base::TimeDelta>& timeout, const StatusCallback& callback, - const SourceInfo& source_info) { + SourceInfoPtr source_info) { if (!IsValidSourceInfo(source_info)) { - DidFailToDispatchExtendableMessageEvent<SourceInfo>( - sent_message_ports, source_info, callback, SERVICE_WORKER_ERROR_FAILED); + DidFailToDispatchExtendableMessageEvent<SourceInfoPtr>( + sent_message_ports, std::move(source_info), callback, + SERVICE_WORKER_ERROR_FAILED); return; } // If not enough time is left to actually process the event don't even // bother starting the worker and sending the event. if (timeout && *timeout < base::TimeDelta::FromMilliseconds(100)) { - DidFailToDispatchExtendableMessageEvent<SourceInfo>( - sent_message_ports, source_info, callback, + DidFailToDispatchExtendableMessageEvent<SourceInfoPtr>( + sent_message_ports, std::move(source_info), callback, SERVICE_WORKER_ERROR_TIMEOUT); return; } - worker->RunAfterStartWorker( - ServiceWorkerMetrics::EventType::MESSAGE, - base::BindOnce( - &ServiceWorkerDispatcherHost:: - DispatchExtendableMessageEventAfterStartWorker<SourceInfo>, - this, worker, message, source_origin, sent_message_ports, source_info, - timeout, callback), - base::BindOnce( - &ServiceWorkerDispatcherHost::DidFailToDispatchExtendableMessageEvent< - SourceInfo>, - this, sent_message_ports, source_info, callback)); + auto task = base::BindOnce( + &ServiceWorkerDispatcherHost:: + DispatchExtendableMessageEventAfterStartWorker<SourceInfoPtr>, + this, worker, message, source_origin, sent_message_ports, + source_info->Clone(), timeout, callback); + auto error_task = base::BindOnce( + &ServiceWorkerDispatcherHost::DidFailToDispatchExtendableMessageEvent< + SourceInfoPtr>, + this, sent_message_ports, std::move(source_info), callback); + worker->RunAfterStartWorker(ServiceWorkerMetrics::EventType::MESSAGE, + std::move(task), std::move(error_task)); } -template <typename SourceInfo> +template <typename SourceInfoPtr> void ServiceWorkerDispatcherHost:: DispatchExtendableMessageEventAfterStartWorker( scoped_refptr<ServiceWorkerVersion> worker, const base::string16& message, const url::Origin& source_origin, const std::vector<MessagePortChannel>& sent_message_ports, - const SourceInfo& source_info, + SourceInfoPtr source_info, const base::Optional<base::TimeDelta>& timeout, const StatusCallback& callback) { int request_id; @@ -413,47 +420,36 @@ event->message = message; event->source_origin = source_origin; event->message_ports = MessagePortChannel::ReleaseHandles(sent_message_ports); - SetMessageEventSource(&event, source_info); + SetMessageEventSource(&event, std::move(source_info)); worker->event_dispatcher()->DispatchExtendableMessageEvent( std::move(event), worker->CreateSimpleEventCallback(request_id)); } -template <typename SourceInfo> +template <typename SourceInfoPtr> void ServiceWorkerDispatcherHost::DidFailToDispatchExtendableMessageEvent( const std::vector<MessagePortChannel>& sent_message_ports, - const SourceInfo& source_info, + SourceInfoPtr source_info, const StatusCallback& callback, ServiceWorkerStatusCode status) { if (IsValidSourceInfo(source_info)) - ReleaseSourceInfo(source_info); + ReleaseSourceInfo(std::move(source_info)); callback.Run(status); } -bool ServiceWorkerDispatcherHost::IsValidSourceInfo( - const blink::mojom::ServiceWorkerClientInfo& source_info) const { - return !source_info.client_uuid.empty(); -} - -bool ServiceWorkerDispatcherHost::IsValidSourceInfo( - const blink::mojom::ServiceWorkerObjectInfo& source_info) const { - return source_info.handle_id != blink::mojom::kInvalidServiceWorkerHandleId && - source_info.version_id != blink::mojom::kInvalidServiceWorkerVersionId; -} - void ServiceWorkerDispatcherHost::ReleaseSourceInfo( - const blink::mojom::ServiceWorkerClientInfo& source_info) { + blink::mojom::ServiceWorkerClientInfoPtr source_info) { // ServiceWorkerClientInfo is just a snapshot of the client. There is no need // to do anything for it. } void ServiceWorkerDispatcherHost::ReleaseSourceInfo( - const blink::mojom::ServiceWorkerObjectInfo& source_info) { - ServiceWorkerHandle* handle = handles_.Lookup(source_info.handle_id); + blink::mojom::ServiceWorkerObjectInfoPtr source_info) { + ServiceWorkerHandle* handle = handles_.Lookup(source_info->handle_id); DCHECK(handle); handle->DecrementRefCount(); if (handle->HasNoRefCount()) - handles_.Remove(source_info.handle_id); + handles_.Remove(source_info->handle_id); } void ServiceWorkerDispatcherHost::OnCountFeature(int64_t version_id,
diff --git a/content/browser/service_worker/service_worker_dispatcher_host.h b/content/browser/service_worker/service_worker_dispatcher_host.h index e990504..29ce88d 100644 --- a/content/browser/service_worker/service_worker_dispatcher_host.h +++ b/content/browser/service_worker/service_worker_dispatcher_host.h
@@ -157,7 +157,7 @@ const std::vector<blink::MessagePortChannel>& sent_message_ports, ServiceWorkerProviderHost* sender_provider_host, const StatusCallback& callback); - template <typename SourceInfo> + template <typename SourceInfoPtr> void DispatchExtendableMessageEventInternal( scoped_refptr<ServiceWorkerVersion> worker, const base::string16& message, @@ -165,30 +165,24 @@ const std::vector<blink::MessagePortChannel>& sent_message_ports, const base::Optional<base::TimeDelta>& timeout, const StatusCallback& callback, - const SourceInfo& source_info); - template <typename SourceInfo> + SourceInfoPtr source_info); + template <typename SourceInfoPtr> void DispatchExtendableMessageEventAfterStartWorker( scoped_refptr<ServiceWorkerVersion> worker, const base::string16& message, const url::Origin& source_origin, const std::vector<blink::MessagePortChannel>& sent_message_ports, - const SourceInfo& source_info, + SourceInfoPtr source_info, const base::Optional<base::TimeDelta>& timeout, const StatusCallback& callback); - template <typename SourceInfo> + template <typename SourceInfoPtr> void DidFailToDispatchExtendableMessageEvent( const std::vector<blink::MessagePortChannel>& sent_message_ports, - const SourceInfo& source_info, + SourceInfoPtr source_info, const StatusCallback& callback, ServiceWorkerStatusCode status); - bool IsValidSourceInfo( - const blink::mojom::ServiceWorkerClientInfo& source_info) const; - bool IsValidSourceInfo( - const blink::mojom::ServiceWorkerObjectInfo& source_info) const; - void ReleaseSourceInfo( - const blink::mojom::ServiceWorkerClientInfo& source_info); - void ReleaseSourceInfo( - const blink::mojom::ServiceWorkerObjectInfo& source_info); + void ReleaseSourceInfo(blink::mojom::ServiceWorkerClientInfoPtr source_info); + void ReleaseSourceInfo(blink::mojom::ServiceWorkerObjectInfoPtr source_info); ServiceWorkerContextCore* GetContext();
diff --git a/content/browser/service_worker/service_worker_dispatcher_host_unittest.cc b/content/browser/service_worker/service_worker_dispatcher_host_unittest.cc index 7d9911b..862feaf 100644 --- a/content/browser/service_worker/service_worker_dispatcher_host_unittest.cc +++ b/content/browser/service_worker/service_worker_dispatcher_host_unittest.cc
@@ -270,73 +270,65 @@ }; TEST_F(ServiceWorkerDispatcherHostTest, ProviderCreatedAndDestroyed) { - // |kProviderId| must be -2 when PlzNavigate is enabled to match the - // pre-created provider host. Otherwise |kProviderId| is just a dummy value. - const int kProviderId = (IsBrowserSideNavigationEnabled() ? -2 : 1001); int process_id = helper_->mock_render_process_id(); - // Setup ServiceWorkerProviderHostInfo. - ServiceWorkerProviderHostInfo host_info_1( - kProviderId, 1 /* route_id */, - blink::mojom::ServiceWorkerProviderType::kForWindow, - true /* is_parent_frame_secure */); - ServiceWorkerProviderHostInfo host_info_2( - kProviderId, 1 /* route_id */, - blink::mojom::ServiceWorkerProviderType::kForWindow, - true /* is_parent_frame_secure */); - ServiceWorkerProviderHostInfo host_info_3( - kProviderId, 1 /* route_id */, - blink::mojom::ServiceWorkerProviderType::kForWindow, - true /* is_parent_frame_secure */); - RemoteProviderInfo remote_info_1 = SetupProviderHostInfoPtrs(&host_info_1); - RemoteProviderInfo remote_info_2 = SetupProviderHostInfoPtrs(&host_info_2); - RemoteProviderInfo remote_info_3 = SetupProviderHostInfoPtrs(&host_info_3); - - // PlzNavigate std::unique_ptr<ServiceWorkerNavigationHandleCore> navigation_handle_core; - if (IsBrowserSideNavigationEnabled()) { - navigation_handle_core = - CreateNavigationHandleCore(helper_->context_wrapper()); - ASSERT_TRUE(navigation_handle_core); - // ProviderHost should be created before OnProviderCreated. - navigation_handle_core->DidPreCreateProviderHost( - ServiceWorkerProviderHost::PreCreateNavigationHost( - context()->AsWeakPtr(), true /* are_ancestors_secure */, - base::Callback<WebContents*(void)>())); - } + + // Prepare the first navigation handle to create provider host. + const int kProviderId1 = -2; + navigation_handle_core = + CreateNavigationHandleCore(helper_->context_wrapper()); + ASSERT_TRUE(navigation_handle_core); + std::unique_ptr<ServiceWorkerProviderHost> host1 = + ServiceWorkerProviderHost::PreCreateNavigationHost( + context()->AsWeakPtr(), true /* are_ancestors_secure */, + base::RepeatingCallback<WebContents*(void)>()); + EXPECT_EQ(kProviderId1, host1->provider_id()); + ServiceWorkerProviderHostInfo host_info_1( + host1->provider_id(), 1 /* route_id */, host1->provider_type(), + host1->is_parent_frame_secure()); + ServiceWorkerProviderHostInfo host_info_1_copy( + host1->provider_id(), 1 /* route_id */, host1->provider_type(), + host1->is_parent_frame_secure()); + RemoteProviderInfo remote_info_1 = SetupProviderHostInfoPtrs(&host_info_1); + navigation_handle_core->DidPreCreateProviderHost(std::move(host1)); dispatcher_host_->OnProviderCreated(std::move(host_info_1)); - EXPECT_TRUE(context()->GetProviderHost(process_id, kProviderId)); + EXPECT_TRUE(context()->GetProviderHost(process_id, kProviderId1)); // Two with the same ID should be seen as a bad message. - dispatcher_host_->OnProviderCreated(std::move(host_info_2)); + dispatcher_host_->OnProviderCreated(std::move(host_info_1_copy)); EXPECT_EQ(1, dispatcher_host_->bad_messages_received_count_); // Releasing the interface pointer destroys the counterpart. remote_info_1.host_ptr.reset(); base::RunLoop().RunUntilIdle(); - EXPECT_FALSE(context()->GetProviderHost(process_id, kProviderId)); + EXPECT_FALSE(context()->GetProviderHost(process_id, kProviderId1)); - // PlzNavigate // Prepare another navigation handle to create another provider host. - if (IsBrowserSideNavigationEnabled()) { - navigation_handle_core = - CreateNavigationHandleCore(helper_->context_wrapper()); - ASSERT_TRUE(navigation_handle_core); - // ProviderHost should be created before OnProviderCreated. - navigation_handle_core->DidPreCreateProviderHost( - ServiceWorkerProviderHost::PreCreateNavigationHost( - context()->AsWeakPtr(), true /* are_ancestors_secure */, - base::Callback<WebContents*(void)>())); - } + const int kProviderId2 = -3; + navigation_handle_core = + CreateNavigationHandleCore(helper_->context_wrapper()); + ASSERT_TRUE(navigation_handle_core); + // ProviderHost should be created before OnProviderCreated. + std::unique_ptr<ServiceWorkerProviderHost> host2 = + ServiceWorkerProviderHost::PreCreateNavigationHost( + context()->AsWeakPtr(), true /* are_ancestors_secure */, + base::RepeatingCallback<WebContents*(void)>()); + EXPECT_EQ(kProviderId2, host2->provider_id()); + ServiceWorkerProviderHostInfo host_info_2( + host2->provider_id(), 2 /* route_id */, host2->provider_type(), + host2->is_parent_frame_secure()); + RemoteProviderInfo remote_info_2 = SetupProviderHostInfoPtrs(&host_info_2); + navigation_handle_core->DidPreCreateProviderHost(std::move(host2)); // Deletion of the dispatcher_host should cause providers for that // process to get deleted as well. - dispatcher_host_->OnProviderCreated(std::move(host_info_3)); - EXPECT_TRUE(context()->GetProviderHost(process_id, kProviderId)); + dispatcher_host_->OnProviderCreated(std::move(host_info_2)); + EXPECT_TRUE(context()->GetProviderHost(process_id, kProviderId2)); EXPECT_TRUE(dispatcher_host_->HasOneRef()); dispatcher_host_ = nullptr; - EXPECT_FALSE(context()->GetProviderHost(process_id, kProviderId)); + EXPECT_FALSE(context()->GetProviderHost(process_id, kProviderId2)); } TEST_F(ServiceWorkerDispatcherHostTest, CleanupOnRendererCrash) {
diff --git a/content/browser/service_worker/service_worker_handle.cc b/content/browser/service_worker/service_worker_handle.cc index b54e3a1..8be8695 100644 --- a/content/browser/service_worker/service_worker_handle.cc +++ b/content/browser/service_worker/service_worker_handle.cc
@@ -18,22 +18,34 @@ base::WeakPtr<ServiceWorkerContextCore> context, base::WeakPtr<ServiceWorkerProviderHost> provider_host, ServiceWorkerVersion* version) { + const int handle_id = context.get() + ? context->GetNewServiceWorkerHandleId() + : blink::mojom::kInvalidServiceWorkerHandleId; + return CreateWithID(context, provider_host, version, handle_id); +} + +std::unique_ptr<ServiceWorkerHandle> ServiceWorkerHandle::CreateWithID( + base::WeakPtr<ServiceWorkerContextCore> context, + base::WeakPtr<ServiceWorkerProviderHost> provider_host, + ServiceWorkerVersion* version, + int handle_id) { if (!context || !provider_host || !version) return std::unique_ptr<ServiceWorkerHandle>(); DCHECK(context->GetLiveRegistration(version->registration_id())); return base::WrapUnique( - new ServiceWorkerHandle(context, provider_host, version)); + new ServiceWorkerHandle(context, provider_host, version, handle_id)); } ServiceWorkerHandle::ServiceWorkerHandle( base::WeakPtr<ServiceWorkerContextCore> context, base::WeakPtr<ServiceWorkerProviderHost> provider_host, - ServiceWorkerVersion* version) + ServiceWorkerVersion* version, + int handle_id) : context_(context), provider_host_(provider_host), provider_id_(provider_host ? provider_host->provider_id() : kInvalidServiceWorkerProviderId), - handle_id_(context.get() ? context->GetNewServiceWorkerHandleId() : -1), + handle_id_(handle_id), ref_count_(1), version_(version) { version_->AddListener(this);
diff --git a/content/browser/service_worker/service_worker_handle.h b/content/browser/service_worker/service_worker_handle.h index 0a397105..015935df 100644 --- a/content/browser/service_worker/service_worker_handle.h +++ b/content/browser/service_worker/service_worker_handle.h
@@ -36,10 +36,17 @@ base::WeakPtr<ServiceWorkerContextCore> context, base::WeakPtr<ServiceWorkerProviderHost> provider_host, ServiceWorkerVersion* version); + // Does the same, but with a specific |handle_id|. + static std::unique_ptr<ServiceWorkerHandle> CreateWithID( + base::WeakPtr<ServiceWorkerContextCore> context, + base::WeakPtr<ServiceWorkerProviderHost> provider_host, + ServiceWorkerVersion* version, + int handle_id); ServiceWorkerHandle(base::WeakPtr<ServiceWorkerContextCore> context, base::WeakPtr<ServiceWorkerProviderHost> provider_host, - ServiceWorkerVersion* version); + ServiceWorkerVersion* version, + int handle_id); ~ServiceWorkerHandle() override; // ServiceWorkerVersion::Listener overrides.
diff --git a/content/browser/service_worker/service_worker_provider_host.cc b/content/browser/service_worker/service_worker_provider_host.cc index 50ae1fe..16983bf 100644 --- a/content/browser/service_worker/service_worker_provider_host.cc +++ b/content/browser/service_worker/service_worker_provider_host.cc
@@ -24,6 +24,7 @@ #include "content/browser/service_worker/service_worker_handle.h" #include "content/browser/service_worker/service_worker_registration_object_host.h" #include "content/browser/service_worker/service_worker_script_url_loader_factory.h" +#include "content/browser/service_worker/service_worker_type_converters.h" #include "content/browser/service_worker/service_worker_version.h" #include "content/browser/url_loader_factory_getter.h" #include "content/browser/web_contents/web_contents_impl.h" @@ -314,6 +315,19 @@ true /* notify_controllerchange */); } +mojom::ControllerServiceWorkerPtr +ServiceWorkerProviderHost::GetControllerServiceWorkerPtr() { + DCHECK(ServiceWorkerUtils::IsServicificationEnabled()); + DCHECK(controller_); + if (controller_->fetch_handler_existence() == + ServiceWorkerVersion::FetchHandlerExistence::DOES_NOT_EXIST) { + return nullptr; + } + mojom::ControllerServiceWorkerPtr controller_ptr; + controller_->controller()->Clone(mojo::MakeRequest(&controller_ptr)); + return controller_ptr; +} + void ServiceWorkerProviderHost::SetDocumentUrl(const GURL& url) { DCHECK(!url.has_ref()); document_url_ = url; @@ -507,9 +521,19 @@ blink::mojom::ServiceWorkerObjectInfoPtr ServiceWorkerProviderHost::GetOrCreateServiceWorkerHandle( ServiceWorkerVersion* version) { - DCHECK(dispatcher_host_); if (!context_ || !version) return blink::mojom::ServiceWorkerObjectInfo::New(); + if (!dispatcher_host_) { + // This is called before the dispatcher host is created. + auto info = blink::mojom::ServiceWorkerObjectInfo::New(); + info->handle_id = context_->GetNewServiceWorkerHandleId(); + info->url = version->script_url(); + info->state = + mojo::ConvertTo<blink::mojom::ServiceWorkerState>(version->status()); + info->version_id = version->version_id(); + precreated_controller_handle_id_ = info->handle_id; + return info; + } ServiceWorkerHandle* handle = dispatcher_host_->FindServiceWorkerHandle( provider_id(), version->version_id()); if (handle) { @@ -682,12 +706,29 @@ for (auto& key_registration : matching_registrations_) IncreaseProcessReference(key_registration.second->pattern()); + if (!controller_) + return; + + if (ServiceWorkerUtils::IsServicificationEnabled()) { + // S13nServiceWorker: register the controller service worker with the + // pre-created handle ID. + DCHECK_NE(blink::mojom::kInvalidServiceWorkerHandleId, + precreated_controller_handle_id_); + std::unique_ptr<ServiceWorkerHandle> new_handle( + ServiceWorkerHandle::CreateWithID(context_, AsWeakPtr(), + controller_.get(), + precreated_controller_handle_id_)); + dispatcher_host_->RegisterServiceWorkerHandle(std::move(new_handle)); + } + // Now that there is a connection with the renderer-side provider, // send it the SetController IPC. - if (controller_) { - SendSetControllerServiceWorker(controller_.get(), - false /* notify_controllerchange */); - } + // (In S13nServiceWorker case the controller is already sent in navigation + // commit, but we still need this for S13nServiceWorker case for setting the + // use counter correctly.) + // TODO(kinuko): Stop doing this in S13nServiceWorker case. + SendSetControllerServiceWorker(controller_.get(), + false /* notify_controllerchange */); } mojom::ServiceWorkerProviderInfoForStartWorkerPtr @@ -869,8 +910,17 @@ used_features.push_back(static_cast<blink::mojom::WebFeature>(feature)); } } - container_->SetController(GetOrCreateServiceWorkerHandle(version), - used_features, notify_controllerchange); + + auto controller_info = mojom::ControllerServiceWorkerInfo::New(); + controller_info->object_info = GetOrCreateServiceWorkerHandle(version); + + // S13nServiceWorker: Send the controller ptr too so that controller changes/ + // lost are propagated with the new controller ptr. + if (version && ServiceWorkerUtils::IsServicificationEnabled()) + controller_info->endpoint = GetControllerServiceWorkerPtr().PassInterface(); + + container_->SetController(std::move(controller_info), used_features, + notify_controllerchange); } void ServiceWorkerProviderHost::Register( @@ -1111,10 +1161,8 @@ return; // TODO(kinuko): Call version_->StartWorker() here if the service - // is stopped. Currently it should be starting or running at this point. + // is not starting or running. https://crbug.com/797222 DCHECK(ServiceWorkerUtils::IsServicificationEnabled()); - DCHECK(controller_->running_status() == EmbeddedWorkerStatus::STARTING || - controller_->running_status() == EmbeddedWorkerStatus::RUNNING); controller_->controller()->Clone(std::move(controller_request)); }
diff --git a/content/browser/service_worker/service_worker_provider_host.h b/content/browser/service_worker/service_worker_provider_host.h index dbfca789..c6d23c0 100644 --- a/content/browser/service_worker/service_worker_provider_host.h +++ b/content/browser/service_worker/service_worker_provider_host.h
@@ -206,6 +206,28 @@ return running_hosted_version_.get(); } + // S13nServiceWorker: + // For service worker clients. Similar to GetControllerServiceWorker, but this + // returns a bound Mojo ptr which is supposed to be sent to clients. The + // controller ptr passed to the clients will be used to intercept requests + // from them. + // It is invalid to call this when controller_ is null. + // + // This method can be called in one of the following cases: + // + // - During navigation, right after a request handler for the main resource + // has found the matching registration and has started the worker. + // - When a controller is updated by SetControllerVersionAttribute() (e.g. + // by OnSkippedWaiting, {Dis,}AssociateRegistration, NotifyControllerLost + // or ClaimedByRegistration). In some cases the controller worker may not + // be started yet. + // + // This may return nullptr if the controller service worker does not have a + // fetch handler, i.e. when the renderer does not need the controller ptr. + // TODO(kinuko): revisit this if we start to use the ControllerServiceWorker + // for posting messages. + mojom::ControllerServiceWorkerPtr GetControllerServiceWorkerPtr(); + // Sets the |document_url_|. When this object is for a client, // |matching_registrations_| gets also updated to ensure that |document_url_| // is in scope of all |matching_registrations_|. @@ -576,6 +598,13 @@ std::vector<base::Closure> queued_events_; + // S13nServiceWorker: + // A service worker handle ID for the controller service worker that is + // pre-created before the renderer process (and therefore the dispatcher host) + // is created. + int precreated_controller_handle_id_ = + blink::mojom::kInvalidServiceWorkerHandleId; + // For provider hosts that are hosting a running service worker. mojo::Binding<service_manager::mojom::InterfaceProvider> interface_provider_binding_;
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 06deddd8..296ddda0 100644 --- a/content/browser/service_worker/service_worker_provider_host_unittest.cc +++ b/content/browser/service_worker/service_worker_provider_host_unittest.cc
@@ -507,7 +507,7 @@ ~MockServiceWorkerContainer() override = default; - void SetController(blink::mojom::ServiceWorkerObjectInfoPtr controller, + void SetController(mojom::ControllerServiceWorkerInfoPtr controller_info, const std::vector<blink::mojom::WebFeature>& used_features, bool should_notify_controllerchange) override { was_set_controller_called_ = true;
diff --git a/content/browser/service_worker/service_worker_request_handler.cc b/content/browser/service_worker/service_worker_request_handler.cc index 0809bf9..c07641dc 100644 --- a/content/browser/service_worker/service_worker_request_handler.cc +++ b/content/browser/service_worker/service_worker_request_handler.cc
@@ -26,6 +26,7 @@ #include "content/public/common/origin_util.h" #include "content/public/common/resource_request_body.h" #include "content/public/common/service_worker_modes.h" +#include "content/public/common/url_constants.h" #include "ipc/ipc_message.h" #include "net/base/url_util.h" #include "net/url_request/url_request.h" @@ -58,6 +59,14 @@ DISALLOW_COPY_AND_ASSIGN(ServiceWorkerRequestInterceptor); }; +bool SchemeMaySupportRedirectingToHTTPS(const GURL& url) { +#if defined(OS_CHROMEOS) + return url.SchemeIs(kExternalFileScheme); +#else // OS_CHROMEOS + return false; +#endif // OS_CHROMEOS +} + } // namespace // static @@ -86,7 +95,8 @@ // Create the handler even for insecure HTTP since it's used in the // case of redirect to HTTPS. if (!request->url().SchemeIsHTTPOrHTTPS() && - !OriginCanAccessServiceWorkers(request->url())) { + !OriginCanAccessServiceWorkers(request->url()) && + !SchemeMaySupportRedirectingToHTTPS(request->url())) { return; }
diff --git a/content/browser/service_worker/service_worker_request_handler_unittest.cc b/content/browser/service_worker/service_worker_request_handler_unittest.cc index 8b91e066..d866789 100644 --- a/content/browser/service_worker/service_worker_request_handler_unittest.cc +++ b/content/browser/service_worker/service_worker_request_handler_unittest.cc
@@ -10,6 +10,7 @@ #include "content/browser/service_worker/embedded_worker_test_helper.h" #include "content/browser/service_worker/service_worker_context_core.h" #include "content/browser/service_worker/service_worker_context_wrapper.h" +#include "content/browser/service_worker/service_worker_navigation_handle_core.h" #include "content/browser/service_worker/service_worker_provider_host.h" #include "content/browser/service_worker/service_worker_test_utils.h" #include "content/common/service_worker/service_worker_utils.h" @@ -37,7 +38,17 @@ void SetUp() override { helper_.reset(new EmbeddedWorkerTestHelper(base::FilePath())); + } + void TearDown() override { helper_.reset(); } + + ServiceWorkerContextCore* context() const { return helper_->context(); } + ServiceWorkerContextWrapper* context_wrapper() const { + return helper_->context_wrapper(); + } + + protected: + void InitializeProviderHostForWindow() { // An empty host. std::unique_ptr<ServiceWorkerProviderHost> host = CreateProviderHostForWindow(helper_->mock_render_process_id(), @@ -48,13 +59,25 @@ context()->AddProviderHost(std::move(host)); } - void TearDown() override { - helper_.reset(); - } - - ServiceWorkerContextCore* context() const { return helper_->context(); } - ServiceWorkerContextWrapper* context_wrapper() const { - return helper_->context_wrapper(); + static std::unique_ptr<ServiceWorkerNavigationHandleCore> + CreateNavigationHandleCore(ServiceWorkerContextWrapper* context_wrapper) { + std::unique_ptr<ServiceWorkerNavigationHandleCore> navigation_handle_core; + BrowserThread::PostTaskAndReplyWithResult( + BrowserThread::UI, FROM_HERE, + base::BindOnce( + [](ServiceWorkerContextWrapper* wrapper) { + return std::make_unique<ServiceWorkerNavigationHandleCore>( + nullptr, wrapper); + }, + base::RetainedRef(context_wrapper)), + base::BindOnce( + [](std::unique_ptr<ServiceWorkerNavigationHandleCore>* dest, + std::unique_ptr<ServiceWorkerNavigationHandleCore> src) { + *dest = std::move(src); + }, + &navigation_handle_core)); + base::RunLoop().RunUntilIdle(); + return navigation_handle_core; } std::unique_ptr<net::URLRequest> CreateRequest(const std::string& url, @@ -95,6 +118,7 @@ const std::string& method, bool skip_service_worker, ResourceType resource_type) { + InitializeProviderHostForWindow(); std::unique_ptr<net::URLRequest> request = CreateRequest(url, method); InitializeHandler(request.get(), skip_service_worker, resource_type); ASSERT_TRUE(GetHandler(request.get())); @@ -102,7 +126,20 @@ EXPECT_EQ(url, provider_host_->document_url().spec()); } - protected: + void InitializeHandlerForNavigationSimpleTest(const std::string& url, + bool expected_handler_created) { + std::unique_ptr<ServiceWorkerNavigationHandleCore> navigation_handle_core = + CreateNavigationHandleCore(helper_->context_wrapper()); + std::unique_ptr<net::URLRequest> request = CreateRequest(url, "GET"); + ServiceWorkerRequestHandler::InitializeForNavigation( + request.get(), navigation_handle_core.get(), &blob_storage_context_, + false /* skip_service_worker */, RESOURCE_TYPE_MAIN_FRAME, + REQUEST_CONTEXT_TYPE_HYPERLINK, + network::mojom::RequestContextFrameType::kTopLevel, true, + nullptr /* body */, base::RepeatingCallback<WebContents*(void)>()); + EXPECT_EQ(expected_handler_created, !!GetHandler(request.get())); + } + TestBrowserThreadBundle browser_thread_bundle_; std::unique_ptr<EmbeddedWorkerTestHelper> helper_; base::WeakPtr<ServiceWorkerProviderHost> provider_host_; @@ -113,6 +150,7 @@ }; TEST_F(ServiceWorkerRequestHandlerTest, InitializeHandler_FTP) { + InitializeProviderHostForWindow(); std::unique_ptr<net::URLRequest> request = CreateRequest("ftp://host/scope/doc", "GET"); InitializeHandler(request.get(), false, RESOURCE_TYPE_MAIN_FRAME); @@ -156,6 +194,7 @@ } TEST_F(ServiceWorkerRequestHandlerTest, InitializeHandler_IMAGE) { + InitializeProviderHostForWindow(); // Check provider host's URL after initializing a handler for an image. provider_host_->SetDocumentUrl(GURL("https://host/scope/doc")); std::unique_ptr<net::URLRequest> request = @@ -165,5 +204,27 @@ EXPECT_EQ(GURL("https://host/scope/doc"), provider_host_->document_url()); } +TEST_F(ServiceWorkerRequestHandlerTest, InitializeForNavigation_HTTP) { + InitializeHandlerForNavigationSimpleTest("http://host/scope/doc", true); +} + +TEST_F(ServiceWorkerRequestHandlerTest, InitializeForNavigation_HTTPS) { + InitializeHandlerForNavigationSimpleTest("https://host/scope/doc", true); +} + +TEST_F(ServiceWorkerRequestHandlerTest, InitializeForNavigation_FTP) { + InitializeHandlerForNavigationSimpleTest("ftp://host/scope/doc", false); +} + +TEST_F(ServiceWorkerRequestHandlerTest, + InitializeForNavigation_ExternalFileScheme) { + bool expected_handler_created = false; +#if defined(OS_CHROMEOS) + expected_handler_created = true; +#endif // OS_CHROMEOS + InitializeHandlerForNavigationSimpleTest("externalfile:drive/doc", + expected_handler_created); +} + } // namespace service_worker_request_handler_unittest } // namespace content
diff --git a/content/browser/service_worker/service_worker_version.cc b/content/browser/service_worker/service_worker_version.cc index 3cfc33c..5b129a5 100644 --- a/content/browser/service_worker/service_worker_version.cc +++ b/content/browser/service_worker/service_worker_version.cc
@@ -1126,22 +1126,23 @@ if (!provider_host || provider_host->document_url().GetOrigin() != script_url_.GetOrigin()) { // The promise will be resolved to 'undefined'. - OnGetClientFinished(request_id, blink::mojom::ServiceWorkerClientInfo()); + OnGetClientFinished(request_id, + blink::mojom::ServiceWorkerClientInfo::New()); return; } service_worker_client_utils::GetClient( - provider_host, base::Bind(&ServiceWorkerVersion::OnGetClientFinished, - weak_factory_.GetWeakPtr(), request_id)); + provider_host, base::BindOnce(&ServiceWorkerVersion::OnGetClientFinished, + weak_factory_.GetWeakPtr(), request_id)); } void ServiceWorkerVersion::OnGetClientFinished( int request_id, - const blink::mojom::ServiceWorkerClientInfo& client_info) { + blink::mojom::ServiceWorkerClientInfoPtr client_info) { DCHECK_CURRENTLY_ON(BrowserThread::IO); TRACE_EVENT_ASYNC_END1( "ServiceWorker", "ServiceWorkerVersion::OnGetClient", request_id, "client_type", - ServiceWorkerUtils::ClientTypeToString(client_info.client_type)); + ServiceWorkerUtils::ClientTypeToString(client_info->client_type)); // When Clients.get() is called on the script evaluation phase, the running // status can be STARTING here. @@ -1151,7 +1152,7 @@ } embedded_worker_->SendIpcMessage( - ServiceWorkerMsg_DidGetClient(request_id, client_info)); + ServiceWorkerMsg_DidGetClient(request_id, *client_info)); } void ServiceWorkerVersion::OnSimpleEventFinished( @@ -1540,7 +1541,12 @@ binding_.Close(); binding_.Bind(mojo::MakeRequest(¶ms->service_worker_host)); - params->controller_request = mojo::MakeRequest(&controller_ptr_); + // S13nServiceWorker: + if (!controller_request_.is_pending()) { + DCHECK(!controller_ptr_.is_bound()); + controller_request_ = mojo::MakeRequest(&controller_ptr_); + } + params->controller_request = std::move(controller_request_); embedded_worker_->Start( std::move(params), @@ -1963,6 +1969,7 @@ external_request_uuid_to_request_id_.clear(); event_dispatcher_.reset(); controller_ptr_.reset(); + DCHECK(!controller_request_.is_pending()); installed_scripts_sender_.reset(); binding_.Close();
diff --git a/content/browser/service_worker/service_worker_version.h b/content/browser/service_worker/service_worker_version.h index 5d0358a..c94a03f0 100644 --- a/content/browser/service_worker/service_worker_version.h +++ b/content/browser/service_worker/service_worker_version.h
@@ -328,10 +328,18 @@ return event_dispatcher_.get(); } - // This must be called when the worker is running. - // Returns the 'controller' interface of this worker. + // S13nServiceWorker: + // Returns the 'controller' interface ptr of this worker. It is expected + // that the worker is already starting or running, or is going to be started + // soon. + // TODO(kinuko): Relying on the callsites to start the worker when it's + // not running is a bit sketchy, maybe this should queue a task to check + // if the pending request is pending too long? https://crbug.com/797222 mojom::ControllerServiceWorker* controller() { - DCHECK(controller_ptr_.is_bound()); + if (!controller_ptr_.is_bound()) { + DCHECK(!controller_request_.is_pending()); + controller_request_ = mojo::MakeRequest(&controller_ptr_); + } return controller_ptr_.get(); } @@ -686,7 +694,7 @@ void OnGetClientFinished( int request_id, - const blink::mojom::ServiceWorkerClientInfo& client_info); + blink::mojom::ServiceWorkerClientInfoPtr client_info); void OnGetClientsFinished(GetClientsCallback callback, std::unique_ptr<ServiceWorkerClientPtrs> clients); @@ -779,7 +787,13 @@ // Connected to ServiceWorkerContextClient while the worker is running. mojom::ServiceWorkerEventDispatcherPtr event_dispatcher_; + + // S13nServiceWorker: connected to the controller service worker. + // |controller_request_| is non-null only when the |controller_ptr_| is + // requested before the worker is started, it is passed to the worker (and + // becomes null) once it's started. mojom::ControllerServiceWorkerPtr controller_ptr_; + mojom::ControllerServiceWorkerRequest controller_request_; std::unique_ptr<ServiceWorkerInstalledScriptsSender> installed_scripts_sender_;
diff --git a/content/browser/site_per_process_browsertest.cc b/content/browser/site_per_process_browsertest.cc index 2e11cec..93d6aff 100644 --- a/content/browser/site_per_process_browsertest.cc +++ b/content/browser/site_per_process_browsertest.cc
@@ -38,6 +38,7 @@ #include "build/build_config.h" #include "cc/input/touch_action.h" #include "components/network_session_configurator/common/network_switches.h" +#include "content/browser/child_process_security_policy_impl.h" #include "content/browser/frame_host/cross_process_frame_connector.h" #include "content/browser/frame_host/frame_navigation_entry.h" #include "content/browser/frame_host/frame_tree.h" @@ -127,7 +128,6 @@ #include "base/android/jni_android.h" #include "base/android/jni_string.h" #include "base/android/scoped_java_ref.h" -#include "base/json/json_reader.h" #include "content/browser/android/ime_adapter_android.h" #include "content/browser/renderer_host/input/touch_selection_controller_client_manager_android.h" #include "content/browser/renderer_host/render_widget_host_view_android.h" @@ -1953,9 +1953,9 @@ RenderFrameHostImpl* child_frame_b = root->child_at(0)->current_frame_host(); RenderFrameHostImpl* child_frame_c = root->child_at(0)->child_at(0)->current_frame_host(); - RenderWidgetHostView *main_frame_rwhv = main_frame->GetView(), - *child_frame_b_rwhv = child_frame_b->GetView(), - *child_frame_c_rwhv = child_frame_c->GetView(); + RenderWidgetHostView* main_frame_rwhv = main_frame->GetView(); + RenderWidgetHostView* child_frame_b_rwhv = child_frame_b->GetView(); + RenderWidgetHostView* child_frame_c_rwhv = child_frame_c->GetView(); // Wait until <iframe> 'b' is not visible (in main frame). while (main_frame_rwhv->GetViewBounds().Intersects( @@ -13029,4 +13029,62 @@ } } +// Test that a renderer locked to origin A will be killed if it tries to commit +// a navigation to origin B. See also https://crbug.com/770239. +IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, + CommittedOriginIncompatibleWithOriginLock) { + GURL start_url(embedded_test_server()->GetURL("a.com", "/title1.html")); + EXPECT_TRUE(NavigateToURL(shell(), start_url)); + FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) + ->GetFrameTree() + ->root(); + + // Setup an URL which will never commit, allowing this test to send its own, + // malformed, commit message. + GURL another_url(embedded_test_server()->GetURL("b.com", "/hung")); + + // Use LoadURL, as the test shouldn't wait for navigation commit. + NavigationController& controller = shell()->web_contents()->GetController(); + controller.LoadURL(another_url, Referrer(), ui::PAGE_TRANSITION_LINK, + std::string()); + EXPECT_NE(nullptr, controller.GetPendingEntry()); + EXPECT_EQ(another_url, controller.GetPendingEntry()->GetURL()); + + RenderProcessHostKillWaiter kill_waiter( + root->current_frame_host()->GetProcess()); + + // Create commit params with a different origin than the origin lock + // of the process. + std::unique_ptr<FrameHostMsg_DidCommitProvisionalLoad_Params> params = + std::make_unique<FrameHostMsg_DidCommitProvisionalLoad_Params>(); + params->nav_entry_id = 0; + params->did_create_new_entry = false; + params->url = another_url; + params->transition = ui::PAGE_TRANSITION_LINK; + params->should_update_history = false; + params->gesture = NavigationGestureAuto; + params->was_within_same_document = false; + params->method = "GET"; + params->page_state = PageState::CreateFromURL(another_url); + // Use an origin mismatched with the origin lock. + params->origin = url::Origin::Create(another_url); + auto* policy = ChildProcessSecurityPolicyImpl::GetInstance(); + int process_id = root->current_frame_host()->GetProcess()->GetID(); + EXPECT_EQ(start_url.host(), policy->GetOriginLock(process_id).host()); + EXPECT_NE(another_url.host(), policy->GetOriginLock(process_id).host()); + // Simulate a commit IPC. + service_manager::mojom::InterfaceProviderPtr interface_provider; + static_cast<mojom::FrameHost*>(root->current_frame_host()) + ->DidCommitProvisionalLoad(std::move(params), + mojo::MakeRequest(&interface_provider)); + + // When the IPC message is received and validation fails, the process is + // terminated. However, the notification for that should be processed in a + // separate task of the message loop, so ensure that the process is still + // considered alive. + EXPECT_TRUE(root->current_frame_host()->GetProcess()->HasConnection()); + + EXPECT_EQ(bad_message::RFH_INVALID_ORIGIN_ON_COMMIT, kill_waiter.Wait()); +} + } // namespace content
diff --git a/content/browser/web_contents/web_contents_impl_unittest.cc b/content/browser/web_contents/web_contents_impl_unittest.cc index 4e3c31a..ae56adf 100644 --- a/content/browser/web_contents/web_contents_impl_unittest.cc +++ b/content/browser/web_contents/web_contents_impl_unittest.cc
@@ -1755,7 +1755,7 @@ TEST_F(WebContentsImplTest, ShowInterstitialFromBrowserNewNavigationProceed) { // Navigate to a page. - GURL url1("http://www.google.com"); + GURL url1("http://www.thepage.com/one"); NavigationSimulator::NavigateAndCommitFromDocument(url1, main_test_rfh()); EXPECT_EQ(1, controller().GetEntryCount()); @@ -1797,7 +1797,7 @@ // Simulate the navigation to the page, that's when the interstitial gets // hidden. - GURL url3("http://www.thepage.com"); + GURL url3("http://www.thepage.com/two"); main_test_rfh()->PrepareForCommit(); main_test_rfh()->SendNavigate(0, true, url3); @@ -2241,7 +2241,7 @@ // Test showing an interstitial while another interstitial is already showing. TEST_F(WebContentsImplTest, ShowInterstitialOnInterstitial) { // Navigate to a page so we have a navigation entry in the controller. - GURL start_url("http://www.google.com"); + GURL start_url("http://www.thepage.com/one"); NavigationSimulator::NavigateAndCommitFromDocument(start_url, main_test_rfh()); EXPECT_EQ(1, controller().GetEntryCount()); @@ -2280,7 +2280,7 @@ // Let's make sure interstitial2 is working as intended. interstitial2->Proceed(); - GURL landing_url("http://www.thepage.com"); + GURL landing_url("http://www.thepage.com/two"); main_test_rfh()->SendNavigate(0, true, landing_url); EXPECT_FALSE(contents()->ShowingInterstitialPage()); @@ -2297,7 +2297,7 @@ // interstitial. TEST_F(WebContentsImplTest, ShowInterstitialProceedShowInterstitial) { // Navigate to a page so we have a navigation entry in the controller. - GURL start_url("http://www.google.com"); + GURL start_url("http://www.thepage.com/one"); NavigationSimulator::NavigateAndCommitFromDocument(start_url, main_test_rfh()); EXPECT_EQ(1, controller().GetEntryCount()); @@ -2340,7 +2340,7 @@ // Let's make sure interstitial2 is working as intended. interstitial2->Proceed(); - GURL landing_url("http://www.thepage.com"); + GURL landing_url("http://www.thepage.com/two"); main_test_rfh()->SendNavigate(0, true, landing_url); RunAllPendingInMessageLoop(); @@ -3241,9 +3241,9 @@ // TODO(fdegans): Rewrite the test for PlzNavigate when DidStartLoading and // DidStopLoading are properly called. TEST_F(WebContentsImplTest, NoEarlyStop) { - const GURL kUrl1("http://www.chromium.org"); + const GURL kUrl1("http://www.chromium.org/one"); const GURL kUrl2("http://www.google.com"); - const GURL kUrl3("http://www.wikipedia.org"); + const GURL kUrl3("http://www.chromium.org/two"); contents()->NavigateAndCommit(kUrl1);
diff --git a/content/browser/webrtc/webrtc_stress_pause_browsertest.cc b/content/browser/webrtc/webrtc_stress_pause_browsertest.cc index e95a00a..11e9a25 100644 --- a/content/browser/webrtc/webrtc_stress_pause_browsertest.cc +++ b/content/browser/webrtc/webrtc_stress_pause_browsertest.cc
@@ -21,7 +21,7 @@ static const int kTestDurationSecs = 2; static const int kNumPeerConnections = 3; #else -static const int kTestDurationSecs = 10; +static const int kTestDurationSecs = 60; static const int kNumPeerConnections = 10; #endif } // namespace
diff --git a/content/browser/webrtc/webrtc_stress_resolution_switch_browsertest.cc b/content/browser/webrtc/webrtc_stress_resolution_switch_browsertest.cc index 1494d11..2de69e8e 100644 --- a/content/browser/webrtc/webrtc_stress_resolution_switch_browsertest.cc +++ b/content/browser/webrtc/webrtc_stress_resolution_switch_browsertest.cc
@@ -21,7 +21,7 @@ static const int kTestDurationSecs = 2; static const int kNumPeerConnections = 3; #else -static const int kTestDurationSecs = 10; +static const int kTestDurationSecs = 60; static const int kNumPeerConnections = 5; #endif } // namespace
diff --git a/content/browser/webrtc/webrtc_stress_source_switch_browsertest.cc b/content/browser/webrtc/webrtc_stress_source_switch_browsertest.cc index 0924d9e..7170c690 100644 --- a/content/browser/webrtc/webrtc_stress_source_switch_browsertest.cc +++ b/content/browser/webrtc/webrtc_stress_source_switch_browsertest.cc
@@ -21,9 +21,7 @@ static const int kTestDurationSecs = 2; static const int kNumPeerConnections = 3; #else -// We would like to run this for 10 seconds, but it produces too much INFO logs -// which fails the test. -static const int kTestDurationSecs = 10; +static const int kTestDurationSecs = 60; static const int kNumPeerConnections = 5; #endif } // namespace
diff --git a/content/browser/zygote_host/OWNERS b/content/browser/zygote_host/OWNERS index 75b96d59..50e496a 100644 --- a/content/browser/zygote_host/OWNERS +++ b/content/browser/zygote_host/OWNERS
@@ -1,6 +1,7 @@ jln@chromium.org -mdempsky@chromium.org -rickyz@chromium.org +kerrnel@chromium.org +rsesek@chromium.org +tsepez@chromium.org # TEAM: security-dev@chromium.org # COMPONENT: Internals>Sandbox
diff --git a/content/common/frame.mojom b/content/common/frame.mojom index 579b9ab..1e49d53b 100644 --- a/content/common/frame.mojom +++ b/content/common/frame.mojom
@@ -5,6 +5,7 @@ module content.mojom; import "content/common/navigation_params.mojom"; +import "content/common/service_worker/controller_service_worker.mojom"; import "content/common/url_loader_factory_bundle.mojom"; import "content/public/common/resource_type.mojom"; import "content/public/common/url_loader.mojom"; @@ -61,6 +62,10 @@ // also be provided by the browser as a a means for the renderer to load // subresources where applicable. // + // When S13nServiceWorker is enabled, |controller_service_worker_info| may + // also be provided by the browser if the frame that is being navigated + // is supposed to be controlled by a Service Worker. + // // For automation driver-initiated navigations over the devtools protocol, // |devtools_navigation_token_| is used to tag the navigation. This navigation // token is then sent into the renderer and lands on the DocumentLoader. That @@ -78,6 +83,7 @@ RequestNavigationParams request_params, URLLoaderClientEndpoints? url_loader_client_endpoints, URLLoaderFactoryBundle? subresource_loader_factories, + ControllerServiceWorkerInfo? controller_service_worker_info, mojo.common.mojom.UnguessableToken devtools_navigation_token); // Tells the renderer that a failed navigation is ready to commit.
diff --git a/content/common/navigation_subresource_loader_params.cc b/content/common/navigation_subresource_loader_params.cc index 8bf57eb..b465c0f 100644 --- a/content/common/navigation_subresource_loader_params.cc +++ b/content/common/navigation_subresource_loader_params.cc
@@ -11,12 +11,14 @@ SubresourceLoaderParams::SubresourceLoaderParams( SubresourceLoaderParams&& other) { - loader_factory_info = std::move(other.loader_factory_info); + *this = std::move(other); } SubresourceLoaderParams& SubresourceLoaderParams::operator=( SubresourceLoaderParams&& other) { loader_factory_info = std::move(other.loader_factory_info); + controller_service_worker_info = + std::move(other.controller_service_worker_info); return *this; }
diff --git a/content/common/navigation_subresource_loader_params.h b/content/common/navigation_subresource_loader_params.h index cb93106..5fdb07e 100644 --- a/content/common/navigation_subresource_loader_params.h +++ b/content/common/navigation_subresource_loader_params.h
@@ -26,7 +26,9 @@ // subresource loader in the renderer. mojom::URLLoaderFactoryPtrInfo loader_factory_info; - // TODO(kinuko): Add the controller interface ptr for the service worker. + // The controller service worker, non-null if the frame is to be + // controlled by the service worker. + mojom::ControllerServiceWorkerInfoPtr controller_service_worker_info; }; } // namespace content
diff --git a/content/common/service_worker/controller_service_worker.mojom b/content/common/service_worker/controller_service_worker.mojom index 7ca8a53..2fd4b7a8 100644 --- a/content/common/service_worker/controller_service_worker.mojom +++ b/content/common/service_worker/controller_service_worker.mojom
@@ -4,11 +4,12 @@ module content.mojom; -import "mojo/common/time.mojom"; import "content/common/service_worker/service_worker_fetch_response_callback.mojom"; import "content/public/common/url_loader.mojom"; -import "third_party/WebKit/public/platform/modules/fetch/fetch_api_request.mojom"; +import "mojo/common/time.mojom"; import "third_party/WebKit/common/service_worker/service_worker_event_status.mojom"; +import "third_party/WebKit/common/service_worker/service_worker_object.mojom"; +import "third_party/WebKit/public/platform/modules/fetch/fetch_api_request.mojom"; // S13nServiceWorker: // Represents a service worker that is a 'controller'. @@ -45,3 +46,15 @@ // Connects a new pipe to this controller instance. Clone(ControllerServiceWorker& controller); }; + +// A convenient struct that packs necessary information for a service worker +// client to talk to and set up its controller. Used to propagate controller +// information from the browser process to the renderer process on navigation +// commit, and also as a parameter of ServiceWorkerContainer.SetController(). +struct ControllerServiceWorkerInfo { + // S13nServiceWorker: + // Non-null if the controller has fetch event handlers. + ControllerServiceWorker? endpoint; + + blink.mojom.ServiceWorkerObjectInfo object_info; +};
diff --git a/content/common/service_worker/service_worker_container.mojom b/content/common/service_worker/service_worker_container.mojom index b19654c..4ea9971 100644 --- a/content/common/service_worker/service_worker_container.mojom +++ b/content/common/service_worker/service_worker_container.mojom
@@ -85,13 +85,13 @@ // to use this name. interface ServiceWorkerContainer { // Corresponds to setting ServiceWorkerContainer#controller. - // If |controller| is invalid (its |handle_id| is invalid), then + // If |controller_info| is invalid (its |handle_id| is invalid), then // ServiceWorkerContainer#controller is cleared. - // If |controller| is valid, |used_features| is the set of features the - // controller has used, for UseCounter purposes. + // If |controller_info| is valid, |used_features| is the set of + // features the controller has used, for UseCounter purposes. // If |should_notify_controllerchange| is true, dispatch a 'controllerchange' // event. - SetController(blink.mojom.ServiceWorkerObjectInfo controller, + SetController(ControllerServiceWorkerInfo controller_info, array<blink.mojom.WebFeature> used_features, bool should_notify_controllerchange);
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentViewCoreImpl.java b/content/public/android/java/src/org/chromium/content/browser/ContentViewCoreImpl.java index f107e00..33984bb 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ContentViewCoreImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/ContentViewCoreImpl.java
@@ -34,7 +34,6 @@ import org.chromium.base.VisibleForTesting; import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; -import org.chromium.base.annotations.NativeClassQualifiedName; import org.chromium.content.browser.ContentViewCore.InternalAccessDelegate; import org.chromium.content.browser.accessibility.WebContentsAccessibility; import org.chromium.content.browser.accessibility.captioning.CaptioningBridgeFactory; @@ -51,7 +50,6 @@ import org.chromium.content_public.browser.AccessibilitySnapshotCallback; import org.chromium.content_public.browser.AccessibilitySnapshotNode; import org.chromium.content_public.browser.ActionModeCallbackHelper; -import org.chromium.content_public.browser.GestureListenerManager; import org.chromium.content_public.browser.GestureStateListener; import org.chromium.content_public.browser.ImeEventObserver; import org.chromium.content_public.browser.WebContents; @@ -167,7 +165,6 @@ private long mNativeContentViewCore; private boolean mAttachedToWindow; - private GestureListenerManagerImpl mGestureListenerManager; private PopupZoomer mPopupZoomer; private SelectPopup mSelectPopup; @@ -353,13 +350,11 @@ InternalAccessDelegate internalDispatcher, WebContents webContents, WindowAndroid windowAndroid) { mViewAndroidDelegate = viewDelegate; - long windowNativePointer = windowAndroid.getNativePointer(); - assert windowNativePointer != 0; final float dipScale = windowAndroid.getDisplay().getDipScale(); mNativeContentViewCore = - nativeInit(webContents, mViewAndroidDelegate, windowNativePointer, dipScale); + nativeInit(webContents, mViewAndroidDelegate, windowAndroid, dipScale); mWebContents = (WebContentsImpl) nativeGetWebContentsAndroid(mNativeContentViewCore); ViewGroup containerView = viewDelegate.getContainerView(); SelectionPopupControllerImpl controller = SelectionPopupControllerImpl.create( @@ -382,16 +377,13 @@ mShouldRequestUnbufferedDispatch = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && ContentFeatureList.isEnabled(ContentFeatureList.REQUEST_UNBUFFERED_DISPATCH) && !nativeUsingSynchronousCompositing(mNativeContentViewCore); - mGestureListenerManager = - (GestureListenerManagerImpl) GestureListenerManager.fromWebContents(mWebContents); - mGestureListenerManager.addListener(new ContentGestureStateListener()); + getGestureListenerManager().addListener(new ContentGestureStateListener()); } @Override public void updateWindowAndroid(WindowAndroid windowAndroid) { removeDisplayAndroidObserver(); - long windowNativePointer = windowAndroid == null ? 0 : windowAndroid.getNativePointer(); - nativeUpdateWindowAndroid(mNativeContentViewCore, windowNativePointer); + nativeUpdateWindowAndroid(mNativeContentViewCore, windowAndroid); // TODO(yusufo): Rename this call to be general for tab reparenting. // Clean up cached popups that may have been created with an old activity. @@ -449,6 +441,10 @@ return SelectionPopupControllerImpl.fromWebContents(mWebContents); } + private GestureListenerManagerImpl getGestureListenerManager() { + return GestureListenerManagerImpl.fromWebContents(mWebContents); + } + @CalledByNative private void onNativeContentViewCoreDestroyed(long nativeContentViewCore) { assert nativeContentViewCore == mNativeContentViewCore; @@ -705,7 +701,7 @@ private void onTouchDown(MotionEvent event) { if (mShouldRequestUnbufferedDispatch) requestUnbufferedDispatch(event); cancelRequestToScrollFocusedEditableNodeIntoView(); - mGestureListenerManager.updateOnTouchDown(); + getGestureListenerManager().updateOnTouchDown(); } private void updateAfterSizeChanged() { @@ -748,8 +744,10 @@ public void onWindowFocusChanged(boolean hasWindowFocus) { mImeAdapter.onWindowFocusChanged(hasWindowFocus); if (!hasWindowFocus) resetGestureDetection(); - if (isAlive()) getSelectionPopupController().onWindowFocusChanged(hasWindowFocus); - mGestureListenerManager.updateOnWindowFocusChanged(hasWindowFocus); + if (isAlive()) { + getSelectionPopupController().onWindowFocusChanged(hasWindowFocus); + getGestureListenerManager().updateOnWindowFocusChanged(hasWindowFocus); + } } @Override @@ -1028,11 +1026,11 @@ maxPageScaleFactor, topBarShownPix); if (scrollChanged || topBarChanged) { - mGestureListenerManager.updateOnScrollChanged( + getGestureListenerManager().updateOnScrollChanged( computeVerticalScrollOffset(), computeVerticalScrollExtent()); } if (scaleLimitsChanged) { - mGestureListenerManager.updateOnScaleLimitsChanged( + getGestureListenerManager().updateOnScaleLimitsChanged( minPageScaleFactor, maxPageScaleFactor); } @@ -1328,15 +1326,15 @@ mPotentiallyActiveFlingCount = 0; setTouchScrollInProgress(false); - if (touchScrollInProgress) mGestureListenerManager.updateOnScrollEnd(); - if (potentiallyActiveFlingCount > 0) mGestureListenerManager.updateOnFlingEnd(); + if (touchScrollInProgress) getGestureListenerManager().updateOnScrollEnd(); + if (potentiallyActiveFlingCount > 0) getGestureListenerManager().updateOnFlingEnd(); } @CalledByNative private void onNativeFlingStopped() { if (mPotentiallyActiveFlingCount > 0) { mPotentiallyActiveFlingCount--; - mGestureListenerManager.updateOnFlingEnd(); + getGestureListenerManager().updateOnFlingEnd(); } // Note that mTouchScrollInProgress should normally be false at this // point, but we reset it anyway as another failsafe. @@ -1398,93 +1396,44 @@ return mFullscreenRequiredForOrientationLock; } - @NativeClassQualifiedName("ContentViewCore") private native long nativeInit(WebContents webContents, ViewAndroidDelegate viewAndroidDelegate, - long windowAndroidPtr, float dipScale); - @NativeClassQualifiedName("ContentViewCore") + WindowAndroid window, float dipScale); private static native ContentViewCore nativeFromWebContentsAndroid(WebContents webContents); - - @NativeClassQualifiedName("ContentViewCore") - private native void nativeUpdateWindowAndroid( - long nativeContentViewCore, long windowAndroidPtr); - @NativeClassQualifiedName("ContentViewCore") + private native void nativeUpdateWindowAndroid(long nativeContentViewCore, WindowAndroid window); private native WebContents nativeGetWebContentsAndroid(long nativeContentViewCore); - @NativeClassQualifiedName("ContentViewCore") private native WindowAndroid nativeGetJavaWindowAndroid(long nativeContentViewCore); - - @NativeClassQualifiedName("ContentViewCore") private native void nativeOnJavaContentViewCoreDestroyed(long nativeContentViewCore); - - @NativeClassQualifiedName("ContentViewCore") private native void nativeSetFocus(long nativeContentViewCore, boolean focused); - - @NativeClassQualifiedName("ContentViewCore") private native void nativeSetDIPScale(long nativeContentViewCore, float dipScale); - - @NativeClassQualifiedName("ContentViewCore") private native int nativeGetTopControlsShrinkBlinkHeightPixForTesting( long nativeContentViewCore); - - @NativeClassQualifiedName("ContentViewCore") private native void nativeSendOrientationChangeEvent( long nativeContentViewCore, int orientation); - - @NativeClassQualifiedName("ContentViewCore") private native void nativeScrollBegin(long nativeContentViewCore, long timeMs, float x, float y, float hintX, float hintY, boolean targetViewport, boolean fromGamepad); - - @NativeClassQualifiedName("ContentViewCore") private native void nativeScrollEnd(long nativeContentViewCore, long timeMs); - - @NativeClassQualifiedName("ContentViewCore") private native void nativeScrollBy( long nativeContentViewCore, long timeMs, float x, float y, float deltaX, float deltaY); - - @NativeClassQualifiedName("ContentViewCore") private native void nativeFlingStart(long nativeContentViewCore, long timeMs, float x, float y, float vx, float vy, boolean targetViewport, boolean fromGamepad); - - @NativeClassQualifiedName("ContentViewCore") private native void nativeFlingCancel( long nativeContentViewCore, long timeMs, boolean fromGamepad); - - @NativeClassQualifiedName("ContentViewCore") private native void nativeDoubleTap(long nativeContentViewCore, long timeMs, float x, float y); - - @NativeClassQualifiedName("ContentViewCore") private native void nativeSetTextHandlesTemporarilyHidden( long nativeContentViewCore, boolean hidden); - - @NativeClassQualifiedName("ContentViewCore") private native void nativeResetGestureDetection(long nativeContentViewCore); - - @NativeClassQualifiedName("ContentViewCore") private native void nativeSetDoubleTapSupportEnabled( long nativeContentViewCore, boolean enabled); - - @NativeClassQualifiedName("ContentViewCore") private native void nativeSetMultiTouchZoomSupportEnabled( long nativeContentViewCore, boolean enabled); - - @NativeClassQualifiedName("ContentViewCore") private native void nativeSelectPopupMenuItems( long nativeContentViewCore, long nativeSelectPopupSourceFrame, int[] indices); - - @NativeClassQualifiedName("ContentViewCore") private native int nativeGetCurrentRenderProcessId(long nativeContentViewCore); - - @NativeClassQualifiedName("ContentViewCore") private native boolean nativeUsingSynchronousCompositing(long nativeContentViewCore); - - @NativeClassQualifiedName("ContentViewCore") private native void nativeWasResized(long nativeContentViewCore); - - @NativeClassQualifiedName("ContentViewCore") private native void nativeSetTextTrackSettings(long nativeContentViewCore, boolean textTracksEnabled, String textTrackBackgroundColor, String textTrackFontFamily, String textTrackFontStyle, String textTrackFontVariant, String textTrackTextColor, String textTrackTextShadow, String textTrackTextSize); - - @NativeClassQualifiedName("ContentViewCore") private native void nativeSetBackgroundOpaque(long nativeContentViewCore, boolean opaque); }
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java b/content/public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java index feadab73..2ac7f06 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java +++ b/content/public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java
@@ -67,7 +67,7 @@ assert !mSurfaceView.getHolder().getSurface().isValid() : "Surface created before native library loaded."; assert rootWindow != null; - mNativeContentViewRenderView = nativeInit(rootWindow.getNativePointer()); + mNativeContentViewRenderView = nativeInit(rootWindow); assert mNativeContentViewRenderView != 0; mWindowAndroid = rootWindow; mSurfaceCallback = new SurfaceHolder.Callback() { @@ -219,7 +219,7 @@ } } - private native long nativeInit(long rootWindowNativePointer); + private native long nativeInit(WindowAndroid rootWindow); private native void nativeDestroy(long nativeContentViewRenderView); private native void nativeSetCurrentWebContents( long nativeContentViewRenderView, WebContents webContents);
diff --git a/content/public/android/java/src/org/chromium/content/browser/GestureListenerManagerImpl.java b/content/public/android/java/src/org/chromium/content/browser/GestureListenerManagerImpl.java index de1e13b3..ef7590b 100644 --- a/content/public/android/java/src/org/chromium/content/browser/GestureListenerManagerImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/GestureListenerManagerImpl.java
@@ -38,7 +38,7 @@ * @return {@link GestureListenerManager} object used for the give WebContents. * Creates one if not present. */ - public static GestureListenerManager fromWebContents(WebContents webContents) { + public static GestureListenerManagerImpl fromWebContents(WebContents webContents) { return WebContentsUserData.fromWebContents( webContents, GestureListenerManagerImpl.class, UserDataFactoryLazyHolder.INSTANCE); }
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 0f9c37c..5cc1cf4 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
@@ -59,6 +59,8 @@ protected static final int ACTION_SCROLL_LEFT = 0x01020039; protected static final int ACTION_SCROLL_RIGHT = 0x0102003b; + private static boolean sAccessibilityEnabledForTesting = false; + // Constant for no granularity selected. private static final int NO_GRANULARITY_SELECTED = 0; @@ -80,6 +82,7 @@ private int mSelectionStartIndex; private int mSelectionEndIndex; protected int mAccessibilityFocusId; + protected int mSelectionNodeId; private Runnable mSendWindowContentChangedRunnable; private View mAutofillPopupView; private boolean mShouldFocusOnPageLoad; @@ -109,6 +112,7 @@ mContext = context; mWebContents = (WebContentsImpl) webContents; mAccessibilityFocusId = View.NO_ID; + mSelectionNodeId = View.NO_ID; mIsHovering = false; mCurrentRootId = View.NO_ID; mView = containerView; @@ -133,6 +137,13 @@ } /** + * Pretend that accessibility is enabled, for testing. + */ + static void setAccessibilityEnabledForTesting() { + sAccessibilityEnabledForTesting = true; + } + + /** * @return An AccessibilityNodeProvider. */ public AccessibilityNodeProvider getAccessibilityNodeProvider() { @@ -141,7 +152,7 @@ @Override public AccessibilityNodeInfo createAccessibilityNodeInfo(int virtualViewId) { - if (!mAccessibilityManager.isEnabled()) { + if (!isAccessibilityEnabled()) { return null; } int rootId = nativeGetRootId(mNativeObj); @@ -190,7 +201,7 @@ public boolean performAction(int virtualViewId, int action, Bundle arguments) { // We don't support any actions on the host view or nodes // that are not (any longer) in the tree. - if (!mAccessibilityManager.isEnabled() || !nativeIsNodeValid(mNativeObj, virtualViewId)) { + if (!isAccessibilityEnabled() || !nativeIsNodeValid(mNativeObj, virtualViewId)) { return false; } @@ -270,7 +281,7 @@ if (!isValidMovementGranularity(granularity)) { return false; } - return nextAtGranularity(granularity, extend); + return nextAtGranularity(granularity, extend, virtualViewId); } case AccessibilityNodeInfo.ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY: { if (arguments == null) return false; @@ -281,7 +292,7 @@ if (!isValidMovementGranularity(granularity)) { return false; } - return previousAtGranularity(granularity, extend); + return previousAtGranularity(granularity, extend, virtualViewId); } case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD: return scrollForward(virtualViewId); @@ -331,21 +342,21 @@ } public void onAutofillPopupDisplayed(View autofillPopupView) { - if (mAccessibilityManager.isEnabled()) { + if (isAccessibilityEnabled()) { mAutofillPopupView = autofillPopupView; nativeOnAutofillPopupDisplayed(mNativeObj); } } public void onAutofillPopupDismissed() { - if (mAccessibilityManager.isEnabled()) { + if (isAccessibilityEnabled()) { nativeOnAutofillPopupDismissed(mNativeObj); mAutofillPopupView = null; } } public void onAutofillPopupAccessibilityFocusCleared() { - if (mAccessibilityManager.isEnabled()) { + if (isAccessibilityEnabled()) { int id = nativeGetIdForElementAfterElementHostingAutofillPopup(mNativeObj); if (id == 0) return; @@ -357,7 +368,7 @@ // Returns true if the hover event is to be consumed by accessibility feature. @CalledByNative private boolean onHoverEvent(int action) { - if (!mAccessibilityManager.isEnabled()) { + if (!isAccessibilityEnabled()) { return false; } @@ -426,18 +437,23 @@ } } - private boolean nextAtGranularity(int granularity, boolean extendSelection) { + private boolean nextAtGranularity(int granularity, boolean extendSelection, int virtualViewId) { + if (virtualViewId != mSelectionNodeId) return false; setGranularityAndUpdateSelection(granularity); + // This calls finishGranularityMove when it's done. return nativeNextAtGranularity(mNativeObj, mSelectionGranularity, extendSelection, - mAccessibilityFocusId, mSelectionStartIndex); + virtualViewId, mSelectionStartIndex); } - private boolean previousAtGranularity(int granularity, boolean extendSelection) { + private boolean previousAtGranularity( + int granularity, boolean extendSelection, int virtualViewId) { + if (virtualViewId != mSelectionNodeId) return false; setGranularityAndUpdateSelection(granularity); + // This calls finishGranularityMove when it's done. return nativePreviousAtGranularity(mNativeObj, mSelectionGranularity, extendSelection, - mAccessibilityFocusId, mSelectionEndIndex); + virtualViewId, mSelectionEndIndex); } @CalledByNative @@ -445,9 +461,9 @@ int itemEndIndex, boolean forwards) { // Prepare to send both a selection and a traversal event in sequence. AccessibilityEvent selectionEvent = buildAccessibilityEvent( - mAccessibilityFocusId, AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED); + mSelectionNodeId, AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED); if (selectionEvent == null) return; - AccessibilityEvent traverseEvent = buildAccessibilityEvent(mAccessibilityFocusId, + AccessibilityEvent traverseEvent = buildAccessibilityEvent(mSelectionNodeId, AccessibilityEvent.TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY); if (traverseEvent == null) { selectionEvent.recycle(); @@ -464,10 +480,10 @@ if (!extendSelection) { mSelectionStartIndex = mSelectionEndIndex; } - if (nativeIsEditableText(mNativeObj, mAccessibilityFocusId) - && nativeIsFocused(mNativeObj, mAccessibilityFocusId)) { + if (nativeIsEditableText(mNativeObj, mSelectionNodeId) + && nativeIsFocused(mNativeObj, mSelectionNodeId)) { nativeSetSelection( - mNativeObj, mAccessibilityFocusId, mSelectionStartIndex, mSelectionEndIndex); + mNativeObj, mSelectionNodeId, mSelectionStartIndex, mSelectionEndIndex); } // The selection event's "from" and "to" indices are just a cursor at the focus @@ -478,8 +494,13 @@ // The traverse event's "from" and "to" indices surround the item (e.g. the word, // etc.) with no whitespace. - traverseEvent.setFromIndex(itemStartIndex); - traverseEvent.setToIndex(itemEndIndex); + if (forwards && nativeIsEditableText(mNativeObj, mSelectionNodeId)) { + traverseEvent.setFromIndex(itemStartIndex - 1); + traverseEvent.setToIndex(itemEndIndex - 1); + } else { + traverseEvent.setFromIndex(itemStartIndex); + traverseEvent.setToIndex(itemEndIndex); + } traverseEvent.setItemCount(text.length()); traverseEvent.setMovementGranularity(mSelectionGranularity); traverseEvent.setContentDescription(text); @@ -516,6 +537,10 @@ mAccessibilityFocusId = newAccessibilityFocusId; mAccessibilityFocusRect = null; + // Used to store the node (edit text field) that has input focus but not a11y focus. + // Usually while the user is typing in an edit text field, a11y is on the IME and input + // focus is on the edit field. Granularity move needs to know where the input focus is. + mSelectionNodeId = mAccessibilityFocusId; mSelectionGranularity = NO_GRANULARITY_SELECTED; mSelectionStartIndex = -1; mSelectionEndIndex = nativeGetTextLength(mNativeObj, newAccessibilityFocusId); @@ -597,7 +622,7 @@ // If we don't have any frame info, then the virtual hierarchy // doesn't exist in the view of the Android framework, so should // never send any events. - if (!mAccessibilityManager.isEnabled() || !isFrameInfoInitialized()) { + if (!isAccessibilityEnabled() || !isFrameInfoInitialized()) { return null; } @@ -626,6 +651,10 @@ return bundle; } + private boolean isAccessibilityEnabled() { + return sAccessibilityEnabledForTesting || mAccessibilityManager.isEnabled(); + } + private AccessibilityNodeInfo createNodeForHost(int rootId) { // Since we don't want the parent to be focusable, but we can't remove // actions from a node, copy over the necessary fields. @@ -1274,4 +1303,4 @@ protected native int[] nativeGetCharacterBoundingBoxes( long nativeWebContentsAccessibilityAndroid, int id, int start, int len); private native int nativeGetTextLength(long nativeWebContentsAccessibilityAndroid, int id); -} +} \ No newline at end of file
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityTest.java b/content/public/android/javatests/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityTest.java index 59c9101..549a5e5 100644 --- a/content/public/android/javatests/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityTest.java +++ b/content/public/android/javatests/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityTest.java
@@ -8,11 +8,13 @@ import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX; import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY; +import android.annotation.SuppressLint; import android.annotation.TargetApi; import android.graphics.RectF; import android.os.Build; import android.os.Bundle; import android.support.test.filters.MediumTest; +import android.text.InputType; import android.view.View; import android.view.ViewGroup; import android.view.accessibility.AccessibilityEvent; @@ -20,6 +22,7 @@ import android.view.accessibility.AccessibilityNodeProvider; import org.junit.Assert; +import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -29,6 +32,8 @@ import org.chromium.base.test.util.MinAndroidSdkLevel; import org.chromium.base.test.util.UrlUtils; import org.chromium.content.browser.ContentViewCore; +import org.chromium.content.browser.test.util.Criteria; +import org.chromium.content.browser.test.util.CriteriaHelper; import org.chromium.content_shell_apk.ContentShellActivityTestRule; import java.lang.reflect.Method; @@ -41,6 +46,11 @@ @Rule public ContentShellActivityTestRule mActivityTestRule = new ContentShellActivityTestRule(); + @Before + public void setUp() throws Exception { + WebContentsAccessibility.setAccessibilityEnabledForTesting(); + } + /** * Helper class that can be used to wait until an AccessibilityEvent is fired on a view. */ @@ -51,13 +61,40 @@ public boolean onRequestSendAccessibilityEvent( ViewGroup host, View child, AccessibilityEvent event) { AccessibilityEventCallbackHelper.this.notifyCalled(); + if (event.getEventType() + == AccessibilityEvent + .TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY) { + sIndex = event.getFromIndex(); + } return true; } }); } }; + /* + * Enable accessibility and wait until ContentViewCore.getAccessibilityNodeProvider() + * returns something not null. + */ + private AccessibilityNodeProvider enableAccessibilityAndWaitForNodeProvider() { + final ContentViewCore contentViewCore = mActivityTestRule.getContentViewCore(); + contentViewCore.setAccessibilityState(true); + + CriteriaHelper.pollUiThread(new Criteria() { + @Override + public boolean isSatisfied() { + return contentViewCore.getAccessibilityNodeProvider() != null; + } + }); + + return contentViewCore.getAccessibilityNodeProvider(); + } + AccessibilityEventCallbackHelper mAccessibilityEventCallbackHelper; + /* Used to store the cursor indexes from TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY + * events. Used in { @link testNavigationWithingEditTextField } + */ + static int sIndex; /** * Test Android O API to retrieve character bounds from an accessible node. @@ -193,4 +230,105 @@ return View.NO_ID; } -} + + /** + * Helper method to recursively search a tree of virtual views under an + * AccessibilityNodeProvider and return one whose input type is + * {@link android.text.InputType#TYPE_CLASS_TEXT}. + * Returns the virtual view ID of the matching node, if found, and View.NO_ID if not. + */ + @SuppressLint("NewApi") + private int findNodeWithTextInputType( + AccessibilityNodeProvider provider, int virtualViewId, int type) { + AccessibilityNodeInfo node = provider.createAccessibilityNodeInfo(virtualViewId); + Assert.assertNotEquals(node, null); + + if (node.getInputType() == type) { + return virtualViewId; + } + + for (int i = 0; i < node.getChildCount(); i++) { + int childId = getChildId(node, i); + AccessibilityNodeInfo child = provider.createAccessibilityNodeInfo(childId); + if (child != null) { + int result = + findNodeWithTextInputType(provider, childId, InputType.TYPE_CLASS_TEXT); + if (result != View.NO_ID) return result; + } + } + return View.NO_ID; + } + + /** + * Test Android O API to check if an edit field can be traversed with granularity while typing. + */ + @Test + @MediumTest + @MinAndroidSdkLevel(Build.VERSION_CODES.O) + @TargetApi(Build.VERSION_CODES.O) + public void testNavigationWithingEditTextField() throws Throwable { + // Load a really simple webpage. + final String data = "<form>\n" + + " First name:<br>\n" + + " <input id=\"fn\" type=\"text\" value=\"Text\"><br>\n" + + "</form>"; + mActivityTestRule.launchContentShellWithUrl(UrlUtils.encodeHtmlDataUri(data)); + mActivityTestRule.waitForActiveShellToBeDoneLoading(); + AccessibilityNodeProvider provider = enableAccessibilityAndWaitForNodeProvider(); + + // Find a node in the accessibility tree with input type TYPE_CLASS_TEXT. + ContentViewCore contentViewCore = mActivityTestRule.getContentViewCore(); + int editFieldVirtualViewId = + findNodeWithTextInputType(provider, View.NO_ID, InputType.TYPE_CLASS_TEXT); + + mAccessibilityEventCallbackHelper = + new AccessibilityEventCallbackHelper(contentViewCore.getContainerView()); + + AccessibilityNodeInfo editTextNode = + provider.createAccessibilityNodeInfo(editFieldVirtualViewId); + + // Assert we have got the correct node. + Assert.assertNotEquals(editTextNode, null); + Assert.assertEquals(editTextNode.getInputType(), InputType.TYPE_CLASS_TEXT); + Assert.assertEquals(editTextNode.getText().toString(), "Text"); + + boolean result1 = provider.performAction( + editFieldVirtualViewId, AccessibilityNodeInfo.ACTION_FOCUS, null); + boolean result2 = provider.performAction( + editFieldVirtualViewId, AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null); + boolean result3 = provider.performAction(editFieldVirtualViewId, + AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS, null); + + // Assert all actions are performed successfully. + Assert.assertEquals(result1, true); + Assert.assertEquals(result2, true); + Assert.assertEquals(result3, true); + + while (!editTextNode.isFocused()) { + Thread.sleep(1); + editTextNode.recycle(); + editTextNode = provider.createAccessibilityNodeInfo(editFieldVirtualViewId); + } + + Bundle args = new Bundle(); + // Set granularity to Character. + args.putInt(AccessibilityNodeInfo.ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT, + AccessibilityNodeInfo.MOVEMENT_GRANULARITY_CHARACTER); + args.putBoolean(AccessibilityNodeInfo.ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN, false); + + // Simulate swipe left. + for (int i = 3; i >= 0; i--) { + boolean result = provider.performAction(editFieldVirtualViewId, + AccessibilityNodeInfo.ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY, args); + // Assert if the index of the character traversed is correct. + Assert.assertEquals(sIndex, i); + } + // Simulate swipe right. + for (int i = 0; i <= 3; i++) { + boolean result = provider.performAction(editFieldVirtualViewId, + AccessibilityNodeInfo.ACTION_NEXT_AT_MOVEMENT_GRANULARITY, args); + // Assert if the index of the character traversed is correct. + Assert.assertEquals(sIndex, i); + } + } +} \ No newline at end of file
diff --git a/content/renderer/accessibility/render_accessibility_impl.cc b/content/renderer/accessibility/render_accessibility_impl.cc index 3dd8173b..23626cfa 100644 --- a/content/renderer/accessibility/render_accessibility_impl.cc +++ b/content/renderer/accessibility/render_accessibility_impl.cc
@@ -454,9 +454,9 @@ // For each node in the update, set the location in our map from // ids to locations. - for (size_t i = 0; i < event_msg.update.nodes.size(); ++i) { - ui::AXNodeData& src = event_msg.update.nodes[i]; - ui::AXRelativeBounds& dst = locations_[event_msg.update.nodes[i].id]; + for (size_t j = 0; j < event_msg.update.nodes.size(); ++j) { + ui::AXNodeData& src = event_msg.update.nodes[j]; + ui::AXRelativeBounds& dst = locations_[event_msg.update.nodes[j].id]; dst.offset_container_id = src.offset_container_id; dst.bounds = src.location; dst.transform.reset(nullptr); @@ -739,8 +739,8 @@ size_t old_count = update->nodes.size(); size_t new_count = plugin_update.nodes.size(); update->nodes.resize(old_count + new_count); - for (size_t i = 0; i < new_count; ++i) - update->nodes[old_count + i] = plugin_update.nodes[i]; + for (size_t j = 0; j < new_count; ++j) + update->nodes[old_count + j] = plugin_update.nodes[j]; break; } }
diff --git a/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.cc b/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.cc index 1fa3be38..8d42929 100644 --- a/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.cc +++ b/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.cc
@@ -289,12 +289,22 @@ } media::GpuVideoAcceleratorFactories::OutputFormat -GpuVideoAcceleratorFactoriesImpl::VideoFrameOutputFormat() { +GpuVideoAcceleratorFactoriesImpl::VideoFrameOutputFormat(size_t bit_depth) { DCHECK(task_runner_->BelongsToCurrentThread()); if (CheckContextLost()) return media::GpuVideoAcceleratorFactories::OutputFormat::UNDEFINED; viz::ContextProvider::ScopedContextLock lock(context_provider_); auto capabilities = context_provider_->ContextCapabilities(); + if (bit_depth > 8) { + // If high bit depth rendering is not enabled and we support RG textures, + // use those, albeit at a reduced bit depth of 8 bits per component. + // TODO(mcasas): continue working on this, avoiding dropping information as + // long as the hardware may support it https://crbug.com/798485. + if (!rendering_color_space_.IsHDR() && capabilities.texture_rg) + return media::GpuVideoAcceleratorFactories::OutputFormat::I420; + else + return media::GpuVideoAcceleratorFactories::OutputFormat::UNDEFINED; + } if (capabilities.image_ycbcr_420v && !capabilities.image_ycbcr_420v_disabled_for_video_frames) { return media::GpuVideoAcceleratorFactories::OutputFormat::NV12_SINGLE_GMB;
diff --git a/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.h b/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.h index 33eba5a..3e7b0ef6 100644 --- a/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.h +++ b/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.h
@@ -88,7 +88,7 @@ bool ShouldUseGpuMemoryBuffersForVideoFrames() const override; unsigned ImageTextureTarget(gfx::BufferFormat format) override; - OutputFormat VideoFrameOutputFormat() override; + OutputFormat VideoFrameOutputFormat(size_t bit_depth) override; std::unique_ptr<media::GpuVideoAcceleratorFactories::ScopedGLContextLock> GetGLContextLock() override; bool CheckContextLost();
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index 859d102..1536fb1 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc
@@ -3055,6 +3055,7 @@ const RequestNavigationParams& request_params, mojom::URLLoaderClientEndpointsPtr url_loader_client_endpoints, base::Optional<URLLoaderFactoryBundle> subresource_loader_factories, + mojom::ControllerServiceWorkerInfoPtr controller_service_worker_info, const base::UnguessableToken& devtools_navigation_token) { // If this was a renderer-initiated navigation (nav_entry_id == 0) from this // frame, but it was aborted, then ignore it. @@ -3078,6 +3079,8 @@ return; } + controller_service_worker_info_ = std::move(controller_service_worker_info); + // If the request was initiated in the context of a user gesture then make // sure that the navigation also executes in the context of a user gesture. std::unique_ptr<blink::WebScopedUserGesture> gesture( @@ -4055,7 +4058,7 @@ document_loader->SetServiceWorkerNetworkProvider( ServiceWorkerNetworkProvider::CreateForNavigation( routing_id_, navigation_state->request_params(), frame_, - content_initiated, + content_initiated, std::move(controller_service_worker_info_), render_thread ? GetDefaultURLLoaderFactoryGetter() : nullptr)); }
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h index 86b1f7d..c11796d6 100644 --- a/content/renderer/render_frame_impl.h +++ b/content/renderer/render_frame_impl.h
@@ -522,6 +522,7 @@ const RequestNavigationParams& request_params, mojom::URLLoaderClientEndpointsPtr url_loader_client_endpoints, base::Optional<URLLoaderFactoryBundle> subresource_loaders, + mojom::ControllerServiceWorkerInfoPtr controller_service_worker_info, const base::UnguessableToken& devtools_navigation_token) override; void CommitFailedNavigation( const CommonNavigationParams& common_params, @@ -1585,6 +1586,12 @@ PossiblyAssociatedInterfacePtr<mojom::URLLoaderFactory> custom_url_loader_factory_; + // Non-null if this frame is to be controlled by a service worker. + // Sent from the browser process on navigation commit. Valid until the + // document loader for this frame is actually created (where this is + // consumed to initialize a subresource loader). + mojom::ControllerServiceWorkerInfoPtr controller_service_worker_info_; + scoped_refptr<ChildURLLoaderFactoryGetter> url_loader_factory_getter_; // URLLoaderFactory instances used for subresource loading when the Network
diff --git a/content/renderer/render_widget_browsertest.cc b/content/renderer/render_widget_browsertest.cc index e92b26d..e54765b3 100644 --- a/content/renderer/render_widget_browsertest.cc +++ b/content/renderer/render_widget_browsertest.cc
@@ -3,6 +3,8 @@ // found in the LICENSE file. #include "base/strings/utf_string_conversions.h" +#include "components/viz/common/surfaces/local_surface_id.h" +#include "components/viz/common/surfaces/parent_local_surface_id_allocator.h" #include "content/common/resize_params.h" #include "content/public/renderer/render_frame_visitor.h" #include "content/public/test/render_view_test.h" @@ -53,6 +55,8 @@ TEST_F(RenderWidgetTest, OnResize) { // The initial bounds is empty, so setting it to the same thing should do // nothing. + viz::LocalSurfaceId local_surface_id; + viz::ParentLocalSurfaceIdAllocator local_surface_id_allocator; ResizeParams resize_params; resize_params.screen_info = ScreenInfo(); resize_params.new_size = gfx::Size(); @@ -61,6 +65,8 @@ resize_params.browser_controls_shrink_blink_size = false; resize_params.is_fullscreen_granted = false; resize_params.needs_resize_ack = false; + local_surface_id = local_surface_id_allocator.GenerateId(); + resize_params.local_surface_id = local_surface_id; OnResize(resize_params); EXPECT_EQ(resize_params.needs_resize_ack, next_paint_is_resize_ack()); @@ -105,8 +111,9 @@ class RenderWidgetInitialSizeTest : public RenderWidgetTest { public: - RenderWidgetInitialSizeTest() - : RenderWidgetTest(), initial_size_(200, 100) {} + RenderWidgetInitialSizeTest() : RenderWidgetTest(), initial_size_(200, 100) { + local_surface_id_ = local_surface_id_allocator_.GenerateId(); + } protected: std::unique_ptr<ResizeParams> InitialSizeParams() override { @@ -114,10 +121,13 @@ initial_size_params->new_size = initial_size_; initial_size_params->physical_backing_size = initial_size_; initial_size_params->needs_resize_ack = true; + initial_size_params->local_surface_id = local_surface_id_; return initial_size_params; } gfx::Size initial_size_; + viz::LocalSurfaceId local_surface_id_; + viz::ParentLocalSurfaceIdAllocator local_surface_id_allocator_; }; TEST_F(RenderWidgetInitialSizeTest, InitialSize) {
diff --git a/content/renderer/service_worker/controller_service_worker_connector.cc b/content/renderer/service_worker/controller_service_worker_connector.cc index e0ee79a..4f4645d4 100644 --- a/content/renderer/service_worker/controller_service_worker_connector.cc +++ b/content/renderer/service_worker/controller_service_worker_connector.cc
@@ -15,20 +15,39 @@ mojom::ServiceWorkerContainerHost* container_host) : container_host_(container_host) {} +ControllerServiceWorkerConnector::ControllerServiceWorkerConnector( + mojom::ServiceWorkerContainerHost* container_host, + mojom::ControllerServiceWorkerPtr controller_ptr) + : container_host_(container_host) { + ResetControllerConnection(std::move(controller_ptr)); +} + mojom::ControllerServiceWorker* ControllerServiceWorkerConnector::GetControllerServiceWorker() { - if (!controller_service_worker_ && container_host_) { - // TODO(kinuko): For simplicity we always call GetControllerServiceWorker - // for now, but it should be possible to give the initial - // controller_service_worker_ in ctor (by sending it from the browser - // process when a new controller is set). - container_host_->GetControllerServiceWorker( - mojo::MakeRequest(&controller_service_worker_)); - controller_service_worker_.set_connection_error_handler(base::BindOnce( - &ControllerServiceWorkerConnector::OnControllerConnectionClosed, - base::Unretained(this))); + switch (state_) { + case State::kDisconnected: + DCHECK(!controller_service_worker_); + DCHECK(container_host_); + container_host_->GetControllerServiceWorker( + mojo::MakeRequest(&controller_service_worker_)); + controller_service_worker_.set_connection_error_handler(base::BindOnce( + &ControllerServiceWorkerConnector::OnControllerConnectionClosed, + base::Unretained(this))); + state_ = State::kConnected; + return controller_service_worker_.get(); + case State::kConnected: + DCHECK(controller_service_worker_.is_bound()); + return controller_service_worker_.get(); + case State::kNoController: + DCHECK(!controller_service_worker_); + return nullptr; + case State::kNoContainerHost: + DCHECK(!controller_service_worker_); + DCHECK(!container_host_); + return nullptr; } - return controller_service_worker_.get(); + NOTREACHED(); + return nullptr; } void ControllerServiceWorkerConnector::AddObserver(Observer* observer) { @@ -40,15 +59,33 @@ } void ControllerServiceWorkerConnector::OnContainerHostConnectionClosed() { + state_ = State::kNoContainerHost; container_host_ = nullptr; + controller_service_worker_.reset(); } -ControllerServiceWorkerConnector::~ControllerServiceWorkerConnector() = default; - void ControllerServiceWorkerConnector::OnControllerConnectionClosed() { + DCHECK_EQ(State::kConnected, state_); + state_ = State::kDisconnected; controller_service_worker_.reset(); for (auto& observer : observer_list_) observer.OnConnectionClosed(); } +void ControllerServiceWorkerConnector::ResetControllerConnection( + mojom::ControllerServiceWorkerPtr controller_ptr) { + DCHECK_NE(State::kNoContainerHost, state_); + controller_service_worker_ = std::move(controller_ptr); + if (controller_service_worker_) { + state_ = State::kConnected; + controller_service_worker_.set_connection_error_handler(base::BindOnce( + &ControllerServiceWorkerConnector::OnControllerConnectionClosed, + base::Unretained(this))); + } else { + state_ = State::kNoController; + } +} + +ControllerServiceWorkerConnector::~ControllerServiceWorkerConnector() = default; + } // namespace content
diff --git a/content/renderer/service_worker/controller_service_worker_connector.h b/content/renderer/service_worker/controller_service_worker_connector.h index 5746cb9..b68adfa7 100644 --- a/content/renderer/service_worker/controller_service_worker_connector.h +++ b/content/renderer/service_worker/controller_service_worker_connector.h
@@ -30,9 +30,37 @@ virtual void OnConnectionClosed() = 0; }; + enum class State { + // The controller connection is dropped. Calling + // GetControllerServiceWorker() in this state will result in trying to + // get the new controller pointer from the browser. + kDisconnected, + + // The controller connection is established. + kConnected, + + // It is notified that the client lost the controller. This could only + // happen due to an exceptional condition like the service worker could + // no longer be read from the script cache. Calling + // GetControllerServiceWorker() in this state will always return nullptr. + kNoController, + + // The container host is shutting down. Calling + // GetControllerServiceWorker() in this state will always return nullptr. + kNoContainerHost, + }; + + // Use this ctor when no |controller_ptr| is available at creation time. + // |state_| is set to kDisconnected. TODO(kinuko): deprecate this one. explicit ControllerServiceWorkerConnector( mojom::ServiceWorkerContainerHost* container_host); + // Use this ctor when |controller_ptr| is given by the browser at the + // creation time. |state_| is set to either kConnected or kNoController. + ControllerServiceWorkerConnector( + mojom::ServiceWorkerContainerHost* container_host, + mojom::ControllerServiceWorkerPtr controller_ptr); + // This may return nullptr if the connection to the ContainerHost (in the // browser process) is already terminated. mojom::ControllerServiceWorker* GetControllerServiceWorker(); @@ -41,13 +69,21 @@ void RemoveObserver(Observer* observer); void OnContainerHostConnectionClosed(); + void OnControllerConnectionClosed(); + + // Resets the controller connection with the given |controller_ptr|, this + // can be called when a new controller is given, e.g. due to claim(). + void ResetControllerConnection( + mojom::ControllerServiceWorkerPtr controller_ptr); + + State state() const { return state_; } private: + State state_ = State::kDisconnected; + friend class base::RefCounted<ControllerServiceWorkerConnector>; ~ControllerServiceWorkerConnector(); - void OnControllerConnectionClosed(); - // Connection to the ServiceWorkerProviderHost that lives in the // browser process. This is used to (re-)obtain Mojo connection to // |controller_service_worker_| when it is not established.
diff --git a/content/renderer/service_worker/service_worker_handle_reference.cc b/content/renderer/service_worker/service_worker_handle_reference.cc index 837ee20..f51a5d3 100644 --- a/content/renderer/service_worker/service_worker_handle_reference.cc +++ b/content/renderer/service_worker/service_worker_handle_reference.cc
@@ -12,37 +12,21 @@ namespace content { std::unique_ptr<ServiceWorkerHandleReference> -ServiceWorkerHandleReference::Create( - blink::mojom::ServiceWorkerObjectInfoPtr info, - scoped_refptr<ThreadSafeSender> sender) { - DCHECK(sender); - if (info->handle_id == blink::mojom::kInvalidServiceWorkerHandleId) - return nullptr; - return base::WrapUnique(new ServiceWorkerHandleReference( - std::move(info), std::move(sender), true)); -} - -std::unique_ptr<ServiceWorkerHandleReference> ServiceWorkerHandleReference::Adopt( blink::mojom::ServiceWorkerObjectInfoPtr info, scoped_refptr<ThreadSafeSender> sender) { DCHECK(sender); if (info->handle_id == blink::mojom::kInvalidServiceWorkerHandleId) return nullptr; - return base::WrapUnique(new ServiceWorkerHandleReference( - std::move(info), std::move(sender), false)); + return base::WrapUnique( + new ServiceWorkerHandleReference(std::move(info), std::move(sender))); } ServiceWorkerHandleReference::ServiceWorkerHandleReference( blink::mojom::ServiceWorkerObjectInfoPtr info, - scoped_refptr<ThreadSafeSender> sender, - bool increment_ref_in_ctor) + scoped_refptr<ThreadSafeSender> sender) : info_(std::move(info)), sender_(sender) { DCHECK_NE(info_->handle_id, blink::mojom::kInvalidServiceWorkerHandleId); - if (increment_ref_in_ctor) { - sender_->Send(new ServiceWorkerHostMsg_IncrementServiceWorkerRefCount( - info_->handle_id)); - } } ServiceWorkerHandleReference::~ServiceWorkerHandleReference() { @@ -51,9 +35,4 @@ info_->handle_id)); } -blink::mojom::ServiceWorkerObjectInfoPtr ServiceWorkerHandleReference::GetInfo() - const { - return info_->Clone(); -} - } // namespace content
diff --git a/content/renderer/service_worker/service_worker_handle_reference.h b/content/renderer/service_worker/service_worker_handle_reference.h index bc404e48..c692a0f56 100644 --- a/content/renderer/service_worker/service_worker_handle_reference.h +++ b/content/renderer/service_worker/service_worker_handle_reference.h
@@ -24,12 +24,6 @@ // or decrement the reference count to the browser process. class CONTENT_EXPORT ServiceWorkerHandleReference { public: - // Creates a new ServiceWorkerHandleReference and increments ref-count. If - // the handle id is kInvalidServiceWorkerHandleId, returns null instead. - static std::unique_ptr<ServiceWorkerHandleReference> Create( - blink::mojom::ServiceWorkerObjectInfoPtr info, - scoped_refptr<ThreadSafeSender> sender); - // Creates a new ServiceWorkerHandleReference by adopting a ref-count. If // the handle id is kInvalidServiceWorkerHandleId, returns null instead. static std::unique_ptr<ServiceWorkerHandleReference> Adopt( @@ -38,8 +32,6 @@ ~ServiceWorkerHandleReference(); - blink::mojom::ServiceWorkerObjectInfoPtr GetInfo() const; - int handle_id() const { return info_->handle_id; } const GURL& url() const { return info_->url; } blink::mojom::ServiceWorkerState state() const { return info_->state; } @@ -47,8 +39,7 @@ private: ServiceWorkerHandleReference(blink::mojom::ServiceWorkerObjectInfoPtr info, - scoped_refptr<ThreadSafeSender> sender, - bool increment_ref_in_ctor); + scoped_refptr<ThreadSafeSender> sender); blink::mojom::ServiceWorkerObjectInfoPtr info_; scoped_refptr<ThreadSafeSender> sender_; DISALLOW_COPY_AND_ASSIGN(ServiceWorkerHandleReference);
diff --git a/content/renderer/service_worker/service_worker_network_provider.cc b/content/renderer/service_worker/service_worker_network_provider.cc index b78e0e4..90780f99e 100644 --- a/content/renderer/service_worker/service_worker_network_provider.cc +++ b/content/renderer/service_worker/service_worker_network_provider.cc
@@ -114,7 +114,7 @@ // We need SubresourceLoaderFactory populated in order to // create our own URLLoader for subresource loading. if (!provider_->context() || - !provider_->context()->subresource_loader_factory()) + !provider_->context()->GetSubresourceLoaderFactory()) return nullptr; // S13nServiceWorker: @@ -136,7 +136,7 @@ return std::make_unique<WebURLLoaderImpl>( RenderThreadImpl::current()->resource_dispatcher(), std::move(task_runner), - provider_->context()->subresource_loader_factory()); + provider_->context()->GetSubresourceLoaderFactory()); } private: @@ -152,6 +152,7 @@ const RequestNavigationParams& request_params, blink::WebLocalFrame* frame, bool content_initiated, + mojom::ControllerServiceWorkerInfoPtr controller_info, scoped_refptr<ChildURLLoaderFactoryGetter> default_loader_factory_getter) { bool browser_side_navigation = IsBrowserSideNavigationEnabled(); bool should_create_provider_for_window = false; @@ -190,6 +191,7 @@ network_provider = base::WrapUnique(new ServiceWorkerNetworkProvider( route_id, blink::mojom::ServiceWorkerProviderType::kForWindow, GetNextProviderId(), is_parent_frame_secure, + std::move(controller_info), std::move(default_loader_factory_getter))); } else { CHECK(browser_side_navigation); @@ -198,6 +200,7 @@ network_provider = base::WrapUnique(new ServiceWorkerNetworkProvider( route_id, blink::mojom::ServiceWorkerProviderType::kForWindow, service_worker_provider_id, is_parent_frame_secure, + std::move(controller_info), std::move(default_loader_factory_getter))); } } else { @@ -215,6 +218,7 @@ return base::WrapUnique(new ServiceWorkerNetworkProvider( route_id, blink::mojom::ServiceWorkerProviderType::kForSharedWorker, GetNextProviderId(), true /* is_parent_frame_secure */, + nullptr /* controller_service_worker */, nullptr /* default_loader_factory_getter */)); } @@ -266,6 +270,7 @@ blink::mojom::ServiceWorkerProviderType provider_type, int browser_provider_id, bool is_parent_frame_secure, + mojom::ControllerServiceWorkerInfoPtr controller_info, scoped_refptr<ChildURLLoaderFactoryGetter> default_loader_factory_getter) { if (browser_provider_id == kInvalidServiceWorkerProviderId) return; @@ -292,14 +297,16 @@ base::ThreadTaskRunnerHandle::Get().get()); context_ = base::MakeRefCounted<ServiceWorkerProviderContext>( browser_provider_id, provider_type, std::move(client_request), - std::move(host_ptr_info), default_loader_factory_getter); + std::move(host_ptr_info), std::move(controller_info), + default_loader_factory_getter); ChildThreadImpl::current()->channel()->GetRemoteAssociatedInterface( &dispatcher_host_); dispatcher_host_->OnProviderCreated(std::move(host_info)); } else { context_ = base::MakeRefCounted<ServiceWorkerProviderContext>( browser_provider_id, provider_type, std::move(client_request), - std::move(host_ptr_info), default_loader_factory_getter); + std::move(host_ptr_info), std::move(controller_info), + default_loader_factory_getter); } } @@ -311,13 +318,9 @@ // ServiceWorkerGlobalScope#registration. ServiceWorkerDispatcher::GetOrCreateThreadSpecificInstance( sender, base::ThreadTaskRunnerHandle::Get()); - // TODO(kinuko): Split ServiceWorkerProviderContext ctor for - // controller and controllee. context_ = base::MakeRefCounted<ServiceWorkerProviderContext>( - info->provider_id, - blink::mojom::ServiceWorkerProviderType::kForServiceWorker, - std::move(info->client_request), std::move(info->host_ptr_info), - nullptr /* loader_factory_getter */); + info->provider_id, std::move(info->client_request), + std::move(info->host_ptr_info)); context_->SetRegistrationForServiceWorkerGlobalScope( std::move(info->registration), sender);
diff --git a/content/renderer/service_worker/service_worker_network_provider.h b/content/renderer/service_worker/service_worker_network_provider.h index 9cffa225..a13dc0437 100644 --- a/content/renderer/service_worker/service_worker_network_provider.h +++ b/content/renderer/service_worker/service_worker_network_provider.h
@@ -15,6 +15,7 @@ #include "base/memory/weak_ptr.h" #include "base/supports_user_data.h" #include "content/common/content_export.h" +#include "content/common/service_worker/controller_service_worker.mojom.h" #include "content/common/service_worker/service_worker.mojom.h" #include "content/common/service_worker/service_worker_provider.mojom.h" #include "third_party/WebKit/common/service_worker/service_worker_provider_type.mojom.h" @@ -57,6 +58,8 @@ // with WebServiceWorkerNetworkProvider to be owned by Blink. // // For S13nServiceWorker: + // |controller_info| contains the endpoint and object info that is needed to + // set up the controller service worker for the client. // |default_loader_factory_getter| contains a set of default loader // factories for the associated loading context, and is used when we // create a subresource loader for controllees. This is non-null only @@ -68,6 +71,7 @@ const RequestNavigationParams& request_params, blink::WebLocalFrame* frame, bool content_initiated, + mojom::ControllerServiceWorkerInfoPtr controller_info, scoped_refptr<ChildURLLoaderFactoryGetter> default_loader_factory_getter); // Creates a ServiceWorkerNetworkProvider for a shared worker (as a @@ -110,16 +114,14 @@ // |is_parent_frame_secure| is only relevant when the |type| is WINDOW. // // For S13nServiceWorker: - // |default_loader_factory_getter| contains a set of default loader - // factories for the associated loading context, and is used when we - // create a subresource loader for controllees. This is non-null only - // if the provider is created for controllees, and if the loading context, - // e.g. a frame, provides the loading factory getter for default loaders. + // See the comment at CreateForNavigation() for |controller_info| and + // |default_loader_factory_getter|. ServiceWorkerNetworkProvider( int route_id, blink::mojom::ServiceWorkerProviderType type, int provider_id, bool is_parent_frame_secure, + mojom::ControllerServiceWorkerInfoPtr controller_info, scoped_refptr<ChildURLLoaderFactoryGetter> default_loader_factory_getter); // This is for controllers, used in CreateForController.
diff --git a/content/renderer/service_worker/service_worker_provider_context.cc b/content/renderer/service_worker/service_worker_provider_context.cc index 45c677b..1e013aa 100644 --- a/content/renderer/service_worker/service_worker_provider_context.cc +++ b/content/renderer/service_worker/service_worker_provider_context.cc
@@ -49,8 +49,7 @@ // S13nServiceWorker: // Used to intercept requests from the controllee and dispatch them - // as events to the controller ServiceWorker. This is reset when a new - // controller is set. + // as events to the controller ServiceWorker. mojom::URLLoaderFactoryPtr subresource_loader_factory; // S13nServiceWorker: @@ -78,6 +77,7 @@ // controller service worker. Kept here in order to call // OnContainerHostConnectionClosed when container_host_ for the // provider is reset. + // This is (re)set to nullptr if no controller is attached to this client. scoped_refptr<ControllerServiceWorkerConnector> controller_connector; // For service worker clients. Map from registration id to JavaScript @@ -89,24 +89,21 @@ struct ServiceWorkerProviderContext::ProviderStateForServiceWorker { ProviderStateForServiceWorker() = default; ~ProviderStateForServiceWorker() = default; - // |registration->host_ptr_info| will be taken by - // ServiceWorkerProviderContext::TakeRegistrationForServiceWorkerGlobalScope() - // means after that |registration| will be in a half-way taken state. - // TODO(leonhsl): To avoid the half-way taken state mentioned above, make - // ServiceWorkerProviderContext::TakeRegistrationForServiceWorkerGlobalScope() - // take/reset all information of |registration|, |installing|, |waiting| and - // |active| all at once. + // These are valid until TakeRegistrationForServiceWorkerGlobalScope() is + // called. blink::mojom::ServiceWorkerRegistrationObjectInfoPtr registration; std::unique_ptr<ServiceWorkerHandleReference> installing; std::unique_ptr<ServiceWorkerHandleReference> waiting; std::unique_ptr<ServiceWorkerHandleReference> active; }; +// For service worker clients. ServiceWorkerProviderContext::ServiceWorkerProviderContext( int provider_id, blink::mojom::ServiceWorkerProviderType provider_type, mojom::ServiceWorkerContainerAssociatedRequest request, mojom::ServiceWorkerContainerHostAssociatedPtrInfo host_ptr_info, + mojom::ControllerServiceWorkerInfoPtr controller_info, scoped_refptr<ChildURLLoaderFactoryGetter> default_loader_factory_getter) : provider_type_(provider_type), provider_id_(provider_id), @@ -114,16 +111,39 @@ binding_(this, std::move(request)), weak_factory_(this) { container_host_.Bind(std::move(host_ptr_info)); - if (provider_type == - blink::mojom::ServiceWorkerProviderType::kForServiceWorker) { - state_for_service_worker_ = - std::make_unique<ProviderStateForServiceWorker>(); - } else { - state_for_client_ = std::make_unique<ProviderStateForClient>( - std::move(default_loader_factory_getter)); + state_for_client_ = std::make_unique<ProviderStateForClient>( + std::move(default_loader_factory_getter)); + + if (!CanCreateSubresourceLoaderFactory()) + return; + + // S13nServiceWorker: + // Set up the URL loader factory for sending subresource requests to + // the controller. + DCHECK(ServiceWorkerUtils::IsServicificationEnabled()); + if (controller_info) { + SetController(std::move(controller_info), + std::vector<blink::mojom::WebFeature>(), + false /* should_notify_controllerchange */); } } +// For service worker execution contexts. +ServiceWorkerProviderContext::ServiceWorkerProviderContext( + int provider_id, + mojom::ServiceWorkerContainerAssociatedRequest request, + mojom::ServiceWorkerContainerHostAssociatedPtrInfo host_ptr_info) + : provider_type_( + blink::mojom::ServiceWorkerProviderType::kForServiceWorker), + provider_id_(provider_id), + main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()), + binding_(this, std::move(request)), + weak_factory_(this) { + state_for_service_worker_ = std::make_unique<ProviderStateForServiceWorker>(); + + container_host_.Bind(std::move(host_ptr_info)); +} + ServiceWorkerProviderContext::~ServiceWorkerProviderContext() = default; void ServiceWorkerProviderContext::SetRegistrationForServiceWorkerGlobalScope( @@ -157,43 +177,19 @@ DCHECK_NE(state->registration->registration_id, blink::mojom::kInvalidServiceWorkerRegistrationId); - blink::mojom::ServiceWorkerRegistrationObjectInfoPtr info = - std::move(state->registration); - if (state->installing) - info->installing = state->installing->GetInfo(); - else - info->installing = blink::mojom::ServiceWorkerObjectInfo::New(); - if (state->waiting) - info->waiting = state->waiting->GetInfo(); - else - info->waiting = blink::mojom::ServiceWorkerObjectInfo::New(); - if (state->active) - info->active = state->active->GetInfo(); - else - info->active = blink::mojom::ServiceWorkerObjectInfo::New(); - ServiceWorkerDispatcher* dispatcher = ServiceWorkerDispatcher::GetThreadSpecificInstance(); DCHECK(dispatcher); - std::unique_ptr<ServiceWorkerHandleReference> installing = - ServiceWorkerHandleReference::Create(std::move(info->installing), - dispatcher->thread_safe_sender()); - std::unique_ptr<ServiceWorkerHandleReference> waiting = - ServiceWorkerHandleReference::Create(std::move(info->waiting), - dispatcher->thread_safe_sender()); - std::unique_ptr<ServiceWorkerHandleReference> active = - ServiceWorkerHandleReference::Create(std::move(info->active), - dispatcher->thread_safe_sender()); - DCHECK(info->request.is_pending()); + DCHECK(state->registration->request.is_pending()); scoped_refptr<WebServiceWorkerRegistrationImpl> registration = WebServiceWorkerRegistrationImpl::CreateForServiceWorkerGlobalScope( - std::move(info), std::move(io_task_runner)); + std::move(state->registration), std::move(io_task_runner)); registration->SetInstalling( - dispatcher->GetOrCreateServiceWorker(std::move(installing))); + dispatcher->GetOrCreateServiceWorker(std::move(state->installing))); registration->SetWaiting( - dispatcher->GetOrCreateServiceWorker(std::move(waiting))); + dispatcher->GetOrCreateServiceWorker(std::move(state->waiting))); registration->SetActive( - dispatcher->GetOrCreateServiceWorker(std::move(active))); + dispatcher->GetOrCreateServiceWorker(std::move(state->active))); return registration; } @@ -212,9 +208,23 @@ } mojom::URLLoaderFactory* -ServiceWorkerProviderContext::subresource_loader_factory() { +ServiceWorkerProviderContext::GetSubresourceLoaderFactory() { DCHECK(state_for_client_); - return state_for_client_->subresource_loader_factory.get(); + auto* state = state_for_client_.get(); + if (!state->controller_connector || + state->controller_connector->state() == + ControllerServiceWorkerConnector::State::kNoController) { + // No controller is attached. + return nullptr; + } + DCHECK(ServiceWorkerUtils::IsServicificationEnabled()); + if (!state->subresource_loader_factory) { + mojo::MakeStrongBinding( + std::make_unique<ServiceWorkerSubresourceLoaderFactory>( + state->controller_connector, state->default_loader_factory_getter), + mojo::MakeRequest(&state->subresource_loader_factory)); + } + return state->subresource_loader_factory.get(); } mojom::ServiceWorkerContainerHost* @@ -320,7 +330,7 @@ } void ServiceWorkerProviderContext::SetController( - blink::mojom::ServiceWorkerObjectInfoPtr controller, + mojom::ControllerServiceWorkerInfoPtr controller_info, const std::vector<blink::mojom::WebFeature>& used_features, bool should_notify_controllerchange) { DCHECK(main_thread_task_runner_->RunsTasksInCurrentSequence()); @@ -331,6 +341,7 @@ ServiceWorkerDispatcher* dispatcher = ServiceWorkerDispatcher::GetThreadSpecificInstance(); + auto& controller = controller_info->object_info; state->controller_version_id = controller->version_id; state->controller = ServiceWorkerHandleReference::Adopt( std::move(controller), dispatcher->thread_safe_sender()); @@ -346,19 +357,37 @@ for (blink::mojom::WebFeature feature : used_features) state->used_features.insert(feature); - // S13nServiceWorker - // Set up the URL loader factory for sending URL requests to the controller. - if (!ServiceWorkerUtils::IsServicificationEnabled() || !state->controller) { - state->controller_connector = nullptr; - state->subresource_loader_factory = nullptr; - } else { - state->controller_connector = - base::MakeRefCounted<ControllerServiceWorkerConnector>( - container_host_.get()); - mojo::MakeStrongBinding( - std::make_unique<ServiceWorkerSubresourceLoaderFactory>( - state->controller_connector, state->default_loader_factory_getter), - mojo::MakeRequest(&state->subresource_loader_factory)); + // S13nServiceWorker: + // Reset subresource loader factory if necessary. + if (CanCreateSubresourceLoaderFactory()) { + DCHECK(ServiceWorkerUtils::IsServicificationEnabled()); + + // There could be four patterns: + // (A) Had a controller, and got a new controller. + // (B) Had a controller, and lost the controller. + // (C) Didn't have a controller, and got a new controller. + // (D) Didn't have a controller, and lost the controller (nothing to do). + if (state->controller_connector) { + // Used to have a controller at least once. + // Reset the existing connector so that subsequent resource requests + // will get the new controller in case (A)/(C), or fallback to the + // network in case (B). Inflight requests that are already dispatched may + // just use the existing controller or may use the new controller + // settings depending on when the request is actually passed to the + // factory (this part is inherently racy). + state->controller_connector->ResetControllerConnection( + mojom::ControllerServiceWorkerPtr( + std::move(controller_info->endpoint))); + } else if (state->controller) { + // Case (C): never had a controller, but got a new one now. + // Set a new |state->controller_connector| so that subsequent resource + // requests will see it. + mojom::ControllerServiceWorkerPtr controller_ptr( + std::move(controller_info->endpoint)); + state->controller_connector = + base::MakeRefCounted<ControllerServiceWorkerConnector>( + container_host_.get(), std::move(controller_ptr)); + } } // The WebServiceWorkerProviderImpl might not exist yet because the document @@ -377,12 +406,17 @@ const base::string16& message, std::vector<mojo::ScopedMessagePipeHandle> message_pipes) { DCHECK(main_thread_task_runner_->RunsTasksInCurrentSequence()); + ServiceWorkerDispatcher* dispatcher = + ServiceWorkerDispatcher::GetThreadSpecificInstance(); + std::unique_ptr<ServiceWorkerHandleReference> source_handle = + ServiceWorkerHandleReference::Adopt(std::move(source), + dispatcher->thread_safe_sender()); + ProviderStateForClient* state = state_for_client_.get(); DCHECK(state); - if (state->web_service_worker_provider) { state->web_service_worker_provider->PostMessageToClient( - std::move(source), message, std::move(message_pipes)); + std::move(source_handle), message, std::move(message_pipes)); } } @@ -423,6 +457,17 @@ } } +bool ServiceWorkerProviderContext::CanCreateSubresourceLoaderFactory() const { + // Expected that it is called only for clients. + DCHECK(state_for_client_); + // |state_for_client_->default_loader_factory_getter| could be null + // for SharedWorker case (which is not supported by S13nServiceWorker + // yet, https://crbug.com/796819) and in unit tests, return early in such + // cases too. + return (ServiceWorkerUtils::IsServicificationEnabled() && + state_for_client_->default_loader_factory_getter); +} + void ServiceWorkerProviderContext::DestructOnMainThread() const { if (!main_thread_task_runner_->RunsTasksInCurrentSequence() && main_thread_task_runner_->DeleteSoon(FROM_HERE, this)) {
diff --git a/content/renderer/service_worker/service_worker_provider_context.h b/content/renderer/service_worker/service_worker_provider_context.h index 074cb65f..3e03cc2 100644 --- a/content/renderer/service_worker/service_worker_provider_context.h +++ b/content/renderer/service_worker/service_worker_provider_context.h
@@ -12,6 +12,7 @@ #include "base/memory/weak_ptr.h" #include "base/sequenced_task_runner_helpers.h" #include "content/common/content_export.h" +#include "content/common/service_worker/controller_service_worker.mojom.h" #include "content/common/service_worker/service_worker_container.mojom.h" #include "content/common/service_worker/service_worker_provider.mojom.h" #include "content/public/renderer/child_url_loader_factory_getter.h" @@ -58,12 +59,16 @@ ServiceWorkerProviderContextDeleter>, public mojom::ServiceWorkerContainer { public: + // Constructor for service worker clients. + // // |provider_id| is used to identify this provider in IPC messages to the // browser process. |request| is an endpoint which is connected to // the content::ServiceWorkerProviderHost that notifies of changes to the // registration's and workers' status. |request| is bound with |binding_|. // // For S13nServiceWorker: + // |controller_info| contains the endpoint and object info that is needed to + // set up the controller service worker for the client. // |default_loader_factory_getter| contains a set of default loader // factories for the associated loading context, and is used when we // create a subresource loader for controllees. This is non-null only @@ -74,8 +79,15 @@ blink::mojom::ServiceWorkerProviderType provider_type, mojom::ServiceWorkerContainerAssociatedRequest request, mojom::ServiceWorkerContainerHostAssociatedPtrInfo host_ptr_info, + mojom::ControllerServiceWorkerInfoPtr controller_info, scoped_refptr<ChildURLLoaderFactoryGetter> default_loader_factory_getter); + // Constructor for service worker execution contexts. + ServiceWorkerProviderContext( + int provider_id, + mojom::ServiceWorkerContainerAssociatedRequest request, + mojom::ServiceWorkerContainerHostAssociatedPtrInfo host_ptr_info); + blink::mojom::ServiceWorkerProviderType provider_type() const { return provider_type_; } @@ -118,8 +130,9 @@ // S13nServiceWorker: // For service worker clients. Returns URLLoaderFactory for loading - // subresources with the controller ServiceWorker. - mojom::URLLoaderFactory* subresource_loader_factory(); + // subresources with the controller ServiceWorker, or nullptr if + // no controller is attached. + mojom::URLLoaderFactory* GetSubresourceLoaderFactory(); // For service worker clients. Returns the feature usage of its controller. const std::set<blink::mojom::WebFeature>& used_features() const; @@ -192,7 +205,7 @@ void UnregisterWorkerFetchContext(mojom::ServiceWorkerWorkerClient*); // Implementation of mojom::ServiceWorkerContainer. - void SetController(blink::mojom::ServiceWorkerObjectInfoPtr controller, + void SetController(mojom::ControllerServiceWorkerInfoPtr controller_info, const std::vector<blink::mojom::WebFeature>& used_features, bool should_notify_controllerchange) override; void PostMessageToClient( @@ -209,6 +222,12 @@ void RemoveServiceWorkerRegistration(int64_t registration_id); bool ContainsServiceWorkerRegistrationForTesting(int64_t registration_id); + // S13nServiceWorker: + // For service worker clients. + // A convenient utility method to tell if a subresource loader factory + // can be created for this client. + bool CanCreateSubresourceLoaderFactory() const; + const blink::mojom::ServiceWorkerProviderType provider_type_; const int provider_id_; scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner_;
diff --git a/content/renderer/service_worker/service_worker_provider_context_unittest.cc b/content/renderer/service_worker/service_worker_provider_context_unittest.cc index 6c57da2..bb7ef0f 100644 --- a/content/renderer/service_worker/service_worker_provider_context_unittest.cc +++ b/content/renderer/service_worker/service_worker_provider_context_unittest.cc
@@ -9,12 +9,18 @@ #include "base/macros.h" #include "base/message_loop/message_loop.h" #include "base/run_loop.h" +#include "base/test/scoped_feature_list.h" #include "content/child/thread_safe_sender.h" #include "content/common/service_worker/service_worker_container.mojom.h" #include "content/common/service_worker/service_worker_messages.h" #include "content/common/service_worker/service_worker_types.h" +#include "content/public/common/content_features.h" +#include "content/public/common/resource_type.h" #include "content/public/common/url_loader_factory.mojom.h" #include "content/public/renderer/child_url_loader_factory_getter.h" +#include "content/public/test/test_url_loader_client.h" +#include "content/renderer/loader/child_url_loader_factory_getter_impl.h" +#include "content/renderer/service_worker/controller_service_worker_connector.h" #include "content/renderer/service_worker/service_worker_dispatcher.h" #include "content/renderer/service_worker/service_worker_handle_reference.h" #include "content/renderer/service_worker/service_worker_provider_context.h" @@ -23,6 +29,7 @@ #include "ipc/ipc_sync_message_filter.h" #include "ipc/ipc_test_sink.h" #include "mojo/public/cpp/bindings/associated_binding_set.h" +#include "net/traffic_annotation/network_traffic_annotation_test_helper.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/WebKit/common/service_worker/service_worker_error_type.mojom.h" #include "third_party/WebKit/common/service_worker/service_worker_provider_type.mojom.h" @@ -156,6 +163,79 @@ DISALLOW_COPY_AND_ASSIGN(ServiceWorkerTestSender); }; +// S13nServiceWorker: a fake URLLoaderFactory implementation that basically +// does nothing but records the requests. +class FakeURLLoaderFactory final : public mojom::URLLoaderFactory { + public: + FakeURLLoaderFactory() = default; + ~FakeURLLoaderFactory() override = default; + + void AddBinding(mojom::URLLoaderFactoryRequest request) { + bindings_.AddBinding(this, std::move(request)); + } + + // mojom::URLLoaderFactory: + void CreateLoaderAndStart(mojom::URLLoaderRequest request, + int32_t routing_id, + int32_t request_id, + uint32_t options, + const ResourceRequest& url_request, + mojom::URLLoaderClientPtr client, + const net::MutableNetworkTrafficAnnotationTag& + traffic_annotation) override { + // Does nothing, but just record the request and hold the client (to avoid + // connection errors). + last_url_ = url_request.url; + clients_.push_back(std::move(client)); + } + void Clone(mojom::URLLoaderFactoryRequest factory) override { NOTREACHED(); } + + size_t clients_count() const { return clients_.size(); } + GURL last_request_url() const { return last_url_; } + + private: + mojo::BindingSet<mojom::URLLoaderFactory> bindings_; + std::vector<mojom::URLLoaderClientPtr> clients_; + GURL last_url_; + + DISALLOW_COPY_AND_ASSIGN(FakeURLLoaderFactory); +}; + +// S13nServiceWorker: a fake ControllerServiceWorker implementation that +// basically does nothing but records DispatchFetchEvent calls. +class FakeControllerServiceWorker : public mojom::ControllerServiceWorker { + public: + FakeControllerServiceWorker() = default; + ~FakeControllerServiceWorker() override = default; + + // mojom::ControllerServiceWorker: + void DispatchFetchEvent( + const ResourceRequest& request, + mojom::ServiceWorkerFetchResponseCallbackPtr response_callback, + DispatchFetchEventCallback callback) override { + fetch_event_count_++; + fetch_event_request_ = request; + std::move(callback).Run(blink::mojom::ServiceWorkerEventStatus::COMPLETED, + base::Time()); + } + void Clone(mojom::ControllerServiceWorkerRequest request) override { + bindings_.AddBinding(this, std::move(request)); + } + + int fetch_event_count() const { return fetch_event_count_; } + const ResourceRequest& fetch_event_request() const { + return fetch_event_request_; + } + + private: + int fetch_event_count_ = 0; + ResourceRequest fetch_event_request_; + base::OnceClosure fetch_event_callback_; + mojo::BindingSet<mojom::ControllerServiceWorker> bindings_; + + DISALLOW_COPY_AND_ASSIGN(FakeControllerServiceWorker); +}; + class ServiceWorkerProviderContextTest : public testing::Test { public: ServiceWorkerProviderContextTest() = default; @@ -165,6 +245,15 @@ dispatcher_.reset(new ServiceWorkerDispatcher(sender_.get(), nullptr)); } + void EnableS13nServiceWorker() { + scoped_feature_list_.InitAndEnableFeature(features::kNetworkService); + mojom::URLLoaderFactoryPtr fake_loader_factory; + fake_loader_factory_.AddBinding(MakeRequest(&fake_loader_factory)); + loader_factory_getter_ = + base::MakeRefCounted<ChildURLLoaderFactoryGetterImpl>( + std::move(fake_loader_factory), nullptr); + } + blink::mojom::ServiceWorkerRegistrationObjectInfoPtr CreateServiceWorkerRegistrationObjectInfo() { auto info = blink::mojom::ServiceWorkerRegistrationObjectInfo::New(); @@ -186,6 +275,20 @@ return info; } + void StartRequest(mojom::URLLoaderFactory* factory, const GURL& url) { + ResourceRequest request; + request.url = url; + request.resource_type = static_cast<int>(RESOURCE_TYPE_SUB_RESOURCE); + mojom::URLLoaderPtr loader; + TestURLLoaderClient loader_client; + factory->CreateLoaderAndStart( + mojo::MakeRequest(&loader), 0, 0, mojom::kURLLoadOptionNone, request, + loader_client.CreateInterfacePtr(), + net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS)); + // Need to run one more loop to make a Mojo call. + base::RunLoop().RunUntilIdle(); + } + bool ContainsRegistration(ServiceWorkerProviderContext* provider_context, int64_t registration_id) { return provider_context->ContainsServiceWorkerRegistrationForTesting( @@ -199,13 +302,18 @@ return remote_registration_object_host_; } - private: + protected: base::MessageLoop message_loop_; IPC::TestSink ipc_sink_; std::unique_ptr<ServiceWorkerDispatcher> dispatcher_; scoped_refptr<ServiceWorkerTestSender> sender_; MockServiceWorkerRegistrationObjectHost remote_registration_object_host_; + // S13nServiceWorker: + base::test::ScopedFeatureList scoped_feature_list_; + FakeURLLoaderFactory fake_loader_factory_; + scoped_refptr<ChildURLLoaderFactoryGetter> loader_factory_getter_; + DISALLOW_COPY_AND_ASSIGN(ServiceWorkerProviderContextTest); }; @@ -220,8 +328,7 @@ // Set up ServiceWorkerProviderContext for ServiceWorkerGlobalScope. const int kProviderId = 10; auto provider_context = base::MakeRefCounted<ServiceWorkerProviderContext>( - kProviderId, blink::mojom::ServiceWorkerProviderType::kForServiceWorker, - nullptr, nullptr, nullptr /* loader_factory_getter */); + kProviderId, nullptr, nullptr); // The passed references should be adopted and owned by the provider context. provider_context->SetRegistrationForServiceWorkerGlobalScope( @@ -264,10 +371,12 @@ auto provider_context = base::MakeRefCounted<ServiceWorkerProviderContext>( kProviderId, blink::mojom::ServiceWorkerProviderType::kForWindow, std::move(container_request), nullptr /* host_ptr_info */, - nullptr /* loader_factory_getter */); + nullptr /* controller_info */, nullptr /* loader_factory_getter */); ipc_sink()->ClearMessages(); - container_ptr->SetController(std::move(registration_info->active), + auto info = mojom::ControllerServiceWorkerInfo::New(); + info->object_info = std::move(registration_info->active); + container_ptr->SetController(std::move(info), std::vector<blink::mojom::WebFeature>(), true); base::RunLoop().RunUntilIdle(); EXPECT_EQ(0UL, ipc_sink()->message_count()); @@ -303,7 +412,7 @@ auto provider_context = base::MakeRefCounted<ServiceWorkerProviderContext>( kProviderId, blink::mojom::ServiceWorkerProviderType::kForWindow, std::move(container_request), std::move(host_ptr_info), - nullptr /* loader_factory_getter */); + nullptr /* controller_info */, nullptr /* loader_factory_getter */); auto provider_impl = std::make_unique<WebServiceWorkerProviderImpl>( thread_safe_sender(), provider_context.get()); auto client = std::make_unique<MockWebServiceWorkerProviderClientImpl>(); @@ -311,7 +420,9 @@ ASSERT_FALSE(client->was_set_controller_called()); ipc_sink()->ClearMessages(); - container_ptr->SetController(std::move(registration_info->active), + auto info = mojom::ControllerServiceWorkerInfo::New(); + info->object_info = std::move(registration_info->active); + container_ptr->SetController(std::move(info), std::vector<blink::mojom::WebFeature>(), true); base::RunLoop().RunUntilIdle(); @@ -338,13 +449,15 @@ auto provider_context = base::MakeRefCounted<ServiceWorkerProviderContext>( kProviderId, blink::mojom::ServiceWorkerProviderType::kForWindow, std::move(container_request), std::move(host_ptr_info), - nullptr /* loader_factory_getter */); + nullptr /* controller_info */, nullptr /* loader_factory_getter */); auto provider_impl = std::make_unique<WebServiceWorkerProviderImpl>( thread_safe_sender(), provider_context.get()); auto client = std::make_unique<MockWebServiceWorkerProviderClientImpl>(); provider_impl->SetClient(client.get()); - container_ptr->SetController(blink::mojom::ServiceWorkerObjectInfo::New(), + auto info = mojom::ControllerServiceWorkerInfo::New(); + info->object_info = blink::mojom::ServiceWorkerObjectInfo::New(); + container_ptr->SetController(std::move(info), std::vector<blink::mojom::WebFeature>(), true); base::RunLoop().RunUntilIdle(); @@ -352,6 +465,146 @@ EXPECT_TRUE(client->was_set_controller_called()); } +// S13nServiceWorker: Test that SetController correctly sets (or resets) +// the controller service worker for clients. +TEST_F(ServiceWorkerProviderContextTest, SetControllerServiceWorker) { + EnableS13nServiceWorker(); + const int kProviderId = 10; + + // Assume that these objects are passed from the browser process and own + // references to browser-side registration/worker representations. + blink::mojom::ServiceWorkerRegistrationObjectInfoPtr registration_info = + CreateServiceWorkerRegistrationObjectInfo(); + + // (1) Test if setting the controller via the CTOR works. + FakeControllerServiceWorker fake_controller1; + auto controller_info1 = mojom::ControllerServiceWorkerInfo::New(); + mojom::ControllerServiceWorkerPtr controller_ptr1; + fake_controller1.Clone(mojo::MakeRequest(&controller_ptr1)); + controller_info1->object_info = std::move(registration_info->active); + controller_info1->endpoint = controller_ptr1.PassInterface(); + + mojom::ServiceWorkerContainerAssociatedPtr container_ptr; + mojom::ServiceWorkerContainerAssociatedRequest container_request = + mojo::MakeRequestAssociatedWithDedicatedPipe(&container_ptr); + auto provider_context = base::MakeRefCounted<ServiceWorkerProviderContext>( + kProviderId, blink::mojom::ServiceWorkerProviderType::kForWindow, + std::move(container_request), nullptr /* host_ptr_info */, + std::move(controller_info1), loader_factory_getter_); + ipc_sink()->ClearMessages(); + base::RunLoop().RunUntilIdle(); + EXPECT_EQ(0UL, ipc_sink()->message_count()); + + // Subresource loader factory must be available. + auto* subresource_loader_factory1 = + provider_context->GetSubresourceLoaderFactory(); + ASSERT_NE(nullptr, subresource_loader_factory1); + + // Performing a request should reach the controller. + const GURL kURL1("https://www.example.com/foo.png"); + StartRequest(subresource_loader_factory1, kURL1); + EXPECT_EQ(kURL1, fake_controller1.fetch_event_request().url); + EXPECT_EQ(1, fake_controller1.fetch_event_count()); + + // (2) Test if resetting the controller to a new one via SetController + // works. + FakeControllerServiceWorker fake_controller2; + auto controller_info2 = mojom::ControllerServiceWorkerInfo::New(); + mojom::ControllerServiceWorkerPtr controller_ptr2; + fake_controller2.Clone(mojo::MakeRequest(&controller_ptr2)); + controller_info2->object_info = std::move(registration_info->waiting); + controller_info2->endpoint = controller_ptr2.PassInterface(); + container_ptr->SetController(std::move(controller_info2), + std::vector<blink::mojom::WebFeature>(), true); + + // The controller is reset. References to the old controller must be + // released. + ipc_sink()->ClearMessages(); + base::RunLoop().RunUntilIdle(); + EXPECT_EQ(1UL, ipc_sink()->message_count()); + EXPECT_EQ(static_cast<uint32_t>( + ServiceWorkerHostMsg_DecrementServiceWorkerRefCount::ID), + ipc_sink()->GetMessageAt(0)->type()); + + // Subresource loader factory must be available, and should be the same + // one as we got before. + auto* subresource_loader_factory2 = + provider_context->GetSubresourceLoaderFactory(); + ASSERT_NE(nullptr, subresource_loader_factory2); + EXPECT_EQ(subresource_loader_factory1, subresource_loader_factory2); + + // Performing a request should reach the new controller. + const GURL kURL2("https://www.example.com/foo2.png"); + StartRequest(subresource_loader_factory2, kURL2); + EXPECT_EQ(kURL2, fake_controller2.fetch_event_request().url); + EXPECT_EQ(1, fake_controller2.fetch_event_count()); + // The request should not go to the previous controller. + EXPECT_EQ(1, fake_controller1.fetch_event_count()); + + // (3) Test if resetting the controller to nullptr works. + auto controller_info3 = mojom::ControllerServiceWorkerInfo::New(); + controller_info3->object_info = blink::mojom::ServiceWorkerObjectInfo::New(); + container_ptr->SetController(std::move(controller_info3), + std::vector<blink::mojom::WebFeature>(), true); + + // The controller is reset. References to the old controller must be + // released. + ipc_sink()->ClearMessages(); + base::RunLoop().RunUntilIdle(); + EXPECT_EQ(1UL, ipc_sink()->message_count()); + EXPECT_EQ(static_cast<uint32_t>( + ServiceWorkerHostMsg_DecrementServiceWorkerRefCount::ID), + ipc_sink()->GetMessageAt(0)->type()); + + // Subresource loader factory must not be available. + EXPECT_EQ(nullptr, provider_context->GetSubresourceLoaderFactory()); + + // Performing a request using the subresource factory obtained before + // falls back to the network. + const GURL kURL3("https://www.example.com/foo3.png"); + EXPECT_EQ(0UL, fake_loader_factory_.clients_count()); + StartRequest(subresource_loader_factory2, kURL3); + EXPECT_EQ(kURL3, fake_loader_factory_.last_request_url()); + EXPECT_EQ(1UL, fake_loader_factory_.clients_count()); + + // The request should not go to the previous controllers. + EXPECT_EQ(1, fake_controller1.fetch_event_count()); + EXPECT_EQ(1, fake_controller2.fetch_event_count()); + + // (4) Test if resetting the controller to yet another one via SetController + // works. + FakeControllerServiceWorker fake_controller4; + auto controller_info4 = mojom::ControllerServiceWorkerInfo::New(); + mojom::ControllerServiceWorkerPtr controller_ptr4; + fake_controller4.Clone(mojo::MakeRequest(&controller_ptr4)); + controller_info4->object_info = blink::mojom::ServiceWorkerObjectInfo::New(); + controller_info4->object_info->handle_id = 103; + controller_info4->object_info->version_id = 203; + controller_info4->endpoint = controller_ptr4.PassInterface(); + container_ptr->SetController(std::move(controller_info4), + std::vector<blink::mojom::WebFeature>(), true); + ipc_sink()->ClearMessages(); + base::RunLoop().RunUntilIdle(); + EXPECT_EQ(0UL, ipc_sink()->message_count()); + + // Subresource loader factory must be available. + auto* subresource_loader_factory4 = + provider_context->GetSubresourceLoaderFactory(); + ASSERT_NE(nullptr, subresource_loader_factory4); + + // Performing a request should reach the new controller. + const GURL kURL4("https://www.example.com/foo4.png"); + StartRequest(subresource_loader_factory4, kURL4); + EXPECT_EQ(kURL4, fake_controller4.fetch_event_request().url); + EXPECT_EQ(1, fake_controller4.fetch_event_count()); + + // The request should not go to the previous controllers. + EXPECT_EQ(1, fake_controller1.fetch_event_count()); + EXPECT_EQ(1, fake_controller2.fetch_event_count()); + // The request should not go to the network. + EXPECT_EQ(1UL, fake_loader_factory_.clients_count()); +} + TEST_F(ServiceWorkerProviderContextTest, PostMessageToClient) { const int kProviderId = 10; @@ -370,7 +623,7 @@ auto provider_context = base::MakeRefCounted<ServiceWorkerProviderContext>( kProviderId, blink::mojom::ServiceWorkerProviderType::kForWindow, std::move(container_request), std::move(host_ptr_info), - nullptr /* loader_factory_getter */); + nullptr /* controller_info */, nullptr /* loader_factory_getter */); auto provider_impl = std::make_unique<WebServiceWorkerProviderImpl>( thread_safe_sender(), provider_context.get()); auto client = std::make_unique<MockWebServiceWorkerProviderClientImpl>(); @@ -384,16 +637,12 @@ base::RunLoop().RunUntilIdle(); // The passed reference should be owned by the provider client (but the - // reference is immediately released due to limitation of the mock provider - // client. See the comment on dispatchMessageEvent() of the mock). + // reference is immediately released by the mock provider client). EXPECT_TRUE(client->was_dispatch_message_event_called()); - ASSERT_EQ(2UL, ipc_sink()->message_count()); - EXPECT_EQ(static_cast<uint32_t>( - ServiceWorkerHostMsg_IncrementServiceWorkerRefCount::ID), - ipc_sink()->GetMessageAt(0)->type()); + ASSERT_EQ(1UL, ipc_sink()->message_count()); EXPECT_EQ(static_cast<uint32_t>( ServiceWorkerHostMsg_DecrementServiceWorkerRefCount::ID), - ipc_sink()->GetMessageAt(1)->type()); + ipc_sink()->GetMessageAt(0)->type()); } TEST_F(ServiceWorkerProviderContextTest, CountFeature) { @@ -409,7 +658,7 @@ auto provider_context = base::MakeRefCounted<ServiceWorkerProviderContext>( kProviderId, blink::mojom::ServiceWorkerProviderType::kForWindow, std::move(container_request), std::move(host_ptr_info), - nullptr /* loader_factory_getter */); + nullptr /* controller_info */, nullptr /* loader_factory_getter */); auto provider_impl = std::make_unique<WebServiceWorkerProviderImpl>( thread_safe_sender(), provider_context.get()); auto client = std::make_unique<MockWebServiceWorkerProviderClientImpl>(); @@ -436,8 +685,7 @@ // Set up ServiceWorkerProviderContext for ServiceWorkerGlobalScope. const int kProviderId = 10; auto provider_context = base::MakeRefCounted<ServiceWorkerProviderContext>( - kProviderId, blink::mojom::ServiceWorkerProviderType::kForServiceWorker, - nullptr, nullptr, nullptr /* loader_factory_getter */); + kProviderId, nullptr, nullptr); blink::mojom::ServiceWorkerRegistrationObjectInfoPtr info = CreateServiceWorkerRegistrationObjectInfo(); @@ -448,27 +696,18 @@ std::move(info), thread_safe_sender()); EXPECT_EQ(0UL, ipc_sink()->message_count()); - // Should return a registration object newly created with incrementing - // the refcounts. + // Should return a newly created registration object which adopts all + // references to the remote instances of ServiceWorkerRegistrationObjectHost + // and ServiceWorkerHandle in the browser process. scoped_refptr<WebServiceWorkerRegistrationImpl> registration = provider_context->TakeRegistrationForServiceWorkerGlobalScope( blink::scheduler::GetSingleThreadTaskRunnerForTesting()); EXPECT_TRUE(registration); EXPECT_EQ(registration_id, registration->RegistrationId()); EXPECT_EQ(1, remote_registration_object_host().GetBindingCount()); - ASSERT_EQ(3UL, ipc_sink()->message_count()); - EXPECT_EQ(static_cast<uint32_t>( - ServiceWorkerHostMsg_IncrementServiceWorkerRefCount::ID), - ipc_sink()->GetMessageAt(0)->type()); - EXPECT_EQ(static_cast<uint32_t>( - ServiceWorkerHostMsg_IncrementServiceWorkerRefCount::ID), - ipc_sink()->GetMessageAt(1)->type()); - EXPECT_EQ(static_cast<uint32_t>( - ServiceWorkerHostMsg_IncrementServiceWorkerRefCount::ID), - ipc_sink()->GetMessageAt(2)->type()); + ASSERT_EQ(0UL, ipc_sink()->message_count()); ipc_sink()->ClearMessages(); - // The registration dtor decrements the refcounts. registration = nullptr; ASSERT_EQ(3UL, ipc_sink()->message_count()); @@ -494,7 +733,8 @@ const int kProviderId = 10; auto provider_context = base::MakeRefCounted<ServiceWorkerProviderContext>( kProviderId, blink::mojom::ServiceWorkerProviderType::kForWindow, nullptr, - nullptr, nullptr /* loader_factory_getter */); + nullptr, nullptr /* controller_info */, + nullptr /* loader_factory_getter */); { blink::mojom::ServiceWorkerRegistrationObjectInfoPtr info =
diff --git a/content/renderer/service_worker/service_worker_subresource_loader.cc b/content/renderer/service_worker/service_worker_subresource_loader.cc index bd9392c..9a2ad67 100644 --- a/content/renderer/service_worker/service_worker_subresource_loader.cc +++ b/content/renderer/service_worker/service_worker_subresource_loader.cc
@@ -207,6 +207,21 @@ // the network provider has already been discarded. In that case, We don't // need to return an error as the client must be shutting down. if (!controller) { + auto controller_state = controller_connector_->state(); + if (controller_state == + ControllerServiceWorkerConnector::State::kNoController) { + // The controller was lost after this loader or its loader factory was + // created. + default_loader_factory_getter_->GetNetworkLoaderFactory() + ->CreateLoaderAndStart(url_loader_binding_.Unbind(), routing_id_, + request_id_, options_, resource_request_, + std::move(url_loader_client_), + traffic_annotation_); + DeleteSoon(); + return; + } + DCHECK_EQ(ControllerServiceWorkerConnector::State::kNoContainerHost, + controller_state); SettleInflightFetchRequestIfNeeded(); return; }
diff --git a/content/renderer/service_worker/service_worker_subresource_loader_unittest.cc b/content/renderer/service_worker/service_worker_subresource_loader_unittest.cc index d1638422..12ceda44 100644 --- a/content/renderer/service_worker/service_worker_subresource_loader_unittest.cc +++ b/content/renderer/service_worker/service_worker_subresource_loader_unittest.cc
@@ -318,10 +318,12 @@ std::unique_ptr<ServiceWorkerSubresourceLoaderFactory> CreateSubresourceLoaderFactory() { - auto connector = base::MakeRefCounted<ControllerServiceWorkerConnector>( - &fake_container_host_); + if (!connector_) { + connector_ = base::MakeRefCounted<ControllerServiceWorkerConnector>( + &fake_container_host_); + } return std::make_unique<ServiceWorkerSubresourceLoaderFactory>( - connector, loader_factory_getter_); + connector_, loader_factory_getter_); } // Starts |request| using |loader_factory| and sets |out_loader| and @@ -350,6 +352,7 @@ TestBrowserThreadBundle thread_bundle_; scoped_refptr<ChildURLLoaderFactoryGetter> loader_factory_getter_; + scoped_refptr<ControllerServiceWorkerConnector> connector_; FakeServiceWorkerContainerHost fake_container_host_; FakeControllerServiceWorker fake_controller_; @@ -448,6 +451,45 @@ } } +TEST_F(ServiceWorkerSubresourceLoaderTest, NoController) { + const GURL kScope("https://www.example.com/"); + std::unique_ptr<ServiceWorkerSubresourceLoaderFactory> factory = + CreateSubresourceLoaderFactory(); + { + ResourceRequest request = + CreateRequest(GURL("https://www.example.com/foo.png")); + mojom::URLLoaderPtr loader; + std::unique_ptr<TestURLLoaderClient> client; + StartRequest(factory.get(), request, &loader, &client); + fake_controller_.RunUntilFetchEvent(); + + EXPECT_EQ(request.url, fake_controller_.fetch_event_request().url); + EXPECT_EQ(request.method, fake_controller_.fetch_event_request().method); + EXPECT_EQ(1, fake_controller_.fetch_event_count()); + EXPECT_EQ(1, fake_container_host_.get_controller_service_worker_count()); + } + + // Make the connector have no controller. + connector_->ResetControllerConnection(nullptr); + base::RunLoop().RunUntilIdle(); + + { + // This should fallback to the network. + ResourceRequest request = + CreateRequest(GURL("https://www.example.com/foo2.png")); + mojom::URLLoaderPtr loader; + std::unique_ptr<TestURLLoaderClient> client; + StartRequest(factory.get(), request, &loader, &client); + client->RunUntilComplete(); + + EXPECT_TRUE(client->has_received_completion()); + EXPECT_FALSE(client->response_head().was_fetched_via_service_worker); + + EXPECT_EQ(1, fake_controller_.fetch_event_count()); + EXPECT_EQ(1, fake_container_host_.get_controller_service_worker_count()); + } +} + TEST_F(ServiceWorkerSubresourceLoaderTest, DropController_RestartFetchEvent) { const GURL kScope("https://www.example.com/"); std::unique_ptr<ServiceWorkerSubresourceLoaderFactory> factory =
diff --git a/content/renderer/service_worker/web_service_worker_provider_impl.cc b/content/renderer/service_worker/web_service_worker_provider_impl.cc index 05549cc8..8264f15 100644 --- a/content/renderer/service_worker/web_service_worker_provider_impl.cc +++ b/content/renderer/service_worker/web_service_worker_provider_impl.cc
@@ -205,20 +205,18 @@ } void WebServiceWorkerProviderImpl::PostMessageToClient( - blink::mojom::ServiceWorkerObjectInfoPtr source, + std::unique_ptr<ServiceWorkerHandleReference> source_handle, const base::string16& message, std::vector<mojo::ScopedMessagePipeHandle> message_pipes) { if (!provider_client_) return; - scoped_refptr<WebServiceWorkerImpl> worker = - GetDispatcher()->GetOrCreateServiceWorker( - ServiceWorkerHandleReference::Create(std::move(source), - thread_safe_sender_.get())); + scoped_refptr<WebServiceWorkerImpl> source_worker = + GetDispatcher()->GetOrCreateServiceWorker(std::move(source_handle)); auto message_ports = blink::MessagePortChannel::CreateFromHandles(std::move(message_pipes)); provider_client_->DispatchMessageEvent( - WebServiceWorkerImpl::CreateHandle(std::move(worker)), + WebServiceWorkerImpl::CreateHandle(std::move(source_worker)), blink::WebString::FromUTF16(message), std::move(message_ports)); }
diff --git a/content/renderer/service_worker/web_service_worker_provider_impl.h b/content/renderer/service_worker/web_service_worker_provider_impl.h index cb4ebb8..ef1ed83 100644 --- a/content/renderer/service_worker/web_service_worker_provider_impl.h +++ b/content/renderer/service_worker/web_service_worker_provider_impl.h
@@ -65,7 +65,7 @@ // Posts a message to the ServiceWorkerContainer for this provider. // Corresponds to Client#postMessage(). void PostMessageToClient( - blink::mojom::ServiceWorkerObjectInfoPtr source, + std::unique_ptr<ServiceWorkerHandleReference> source_handle, const base::string16& message, std::vector<mojo::ScopedMessagePipeHandle> message_pipes); // For UseCounter purposes. Called when the controller service worker used a
diff --git a/content/shell/app/shell_main_delegate.cc b/content/shell/app/shell_main_delegate.cc index fa6b67bd..83eee06 100644 --- a/content/shell/app/shell_main_delegate.cc +++ b/content/shell/app/shell_main_delegate.cc
@@ -180,6 +180,7 @@ return true; } #endif + command_line.AppendSwitch(switches::kDisableResizeLock); command_line.AppendSwitch(cc::switches::kEnableGpuBenchmarking); command_line.AppendSwitch(switches::kEnableLogging); command_line.AppendSwitch(switches::kAllowFileAccessFromFiles);
diff --git a/content/test/gpu/gpu_tests/pixel_expectations.py b/content/test/gpu/gpu_tests/pixel_expectations.py index 7cde271..a377c98 100644 --- a/content/test/gpu/gpu_tests/pixel_expectations.py +++ b/content/test/gpu/gpu_tests/pixel_expectations.py
@@ -102,5 +102,5 @@ # Temporary supression to rebaseline Video tests on Windows with the # passthrough command decoder - self.Fail('Pixel_DirectComposition_Video_MP4', ['win'], bug=602688) - self.Fail('Pixel_DirectComposition_Video_VP9', ['win'], bug=602688) + self.Fail('Pixel_Video_MP4', ['win', 'intel'], bug=602688) + self.Fail('Pixel_Video_VP9', ['win', 'intel'], bug=602688)
diff --git a/content/test/test_render_frame.cc b/content/test/test_render_frame.cc index bbf2703..5611c607 100644 --- a/content/test/test_render_frame.cc +++ b/content/test/test_render_frame.cc
@@ -140,7 +140,9 @@ const RequestNavigationParams& request_params) { CommitNavigation(ResourceResponseHead(), GURL(), common_params, request_params, mojom::URLLoaderClientEndpointsPtr(), - URLLoaderFactoryBundle(), base::UnguessableToken::Create()); + URLLoaderFactoryBundle(), + mojom::ControllerServiceWorkerInfoPtr(), + base::UnguessableToken::Create()); } void TestRenderFrame::SwapOut(
diff --git a/content/test/test_render_frame_host.cc b/content/test/test_render_frame_host.cc index b7f3f197..96ec63c 100644 --- a/content/test/test_render_frame_host.cc +++ b/content/test/test_render_frame_host.cc
@@ -65,12 +65,14 @@ const RequestNavigationParams& request_params, mojom::URLLoaderClientEndpointsPtr url_loader_client_endpoints, base::Optional<URLLoaderFactoryBundle> subresource_loader_factories, + mojom::ControllerServiceWorkerInfoPtr controller_service_worker, const base::UnguessableToken& devtools_navigation_token) override { frame_host_->GetProcess()->set_did_frame_commit_navigation(true); frame_host_->GetInternalNavigationControl()->CommitNavigation( head, body_url, common_params, request_params, std::move(url_loader_client_endpoints), - std::move(subresource_loader_factories), devtools_navigation_token); + std::move(subresource_loader_factories), + std::move(controller_service_worker), devtools_navigation_token); } void CommitFailedNavigation(
diff --git a/device/gamepad/BUILD.gn b/device/gamepad/BUILD.gn index 3a73192..96a18d7 100644 --- a/device/gamepad/BUILD.gn +++ b/device/gamepad/BUILD.gn
@@ -17,6 +17,8 @@ "abstract_haptic_gamepad.h", "dualshock4_controller_base.cc", "dualshock4_controller_base.h", + "dualshock4_controller_linux.cc", + "dualshock4_controller_linux.h", "game_controller_data_fetcher_mac.h", "game_controller_data_fetcher_mac.mm", "gamepad_consumer.cc", @@ -58,10 +60,14 @@ "gamepad_user_gesture.h", "raw_input_data_fetcher_win.cc", "raw_input_data_fetcher_win.h", + "udev_gamepad_linux.cc", + "udev_gamepad_linux.h", "xbox_controller_mac.h", "xbox_controller_mac.mm", "xbox_data_fetcher_mac.cc", "xbox_data_fetcher_mac.h", + "xinput_haptic_gamepad_win.cc", + "xinput_haptic_gamepad_win.h", ] deps = [ @@ -87,6 +93,7 @@ sources -= [ "gamepad_device_linux.cc", "gamepad_platform_data_fetcher_linux.cc", + "udev_gamepad_linux.cc", ] } }
diff --git a/device/gamepad/abstract_haptic_gamepad.h b/device/gamepad/abstract_haptic_gamepad.h index a20a1d66..47f71d2 100644 --- a/device/gamepad/abstract_haptic_gamepad.h +++ b/device/gamepad/abstract_haptic_gamepad.h
@@ -42,13 +42,13 @@ // Stop vibration and release held resources. void Shutdown(); - private: // Set the vibration magnitude for the strong and weak vibration actuators. virtual void SetVibration(double strong_magnitude, double weak_magnitude) = 0; // Set the vibration magnitude for both actuators to zero. virtual void SetZeroVibration(); + private: // Override to perform additional shutdown actions after vibration effects // are halted and callbacks are issued. virtual void DoShutdown() {}
diff --git a/device/gamepad/dualshock4_controller_base.h b/device/gamepad/dualshock4_controller_base.h index 555eca7c..cbc16ad 100644 --- a/device/gamepad/dualshock4_controller_base.h +++ b/device/gamepad/dualshock4_controller_base.h
@@ -16,8 +16,9 @@ static bool IsDualshock4(int vendor_id, int product_id); - private: void SetVibration(double strong_magnitude, double weak_magnitude) override; + + private: virtual void WriteOutputReport(void* report, size_t report_length) {} };
diff --git a/device/gamepad/dualshock4_controller_linux.cc b/device/gamepad/dualshock4_controller_linux.cc new file mode 100644 index 0000000..fd5c4eeb --- /dev/null +++ b/device/gamepad/dualshock4_controller_linux.cc
@@ -0,0 +1,19 @@ +// Copyright 2018 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/gamepad/dualshock4_controller_linux.h" + +namespace device { + +Dualshock4ControllerLinux::Dualshock4ControllerLinux(int fd) : fd_(fd) {} + +Dualshock4ControllerLinux::~Dualshock4ControllerLinux() = default; + +void Dualshock4ControllerLinux::WriteOutputReport(void* report, + size_t report_length) { + ssize_t res = write(fd_, report, report_length); + DCHECK_EQ(res, static_cast<ssize_t>(report_length)); +} + +} // namespace device
diff --git a/device/gamepad/dualshock4_controller_linux.h b/device/gamepad/dualshock4_controller_linux.h new file mode 100644 index 0000000..4eb893c --- /dev/null +++ b/device/gamepad/dualshock4_controller_linux.h
@@ -0,0 +1,25 @@ +// Copyright 2018 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_GAMEPAD_DUALSHOCK4_CONTROLLER_LINUX_ +#define DEVICE_GAMEPAD_DUALSHOCK4_CONTROLLER_LINUX_ + +#include "device/gamepad/dualshock4_controller_base.h" + +namespace device { + +class Dualshock4ControllerLinux : public Dualshock4ControllerBase { + public: + Dualshock4ControllerLinux(int fd); + ~Dualshock4ControllerLinux() override; + + private: + void WriteOutputReport(void* report, size_t report_length) override; + + int fd_; +}; + +} // namespace device + +#endif // DEVICE_GAMEPAD_DUALSHOCK4_CONTROLLER_LINUX_
diff --git a/device/gamepad/gamepad_device_linux.cc b/device/gamepad/gamepad_device_linux.cc index 196b9f5f..bdb354f 100644 --- a/device/gamepad/gamepad_device_linux.cc +++ b/device/gamepad/gamepad_device_linux.cc
@@ -11,6 +11,7 @@ #include <sys/ioctl.h> #include "base/posix/eintr_wrapper.h" +#include "base/strings/string_number_conversions.h" #include "base/strings/stringprintf.h" #include "device/udev_linux/udev_linux.h" @@ -85,19 +86,32 @@ } // namespace -GamepadDeviceLinux::GamepadDeviceLinux(const std::string& parent_syspath) - : parent_syspath_(parent_syspath), +GamepadDeviceLinux::GamepadDeviceLinux(const std::string& syspath_prefix) + : syspath_prefix_(syspath_prefix), joydev_fd_(-1), joydev_index_(-1), evdev_fd_(-1), effect_id_(kInvalidEffectId), - supports_vibration_(false) {} + hidraw_fd_(-1) {} GamepadDeviceLinux::~GamepadDeviceLinux() = default; void GamepadDeviceLinux::DoShutdown() { CloseJoydevNode(); CloseEvdevNode(); + CloseHidrawNode(); +} + +bool GamepadDeviceLinux::IsEmpty() const { + return joydev_fd_ < 0 && evdev_fd_ < 0 && hidraw_fd_ < 0; +} + +bool GamepadDeviceLinux::SupportsVibration() const { + // Dualshock4 vibration is supported through the hidraw node. + if (is_dualshock4_) + return hidraw_fd_ >= 0 && dualshock4_ != nullptr; + + return supports_force_feedback_ && evdev_fd_ >= 0; } void GamepadDeviceLinux::ReadPadState(Gamepad* pad) const { @@ -128,11 +142,17 @@ } } -bool GamepadDeviceLinux::OpenJoydevNode(const std::string& path, - udev_device* device, - int joydev_index) { +bool GamepadDeviceLinux::IsSameDevice(const UdevGamepadLinux& pad_info) { + return pad_info.syspath_prefix == syspath_prefix_; +} + +bool GamepadDeviceLinux::OpenJoydevNode(const UdevGamepadLinux& pad_info, + udev_device* device) { + DCHECK(pad_info.type == UdevGamepadLinux::Type::JOYDEV); + DCHECK(pad_info.syspath_prefix == syspath_prefix_); + CloseJoydevNode(); - joydev_fd_ = open(path.c_str(), O_RDONLY | O_NONBLOCK); + joydev_fd_ = open(pad_info.path.c_str(), O_RDONLY | O_NONBLOCK); if (joydev_fd_ < 0) return false; @@ -149,6 +169,11 @@ const char* name = udev_device_get_sysattr_value(parent_device, "name"); std::string name_string(name ? name : ""); + int vendor_id_int = 0; + int product_id_int = 0; + base::HexStringToInt(vendor_id, &vendor_id_int); + base::HexStringToInt(product_id, &product_id_int); + // In many cases the information the input subsystem contains isn't // as good as the information that the device bus has, walk up further // to the subsystem/device type "usb"/"usb_device" and if this device @@ -175,11 +200,14 @@ } } - joydev_index_ = joydev_index; + joydev_index_ = pad_info.index; vendor_id_ = vendor_id ? vendor_id : ""; product_id_ = product_id ? product_id : ""; version_number_ = version_number ? version_number : ""; name_ = name_string; + is_dualshock4_ = + Dualshock4ControllerBase::IsDualshock4(vendor_id_int, product_id_int); + return true; } @@ -195,29 +223,64 @@ name_.clear(); } -bool GamepadDeviceLinux::OpenEvdevNode(const std::string& path) { +bool GamepadDeviceLinux::OpenEvdevNode(const UdevGamepadLinux& pad_info) { + DCHECK(pad_info.type == UdevGamepadLinux::Type::EVDEV); + DCHECK(pad_info.syspath_prefix == syspath_prefix_); + CloseEvdevNode(); - evdev_fd_ = open(path.c_str(), O_RDWR | O_NONBLOCK); + evdev_fd_ = open(pad_info.path.c_str(), O_RDWR | O_NONBLOCK); if (evdev_fd_ < 0) return false; - supports_vibration_ = HasRumbleCapability(evdev_fd_); + supports_force_feedback_ = HasRumbleCapability(evdev_fd_); return true; } void GamepadDeviceLinux::CloseEvdevNode() { if (evdev_fd_ >= 0) { - if (effect_id_ != kInvalidEffectId) + if (effect_id_ != kInvalidEffectId) { DestroyEffect(evdev_fd_, effect_id_); + effect_id_ = kInvalidEffectId; + } close(evdev_fd_); evdev_fd_ = -1; } - supports_vibration_ = false; + supports_force_feedback_ = false; +} + +bool GamepadDeviceLinux::OpenHidrawNode(const UdevGamepadLinux& pad_info) { + DCHECK(pad_info.type == UdevGamepadLinux::Type::HIDRAW); + DCHECK(pad_info.syspath_prefix == syspath_prefix_); + + CloseHidrawNode(); + hidraw_fd_ = open(pad_info.path.c_str(), O_RDWR | O_NONBLOCK); + if (hidraw_fd_ < 0) + return false; + + dualshock4_ = std::make_unique<Dualshock4ControllerLinux>(hidraw_fd_); + + return true; +} + +void GamepadDeviceLinux::CloseHidrawNode() { + if (dualshock4_) + dualshock4_->Shutdown(); + dualshock4_.reset(); + if (hidraw_fd_ >= 0) { + close(hidraw_fd_); + hidraw_fd_ = -1; + } } void GamepadDeviceLinux::SetVibration(double strong_magnitude, double weak_magnitude) { + if (is_dualshock4_) { + if (dualshock4_) + dualshock4_->SetVibration(strong_magnitude, weak_magnitude); + return; + } + uint16_t strong_magnitude_scaled = static_cast<uint16_t>(strong_magnitude * kRumbleMagnitudeMax); uint16_t weak_magnitude_scaled = @@ -240,6 +303,12 @@ } void GamepadDeviceLinux::SetZeroVibration() { + if (is_dualshock4_) { + if (dualshock4_) + dualshock4_->SetZeroVibration(); + return; + } + if (effect_id_ != kInvalidEffectId) StartOrStopEffect(evdev_fd_, effect_id_, false); }
diff --git a/device/gamepad/gamepad_device_linux.h b/device/gamepad/gamepad_device_linux.h index 57cc678d..b51c9ce 100644 --- a/device/gamepad/gamepad_device_linux.h +++ b/device/gamepad/gamepad_device_linux.h
@@ -6,6 +6,8 @@ #define DEVICE_GAMEPAD_GAMEPAD_DEVICE_LINUX_ #include "device/gamepad/abstract_haptic_gamepad.h" +#include "device/gamepad/dualshock4_controller_linux.h" +#include "device/gamepad/udev_gamepad_linux.h" extern "C" { struct udev_device; @@ -18,52 +20,69 @@ // through the joydev interface, while haptics commands are routed through the // evdev interface. A gamepad must be enumerated through joydev to be usable, // but the evdev interface is only required for haptic effects. +// +// Dualshock4 haptics are not supported through evdev and are instead sent +// through the raw HID (hidraw) interface. class GamepadDeviceLinux : public AbstractHapticGamepad { public: - GamepadDeviceLinux(const std::string& parent_syspath); + GamepadDeviceLinux(const std::string& syspath_prefix); ~GamepadDeviceLinux() override; // Delete any stored effect and close file descriptors. void DoShutdown() override; // Returns true if no device nodes are associated with this device. - bool IsEmpty() const { return joydev_fd_ < 0 && evdev_fd_ < 0; } + bool IsEmpty() const; - std::string GetParentSyspath() const { return parent_syspath_; } int GetJoydevIndex() const { return joydev_index_; } std::string GetVendorId() const { return vendor_id_; } std::string GetProductId() const { return product_id_; } std::string GetVersionNumber() const { return version_number_; } std::string GetName() const { return name_; } - bool SupportsVibration() const { return supports_vibration_; } + std::string GetSyspathPrefix() const { return syspath_prefix_; } + + bool SupportsVibration() const; // Reads the current gamepad state into |pad|. void ReadPadState(Gamepad* pad) const; + // Returns true if |pad_info| describes this device. + bool IsSameDevice(const UdevGamepadLinux& pad_info); + // Opens the joydev device node and queries device info. - bool OpenJoydevNode(const std::string& path, - udev_device* device, - int joydev_index); + bool OpenJoydevNode(const UdevGamepadLinux& pad_info, udev_device* device); // Closes the joydev device node and clears device info. void CloseJoydevNode(); // Opens the evdev device node and initializes haptics. - bool OpenEvdevNode(const std::string& path); + bool OpenEvdevNode(const UdevGamepadLinux& pad_info); // Closes the evdev device node and shuts down haptics. void CloseEvdevNode(); + // Opens the hidraw device node and initializes haptics. + bool OpenHidrawNode(const UdevGamepadLinux& pad_info); + + // Closes the hidraw device node and shuts down haptics. + void CloseHidrawNode(); + // AbstractHapticGamepad void SetVibration(double strong_magnitude, double weak_magnitude) override; void SetZeroVibration() override; private: + // The syspath prefix is used to identify device nodes that refer to the same + // underlying gamepad through different interfaces. + // // Joydev and evdev nodes that refer to the same device will share a parent - // node that represents the physical device. We compare the syspaths of the - // parent nodes to determine when two nodes refer to the same device through - // different interfaces. - std::string parent_syspath_; + // node that represents the physical device. We can compare the syspaths of + // the parent nodes to determine when two nodes refer to the same device. + // + // The syspath for a hidraw node will match the parent syspath of a joydev or + // evdev node up to the subsystem. To simplify this comparison, we only store + // the syspath prefix up to the subsystem. + std::string syspath_prefix_; // The file descriptor for the device's joydev node, or -1 if no joydev node // is associated with this device. @@ -94,8 +113,18 @@ // The ID of the haptic effect stored on the device, or -1 if none is stored. int effect_id_; - // True if the device supports haptic vibration effects. - bool supports_vibration_; + // True if the device supports rumble effects through the evdev device node. + bool supports_force_feedback_; + + // The file descriptor for the device's hidraw node, or -1 if no hidraw node + // is associated with this device. + int hidraw_fd_; + + // True if the vendor and product IDs match any model of Dualshock4. + bool is_dualshock4_; + + // Dualshock4 functionality, if available. + std::unique_ptr<Dualshock4ControllerLinux> dualshock4_; }; } // namespace device
diff --git a/device/gamepad/gamepad_platform_data_fetcher_linux.cc b/device/gamepad/gamepad_platform_data_fetcher_linux.cc index 4837360e4..33093d67 100644 --- a/device/gamepad/gamepad_platform_data_fetcher_linux.cc +++ b/device/gamepad/gamepad_platform_data_fetcher_linux.cc
@@ -13,7 +13,6 @@ #include "base/bind.h" #include "base/bind_helpers.h" #include "base/strings/string_number_conversions.h" -#include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "base/trace_event/trace_event.h" @@ -21,70 +20,8 @@ #include "device/udev_linux/udev_linux.h" namespace { - const char kInputSubsystem[] = "input"; - -int DeviceIndexFromDevicePath(const std::string& path, - const std::string& prefix) { - if (!base::StartsWith(path, prefix, base::CompareCase::SENSITIVE)) - return -1; - - int index = -1; - base::StringPiece index_str(&path.c_str()[prefix.length()], - path.length() - prefix.length()); - if (!base::StringToInt(index_str, &index)) - return -1; - - return index; -} - -bool IsUdevGamepad(udev_device* dev, device::UdevGamepad* pad_info) { - using DeviceRootPair = std::pair<device::UdevGamepadType, const char*>; - static const std::vector<DeviceRootPair> device_roots = { - {device::UdevGamepadType::EVDEV, "/dev/input/event"}, - {device::UdevGamepadType::JOYDEV, "/dev/input/js"}, - }; - - if (!dev) - return false; - - if (!device::udev_device_get_property_value(dev, "ID_INPUT_JOYSTICK")) - return false; - - const char* node_path = device::udev_device_get_devnode(dev); - if (!node_path) - return false; - - // The device pointed to by parent_dev contains information about the logical - // joystick device. We can compare syspaths to determine when a joydev device - // and an evdev device refer to the same physical device. - udev_device* parent_dev = - device::udev_device_get_parent_with_subsystem_devtype( - dev, kInputSubsystem, nullptr); - const char* parent_syspath = - parent_dev ? device::udev_device_get_syspath(parent_dev) : ""; - - for (const auto& entry : device_roots) { - device::UdevGamepadType node_type = entry.first; - const char* prefix = entry.second; - int index_value = DeviceIndexFromDevicePath(node_path, prefix); - - if (index_value < 0) - continue; - - if (pad_info) { - pad_info->type = node_type; - pad_info->index = index_value; - pad_info->path = node_path; - pad_info->parent_syspath = parent_syspath; - } - - return true; - } - - return false; -} - +const char kHidrawSubsystem[] = "hidraw"; } // namespace namespace device { @@ -105,11 +42,13 @@ void GamepadPlatformDataFetcherLinux::OnAddedToProvider() { std::vector<UdevLinux::UdevMonitorFilter> filters; filters.push_back(UdevLinux::UdevMonitorFilter(kInputSubsystem, nullptr)); + filters.push_back(UdevLinux::UdevMonitorFilter(kHidrawSubsystem, nullptr)); udev_.reset(new UdevLinux( filters, base::Bind(&GamepadPlatformDataFetcherLinux::RefreshDevice, base::Unretained(this)))); - EnumerateDevices(); + EnumerateSubsystemDevices(kInputSubsystem); + EnumerateSubsystemDevices(kHidrawSubsystem); } void GamepadPlatformDataFetcherLinux::GetGamepadData(bool) { @@ -122,12 +61,16 @@ // Used during enumeration, and monitor notifications. void GamepadPlatformDataFetcherLinux::RefreshDevice(udev_device* dev) { - UdevGamepad pad_info; - if (IsUdevGamepad(dev, &pad_info)) { - if (pad_info.type == UdevGamepadType::JOYDEV) + std::unique_ptr<UdevGamepadLinux> udev_gamepad = + UdevGamepadLinux::Create(dev); + if (udev_gamepad) { + const UdevGamepadLinux& pad_info = *udev_gamepad.get(); + if (pad_info.type == UdevGamepadLinux::Type::JOYDEV) RefreshJoydevDevice(dev, pad_info); - else if (pad_info.type == UdevGamepadType::EVDEV) + else if (pad_info.type == UdevGamepadLinux::Type::EVDEV) RefreshEvdevDevice(dev, pad_info); + else if (pad_info.type == UdevGamepadLinux::Type::HIDRAW) + RefreshHidrawDevice(dev, pad_info); } } @@ -153,24 +96,21 @@ } GamepadDeviceLinux* GamepadPlatformDataFetcherLinux::GetOrCreateMatchingDevice( - const UdevGamepad& pad_info) { - if (pad_info.parent_syspath.empty()) - return nullptr; - + const UdevGamepadLinux& pad_info) { for (auto it = devices_.begin(); it != devices_.end(); ++it) { GamepadDeviceLinux* device = it->get(); - if (device->GetParentSyspath() == pad_info.parent_syspath) + if (device->IsSameDevice(pad_info)) return device; } auto emplace_result = devices_.emplace( - std::make_unique<GamepadDeviceLinux>(pad_info.parent_syspath)); + std::make_unique<GamepadDeviceLinux>(pad_info.syspath_prefix)); return emplace_result.first->get(); } void GamepadPlatformDataFetcherLinux::RefreshJoydevDevice( udev_device* dev, - const UdevGamepad& pad_info) { + const UdevGamepadLinux& pad_info) { const int joydev_index = pad_info.index; if (joydev_index < 0 || joydev_index >= (int)Gamepads::kItemsLengthCap) return; @@ -201,7 +141,7 @@ } // If the device cannot be opened, the joystick has been disconnected. - if (!device->OpenJoydevNode(pad_info.path, dev, joydev_index)) { + if (!device->OpenJoydevNode(pad_info, dev)) { if (device->IsEmpty()) RemoveDevice(device); return; @@ -248,12 +188,12 @@ void GamepadPlatformDataFetcherLinux::RefreshEvdevDevice( udev_device* dev, - const UdevGamepad& pad_info) { + const UdevGamepadLinux& pad_info) { GamepadDeviceLinux* device = GetOrCreateMatchingDevice(pad_info); if (device == nullptr) return; - if (!device->OpenEvdevNode(pad_info.path)) { + if (!device->OpenEvdevNode(pad_info)) { if (device->IsEmpty()) RemoveDevice(device); return; @@ -265,20 +205,44 @@ DCHECK(state); if (state) { Gamepad& pad = state->data; - pad.vibration_actuator.type = GamepadHapticActuatorType::kDualRumble; pad.vibration_actuator.not_null = device->SupportsVibration(); } } } -void GamepadPlatformDataFetcherLinux::EnumerateDevices() { +void GamepadPlatformDataFetcherLinux::RefreshHidrawDevice( + udev_device* dev, + const UdevGamepadLinux& pad_info) { + GamepadDeviceLinux* device = GetOrCreateMatchingDevice(pad_info); + if (device == nullptr) + return; + + if (!device->OpenHidrawNode(pad_info)) { + if (device->IsEmpty()) + RemoveDevice(device); + return; + } + + int joydev_index = device->GetJoydevIndex(); + if (joydev_index >= 0) { + PadState* state = GetPadState(joydev_index); + DCHECK(state); + if (state) { + Gamepad& pad = state->data; + pad.vibration_actuator.not_null = device->SupportsVibration(); + } + } +} + +void GamepadPlatformDataFetcherLinux::EnumerateSubsystemDevices( + const std::string& subsystem) { if (!udev_->udev_handle()) return; ScopedUdevEnumeratePtr enumerate(udev_enumerate_new(udev_->udev_handle())); if (!enumerate) return; int ret = - udev_enumerate_add_match_subsystem(enumerate.get(), kInputSubsystem); + udev_enumerate_add_match_subsystem(enumerate.get(), subsystem.c_str()); if (ret != 0) return; ret = udev_enumerate_scan_devices(enumerate.get());
diff --git a/device/gamepad/gamepad_platform_data_fetcher_linux.h b/device/gamepad/gamepad_platform_data_fetcher_linux.h index 2282cfd..e8552b8 100644 --- a/device/gamepad/gamepad_platform_data_fetcher_linux.h +++ b/device/gamepad/gamepad_platform_data_fetcher_linux.h
@@ -15,6 +15,7 @@ #include "device/gamepad/gamepad_data_fetcher.h" #include "device/gamepad/gamepad_device_linux.h" #include "device/gamepad/public/cpp/gamepads.h" +#include "device/gamepad/udev_gamepad_linux.h" extern "C" { struct udev_device; @@ -26,18 +27,6 @@ namespace device { -enum class UdevGamepadType { - JOYDEV, - EVDEV, -}; - -struct UdevGamepad { - UdevGamepadType type; - int index; - std::string path; - std::string parent_syspath; -}; - class DEVICE_GAMEPAD_EXPORT GamepadPlatformDataFetcherLinux : public GamepadDataFetcher { public: @@ -66,13 +55,15 @@ void OnAddedToProvider() override; void RefreshDevice(udev_device* dev); - void RefreshJoydevDevice(udev_device* dev, const UdevGamepad& pad_info); - void RefreshEvdevDevice(udev_device* dev, const UdevGamepad& pad_info); - void EnumerateDevices(); + void RefreshJoydevDevice(udev_device* dev, const UdevGamepadLinux& pad_info); + void RefreshEvdevDevice(udev_device* dev, const UdevGamepadLinux& pad_info); + void RefreshHidrawDevice(udev_device* dev, const UdevGamepadLinux& pad_info); + void EnumerateSubsystemDevices(const std::string& subsystem); void ReadDeviceData(size_t index); GamepadDeviceLinux* GetDeviceWithJoydevIndex(int joydev_index); - GamepadDeviceLinux* GetOrCreateMatchingDevice(const UdevGamepad& pad_info); + GamepadDeviceLinux* GetOrCreateMatchingDevice( + const UdevGamepadLinux& pad_info); void RemoveDevice(GamepadDeviceLinux* device); std::unordered_set<std::unique_ptr<GamepadDeviceLinux>> devices_;
diff --git a/device/gamepad/gamepad_platform_data_fetcher_win.cc b/device/gamepad/gamepad_platform_data_fetcher_win.cc index 8aa7d89..5466399 100644 --- a/device/gamepad/gamepad_platform_data_fetcher_win.cc +++ b/device/gamepad/gamepad_platform_data_fetcher_win.cc
@@ -87,8 +87,7 @@ GamepadPlatformDataFetcherWin::GamepadPlatformDataFetcherWin() : xinput_available_(false) {} -GamepadPlatformDataFetcherWin::~GamepadPlatformDataFetcherWin() { -} +GamepadPlatformDataFetcherWin::~GamepadPlatformDataFetcherWin() = default; GamepadSource GamepadPlatformDataFetcherWin::source() { return Factory::static_source(); @@ -108,9 +107,11 @@ // Check to see if the xinput device is connected XINPUT_CAPABILITIES caps; DWORD res = xinput_get_capabilities_(i, XINPUT_FLAG_GAMEPAD, &caps); - xinuput_connected_[i] = (res == ERROR_SUCCESS); - if (!xinuput_connected_[i]) + xinput_connected_[i] = (res == ERROR_SUCCESS); + if (!xinput_connected_[i]) { + haptics_[i] = nullptr; continue; + } PadState* state = GetPadState(i); if (!state) @@ -119,9 +120,16 @@ Gamepad& pad = state->data; if (state->active_state == GAMEPAD_NEWLY_ACTIVE) { + haptics_[i] = + std::make_unique<XInputHapticGamepadWin>(i, xinput_set_state_); + // This is the first time we've seen this device, so do some one-time // initialization pad.connected = true; + + pad.vibration_actuator.type = GamepadHapticActuatorType::kDualRumble; + pad.vibration_actuator.not_null = true; + swprintf(pad.id, Gamepad::kIdLengthCap, L"Xbox 360 Controller (XInput STANDARD %ls)", GamepadSubTypeName(caps.SubType)); @@ -148,7 +156,7 @@ EnumerateDevices(); for (size_t i = 0; i < XUSER_MAX_COUNT; ++i) { - if (xinuput_connected_[i]) + if (xinput_connected_[i]) GetXInputPadData(i); } } @@ -227,10 +235,51 @@ } } +void GamepadPlatformDataFetcherWin::PlayEffect( + int pad_id, + mojom::GamepadHapticEffectType type, + mojom::GamepadEffectParametersPtr params, + mojom::GamepadHapticsManager::PlayVibrationEffectOnceCallback callback) { + if (pad_id < 0 || pad_id >= XUSER_MAX_COUNT) { + std::move(callback).Run( + mojom::GamepadHapticsResult::GamepadHapticsResultError); + return; + } + + if (!xinput_available_ || !xinput_connected_[pad_id] || + haptics_[pad_id] == nullptr) { + std::move(callback).Run( + mojom::GamepadHapticsResult::GamepadHapticsResultNotSupported); + return; + } + + haptics_[pad_id]->PlayEffect(type, std::move(params), std::move(callback)); +} + +void GamepadPlatformDataFetcherWin::ResetVibration( + int pad_id, + mojom::GamepadHapticsManager::ResetVibrationActuatorCallback callback) { + if (pad_id < 0 || pad_id >= XUSER_MAX_COUNT) { + std::move(callback).Run( + mojom::GamepadHapticsResult::GamepadHapticsResultError); + return; + } + + if (!xinput_available_ || !xinput_connected_[pad_id] || + haptics_[pad_id] == nullptr) { + std::move(callback).Run( + mojom::GamepadHapticsResult::GamepadHapticsResultNotSupported); + return; + } + + haptics_[pad_id]->ResetVibration(std::move(callback)); +} + bool GamepadPlatformDataFetcherWin::GetXInputDllFunctions() { xinput_get_capabilities_ = nullptr; xinput_get_state_ = nullptr; xinput_get_state_ex_ = nullptr; + xinput_set_state_ = nullptr; XInputEnableFunc xinput_enable = reinterpret_cast<XInputEnableFunc>( xinput_dll_.GetFunctionPointer("XInputEnable")); xinput_get_capabilities_ = reinterpret_cast<XInputGetCapabilitiesFunc>( @@ -249,6 +298,11 @@ if (!xinput_get_state_ && !xinput_get_state_ex_) return false; + xinput_set_state_ = + reinterpret_cast<XInputHapticGamepadWin::XInputSetStateFunc>( + xinput_dll_.GetFunctionPointer("XInputSetState")); + if (!xinput_set_state_) + return false; if (xinput_enable) { // XInputEnable is unavailable before Win8 and deprecated in Win10. xinput_enable(true);
diff --git a/device/gamepad/gamepad_platform_data_fetcher_win.h b/device/gamepad/gamepad_platform_data_fetcher_win.h index e6f1679..9925ca3 100644 --- a/device/gamepad/gamepad_platform_data_fetcher_win.h +++ b/device/gamepad/gamepad_platform_data_fetcher_win.h
@@ -26,6 +26,7 @@ #include "device/gamepad/gamepad_data_fetcher.h" #include "device/gamepad/gamepad_standard_mappings.h" #include "device/gamepad/public/cpp/gamepads.h" +#include "device/gamepad/xinput_haptic_gamepad_win.h" namespace device { @@ -57,8 +58,19 @@ GamepadSource source() override; + // GamepadDataFetcher implementation. void GetGamepadData(bool devices_changed_hint) override; + void PlayEffect( + int pad_index, + mojom::GamepadHapticEffectType, + mojom::GamepadEffectParametersPtr, + mojom::GamepadHapticsManager::PlayVibrationEffectOnceCallback) override; + + void ResetVibration( + int pad_index, + mojom::GamepadHapticsManager::ResetVibrationActuatorCallback) override; + private: void OnAddedToProvider() override; @@ -85,12 +97,14 @@ bool xinput_available_; // Function pointers to XInput functionality, retrieved in - // |GetXinputDllFunctions|. + // |GetXInputDllFunctions|. XInputGetCapabilitiesFunc xinput_get_capabilities_; XInputGetStateFunc xinput_get_state_; XInputGetStateExFunc xinput_get_state_ex_; + XInputHapticGamepadWin::XInputSetStateFunc xinput_set_state_; - bool xinuput_connected_[XUSER_MAX_COUNT]; + bool xinput_connected_[XUSER_MAX_COUNT]; + std::unique_ptr<XInputHapticGamepadWin> haptics_[XUSER_MAX_COUNT]; DISALLOW_COPY_AND_ASSIGN(GamepadPlatformDataFetcherWin); };
diff --git a/device/gamepad/udev_gamepad_linux.cc b/device/gamepad/udev_gamepad_linux.cc new file mode 100644 index 0000000..b45eb12 --- /dev/null +++ b/device/gamepad/udev_gamepad_linux.cc
@@ -0,0 +1,114 @@ +// Copyright 2018 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/gamepad/udev_gamepad_linux.h" + +#include "base/strings/string_number_conversions.h" +#include "base/strings/string_util.h" +#include "device/udev_linux/udev.h" + +namespace device { + +namespace { + +const char kInputSubsystem[] = "input"; +const char kHidrawSubsystem[] = "hidraw"; + +int DeviceIndexFromDevicePath(const std::string& path, + const std::string& prefix) { + if (!base::StartsWith(path, prefix, base::CompareCase::SENSITIVE)) + return -1; + + int index = -1; + base::StringPiece index_str(&path.c_str()[prefix.length()], + path.length() - prefix.length()); + if (!base::StringToInt(index_str, &index)) + return -1; + + return index; +} + +} // namespace + +UdevGamepadLinux::UdevGamepadLinux(Type type, + int index, + const std::string& path, + const std::string& syspath_prefix) + : type(type), index(index), path(path), syspath_prefix(syspath_prefix) {} + +// static +std::unique_ptr<UdevGamepadLinux> UdevGamepadLinux::Create(udev_device* dev) { + using DeviceRootPair = std::pair<Type, const char*>; + static const std::vector<DeviceRootPair> device_roots = { + {Type::EVDEV, "/dev/input/event"}, + {Type::JOYDEV, "/dev/input/js"}, + {Type::HIDRAW, "/dev/hidraw"}, + }; + + if (!dev) + return nullptr; + + const char* node_path = device::udev_device_get_devnode(dev); + if (!node_path) + return nullptr; + + const char* node_syspath = device::udev_device_get_syspath(dev); + + udev_device* parent_dev = + device::udev_device_get_parent_with_subsystem_devtype( + dev, kInputSubsystem, nullptr); + const char* parent_syspath = + parent_dev ? device::udev_device_get_syspath(parent_dev) : ""; + + for (const auto& entry : device_roots) { + Type node_type = entry.first; + const char* prefix = entry.second; + int index_value = DeviceIndexFromDevicePath(node_path, prefix); + + if (index_value < 0) + continue; + + // The syspath can be used to associate device nodes that describe the same + // gamepad through multiple interfaces. For input nodes (evdev and joydev), + // we use the syspath of the parent node, which describes the underlying + // physical device. For hidraw nodes, we use the syspath of the node itself. + // + // The parent syspaths for matching evdev and joydev nodes will be identical + // because they share the same parent node. The syspath for hidraw nodes + // will also be identical up to the subsystem. For instance, if the syspath + // for the input subsystem is: + // /sys/devices/[...]/0003:054C:09CC.0026/input/input91 + // And the corresponding hidraw syspath is: + // /sys/devices/[...]/0003:054C:09CC.0026/hidraw/hidraw3 + // Then |syspath_prefix| is the common prefix before "input" or "hidraw": + // /sys/devices/[...]/0003:054C:09CC.0026/ + std::string syspath; + std::string subsystem; + if (node_type == Type::EVDEV || node_type == Type::JOYDEV) { + // If the device is in the input subsystem but does not have the + // ID_INPUT_JOYSTICK property, ignore it. + if (!device::udev_device_get_property_value(dev, "ID_INPUT_JOYSTICK")) + return nullptr; + + syspath = parent_syspath; + subsystem = kInputSubsystem; + } else if (node_type == Type::HIDRAW) { + syspath = node_syspath; + subsystem = kHidrawSubsystem; + } + + size_t subsystem_start = syspath.find(subsystem); + if (subsystem_start == std::string::npos) + return nullptr; + std::string syspath_prefix = syspath.substr(0, subsystem_start); + + UdevGamepadLinux* pad_info = + new UdevGamepadLinux(node_type, index_value, node_path, syspath_prefix); + return std::unique_ptr<UdevGamepadLinux>(pad_info); + } + + return nullptr; +} + +} // namespace device
diff --git a/device/gamepad/udev_gamepad_linux.h b/device/gamepad/udev_gamepad_linux.h new file mode 100644 index 0000000..392f076 --- /dev/null +++ b/device/gamepad/udev_gamepad_linux.h
@@ -0,0 +1,46 @@ +// Copyright 2018 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_GAMEPAD_UDEV_GAMEPAD_ +#define DEVICE_GAMEPAD_UDEV_GAMEPAD_ + +#include <memory> +#include <string> + +extern "C" { +struct udev_device; +} + +namespace device { + +class UdevGamepadLinux { + public: + enum class Type { + JOYDEV, + EVDEV, + HIDRAW, + }; + + ~UdevGamepadLinux() = default; + + // Factory method for creating UdevGamepadLinux instances. Extracts info + // about the device and returns a UdevGamepadLinux describing it, or nullptr + // if the device cannot be a gamepad. + static std::unique_ptr<UdevGamepadLinux> Create(udev_device* dev); + + const Type type; + const int index; + const std::string path; + const std::string syspath_prefix; + + private: + UdevGamepadLinux(Type type, + int index, + const std::string& path, + const std::string& syspath_prefix); +}; + +} // namespace device + +#endif // DEVICE_GAMEPAD_UDEV_GAMEPAD_
diff --git a/device/gamepad/xinput_haptic_gamepad_win.cc b/device/gamepad/xinput_haptic_gamepad_win.cc new file mode 100644 index 0000000..cf9076e --- /dev/null +++ b/device/gamepad/xinput_haptic_gamepad_win.cc
@@ -0,0 +1,35 @@ +// Copyright 2018 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/gamepad/xinput_haptic_gamepad_win.h" + +namespace { +const long kRumbleMagnitudeMax = 0xffff; +} // namespace + +namespace device { + +XInputHapticGamepadWin::XInputHapticGamepadWin( + int pad_id, + XInputSetStateFunc xinput_set_state) + : pad_id_(pad_id), xinput_set_state_(xinput_set_state) {} + +XInputHapticGamepadWin::~XInputHapticGamepadWin() = default; + +void XInputHapticGamepadWin::SetVibration(double strong_magnitude, + double weak_magnitude) { + if (pad_id_ < 0 || pad_id_ > XUSER_MAX_COUNT || xinput_set_state_ == nullptr) + return; + XINPUT_VIBRATION vibration; + vibration.wLeftMotorSpeed = + static_cast<long>(strong_magnitude * kRumbleMagnitudeMax); + vibration.wRightMotorSpeed = + static_cast<long>(weak_magnitude * kRumbleMagnitudeMax); + + TRACE_EVENT_BEGIN1("GAMEPAD", "XInputSetState", "id", pad_id_); + xinput_set_state_(pad_id_, &vibration); + TRACE_EVENT_END1("GAMEPAD", "XInputSetState", "id", pad_id_); +} + +} // namespace device
diff --git a/device/gamepad/xinput_haptic_gamepad_win.h b/device/gamepad/xinput_haptic_gamepad_win.h new file mode 100644 index 0000000..9abfbfc --- /dev/null +++ b/device/gamepad/xinput_haptic_gamepad_win.h
@@ -0,0 +1,32 @@ +// Copyright 2018 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_GAMEPAD_XINPUT_HAPTIC_GAMEPAD_WIN_ +#define DEVICE_GAMEPAD_XINPUT_HAPTIC_GAMEPAD_WIN_ + +#include <Unknwn.h> +#include <XInput.h> + +#include "device/gamepad/abstract_haptic_gamepad.h" + +namespace device { + +class XInputHapticGamepadWin : public AbstractHapticGamepad { + public: + typedef DWORD(WINAPI* XInputSetStateFunc)(DWORD dwUserIndex, + XINPUT_VIBRATION* pVibration); + + XInputHapticGamepadWin(int pad_id, XInputSetStateFunc xinput_set_state); + ~XInputHapticGamepadWin() override; + + void SetVibration(double strong_magnitude, double weak_magnitude) override; + + private: + int pad_id_; + XInputSetStateFunc xinput_set_state_; +}; + +} // namespace device + +#endif // DEVICE_GAMEPAD_EVDEV_HAPTIC_GAMEPAD_WIN_
diff --git a/device/geolocation/BUILD.gn b/device/geolocation/BUILD.gn index 3da82acf..b3673ae2 100644 --- a/device/geolocation/BUILD.gn +++ b/device/geolocation/BUILD.gn
@@ -53,6 +53,7 @@ "wifi_data_provider_manager.h", "wifi_data_provider_win.cc", "wifi_data_provider_win.h", + "wifi_polling_policy.cc", "wifi_polling_policy.h", ]
diff --git a/device/geolocation/wifi_data_provider_chromeos.cc b/device/geolocation/wifi_data_provider_chromeos.cc index b4b4f1a..b53d30ee 100644 --- a/device/geolocation/wifi_data_provider_chromeos.cc +++ b/device/geolocation/wifi_data_provider_chromeos.cc
@@ -36,20 +36,16 @@ void WifiDataProviderChromeOs::StartDataProvider() { DCHECK(CalledOnClientThread()); - DCHECK(polling_policy_ == nullptr); - polling_policy_.reset( - new GenericWifiPollingPolicy<kDefaultPollingIntervalMilliseconds, - kNoChangePollingIntervalMilliseconds, - kTwoNoChangePollingIntervalMilliseconds, - kNoWifiPollingIntervalMilliseconds>); + if (!WifiPollingPolicy::IsInitialized()) + WifiPollingPolicy::Initialize(CreatePollingPolicy()); + DCHECK(WifiPollingPolicy::IsInitialized()); - ScheduleStart(); + ScheduleStart(WifiPollingPolicy::Get()->PollingInterval()); } void WifiDataProviderChromeOs::StopDataProvider() { DCHECK(CalledOnClientThread()); - polling_policy_.reset(); ScheduleStop(); } @@ -83,7 +79,7 @@ // Schedule next scan if started (StopDataProvider could have been called // in between DoWifiScanTaskOnNetworkHandlerThread and this method). if (started_) - ScheduleNextScan(polling_policy_->NoWifiInterval()); + ScheduleNextScan(WifiPollingPolicy::Get()->NoWifiInterval()); } void WifiDataProviderChromeOs::DidWifiScanTask(const WifiData& new_data) { @@ -93,8 +89,8 @@ // Schedule next scan if started (StopDataProvider could have been called // in between DoWifiScanTaskOnNetworkHandlerThread and this method). if (started_) { - polling_policy_->UpdatePollingInterval(update_available); - ScheduleNextScan(polling_policy_->PollingInterval()); + WifiPollingPolicy::Get()->UpdatePollingInterval(update_available); + ScheduleNextScan(WifiPollingPolicy::Get()->PollingInterval()); } if (update_available || !is_first_scan_complete_) { @@ -124,7 +120,7 @@ started_ = false; } -void WifiDataProviderChromeOs::ScheduleStart() { +void WifiDataProviderChromeOs::ScheduleStart(int interval) { DCHECK(CalledOnClientThread()); DCHECK(!started_); if (!NetworkHandler::IsInitialized()) { @@ -132,13 +128,12 @@ return; } started_ = true; - // Perform first scan ASAP regardless of the polling policy. If this scan - // fails we'll retry at a rate in line with the polling policy. - NetworkHandler::Get()->task_runner()->PostTask( + NetworkHandler::Get()->task_runner()->PostDelayedTask( FROM_HERE, base::Bind( &WifiDataProviderChromeOs::DoWifiScanTaskOnNetworkHandlerThread, - this)); + this), + base::TimeDelta::FromMilliseconds(interval)); } bool WifiDataProviderChromeOs::GetAccessPointData( @@ -176,6 +171,14 @@ return true; } +std::unique_ptr<WifiPollingPolicy> +WifiDataProviderChromeOs::CreatePollingPolicy() { + return std::make_unique<GenericWifiPollingPolicy< + kDefaultPollingIntervalMilliseconds, kNoChangePollingIntervalMilliseconds, + kTwoNoChangePollingIntervalMilliseconds, + kNoWifiPollingIntervalMilliseconds>>(); +} + // static WifiDataProvider* WifiDataProviderManager::DefaultFactoryFunction() { return new WifiDataProviderChromeOs();
diff --git a/device/geolocation/wifi_data_provider_chromeos.h b/device/geolocation/wifi_data_provider_chromeos.h index f9630f6f..09fcff8 100644 --- a/device/geolocation/wifi_data_provider_chromeos.h +++ b/device/geolocation/wifi_data_provider_chromeos.h
@@ -39,7 +39,7 @@ void ScheduleNextScan(int interval); // Will schedule starting of the scanning process. - void ScheduleStart(); + void ScheduleStart(int interval); // Will schedule stopping of the scanning process. void ScheduleStop(); @@ -47,8 +47,8 @@ // Get access point data from chromeos. bool GetAccessPointData(WifiData::AccessPointDataSet* data); - // Controls the polling update interval. (client thread) - std::unique_ptr<WifiPollingPolicy> polling_policy_; + // Create the policy for controlling the polling update interval. + std::unique_ptr<WifiPollingPolicy> CreatePollingPolicy(); // The latest wifi data. (client thread) WifiData wifi_data_;
diff --git a/device/geolocation/wifi_data_provider_common.cc b/device/geolocation/wifi_data_provider_common.cc index d3027af..f267554e 100644 --- a/device/geolocation/wifi_data_provider_common.cc +++ b/device/geolocation/wifi_data_provider_common.cc
@@ -35,18 +35,15 @@ return; } - DCHECK(!polling_policy_); - polling_policy_ = CreatePollingPolicy(); - DCHECK(polling_policy_); + if (!WifiPollingPolicy::IsInitialized()) + WifiPollingPolicy::Initialize(CreatePollingPolicy()); + DCHECK(WifiPollingPolicy::IsInitialized()); - // Perform first scan ASAP regardless of the polling policy. If this scan - // fails we'll retry at a rate in line with the polling policy. - ScheduleNextScan(0); + ScheduleNextScan(WifiPollingPolicy::Get()->PollingInterval()); } void WifiDataProviderCommon::StopDataProvider() { wlan_api_.reset(); - polling_policy_.reset(); } bool WifiDataProviderCommon::GetData(WifiData* data) { @@ -64,12 +61,12 @@ bool update_available = false; WifiData new_data; if (!wlan_api_->GetAccessPointData(&new_data.access_point_data)) { - ScheduleNextScan(polling_policy_->NoWifiInterval()); + ScheduleNextScan(WifiPollingPolicy::Get()->NoWifiInterval()); } else { update_available = wifi_data_.DiffersSignificantly(new_data); wifi_data_ = new_data; - polling_policy_->UpdatePollingInterval(update_available); - ScheduleNextScan(polling_policy_->PollingInterval()); + WifiPollingPolicy::Get()->UpdatePollingInterval(update_available); + ScheduleNextScan(WifiPollingPolicy::Get()->PollingInterval()); } if (update_available || !is_first_scan_complete_) { is_first_scan_complete_ = true;
diff --git a/device/geolocation/wifi_data_provider_common.h b/device/geolocation/wifi_data_provider_common.h index 44a312c..ad39a54 100644 --- a/device/geolocation/wifi_data_provider_common.h +++ b/device/geolocation/wifi_data_provider_common.h
@@ -72,9 +72,6 @@ // Underlying OS wifi API. std::unique_ptr<WlanApiInterface> wlan_api_; - // Controls the polling update interval. - std::unique_ptr<WifiPollingPolicy> polling_policy_; - // Holder for delayed tasks; takes care of cleanup. base::WeakPtrFactory<WifiDataProviderCommon> weak_factory_;
diff --git a/device/geolocation/wifi_data_provider_common_unittest.cc b/device/geolocation/wifi_data_provider_common_unittest.cc index ec20a12..7db568f 100644 --- a/device/geolocation/wifi_data_provider_common_unittest.cc +++ b/device/geolocation/wifi_data_provider_common_unittest.cc
@@ -14,6 +14,7 @@ #include "base/third_party/dynamic_annotations/dynamic_annotations.h" #include "base/threading/thread_task_runner_handle.h" #include "device/geolocation/wifi_data_provider_manager.h" +#include "device/geolocation/wifi_polling_policy.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -60,7 +61,8 @@ class WifiDataProviderCommonWithMock : public WifiDataProviderCommon { public: WifiDataProviderCommonWithMock() - : wlan_api_(new MockWlanApi), polling_policy_(new MockPollingPolicy) {} + : wlan_api_(new MockWlanApi), + polling_policy_(std::make_unique<MockPollingPolicy>()) {} // WifiDataProviderCommon std::unique_ptr<WlanApiInterface> CreateWlanApi() override { @@ -97,6 +99,7 @@ void TearDown() override { provider_->RemoveCallback(&wifi_data_callback_); provider_->StopDataProvider(); + WifiPollingPolicy::Shutdown(); } protected:
diff --git a/device/geolocation/wifi_polling_policy.cc b/device/geolocation/wifi_polling_policy.cc new file mode 100644 index 0000000..01deed3 --- /dev/null +++ b/device/geolocation/wifi_polling_policy.cc
@@ -0,0 +1,38 @@ +// Copyright 2018 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/geolocation/wifi_polling_policy.h" + +namespace device { + +namespace { +// Leaks at exit. +WifiPollingPolicy* g_wifi_polling_policy; +} // namespace + +// static +void WifiPollingPolicy::Initialize(std::unique_ptr<WifiPollingPolicy> policy) { + DCHECK(!g_wifi_polling_policy); + g_wifi_polling_policy = policy.release(); +} + +// static +void WifiPollingPolicy::Shutdown() { + if (g_wifi_polling_policy) + delete g_wifi_polling_policy; + g_wifi_polling_policy = nullptr; +} + +// static +WifiPollingPolicy* WifiPollingPolicy::Get() { + DCHECK(g_wifi_polling_policy); + return g_wifi_polling_policy; +} + +// static +bool WifiPollingPolicy::IsInitialized() { + return g_wifi_polling_policy != nullptr; +} + +} // namespace device
diff --git a/device/geolocation/wifi_polling_policy.h b/device/geolocation/wifi_polling_policy.h index 0ac9203..226b3852 100644 --- a/device/geolocation/wifi_polling_policy.h +++ b/device/geolocation/wifi_polling_policy.h
@@ -5,21 +5,36 @@ #ifndef DEVICE_GEOLOCATION_WIFI_POLLING_POLICY_H_ #define DEVICE_GEOLOCATION_WIFI_POLLING_POLICY_H_ +#include <memory> + #include "base/macros.h" +#include "base/time/time.h" +#include "device/geolocation/geolocation_export.h" namespace device { // Allows sharing and mocking of the update polling policy function. -class WifiPollingPolicy { +class DEVICE_GEOLOCATION_EXPORT WifiPollingPolicy { public: - WifiPollingPolicy() {} - virtual ~WifiPollingPolicy() {} + virtual ~WifiPollingPolicy() = default; + + // Methods for managing the single instance of WifiPollingPolicy. The WiFi + // policy is global so it can outlive the WifiDataProvider instance, which is + // shut down and destroyed when no WiFi scanning is active. + static void Initialize(std::unique_ptr<WifiPollingPolicy>); + static void Shutdown(); + static WifiPollingPolicy* Get(); + static bool IsInitialized(); + // Calculates the new polling interval for wiFi scans, given the previous // interval and whether the last scan produced new results. virtual void UpdatePollingInterval(bool scan_results_differ) = 0; virtual int PollingInterval() = 0; virtual int NoWifiInterval() = 0; + protected: + WifiPollingPolicy() = default; + private: DISALLOW_COPY_AND_ASSIGN(WifiPollingPolicy); }; @@ -33,6 +48,7 @@ class GenericWifiPollingPolicy : public WifiPollingPolicy { public: GenericWifiPollingPolicy() : polling_interval_(DEFAULT_INTERVAL) {} + // WifiPollingPolicy void UpdatePollingInterval(bool scan_results_differ) override { if (scan_results_differ) { @@ -45,11 +61,37 @@ polling_interval_ = TWO_NO_CHANGE_INTERVAL; } } - int PollingInterval() override { return polling_interval_; } - int NoWifiInterval() override { return NO_WIFI_INTERVAL; } + int PollingInterval() override { return ComputeInterval(polling_interval_); } + int NoWifiInterval() override { return ComputeInterval(NO_WIFI_INTERVAL); } private: + int ComputeInterval(int polling_interval) { + base::Time now = base::Time::Now(); + + int64_t remaining_millis = 0; + if (!next_scan_.is_null()) { + // Compute the remaining duration of the current interval. If the interval + // is not yet complete, we will schedule a scan to occur once it is. + base::TimeDelta remaining = next_scan_ - now; + remaining_millis = remaining.InMilliseconds(); + } + + // If the current interval is complete (or if this is our first scan), scan + // now and schedule the next scan to occur at |polling_interval| + // milliseconds into the future. + if (remaining_millis <= 0) { + next_scan_ = now + base::TimeDelta::FromMilliseconds(polling_interval); + remaining_millis = 0; + } + + return remaining_millis; + } + int polling_interval_; + + // The scheduled time of the next scan, or a null value if no scan has + // occurred yet. + base::Time next_scan_; }; } // namespace device
diff --git a/extensions/test/data/web_view/apitest/main.js b/extensions/test/data/web_view/apitest/main.js index e5d3ef9..7c4c7ec 100644 --- a/extensions/test/data/web_view/apitest/main.js +++ b/extensions/test/data/web_view/apitest/main.js
@@ -172,9 +172,6 @@ var sizeChangeHandler = function(e) { switch (step) { case 1: - // This would be triggered after we set autosize attribute. - embedder.test.assertEq(50, e.oldWidth); - embedder.test.assertEq(100, e.oldHeight); embedder.test.assertTrue(e.newWidth >= 60 && e.newWidth <= 70); embedder.test.assertTrue(e.newHeight >= 110 && e.newHeight <= 120); @@ -248,23 +245,19 @@ webview.maxheight = 200; var step = 1; + var finalWidth = 200; + var finalHeight = 50; webview.addEventListener('sizechanged', function(e) { - switch (step) { - case 1: - embedder.test.assertEq(200, e.newHeight); - // Change the maxheight to verify that we see the change. - webview.maxheight = 50; - break; - case 2: - embedder.test.assertEq(200, e.oldHeight); - embedder.test.assertEq(50, e.newHeight); - embedder.test.succeed(); - break; - default: - window.console.log('Unexpected sizechanged event, step = ' + step); - embedder.test.fail(); - break; - } + embedder.test.assertTrue(e.newHeight >= webview.minheight); + embedder.test.assertTrue(e.newHeight <= webview.maxheight); + embedder.test.assertTrue(e.newWidth >= webview.minwidth); + embedder.test.assertTrue(e.newWidth <= webview.maxwidth); + if (step == 1) + webview.maxheight = 50; + + // We are done once the size settles on the final width and height. + if (e.newHeight == finalHeight && e.newWidth == finalWidth) + embedder.test.succeed(); ++step; });
diff --git a/gpu/command_buffer/service/gl_utils.cc b/gpu/command_buffer/service/gl_utils.cc index ec662c2..468e541 100644 --- a/gpu/command_buffer/service/gl_utils.cc +++ b/gpu/command_buffer/service/gl_utils.cc
@@ -9,6 +9,7 @@ #include "base/metrics/histogram.h" #include "gpu/command_buffer/common/capabilities.h" #include "gpu/command_buffer/service/feature_info.h" +#include "gpu/command_buffer/service/logger.h" #include "ui/gl/gl_version_info.h" namespace gpu { @@ -69,16 +70,16 @@ return "UNKNOWN"; } } -} +} // namespace std::vector<int> GetAllGLErrors() { int gl_errors[] = { - GL_NO_ERROR, - GL_INVALID_ENUM, - GL_INVALID_VALUE, - GL_INVALID_OPERATION, - GL_INVALID_FRAMEBUFFER_OPERATION, - GL_OUT_OF_MEMORY, + GL_NO_ERROR, + GL_INVALID_ENUM, + GL_INVALID_VALUE, + GL_INVALID_OPERATION, + GL_INVALID_FRAMEBUFFER_OPERATION, + GL_OUT_OF_MEMORY, }; return base::CustomHistogram::ArrayToCustomRanges(gl_errors, arraysize(gl_errors)); @@ -152,8 +153,8 @@ const gl::GLVersionInfo& version_info = feature_info->gl_version_info(); caps->VisitPrecisions([&version_info]( - GLenum shader, GLenum type, - Capabilities::ShaderPrecision* shader_precision) { + GLenum shader, GLenum type, + Capabilities::ShaderPrecision* shader_precision) { GLint range[2] = {0, 0}; GLint precision = 0; QueryShaderPrecisionFormat(version_info, shader, type, range, &precision); @@ -264,33 +265,47 @@ return "OpenGL ES GLSL ES 1.0 Chromium"; } -void APIENTRY LogGLDebugMessage(GLenum source, - GLenum type, - GLuint id, - GLenum severity, - GLsizei length, - const GLchar* message, - GLvoid* user_param) { - LOG(ERROR) << "GL Driver Message (" << GetDebugSourceString(source) << ", " - << GetDebugTypeString(type) << ", " << id << ", " - << GetDebugSeverityString(severity) << "): " << message; +static void APIENTRY LogGLDebugMessage(GLenum source, + GLenum type, + GLuint id, + GLenum severity, + GLsizei length, + const GLchar* message, + GLvoid* user_param) { + std::string id_string = GLES2Util::GetStringEnum(id); + Logger* error_logger = static_cast<Logger*>(user_param); + if (type == GL_DEBUG_TYPE_ERROR && source == GL_DEBUG_SOURCE_API) { + error_logger->LogMessage(__FILE__, __LINE__, + " " + id_string + ": " + message); + } else { + error_logger->LogMessage( + __FILE__, __LINE__, + std::string("GL Driver Message (") + GetDebugSourceString(source) + + ", " + GetDebugTypeString(type) + ", " + id_string + ", " + + GetDebugSeverityString(severity) + "): " + message); + } } -void InitializeGLDebugLogging() { +void InitializeGLDebugLogging(bool log_non_errors, Logger* error_logger) { glEnable(GL_DEBUG_OUTPUT); glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS); - // Enable logging of medium and high severity messages - glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_HIGH, 0, - nullptr, GL_TRUE); - glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_MEDIUM, 0, - nullptr, GL_TRUE); - glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_LOW, 0, - nullptr, GL_FALSE); - glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, - GL_DEBUG_SEVERITY_NOTIFICATION, 0, nullptr, GL_FALSE); + glDebugMessageControl(GL_DEBUG_SOURCE_API, GL_DEBUG_TYPE_ERROR, GL_DONT_CARE, + 0, nullptr, GL_TRUE); - glDebugMessageCallback(&LogGLDebugMessage, nullptr); + if (log_non_errors) { + // Enable logging of medium and high severity messages + glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_HIGH, 0, + nullptr, GL_TRUE); + glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_MEDIUM, + 0, nullptr, GL_TRUE); + glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_LOW, 0, + nullptr, GL_FALSE); + glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, + GL_DEBUG_SEVERITY_NOTIFICATION, 0, nullptr, GL_FALSE); + } + + glDebugMessageCallback(&LogGLDebugMessage, error_logger); } bool ValidContextLostReason(GLenum reason) {
diff --git a/gpu/command_buffer/service/gl_utils.h b/gpu/command_buffer/service/gl_utils.h index 9e30fe9c..19d9b01 100644 --- a/gpu/command_buffer/service/gl_utils.h +++ b/gpu/command_buffer/service/gl_utils.h
@@ -19,7 +19,8 @@ // Define this for extra GL error debugging (slower). // #define GL_ERROR_DEBUGGING #ifdef GL_ERROR_DEBUGGING -#define CHECK_GL_ERROR() do { \ +#define CHECK_GL_ERROR() \ + do { \ GLenum gl_error = glGetError(); \ LOG_IF(ERROR, gl_error != GL_NO_ERROR) << "GL Error :" << gl_error; \ } while (0) @@ -38,6 +39,7 @@ namespace gles2 { class FeatureInfo; +class Logger; struct CALayerSharedState { float opacity; @@ -78,21 +80,13 @@ const char* GetServiceShadingLanguageVersionString( const FeatureInfo* feature_info); -void APIENTRY LogGLDebugMessage(GLenum source, - GLenum type, - GLuint id, - GLenum severity, - GLsizei length, - const GLchar* message, - GLvoid* user_param); - -void InitializeGLDebugLogging(); +void InitializeGLDebugLogging(bool log_non_errors, Logger* error_logger); bool ValidContextLostReason(GLenum reason); error::ContextLostReason GetContextLostReasonFromResetStatus( GLenum reset_status); -} // gles2 -} // gpu +} // namespace gles2 +} // namespace gpu #endif // GPU_COMMAND_BUFFER_SERVICE_GL_UTILS_H_
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc index f867733f..e519606 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -3789,7 +3789,7 @@ if (group_->gpu_preferences().enable_gpu_driver_debug_logging && feature_info_->feature_flags().khr_debug) { - InitializeGLDebugLogging(); + InitializeGLDebugLogging(true, &logger_); } if (feature_info_->feature_flags().chromium_texture_filtering_hint &&
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc index 6fe8e67..4f1bcc4 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc
@@ -723,9 +723,14 @@ bound_buffers_[GL_DISPATCH_INDIRECT_BUFFER] = 0; } - if (group_->gpu_preferences().enable_gpu_driver_debug_logging && - feature_info_->feature_flags().khr_debug) { - InitializeGLDebugLogging(); + if (feature_info_->feature_flags().khr_debug) { + // For WebGL contexts, log GL errors so they appear in devtools. Otherwise + // only enable debug logging if requested. + bool log_non_errors = + group_->gpu_preferences().enable_gpu_driver_debug_logging; + if (IsWebGLContextType(attrib_helper.context_type) || log_non_errors) { + InitializeGLDebugLogging(log_non_errors, &logger_); + } } if (feature_info_->feature_flags().chromium_texture_filtering_hint &&
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 154d9611..452bb85d 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
@@ -4050,6 +4050,7 @@ InsertError(GL_INVALID_OPERATION, "Failed to create begin trace"); return error::kNoError; } + debug_marker_manager_.PushGroup(trace_name); return error::kNoError; } @@ -4058,6 +4059,7 @@ InsertError(GL_INVALID_OPERATION, "No trace to end"); return error::kNoError; } + debug_marker_manager_.PopGroup(); return error::kNoError; }
diff --git a/ios/chrome/app/strings/resources/ios_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_strings_ar.xtb index 34a29f9..5d32b99a4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ar.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
@@ -335,7 +335,7 @@ <translation id="7464701184726199289">يمحو هذا الخيار البيانات المتزامنة من كافة الأجهزة. لن يتم حذف إعدادات موقع الويب المحفوظة وقد تعكس عادات التصفح. <ph name="BEGIN_LINK" />مزيد من المعلومات<ph name="END_LINK" /></translation> <translation id="7472734401283673885">اسم الشركة</translation> <translation id="7481312909269577407">إلى الأمام</translation> -<translation id="750493650310597496">لم يتم تحديد أية إشارات</translation> +<translation id="750493650310597496">لم يتم تحديد أي إشارات</translation> <translation id="7514365320538308">تنزيل</translation> <translation id="7537586195939242955">عذرًا، لا يمكن أن تكون بطاقتك مثبتة على Passbook في الوقت الحالي.</translation> <translation id="7561196759112975576">دومًا</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_strings_mr.xtb index 749b3ee..10e4e39 100644 --- a/ios/chrome/app/strings/resources/ios_strings_mr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
@@ -7,7 +7,7 @@ <translation id="1076421457278169141">कोड स्कॅन केला</translation> <translation id="1084365883616172403">Facebook पोस्ट पूर्ण केले.</translation> <translation id="1104948393051856124">स्वीकारा आणि सुरू ठेवा</translation> -<translation id="1112015203684611006">मुद्रण अयशस्वी झाले.</translation> +<translation id="1112015203684611006">प्रिंट अयशस्वी झाले.</translation> <translation id="1125564390852150847">नवीन टॅब तयार करा.</translation> <translation id="1145536944570833626">विद्यमान डेटा हटवा.</translation> <translation id="1165039591588034296">एरर</translation> @@ -30,7 +30,7 @@ <translation id="1389974829397082527">येथे कोणतेही बुकमार्क नाहीत</translation> <translation id="1400642268715879018">मागील 4 आठवडे</translation> <translation id="1407135791313364759">सर्व उघडा</translation> -<translation id="1430915738399379752">मुद्रण</translation> +<translation id="1430915738399379752">प्रिंट</translation> <translation id="145015347812617860"><ph name="COUNT" /> आयटम</translation> <translation id="1491277525950327607">सेटिंग टॉगल करण्यासाठी दोनदा टॅप करा</translation> <translation id="152234381334907219">कधीही जतन न केलेले</translation> @@ -82,7 +82,7 @@ <translation id="2529021024822217800">सर्व उघडा</translation> <translation id="2572712655377361602">डिव्हाइस धोरणाने आपल्या फोटोंंमधील प्रवेश अवरोधित केला</translation> <translation id="2584132361465095047">खाते जोडा...</translation> -<translation id="2593774076813182497">या पृष्ठाचे मुद्रण केले जाऊ शकत नाही.</translation> +<translation id="2593774076813182497">या पृष्ठाचे प्रिंट केले जाऊ शकत नाही.</translation> <translation id="2625189173221582860">पासवर्ड कॉपी केला</translation> <translation id="2648803196158606475">वाचलेले हटवा</translation> <translation id="2653659639078652383">सबमिट करा</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_strings_pl.xtb index 09f95f6..31b6e04 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
@@ -294,7 +294,7 @@ <translation id="6464071786529933911">Otwórz w karcie incognito</translation> <translation id="6482629121755362506">Usunięte elementy: <ph name="NUMBER_OF_SELECTED_BOOKMARKS" /></translation> <translation id="6541915733953096570">Ostatnia godzina</translation> -<translation id="6570040839871198836">Autouzup. form.</translation> +<translation id="6570040839871198836">Autouzupełnianie formularzy</translation> <translation id="6656103420185847513">Folder edytora</translation> <translation id="6657585470893396449">Hasło</translation> <translation id="667999046851023355">Dokument</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_th.xtb b/ios/chrome/app/strings/resources/ios_strings_th.xtb index 8f1f094..030cd505 100644 --- a/ios/chrome/app/strings/resources/ios_strings_th.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_th.xtb
@@ -373,7 +373,7 @@ <translation id="8487700953926739672">ใช้งานแบบออฟไลน์ได้</translation> <translation id="8503813439785031346">ชื่อผู้ใช้</translation> <translation id="850600235656508448">เปิดในโหมดไม่ระบุตัวตน</translation> -<translation id="8517375800490286174">สัญญาอนุญาตโอเพนซอร์ส</translation> +<translation id="8517375800490286174">ใบอนุญาตโอเพนซอร์ส</translation> <translation id="8524799873541103884">แท็บ <ph name="INCOGNITO" /> <ph name="FIRST_VISIBLE_TAB" /> ถึง <ph name="LAST_VISIBLE_TAB" /> จาก <ph name="NUMBER_OF_OPEN_TABS" /></translation> <translation id="8532105204136943229">ปีที่หมดอายุ</translation> <translation id="8534481786647257214">โพสต์ใน Google+ แล้ว</translation>
diff --git a/ios/chrome/browser/metrics/first_user_action_recorder.cc b/ios/chrome/browser/metrics/first_user_action_recorder.cc index 3968c5a..d1925dc 100644 --- a/ios/chrome/browser/metrics/first_user_action_recorder.cc +++ b/ios/chrome/browser/metrics/first_user_action_recorder.cc
@@ -44,8 +44,6 @@ "MobileNewTabOpened", "MobileTabClosed", "MobileTabStripCloseTab", - "MobilePageLoaded", - "MobilePageLoadedWithKeyboard", "MobileStackViewCloseTab", "MobileToolbarShowMenu", "MobileToolbarShowStackView",
diff --git a/ios/chrome/browser/prerender/preload_controller.mm b/ios/chrome/browser/prerender/preload_controller.mm index 07372d9a..a6cbc43d 100644 --- a/ios/chrome/browser/prerender/preload_controller.mm +++ b/ios/chrome/browser/prerender/preload_controller.mm
@@ -10,13 +10,10 @@ #include "base/logging.h" #include "base/metrics/field_trial.h" #include "base/metrics/histogram_macros.h" -#include "base/metrics/user_metrics.h" -#include "base/metrics/user_metrics_action.h" #include "base/strings/sys_string_conversions.h" #include "components/prefs/pref_service.h" #import "components/signin/ios/browser/account_consistency_service.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h" -#include "ios/chrome/browser/chrome_url_constants.h" #import "ios/chrome/browser/geolocation/omnibox_geolocation_controller.h" #import "ios/chrome/browser/history/history_tab_helper.h" #include "ios/chrome/browser/pref_names.h" @@ -257,10 +254,6 @@ if ([tab loadFinished]) { [[OmniboxGeolocationController sharedInstance] finishPageLoadForTab:tab loadSuccess:YES]; - - if (!webState->GetLastCommittedURL().SchemeIs(kChromeUIScheme)) { - base::RecordAction(base::UserMetricsAction("MobilePageLoaded")); - } } [tab setDelegate:nil];
diff --git a/ios/chrome/browser/snapshots/BUILD.gn b/ios/chrome/browser/snapshots/BUILD.gn index 00e1662..845122d 100644 --- a/ios/chrome/browser/snapshots/BUILD.gn +++ b/ios/chrome/browser/snapshots/BUILD.gn
@@ -13,7 +13,6 @@ "snapshot_constants.h", "snapshot_generator_delegate.h", "snapshot_overlay.h", - "snapshot_overlay_provider.h", "snapshot_tab_helper.h", "snapshots_util.h", ]
diff --git a/ios/chrome/browser/snapshots/snapshot_generator.h b/ios/chrome/browser/snapshots/snapshot_generator.h index 74709ef..2e7fc84d 100644 --- a/ios/chrome/browser/snapshots/snapshot_generator.h +++ b/ios/chrome/browser/snapshots/snapshot_generator.h
@@ -25,6 +25,11 @@ - (instancetype)init NS_UNAVAILABLE; +// Returns the size the snapshot for the current page would have if it +// was regenerated. If capturing the snapshot is not possible, returns +// CGSizeZero. +- (CGSize)snapshotSize; + // If |snapshotCoalescingEnabled| is YES snapshots of the web page are // coalesced until this method is called with |snapshotCoalescingEnabled| set to // NO. When snapshot coalescing is enabled, mutiple calls to generate a snapshot
diff --git a/ios/chrome/browser/snapshots/snapshot_generator.mm b/ios/chrome/browser/snapshots/snapshot_generator.mm index e5796c9..deb2b2f5 100644 --- a/ios/chrome/browser/snapshots/snapshot_generator.mm +++ b/ios/chrome/browser/snapshots/snapshot_generator.mm
@@ -88,6 +88,10 @@ @interface SnapshotGenerator ()<CRWWebStateObserver> +// Returns the bounds of the snapshot. Will return an empty rectangle if the +// WebState is not ready to capture a snapshot. +- (CGRect)snapshotFrameVisibleFrameOnly:(BOOL)visibleFrameOnly; + // Takes a snapshot for the supplied view (which should correspond to the given // type of web view). Returns an autoreleased image cropped and scaled // appropriately. The image can also contain overlays (if |overlays| is not @@ -132,6 +136,10 @@ } } +- (CGSize)snapshotSize { + return [self snapshotFrameVisibleFrameOnly:YES].size; +} + - (void)setSnapshotCoalescingEnabled:(BOOL)snapshotCoalescingEnabled { if (snapshotCoalescingEnabled) { DCHECK(!_coalescingSnapshotContext); @@ -210,24 +218,8 @@ - (UIImage*)generateSnapshotWithOverlays:(BOOL)shouldAddOverlay visibleFrameOnly:(BOOL)visibleFrameOnly { - // Do not generate a snapshot if web usage is disabled (as the WebState's - // view is blank in that case). - if (!_webState->IsWebUsageEnabled()) - return nil; - - // Do not generate a snapshot if the delegate says the WebState view is - // not ready (this generally mean a placeholder is displayed). - if (_delegate && ![_delegate canTakeSnapshotForWebState:_webState]) - return nil; - - UIView* view = _webState->GetView(); - CGRect bounds = [view bounds]; - if (visibleFrameOnly) { - UIEdgeInsets insets = [_delegate snapshotEdgeInsetsForWebState:_webState]; - bounds = UIEdgeInsetsInsetRect(bounds, insets); - } - - if (CGRectIsEmpty(bounds)) + CGRect frame = [self snapshotFrameVisibleFrameOnly:visibleFrameOnly]; + if (CGRectIsEmpty(frame)) return nil; NSArray<SnapshotOverlay*>* overlays = @@ -241,8 +233,9 @@ return snapshot; [_delegate willUpdateSnapshotForWebState:_webState]; - snapshot = - [self generateSnapshotForView:view withRect:bounds overlays:overlays]; + snapshot = [self generateSnapshotForView:_webState->GetView() + withRect:frame + overlays:overlays]; [_coalescingSnapshotContext setCachedSnapshot:snapshot withOverlays:overlays visibleFrameOnly:visibleFrameOnly]; @@ -273,6 +266,27 @@ #pragma mark - Private methods +- (CGRect)snapshotFrameVisibleFrameOnly:(BOOL)visibleFrameOnly { + // Do not generate a snapshot if web usage is disabled (as the WebState's + // view is blank in that case). + if (!_webState->IsWebUsageEnabled()) + return CGRectZero; + + // Do not generate a snapshot if the delegate says the WebState view is + // not ready (this generally mean a placeholder is displayed). + if (_delegate && ![_delegate canTakeSnapshotForWebState:_webState]) + return CGRectZero; + + UIView* view = _webState->GetView(); + CGRect frame = [view bounds]; + if (visibleFrameOnly) { + UIEdgeInsets insets = [_delegate snapshotEdgeInsetsForWebState:_webState]; + frame = UIEdgeInsetsInsetRect(frame, insets); + } + + return frame; +} + - (UIImage*)generateSnapshotForView:(UIView*)view withRect:(CGRect)rect overlays:(NSArray<SnapshotOverlay*>*)overlays {
diff --git a/ios/chrome/browser/snapshots/snapshot_overlay_provider.h b/ios/chrome/browser/snapshots/snapshot_overlay_provider.h deleted file mode 100644 index 199405d..0000000 --- a/ios/chrome/browser/snapshots/snapshot_overlay_provider.h +++ /dev/null
@@ -1,22 +0,0 @@ -// Copyright (c) 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_SNAPSHOTS_SNAPSHOT_OVERLAY_PROVIDER_H_ -#define IOS_CHROME_BROWSER_SNAPSHOTS_SNAPSHOT_OVERLAY_PROVIDER_H_ - -#import <UIKit/UIKit.h> - -@class Tab; - -@protocol SnapshotOverlayProvider<NSObject> - -// Returns an array of objects representing views (e.g. infobar, voice search -// button, etc.) currently overlayed. Overlayed views should be ordered so that -// the bottommost view is at the beginning of the array and the topmost view is -// at the end of the array. -- (NSArray*)snapshotOverlaysForTab:(Tab*)tab; - -@end - -#endif // IOS_CHROME_BROWSER_SNAPSHOTS_SNAPSHOT_OVERLAY_PROVIDER_H_
diff --git a/ios/chrome/browser/snapshots/snapshot_tab_helper.h b/ios/chrome/browser/snapshots/snapshot_tab_helper.h index 5caef5f..9579445 100644 --- a/ios/chrome/browser/snapshots/snapshot_tab_helper.h +++ b/ios/chrome/browser/snapshots/snapshot_tab_helper.h
@@ -32,6 +32,11 @@ // results in failures. The delegate is not owned by the tab helper. void SetDelegate(id<SnapshotGeneratorDelegate> delegate); + // Returns the size the snapshot for the current page would have if it + // was regenerated. If capturing the snapshot is not possible, returns + // CGSizeZero. + CGSize GetSnapshotSize() const; + // Retrieves a color snapshot for the current page, invoking |callback| // with the image. The callback may be called synchronously is there is // a cached snapshot available in memory, otherwise it will be invoked
diff --git a/ios/chrome/browser/snapshots/snapshot_tab_helper.mm b/ios/chrome/browser/snapshots/snapshot_tab_helper.mm index d89b518..c175eb48 100644 --- a/ios/chrome/browser/snapshots/snapshot_tab_helper.mm +++ b/ios/chrome/browser/snapshots/snapshot_tab_helper.mm
@@ -110,6 +110,10 @@ snapshot_generator_.delegate = delegate; } +CGSize SnapshotTabHelper::GetSnapshotSize() const { + return [snapshot_generator_ snapshotSize]; +} + void SnapshotTabHelper::RetrieveColorSnapshot(void (^callback)(UIImage*)) { [snapshot_generator_ retrieveSnapshot:callback]; }
diff --git a/ios/chrome/browser/tabs/BUILD.gn b/ios/chrome/browser/tabs/BUILD.gn index 37e4ae4..f0c4d08 100644 --- a/ios/chrome/browser/tabs/BUILD.gn +++ b/ios/chrome/browser/tabs/BUILD.gn
@@ -17,7 +17,6 @@ "tab_model_synced_window_delegate.h", "tab_model_synced_window_delegate_getter.h", "tab_private.h", - "tab_snapshotting_delegate.h", ] public_deps = [ "//ios/web", @@ -26,7 +25,6 @@ "//components/sessions", "//components/signin/ios/browser", "//components/sync_sessions", - "//ios/chrome/browser/snapshots", "//ios/chrome/browser/web:tab_helper_delegates", "//ios/net", "//ios/web/public",
diff --git a/ios/chrome/browser/tabs/tab.h b/ios/chrome/browser/tabs/tab.h index d74874b..696f42f 100644 --- a/ios/chrome/browser/tabs/tab.h +++ b/ios/chrome/browser/tabs/tab.h
@@ -10,7 +10,6 @@ #include <memory> #include <vector> -#import "ios/chrome/browser/snapshots/snapshot_generator_delegate.h" #include "ios/net/request_tracker.h" #include "ios/web/public/user_agent.h" #include "ui/base/page_transition_types.h" @@ -28,14 +27,12 @@ @protocol PassKitDialogProvider; @class PasswordController; @class SnapshotManager; -@protocol SnapshotOverlayProvider; @class FormSuggestionController; @protocol TabDelegate; @protocol TabDialogDelegate; @class Tab; @protocol TabHeadersDelegate; @class TabModel; -@protocol TabSnapshottingDelegate; @protocol FindInPageControllerDelegate; namespace ios { @@ -80,7 +77,7 @@ // Chrome's WebContents in that it encapsulates rendering. Acts as the // delegate for the WebState in order to process info about pages having // loaded. -@interface Tab : NSObject<SnapshotGeneratorDelegate> +@interface Tab : NSObject // Browser state associated with this Tab. @property(nonatomic, readonly) ios::ChromeBrowserState* browserState; @@ -103,7 +100,6 @@ @property(nonatomic, readonly) BOOL canGoForward; @property(nonatomic, weak) id<TabDelegate> delegate; @property(nonatomic, weak) id<TabHeadersDelegate> tabHeadersDelegate; -@property(nonatomic, weak) id<TabSnapshottingDelegate> tabSnapshottingDelegate; @property(nonatomic, readonly) id<FindInPageControllerDelegate> findInPageControllerDelegate; @@ -120,7 +116,6 @@ OverscrollActionsController* overscrollActionsController; @property(nonatomic, weak) id<OverscrollActionsControllerDelegate> overscrollActionsControllerDelegate; -@property(nonatomic, weak) id<SnapshotOverlayProvider> snapshotOverlayProvider; // Delegate used to show HTTP Authentication dialogs. @property(nonatomic, weak) id<TabDialogDelegate> dialogDelegate; @@ -191,6 +186,9 @@ // Called when this tab is hidden. - (void)wasHidden; +// Called before capturing a snapshot for Tab. +- (void)willUpdateSnapshot; + // Evaluates U2F result. - (void)evaluateU2FResultFromURL:(const GURL&)url;
diff --git a/ios/chrome/browser/tabs/tab.mm b/ios/chrome/browser/tabs/tab.mm index d4aad602..5ce17e1c 100644 --- a/ios/chrome/browser/tabs/tab.mm +++ b/ios/chrome/browser/tabs/tab.mm
@@ -62,7 +62,6 @@ #include "ios/chrome/browser/sessions/ios_chrome_session_tab_helper.h" #import "ios/chrome/browser/snapshots/snapshot_cache.h" #import "ios/chrome/browser/snapshots/snapshot_cache_factory.h" -#import "ios/chrome/browser/snapshots/snapshot_overlay_provider.h" #import "ios/chrome/browser/snapshots/snapshot_tab_helper.h" #import "ios/chrome/browser/tabs/legacy_tab_helper.h" #import "ios/chrome/browser/tabs/tab_delegate.h" @@ -71,7 +70,6 @@ #import "ios/chrome/browser/tabs/tab_helper_util.h" #import "ios/chrome/browser/tabs/tab_model.h" #import "ios/chrome/browser/tabs/tab_private.h" -#import "ios/chrome/browser/tabs/tab_snapshotting_delegate.h" #include "ios/chrome/browser/translate/chrome_ios_translate_client.h" #import "ios/chrome/browser/u2f/u2f_controller.h" #import "ios/chrome/browser/ui/commands/generic_chrome_command.h" @@ -202,8 +200,6 @@ @synthesize passKitDialogProvider = passKitDialogProvider_; @synthesize delegate = delegate_; @synthesize dialogDelegate = dialogDelegate_; -@synthesize snapshotOverlayProvider = snapshotOverlayProvider_; -@synthesize tabSnapshottingDelegate = tabSnapshottingDelegate_; @synthesize tabHeadersDelegate = tabHeadersDelegate_; @synthesize legacyFullscreenControllerDelegate = legacyFullscreenControllerDelegate_; @@ -387,7 +383,6 @@ DCHECK_EQ(_webStateImpl, webState); self.overscrollActionsControllerDelegate = nil; self.passKitDialogProvider = nil; - self.snapshotOverlayProvider = nil; [_openInController detachFromWebController]; _openInController = nil; @@ -508,10 +503,6 @@ - (void)webState:(web::WebState*)webState didFinishNavigation:(web::NavigationContext*)navigation { - if (!navigation->GetError()) { - [self countMainFrameLoad]; - } - [_parentTabModel notifyTabChanged:self]; } @@ -570,14 +561,6 @@ suggestedFilename:base::SysUTF16ToNSString(filename)]; } -- (void)countMainFrameLoad { - if (self.isPrerenderTab || - self.webState->GetLastCommittedURL().SchemeIs(kChromeUIScheme)) { - return; - } - base::RecordAction(base::UserMetricsAction("MobilePageLoaded")); -} - - (BOOL)shouldRecordPageLoadStartForNavigation: (web::NavigationContext*)navigation { web::NavigationItem* lastCommittedItem = @@ -970,48 +953,10 @@ self.webState->WasHidden(); } -#pragma mark - SnapshotGeneratorDelegate - -- (BOOL)canTakeSnapshotForWebState:(web::WebState*)webState { - DCHECK_EQ(_webStateImpl, webState); - return !PagePlaceholderTabHelper::FromWebState(webState) - ->displaying_placeholder(); -} - -- (UIEdgeInsets)snapshotEdgeInsetsForWebState:(web::WebState*)webState { - DCHECK_EQ(_webStateImpl, webState); - if (self.tabSnapshottingDelegate) - return [self.tabSnapshottingDelegate snapshotEdgeInsetsForTab:self]; - - if (self.tabHeadersDelegate) { - CGFloat headerHeight = [self.tabHeadersDelegate tabHeaderHeightForTab:self]; - return UIEdgeInsetsMake(headerHeight, 0.0, 0.0, 0.0); - } - - return UIEdgeInsetsZero; -} - -- (NSArray<SnapshotOverlay*>*)snapshotOverlaysForWebState: - (web::WebState*)webState { - DCHECK_EQ(_webStateImpl, webState); - return [snapshotOverlayProvider_ snapshotOverlaysForTab:self]; -} - -- (void)willUpdateSnapshotForWebState:(web::WebState*)webState { - DCHECK_EQ(_webStateImpl, webState); - id<CRWNativeContent> nativeContent = [self.webController nativeController]; - if ([nativeContent respondsToSelector:@selector(willUpdateSnapshot)]) { - [nativeContent willUpdateSnapshot]; - } +- (void)willUpdateSnapshot { [_overscrollActionsController clear]; } -- (void)didUpdateSnapshotForWebState:(web::WebState*)webState - withImage:(UIImage*)snapshot { - DCHECK_EQ(_webStateImpl, webState); - [_parentTabModel notifyTabSnapshotChanged:self withImage:snapshot]; -} - @end #pragma mark - TestingSupport
diff --git a/ios/chrome/browser/tabs/tab_snapshotting_delegate.h b/ios/chrome/browser/tabs/tab_snapshotting_delegate.h deleted file mode 100644 index 3a81f4b..0000000 --- a/ios/chrome/browser/tabs/tab_snapshotting_delegate.h +++ /dev/null
@@ -1,21 +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 IOS_CHROME_BROWSER_TABS_TAB_SNAPSHOTTING_DELEGATE_H_ -#define IOS_CHROME_BROWSER_TABS_TAB_SNAPSHOTTING_DELEGATE_H_ - -#import <UIKit/UIKit.h> - -@class Tab; - -// A protocol implemented by a snapshotting delegate of Tab. -@protocol TabSnapshottingDelegate - -// Returns the edge insets used to crop the snapshot during generation. If the -// snapshot should not be cropped, then UIEdgeInsetsZero can be returned. -- (UIEdgeInsets)snapshotEdgeInsetsForTab:(Tab*)tab; - -@end - -#endif // IOS_CHROME_BROWSER_TABS_TAB_SNAPSHOTTING_DELEGATE_H_
diff --git a/ios/chrome/browser/ui/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view_controller.mm index cda0e70..b1add91 100644 --- a/ios/chrome/browser/ui/browser_view_controller.mm +++ b/ios/chrome/browser/ui/browser_view_controller.mm
@@ -96,8 +96,8 @@ #import "ios/chrome/browser/signin/account_consistency_service_factory.h" #include "ios/chrome/browser/signin/account_reconcilor_factory.h" #import "ios/chrome/browser/snapshots/snapshot_cache.h" +#import "ios/chrome/browser/snapshots/snapshot_generator_delegate.h" #import "ios/chrome/browser/snapshots/snapshot_overlay.h" -#import "ios/chrome/browser/snapshots/snapshot_overlay_provider.h" #import "ios/chrome/browser/snapshots/snapshot_tab_helper.h" #import "ios/chrome/browser/ssl/captive_portal_detector_tab_helper.h" #import "ios/chrome/browser/ssl/captive_portal_detector_tab_helper_delegate.h" @@ -109,7 +109,6 @@ #import "ios/chrome/browser/tabs/tab_model.h" #import "ios/chrome/browser/tabs/tab_model_observer.h" #import "ios/chrome/browser/tabs/tab_private.h" -#import "ios/chrome/browser/tabs/tab_snapshotting_delegate.h" #import "ios/chrome/browser/translate/chrome_ios_translate_client.h" #import "ios/chrome/browser/translate/language_selection_handler.h" #import "ios/chrome/browser/ui/activity_services/activity_service_legacy_coordinator.h" @@ -193,6 +192,7 @@ #import "ios/chrome/browser/ui/tabs/tab_strip_legacy_coordinator.h" #import "ios/chrome/browser/ui/toolbar/adaptive/primary_toolbar_coordinator.h" #import "ios/chrome/browser/ui/toolbar/adaptive/secondary_toolbar_coordinator.h" +#import "ios/chrome/browser/ui/toolbar/adaptive/toolbar_coordinator_adaptor.h" #include "ios/chrome/browser/ui/toolbar/legacy_toolbar_coordinator.h" #import "ios/chrome/browser/ui/toolbar/legacy_toolbar_ui_updater.h" #import "ios/chrome/browser/ui/toolbar/public/primary_toolbar_coordinator.h" @@ -427,13 +427,12 @@ SideSwipeControllerDelegate, SigninPresenter, SKStoreProductViewControllerDelegate, - SnapshotOverlayProvider, + SnapshotGeneratorDelegate, StoreKitLauncher, TabDialogDelegate, TabHeadersDelegate, TabHistoryPresentation, TabModelObserver, - TabSnapshottingDelegate, TabStripPresentation, ToolsMenuConfigurationProvider, UIGestureRecognizerDelegate, @@ -587,12 +586,6 @@ // Coordinator for the toolbar. LegacyToolbarCoordinator* _toolbarCoordinator; - // Coordinator for the primary toolbar, displayed on top. - PrimaryToolbarCoordinator* _topToolbarCoordinator; - - // Coordinator for the secondary toolbar, displayed on bottom. - SecondaryToolbarCoordinator* _bottomToolbarCoordinator; - // The toolbar UI updater for the toolbar managed by |_toolbarCoordinator|. LegacyToolbarUIUpdater* _toolbarUIUpdater; @@ -692,11 +685,15 @@ BubbleViewControllerPresenter* incognitoTabTipBubblePresenter; // Primary toolbar. -@property(nonatomic, readonly) id<PrimaryToolbarCoordinator> +@property(nonatomic, strong) id<PrimaryToolbarCoordinator> primaryToolbarCoordinator; // Secondary toolbar. -@property(nonatomic, readonly) +@property(nonatomic, strong) SecondaryToolbarCoordinator* secondaryToolbarCoordinator; +// Interface object with the toolbars. +@property(nonatomic, strong) + id<ToolbarCoordinating, ToolsMenuPresentationStateProvider> + toolbarInterface; // TODO(crbug.com/788705): Removes this property and associated calls. // Returns the LegacyToolbarCoordinator. This property is here to separate // methods which will be removed during cleanup to other methods. Uses this @@ -942,7 +939,10 @@ @synthesize tabStripView = _tabStripView; @synthesize tabTipBubblePresenter = _tabTipBubblePresenter; @synthesize incognitoTabTipBubblePresenter = _incognitoTabTipBubblePresenter; +@synthesize primaryToolbarCoordinator = _primaryToolbarCoordinator; +@synthesize secondaryToolbarCoordinator = _secondaryToolbarCoordinator; @synthesize primaryToolbarOffsetConstraint = _primaryToolbarOffsetConstraint; +@synthesize toolbarInterface = _toolbarInterface; @synthesize imageSaver = _imageSaver; // DialogPresenterDelegate property @synthesize dialogPresenterDelegateIsPresenting = @@ -1308,18 +1308,6 @@ return [self headerHeightForTab:[_model currentTab]]; } -- (id<PrimaryToolbarCoordinator>)primaryToolbarCoordinator { - if (base::FeatureList::IsEnabled(kAdaptiveToolbar)) { - return _topToolbarCoordinator; - } else { - return _toolbarCoordinator; - } -} - -- (SecondaryToolbarCoordinator*)secondaryToolbarCoordinator { - return _bottomToolbarCoordinator; -} - - (LegacyToolbarCoordinator*)legacyToolbarCoordinator { return _toolbarCoordinator; } @@ -1509,8 +1497,11 @@ self.tabStripCoordinator = nil; [_toolbarCoordinator stop]; _toolbarCoordinator = nil; - [_topToolbarCoordinator stop]; - _topToolbarCoordinator = nil; + [self.primaryToolbarCoordinator stop]; + self.primaryToolbarCoordinator = nil; + [self.secondaryToolbarCoordinator stop]; + self.secondaryToolbarCoordinator = nil; + self.toolbarInterface = nil; self.tabStripView = nil; _infoBarContainer = nil; _readingListMenuNotifier = nil; @@ -1717,7 +1708,9 @@ _readingListCoordinator = nil; self.recentTabsCoordinator = nil; _toolbarCoordinator = nil; - _topToolbarCoordinator = nil; + self.primaryToolbarCoordinator = nil; + self.secondaryToolbarCoordinator = nil; + self.toolbarInterface = nil; [_toolbarUIUpdater stopUpdating]; _toolbarUIUpdater = nil; _toolbarModelDelegate = nil; @@ -1935,25 +1928,37 @@ newToolbarModelIOSWithDelegate:_toolbarModelDelegate.get()]); if (base::FeatureList::IsEnabled(kAdaptiveToolbar)) { - _topToolbarCoordinator = [[PrimaryToolbarCoordinator alloc] + PrimaryToolbarCoordinator* topToolbarCoordinator = + [[PrimaryToolbarCoordinator alloc] initWithBrowserState:_browserState]; + self.primaryToolbarCoordinator = topToolbarCoordinator; + topToolbarCoordinator.delegate = self; + topToolbarCoordinator.URLLoader = self; + topToolbarCoordinator.webStateList = [_model webStateList]; + topToolbarCoordinator.dispatcher = self.dispatcher; + [topToolbarCoordinator start]; + + SecondaryToolbarCoordinator* bottomToolbarCoordinator = + [[SecondaryToolbarCoordinator alloc] + initWithBaseViewController:nil + browserState:_browserState]; + self.secondaryToolbarCoordinator = bottomToolbarCoordinator; + bottomToolbarCoordinator.dispatcher = self.dispatcher; + [bottomToolbarCoordinator start]; + + ToolbarCoordinatorAdaptor* adaptor = [[ToolbarCoordinatorAdaptor alloc] initWithToolsMenuConfigurationProvider:self - dispatcher:self.dispatcher - browserState:_browserState]; - _topToolbarCoordinator.delegate = self; - _topToolbarCoordinator.URLLoader = self; - _topToolbarCoordinator.webStateList = [_model webStateList]; - [_topToolbarCoordinator start]; - _bottomToolbarCoordinator = [[SecondaryToolbarCoordinator alloc] - initWithBaseViewController:nil - browserState:_browserState]; - _bottomToolbarCoordinator.dispatcher = self.dispatcher; - [_bottomToolbarCoordinator start]; + dispatcher:self.dispatcher]; + self.toolbarInterface = adaptor; + [adaptor addToolbarCoordinator:topToolbarCoordinator]; + // TODO(crbug.com/800330): Add secondary toolbar. } else { _toolbarCoordinator = [[LegacyToolbarCoordinator alloc] initWithBaseViewController:self toolsMenuConfigurationProvider:self dispatcher:self.dispatcher browserState:_browserState]; + self.primaryToolbarCoordinator = _toolbarCoordinator; + self.toolbarInterface = _toolbarCoordinator; [_toolbarCoordinator setToolbarController: [_dependencyFactory @@ -2256,7 +2261,7 @@ Tab* tab = [_model currentTab]; if (![tab navigationManager]) return; - [_toolbarCoordinator updateToolbarState]; + [self.toolbarInterface updateToolbarState]; [self.legacyToolbarCoordinator setShareButtonEnabled:self.canShowShareMenu]; if (_insertedTabWasPrerenderedTab && !_toolbarModelIOS->IsLoading()) @@ -2842,7 +2847,7 @@ DCHECK(!prerenderService || !prerenderService->IsWebStatePrerendered(tab.webState)); - SnapshotTabHelper::FromWebState(tab.webState)->SetDelegate(tab); + SnapshotTabHelper::FromWebState(tab.webState)->SetDelegate(self); // TODO(crbug.com/777557): do not pass the dispatcher to PasswordTabHelper. if (PasswordTabHelper* passwordTabHelper = @@ -2853,7 +2858,6 @@ } tab.dialogDelegate = self; - tab.snapshotOverlayProvider = self; tab.passKitDialogProvider = self; if (!base::FeatureList::IsEnabled(fullscreen::features::kNewFullscreen)) { tab.legacyFullscreenControllerDelegate = self; @@ -2862,7 +2866,6 @@ tab.overscrollActionsControllerDelegate = self; } tab.tabHeadersDelegate = self; - tab.tabSnapshottingDelegate = self; // Install the proper CRWWebController delegates. tab.webController.nativeProvider = self; tab.webController.swipeRecognizerProvider = self.sideSwipeController; @@ -2916,7 +2919,6 @@ } tab.dialogDelegate = nil; - tab.snapshotOverlayProvider = nil; tab.passKitDialogProvider = nil; if (!base::FeatureList::IsEnabled(fullscreen::features::kNewFullscreen)) { tab.legacyFullscreenControllerDelegate = nil; @@ -2925,7 +2927,6 @@ tab.overscrollActionsControllerDelegate = nil; } tab.tabHeadersDelegate = nil; - tab.tabSnapshottingDelegate = nil; tab.webController.nativeProvider = nil; tab.webController.swipeRecognizerProvider = nil; StoreKitTabHelper* tabHelper = StoreKitTabHelper::FromWebState(tab.webState); @@ -3034,13 +3035,38 @@ #pragma mark - ** Protocol Implementations and Helpers ** -#pragma mark - SnapshotOverlayProvider methods +#pragma mark - SnapshotGeneratorDelegate methods -- (NSArray*)snapshotOverlaysForTab:(Tab*)tab { - NSMutableArray* overlays = [NSMutableArray array]; - if (![_model webUsageEnabled]) { - return overlays; +- (BOOL)canTakeSnapshotForWebState:(web::WebState*)webState { + DCHECK(webState); + Tab* tab = LegacyTabHelper::GetTabForWebState(webState); + DCHECK([self.tabModel indexOfTab:tab] != NSNotFound); + return !PagePlaceholderTabHelper::FromWebState(webState) + ->displaying_placeholder(); +} + +- (UIEdgeInsets)snapshotEdgeInsetsForWebState:(web::WebState*)webState { + DCHECK(webState); + Tab* tab = LegacyTabHelper::GetTabForWebState(webState); + DCHECK([self.tabModel indexOfTab:tab] != NSNotFound); + + CGFloat headerHeight = [self headerHeightForTab:tab]; + id nativeController = [self nativeControllerForTab:tab]; + if ([nativeController respondsToSelector:@selector(toolbarHeight)]) + headerHeight += [nativeController toolbarHeight]; + return UIEdgeInsetsMake(headerHeight, 0.0, 0.0, 0.0); +} + +- (NSArray<SnapshotOverlay*>*)snapshotOverlaysForWebState: + (web::WebState*)webState { + DCHECK(webState); + Tab* tab = LegacyTabHelper::GetTabForWebState(webState); + DCHECK([self.tabModel indexOfTab:tab] != NSNotFound); + if (!self.tabModel.webUsageEnabled) { + return @[]; } + + NSMutableArray* overlays = [NSMutableArray array]; UIView* voiceSearchView = [self voiceSearchOverlayViewForTab:tab]; if (voiceSearchView) { CGFloat voiceSearchYOffset = [self voiceSearchOverlayYOffsetForTab:tab]; @@ -3060,7 +3086,26 @@ return overlays; } -#pragma mark - SnapshotOverlayProvider helpers +- (void)willUpdateSnapshotForWebState:(web::WebState*)webState { + DCHECK(webState); + Tab* tab = LegacyTabHelper::GetTabForWebState(webState); + DCHECK([self.tabModel indexOfTab:tab] != NSNotFound); + id<CRWNativeContent> nativeController = [self nativeControllerForTab:tab]; + if ([nativeController respondsToSelector:@selector(willUpdateSnapshot)]) { + [nativeController willUpdateSnapshot]; + } + [tab willUpdateSnapshot]; +} + +- (void)didUpdateSnapshotForWebState:(web::WebState*)webState + withImage:(UIImage*)snapshot { + DCHECK(webState); + Tab* tab = LegacyTabHelper::GetTabForWebState(webState); + DCHECK([self.tabModel indexOfTab:tab] != NSNotFound); + [self.tabModel notifyTabSnapshotChanged:tab withImage:snapshot]; +} + +#pragma mark - SnapshotGeneratorDelegate helpers // Provides a view that encompasses currently displayed infobar(s) or nil // if no infobar is presented. @@ -3714,16 +3759,6 @@ return self.headerHeight + StatusBarHeight(); } -#pragma mark - TabSnapshottingDelegate methods. - -- (UIEdgeInsets)snapshotEdgeInsetsForTab:(Tab*)tab { - CGFloat headerHeight = [self headerHeightForTab:tab]; - id nativeController = [self nativeControllerForTab:tab]; - if ([nativeController respondsToSelector:@selector(toolbarHeight)]) - headerHeight += [nativeController toolbarHeight]; - return UIEdgeInsetsMake(headerHeight, 0.0, 0.0, 0.0); -} - #pragma mark - NewTabPageControllerObserver methods. - (void)selectedPanelDidChange { @@ -3785,7 +3820,7 @@ ntpObserver:self browserState:_browserState colorCache:_dominantColorCache - toolbarDelegate:_toolbarCoordinator + toolbarDelegate:self.toolbarInterface tabModel:_model parentViewController:self dispatcher:self.dispatcher @@ -4950,7 +4985,8 @@ CGRect imageFrame = CGRectZero; if (self.isToolbarOnScreen) { imageFrame = UIEdgeInsetsInsetRect( - _contentArea.bounds, [self snapshotEdgeInsetsForTab:topTab]); + _contentArea.bounds, + [self snapshotEdgeInsetsForWebState:topTab.webState]); } else { imageFrame = [topTab.webState->GetView() bounds]; } @@ -5154,7 +5190,7 @@ } - (BOOL)preventSideSwipe { - if ([_toolbarCoordinator isShowingToolsMenu]) + if ([self.toolbarInterface isShowingToolsMenu]) return YES; if (_voiceSearchController && _voiceSearchController->IsVisible())
diff --git a/ios/chrome/browser/ui/payments/payment_request_manager.mm b/ios/chrome/browser/ui/payments/payment_request_manager.mm index 0afe825..c923e322b 100644 --- a/ios/chrome/browser/ui/payments/payment_request_manager.mm +++ b/ios/chrome/browser/ui/payments/payment_request_manager.mm
@@ -775,9 +775,8 @@ } - (BOOL)handleResponseComplete:(const base::DictionaryValue&)message { - DCHECK(_pendingPaymentRequest); - - // TODO(crbug.com/602666): Check that there *is* a pending response here. + if (!_pendingPaymentRequest) + return YES; [_unblockEventQueueTimer invalidate]; [_paymentResponseTimeoutTimer invalidate]; @@ -1094,6 +1093,10 @@ - (void)webState:(web::WebState*)webState didStartNavigation:(web::NavigationContext*)navigation { + // Ignore navigations within the same document, e.g., history.pushState(). + if (navigation->IsSameDocument()) + return; + DCHECK_EQ(_activeWebState, webState); payments::JourneyLogger::AbortReason abortReason = navigation->IsRendererInitiated()
diff --git a/ios/chrome/browser/ui/side_swipe/side_swipe_controller.h b/ios/chrome/browser/ui/side_swipe/side_swipe_controller.h index 8a000a7b..2cc4324 100644 --- a/ios/chrome/browser/ui/side_swipe/side_swipe_controller.h +++ b/ios/chrome/browser/ui/side_swipe/side_swipe_controller.h
@@ -8,8 +8,8 @@ #import <UIKit/UIKit.h> #include "ios/chrome/browser/infobars/infobar_container_ios.h" +#import "ios/chrome/browser/snapshots/snapshot_generator_delegate.h" #import "ios/chrome/browser/tabs/tab_model.h" -#import "ios/chrome/browser/tabs/tab_snapshotting_delegate.h" #import "ios/web/web_state/ui/crw_swipe_recognizer_provider.h" @class CardSideSwipeView; @@ -74,7 +74,7 @@ @property(nonatomic, weak) id<SideSwipeControllerDelegate> swipeDelegate; @property(nonatomic, weak) id<SideSwipeToolbarInteracting> toolbarInteractionHandler; -@property(nonatomic, weak) id<TabSnapshottingDelegate> snapshotDelegate; +@property(nonatomic, weak) id<SnapshotGeneratorDelegate> snapshotDelegate; @property(nonatomic, weak) id<TabStripHighlighting> tabStripDelegate; // Initializer.
diff --git a/ios/chrome/browser/ui/side_swipe/side_swipe_controller.mm b/ios/chrome/browser/ui/side_swipe/side_swipe_controller.mm index 3c9afe43..2da738bb 100644 --- a/ios/chrome/browser/ui/side_swipe/side_swipe_controller.mm +++ b/ios/chrome/browser/ui/side_swipe/side_swipe_controller.mm
@@ -484,9 +484,12 @@ // Show horizontal swipe stack view for iPhone. - (void)handleiPhoneTabSwipe:(SideSwipeGestureRecognizer*)gesture { if (gesture.state == UIGestureRecognizerStateBegan) { + Tab* currentTab = [model_ currentTab]; + DCHECK(currentTab.webState); + if (!base::FeatureList::IsEnabled(fullscreen::features::kNewFullscreen)) { // If the toolbar is hidden, move it to visible. - [[model_ currentTab] updateFullscreenWithToolbarVisible:YES]; + [currentTab updateFullscreenWithToolbarVisible:YES]; } inSwipe_ = YES; @@ -495,8 +498,10 @@ // Add horizontal stack view controller. CGFloat headerHeight = - [self.snapshotDelegate snapshotEdgeInsetsForTab:[model_ currentTab]] + [self.snapshotDelegate + snapshotEdgeInsetsForWebState:currentTab.webState] .top; + if (tabSideSwipeView_) { [tabSideSwipeView_ setFrame:frame]; [tabSideSwipeView_ setTopMargin:headerHeight]; @@ -513,8 +518,9 @@ } // Ensure that there's an up-to-date snapshot of the current tab. - SnapshotTabHelper::FromWebState([model_ currentTab].webState) + SnapshotTabHelper::FromWebState(currentTab.webState) ->UpdateSnapshot(/*with_overlays=*/true, /*visible_frame_only=*/true); + // Hide the infobar after snapshot has been updated (see the previous line) // to avoid it obscuring the cards in the side swipe view. [swipeDelegate_ updateAccessoryViewsForSideSwipeWithVisibility:NO];
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_switcher_cache.mm b/ios/chrome/browser/ui/tab_switcher/tab_switcher_cache.mm index fc575ce..351bcc3 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_switcher_cache.mm +++ b/ios/chrome/browser/ui/tab_switcher/tab_switcher_cache.mm
@@ -99,16 +99,15 @@ return currentRequest; } - CGRect tabContentArea = - UIEdgeInsetsInsetRect([tab.webState->GetView() bounds], - [tab snapshotEdgeInsetsForWebState:tab.webState]); - CGFloat tabContentAreaRatio = - tabContentArea.size.width / tabContentArea.size.height; + CGSize newSnapshotSize = + SnapshotTabHelper::FromWebState(tab.webState)->GetSnapshotSize(); + CGFloat newSnapshotAreaRatio = + newSnapshotSize.width / newSnapshotSize.height; CGFloat cachedSnapshotRatio = [snapshot size].width / [snapshot size].height; // Check that the cached snapshot's ratio matches the content area ratio. - if (std::abs(tabContentAreaRatio - cachedSnapshotRatio) < kMaxFloatDelta) { + if (std::abs(newSnapshotAreaRatio - cachedSnapshotRatio) < kMaxFloatDelta) { // Cache hit. completionBlock(snapshot); return currentRequest;
diff --git a/ios/chrome/browser/ui/toolbar/adaptive/BUILD.gn b/ios/chrome/browser/ui/toolbar/adaptive/BUILD.gn index 95c31d4..081c27d 100644 --- a/ios/chrome/browser/ui/toolbar/adaptive/BUILD.gn +++ b/ios/chrome/browser/ui/toolbar/adaptive/BUILD.gn
@@ -8,6 +8,8 @@ "primary_toolbar_coordinator.mm", "secondary_toolbar_coordinator.h", "secondary_toolbar_coordinator.mm", + "toolbar_coordinator_adaptor.h", + "toolbar_coordinator_adaptor.mm", ] deps = [ ":adaptive_ui", @@ -15,6 +17,7 @@ "//components/google/core/browser", "//ios/chrome/browser/browser_state", "//ios/chrome/browser/ui", + "//ios/chrome/browser/ui/commands", "//ios/chrome/browser/ui/coordinators:chrome_coordinators", "//ios/chrome/browser/ui/location_bar", "//ios/chrome/browser/ui/omnibox", @@ -24,6 +27,8 @@ "//ios/chrome/browser/ui/toolbar/clean:toolbar", "//ios/chrome/browser/ui/toolbar/clean:toolbar_components_ui", "//ios/chrome/browser/ui/toolbar/public", + "//ios/chrome/browser/ui/tools_menu", + "//ios/chrome/browser/ui/tools_menu/public", "//ios/chrome/browser/web_state_list", "//ios/web", ]
diff --git a/ios/chrome/browser/ui/toolbar/adaptive/primary_toolbar_coordinator.h b/ios/chrome/browser/ui/toolbar/adaptive/primary_toolbar_coordinator.h index ea370e9..038c6009 100644 --- a/ios/chrome/browser/ui/toolbar/adaptive/primary_toolbar_coordinator.h +++ b/ios/chrome/browser/ui/toolbar/adaptive/primary_toolbar_coordinator.h
@@ -7,12 +7,12 @@ #import <UIKit/UIKit.h> +#import "ios/chrome/browser/ui/commands/toolbar_commands.h" #import "ios/chrome/browser/ui/coordinators/chrome_coordinator.h" #import "ios/chrome/browser/ui/toolbar/public/primary_toolbar_coordinator.h" @protocol ApplicationCommands; @protocol BrowserCommands; -@class CommandDispatcher; @protocol ToolbarCommands; @protocol ToolbarCoordinatorDelegate; @protocol ToolsMenuConfigurationProvider; @@ -22,13 +22,9 @@ // Coordinator for the primary toolbar. In an adaptive toolbar paradigm, this is // the toolbar always displayed. @interface PrimaryToolbarCoordinator - : ChromeCoordinator<PrimaryToolbarCoordinator> + : ChromeCoordinator<PrimaryToolbarCoordinator, ToolbarCommands> -- (instancetype) -initWithToolsMenuConfigurationProvider: - (id<ToolsMenuConfigurationProvider>)configurationProvider - dispatcher:(CommandDispatcher*)dispatcher - browserState:(ios::ChromeBrowserState*)browserState +- (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState NS_DESIGNATED_INITIALIZER; - (instancetype)initWithBaseViewController:(UIViewController*)viewController NS_UNAVAILABLE;
diff --git a/ios/chrome/browser/ui/toolbar/adaptive/primary_toolbar_coordinator.mm b/ios/chrome/browser/ui/toolbar/adaptive/primary_toolbar_coordinator.mm index 8608ceaa..0692988e 100644 --- a/ios/chrome/browser/ui/toolbar/adaptive/primary_toolbar_coordinator.mm +++ b/ios/chrome/browser/ui/toolbar/adaptive/primary_toolbar_coordinator.mm
@@ -58,16 +58,8 @@ #pragma mark - ChromeCoordinator -- (instancetype) -initWithToolsMenuConfigurationProvider:(id)configurationProvider - dispatcher:(id)dispatcher - browserState:(ios::ChromeBrowserState*)browserState { - self = [super initWithBaseViewController:nil browserState:browserState]; - if (self) { - // TODO(crbug.com/799422): Initialize the toolsMenu. - _dispatcher = dispatcher; - } - return self; +- (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState { + return [super initWithBaseViewController:nil browserState:browserState]; } - (void)start { @@ -153,6 +145,32 @@ return omniboxViewIOS->IsPopupOpen(); } +#pragma mark - ToolbarCoordinating + +- (void)updateToolbarState { +} + +- (void)setToolbarBackgroundAlpha:(CGFloat)alpha { +} + +- (BOOL)isShowingToolsMenu { + return NO; +} + +#pragma mark - ToolbarCommands + +- (void)contractToolbar { + // TODO(crbug.com/801082): Implement that. +} + +- (void)triggerToolsMenuButtonAnimation { + // TODO(crbug.com/801083): Implement that. +} + +- (void)navigateToMemexTabSwitcher { + // TODO(crbug.com/799601): Delete this once it is not needed. +} + #pragma mark - OmniboxFocuser - (void)focusOmnibox {
diff --git a/ios/chrome/browser/ui/toolbar/adaptive/primary_toolbar_view.mm b/ios/chrome/browser/ui/toolbar/adaptive/primary_toolbar_view.mm index d9cf5ac..b789a5b 100644 --- a/ios/chrome/browser/ui/toolbar/adaptive/primary_toolbar_view.mm +++ b/ios/chrome/browser/ui/toolbar/adaptive/primary_toolbar_view.mm
@@ -92,6 +92,16 @@ DCHECK(self.buttonFactory); self.translatesAutoresizingMaskIntoConstraints = NO; + + [self setUpLocationBar]; + [self setUpLeadingStackView]; + [self setUpTrailingStackView]; + + [self setUpConstraints]; +} + +// Sets the location bar container and its view if present. +- (void)setUpLocationBar { self.locationBarContainer = [[UIView alloc] init]; self.locationBarContainer.backgroundColor = [UIColor whiteColor]; [self.locationBarContainer @@ -100,10 +110,9 @@ self.locationBarContainer.translatesAutoresizingMaskIntoConstraints = NO; [self addSubview:self.locationBarContainer]; - [self setUpLeadingStackView]; - [self setUpTrailingStackView]; - - [self setUpConstraints]; + if (self.locationBarView) { + [self.locationBarContainer addSubview:self.locationBarView]; + } } // Sets the leading stack view. @@ -179,6 +188,11 @@ [self.trailingStackView.topAnchor constraintEqualToAnchor:self.topSafeAnchor], ]]; + + // locationBarView constraints, if present. + if (self.locationBarView) { + AddSameConstraints(self.locationBarContainer, self.locationBarView); + } } #pragma mark - Property accessors @@ -189,12 +203,16 @@ } [_locationBarView removeFromSuperview]; + _locationBarView = locationBarView; locationBarView.translatesAutoresizingMaskIntoConstraints = NO; [locationBarView setContentHuggingPriority:UILayoutPriorityDefaultLow forAxis:UILayoutConstraintAxisHorizontal]; + + if (!self.locationBarContainer || !locationBarView) + return; + [self.locationBarContainer addSubview:locationBarView]; AddSameConstraints(self.locationBarContainer, locationBarView); - _locationBarView = locationBarView; } - (NSArray<ToolbarButton*>*)allButtons {
diff --git a/ios/chrome/browser/ui/toolbar/adaptive/toolbar_coordinator_adaptor.h b/ios/chrome/browser/ui/toolbar/adaptive/toolbar_coordinator_adaptor.h new file mode 100644 index 0000000..8c2fabe --- /dev/null +++ b/ios/chrome/browser/ui/toolbar/adaptive/toolbar_coordinator_adaptor.h
@@ -0,0 +1,33 @@ +// Copyright 2018 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 IOS_CHROME_BROWSER_UI_TOOLBAR_ADAPTIVE_TOOLBAR_COORDINATOR_ADAPTOR_H_ +#define IOS_CHROME_BROWSER_UI_TOOLBAR_ADAPTIVE_TOOLBAR_COORDINATOR_ADAPTOR_H_ + +#import "ios/chrome/browser/ui/toolbar/public/toolbar_coordinating.h" +#import "ios/chrome/browser/ui/tools_menu/public/tools_menu_presentation_state_provider.h" + +@class CommandDispatcher; +@protocol ToolbarCommands; +@protocol ToolsMenuConfigurationProvider; + +// This object is an interface between multiple toolbars and the objects which +// want to interact with them without having to know to which one specifically +// send the call. +@interface ToolbarCoordinatorAdaptor + : NSObject<ToolbarCoordinating, ToolsMenuPresentationStateProvider> + +- (instancetype)initWithToolsMenuConfigurationProvider: + (id<ToolsMenuConfigurationProvider>)configurationProvider + dispatcher: + (CommandDispatcher*)dispatcher; + +// Adds a |toolbarCoordinator| to the set of coordinators this object is +// interfacing with. +- (void)addToolbarCoordinator: + (id<ToolbarCoordinating, ToolbarCommands>)toolbarCoordinator; + +@end + +#endif // IOS_CHROME_BROWSER_UI_TOOLBAR_ADAPTIVE_TOOLBAR_COORDINATOR_ADAPTOR_H_
diff --git a/ios/chrome/browser/ui/toolbar/adaptive/toolbar_coordinator_adaptor.mm b/ios/chrome/browser/ui/toolbar/adaptive/toolbar_coordinator_adaptor.mm new file mode 100644 index 0000000..2e5a4fc --- /dev/null +++ b/ios/chrome/browser/ui/toolbar/adaptive/toolbar_coordinator_adaptor.mm
@@ -0,0 +1,92 @@ +// Copyright 2018 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 "ios/chrome/browser/ui/toolbar/adaptive/toolbar_coordinator_adaptor.h" + +#import "ios/chrome/browser/ui/commands/command_dispatcher.h" +#import "ios/chrome/browser/ui/commands/toolbar_commands.h" +#import "ios/chrome/browser/ui/tools_menu/tools_menu_coordinator.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +@interface ToolbarCoordinatorAdaptor ()<ToolbarCommands> +@property(nonatomic, strong) + NSMutableArray<id<ToolbarCoordinating, ToolbarCommands>>* coordinators; +// Coordinator for the toolsMenu. +@property(nonatomic, strong) ToolsMenuCoordinator* toolsMenuCoordinator; +@end + +@implementation ToolbarCoordinatorAdaptor + +@synthesize coordinators = _coordinators; +@synthesize toolsMenuCoordinator = _toolsMenuCoordinator; + +#pragma mark - Public + +- (instancetype)initWithToolsMenuConfigurationProvider: + (id<ToolsMenuConfigurationProvider>)configurationProvider + dispatcher: + (CommandDispatcher*)dispatcher { + self = [super init]; + if (self) { + _toolsMenuCoordinator = + [[ToolsMenuCoordinator alloc] initWithBaseViewController:nil]; + _toolsMenuCoordinator.dispatcher = dispatcher; + _toolsMenuCoordinator.configurationProvider = configurationProvider; + [dispatcher startDispatchingToTarget:self + forProtocol:@protocol(ToolbarCommands)]; + _coordinators = [NSMutableArray array]; + } + return self; +} +- (void)addToolbarCoordinator: + (id<ToolbarCoordinating, ToolbarCommands>)toolbarCoordinator { + [self.coordinators addObject:toolbarCoordinator]; +} + +#pragma mark - ToolbarCoordinating + +- (void)updateToolbarState { + for (id<ToolbarCoordinating> coordinator in self.coordinators) { + [coordinator updateToolbarState]; + } +} + +#pragma mark - IncognitoViewControllerDelegate + +- (void)setToolbarBackgroundAlpha:(CGFloat)alpha { + for (id<ToolbarCoordinating> coordinator in self.coordinators) { + [coordinator setToolbarBackgroundAlpha:alpha]; + } +} + +#pragma mark - ToolbarCommands + +- (void)contractToolbar { + for (id<ToolbarCommands> coordinator in self.coordinators) { + [coordinator contractToolbar]; + } +} + +- (void)triggerToolsMenuButtonAnimation { + for (id<ToolbarCommands> coordinator in self.coordinators) { + [coordinator triggerToolsMenuButtonAnimation]; + } +} + +- (void)navigateToMemexTabSwitcher { + for (id<ToolbarCommands> coordinator in self.coordinators) { + [coordinator navigateToMemexTabSwitcher]; + } +} + +#pragma mark - ToolsMenuPresentationStateProvider + +- (BOOL)isShowingToolsMenu { + return [self.toolsMenuCoordinator isShowingToolsMenu]; +} + +@end
diff --git a/ios/chrome/browser/ui/toolbar/clean/toolbar_view_controller.mm b/ios/chrome/browser/ui/toolbar/clean/toolbar_view_controller.mm index 13f91d75..40848be70 100644 --- a/ios/chrome/browser/ui/toolbar/clean/toolbar_view_controller.mm +++ b/ios/chrome/browser/ui/toolbar/clean/toolbar_view_controller.mm
@@ -490,6 +490,13 @@ } } + // TODO(crbug.com/799601): Delete this once its not needed. + if (base::FeatureList::IsEnabled(kMemexTabSwitcher)) { + tabStripButtonTitle = @"M"; + [[self.view.tabSwitchStripButton titleLabel] + setFont:[fontLoader boldFontOfSize:kFontSizeFewerThanTenTabs]]; + } + [self.view.tabSwitchStripButton setTitle:tabStripButtonTitle forState:UIControlStateNormal]; [self.view.tabSwitchStripButton setAccessibilityValue:tabStripButtonValue];
diff --git a/ios/chrome/browser/ui/toolbar/legacy_toolbar_coordinator.h b/ios/chrome/browser/ui/toolbar/legacy_toolbar_coordinator.h index 5780d8f..f6f6a38 100644 --- a/ios/chrome/browser/ui/toolbar/legacy_toolbar_coordinator.h +++ b/ios/chrome/browser/ui/toolbar/legacy_toolbar_coordinator.h
@@ -8,7 +8,6 @@ #import <UIKit/UIKit.h> #import "ios/chrome/browser/ui/coordinators/chrome_coordinator.h" -#import "ios/chrome/browser/ui/ntp/incognito_view_controller_delegate.h" #import "ios/chrome/browser/ui/toolbar/public/legacy_toolbar_coordinator.h" #import "ios/chrome/browser/ui/toolbar/public/primary_toolbar_coordinator.h" #import "ios/chrome/browser/ui/toolbar/public/toolbar.h" @@ -20,7 +19,6 @@ @interface LegacyToolbarCoordinator : ChromeCoordinator<PrimaryToolbarCoordinator, - IncognitoViewControllerDelegate, LegacyToolbarCoordinator, ToolbarSnapshotProviding, ToolsMenuPresentationStateProvider> @@ -42,9 +40,6 @@ // Sets the toolbarController for this coordinator. - (void)setToolbarController:(id<Toolbar>)toolbarController; -// ToolbarController public interface. -- (void)updateToolbarState; - @end #endif // IOS_CHROME_BROWSER_UI_TOOLBAR_LEGACY_TOOLBAR_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/toolbar/public/BUILD.gn b/ios/chrome/browser/ui/toolbar/public/BUILD.gn index bb391d9..3246a8c 100644 --- a/ios/chrome/browser/ui/toolbar/public/BUILD.gn +++ b/ios/chrome/browser/ui/toolbar/public/BUILD.gn
@@ -14,6 +14,7 @@ "toolbar.h", "toolbar_controller_constants.h", "toolbar_controller_constants.mm", + "toolbar_coordinating.h", "toolbar_utils.h", "toolbar_utils.mm", "web_toolbar_controller_constants.h", @@ -26,6 +27,7 @@ "//ios/chrome/browser/ui/activity_services/requirements", "//ios/chrome/browser/ui/bubble", "//ios/chrome/browser/ui/fullscreen:new_fullscreen_ui", + "//ios/chrome/browser/ui/ntp", "//ios/chrome/browser/ui/qr_scanner/requirements", "//ios/chrome/browser/ui/tools_menu/public", "//ios/public/provider/chrome/browser/voice",
diff --git a/ios/chrome/browser/ui/toolbar/public/primary_toolbar_coordinator.h b/ios/chrome/browser/ui/toolbar/public/primary_toolbar_coordinator.h index 556a2ea..59270517 100644 --- a/ios/chrome/browser/ui/toolbar/public/primary_toolbar_coordinator.h +++ b/ios/chrome/browser/ui/toolbar/public/primary_toolbar_coordinator.h
@@ -7,6 +7,7 @@ #import "ios/chrome/browser/ui/toolbar/public/omnibox_focuser.h" #import "ios/chrome/browser/ui/toolbar/public/side_swipe_toolbar_interacting.h" +#import "ios/chrome/browser/ui/toolbar/public/toolbar_coordinating.h" @protocol ActivityServicePositioner; @protocol QRScannerResultLoading; @@ -17,9 +18,10 @@ // Protocol defining a primary toolbar, in a paradigm where the toolbar can be // split between primary and secondary. -@protocol PrimaryToolbarCoordinator<OmniboxFocuser, SideSwipeToolbarInteracting> +@protocol PrimaryToolbarCoordinator<OmniboxFocuser, + SideSwipeToolbarInteracting, + ToolbarCoordinating> -// The toolbar ViewController. @property(nonatomic, strong, readonly) UIViewController* viewController; // Returns the different protocols and superclass now implemented by the @@ -30,6 +32,9 @@ - (id<TabHistoryUIUpdater>)tabHistoryUIUpdater; - (id<ActivityServicePositioner>)activityServicePositioner; +// Stops the coordinator. +- (void)stop; + // Show the animation when transitioning to a prerendered page. - (void)showPrerenderingAnimation; // Whether the omnibox is currently the first responder.
diff --git a/ios/chrome/browser/ui/toolbar/public/toolbar_coordinating.h b/ios/chrome/browser/ui/toolbar/public/toolbar_coordinating.h new file mode 100644 index 0000000..6053bf3 --- /dev/null +++ b/ios/chrome/browser/ui/toolbar/public/toolbar_coordinating.h
@@ -0,0 +1,19 @@ +// Copyright 2018 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 IOS_CHROME_BROWSER_UI_TOOLBAR_PUBLIC_TOOLBAR_COORDINATING_H_ +#define IOS_CHROME_BROWSER_UI_TOOLBAR_PUBLIC_TOOLBAR_COORDINATING_H_ + +#import <UIKit/UIKit.h> + +#import "ios/chrome/browser/ui/ntp/incognito_view_controller_delegate.h" + +@protocol ToolbarCoordinating<IncognitoViewControllerDelegate> + +// ToolbarController public interface. +- (void)updateToolbarState; + +@end + +#endif // IOS_CHROME_BROWSER_UI_TOOLBAR_PUBLIC_TOOLBAR_COORDINATING_H_
diff --git a/ios/chrome/test/app/histogram_test_util.mm b/ios/chrome/test/app/histogram_test_util.mm index 0eb0738..4c75b95 100644 --- a/ios/chrome/test/app/histogram_test_util.mm +++ b/ios/chrome/test/app/histogram_test_util.mm
@@ -36,12 +36,8 @@ HistogramTester::HistogramTester() { // Record any histogram data that exists when the object is created so it can // be subtracted later. - base::StatisticsRecorder::Histograms histograms; - base::StatisticsRecorder::GetSnapshot(std::string(), &histograms); - for (size_t i = 0; i < histograms.size(); ++i) { - std::unique_ptr<base::HistogramSamples> samples( - histograms[i]->SnapshotSamples()); - histograms_snapshot_[histograms[i]->histogram_name()] = std::move(samples); + for (const auto* const h : base::StatisticsRecorder::GetHistograms()) { + histograms_snapshot_[h->histogram_name()] = h->SnapshotSamples(); } }
diff --git a/ios/web/download/BUILD.gn b/ios/web/download/BUILD.gn index b81a011..2587984a 100644 --- a/ios/web/download/BUILD.gn +++ b/ios/web/download/BUILD.gn
@@ -11,6 +11,7 @@ "//ios/web/public", "//ios/web/public/download", "//ios/web/web_state:error_translation_util", + "//ui/base", ] sources = [
diff --git a/ios/web/download/download_controller_impl.h b/ios/web/download/download_controller_impl.h index f58fe6a..9caddfe 100644 --- a/ios/web/download/download_controller_impl.h +++ b/ios/web/download/download_controller_impl.h
@@ -14,6 +14,7 @@ #include "base/supports_user_data.h" #import "ios/web/download/download_task_impl.h" #import "ios/web/public/download/download_controller.h" +#include "ui/base/page_transition_types.h" namespace web { @@ -33,7 +34,8 @@ const GURL& original_url, const std::string& content_disposition, int64_t total_bytes, - const std::string& mime_type) override; + const std::string& mime_type, + ui::PageTransition page_transition) override; void SetDelegate(DownloadControllerDelegate* delegate) override; DownloadControllerDelegate* GetDelegate() const override;
diff --git a/ios/web/download/download_controller_impl.mm b/ios/web/download/download_controller_impl.mm index 3b8727a..38848fa 100644 --- a/ios/web/download/download_controller_impl.mm +++ b/ios/web/download/download_controller_impl.mm
@@ -50,14 +50,15 @@ const GURL& original_url, const std::string& content_disposition, int64_t total_bytes, - const std::string& mime_type) { + const std::string& mime_type, + ui::PageTransition page_transition) { DCHECK_CALLED_ON_VALID_SEQUENCE(my_sequence_checker_); if (!delegate_) return; auto task = std::make_unique<DownloadTaskImpl>( web_state, original_url, content_disposition, total_bytes, mime_type, - identifier, this); + page_transition, identifier, this); alive_tasks_.insert(task.get()); delegate_->OnDownloadCreated(this, web_state, std::move(task)); }
diff --git a/ios/web/download/download_controller_impl_unittest.mm b/ios/web/download/download_controller_impl_unittest.mm index 3657f13..dad3c0b 100644 --- a/ios/web/download/download_controller_impl_unittest.mm +++ b/ios/web/download/download_controller_impl_unittest.mm
@@ -62,9 +62,9 @@ TEST_F(DownloadControllerImplTest, OnDownloadCreated) { NSString* identifier = [NSUUID UUID].UUIDString; GURL url("https://download.test"); - download_controller()->CreateDownloadTask(&web_state_, identifier, url, - kContentDisposition, - /*total_bytes=*/-1, kMimeType); + download_controller()->CreateDownloadTask( + &web_state_, identifier, url, kContentDisposition, + /*total_bytes=*/-1, kMimeType, ui::PageTransition::PAGE_TRANSITION_TYPED); ASSERT_EQ(1U, delegate_.alive_download_tasks().size()); DownloadTask* task = delegate_.alive_download_tasks()[0].second.get(); @@ -77,6 +77,8 @@ EXPECT_EQ(-1, task->GetPercentComplete()); EXPECT_EQ(kContentDisposition, task->GetContentDisposition()); EXPECT_EQ(kMimeType, task->GetMimeType()); + EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( + task->GetTransitionType(), ui::PageTransition::PAGE_TRANSITION_TYPED)); EXPECT_EQ("file.test", base::UTF16ToUTF8(task->GetSuggestedFilename())); } @@ -87,7 +89,7 @@ GURL url("https://download.test"); download_controller()->CreateDownloadTask( &web_state_, [NSUUID UUID].UUIDString, url, kContentDisposition, - /*total_bytes=*/-1, kMimeType); + /*total_bytes=*/-1, kMimeType, ui::PageTransition::PAGE_TRANSITION_LINK); } } // namespace web
diff --git a/ios/web/download/download_inttest.mm b/ios/web/download/download_inttest.mm index 9401317..c31eb3d 100644 --- a/ios/web/download/download_inttest.mm +++ b/ios/web/download/download_inttest.mm
@@ -66,6 +66,7 @@ ASSERT_TRUE(server_.Start()); GURL url(server_.GetURL("/")); web::NavigationManager::WebLoadParams params(url); + params.transition_type = ui::PageTransition::PAGE_TRANSITION_TYPED; web_state()->GetNavigationManager()->LoadURLWithParams(params); // Wait until download task is created. @@ -85,6 +86,8 @@ EXPECT_EQ(-1, task->GetPercentComplete()); EXPECT_EQ(kContentDisposition, task->GetContentDisposition()); EXPECT_EQ(kMimeType, task->GetMimeType()); + EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( + task->GetTransitionType(), ui::PageTransition::PAGE_TRANSITION_TYPED)); EXPECT_EQ("download.test", base::UTF16ToUTF8(task->GetSuggestedFilename())); // Start the download task and wait for completion.
diff --git a/ios/web/download/download_task_impl.h b/ios/web/download/download_task_impl.h index ab23719..703f764 100644 --- a/ios/web/download/download_task_impl.h +++ b/ios/web/download/download_task_impl.h
@@ -48,6 +48,7 @@ const std::string& content_disposition, int64_t total_bytes, const std::string& mime_type, + ui::PageTransition page_transition, NSString* identifier, Delegate* delegate); @@ -69,6 +70,7 @@ int GetPercentComplete() const override; std::string GetContentDisposition() const override; std::string GetMimeType() const override; + ui::PageTransition GetTransitionType() const override; base::string16 GetSuggestedFilename() const override; void AddObserver(DownloadTaskObserver* observer) override; void RemoveObserver(DownloadTaskObserver* observer) override; @@ -112,6 +114,7 @@ int percent_complete_ = -1; std::string content_disposition_; std::string mime_type_; + ui::PageTransition page_transition_ = ui::PAGE_TRANSITION_LINK; const WebState* web_state_ = nullptr; Delegate* delegate_ = nullptr;
diff --git a/ios/web/download/download_task_impl.mm b/ios/web/download/download_task_impl.mm index 4a517e82..1d8063c 100644 --- a/ios/web/download/download_task_impl.mm +++ b/ios/web/download/download_task_impl.mm
@@ -162,12 +162,14 @@ const std::string& content_disposition, int64_t total_bytes, const std::string& mime_type, + ui::PageTransition page_transition, NSString* identifier, Delegate* delegate) : original_url_(original_url), total_bytes_(total_bytes), content_disposition_(content_disposition), mime_type_(mime_type), + page_transition_(page_transition), web_state_(web_state), delegate_(delegate), weak_factory_(this) { @@ -271,6 +273,11 @@ return mime_type_; } +ui::PageTransition DownloadTaskImpl::GetTransitionType() const { + DCHECK_CURRENTLY_ON(web::WebThread::UI); + return page_transition_; +} + base::string16 DownloadTaskImpl::GetSuggestedFilename() const { DCHECK_CURRENTLY_ON(web::WebThread::UI); return net::GetSuggestedFilename(GetOriginalUrl(), GetContentDisposition(), @@ -304,8 +311,13 @@ error_code_ = GetNetErrorCodeFromNSError(error); percent_complete_ = GetTaskPercentComplete(task); - total_bytes_ = task.countOfBytesExpectedToReceive; received_bytes_ = task.countOfBytesReceived; + if (total_bytes_ == -1 || task.countOfBytesExpectedToReceive) { + // countOfBytesExpectedToReceive can be 0 if the device is offline. + // In that case total_bytes_ should remain unchanged if the total + // bytes count is already known. + total_bytes_ = task.countOfBytesExpectedToReceive; + } if (task.response.MIMEType) { mime_type_ = base::SysNSStringToUTF8(task.response.MIMEType); }
diff --git a/ios/web/download/download_task_impl_unittest.mm b/ios/web/download/download_task_impl_unittest.mm index 8b82be5..f77b7c6 100644 --- a/ios/web/download/download_task_impl_unittest.mm +++ b/ios/web/download/download_task_impl_unittest.mm
@@ -118,6 +118,7 @@ kContentDisposition, /*total_bytes=*/-1, kMimeType, + ui::PageTransition::PAGE_TRANSITION_TYPED, task_delegate_.configuration().identifier, &task_delegate_)), session_delegate_callbacks_queue_( @@ -238,6 +239,8 @@ EXPECT_EQ(-1, task_->GetPercentComplete()); EXPECT_EQ(kContentDisposition, task_->GetContentDisposition()); EXPECT_EQ(kMimeType, task_->GetMimeType()); + EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( + task_->GetTransitionType(), ui::PageTransition::PAGE_TRANSITION_TYPED)); EXPECT_EQ("file.test", base::UTF16ToUTF8(task_->GetSuggestedFilename())); EXPECT_CALL(task_delegate_, OnTaskDestroyed(task_.get())); @@ -515,6 +518,7 @@ NSError* error = [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorNotConnectedToInternet userInfo:nil]; + session_task.countOfBytesExpectedToReceive = 0; // This is 0 when offline. SimulateDownloadCompletion(session_task, error); ASSERT_TRUE(WaitUntilConditionOrTimeout(kWaitForDownloadTimeout, ^{ return task_->IsDone(); @@ -523,7 +527,7 @@ EXPECT_TRUE(task_->GetErrorCode() == net::ERR_INTERNET_DISCONNECTED); EXPECT_EQ(kExpectedDataSize, task_->GetTotalBytes()); EXPECT_EQ(kReceivedDataSize, task_->GetReceivedBytes()); - EXPECT_EQ(23, task_->GetPercentComplete()); + EXPECT_EQ(100, task_->GetPercentComplete()); EXPECT_EQ(kReceivedData, writer->data()); EXPECT_CALL(task_delegate_, OnTaskDestroyed(task_.get()));
diff --git a/ios/web/public/download/BUILD.gn b/ios/web/public/download/BUILD.gn index 65c5f4a..18c1bd4d 100644 --- a/ios/web/public/download/BUILD.gn +++ b/ios/web/public/download/BUILD.gn
@@ -7,6 +7,7 @@ source_set("download") { deps = [ "//base", + "//ui/base", ] sources = [
diff --git a/ios/web/public/download/download_controller.h b/ios/web/public/download/download_controller.h index 43e2af96..d3ef716 100644 --- a/ios/web/public/download/download_controller.h +++ b/ios/web/public/download/download_controller.h
@@ -10,6 +10,7 @@ #include <string> #include "base/macros.h" +#include "ui/base/page_transition_types.h" class GURL; @@ -68,7 +69,8 @@ // info.originalURL, // info.contentDisposition, // info.totalBytes, -// info.MIMEType); +// info.MIMEType, +// info.pageTransition); // ); // } // - (void)applicationWillTerminate:(UIApplication *)application { @@ -100,7 +102,8 @@ const GURL& original_url, const std::string& content_disposition, int64_t total_bytes, - const std::string& mime_type) = 0; + const std::string& mime_type, + ui::PageTransition page_transition) = 0; // Sets DownloadControllerDelegate. Clients must set the delegate to null in // DownloadControllerDelegate::OnDownloadControllerDestroyed().
diff --git a/ios/web/public/download/download_task.h b/ios/web/public/download/download_task.h index 8d923d3..ffb23bb 100644 --- a/ios/web/public/download/download_task.h +++ b/ios/web/public/download/download_task.h
@@ -12,6 +12,7 @@ #include "base/macros.h" #include "base/strings/string16.h" +#include "ui/base/page_transition_types.h" class GURL; @@ -95,6 +96,9 @@ // Effective MIME type of downloaded content. virtual std::string GetMimeType() const = 0; + // The page transition type associated with the download request. + virtual ui::PageTransition GetTransitionType() const = 0; + // Suggested name for the downloaded file. virtual base::string16 GetSuggestedFilename() const = 0;
diff --git a/ios/web/public/test/fakes/fake_download_task.h b/ios/web/public/test/fakes/fake_download_task.h index 3f6cf60..b49c769 100644 --- a/ios/web/public/test/fakes/fake_download_task.h +++ b/ios/web/public/test/fakes/fake_download_task.h
@@ -35,6 +35,7 @@ int GetPercentComplete() const override; std::string GetContentDisposition() const override; std::string GetMimeType() const override; + ui::PageTransition GetTransitionType() const override; base::string16 GetSuggestedFilename() const override; void AddObserver(DownloadTaskObserver* observer) override; void RemoveObserver(DownloadTaskObserver* observer) override; @@ -66,6 +67,7 @@ int64_t received_bytes_ = 0; int percent_complete_ = -1; std::string mime_type_; + ui::PageTransition page_transition_ = ui::PAGE_TRANSITION_LINK; base::string16 suggested_file_name_; __strong NSString* identifier_ = nil;
diff --git a/ios/web/public/test/fakes/fake_download_task.mm b/ios/web/public/test/fakes/fake_download_task.mm index 516cd75f..1536043 100644 --- a/ios/web/public/test/fakes/fake_download_task.mm +++ b/ios/web/public/test/fakes/fake_download_task.mm
@@ -78,6 +78,10 @@ return mime_type_; } +ui::PageTransition FakeDownloadTask::GetTransitionType() const { + return page_transition_; +} + base::string16 FakeDownloadTask::GetSuggestedFilename() const { return suggested_file_name_; }
diff --git a/ios/web/web_state/ui/crw_web_controller.mm b/ios/web/web_state/ui/crw_web_controller.mm index 661945ad..7008be2 100644 --- a/ios/web/web_state/ui/crw_web_controller.mm +++ b/ios/web/web_state/ui/crw_web_controller.mm
@@ -4230,11 +4230,13 @@ } int64_t contentLength = navigationResponse.response.expectedContentLength; web::BrowserState* browserState = self.webState->GetBrowserState(); + web::NavigationContext* context = + [self contextForPendingNavigationWithURL:responseURL]; web::DownloadController::FromBrowserState(browserState) ->CreateDownloadTask(_webStateImpl, [NSUUID UUID].UUIDString, responseURL, contentDisposition, contentLength, - base::SysNSStringToUTF8(MIMEType)); - + base::SysNSStringToUTF8(MIMEType), + context->GetPageTransition()); BOOL downloadItem = (base::FeatureList::IsEnabled(web::features::kNewPassKitDownload) || base::FeatureList::IsEnabled(web::features::kNewFileDownload));
diff --git a/ios/web/web_state/ui/crw_web_controller_unittest.mm b/ios/web/web_state/ui/crw_web_controller_unittest.mm index b6b7f36..4772e956 100644 --- a/ios/web/web_state/ui/crw_web_controller_unittest.mm +++ b/ios/web/web_state/ui/crw_web_controller_unittest.mm
@@ -553,6 +553,8 @@ // Wait for decidePolicyForNavigationResponse: callback. __block bool callback_called = false; [navigation_delegate_ webView:mock_web_view_ + didStartProvisionalNavigation:nil]; + [navigation_delegate_ webView:mock_web_view_ decidePolicyForNavigationResponse:navigation_response decisionHandler:^(WKNavigationResponsePolicy policy) { callback_called = true; @@ -590,6 +592,9 @@ EXPECT_EQ(content_length, task->GetTotalBytes()); EXPECT_EQ("", task->GetContentDisposition()); EXPECT_EQ(kTestMimeType, task->GetMimeType()); + EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( + task->GetTransitionType(), + ui::PageTransition::PAGE_TRANSITION_CLIENT_REDIRECT)); } // Tests that webView:decidePolicyForNavigationResponse:decisionHandler: creates @@ -615,6 +620,9 @@ EXPECT_EQ(-1, task->GetTotalBytes()); EXPECT_EQ(kContentDisposition, task->GetContentDisposition()); EXPECT_EQ("", task->GetMimeType()); + EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( + task->GetTransitionType(), + ui::PageTransition::PAGE_TRANSITION_CLIENT_REDIRECT)); } // Tests |currentURLWithTrustLevel:| method.
diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc index e6ee082..521bfe90 100644 --- a/media/filters/chunk_demuxer.cc +++ b/media/filters/chunk_demuxer.cc
@@ -1184,9 +1184,13 @@ DVLOG(1) << "OnSourceInitDone source_id=" << source_id << " duration=" << params.duration.InSecondsF(); lock_.AssertAcquired(); - DCHECK_EQ(state_, INITIALIZING); - DCHECK(pending_source_init_ids_.find(source_id) != - pending_source_init_ids_.end()); + + // TODO(wolenetz): Change these to DCHECKs once less verification in release + // build is needed. See https://crbug.com/786975. + CHECK_EQ(state_, INITIALIZING); + CHECK(!init_cb_.is_null()); + CHECK(pending_source_init_ids_.find(source_id) != + pending_source_init_ids_.end()); if (audio_streams_.empty() && video_streams_.empty()) { ReportError_Locked(DEMUXER_ERROR_COULD_NOT_OPEN); return; @@ -1245,7 +1249,11 @@ duration_ = kInfiniteDuration; // The demuxer is now initialized after the |start_timestamp_| was set. + // TODO(wolenetz): Change these to DCHECKs once less verification in release + // build is needed. See https://crbug.com/786975. + CHECK_EQ(state_, INITIALIZING); ChangeState_Locked(INITIALIZED); + CHECK(!init_cb_.is_null()); base::ResetAndReturn(&init_cb_).Run(PIPELINE_OK); }
diff --git a/media/test/data/blackwhite.html b/media/test/data/blackwhite.html index 735e4adb4..843b25c3 100644 --- a/media/test/data/blackwhite.html +++ b/media/test/data/blackwhite.html
@@ -76,7 +76,8 @@ 'yuvj420p.mp4', 'yuv422p.mp4', 'yuv444p.mp4', - 'yuv420p.avi' + 'yuv420p.avi', + 'yuv420p_hi10p.mp4' ]; for (var i = 0; i < VIDEOS.length; ++i) {
diff --git a/media/video/gpu_memory_buffer_video_frame_pool.cc b/media/video/gpu_memory_buffer_video_frame_pool.cc index e3cc8a6..2955641d 100644 --- a/media/video/gpu_memory_buffer_video_frame_pool.cc +++ b/media/video/gpu_memory_buffer_video_frame_pool.cc
@@ -303,6 +303,7 @@ void CopyRowsToI420Buffer(int first_row, int rows, int bytes_per_row, + size_t bit_depth, const uint8_t* source, int source_stride, uint8_t* output, @@ -314,10 +315,19 @@ DCHECK_NE(dest_stride, 0); DCHECK_LE(bytes_per_row, std::abs(dest_stride)); DCHECK_LE(bytes_per_row, source_stride); + DCHECK_GE(bit_depth, 8u); - libyuv::CopyPlane(source + source_stride * first_row, source_stride, - output + dest_stride * first_row, dest_stride, - bytes_per_row, rows); + if (bit_depth == 8) { + libyuv::CopyPlane(source + source_stride * first_row, source_stride, + output + dest_stride * first_row, dest_stride, + bytes_per_row, rows); + } else { + const int scale = 0x10000 >> (bit_depth - 8); + libyuv::Convert16To8Plane( + reinterpret_cast<const uint16*>(source + source_stride * first_row), + source_stride / 2, output + dest_stride * first_row, dest_stride, + scale, bytes_per_row, rows); + } } done.Run(); } @@ -422,8 +432,10 @@ DCHECK(media_task_runner_->BelongsToCurrentThread()); // Lazily initialize output_format_ since VideoFrameOutputFormat() has to be // called on the media_thread while this object might be instantiated on any. - if (output_format_ == GpuVideoAcceleratorFactories::OutputFormat::UNDEFINED) - output_format_ = gpu_factories_->VideoFrameOutputFormat(); + if (output_format_ == GpuVideoAcceleratorFactories::OutputFormat::UNDEFINED) { + output_format_ = + gpu_factories_->VideoFrameOutputFormat(video_frame->BitDepth()); + } if (output_format_ == GpuVideoAcceleratorFactories::OutputFormat::UNDEFINED) { frame_ready_cb.Run(video_frame); @@ -433,6 +445,9 @@ // Supported cases. case PIXEL_FORMAT_YV12: case PIXEL_FORMAT_I420: + case PIXEL_FORMAT_YUV420P9: + case PIXEL_FORMAT_YUV420P10: + case PIXEL_FORMAT_YUV420P12: break; // Unsupported cases. case PIXEL_FORMAT_I420A: @@ -448,13 +463,10 @@ case PIXEL_FORMAT_RGB32: case PIXEL_FORMAT_MJPEG: case PIXEL_FORMAT_MT21: - case PIXEL_FORMAT_YUV420P9: case PIXEL_FORMAT_YUV422P9: case PIXEL_FORMAT_YUV444P9: - case PIXEL_FORMAT_YUV420P10: case PIXEL_FORMAT_YUV422P10: case PIXEL_FORMAT_YUV444P10: - case PIXEL_FORMAT_YUV420P12: case PIXEL_FORMAT_YUV422P12: case PIXEL_FORMAT_YUV444P12: case PIXEL_FORMAT_Y16: @@ -593,11 +605,12 @@ const int bytes_per_row = VideoFrame::RowBytes( i, VideoFormat(output_format_), coded_size.width()); worker_task_runner_->PostTask( - FROM_HERE, base::Bind(&CopyRowsToI420Buffer, row, rows_to_copy, - bytes_per_row, video_frame->visible_data(i), - video_frame->stride(i), - static_cast<uint8_t*>(buffer->memory(0)), - buffer->stride(0), barrier)); + FROM_HERE, + base::Bind(&CopyRowsToI420Buffer, row, rows_to_copy, + bytes_per_row, video_frame->BitDepth(), + video_frame->visible_data(i), video_frame->stride(i), + static_cast<uint8_t*>(buffer->memory(0)), + buffer->stride(0), barrier)); break; } case GpuVideoAcceleratorFactories::OutputFormat::NV12_SINGLE_GMB:
diff --git a/media/video/gpu_memory_buffer_video_frame_pool_unittest.cc b/media/video/gpu_memory_buffer_video_frame_pool_unittest.cc index a36f7580..b62af9a 100644 --- a/media/video/gpu_memory_buffer_video_frame_pool_unittest.cc +++ b/media/video/gpu_memory_buffer_video_frame_pool_unittest.cc
@@ -94,29 +94,32 @@ media_task_runner_->RunUntilIdle(); } - static scoped_refptr<media::VideoFrame> CreateTestYUVVideoFrame( - int dimension) { + static scoped_refptr<VideoFrame> CreateTestYUVVideoFrame( + int dimension, + size_t bit_depth = 8) { const int kDimension = 10; - static uint8_t y_data[kDimension * kDimension] = {0}; - static uint8_t u_data[kDimension * kDimension / 2] = {0}; - static uint8_t v_data[kDimension * kDimension / 2] = {0}; + // Data buffers are overdimensioned to acommodate up to 16bpc samples. + static uint8_t y_data[2 * kDimension * kDimension] = {0}; + static uint8_t u_data[2 * kDimension * kDimension / 2] = {0}; + static uint8_t v_data[2 * kDimension * kDimension / 2] = {0}; + const VideoPixelFormat format = + (bit_depth > 8) ? PIXEL_FORMAT_YUV420P10 : PIXEL_FORMAT_I420; DCHECK_LE(dimension, kDimension); - gfx::Size size(dimension, dimension); + const gfx::Size size(dimension, dimension); scoped_refptr<VideoFrame> video_frame = - media::VideoFrame::WrapExternalYuvData( - media::PIXEL_FORMAT_I420, // format - size, // coded_size - gfx::Rect(size), // visible_rect - size, // natural_size - size.width(), // y_stride - size.width() / 2, // u_stride - size.width() / 2, // v_stride - y_data, // y_data - u_data, // u_data - v_data, // v_data - base::TimeDelta()); // timestamp + VideoFrame::WrapExternalYuvData(format, // format + size, // coded_size + gfx::Rect(size), // visible_rect + size, // natural_size + size.width(), // y_stride + size.width() / 2, // u_stride + size.width() / 2, // v_stride + y_data, // y_data + u_data, // u_data + v_data, // v_data + base::TimeDelta()); // timestamp EXPECT_TRUE(video_frame); return video_frame; } @@ -165,6 +168,20 @@ EXPECT_EQ(3u, gles2_->gen_textures_count()); } +TEST_F(GpuMemoryBufferVideoFramePoolTest, CreateOne10BppHardwareFrame) { + scoped_refptr<VideoFrame> software_frame = CreateTestYUVVideoFrame(10, 10); + scoped_refptr<VideoFrame> frame; + gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( + software_frame, base::Bind(MaybeCreateHardwareFrameCallback, &frame)); + + RunUntilIdle(); + + EXPECT_NE(software_frame.get(), frame.get()); + EXPECT_EQ(PIXEL_FORMAT_I420, frame->format()); + EXPECT_EQ(3u, frame->NumTextures()); + EXPECT_EQ(3u, gles2_->gen_textures_count()); +} + TEST_F(GpuMemoryBufferVideoFramePoolTest, ReuseFirstResource) { scoped_refptr<VideoFrame> software_frame = CreateTestYUVVideoFrame(10); scoped_refptr<VideoFrame> frame;
diff --git a/media/video/gpu_video_accelerator_factories.h b/media/video/gpu_video_accelerator_factories.h index 8f88056..2f1678c 100644 --- a/media/video/gpu_video_accelerator_factories.h +++ b/media/video/gpu_video_accelerator_factories.h
@@ -116,7 +116,7 @@ // Pixel format of the hardware video frames created when GpuMemoryBuffers // video frames are enabled. - virtual OutputFormat VideoFrameOutputFormat() = 0; + virtual OutputFormat VideoFrameOutputFormat(size_t bit_depth) = 0; virtual std::unique_ptr<ScopedGLContextLock> GetGLContextLock() = 0;
diff --git a/media/video/mock_gpu_video_accelerator_factories.h b/media/video/mock_gpu_video_accelerator_factories.h index 4980e57f..04c46648 100644 --- a/media/video/mock_gpu_video_accelerator_factories.h +++ b/media/video/mock_gpu_video_accelerator_factories.h
@@ -64,7 +64,7 @@ bool ShouldUseGpuMemoryBuffersForVideoFrames() const override; unsigned ImageTextureTarget(gfx::BufferFormat format) override; - OutputFormat VideoFrameOutputFormat() override { + OutputFormat VideoFrameOutputFormat(size_t bit_depth) override { return video_frame_output_format_; };
diff --git a/net/BUILD.gn b/net/BUILD.gn index 2168ac5..7676ff4c 100644 --- a/net/BUILD.gn +++ b/net/BUILD.gn
@@ -2397,8 +2397,10 @@ "data/ssl/certificates/crit-codeSigning-chain.pem", "data/ssl/certificates/crlset_by_intermediate_serial.raw", "data/ssl/certificates/crlset_by_leaf_spki.raw", + "data/ssl/certificates/crlset_by_leaf_subject_no_spki.raw", "data/ssl/certificates/crlset_by_root_serial.raw", - "data/ssl/certificates/crlset_by_subject.raw", + "data/ssl/certificates/crlset_by_root_subject.raw", + "data/ssl/certificates/crlset_by_root_subject_no_spki.raw", "data/ssl/certificates/cross-signed-leaf.pem", "data/ssl/certificates/cross-signed-root-md5.pem", "data/ssl/certificates/cross-signed-root-sha256.pem",
diff --git a/net/base/port_util.cc b/net/base/port_util.cc index 543d9db9..83c98213 100644 --- a/net/base/port_util.cc +++ b/net/base/port_util.cc
@@ -90,10 +90,9 @@ // KURL::port()) }; -// FTP overrides the following restricted ports. +// FTP overrides the following restricted port. const int kAllowedFtpPorts[] = { 21, // ftp data - 22, // ssh }; base::LazyInstance<std::multiset<int>>::Leaky g_explicitly_allowed_ports =
diff --git a/net/cert/cert_verify_proc_unittest.cc b/net/cert/cert_verify_proc_unittest.cc index 826c7420..9199b89 100644 --- a/net/cert/cert_verify_proc_unittest.cc +++ b/net/cert/cert_verify_proc_unittest.cc
@@ -1879,6 +1879,67 @@ EXPECT_THAT(error, IsError(ERR_CERT_REVOKED)); } +// Tests that CertVerifyProc implementations apply CRLSet revocations by +// subject. +TEST_P(CertVerifyProcInternalTest, CRLSetRevokedBySubject) { + if (!SupportsCRLSet()) { + LOG(INFO) << "Skipping test as verifier doesn't support CRLSet"; + return; + } + + scoped_refptr<X509Certificate> root( + ImportCertFromFile(GetTestCertsDirectory(), "root_ca_cert.pem")); + ASSERT_TRUE(root); + + scoped_refptr<X509Certificate> leaf( + ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem")); + ASSERT_TRUE(leaf); + + ScopedTestRoot scoped_root(root.get()); + + int flags = 0; + CertVerifyResult verify_result; + + // Confirm that verifying the certificate chain with an empty CRLSet succeeds. + scoped_refptr<CRLSet> crl_set = CRLSet::EmptyCRLSetForTesting(); + int error = Verify(leaf.get(), "127.0.0.1", flags, crl_set.get(), + CertificateList(), &verify_result); + EXPECT_THAT(error, IsOk()); + + std::string crl_set_bytes; + + // Revoke the leaf by subject. Verification should now fail. + ASSERT_TRUE(base::ReadFileToString( + GetTestCertsDirectory().AppendASCII("crlset_by_leaf_subject_no_spki.raw"), + &crl_set_bytes)); + ASSERT_TRUE(CRLSetStorage::Parse(crl_set_bytes, &crl_set)); + + error = Verify(leaf.get(), "127.0.0.1", flags, crl_set.get(), + CertificateList(), &verify_result); + EXPECT_THAT(error, IsError(ERR_CERT_REVOKED)); + + // Revoke the root by subject. Verification should now fail. + ASSERT_TRUE(base::ReadFileToString( + GetTestCertsDirectory().AppendASCII("crlset_by_root_subject_no_spki.raw"), + &crl_set_bytes)); + ASSERT_TRUE(CRLSetStorage::Parse(crl_set_bytes, &crl_set)); + + error = Verify(leaf.get(), "127.0.0.1", flags, crl_set.get(), + CertificateList(), &verify_result); + EXPECT_THAT(error, IsError(ERR_CERT_REVOKED)); + + // Revoke the leaf by subject, but only if the SPKI doesn't match the given + // one. Verification should pass when using the certificate's actual SPKI. + ASSERT_TRUE(base::ReadFileToString( + GetTestCertsDirectory().AppendASCII("crlset_by_root_subject.raw"), + &crl_set_bytes)); + ASSERT_TRUE(CRLSetStorage::Parse(crl_set_bytes, &crl_set)); + + error = Verify(leaf.get(), "127.0.0.1", flags, crl_set.get(), + CertificateList(), &verify_result); + EXPECT_THAT(error, IsOk()); +} + // Tests that CRLSets participate in path building functions, and that as // long as a valid path exists within the verification graph, verification // succeeds.
diff --git a/net/cert/crl_set_unittest.cc b/net/cert/crl_set_unittest.cc index 756a06eb..88c07203 100644 --- a/net/cert/crl_set_unittest.cc +++ b/net/cert/crl_set_unittest.cc
@@ -328,7 +328,7 @@ TEST(CRLSetTest, BlockedSubjects) { std::string crl_set_bytes; EXPECT_TRUE(base::ReadFileToString( - GetTestCertsDirectory().AppendASCII("crlset_by_subject.raw"), + GetTestCertsDirectory().AppendASCII("crlset_by_root_subject.raw"), &crl_set_bytes)); scoped_refptr<CRLSet> set; EXPECT_TRUE(CRLSetStorage::Parse(crl_set_bytes, &set));
diff --git a/net/data/ssl/certificates/crlset_by_leaf_subject_no_spki.raw b/net/data/ssl/certificates/crlset_by_leaf_subject_no_spki.raw new file mode 100644 index 0000000..3a22aa7 --- /dev/null +++ b/net/data/ssl/certificates/crlset_by_leaf_subject_no_spki.raw Binary files differ
diff --git a/net/data/ssl/certificates/crlset_by_subject.raw b/net/data/ssl/certificates/crlset_by_root_subject.raw similarity index 100% rename from net/data/ssl/certificates/crlset_by_subject.raw rename to net/data/ssl/certificates/crlset_by_root_subject.raw Binary files differ
diff --git a/net/data/ssl/certificates/crlset_by_root_subject_no_spki.raw b/net/data/ssl/certificates/crlset_by_root_subject_no_spki.raw new file mode 100644 index 0000000..d556a83a --- /dev/null +++ b/net/data/ssl/certificates/crlset_by_root_subject_no_spki.raw Binary files differ
diff --git a/net/data/ssl/scripts/generate-test-certs.sh b/net/data/ssl/scripts/generate-test-certs.sh index 7f798c7..622897b 100755 --- a/net/data/ssl/scripts/generate-test-certs.sh +++ b/net/data/ssl/scripts/generate-test-certs.sh
@@ -511,8 +511,8 @@ CRLSETBYINTERMEDIATESERIAL ## Block a subject with a single-entry allowlist of SPKI hashes. -python crlsetutil.py -o ../certificates/crlset_by_subject.raw \ -<<CRLSETBYSUBJECT +python crlsetutil.py -o ../certificates/crlset_by_root_subject.raw \ +<<CRLSETBYROOTSUBJECT { "LimitedSubjects": { "../certificates/root_ca_cert.pem": [ @@ -520,4 +520,24 @@ ] } } -CRLSETBYSUBJECT +CRLSETBYROOTSUBJECT + +## Block a subject with an empty allowlist of SPKI hashes. +python crlsetutil.py -o ../certificates/crlset_by_root_subject_no_spki.raw \ +<<CRLSETBYROOTSUBJECTNOSPKI +{ + "LimitedSubjects": { + "../certificates/root_ca_cert.pem": [] + } +} +CRLSETBYROOTSUBJECTNOSPKI + +## Block a subject with an empty allowlist of SPKI hashes. +python crlsetutil.py -o ../certificates/crlset_by_leaf_subject_no_spki.raw \ +<<CRLSETBYLEAFSUBJECTNOSPKI +{ + "LimitedSubjects": { + "../certificates/ok_cert.pem": [] + } +} +CRLSETBYLEAFSUBJECTNOSPKI
diff --git a/net/der/parser_unittest.cc b/net/der/parser_unittest.cc index 6e38bb7..781bd34 100644 --- a/net/der/parser_unittest.cc +++ b/net/der/parser_unittest.cc
@@ -90,15 +90,16 @@ ASSERT_FALSE(parser.HasMore()); } -TEST(ParserTest, TagNumbersAboveThirtyUnsupported) { +TEST(ParserTest, TagNumbersAboveThirtySupported) { // Context-specific class, tag number 31, length 0. const uint8_t der[] = {0x9f, 0x1f, 0x00}; Parser parser((Input(der))); Tag tag; Input value; - ASSERT_FALSE(parser.ReadTagAndValue(&tag, &value)); - ASSERT_TRUE(parser.HasMore()); + ASSERT_TRUE(parser.ReadTagAndValue(&tag, &value)); + EXPECT_EQ(kTagContextSpecific | 31u, tag); + ASSERT_FALSE(parser.HasMore()); } TEST(ParserTest, ParseTags) {
diff --git a/net/http/http_network_session.cc b/net/http/http_network_session.cc index 0498b977..c5871b06 100644 --- a/net/http/http_network_session.cc +++ b/net/http/http_network_session.cc
@@ -135,8 +135,10 @@ quic_force_hol_blocking(false), quic_race_cert_verification(false), quic_estimate_initial_rtt(false), + quic_headers_include_h2_stream_dependency(false), enable_token_binding(false), - http_09_on_non_default_ports_enabled(false) { + http_09_on_non_default_ports_enabled(false), + disable_idle_sockets_close_on_memory_pressure(false) { quic_supported_versions.push_back(QUIC_VERSION_39); } @@ -215,6 +217,7 @@ params.quic_allow_server_migration, params.quic_race_cert_verification, params.quic_estimate_initial_rtt, + params.quic_headers_include_h2_stream_dependency, params.quic_connection_options, params.quic_client_connection_options, params.enable_token_binding), @@ -254,8 +257,12 @@ http_server_properties_->SetMaxServerConfigsStoredInProperties( params.quic_max_server_configs_stored_in_properties); - memory_pressure_listener_.reset(new base::MemoryPressureListener(base::Bind( - &HttpNetworkSession::OnMemoryPressure, base::Unretained(this)))); + if (!params_.disable_idle_sockets_close_on_memory_pressure) { + memory_pressure_listener_.reset( + new base::MemoryPressureListener(base::BindRepeating( + &HttpNetworkSession::OnMemoryPressure, base::Unretained(this)))); + } + base::MemoryCoordinatorClientRegistry::GetInstance()->Register(this); } @@ -493,10 +500,13 @@ void HttpNetworkSession::OnMemoryPressure( base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level) { + DCHECK(!params_.disable_idle_sockets_close_on_memory_pressure); + switch (memory_pressure_level) { case base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE: - case base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE: break; + + case base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE: case base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL: CloseIdleConnections(); break;
diff --git a/net/http/http_network_session.h b/net/http/http_network_session.h index 76d8c60..734a40e53 100644 --- a/net/http/http_network_session.h +++ b/net/http/http_network_session.h
@@ -196,6 +196,9 @@ bool quic_race_cert_verification; // If true, estimate the initial RTT for QUIC connections based on network. bool quic_estimate_initial_rtt; + // If true, client headers will include HTTP/2 stream dependency info + // derived from the request priority. + bool quic_headers_include_h2_stream_dependency; // If non-empty, QUIC will only be spoken to hosts in this list. base::flat_set<std::string> quic_host_whitelist; @@ -205,6 +208,9 @@ // Enable HTTP/0.9 for HTTP/HTTPS on ports other than the default one for // each protocol. bool http_09_on_non_default_ports_enabled; + + // If true, idle sockets won't be closed when memory pressure happens. + bool disable_idle_sockets_close_on_memory_pressure; }; // Structure with pointers to the dependencies of the HttpNetworkSession.
diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc index 25ae85c..44249c6 100644 --- a/net/http/http_network_transaction_unittest.cc +++ b/net/http/http_network_transaction_unittest.cc
@@ -6879,6 +6879,82 @@ EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); } +// Disable idle socket closing on memory pressure. +// Grab a socket, use it, and put it back into the pool. Then, make +// low memory notification and ensure the socket pool is NOT flushed. +TEST_F(HttpNetworkTransactionTest, NoFlushSocketPoolOnLowMemoryNotifications) { + HttpRequestInfo request; + request.method = "GET"; + request.url = GURL("http://www.example.org/"); + request.load_flags = 0; + + // Disable idle socket closing on memory pressure. + session_deps_.disable_idle_sockets_close_on_memory_pressure = true; + std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); + + HttpNetworkTransaction trans(DEFAULT_PRIORITY, session.get()); + + MockRead data_reads[] = { + // A part of the response body is received with the response headers. + MockRead("HTTP/1.1 200 OK\r\nContent-Length: 11\r\n\r\nhel"), + // The rest of the response body is received in two parts. + MockRead("lo"), MockRead(" world"), + MockRead("junk"), // Should not be read!! + MockRead(SYNCHRONOUS, OK), + }; + + StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); + session_deps_.socket_factory->AddSocketDataProvider(&data); + + TestCompletionCallback callback; + + int rv = trans.Start(&request, callback.callback(), NetLogWithSource()); + EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); + + EXPECT_THAT(callback.GetResult(rv), IsOk()); + + const HttpResponseInfo* response = trans.GetResponseInfo(); + ASSERT_TRUE(response); + EXPECT_TRUE(response->headers); + std::string status_line = response->headers->GetStatusLine(); + EXPECT_EQ("HTTP/1.1 200 OK", status_line); + + // Make memory critical notification and ensure the transaction still has been + // operating right. + base::MemoryPressureListener::NotifyMemoryPressure( + base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL); + base::RunLoop().RunUntilIdle(); + + // Socket should not be flushed as long as it is not idle. + EXPECT_EQ(0, GetIdleSocketCountInTransportSocketPool(session.get())); + + std::string response_data; + rv = ReadTransaction(&trans, &response_data); + EXPECT_THAT(rv, IsOk()); + EXPECT_EQ("hello world", response_data); + + // Empty the current queue. This is necessary because idle sockets are + // added to the connection pool asynchronously with a PostTask. + base::RunLoop().RunUntilIdle(); + + // We now check to make sure the socket was added back to the pool. + EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session.get())); + + // Idle sockets should NOT be flushed on moderate memory pressure. + base::MemoryPressureListener::NotifyMemoryPressure( + base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE); + base::RunLoop().RunUntilIdle(); + + EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session.get())); + + // Idle sockets should NOT be flushed on critical memory pressure. + base::MemoryPressureListener::NotifyMemoryPressure( + base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL); + base::RunLoop().RunUntilIdle(); + + EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session.get())); +} + // Grab an SSL socket, use it, and put it back into the pool. Then, make // low memory notification and ensure the socket pool is flushed. TEST_F(HttpNetworkTransactionTest, FlushSSLSocketPoolOnLowMemoryNotifications) {
diff --git a/net/http/http_proxy_client_socket_wrapper_unittest.cc b/net/http/http_proxy_client_socket_wrapper_unittest.cc index b5178f5c..32d6177 100644 --- a/net/http/http_proxy_client_socket_wrapper_unittest.cc +++ b/net/http/http_proxy_client_socket_wrapper_unittest.cc
@@ -58,7 +58,7 @@ namespace test { class HttpProxyClientSocketWrapperTest - : public ::testing::TestWithParam<QuicTransportVersion> { + : public ::testing::TestWithParam<std::tuple<QuicTransportVersion, bool>> { protected: static const bool kFin = true; static const bool kIncludeVersion = true; @@ -73,17 +73,20 @@ new ChannelIDService(new DefaultChannelIDStore(nullptr))), cert_transparency_verifier_(new DoNothingCTVerifier()), random_generator_(0), - quic_version_(GetParam()), + quic_version_(std::get<0>(GetParam())), + client_headers_include_h2_stream_dependency_(std::get<1>(GetParam())), client_maker_(quic_version_, 0, &clock_, kProxyHost, - Perspective::IS_CLIENT), + Perspective::IS_CLIENT, + client_headers_include_h2_stream_dependency_), server_maker_(quic_version_, 0, &clock_, kProxyHost, - Perspective::IS_SERVER), + Perspective::IS_SERVER, + false), header_stream_offset_(0), response_offset_(0), store_server_configs_in_properties_(false), @@ -128,8 +131,8 @@ base::TimeDelta::FromSeconds(kMaxTimeOnNonDefaultNetworkSecs), kMaxMigrationsToNonDefaultNetworkOnPathDegrading, allow_server_migration_, race_cert_verification_, estimate_initial_rtt_, - connection_options_, client_connection_options_, - /*enable_token_binding=*/false)); + client_headers_include_h2_stream_dependency_, connection_options_, + client_connection_options_, /*enable_token_binding=*/false)); } void PopulateConnectRequestIR(SpdyHeaderBlock* block) { @@ -207,7 +210,8 @@ MockCryptoClientStreamFactory crypto_client_stream_factory_; MockRandom random_generator_; - QuicTransportVersion quic_version_; + const QuicTransportVersion quic_version_; + const bool client_headers_include_h2_stream_dependency_; QuicTestPacketMaker client_maker_; QuicTestPacketMaker server_maker_; QuicStreamOffset header_stream_offset_; @@ -281,9 +285,11 @@ EXPECT_TRUE(mock_quic_data_.AllWriteDataConsumed()); } -INSTANTIATE_TEST_CASE_P(Version, - HttpProxyClientSocketWrapperTest, - ::testing::ValuesIn(AllSupportedTransportVersions())); +INSTANTIATE_TEST_CASE_P( + VersionIncludeStreamDependencySequnece, + HttpProxyClientSocketWrapperTest, + ::testing::Combine(::testing::ValuesIn(AllSupportedTransportVersions()), + ::testing::Bool())); }; // namespace test }; // namespace net
diff --git a/net/http/http_stream_factory_impl_job_controller_unittest.cc b/net/http/http_stream_factory_impl_job_controller_unittest.cc index 28e1429..009aada 100644 --- a/net/http/http_stream_factory_impl_job_controller_unittest.cc +++ b/net/http/http_stream_factory_impl_job_controller_unittest.cc
@@ -304,8 +304,12 @@ MockClock clock_; MockRandom random_generator_{0}; QuicTestPacketMaker client_maker_{ - HttpNetworkSession::Params().quic_supported_versions[0], 0, &clock_, - kServerHostname, Perspective::IS_CLIENT}; + HttpNetworkSession::Params().quic_supported_versions[0], + 0, + &clock_, + kServerHostname, + Perspective::IS_CLIENT, + false}; protected: BoundTestNetLog net_log_;
diff --git a/net/http/http_stream_factory_impl_unittest.cc b/net/http/http_stream_factory_impl_unittest.cc index 39a5d23..81c6d9e 100644 --- a/net/http/http_stream_factory_impl_unittest.cc +++ b/net/http/http_stream_factory_impl_unittest.cc
@@ -2222,20 +2222,25 @@ class HttpStreamFactoryBidirectionalQuicTest : public ::testing::Test, - public ::testing::WithParamInterface<QuicTransportVersion> { + public ::testing::WithParamInterface< + std::tuple<QuicTransportVersion, bool>> { protected: HttpStreamFactoryBidirectionalQuicTest() : default_url_(kDefaultUrl), - client_packet_maker_(GetParam(), + version_(std::get<0>(GetParam())), + client_headers_include_h2_stream_dependency_(std::get<1>(GetParam())), + client_packet_maker_(version_, 0, &clock_, "www.example.org", - Perspective::IS_CLIENT), - server_packet_maker_(GetParam(), + Perspective::IS_CLIENT, + client_headers_include_h2_stream_dependency_), + server_packet_maker_(version_, 0, &clock_, "www.example.org", - Perspective::IS_SERVER), + Perspective::IS_SERVER, + false), random_generator_(0), proxy_service_(ProxyService::CreateDirect()), ssl_config_service_(new SSLConfigServiceDefaults) { @@ -2253,7 +2258,9 @@ void Initialize() { params_.enable_quic = true; params_.quic_supported_versions = - test::SupportedTransportVersions(GetParam()); + test::SupportedTransportVersions(version_); + params_.quic_headers_include_h2_stream_dependency = + client_headers_include_h2_stream_dependency_; HttpNetworkSession::Context session_context; session_context.http_server_properties = &http_server_properties_; @@ -2306,10 +2313,12 @@ const GURL default_url_; QuicStreamId GetNthClientInitiatedStreamId(int n) { - return test::GetNthClientInitiatedStreamId(GetParam(), n); + return test::GetNthClientInitiatedStreamId(version_, n); } private: + const QuicTransportVersion version_; + const bool client_headers_include_h2_stream_dependency_; MockClock clock_; test::QuicTestPacketMaker client_packet_maker_; test::QuicTestPacketMaker server_packet_maker_; @@ -2329,9 +2338,11 @@ HttpNetworkSession::Params params_; }; -INSTANTIATE_TEST_CASE_P(Version, - HttpStreamFactoryBidirectionalQuicTest, - ::testing::ValuesIn(AllSupportedTransportVersions())); +INSTANTIATE_TEST_CASE_P( + VersionIncludeStreamDependencySequnece, + HttpStreamFactoryBidirectionalQuicTest, + ::testing::Combine(::testing::ValuesIn(AllSupportedTransportVersions()), + ::testing::Bool())); TEST_P(HttpStreamFactoryBidirectionalQuicTest, RequestBidirectionalStreamImplQuicAlternative) {
diff --git a/net/proxy/proxy_info.cc b/net/proxy/proxy_info.cc index 620c8841..01879df 100644 --- a/net/proxy/proxy_info.cc +++ b/net/proxy/proxy_info.cc
@@ -96,4 +96,10 @@ did_use_pac_script_ = false; } +const NetworkTrafficAnnotationTag ProxyInfo::traffic_annotation() const { + // TODO(crbug.com/656607): Get appropriate annotation from the origin of + // config_source_. + return NO_TRAFFIC_ANNOTATION_BUG_656607; +} + } // namespace net
diff --git a/net/proxy/proxy_info.h b/net/proxy/proxy_info.h index 9e011d4..fd3c1178 100644 --- a/net/proxy/proxy_info.h +++ b/net/proxy/proxy_info.h
@@ -14,6 +14,7 @@ #include "net/proxy/proxy_list.h" #include "net/proxy/proxy_retry_info.h" #include "net/proxy/proxy_server.h" +#include "net/traffic_annotation/network_traffic_annotation.h" namespace net { @@ -138,6 +139,9 @@ // Returns the source for configuration settings used for proxy resolution. ProxyConfigSource config_source() const { return config_source_; } + // Returns traffic annotation tag based on current config source. + const NetworkTrafficAnnotationTag traffic_annotation() const; + // See description in ProxyList::ToPacString(). std::string ToPacString() const;
diff --git a/net/quic/chromium/bidirectional_stream_quic_impl_unittest.cc b/net/quic/chromium/bidirectional_stream_quic_impl_unittest.cc index 1027966..bd902009 100644 --- a/net/quic/chromium/bidirectional_stream_quic_impl_unittest.cc +++ b/net/quic/chromium/bidirectional_stream_quic_impl_unittest.cc
@@ -380,7 +380,7 @@ } // namespace class BidirectionalStreamQuicImplTest - : public ::testing::TestWithParam<QuicTransportVersion> { + : public ::testing::TestWithParam<std::tuple<QuicTransportVersion, bool>> { protected: static const bool kFin = true; static const bool kIncludeVersion = true; @@ -398,21 +398,25 @@ }; BidirectionalStreamQuicImplTest() - : crypto_config_(crypto_test_utils::ProofVerifierForTesting(), + : version_(std::get<0>(GetParam())), + client_headers_include_h2_stream_dependency_(std::get<1>(GetParam())), + crypto_config_(crypto_test_utils::ProofVerifierForTesting(), TlsClientHandshaker::CreateSslCtx()), read_buffer_(new IOBufferWithSize(4096)), connection_id_(2), stream_id_(GetNthClientInitiatedStreamId(0)), - client_maker_(GetParam(), + client_maker_(version_, connection_id_, &clock_, kDefaultServerHostName, - Perspective::IS_CLIENT), - server_maker_(GetParam(), + Perspective::IS_CLIENT, + client_headers_include_h2_stream_dependency_), + server_maker_(version_, connection_id_, &clock_, kDefaultServerHostName, - Perspective::IS_SERVER), + Perspective::IS_SERVER, + false), random_generator_(0), destination_(kDefaultServerHostName, kDefaultServerPort) { IPAddress ip(192, 0, 2, 33); @@ -479,7 +483,7 @@ new QuicChromiumPacketWriter(socket.get(), runner_.get()), true /* owns_writer */, Perspective::IS_CLIENT, SupportedVersions( - net::ParsedQuicVersion(net::PROTOCOL_QUIC_CRYPTO, GetParam()))); + net::ParsedQuicVersion(net::PROTOCOL_QUIC_CRYPTO, version_))); base::TimeTicks dns_end = base::TimeTicks::Now(); base::TimeTicks dns_start = dns_end - base::TimeDelta::FromMilliseconds(1); @@ -498,8 +502,9 @@ kMaxMigrationsToNonDefaultNetworkOnPathDegrading, kQuicYieldAfterPacketsRead, QuicTime::Delta::FromMilliseconds(kQuicYieldAfterDurationMilliseconds), - /*cert_verify_flags=*/0, DefaultQuicConfig(), &crypto_config_, - "CONNECTION_UNKNOWN", dns_start, dns_end, &push_promise_index_, nullptr, + client_headers_include_h2_stream_dependency_, /*cert_verify_flags=*/0, + DefaultQuicConfig(), &crypto_config_, "CONNECTION_UNKNOWN", dns_start, + dns_end, &push_promise_index_, nullptr, base::ThreadTaskRunnerHandle::Get().get(), /*socket_performance_watcher=*/nullptr, net_log().bound().net_log())); session_->Initialize(); @@ -750,10 +755,12 @@ QuicChromiumClientSession* session() const { return session_.get(); } QuicStreamId GetNthClientInitiatedStreamId(int n) { - return test::GetNthClientInitiatedStreamId(GetParam(), n); + return test::GetNthClientInitiatedStreamId(version_, n); } protected: + const QuicTransportVersion version_; + const bool client_headers_include_h2_stream_dependency_; BoundTestNetLog net_log_; scoped_refptr<TestTaskRunner> runner_; std::unique_ptr<MockWrite[]> mock_writes_; @@ -782,9 +789,11 @@ HostPortPair destination_; }; -INSTANTIATE_TEST_CASE_P(Version, - BidirectionalStreamQuicImplTest, - ::testing::ValuesIn(AllSupportedTransportVersions())); +INSTANTIATE_TEST_CASE_P( + Version, + BidirectionalStreamQuicImplTest, + ::testing::Combine(::testing::ValuesIn(AllSupportedTransportVersions()), + ::testing::Bool())); TEST_P(BidirectionalStreamQuicImplTest, GetRequest) { SetRequest("GET", "/", DEFAULT_PRIORITY);
diff --git a/net/quic/chromium/quic_chromium_client_session.cc b/net/quic/chromium/quic_chromium_client_session.cc index 7f72e0c..c578354 100644 --- a/net/quic/chromium/quic_chromium_client_session.cc +++ b/net/quic/chromium/quic_chromium_client_session.cc
@@ -664,6 +664,7 @@ int max_migrations_to_non_default_network_on_path_degrading, int yield_after_packets, QuicTime::Delta yield_after_duration, + bool headers_include_h2_stream_dependency, int cert_verify_flags, const QuicConfig& config, QuicCryptoClientConfig* crypto_config, @@ -717,6 +718,8 @@ probing_manager_(this, task_runner_), retry_migrate_back_count_(0), migration_pending_(false), + headers_include_h2_stream_dependency_( + headers_include_h2_stream_dependency), weak_factory_(this) { default_network_ = socket->GetBoundNetwork(); sockets_.push_back(std::move(socket)); @@ -863,6 +866,26 @@ set_max_uncompressed_header_bytes(kMaxUncompressedHeaderSize); } +size_t QuicChromiumClientSession::WriteHeaders( + QuicStreamId id, + SpdyHeaderBlock headers, + bool fin, + SpdyPriority priority, + QuicReferenceCountedPointer<QuicAckListenerInterface> + ack_notifier_delegate) { + if (headers_include_h2_stream_dependency_) { + SpdyStreamId parent_stream_id = 0; + bool exclusive = false; + priority_dependency_state_.OnStreamCreation(id, priority, &parent_stream_id, + &exclusive); + return QuicSpdySession::WriteHeaders(id, std::move(headers), fin, priority, + parent_stream_id, exclusive, + std::move(ack_notifier_delegate)); + } + return QuicSpdySession::WriteHeaders(id, std::move(headers), fin, priority, + std::move(ack_notifier_delegate)); +} + void QuicChromiumClientSession::OnHeadersHeadOfLineBlocking( QuicTime::Delta delta) { UMA_HISTOGRAM_TIMES( @@ -870,6 +893,29 @@ base::TimeDelta::FromMicroseconds(delta.ToMicroseconds())); } +void QuicChromiumClientSession::UnregisterStreamPriority(QuicStreamId id) { + if (headers_include_h2_stream_dependency_) { + priority_dependency_state_.OnStreamDestruction(id); + } + QuicSpdySession::UnregisterStreamPriority(id); +} + +void QuicChromiumClientSession::UpdateStreamPriority( + QuicStreamId id, + SpdyPriority new_priority) { + if (headers_include_h2_stream_dependency_) { + auto updates = priority_dependency_state_.OnStreamUpdate(id, new_priority); + for (auto update : updates) { + QuicSpdyStream* stream = GetSpdyDataStream(update.id); + DCHECK(stream); + int weight = Spdy3PriorityToHttp2Weight(stream->priority()); + WritePriority(update.id, update.dependent_stream_id, weight, + update.exclusive); + } + } + QuicSpdySession::UpdateStreamPriority(id, new_priority); +} + void QuicChromiumClientSession::OnStreamFrame(const QuicStreamFrame& frame) { // Record total number of stream frames. UMA_HISTOGRAM_COUNTS_1M("Net.QuicNumStreamFramesInPacket", 1);
diff --git a/net/quic/chromium/quic_chromium_client_session.h b/net/quic/chromium/quic_chromium_client_session.h index 5c9bcb16..6cbe458 100644 --- a/net/quic/chromium/quic_chromium_client_session.h +++ b/net/quic/chromium/quic_chromium_client_session.h
@@ -40,6 +40,7 @@ #include "net/quic/core/quic_spdy_client_session_base.h" #include "net/quic/core/quic_time.h" #include "net/socket/socket_performance_watcher.h" +#include "net/spdy/chromium/http2_priority_dependencies.h" #include "net/spdy/chromium/multiplexed_session.h" #include "net/spdy/chromium/server_push_delegate.h" @@ -344,6 +345,7 @@ int max_migrations_to_non_default_network_on_path_degrading, int yield_after_packets, QuicTime::Delta yield_after_duration, + bool headers_include_h2_stream_dependency, int cert_verify_flags, const QuicConfig& config, QuicCryptoClientConfig* crypto_config, @@ -407,7 +409,16 @@ const QuicSocketAddress& peer_address) override; // QuicSpdySession methods: + size_t WriteHeaders(QuicStreamId id, + SpdyHeaderBlock headers, + bool fin, + SpdyPriority priority, + QuicReferenceCountedPointer<QuicAckListenerInterface> + ack_listener) override; void OnHeadersHeadOfLineBlocking(QuicTime::Delta delta) override; + void UnregisterStreamPriority(QuicStreamId id) override; + void UpdateStreamPriority(QuicStreamId id, + SpdyPriority new_priority) override; // QuicSession methods: void OnStreamFrame(const QuicStreamFrame& frame) override; @@ -742,6 +753,12 @@ // sockets_.size(). Then in MigrateSessionOnError, check to see if // the current sockets_.size() == the passed in value. bool migration_pending_; // True while migration is underway. + + // If true, client headers will include HTTP/2 stream dependency info derived + // from SpdyPriority. + bool headers_include_h2_stream_dependency_; + Http2PriorityDependencies priority_dependency_state_; + base::WeakPtrFactory<QuicChromiumClientSession> weak_factory_; DISALLOW_COPY_AND_ASSIGN(QuicChromiumClientSession);
diff --git a/net/quic/chromium/quic_chromium_client_session_test.cc b/net/quic/chromium/quic_chromium_client_session_test.cc index 89aa5244..aaa3b2eb 100644 --- a/net/quic/chromium/quic_chromium_client_session_test.cc +++ b/net/quic/chromium/quic_chromium_client_session_test.cc
@@ -82,10 +82,12 @@ }; class QuicChromiumClientSessionTest - : public ::testing::TestWithParam<QuicTransportVersion> { + : public ::testing::TestWithParam<std::tuple<QuicTransportVersion, bool>> { public: QuicChromiumClientSessionTest() - : crypto_config_(crypto_test_utils::ProofVerifierForTesting(), + : version_(std::get<0>(GetParam())), + client_headers_include_h2_stream_dependency_(std::get<1>(GetParam())), + crypto_config_(crypto_test_utils::ProofVerifierForTesting(), TlsClientHandshaker::CreateSslCtx()), default_read_(new MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)), socket_data_( @@ -94,16 +96,18 @@ helper_(&clock_, &random_), server_id_(kServerHostname, kServerPort, PRIVACY_MODE_DISABLED), destination_(kServerHostname, kServerPort), - client_maker_(GetParam(), + client_maker_(version_, 0, &clock_, kServerHostname, - Perspective::IS_CLIENT), - server_maker_(GetParam(), + Perspective::IS_CLIENT, + client_headers_include_h2_stream_dependency_), + server_maker_(version_, 0, &clock_, kServerHostname, - Perspective::IS_SERVER) { + Perspective::IS_SERVER, + false) { // Advance the time, because timers do not like uninitialized times. clock_.AdvanceTime(QuicTime::Delta::FromSeconds(1)); } @@ -130,7 +134,7 @@ 0, QuicSocketAddress(QuicSocketAddressImpl(kIpEndPoint)), &helper_, &alarm_factory_, writer, true, Perspective::IS_CLIENT, SupportedVersions( - net::ParsedQuicVersion(net::PROTOCOL_QUIC_CRYPTO, GetParam()))); + net::ParsedQuicVersion(net::PROTOCOL_QUIC_CRYPTO, version_))); session_.reset(new TestingQuicChromiumClientSession( connection, std::move(socket), /*stream_factory=*/nullptr, &crypto_client_stream_factory_, &clock_, @@ -144,10 +148,10 @@ kMaxMigrationsToNonDefaultNetworkOnPathDegrading, kQuicYieldAfterPacketsRead, QuicTime::Delta::FromMilliseconds(kQuicYieldAfterDurationMilliseconds), - /*cert_verify_flags=*/0, DefaultQuicConfig(), &crypto_config_, - "CONNECTION_UNKNOWN", base::TimeTicks::Now(), base::TimeTicks::Now(), - &push_promise_index_, &test_push_delegate_, - base::ThreadTaskRunnerHandle::Get().get(), + /*cert_verify_flags=*/0, client_headers_include_h2_stream_dependency_, + DefaultQuicConfig(), &crypto_config_, "CONNECTION_UNKNOWN", + base::TimeTicks::Now(), base::TimeTicks::Now(), &push_promise_index_, + &test_push_delegate_, base::ThreadTaskRunnerHandle::Get().get(), /*socket_performance_watcher=*/nullptr, &net_log_)); scoped_refptr<X509Certificate> cert( @@ -179,13 +183,15 @@ } QuicStreamId GetNthClientInitiatedStreamId(int n) { - return test::GetNthClientInitiatedStreamId(GetParam(), n); + return test::GetNthClientInitiatedStreamId(version_, n); } QuicStreamId GetNthServerInitiatedStreamId(int n) { - return test::GetNthServerInitiatedStreamId(GetParam(), n); + return test::GetNthServerInitiatedStreamId(version_, n); } + const QuicTransportVersion version_; + const bool client_headers_include_h2_stream_dependency_; QuicFlagSaver flags_; // Save/restore all QUIC flag values. QuicCryptoClientConfig crypto_config_; TestNetLog net_log_; @@ -211,9 +217,11 @@ ProofVerifyDetailsChromium verify_details_; }; -INSTANTIATE_TEST_CASE_P(Tests, - QuicChromiumClientSessionTest, - ::testing::ValuesIn(AllSupportedTransportVersions())); +INSTANTIATE_TEST_CASE_P( + VersionIncludeStreamDependencySequnece, + QuicChromiumClientSessionTest, + ::testing::Combine(::testing::ValuesIn(AllSupportedTransportVersions()), + ::testing::Bool())); TEST_P(QuicChromiumClientSessionTest, IsFatalErrorNotSetForNonFatalError) { MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; @@ -291,7 +299,7 @@ session_->CreateHandle(destination_); EXPECT_TRUE(handle->IsConnected()); EXPECT_FALSE(handle->IsCryptoHandshakeConfirmed()); - EXPECT_EQ(GetParam(), handle->GetQuicVersion()); + EXPECT_EQ(version_, handle->GetQuicVersion()); EXPECT_EQ(server_id_, handle->server_id()); EXPECT_EQ(session_net_log.source().type, handle->net_log().source().type); EXPECT_EQ(session_net_log.source().id, handle->net_log().source().id); @@ -319,7 +327,7 @@ // Veirfy that the handle works correctly after the session is closed. EXPECT_FALSE(handle->IsConnected()); EXPECT_TRUE(handle->IsCryptoHandshakeConfirmed()); - EXPECT_EQ(GetParam(), handle->GetQuicVersion()); + EXPECT_EQ(version_, handle->GetQuicVersion()); EXPECT_EQ(server_id_, handle->server_id()); EXPECT_EQ(session_net_log.source().type, handle->net_log().source().type); EXPECT_EQ(session_net_log.source().id, handle->net_log().source().id); @@ -343,7 +351,7 @@ // Veirfy that the handle works correctly after the session is deleted. EXPECT_FALSE(handle->IsConnected()); EXPECT_TRUE(handle->IsCryptoHandshakeConfirmed()); - EXPECT_EQ(GetParam(), handle->GetQuicVersion()); + EXPECT_EQ(version_, handle->GetQuicVersion()); EXPECT_EQ(server_id_, handle->server_id()); EXPECT_EQ(session_net_log.source().type, handle->net_log().source().type); EXPECT_EQ(session_net_log.source().id, handle->net_log().source().id);
diff --git a/net/quic/chromium/quic_http_stream_test.cc b/net/quic/chromium/quic_http_stream_test.cc index c01ca99..3550894f 100644 --- a/net/quic/chromium/quic_http_stream_test.cc +++ b/net/quic/chromium/quic_http_stream_test.cc
@@ -163,7 +163,7 @@ }; class QuicHttpStreamTest - : public ::testing::TestWithParam<QuicTransportVersion> { + : public ::testing::TestWithParam<std::tuple<QuicTransportVersion, bool>> { public: void CloseStream(QuicHttpStream* stream, int /*rv*/) { stream->Close(false); } @@ -184,22 +184,26 @@ }; QuicHttpStreamTest() - : crypto_config_(crypto_test_utils::ProofVerifierForTesting(), + : version_(std::get<0>(GetParam())), + client_headers_include_h2_stream_dependency_(std::get<1>(GetParam())), + crypto_config_(crypto_test_utils::ProofVerifierForTesting(), TlsClientHandshaker::CreateSslCtx()), read_buffer_(new IOBufferWithSize(4096)), promise_id_(GetNthServerInitiatedStreamId(0)), stream_id_(GetNthClientInitiatedStreamId(0)), connection_id_(2), - client_maker_(GetParam(), + client_maker_(version_, connection_id_, &clock_, kDefaultServerHostName, - Perspective::IS_CLIENT), - server_maker_(GetParam(), + Perspective::IS_CLIENT, + client_headers_include_h2_stream_dependency_), + server_maker_(version_, connection_id_, &clock_, kDefaultServerHostName, - Perspective::IS_SERVER), + Perspective::IS_SERVER, + false), random_generator_(0), response_offset_(0) { IPAddress ip(192, 0, 2, 33); @@ -279,7 +283,7 @@ connection_ = new TestQuicConnection( SupportedVersions( - net::ParsedQuicVersion(net::PROTOCOL_QUIC_CRYPTO, GetParam())), + net::ParsedQuicVersion(net::PROTOCOL_QUIC_CRYPTO, version_)), connection_id_, peer_addr_, helper_.get(), alarm_factory_.get(), new QuicChromiumPacketWriter( socket.get(), base::ThreadTaskRunnerHandle::Get().get())); @@ -312,8 +316,9 @@ kMaxMigrationsToNonDefaultNetworkOnPathDegrading, kQuicYieldAfterPacketsRead, QuicTime::Delta::FromMilliseconds(kQuicYieldAfterDurationMilliseconds), - /*cert_verify_flags=*/0, DefaultQuicConfig(), &crypto_config_, - "CONNECTION_UNKNOWN", dns_start, dns_end, &push_promise_index_, nullptr, + client_headers_include_h2_stream_dependency_, /*cert_verify_flags=*/0, + DefaultQuicConfig(), &crypto_config_, "CONNECTION_UNKNOWN", dns_start, + dns_end, &push_promise_index_, nullptr, base::ThreadTaskRunnerHandle::Get().get(), /*socket_performance_watcher=*/nullptr, net_log_.bound().net_log())); session_->Initialize(); @@ -536,13 +541,16 @@ } QuicStreamId GetNthClientInitiatedStreamId(int n) { - return test::GetNthClientInitiatedStreamId(GetParam(), n); + return test::GetNthClientInitiatedStreamId(version_, n); } QuicStreamId GetNthServerInitiatedStreamId(int n) { - return test::GetNthServerInitiatedStreamId(GetParam(), n); + return test::GetNthServerInitiatedStreamId(version_, n); } + const QuicTransportVersion version_; + const bool client_headers_include_h2_stream_dependency_; + BoundTestNetLog net_log_; MockSendAlgorithm* send_algorithm_; scoped_refptr<TestTaskRunner> runner_; @@ -589,9 +597,11 @@ QuicStreamOffset response_offset_; }; -INSTANTIATE_TEST_CASE_P(Version, - QuicHttpStreamTest, - ::testing::ValuesIn(AllSupportedTransportVersions())); +INSTANTIATE_TEST_CASE_P( + VersionIncludeStreamDependencySequnece, + QuicHttpStreamTest, + ::testing::Combine(::testing::ValuesIn(AllSupportedTransportVersions()), + ::testing::Bool())); TEST_P(QuicHttpStreamTest, RenewStreamForAuth) { Initialize();
diff --git a/net/quic/chromium/quic_network_transaction_unittest.cc b/net/quic/chromium/quic_network_transaction_unittest.cc index c76257c..35f0234e 100644 --- a/net/quic/chromium/quic_network_transaction_unittest.cc +++ b/net/quic/chromium/quic_network_transaction_unittest.cc
@@ -119,12 +119,15 @@ os << "DIFFERENT"; break; } + os << ", client_headers_include_h2_stream_dependency: " + << p.client_headers_include_h2_stream_dependency; os << " }"; return os; } QuicTransportVersion version; DestinationType destination_type; + bool client_headers_include_h2_stream_dependency; }; std::string GenerateQuicVersionsListForAltSvcHeader( @@ -143,9 +146,12 @@ QuicTransportVersionVector all_supported_versions = AllSupportedTransportVersions(); for (const QuicTransportVersion version : all_supported_versions) { - params.push_back(PoolingTestParams{version, SAME_AS_FIRST}); - params.push_back(PoolingTestParams{version, SAME_AS_SECOND}); - params.push_back(PoolingTestParams{version, DIFFERENT}); + params.push_back(PoolingTestParams{version, SAME_AS_FIRST, false}); + params.push_back(PoolingTestParams{version, SAME_AS_FIRST, true}); + params.push_back(PoolingTestParams{version, SAME_AS_SECOND, false}); + params.push_back(PoolingTestParams{version, SAME_AS_SECOND, true}); + params.push_back(PoolingTestParams{version, DIFFERENT, false}); + params.push_back(PoolingTestParams{version, DIFFERENT, true}); } return params; } @@ -234,23 +240,26 @@ DISALLOW_COPY_AND_ASSIGN(TestSocketPerformanceWatcherFactory); }; -class QuicNetworkTransactionTest - : public PlatformTest, - public ::testing::WithParamInterface<QuicTransportVersion> { +class QuicNetworkTransactionTest : public PlatformTest, + public ::testing::WithParamInterface< + std::tuple<QuicTransportVersion, bool>> { protected: QuicNetworkTransactionTest() - : version_(GetParam()), + : version_(std::get<0>(GetParam())), + client_headers_include_h2_stream_dependency_(std::get<1>(GetParam())), supported_versions_(SupportedTransportVersions(version_)), client_maker_(version_, 0, &clock_, kDefaultServerHostName, - Perspective::IS_CLIENT), + Perspective::IS_CLIENT, + client_headers_include_h2_stream_dependency_), server_maker_(version_, 0, &clock_, kDefaultServerHostName, - Perspective::IS_SERVER), + Perspective::IS_SERVER, + false), cert_transparency_verifier_(new MultiLogCTVerifier()), ssl_config_service_(new SSLConfigServiceDefaults), proxy_service_(ProxyService::CreateDirect()), @@ -516,6 +525,8 @@ void CreateSession(const QuicTransportVersionVector& supported_versions) { session_params_.enable_quic = true; session_params_.quic_supported_versions = supported_versions; + session_params_.quic_headers_include_h2_stream_dependency = + client_headers_include_h2_stream_dependency_; session_context_.quic_clock = &clock_; session_context_.quic_random = &random_generator_; @@ -754,6 +765,7 @@ } const QuicTransportVersion version_; + const bool client_headers_include_h2_stream_dependency_; QuicTransportVersionVector supported_versions_; QuicFlagSaver flags_; // Save/restore all QUIC flag values. MockClock clock_; @@ -804,9 +816,11 @@ } }; -INSTANTIATE_TEST_CASE_P(Version, - QuicNetworkTransactionTest, - ::testing::ValuesIn(AllSupportedTransportVersions())); +INSTANTIATE_TEST_CASE_P( + VersionIncludeStreamDependencySequnece, + QuicNetworkTransactionTest, + ::testing::Combine(::testing::ValuesIn(AllSupportedTransportVersions()), + ::testing::Bool())); TEST_P(QuicNetworkTransactionTest, WriteErrorHandshakeConfirmed) { base::HistogramTester histograms; @@ -3178,10 +3192,11 @@ // Second request will go over the pooled QUIC connection, but will be // reset by the server. - QuicTestPacketMaker client_maker2(version_, 0, &clock_, origin2.host(), - Perspective::IS_CLIENT); + QuicTestPacketMaker client_maker2( + version_, 0, &clock_, origin2.host(), Perspective::IS_CLIENT, + client_headers_include_h2_stream_dependency_); QuicTestPacketMaker server_maker2(version_, 0, &clock_, origin2.host(), - Perspective::IS_SERVER); + Perspective::IS_SERVER, false); mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( 4, GetNthClientInitiatedStreamId(1), false, true, GetRequestHeaders("GET", "https", "/", &client_maker2), @@ -3498,10 +3513,11 @@ mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); // Second request. - QuicTestPacketMaker client_maker2(version_, 0, &clock_, origin2.host(), - Perspective::IS_CLIENT); + QuicTestPacketMaker client_maker2( + version_, 0, &clock_, origin2.host(), Perspective::IS_CLIENT, + client_headers_include_h2_stream_dependency_); QuicTestPacketMaker server_maker2(version_, 0, &clock_, origin2.host(), - Perspective::IS_SERVER); + Perspective::IS_SERVER, false); mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( 4, GetNthClientInitiatedStreamId(1), false, true, GetRequestHeaders("GET", "https", "/", &client_maker2), @@ -3599,8 +3615,9 @@ QuicStreamOffset request_header_offset = 0; QuicStreamOffset response_header_offset = 0; - QuicTestPacketMaker client_maker(version_, 0, &clock_, "mail.example.org", - Perspective::IS_CLIENT); + QuicTestPacketMaker client_maker( + version_, 0, &clock_, "mail.example.org", Perspective::IS_CLIENT, + client_headers_include_h2_stream_dependency_); server_maker_.set_hostname("www.example.org"); client_maker_.set_hostname("www.example.org"); MockQuicData mock_quic_data; @@ -5392,6 +5409,8 @@ protected: QuicNetworkTransactionWithDestinationTest() : version_(GetParam().version), + client_headers_include_h2_stream_dependency_( + GetParam().client_headers_include_h2_stream_dependency), supported_versions_(SupportedTransportVersions(version_)), destination_type_(GetParam().destination_type), cert_transparency_verifier_(new MultiLogCTVerifier()), @@ -5410,6 +5429,8 @@ session_params.enable_quic = true; session_params.quic_allow_remote_alt_svc = true; session_params.quic_supported_versions = supported_versions_; + session_params.quic_headers_include_h2_stream_dependency = + client_headers_include_h2_stream_dependency_; HttpNetworkSession::Context session_context; @@ -5597,7 +5618,8 @@ } MockClock clock_; - QuicTransportVersion version_; + const QuicTransportVersion version_; + const bool client_headers_include_h2_stream_dependency_; QuicTransportVersionVector supported_versions_; DestinationType destination_type_; std::string origin1_; @@ -5622,7 +5644,7 @@ SSLSocketDataProvider ssl_data_; }; -INSTANTIATE_TEST_CASE_P(Version, +INSTANTIATE_TEST_CASE_P(VersionIncludeStreamDependencySequnece, QuicNetworkTransactionWithDestinationTest, ::testing::ValuesIn(GetPoolingTestParams())); @@ -5691,41 +5713,40 @@ verify_details.cert_verify_result.is_issued_by_known_root = true; crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); - QuicTestPacketMaker client_maker1(version_, 0, &clock_, origin1_, - Perspective::IS_CLIENT); - QuicTestPacketMaker server_maker1(version_, 0, &clock_, origin1_, - Perspective::IS_SERVER); + QuicTestPacketMaker client_maker( + version_, 0, &clock_, origin1_, Perspective::IS_CLIENT, + client_headers_include_h2_stream_dependency_); + QuicTestPacketMaker server_maker(version_, 0, &clock_, origin1_, + Perspective::IS_SERVER, false); QuicStreamOffset request_header_offset(0); QuicStreamOffset response_header_offset(0); MockQuicData mock_quic_data; - mock_quic_data.AddWrite(ConstructInitialSettingsPacket( - 1, &request_header_offset, &client_maker1)); + mock_quic_data.AddWrite( + ConstructInitialSettingsPacket(1, &request_header_offset, &client_maker)); mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( 2, GetNthClientInitiatedStreamId(0), true, &request_header_offset, - &client_maker1)); + &client_maker)); mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( 1, GetNthClientInitiatedStreamId(0), &response_header_offset, - &server_maker1)); + &server_maker)); mock_quic_data.AddRead(ConstructServerDataPacket( - 2, GetNthClientInitiatedStreamId(0), &server_maker1)); - mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1, &client_maker1)); + 2, GetNthClientInitiatedStreamId(0), &server_maker)); + mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1, &client_maker)); - QuicTestPacketMaker client_maker2(version_, 0, &clock_, origin2_, - Perspective::IS_CLIENT); - QuicTestPacketMaker server_maker2(version_, 0, &clock_, origin2_, - Perspective::IS_SERVER); + client_maker.set_hostname(origin2_); + server_maker.set_hostname(origin2_); mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( 4, GetNthClientInitiatedStreamId(1), false, &request_header_offset, - &client_maker2)); + &client_maker)); mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( 3, GetNthClientInitiatedStreamId(1), &response_header_offset, - &server_maker2)); + &server_maker)); mock_quic_data.AddRead(ConstructServerDataPacket( - 4, GetNthClientInitiatedStreamId(1), &server_maker2)); - mock_quic_data.AddWrite(ConstructClientAckPacket(5, 4, 3, 1, &client_maker2)); + 4, GetNthClientInitiatedStreamId(1), &server_maker)); + mock_quic_data.AddWrite(ConstructClientAckPacket(5, 4, 3, 1, &client_maker)); mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read mock_quic_data.AddRead(ASYNC, 0); // EOF @@ -5773,10 +5794,11 @@ verify_details2.cert_verify_result.is_issued_by_known_root = true; crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details2); - QuicTestPacketMaker client_maker1(version_, 0, &clock_, origin1_, - Perspective::IS_CLIENT); + QuicTestPacketMaker client_maker1( + version_, 0, &clock_, origin1_, Perspective::IS_CLIENT, + client_headers_include_h2_stream_dependency_); QuicTestPacketMaker server_maker1(version_, 0, &clock_, origin1_, - Perspective::IS_SERVER); + Perspective::IS_SERVER, false); MockQuicData mock_quic_data1; QuicStreamOffset header_stream_offset1 = 0; @@ -5796,10 +5818,11 @@ mock_quic_data1.AddSocketDataToFactory(&socket_factory_); - QuicTestPacketMaker client_maker2(version_, 0, &clock_, origin2_, - Perspective::IS_CLIENT); + QuicTestPacketMaker client_maker2( + version_, 0, &clock_, origin2_, Perspective::IS_CLIENT, + client_headers_include_h2_stream_dependency_); QuicTestPacketMaker server_maker2(version_, 0, &clock_, origin2_, - Perspective::IS_SERVER); + Perspective::IS_SERVER, false); MockQuicData mock_quic_data2; QuicStreamOffset header_stream_offset2 = 0; @@ -5856,6 +5879,9 @@ mock_quic_data.AddRead(ConstructServerDataPacket( 5, GetNthServerInitiatedStreamId(0), false, true, 0, "and hello!")); + client_maker_.ClientUpdateWithStreamDestruction( + GetNthClientInitiatedStreamId(0)); + // Because the matching request has a body, we will see the push // stream get cancelled, and the matching request go out on the // wire.
diff --git a/net/quic/chromium/quic_proxy_client_socket_unittest.cc b/net/quic/chromium/quic_proxy_client_socket_unittest.cc index 4edad26..a4650a1 100644 --- a/net/quic/chromium/quic_proxy_client_socket_unittest.cc +++ b/net/quic/chromium/quic_proxy_client_socket_unittest.cc
@@ -76,7 +76,7 @@ } // namespace class QuicProxyClientSocketTest - : public ::testing::TestWithParam<QuicTransportVersion> { + : public ::testing::TestWithParam<std::tuple<QuicTransportVersion, bool>> { protected: static const bool kFin = true; static const bool kIncludeVersion = true; @@ -105,7 +105,8 @@ } QuicProxyClientSocketTest() - : version_(GetParam()), + : version_(std::get<0>(GetParam())), + client_headers_include_h2_stream_dependency_(std::get<1>(GetParam())), crypto_config_(crypto_test_utils::ProofVerifierForTesting(), TlsClientHandshaker::CreateSslCtx()), connection_id_(2), @@ -113,12 +114,14 @@ connection_id_, &clock_, kProxyHost, - Perspective::IS_CLIENT), + Perspective::IS_CLIENT, + client_headers_include_h2_stream_dependency_), server_maker_(version_, connection_id_, &clock_, kProxyHost, - Perspective::IS_SERVER), + Perspective::IS_SERVER, + false), random_generator_(0), header_stream_offset_(0), response_offset_(0), @@ -174,7 +177,7 @@ helper_.get(), alarm_factory_.get(), writer, true /* owns_writer */, Perspective::IS_CLIENT, SupportedVersions( - net::ParsedQuicVersion(net::PROTOCOL_QUIC_CRYPTO, GetParam()))); + net::ParsedQuicVersion(net::PROTOCOL_QUIC_CRYPTO, version_))); connection->set_visitor(&visitor_); QuicConnectionPeer::SetSendAlgorithm(connection, send_algorithm_); @@ -204,8 +207,9 @@ kMaxMigrationsToNonDefaultNetworkOnPathDegrading, kQuicYieldAfterPacketsRead, QuicTime::Delta::FromMilliseconds(kQuicYieldAfterDurationMilliseconds), - /*cert_verify_flags=*/0, DefaultQuicConfig(), &crypto_config_, - "CONNECTION_UNKNOWN", dns_start, dns_end, &push_promise_index_, nullptr, + client_headers_include_h2_stream_dependency_, /*cert_verify_flags=*/0, + DefaultQuicConfig(), &crypto_config_, "CONNECTION_UNKNOWN", dns_start, + dns_end, &push_promise_index_, nullptr, base::ThreadTaskRunnerHandle::Get().get(), /*socket_performance_watcher=*/nullptr, net_log_.bound().net_log())); @@ -486,7 +490,8 @@ ASSERT_EQ(SpdyString(data, len), SpdyString(read_buf_->data(), len)); } - QuicTransportVersion version_; + const QuicTransportVersion version_; + const bool client_headers_include_h2_stream_dependency_; // order of destruction of these members matter MockClock clock_; @@ -1503,9 +1508,11 @@ EXPECT_FALSE(write_callback_.have_result()); } -INSTANTIATE_TEST_CASE_P(Version, - QuicProxyClientSocketTest, - ::testing::ValuesIn(AllSupportedTransportVersions())); +INSTANTIATE_TEST_CASE_P( + VersionIncludeStreamDependencySequnece, + QuicProxyClientSocketTest, + ::testing::Combine(::testing::ValuesIn(AllSupportedTransportVersions()), + ::testing::Bool())); } // namespace test } // namespace net
diff --git a/net/quic/chromium/quic_stream_factory.cc b/net/quic/chromium/quic_stream_factory.cc index 1f19c16..97a5306 100644 --- a/net/quic/chromium/quic_stream_factory.cc +++ b/net/quic/chromium/quic_stream_factory.cc
@@ -720,6 +720,7 @@ bool allow_server_migration, bool race_cert_verification, bool estimate_initial_rtt, + bool headers_include_h2_stream_dependency, const QuicTagVector& connection_options, const QuicTagVector& client_connection_options, bool enable_token_binding) @@ -780,6 +781,8 @@ allow_server_migration_(allow_server_migration), race_cert_verification_(race_cert_verification), estimate_initial_rtt(estimate_initial_rtt), + headers_include_h2_stream_dependency_( + headers_include_h2_stream_dependency), need_to_check_persisted_supports_quic_(true), num_push_streams_created_(0), task_runner_(nullptr), @@ -1487,7 +1490,8 @@ migrate_sessions_on_network_change_, migrate_sessions_early_v2_, migrate_sessions_on_network_change_v2_, max_time_on_non_default_network_, max_migrations_to_non_default_network_on_path_degrading_, - yield_after_packets_, yield_after_duration_, cert_verify_flags, config, + yield_after_packets_, yield_after_duration_, + headers_include_h2_stream_dependency_, cert_verify_flags, config, &crypto_config_, network_connection_.connection_description(), dns_resolution_start_time, dns_resolution_end_time, &push_promise_index_, push_delegate_, task_runner_, std::move(socket_performance_watcher),
diff --git a/net/quic/chromium/quic_stream_factory.h b/net/quic/chromium/quic_stream_factory.h index 8af3c01..3607f5df 100644 --- a/net/quic/chromium/quic_stream_factory.h +++ b/net/quic/chromium/quic_stream_factory.h
@@ -240,6 +240,7 @@ bool allow_server_migration, bool race_cert_verification, bool estimate_initial_rtt, + bool headers_include_h2_stream_dependency, const QuicTagVector& connection_options, const QuicTagVector& client_connection_options, bool enable_token_binding); @@ -556,6 +557,10 @@ // If true, estimate the initial RTT based on network type. bool estimate_initial_rtt; + // If true, client headers will include HTTP/2 stream dependency info + // derived from SpdyPriority. + bool headers_include_h2_stream_dependency_; + // Local address of socket that was created in CreateSession. IPEndPoint local_address_; // True if we need to check HttpServerProperties if QUIC was supported last
diff --git a/net/quic/chromium/quic_stream_factory_fuzzer.cc b/net/quic/chromium/quic_stream_factory_fuzzer.cc index a4789685..87596614 100644 --- a/net/quic/chromium/quic_stream_factory_fuzzer.cc +++ b/net/quic/chromium/quic_stream_factory_fuzzer.cc
@@ -98,6 +98,7 @@ bool allow_server_migration = data_provider.ConsumeBool(); bool race_cert_verification = data_provider.ConsumeBool(); bool estimate_initial_rtt = data_provider.ConsumeBool(); + bool headers_include_h2_stream_dependency = data_provider.ConsumeBool(); bool enable_token_binding = data_provider.ConsumeBool(); env->crypto_client_stream_factory.AddProofVerifyDetails(&env->verify_details); @@ -136,8 +137,8 @@ base::TimeDelta::FromSeconds(kMaxTimeOnNonDefaultNetworkSecs), kMaxMigrationsToNonDefaultNetworkOnPathDegrading, allow_server_migration, race_cert_verification, estimate_initial_rtt, - env->connection_options, env->client_connection_options, - enable_token_binding); + headers_include_h2_stream_dependency, env->connection_options, + env->client_connection_options, enable_token_binding); QuicStreamRequest request(factory.get()); TestCompletionCallback callback;
diff --git a/net/quic/chromium/quic_stream_factory_test.cc b/net/quic/chromium/quic_stream_factory_test.cc index c9611bd..2833778 100644 --- a/net/quic/chromium/quic_stream_factory_test.cc +++ b/net/quic/chromium/quic_stream_factory_test.cc
@@ -102,19 +102,24 @@ // and enable_connection_racting. struct TestParams { friend std::ostream& operator<<(std::ostream& os, const TestParams& p) { - os << "{ version: " << QuicVersionToString(p.version) << " }"; + os << "{ version: " << QuicVersionToString(p.version) + << ", client_headers_include_h2_stream_dependency: " + << p.client_headers_include_h2_stream_dependency << " }"; return os; } QuicTransportVersion version; + bool client_headers_include_h2_stream_dependency; }; std::vector<TestParams> GetTestParams() { std::vector<TestParams> params; QuicTransportVersionVector all_supported_versions = AllSupportedTransportVersions(); - for (const auto& version : all_supported_versions) - params.push_back(TestParams{version}); + for (const auto& version : all_supported_versions) { + params.push_back(TestParams{version, false}); + params.push_back(TestParams{version, true}); + } return params; } @@ -136,12 +141,15 @@ os << "DIFFERENT"; break; } + os << ", client_headers_include_h2_stream_dependency: " + << p.client_headers_include_h2_stream_dependency; os << " }"; return os; } QuicTransportVersion version; DestinationType destination_type; + bool client_headers_include_h2_stream_dependency; }; std::vector<PoolingTestParams> GetPoolingTestParams() { @@ -149,9 +157,12 @@ QuicTransportVersionVector all_supported_versions = AllSupportedTransportVersions(); for (const QuicTransportVersion version : all_supported_versions) { - params.push_back(PoolingTestParams{version, SAME_AS_FIRST}); - params.push_back(PoolingTestParams{version, SAME_AS_SECOND}); - params.push_back(PoolingTestParams{version, DIFFERENT}); + params.push_back(PoolingTestParams{version, SAME_AS_FIRST, false}); + params.push_back(PoolingTestParams{version, SAME_AS_FIRST, true}); + params.push_back(PoolingTestParams{version, SAME_AS_SECOND, false}); + params.push_back(PoolingTestParams{version, SAME_AS_SECOND, true}); + params.push_back(PoolingTestParams{version, DIFFERENT, false}); + params.push_back(PoolingTestParams{version, DIFFERENT, true}); } return params; } @@ -193,22 +204,27 @@ class QuicStreamFactoryTestBase { protected: - explicit QuicStreamFactoryTestBase(QuicTransportVersion version) + QuicStreamFactoryTestBase(QuicTransportVersion version, + bool client_headers_include_h2_stream_dependency) : ssl_config_service_(new MockSSLConfigService), socket_factory_(new MockClientSocketFactory), random_generator_(0), runner_(new TestTaskRunner(&clock_)), version_(version), + client_headers_include_h2_stream_dependency_( + client_headers_include_h2_stream_dependency), client_maker_(version_, 0, &clock_, kDefaultServerHostName, - Perspective::IS_CLIENT), + Perspective::IS_CLIENT, + client_headers_include_h2_stream_dependency_), server_maker_(version_, 0, &clock_, kDefaultServerHostName, - Perspective::IS_SERVER), + Perspective::IS_SERVER, + false), cert_verifier_(std::make_unique<MockCertVerifier>()), channel_id_service_( new ChannelIDService(new DefaultChannelIDStore(nullptr))), @@ -259,8 +275,8 @@ base::TimeDelta::FromSeconds(kMaxTimeOnNonDefaultNetworkSecs), kMaxMigrationsToNonDefaultNetworkOnPathDegrading, allow_server_migration_, race_cert_verification_, estimate_initial_rtt_, - connection_options_, client_connection_options_, - /*enable_token_binding*/ false)); + client_headers_include_h2_stream_dependency_, connection_options_, + client_connection_options_, /*enable_token_binding*/ false)); } void InitializeConnectionMigrationTest( @@ -761,7 +777,8 @@ MockRandom random_generator_; MockClock clock_; scoped_refptr<TestTaskRunner> runner_; - QuicTransportVersion version_; + const QuicTransportVersion version_; + const bool client_headers_include_h2_stream_dependency_; QuicTestPacketMaker client_maker_; QuicTestPacketMaker server_maker_; HttpServerPropertiesImpl http_server_properties_; @@ -805,10 +822,13 @@ class QuicStreamFactoryTest : public QuicStreamFactoryTestBase, public ::testing::TestWithParam<TestParams> { protected: - QuicStreamFactoryTest() : QuicStreamFactoryTestBase(GetParam().version) {} + QuicStreamFactoryTest() + : QuicStreamFactoryTestBase( + GetParam().version, + GetParam().client_headers_include_h2_stream_dependency) {} }; -INSTANTIATE_TEST_CASE_P(Version, +INSTANTIATE_TEST_CASE_P(VersionIncludeStreamDependencySequnece, QuicStreamFactoryTest, ::testing::ValuesIn(GetTestParams())); @@ -5378,7 +5398,9 @@ public ::testing::TestWithParam<PoolingTestParams> { protected: QuicStreamFactoryWithDestinationTest() - : QuicStreamFactoryTestBase(GetParam().version), + : QuicStreamFactoryTestBase( + GetParam().version, + GetParam().client_headers_include_h2_stream_dependency), destination_type_(GetParam().destination_type), hanging_read_(SYNCHRONOUS, ERR_IO_PENDING, 0) {} @@ -5421,7 +5443,7 @@ sequenced_socket_data_vector_; }; -INSTANTIATE_TEST_CASE_P(Version, +INSTANTIATE_TEST_CASE_P(VersionIncludeStreamDependencySequnece, QuicStreamFactoryWithDestinationTest, ::testing::ValuesIn(GetPoolingTestParams()));
diff --git a/net/quic/chromium/quic_test_packet_maker.cc b/net/quic/chromium/quic_test_packet_maker.cc index d1ce16f..afcd7b3 100644 --- a/net/quic/chromium/quic_test_packet_maker.cc +++ b/net/quic/chromium/quic_test_packet_maker.cc
@@ -24,18 +24,25 @@ } // namespace -QuicTestPacketMaker::QuicTestPacketMaker(QuicTransportVersion version, - QuicConnectionId connection_id, - MockClock* clock, - const std::string& host, - Perspective perspective) +QuicTestPacketMaker::QuicTestPacketMaker( + QuicTransportVersion version, + QuicConnectionId connection_id, + MockClock* clock, + const std::string& host, + Perspective perspective, + bool client_headers_include_h2_stream_dependency) : version_(version), connection_id_(connection_id), clock_(clock), host_(host), spdy_request_framer_(SpdyFramer::ENABLE_COMPRESSION), spdy_response_framer_(SpdyFramer::ENABLE_COMPRESSION), - perspective_(perspective) {} + perspective_(perspective), + client_headers_include_h2_stream_dependency_( + client_headers_include_h2_stream_dependency) { + DCHECK(!(perspective_ == Perspective::IS_SERVER && + client_headers_include_h2_stream_dependency_)); +} QuicTestPacketMaker::~QuicTestPacketMaker() {} @@ -380,12 +387,8 @@ size_t* spdy_headers_frame_length, const std::vector<std::string>& data_writes) { InitializeHeader(packet_number, should_include_version); - SpdySerializedFrame spdy_frame; - SpdyHeadersIR headers_frame(stream_id, std::move(headers)); - headers_frame.set_fin(fin); - headers_frame.set_weight(Spdy3PriorityToHttp2Weight(priority)); - headers_frame.set_has_priority(true); - spdy_frame = spdy_request_framer_.SerializeFrame(headers_frame); + SpdySerializedFrame spdy_frame = + MakeSpdyHeadersFrame(stream_id, fin, priority, std::move(headers)); if (spdy_headers_frame_length) { *spdy_headers_frame_length = spdy_frame.size(); @@ -462,12 +465,8 @@ QuicStreamOffset* offset, std::string* stream_data) { InitializeHeader(packet_number, should_include_version); - SpdySerializedFrame spdy_frame; - SpdyHeadersIR headers_frame(stream_id, std::move(headers)); - headers_frame.set_fin(fin); - headers_frame.set_weight(Spdy3PriorityToHttp2Weight(priority)); - headers_frame.set_has_priority(true); - spdy_frame = spdy_request_framer_.SerializeFrame(headers_frame); + SpdySerializedFrame spdy_frame = + MakeSpdyHeadersFrame(stream_id, fin, priority, std::move(headers)); *stream_data = std::string(spdy_frame.data(), spdy_frame.size()); if (spdy_headers_frame_length) @@ -488,6 +487,38 @@ } } +SpdySerializedFrame QuicTestPacketMaker::MakeSpdyHeadersFrame( + QuicStreamId stream_id, + bool fin, + SpdyPriority priority, + SpdyHeaderBlock headers) { + SpdyHeadersIR headers_frame(stream_id, std::move(headers)); + headers_frame.set_fin(fin); + headers_frame.set_weight(Spdy3PriorityToHttp2Weight(priority)); + headers_frame.set_has_priority(true); + + if (client_headers_include_h2_stream_dependency_) { + // Parent stream is the most recently created stream of the next higher + // priority (i.e. next lower SpdyPriority value). + QuicStreamId parent_stream_id = 0; + for (int p = priority; p >= 0; --p) { + if (!priority_id_lists_[p].empty()) { + parent_stream_id = priority_id_lists_[p].back(); + break; + } + } + priority_id_lists_[priority].push_back(stream_id); + + headers_frame.set_parent_stream_id(parent_stream_id); + headers_frame.set_exclusive(true); + } else { + headers_frame.set_parent_stream_id(0); + headers_frame.set_exclusive(false); + } + + return spdy_request_framer_.SerializeFrame(headers_frame); +} + // Convenience method for calling MakeRequestHeadersPacket with nullptr for // |spdy_headers_frame_length|. std::unique_ptr<QuicReceivedPacket> @@ -715,5 +746,20 @@ return MakePacket(header_, QuicFrame(&quic_frame)); } +void QuicTestPacketMaker::ClientUpdateWithStreamDestruction( + QuicStreamId stream_id) { + DCHECK_EQ(Perspective::IS_CLIENT, perspective_); + if (client_headers_include_h2_stream_dependency_) { + for (auto& list : priority_id_lists_) { + for (auto it = list.begin(); it != list.end(); ++it) { + if (*it == stream_id) { + list.erase(it); + return; + } + } + } + } +} + } // namespace test } // namespace net
diff --git a/net/quic/chromium/quic_test_packet_maker.h b/net/quic/chromium/quic_test_packet_maker.h index c476d82..b287f19 100644 --- a/net/quic/chromium/quic_test_packet_maker.h +++ b/net/quic/chromium/quic_test_packet_maker.h
@@ -31,7 +31,8 @@ QuicConnectionId connection_id, MockClock* clock, const std::string& host, - Perspective perspective); + Perspective perspective, + bool client_headers_include_h2_stream_dependency); ~QuicTestPacketMaker(); void set_hostname(const std::string& host); @@ -247,6 +248,12 @@ SpdyHeaderBlock GetResponseHeaders(const std::string& status, const std::string& alt_svc); + // Tests where a stream is destroyed followed by generating a request header + // for a different stream should call this after the first stream is + // destroyed. This updates |priority_id_lists_| so that the HTTP2 stream + // dependency info in generated request headers are correct. + void ClientUpdateWithStreamDestruction(QuicStreamId stream_id); + private: std::unique_ptr<QuicReceivedPacket> MakePacket(const QuicPacketHeader& header, const QuicFrame& frame); @@ -257,6 +264,11 @@ void InitializeHeader(QuicPacketNumber packet_number, bool should_include_version); + SpdySerializedFrame MakeSpdyHeadersFrame(QuicStreamId stream_id, + bool fin, + SpdyPriority priority, + SpdyHeaderBlock headers); + QuicTransportVersion version_; QuicConnectionId connection_id_; MockClock* clock_; // Owned by QuicStreamFactory. @@ -267,6 +279,13 @@ QuicPacketHeader header_; Perspective perspective_; + // If true, generated request headers will include HTTP2 stream dependency + // info. + bool client_headers_include_h2_stream_dependency_; + // Keeps track of the stream IDs for which request headers have been created, + // grouped by SpdyPriority. + std::vector<QuicStreamId> priority_id_lists_[kV3LowestPriority + 1]; + DISALLOW_COPY_AND_ASSIGN(QuicTestPacketMaker); };
diff --git a/net/quic/core/quic_headers_stream_test.cc b/net/quic/core/quic_headers_stream_test.cc index ffe19ab..cc5ca02 100644 --- a/net/quic/core/quic_headers_stream_test.cc +++ b/net/quic/core/quic_headers_stream_test.cc
@@ -258,8 +258,9 @@ EXPECT_CALL(session_, WritevData(headers_stream_, kHeadersStreamId, _, _, NO_FIN)) .WillOnce(WithArgs<2>(Invoke(this, &QuicHeadersStreamTest::SaveIov))); - QuicSpdySessionPeer::WriteHeadersImpl( - &session_, stream_id, headers_.Clone(), fin, priority, nullptr); + QuicSpdySessionPeer::WriteHeadersImpl(&session_, stream_id, + headers_.Clone(), fin, priority, 0, + false, nullptr); // Parse the outgoing data and check that it matches was was written. if (is_request) {
diff --git a/net/quic/core/quic_spdy_session.cc b/net/quic/core/quic_spdy_session.cc index c05c039..47bf470 100644 --- a/net/quic/core/quic_spdy_session.cc +++ b/net/quic/core/quic_spdy_session.cc
@@ -400,10 +400,21 @@ SpdyHeaderBlock headers, bool fin, SpdyPriority priority, - QuicReferenceCountedPointer<QuicAckListenerInterface> - ack_notifier_delegate) { + QuicReferenceCountedPointer<QuicAckListenerInterface> ack_listener) { + return WriteHeadersImpl(id, std::move(headers), fin, priority, 0, false, + std::move(ack_listener)); +} + +size_t QuicSpdySession::WriteHeaders( + QuicStreamId id, + SpdyHeaderBlock headers, + bool fin, + SpdyPriority priority, + QuicStreamId parent_stream_id, + bool exclusive, + QuicReferenceCountedPointer<QuicAckListenerInterface> ack_listener) { return WriteHeadersImpl(id, std::move(headers), fin, priority, - std::move(ack_notifier_delegate)); + parent_stream_id, exclusive, std::move(ack_listener)); } size_t QuicSpdySession::WriteHeadersImpl( @@ -411,18 +422,32 @@ SpdyHeaderBlock headers, bool fin, SpdyPriority priority, - QuicReferenceCountedPointer<QuicAckListenerInterface> - ack_notifier_delegate) { + QuicStreamId parent_stream_id, + bool exclusive, + QuicReferenceCountedPointer<QuicAckListenerInterface> ack_listener) { SpdyHeadersIR headers_frame(id, std::move(headers)); headers_frame.set_fin(fin); if (perspective() == Perspective::IS_CLIENT) { headers_frame.set_has_priority(true); headers_frame.set_weight(Spdy3PriorityToHttp2Weight(priority)); + headers_frame.set_parent_stream_id(parent_stream_id); + headers_frame.set_exclusive(exclusive); } SpdySerializedFrame frame(spdy_framer_.SerializeFrame(headers_frame)); headers_stream_->WriteOrBufferData( QuicStringPiece(frame.data(), frame.size()), false, - std::move(ack_notifier_delegate)); + std::move(ack_listener)); + return frame.size(); +} + +size_t QuicSpdySession::WritePriority(QuicStreamId id, + QuicStreamId parent_stream_id, + int weight, + bool exclusive) { + SpdyPriorityIR priority_frame(id, parent_stream_id, weight, exclusive); + SpdySerializedFrame frame(spdy_framer_.SerializeFrame(priority_frame)); + headers_stream_->WriteOrBufferData( + QuicStringPiece(frame.data(), frame.size()), false, nullptr); return frame.size(); }
diff --git a/net/quic/core/quic_spdy_session.h b/net/quic/core/quic_spdy_session.h index a2a4c3ce..f8a2d5c 100644 --- a/net/quic/core/quic_spdy_session.h +++ b/net/quic/core/quic_spdy_session.h
@@ -92,6 +92,23 @@ SpdyPriority priority, QuicReferenceCountedPointer<QuicAckListenerInterface> ack_listener); + // |parent_stream_id| and |exclusive| are HTTP2 stream dependency info. + virtual size_t WriteHeaders( + QuicStreamId id, + SpdyHeaderBlock headers, + bool fin, + SpdyPriority priority, + QuicStreamId parent_stream_id, + bool exclusive, + QuicReferenceCountedPointer<QuicAckListenerInterface> ack_listener); + + // Writes a PRIORITY frame the to peer. Returns the size in bytes of the + // resulting PRIORITY frame. + size_t WritePriority(QuicStreamId id, + QuicStreamId parent_stream_id, + int weight, + bool exclusive); + // Write |headers| for |promised_stream_id| on |original_stream_id| in a // PUSH_PROMISE frame to peer. // Return the size, in bytes, of the resulting PUSH_PROMISE frame. @@ -109,13 +126,13 @@ virtual void OnHeadersHeadOfLineBlocking(QuicTime::Delta delta); // Called by the stream on creation to set priority in the write blocked list. - void RegisterStreamPriority(QuicStreamId id, SpdyPriority priority); + virtual void RegisterStreamPriority(QuicStreamId id, SpdyPriority priority); // Called by the stream on deletion to clear priority crom the write blocked // list. - void UnregisterStreamPriority(QuicStreamId id); + virtual void UnregisterStreamPriority(QuicStreamId id); // Called by the stream on SetPriority to update priority on the write blocked // list. - void UpdateStreamPriority(QuicStreamId id, SpdyPriority new_priority); + virtual void UpdateStreamPriority(QuicStreamId id, SpdyPriority new_priority); void OnConfigNegotiated() override; @@ -226,6 +243,8 @@ SpdyHeaderBlock headers, bool fin, SpdyPriority priority, + QuicStreamId parent_stream_id, + bool exclusive, QuicReferenceCountedPointer<QuicAckListenerInterface> ack_listener); std::unique_ptr<QuicHeadersStream> headers_stream_;
diff --git a/net/quic/test_tools/quic_spdy_session_peer.cc b/net/quic/test_tools/quic_spdy_session_peer.cc index 06350f8c..acd51f2 100644 --- a/net/quic/test_tools/quic_spdy_session_peer.cc +++ b/net/quic/test_tools/quic_spdy_session_peer.cc
@@ -55,8 +55,11 @@ SpdyHeaderBlock headers, bool fin, SpdyPriority priority, + QuicStreamId parent_stream_id, + bool exclusive, QuicReferenceCountedPointer<QuicAckListenerInterface> ack_listener) { return session->WriteHeadersImpl(id, std::move(headers), fin, priority, + parent_stream_id, exclusive, std::move(ack_listener)); }
diff --git a/net/quic/test_tools/quic_spdy_session_peer.h b/net/quic/test_tools/quic_spdy_session_peer.h index ea844e6..fa1faff 100644 --- a/net/quic/test_tools/quic_spdy_session_peer.h +++ b/net/quic/test_tools/quic_spdy_session_peer.h
@@ -39,6 +39,8 @@ SpdyHeaderBlock headers, bool fin, SpdyPriority priority, + QuicStreamId parent_stream_id, + bool exclusive, QuicReferenceCountedPointer<QuicAckListenerInterface> ack_listener); // Helper functions for stream ids, to allow test logic to abstract // over the HTTP stream numbering scheme (i.e. whether one or
diff --git a/net/socket/client_socket_pool_manager.cc b/net/socket/client_socket_pool_manager.cc index 85d614e3..534091c 100644 --- a/net/socket/client_socket_pool_manager.cc +++ b/net/socket/client_socket_pool_manager.cc
@@ -188,9 +188,9 @@ connection_group = base::StringPrintf( "socks%c/%s", socks_version, connection_group.c_str()); - socks_params = new SOCKSSocketParams(proxy_tcp_params, - socks_version == '5', - origin_host_port); + socks_params = new SOCKSSocketParams( + proxy_tcp_params, socks_version == '5', origin_host_port, + proxy_info.traffic_annotation()); } }
diff --git a/net/socket/socks5_client_socket.cc b/net/socket/socks5_client_socket.cc index 8c301268..6b436878 100644 --- a/net/socket/socks5_client_socket.cc +++ b/net/socket/socks5_client_socket.cc
@@ -32,7 +32,8 @@ SOCKS5ClientSocket::SOCKS5ClientSocket( std::unique_ptr<ClientSocketHandle> transport_socket, - const HostResolver::RequestInfo& req_info) + const HostResolver::RequestInfo& req_info, + const NetworkTrafficAnnotationTag& traffic_annotation) : io_callback_(base::Bind(&SOCKS5ClientSocket::OnIOComplete, base::Unretained(this))), transport_(std::move(transport_socket)), @@ -43,7 +44,8 @@ read_header_size(kReadHeaderSize), was_ever_used_(false), host_request_info_(req_info), - net_log_(transport_->socket()->NetLog()) {} + net_log_(transport_->socket()->NetLog()), + traffic_annotation_(traffic_annotation) {} SOCKS5ClientSocket::~SOCKS5ClientSocket() { Disconnect(); @@ -305,7 +307,7 @@ memcpy(handshake_buf_->data(), &buffer_.data()[bytes_sent_], handshake_buf_len); return transport_->socket()->Write(handshake_buf_.get(), handshake_buf_len, - io_callback_); + io_callback_, traffic_annotation_); } int SOCKS5ClientSocket::DoGreetWriteComplete(int result) { @@ -404,7 +406,7 @@ memcpy(handshake_buf_->data(), &buffer_[bytes_sent_], handshake_buf_len); return transport_->socket()->Write(handshake_buf_.get(), handshake_buf_len, - io_callback_); + io_callback_, traffic_annotation_); } int SOCKS5ClientSocket::DoHandshakeWriteComplete(int result) {
diff --git a/net/socket/socks5_client_socket.h b/net/socket/socks5_client_socket.h index 8d3f34f5..364ac53 100644 --- a/net/socket/socks5_client_socket.h +++ b/net/socket/socks5_client_socket.h
@@ -38,7 +38,8 @@ // always pass it a hostname. This means the DNS resolving is done // proxy side. SOCKS5ClientSocket(std::unique_ptr<ClientSocketHandle> transport_socket, - const HostResolver::RequestInfo& req_info); + const HostResolver::RequestInfo& req_info, + const NetworkTrafficAnnotationTag& traffic_annotation); // On destruction Disconnect() is called. ~SOCKS5ClientSocket() override; @@ -158,6 +159,9 @@ NetLogWithSource net_log_; + // Traffic annotation for socket control. + NetworkTrafficAnnotationTag traffic_annotation_; + DISALLOW_COPY_AND_ASSIGN(SOCKS5ClientSocket); };
diff --git a/net/socket/socks5_client_socket_fuzzer.cc b/net/socket/socks5_client_socket_fuzzer.cc index 272e37df..fb9c7b5 100644 --- a/net/socket/socks5_client_socket_fuzzer.cc +++ b/net/socket/socks5_client_socket_fuzzer.cc
@@ -16,6 +16,7 @@ #include "net/socket/client_socket_handle.h" #include "net/socket/fuzzed_socket.h" #include "net/socket/socks5_client_socket.h" +#include "net/traffic_annotation/network_traffic_annotation_test_helper.h" // Fuzzer for Socks5ClientSocket. Only covers the SOCKS5 greeet and // handshake. @@ -38,7 +39,8 @@ socket_handle->SetSocket(std::move(fuzzed_socket)); net::HostResolver::RequestInfo request_info(net::HostPortPair("foo", 80)); - net::SOCKS5ClientSocket socket(std::move(socket_handle), request_info); + net::SOCKS5ClientSocket socket(std::move(socket_handle), request_info, + TRAFFIC_ANNOTATION_FOR_TESTS); int result = socket.Connect(callback.callback()); callback.GetResult(result); return 0;
diff --git a/net/socket/socks5_client_socket_unittest.cc b/net/socket/socks5_client_socket_unittest.cc index b8807287..fea734f 100644 --- a/net/socket/socks5_client_socket_unittest.cc +++ b/net/socket/socks5_client_socket_unittest.cc
@@ -118,7 +118,8 @@ connection->SetSocket(std::unique_ptr<StreamSocket>(tcp_sock_)); return std::unique_ptr<SOCKS5ClientSocket>(new SOCKS5ClientSocket( std::move(connection), - HostResolver::RequestInfo(HostPortPair(hostname, port)))); + HostResolver::RequestInfo(HostPortPair(hostname, port)), + TRAFFIC_ANNOTATION_FOR_TESTS)); } // Tests a complete SOCKS5 handshake and the disconnection. @@ -399,7 +400,8 @@ connection->SetSocket(std::unique_ptr<StreamSocket>(tagging_sock)); SOCKS5ClientSocket socket( std::move(connection), - HostResolver::RequestInfo(HostPortPair("localhost", 80))); + HostResolver::RequestInfo(HostPortPair("localhost", 80)), + TRAFFIC_ANNOTATION_FOR_TESTS); EXPECT_EQ(tagging_sock->tag(), SocketTag()); #if defined(OS_ANDROID)
diff --git a/net/socket/socks_client_socket.cc b/net/socket/socks_client_socket.cc index efea9300..3e5d6eb 100644 --- a/net/socket/socks_client_socket.cc +++ b/net/socket/socks_client_socket.cc
@@ -62,7 +62,8 @@ std::unique_ptr<ClientSocketHandle> transport_socket, const HostResolver::RequestInfo& req_info, RequestPriority priority, - HostResolver* host_resolver) + HostResolver* host_resolver, + const NetworkTrafficAnnotationTag& traffic_annotation) : transport_(std::move(transport_socket)), next_state_(STATE_NONE), completed_handshake_(false), @@ -72,7 +73,8 @@ host_resolver_(host_resolver), host_request_info_(req_info), priority_(priority), - net_log_(transport_->socket()->NetLog()) {} + net_log_(transport_->socket()->NetLog()), + traffic_annotation_(traffic_annotation) {} SOCKSClientSocket::~SOCKSClientSocket() { Disconnect(); @@ -362,7 +364,8 @@ handshake_buf_len); return transport_->socket()->Write( handshake_buf_.get(), handshake_buf_len, - base::Bind(&SOCKSClientSocket::OnIOComplete, base::Unretained(this))); + base::Bind(&SOCKSClientSocket::OnIOComplete, base::Unretained(this)), + traffic_annotation_); } int SOCKSClientSocket::DoHandshakeWriteComplete(int result) {
diff --git a/net/socket/socks_client_socket.h b/net/socket/socks_client_socket.h index 0061543..f39f264 100644 --- a/net/socket/socks_client_socket.h +++ b/net/socket/socks_client_socket.h
@@ -35,7 +35,8 @@ SOCKSClientSocket(std::unique_ptr<ClientSocketHandle> transport_socket, const HostResolver::RequestInfo& req_info, RequestPriority priority, - HostResolver* host_resolver); + HostResolver* host_resolver, + const NetworkTrafficAnnotationTag& traffic_annotation); // On destruction Disconnect() is called. ~SOCKSClientSocket() override; @@ -141,6 +142,9 @@ NetLogWithSource net_log_; + // Traffic annotation for socket control. + NetworkTrafficAnnotationTag traffic_annotation_; + DISALLOW_COPY_AND_ASSIGN(SOCKSClientSocket); };
diff --git a/net/socket/socks_client_socket_fuzzer.cc b/net/socket/socks_client_socket_fuzzer.cc index dd02f51..feaa182 100644 --- a/net/socket/socks_client_socket_fuzzer.cc +++ b/net/socket/socks_client_socket_fuzzer.cc
@@ -18,6 +18,7 @@ #include "net/socket/client_socket_handle.h" #include "net/socket/fuzzed_socket.h" #include "net/socket/socks_client_socket.h" +#include "net/traffic_annotation/network_traffic_annotation_test_helper.h" // Fuzzer for SocksClientSocket. Only covers the SOCKS4 handshake. // @@ -58,8 +59,10 @@ socket_handle->SetSocket(std::move(fuzzed_socket)); net::HostResolver::RequestInfo request_info(net::HostPortPair("foo", 80)); + net::SOCKSClientSocket socket(std::move(socket_handle), request_info, - net::DEFAULT_PRIORITY, &mock_host_resolver); + net::DEFAULT_PRIORITY, &mock_host_resolver, + TRAFFIC_ANNOTATION_FOR_TESTS); int result = socket.Connect(callback.callback()); callback.GetResult(result); return 0;
diff --git a/net/socket/socks_client_socket_pool.cc b/net/socket/socks_client_socket_pool.cc index 86b4ac0..d61bbfc 100644 --- a/net/socket/socks_client_socket_pool.cc +++ b/net/socket/socks_client_socket_pool.cc
@@ -27,11 +27,12 @@ SOCKSSocketParams::SOCKSSocketParams( const scoped_refptr<TransportSocketParams>& proxy_server, bool socks_v5, - const HostPortPair& host_port_pair) + const HostPortPair& host_port_pair, + const NetworkTrafficAnnotationTag& traffic_annotation) : transport_params_(proxy_server), destination_(host_port_pair), - socks_v5_(socks_v5) { -} + socks_v5_(socks_v5), + traffic_annotation_(traffic_annotation) {} SOCKSSocketParams::~SOCKSSocketParams() = default; @@ -147,11 +148,12 @@ // Add a SOCKS connection on top of the tcp socket. if (socks_params_->is_socks_v5()) { socket_.reset(new SOCKS5ClientSocket(std::move(transport_socket_handle_), - socks_params_->destination())); + socks_params_->destination(), + socks_params_->traffic_annotation())); } else { - socket_.reset(new SOCKSClientSocket(std::move(transport_socket_handle_), - socks_params_->destination(), - priority(), resolver_)); + socket_.reset(new SOCKSClientSocket( + std::move(transport_socket_handle_), socks_params_->destination(), + priority(), resolver_, socks_params_->traffic_annotation())); } return socket_->Connect( base::Bind(&SOCKSConnectJob::OnIOComplete, base::Unretained(this)));
diff --git a/net/socket/socks_client_socket_pool.h b/net/socket/socks_client_socket_pool.h index 4eb72e8e..b394443 100644 --- a/net/socket/socks_client_socket_pool.h +++ b/net/socket/socks_client_socket_pool.h
@@ -17,6 +17,7 @@ #include "net/dns/host_resolver.h" #include "net/socket/client_socket_pool.h" #include "net/socket/client_socket_pool_base.h" +#include "net/traffic_annotation/network_traffic_annotation.h" namespace net { @@ -29,7 +30,9 @@ : public base::RefCounted<SOCKSSocketParams> { public: SOCKSSocketParams(const scoped_refptr<TransportSocketParams>& proxy_server, - bool socks_v5, const HostPortPair& host_port_pair); + bool socks_v5, + const HostPortPair& host_port_pair, + const NetworkTrafficAnnotationTag& traffic_annotation); const scoped_refptr<TransportSocketParams>& transport_params() const { return transport_params_; @@ -37,6 +40,10 @@ const HostResolver::RequestInfo& destination() const { return destination_; } bool is_socks_v5() const { return socks_v5_; } + const NetworkTrafficAnnotationTag traffic_annotation() { + return traffic_annotation_; + } + private: friend class base::RefCounted<SOCKSSocketParams>; ~SOCKSSocketParams(); @@ -47,6 +54,8 @@ HostResolver::RequestInfo destination_; const bool socks_v5_; + NetworkTrafficAnnotationTag traffic_annotation_; + DISALLOW_COPY_AND_ASSIGN(SOCKSSocketParams); };
diff --git a/net/socket/socks_client_socket_pool_unittest.cc b/net/socket/socks_client_socket_pool_unittest.cc index eaafb9d9..71dab65 100644 --- a/net/socket/socks_client_socket_pool_unittest.cc +++ b/net/socket/socks_client_socket_pool_unittest.cc
@@ -19,6 +19,7 @@ #include "net/socket/client_socket_handle.h" #include "net/socket/socket_test_util.h" #include "net/test/gtest_util.h" +#include "net/traffic_annotation/network_traffic_annotation_test_helper.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -56,15 +57,15 @@ } scoped_refptr<SOCKSSocketParams> CreateSOCKSv4Params() { - return new SOCKSSocketParams( - CreateProxyHostParams(), false /* socks_v5 */, - HostPortPair("host", 80)); + return new SOCKSSocketParams(CreateProxyHostParams(), false /* socks_v5 */, + HostPortPair("host", 80), + TRAFFIC_ANNOTATION_FOR_TESTS); } scoped_refptr<SOCKSSocketParams> CreateSOCKSv5Params() { - return new SOCKSSocketParams( - CreateProxyHostParams(), true /* socks_v5 */, - HostPortPair("host", 80)); + return new SOCKSSocketParams(CreateProxyHostParams(), true /* socks_v5 */, + HostPortPair("host", 80), + TRAFFIC_ANNOTATION_FOR_TESTS); } class SOCKSClientSocketPoolTest : public testing::Test {
diff --git a/net/socket/socks_client_socket_unittest.cc b/net/socket/socks_client_socket_unittest.cc index f866f24..a3f5b873 100644 --- a/net/socket/socks_client_socket_unittest.cc +++ b/net/socket/socks_client_socket_unittest.cc
@@ -101,7 +101,7 @@ return std::unique_ptr<SOCKSClientSocket>(new SOCKSClientSocket( std::move(connection), HostResolver::RequestInfo(HostPortPair(hostname, port)), DEFAULT_PRIORITY, - host_resolver)); + host_resolver, TRAFFIC_ANNOTATION_FOR_TESTS)); } // Implementation of HostResolver that never completes its resolve request. @@ -500,7 +500,7 @@ SOCKSClientSocket socket( std::move(connection), HostResolver::RequestInfo(HostPortPair("localhost", 80)), - DEFAULT_PRIORITY, &host_resolver); + DEFAULT_PRIORITY, &host_resolver, TRAFFIC_ANNOTATION_FOR_TESTS); EXPECT_EQ(tagging_sock->tag(), SocketTag()); #if defined(OS_ANDROID)
diff --git a/net/socket/ssl_client_socket_impl.cc b/net/socket/ssl_client_socket_impl.cc index 4d9aa6d..e8a5c8f 100644 --- a/net/socket/ssl_client_socket_impl.cc +++ b/net/socket/ssl_client_socket_impl.cc
@@ -945,6 +945,9 @@ switch (ssl_config_.tls13_variant) { case kTLS13VariantDraft22: + SSL_set_tls13_variant(ssl_.get(), tls13_draft22); + break; + case kTLS13VariantDraft23: SSL_set_tls13_variant(ssl_.get(), tls13_default); break; case kTLS13VariantExperiment2:
diff --git a/net/socket/ssl_client_socket_pool_unittest.cc b/net/socket/ssl_client_socket_pool_unittest.cc index f102be2e..140fac8 100644 --- a/net/socket/ssl_client_socket_pool_unittest.cc +++ b/net/socket/ssl_client_socket_pool_unittest.cc
@@ -36,6 +36,7 @@ #include "net/ssl/ssl_config_service_defaults.h" #include "net/test/gtest_util.h" #include "net/test/test_certificate_data.h" +#include "net/traffic_annotation/network_traffic_annotation_test_helper.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -109,7 +110,8 @@ socks_socket_params_( new SOCKSSocketParams(proxy_transport_socket_params_, true, - HostPortPair("sockshost", 443))), + HostPortPair("sockshost", 443), + TRAFFIC_ANNOTATION_FOR_TESTS)), socks_socket_pool_(kMaxSockets, kMaxSocketsPerGroup, &transport_socket_pool_),
diff --git a/net/spdy/chromium/http2_priority_dependencies.cc b/net/spdy/chromium/http2_priority_dependencies.cc index 97c4b39..5874511e 100644 --- a/net/spdy/chromium/http2_priority_dependencies.cc +++ b/net/spdy/chromium/http2_priority_dependencies.cc
@@ -16,7 +16,8 @@ SpdyPriority priority, SpdyStreamId* dependent_stream_id, bool* exclusive) { - DCHECK(entry_by_stream_id_.find(id) == entry_by_stream_id_.end()); + if (entry_by_stream_id_.find(id) != entry_by_stream_id_.end()) + return; *dependent_stream_id = 0ul; *exclusive = true; @@ -97,6 +98,10 @@ result.reserve(2); EntryMap::iterator curr_entry = entry_by_stream_id_.find(id); + if (curr_entry == entry_by_stream_id_.end()) { + return result; + } + SpdyPriority old_priority = curr_entry->second->second; if (old_priority == new_priority) { return result; @@ -151,7 +156,8 @@ void Http2PriorityDependencies::OnStreamDestruction(SpdyStreamId id) { EntryMap::iterator emit = entry_by_stream_id_.find(id); - DCHECK(emit != entry_by_stream_id_.end()); + if (emit == entry_by_stream_id_.end()) + return; IdList::iterator it = emit->second; id_priority_lists_[it->second].erase(it);
diff --git a/net/spdy/chromium/spdy_network_transaction_unittest.cc b/net/spdy/chromium/spdy_network_transaction_unittest.cc index 477590ec..14001a9a 100644 --- a/net/spdy/chromium/spdy_network_transaction_unittest.cc +++ b/net/spdy/chromium/spdy_network_transaction_unittest.cc
@@ -2137,7 +2137,7 @@ &push_headers); SpdySerializedFrame push_init_frame( - spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 2, 1)); + spdy_util_.ConstructSpdyPushPromise(1, 2, std::move(push_headers))); SpdySerializedFrame push_headers_frame( spdy_util_.ConstructSpdyPushHeaders(2, nullptr, 0)); @@ -2803,15 +2803,13 @@ // Can't use ConstructSpdyPush here since it wants to parse a URL and // split it into the appropriate :header pieces. So we have to hand-fill // those pieces in. - SpdyFramer response_spdy_framer(SpdyFramer::ENABLE_COMPRESSION); SpdyHeaderBlock push_promise_header_block; push_promise_header_block[kHttp2AuthorityHeader] = ""; push_promise_header_block[kHttp2SchemeHeader] = ""; push_promise_header_block[kHttp2PathHeader] = "/index.html"; - SpdyPushPromiseIR push_promise(1, 2, std::move(push_promise_header_block)); - SpdySerializedFrame push_promise_frame( - response_spdy_framer.SerializeFrame(push_promise)); + SpdySerializedFrame push_promise(spdy_util_.ConstructSpdyPushPromise( + 1, 2, std::move(push_promise_header_block))); SpdySerializedFrame stream2_rst( spdy_util_.ConstructSpdyRstStream(2, ERROR_CODE_REFUSED_STREAM)); @@ -2819,7 +2817,7 @@ MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(stream2_rst, 2)}; MockRead reads[] = { - CreateMockRead(push_promise_frame, 1), MockRead(ASYNC, 0, 3) /* EOF */ + CreateMockRead(push_promise, 1), MockRead(ASYNC, 0, 3) /* EOF */ }; SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); RunBrokenPushTest(&data, ERR_CONNECTION_CLOSED); @@ -2884,8 +2882,8 @@ SpdyHeaderBlock incomplete_headers; incomplete_headers[kHttp2StatusHeader] = "200 OK"; incomplete_headers["hello"] = "bye"; - SpdySerializedFrame stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame( - std::move(incomplete_headers), 2, 1)); + SpdySerializedFrame stream2_syn( + spdy_util_.ConstructSpdyPushPromise(1, 2, std::move(incomplete_headers))); MockRead reads[] = { CreateMockRead(stream1_reply, 1), CreateMockRead(stream2_syn, 2), CreateMockRead(stream1_body, 4), @@ -3257,14 +3255,13 @@ SpdyHeaderBlock push_promise_header_block; spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat").c_str(), &push_promise_header_block); - SpdyPushPromiseIR push_promise(1, 2, std::move(push_promise_header_block)); - SpdySerializedFrame push_promise_frame( - spdy_util_.SerializeFrame(push_promise)); + SpdySerializedFrame push_promise(spdy_util_.ConstructSpdyPushPromise( + 1, 2, std::move(push_promise_header_block))); SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); - MockRead reads[] = { - CreateMockRead(reply, 1), CreateMockRead(push_promise_frame, 2), - CreateMockRead(body, 4), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5)}; + MockRead reads[] = {CreateMockRead(reply, 1), CreateMockRead(push_promise, 2), + CreateMockRead(body, 4), + MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5)}; SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); NormalSpdyTransactionHelper helper(request_, DEFAULT_PRIORITY, log_, nullptr); @@ -3285,14 +3282,13 @@ push_promise_header_block[":method"] = "POST"; spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat").c_str(), &push_promise_header_block); - SpdyPushPromiseIR push_promise(1, 2, std::move(push_promise_header_block)); - SpdySerializedFrame push_promise_frame( - spdy_util_.SerializeFrame(push_promise)); + SpdySerializedFrame push_promise(spdy_util_.ConstructSpdyPushPromise( + 1, 2, std::move(push_promise_header_block))); SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); - MockRead reads[] = { - CreateMockRead(reply, 1), CreateMockRead(push_promise_frame, 2), - CreateMockRead(body, 4), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5)}; + MockRead reads[] = {CreateMockRead(reply, 1), CreateMockRead(push_promise, 2), + CreateMockRead(body, 4), + MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5)}; SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); NormalSpdyTransactionHelper helper(request_, DEFAULT_PRIORITY, log_, nullptr); @@ -4838,8 +4834,8 @@ initial_headers[":method"] = "GET"; spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat"), &initial_headers); - SpdySerializedFrame stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame( - std::move(initial_headers), 2, 1)); + SpdySerializedFrame stream2_syn( + spdy_util_.ConstructSpdyPushPromise(1, 2, std::move(initial_headers))); SpdyHeaderBlock late_headers; late_headers[kHttp2StatusHeader] = "200"; @@ -4897,8 +4893,8 @@ initial_headers[":method"] = "GET"; spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat"), &initial_headers); - SpdySerializedFrame stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame( - std::move(initial_headers), 2, 1)); + SpdySerializedFrame stream2_syn( + spdy_util_.ConstructSpdyPushPromise(1, 2, std::move(initial_headers))); SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); SpdyHeaderBlock late_headers; late_headers[kHttp2StatusHeader] = "200"; @@ -6391,7 +6387,7 @@ SpdyHeaderBlock push_headers; spdy_util_.AddUrlToHeaderBlock("http://www.example.org/a.dat", &push_headers); SpdySerializedFrame push( - spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 3, 1)); + spdy_util_.ConstructSpdyPushPromise(1, 3, std::move(push_headers))); MockRead reads[] = {CreateMockRead(push, 1)}; SpdySerializedFrame req( @@ -6417,8 +6413,8 @@ SpdyHeaderBlock push_b_headers; spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/b.dat"), &push_b_headers); - SpdySerializedFrame push_b(spdy_util_.ConstructInitialSpdyPushFrame( - std::move(push_b_headers), 2, 1)); + SpdySerializedFrame push_b( + spdy_util_.ConstructSpdyPushPromise(1, 2, std::move(push_b_headers))); MockRead reads[] = { CreateMockRead(push_a, 1), CreateMockRead(push_b, 3), }; @@ -6806,8 +6802,8 @@ CreateMockWrite(req2, 6)}; // Construct a Push Promise frame, with no response. - SpdySerializedFrame push_promise(spdy_util_.ConstructInitialSpdyPushFrame( - spdy_util_.ConstructGetHeaderBlock(pushed_url), 2, 1)); + SpdySerializedFrame push_promise(spdy_util_.ConstructSpdyPushPromise( + 1, 2, spdy_util_.ConstructGetHeaderBlock(pushed_url))); // Construct a RST frame, canceling stream 2. SpdySerializedFrame rst_server( spdy_util_.ConstructSpdyRstStream(2, ERROR_CODE_CANCEL));
diff --git a/net/spdy/chromium/spdy_session_unittest.cc b/net/spdy/chromium/spdy_session_unittest.cc index cb30e81..5e26547d 100644 --- a/net/spdy/chromium/spdy_session_unittest.cc +++ b/net/spdy/chromium/spdy_session_unittest.cc
@@ -5421,7 +5421,7 @@ spdy_util_.AddUrlToHeaderBlock("https://www.example.org/b.dat", &push_headers); SpdySerializedFrame push_b( - spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 4, 1)); + spdy_util_.ConstructSpdyPushPromise(1, 4, std::move(push_headers))); SpdySerializedFrame headers_b( spdy_util_.ConstructSpdyPushHeaders(4, nullptr, 0)); MockRead reads[] = { @@ -5514,7 +5514,7 @@ push_headers[":method"] = "GET"; spdy_util_.AddUrlToHeaderBlock(kPushedUrl, &push_headers); SpdySerializedFrame push_promise( - spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 2, 1)); + spdy_util_.ConstructSpdyPushPromise(1, 2, std::move(push_headers))); SpdySerializedFrame headers_frame( spdy_util_.ConstructSpdyPushHeaders(2, nullptr, 0)); MockRead reads[] = { @@ -5617,7 +5617,7 @@ push_headers[":method"] = "GET"; spdy_util_.AddUrlToHeaderBlock(kPushedUrl, &push_headers); SpdySerializedFrame push_promise( - spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 2, 1)); + spdy_util_.ConstructSpdyPushPromise(1, 2, std::move(push_headers))); SpdySerializedFrame headers_frame( spdy_util_.ConstructSpdyPushHeaders(2, nullptr, 0)); MockRead reads[] = {
diff --git a/net/spdy/chromium/spdy_stream_unittest.cc b/net/spdy/chromium/spdy_stream_unittest.cc index d7e864d..9910a6ac 100644 --- a/net/spdy/chromium/spdy_stream_unittest.cc +++ b/net/spdy/chromium/spdy_stream_unittest.cc
@@ -748,8 +748,8 @@ SpdySerializedFrame reply(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); AddRead(reply); - SpdySerializedFrame push_promise(spdy_util_.ConstructInitialSpdyPushFrame( - spdy_util_.ConstructGetHeaderBlock(kPushUrl), 2, 1)); + SpdySerializedFrame push_promise(spdy_util_.ConstructSpdyPushPromise( + 1, 2, spdy_util_.ConstructGetHeaderBlock(kPushUrl))); AddRead(push_promise); SpdySerializedFrame priority( @@ -864,8 +864,8 @@ SpdySerializedFrame reply(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); AddRead(reply); - SpdySerializedFrame push_promise(spdy_util_.ConstructInitialSpdyPushFrame( - spdy_util_.ConstructGetHeaderBlock(kPushUrl), 2, 1)); + SpdySerializedFrame push_promise(spdy_util_.ConstructSpdyPushPromise( + 1, 2, spdy_util_.ConstructGetHeaderBlock(kPushUrl))); AddRead(push_promise); SpdySerializedFrame priority(
diff --git a/net/spdy/chromium/spdy_test_util_common.cc b/net/spdy/chromium/spdy_test_util_common.cc index c1f7530f..166db5b 100644 --- a/net/spdy/chromium/spdy_test_util_common.cc +++ b/net/spdy/chromium/spdy_test_util_common.cc
@@ -325,7 +325,8 @@ time_func(&base::TimeTicks::Now), enable_http2_alternative_service(false), net_log(nullptr), - http_09_on_non_default_ports_enabled(false) { + http_09_on_non_default_ports_enabled(false), + disable_idle_sockets_close_on_memory_pressure(false) { // Note: The CancelledTransaction test does cleanup by running all // tasks in the message loop (RunAllPending). Unfortunately, that // doesn't clean up tasks on the host resolver thread; and @@ -379,6 +380,8 @@ session_deps->enable_http2_alternative_service; params.http_09_on_non_default_ports_enabled = session_deps->http_09_on_non_default_ports_enabled; + params.disable_idle_sockets_close_on_memory_pressure = + session_deps->disable_idle_sockets_close_on_memory_pressure; return params; } @@ -807,10 +810,8 @@ SpdyHeaderBlock push_promise_header_block; push_promise_header_block[kHttp2MethodHeader] = "GET"; AddUrlToHeaderBlock(url, &push_promise_header_block); - SpdyPushPromiseIR push_promise(associated_stream_id, stream_id, - std::move(push_promise_header_block)); - SpdySerializedFrame push_promise_frame( - response_spdy_framer_.SerializeFrame(push_promise)); + SpdySerializedFrame push_promise_frame(ConstructSpdyPushPromise( + associated_stream_id, stream_id, std::move(push_promise_header_block))); SpdyHeaderBlock headers_header_block; headers_header_block[kHttp2StatusHeader] = "200"; @@ -834,10 +835,8 @@ SpdyHeaderBlock push_promise_header_block; push_promise_header_block[kHttp2MethodHeader] = "GET"; AddUrlToHeaderBlock(url, &push_promise_header_block); - SpdyPushPromiseIR push_promise(associated_stream_id, stream_id, - std::move(push_promise_header_block)); - SpdySerializedFrame push_promise_frame( - response_spdy_framer_.SerializeFrame(push_promise)); + SpdySerializedFrame push_promise_frame(ConstructSpdyPushPromise( + associated_stream_id, stream_id, std::move(push_promise_header_block))); SpdyHeaderBlock headers_header_block; headers_header_block["hello"] = "bye"; @@ -851,10 +850,10 @@ return CombineFrames({&push_promise_frame, &headers_frame}); } -SpdySerializedFrame SpdyTestUtil::ConstructInitialSpdyPushFrame( - SpdyHeaderBlock headers, - int stream_id, - int associated_stream_id) { +SpdySerializedFrame SpdyTestUtil::ConstructSpdyPushPromise( + SpdyStreamId associated_stream_id, + SpdyStreamId stream_id, + SpdyHeaderBlock headers) { SpdyPushPromiseIR push_promise(associated_stream_id, stream_id, std::move(headers)); return SpdySerializedFrame(
diff --git a/net/spdy/chromium/spdy_test_util_common.h b/net/spdy/chromium/spdy_test_util_common.h index 316a8b9..5aa3cd6 100644 --- a/net/spdy/chromium/spdy_test_util_common.h +++ b/net/spdy/chromium/spdy_test_util_common.h
@@ -220,6 +220,7 @@ bool enable_http2_alternative_service; NetLog* net_log; bool http_09_on_non_default_ports_enabled; + bool disable_idle_sockets_close_on_memory_pressure; }; class SpdyURLRequestContext : public URLRequestContext { @@ -372,10 +373,10 @@ RequestPriority priority, const HostPortPair& host_port_pair); - // Constructs a SPDY PUSH_PROMISE frame. + // Constructs a PUSH_PROMISE frame and a HEADERS frame on the pushed stream. // |extra_headers| are the extra header-value pairs, which typically // will vary the most between calls. - // Returns a SpdySerializedFrame. + // Returns a SpdySerializedFrame object with the two frames concatenated. SpdySerializedFrame ConstructSpdyPush(const char* const extra_headers[], int extra_header_count, int stream_id, @@ -389,9 +390,11 @@ const char* status, const char* location); - SpdySerializedFrame ConstructInitialSpdyPushFrame(SpdyHeaderBlock headers, - int stream_id, - int associated_stream_id); + // Constructs a PUSH_PROMISE frame. + SpdySerializedFrame ConstructSpdyPushPromise( + SpdyStreamId associated_stream_id, + SpdyStreamId stream_id, + SpdyHeaderBlock headers); SpdySerializedFrame ConstructSpdyPushHeaders( int stream_id,
diff --git a/net/ssl/ssl_config.h b/net/ssl/ssl_config.h index 32f6902..d1d6771 100644 --- a/net/ssl/ssl_config.h +++ b/net/ssl/ssl_config.h
@@ -38,6 +38,7 @@ enum TLS13Variant { kTLS13VariantExperiment2, kTLS13VariantDraft22, + kTLS13VariantDraft23, }; // Default minimum protocol version.
diff --git a/remoting/resources/remoting_strings_fa.xtb b/remoting/resources/remoting_strings_fa.xtb index 05be8ab..f7ff32c 100644 --- a/remoting/resources/remoting_strings_fa.xtb +++ b/remoting/resources/remoting_strings_fa.xtb
@@ -10,17 +10,17 @@ <translation id="1199593201721843963">غیر فعال کردن اتصالات راه دور</translation> <translation id="1291443878853470558">اگر بخواهید کار با Chrome را برای دسترسی به این رایانه استفاده کنید، شما باید اتصالات راه دور را فعال کنید.</translation> <translation id="1297009705180977556">خطا در اتصال به <ph name="HOSTNAME" /></translation> -<translation id="1300633907480909701">از دستگاه Android خودتان به صورت ایمن به رایانههایتان دسترسی داشته باشید. +<translation id="1300633907480909701">از دستگاه Android خودتان بهصورت ایمن به رایانههایتان دسترسی داشته باشید. -• در هر یک از رایانههایتان، دسترسی از راه دور را با استفاده از برنامه کنترل دسکتاپ از راه دور Chrome از فروشگاه وب Chrome راهاندازی کنید: https://chrome.google.com/remotedesktop -• در دستگاه Android خودتان، برنامه را باز کنید و روی هر کدام از رایانههایتان که آنلاین است ضربه بزنید تا متصل شود. +• در هریک از رایانههایتان، دسترسی ازراهدور را با استفاده از برنامه کنترل رایانه ازراهدور Chrome از فروشگاه وب Chrome راهاندازی کنید: https://chrome.google.com/remotedesktop +• در دستگاه Android، برنامه را باز کنید و روی هرکدام از رایانههایتان که آنلاین است ضربه بزنید تا متصل شود. -رایانههای راه دور دارای صفحهکلیدهای غیر انگلیسی آمریکایی ممکن است ورودی نوشتار نادرستی دریافت کنند. پشتیبانی برای چیدمانهای دیگر صفحهکلید به زودی ارائه میشود! +رایانههای راه دور دارای صفحهکلیدهای غیرانگلیسیآمریکایی ممکن است ورودی نوشتار نادرستی دریافت کنند. پشتیبانی برای چیدمانهای دیگر صفحهکلید بهزودی ارائه میشود! برای کسب اطلاعات درباره حریم خصوصی، لطفاً از خطمشی رازداری Google (http://goo.gl/SyrVzj) و خطمشی رازداری Chrome (http://goo.gl/0uXE5d) بازدید کنید.</translation> <translation id="1324095856329524885">(این ویژگی هنوز برای رایانه شما موجود نیست)</translation> <translation id="1342297293546459414">رایانه اشتراکگذاری شده را مشاهده و کنترل کنید.</translation> -<translation id="1389790901665088353">بارگیری نصبکننده میزبان کنترل دسکتاپ از راه دور Chrome</translation> +<translation id="1389790901665088353">بارگیری نصبکننده میزبان کنترل رایانه ازراهدور Chrome</translation> <translation id="1450760146488584666">شئ درخواست شده وجود ندارد.</translation> <translation id="1480046233931937785">دستاندرکاران</translation> <translation id="1520828917794284345">تغییر اندازه دسکتاپ جهت تناسب</translation> @@ -29,8 +29,8 @@ <translation id="1643640058022401035">خروج از این صفحه، جلسه کار با Chrome را پایان میدهد.</translation> <translation id="1654128982815600832">در حال فعال کردن اتصالات راه دور برای این رایانه…</translation> <translation id="170207782578677537">این رایانه ثبت نشد.</translation> -<translation id="1727412735341161734">کنترل رایانه از راه دور Chrome</translation> -<translation id="174018511426417793">رایانه ثبتشدهای وجود ندارد. برای فعال کردن اتصالات راهدور به رایانه، کنترل دسکتاپ از راه دور Chrome را نصب کنید و روی «<ph name="BUTTON_NAME" />» کلیک کنید.</translation> +<translation id="1727412735341161734">کنترل رایانه ازراهدور Chrome</translation> +<translation id="174018511426417793">رایانه ثبتشدهای وجود ندارد. برای فعال کردن اتصال راهدور به رایانه، کنترل رایانه ازراهدور Chrome را نصب کنید و روی «<ph name="BUTTON_NAME" />» کلیک کنید.</translation> <translation id="1742469581923031760">در حال اتصال...</translation> <translation id="1770394049404108959">نمیتوانم برنامه را باز کنم.</translation> <translation id="177096447311351977">IP کانال برای کلاینت: <ph name="CLIENT_GAIA_IDENTIFIER" /> ip=«<ph name="CLIENT_IP_ADDRESS_AND_PORT" />» host_ip=«<ph name="HOST_IP_ADDRESS_AND_PORT" />» کانال=«<ph name="CHANNEL_TYPE" />» اتصال=«<ph name="CONNECTION_TYPE" />».</translation> @@ -40,21 +40,21 @@ <translation id="195619862187186579">چیدمانهای صفحهکلید</translation> <translation id="1996161829609978754">Chrome در حال بارگیری نصبکننده میزبان کار با Chrome است. بعد از اینکه بارگیری انجام شد٬ قبل از ادامه٬ نصبکننده را اجرا کنید.</translation> <translation id="2009755455353575666">اتصال ناموفق بود</translation> -<translation id="2013884659108657024">Chrome در حال بارگیری نصبکننده میزبان کنترل دسکتاپ از راه دور Chrome است. بعد از اینکه بارگیری انجام شد٬ قبل از ادامه٬ نصبکننده را اجرا کنید.</translation> +<translation id="2013884659108657024">Chrome درحال بارگیری نصبکننده میزبان کنترل رایانه ازراهدور Chrome است. بعد از اینکه بارگیری انجام شد، قبل از ادامه، نصبکننده را اجرا کنید.</translation> <translation id="2013996867038862849">همه کلاینتهای مرتبط حذف شدهاند.</translation> <translation id="2038229918502634450">میزبان در حال راهاندازی مجدد است تا یک تغییر در خطمشی را اعمال کند.</translation> <translation id="2046651113449445291">کلاینتهای زیر با این کامپیوتر مرتبط شدهاند و میتوانند بدون ارائه پین وصل شوند. شما میتوانید این اجازه را در هر زمان بهصورت جداگانه یا برای تمام کلاینتها باطل کنید.</translation> <translation id="2078880767960296260">فرآیند میزبان</translation> <translation id="20876857123010370">حالت پد مسیریابی</translation> <translation id="2089514346391228378">اتصالات راه دور برای این رایانه فعال شد.</translation> -<translation id="2118549242412205620">از دستگاه Android خودتان به صورت ایمن به رایانههایتان دسترسی داشته باشید. +<translation id="2118549242412205620">از دستگاه Android خودتان بهصورت ایمن به رایانههایتان دسترسی داشته باشید. -• در هر یک از رایانههایتان، دسترسی از راه دور را با استفاده از برنامه کنترل دسکتاپ از راه دور Chrome از فروشگاه وب Chrome راهاندازی کنید: https://chrome.google.com/remotedesktop -• در دستگاه Android خود، برنامه را باز کنید و روی هر کدام از رایانههایتان که آنلاین است ضربه بزنید تا متصل شود. +• در هر یک از رایانههایتان، دسترسی ازراهدور را با استفاده از برنامه کنترل رایانه ازراهدور Chrome از فروشگاه وب Chrome راهاندازی کنید: https://chrome.google.com/remotedesktop +• در دستگاه Android، برنامه را باز کنید و روی هرکدام از رایانههایتان که آنلاین است ضربه بزنید تا متصل شود. برای کسب اطلاعات درباره حریم خصوصی، لطفاً از خطمشی رازداری Google (http://goo.gl/SyrVzj) و خطمشی رازداری Chrome (http://goo.gl/0uXE5d) بازدید کنید.</translation> <translation id="2124408767156847088">از دستگاه Android خودتان به صورت ایمن به رایانههایتان دسترسی داشته باشید.</translation> -<translation id="2208514473086078157">تنظیمات خطمشی اجازه نمیدهد این رایانه به عنوان یک میزبان کنترل دسکتاپ از راه دور Chrome اشتراکگذاری شود. برای دریافت راهنمایی با سرپرست سیستم خود تماس بگیرید.</translation> +<translation id="2208514473086078157">تنظیمات خطمشی اجازه نمیدهد این رایانه بهعنوان میزبان کنترل رایانه ازراهدور Chrome همرسانی شود. برای دریافت راهنمایی با سرپرست سیستم خود تماس بگیرید.</translation> <translation id="2220529011494928058">گزارش یک مشکل</translation> <translation id="2221097377466213233">استفاده از کلید Ctrl راست برای کلید Win (⌘ در Mac)</translation> <translation id="2235518894410572517">این رایانه را جهت مشاهده و کنترل برای شخص دیگری به اشتراک بگذارید.</translation> @@ -63,23 +63,23 @@ <translation id="225614027745146050">خوش آمدید</translation> <translation id="228809120910082333">برای اجازه دسترسی به کار با Chrome، لطفاً حساب و پین خود را در زیر تأیید کنید.</translation> <translation id="2314101195544969792">جلسه <ph name="APPLICATION_NAME" /> شما برای مدتی بیکار بوده است و به زودی قطع میشود.</translation> -<translation id="2317666076142640974">پیشنمایشی از <ph name="LINK_BEGIN" />برنامه وب کنترل رایانه از راه دور Chrome<ph name="LINK_END" /> جدید دریافت کنید. دوست داریم بازخوردتان را بشنویم.</translation> +<translation id="2317666076142640974">پیشنمایشی از <ph name="LINK_BEGIN" />برنامه وب کنترل رایانه ازراهدور Chrome<ph name="LINK_END" /> جدید دریافت کنید. دوست داریم بازخوردتان را بشنویم.</translation> <translation id="2320166752086256636">پنهان کردن صفحهکلید</translation> <translation id="2353140552984634198">شما میتوانید با استفاده از کار با Chrome، در حالت ایمن به رایانه دسترسی داشته باشید.</translation> <translation id="2359808026110333948">ادامه</translation> <translation id="2366718077645204424">دسترسی به میزبان امکانپذیر نیست. این احتمالاً به دلیل پیکربندی شبکهای است که استفاده میکنید.</translation> <translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" /> آخرین حضور آنلاین <ph name="RELATIVE_TIMESTAMP" />.</translation> -<translation id="2405928220797050937">این برنامه دیگر پشتیبانی نمیشود. برای اطمینان از اینکه جدیدترین قابلیتها و بهروزرسانیهای امنیتی را دریافت میکنید، لطفاً از <ph name="LINK_BEGIN" />برنامه وب کنترل رایانه از راه دور Chrome<ph name="LINK_END" /> استفاده کنید.</translation> -<translation id="2499160551253595098">با اجازه به ما جهت جمعآوری آمار مربوط به استفاده و گزارشهای خرابی، کمک کنید تا کنترل دسک تاپ از راه دور Chrome را ارتقا دهیم.</translation> +<translation id="2405928220797050937">این برنامه دیگر پشتیبانی نمیشود. برای اطمینان از اینکه جدیدترین قابلیتها و بهروزرسانیهای امنیتی را دریافت میکنید، لطفاً از <ph name="LINK_BEGIN" />برنامه وب کنترل رایانه ازراهدور Chrome<ph name="LINK_END" /> استفاده کنید.</translation> +<translation id="2499160551253595098">با اجازه دادن به ما برای جمعآوری آمار مربوط به استفاده و گزارشهای خرابی کمک کنید تا کنترل رایانه ازراهدور Chrome را ارتقا دهیم.</translation> <translation id="2509394361235492552">متصل به <ph name="HOSTNAME" /></translation> -<translation id="2512228156274966424">توجه: برای اطمینان از اینکه همه میانبرهای صفحهکلید در دسترس هستند، میتوانید کنترل دسکتاپ از راه دور Chrome را روی «بازکردن به عنوان پنجره» پیکربندی کنید.</translation> +<translation id="2512228156274966424">توجه: برای اطمینان از اینکه همه میانبرهای صفحهکلید در دسترس است، میتوانید کنترل رایانه ازراهدور Chrome را روی «بازکردن بهعنوان پنجره» پیکربندی کنید.</translation> <translation id="2540992418118313681">میخواهید این رایانه را برای کاربر دیگر جهت مشاهده و کنترل به اشتراک بگذارید؟</translation> <translation id="2579271889603567289">میزبان خراب شد یا راهاندازی نشد.</translation> -<translation id="2599300881200251572">این سرویس اتصالات ورودی از کلاینتهای کنترل دسکتاپ از راه دور Chrome را فعال میکند.</translation> +<translation id="2599300881200251572">این سرویس اتصال ورودی از کلاینتهای کنترل رایانه ازراهدور Chrome را فعال میکند.</translation> <translation id="2647232381348739934">سرویس کار با Chrome</translation> <translation id="2676780859508944670">در حال انجام...</translation> <translation id="2699970397166997657">کار با Chrome</translation> -<translation id="2747641796667576127">معمولاً بهروزرسانی نرمافزار بهطور خودکار انجام میشود، اما در بعضی موارد نادر ممکن است این کار ناموفق باشد. بهروزرسانی نرمافزار نباید بیشتر از چند دقیقه زمان ببرد و انجام آن باید هنگام اتصال از راه دور به رایانه نیز ممکن باشد.</translation> +<translation id="2747641796667576127">معمولاً بهروزرسانی نرمافزار بهطور خودکار انجام میشود، اما در بعضی موارد نادر ممکن است این کار ناموفق باشد. بهروزرسانی نرمافزار نباید بیشتر از چند دقیقه زمان ببرد و انجام آن باید هنگام اتصال ازراهدور به رایانه نیز ممکن باشد.</translation> <translation id="2758123043070977469">مشکلی در احراز هویت وجود داشت، لطفاً دوباره به سیستم وارد شوید.</translation> <translation id="2803375539583399270">پین را وارد کنید</translation> <translation id="2841013758207633010">زمان</translation> @@ -87,8 +87,8 @@ <translation id="2888969873284818612">یک خطای شبکه روی داد. وقتی دستگاهتان دوباره آنلاین شد، برنامه را راهاندازی مجدد میکنیم.</translation> <translation id="289405675947420287">از دستگاه iOS خود بهطور ایمن به رایانهتان دسترسی پیدا کنید. روشی سریع، ساده و رایگان. -• در رایانهای که میخواهید از راه دور به آن دسترسی پیدا کنید، برنامه «کنترل رایانه از راهدور Chrome» را از نتبازار Chrome، بارگیری کنید. -• نرمافزار «کنترل رایانه از راه دور Chrome» را نصب کنید و دستورالعملها را برای تکمیل راهاندازی دنبال کنید. +• در رایانهای که میخواهید ازراهدور به آن دسترسی پیدا کنید، برنامه «کنترل رایانه از راهدور Chrome» را از نتبازار Chrome، بارگیری کنید. +• نرمافزار «کنترل رایانه ازراهدور Chrome» را نصب کنید و دستورالعملها را برای تکمیل راهاندازی دنبال کنید. • در دستگاه iOS، برنامه را باز کنید و روی هر کدام از رایانههایتان که آنلاین است ضربه بزنید تا وصل شود.</translation> <translation id="2894654864775534701">این رایانه در حال حاضر تحت یک حساب دیگر اشتراکگذاری شده است.</translation> <translation id="2919669478609886916">شما در حال اشتراکگذاری این سیستم با کاربر دیگری هستید. آیا میخواهید اشتراکگذاری ادامه یابد؟</translation> @@ -103,9 +103,9 @@ <translation id="310979712355504754">حذف همه</translation> <translation id="3150823315463303127">میزبان نتوانست خطمشی را بخواند.</translation> <translation id="3194245623920924351">رایانه راه دور Chrome</translation> -<translation id="3197730452537982411">دسکتاپ از راه دور</translation> +<translation id="3197730452537982411">رایانه ازراهدور</translation> <translation id="324272851072175193">ارسال این دستورالعمل با رایانامه</translation> -<translation id="3258789396564295715">میتوانید با استفاده از کنترل دسکتاپ از راه دور Chrome به این رایانه به صورت امن دسترسی پیدا کنید.</translation> +<translation id="3258789396564295715">میتوانید با استفاده از کنترل رایانه ازراهدور Chrome بهصورت امن به این رایانه دسترسی پیدا کنید.</translation> <translation id="3286521253923406898">کنترلکننده برنامه میزبان کار با Chrome</translation> <translation id="3305934114213025800"><ph name="PRODUCT_NAME" /> میخواهد تغییراتی ایجاد کند.</translation> <translation id="331779822864701136">• اضافه شدن پشتیبانی از Android نسخه ۸.۰ (Oreo).</translation> @@ -116,26 +116,26 @@ <translation id="337167041784729019">نمایش آمار</translation> <translation id="3385242214819933234">مالک میزبان نامعتبر است.</translation> <translation id="3403830762023901068">تنظیمات خطمشی اجازه نمیدهد این رایانه به عنوان یک میزبان کار با Chrome اشتراکگذاری شود. برای دریافت راهنمایی با سرپرست سیستم خود تماس بگیرید.</translation> -<translation id="3423542133075182604">فرایند برقراری ارتباط از راه دور کلید امنیتی</translation> +<translation id="3423542133075182604">فرایند برقراری ارتباط ازراهدور کلید امنیتی</translation> <translation id="3581045510967524389">اتصال به شبکه انجام نشد. لطفاً بررسی کنید که دستگاه شما به اینترنت وصل باشد.</translation> -<translation id="3596628256176442606">این سرویس اتصالات ورودی از کلاینتهای کنترل دسکتاپ از راه دور Chrome را فعال میکند.</translation> +<translation id="3596628256176442606">این سرویس اتصالات ورودی از کلاینتهای کنترل دسکتاپ ازراهدور Chrome را فعال میکند.</translation> <translation id="3606997049964069799">وارد سیستم Chromium نشدید. لطفاً وارد سیستم شوید و دوباره امتحان کنید.</translation> <translation id="3649256019230929621">بازکردن پنجره در حداقل اندازه</translation> <translation id="369442766917958684">آفلاین.</translation> <translation id="3695446226812920698">با نحوه انجام کار آشنا شوید</translation> -<translation id="3718805989288361841">خطایی در تنظیمات خطمشی «کنترل دسکتاپ از راه دور Chrome» وجود دارد. برای راهنمایی با سرپرست سیستم خود تماس بگیرید.</translation> +<translation id="3718805989288361841">خطایی در تنظیمات خطمشی «کنترل رایانه ازراهدور Chrome» وجود دارد. برای راهنمایی با سرپرست سیستم خود تماس بگیرید.</translation> <translation id="3759645055923345178">بعد از تکمیل راهاندازی، میتوانید با وارد کردن پین یا کد دسترسی، از این صفحه به رایانه دسترسی پیدا کنید</translation> -<translation id="3776024066357219166">جلسه "کنترل دسکتاپ از راه دور Chrome" تمام شد.</translation> +<translation id="3776024066357219166">جلسه "کنترل رایانه ازراهدور Chrome" تمام شد.</translation> <translation id="3870154837782082782">Google Inc.</translation> -<translation id="3884839335308961732">برای اجازه دسترسی توسط برنامه کنترل دسکتاپ از راه دور Chrome، لطفاً حساب و پین خود را در زیر تأیید کنید.</translation> +<translation id="3884839335308961732">برای اجازه دسترسی ازطریق برنامه کنترل رایانه ازراهدور Chrome، لطفاً حساب و پین خود را در زیر تأیید کنید.</translation> <translation id="3897092660631435901">منو</translation> <translation id="3905196214175737742">دامنه مالک میزبان نامعتبر است.</translation> <translation id="3908017899227008678">کاهش اندازه</translation> <translation id="3931191050278863510">میزبان متوقف شد.</translation> -<translation id="3933246213702324812">«Chrome از راه دور» در <ph name="HOSTNAME" /> به روز نیست و باید بهروزرسانی شود.</translation> +<translation id="3933246213702324812">«Chrome ازراهدور» در <ph name="HOSTNAME" /> به روز نیست و باید بهروزرسانی شود.</translation> <translation id="3950820424414687140">ورود به سیستم</translation> <translation id="3989511127559254552">برای ادامه باید مجوزهای دسترسی گسترش یافته به رایانهتان را بدهید. این کار فقط یک بار لازم است انجام شود.</translation> -<translation id="4006787130661126000">اگر میخواهید از کنترل دسکتاپ از راه دور Chrome برای دسترسی به این رایانه استفاده کنید٬ باید اتصالات راه دور را فعال کنید.</translation> +<translation id="4006787130661126000">اگر میخواهید از کنترل رایانه ازراهدور Chrome برای دسترسی به این رایانه استفاده کنید، باید اتصال راهدور را فعال کنید.</translation> <translation id="405887016757208221">رایانه راه دور نتوانست جلسه را مقداردهی اولیه کند. اگر مشکل ادامه داشت، لطفاً میزبان را دوباره پیکربندی کنید.</translation> <translation id="4068946408131579958">تمام اتصالات</translation> <translation id="409800995205263688">توجه: تنظیمات خط مشی فقط اجازه اتصال بین رایانههای داخل شبکه شما را میدهد.</translation> @@ -148,7 +148,7 @@ <translation id="4240294130679914010">حذف نصبکننده برنامه میزبان کار با Chrome</translation> <translation id="4277463233460010382">این رایانه پیکربندی شده است تا به یک یا چند کلاینت اجازه دهد بدون وارد کردن پین وصل شوند.</translation> <translation id="4277736576214464567">کد دسترسی نامعتبر است. لطفاً دوباره امتحان کنید.</translation> -<translation id="4361728918881830843">برای فعال کردن اتصالات راه دور به یک رایانه دیگر، کنترل دسکتاپ از راه دور Chrome را نصب کنید و سپس روی «<ph name="BUTTON_NAME" />» کلیک کنید.</translation> +<translation id="4361728918881830843">برای فعال کردن اتصال راهدور به یک رایانه دیگر، کنترل رایانه ازراهدور Chrome را نصب کنید و سپس روی «<ph name="BUTTON_NAME" />» کلیک کنید.</translation> <translation id="4394049700291259645">غیر فعال کردن</translation> <translation id="4405930547258349619">کتابخانه اصلی</translation> <translation id="4430435636878359009">غیرفعال کردن اتصالات راه دور به این رایانه</translation> @@ -161,12 +161,12 @@ <translation id="4572065712096155137">دسترسی</translation> <translation id="4592037108270173918">وقتی ازطریق شبکه تلفن همراه به دستگاهی متصل میشوید، ممکن است بابت داده مصرفی از شما هزینه دریافت شود. میخواهید ادامه دهید؟</translation> <translation id="4619978527973181021">پذیرفتن و نصب</translation> -<translation id="4635770493235256822">دستگاههای کنترل از راه دور</translation> +<translation id="4635770493235256822">دستگاههای کنترل ازراهدور</translation> <translation id="4660011489602794167">نمایش صفحهکلید</translation> <translation id="4703302905453407178">یکی از مؤلفههای ضروری دیگر کار نمیکند. لطفاً این مشکل را به برنامهنویسان گزارش دهید.</translation> <translation id="4703799847237267011">جلسه کار با Chrome پایان یافته است.</translation> <translation id="4706355010316049867">کنترل -رایانه از راه دور +رایانه ازراهدور Chrome دسترسی پشتیبانی @@ -187,21 +187,21 @@ <translation id="492843737083352574">با صفحهکلید یا موشوارهام مشکل دارم.</translation> <translation id="4973800994433240357">با بارگیری «نصبکننده میزبان Chromoting»، موافقتتان را با <ph name="LINK_BEGIN" />شرایط خدمات<ph name="LINK_END" /> Google اعلام میکنید.</translation> <translation id="4974476491460646149">اتصال به <ph name="HOSTNAME" /> بسته شد</translation> -<translation id="4985296110227979402">ابتدا باید رایانهتان را برای دسترسی از راه دور تنظیم کنید</translation> +<translation id="4985296110227979402">ابتدا باید رایانهتان را برای دسترسی ازراهدور تنظیم کنید</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (آفلاین)</translation> -<translation id="5070121137485264635">میزبان راه دور از شما میخواهد که در وب سایت شخص ثالثی تأیید هویت شوید. برای ادامه، باید با مجوزهای اضافی «کنترل کامپیوتر از راه دور Chrome» برای دستیابی به این آدرس موافقت کنید:</translation> +<translation id="5070121137485264635">میزبان راه دور از شما میخواهد که در وب سایت شخص ثالثی تأیید هویت شوید. برای ادامه، باید با مجوزهای اضافی «کنترل کامپیوتر ازراهدور Chrome» برای دستیابی به این آدرس موافقت کنید:</translation> <translation id="507204348399810022">مطمئنید میخواهید اتصالات راه دور به <ph name="HOSTNAME" /> را غیرفعال کنید؟</translation> <translation id="5156271271724754543">لطفاً یک پین یکسان را در هر دو کادر وارد کنید.</translation> <translation id="5170982930780719864">شناسه میزبان نامعتبر است.</translation> <translation id="518094545883702183">این اطلاعات فقط برای عیبیابی مشکل گزارش شده به کار میروند و فقط برای فردی که گزارش را بررسی میکند قابل دسترس هستند، و بیش از ۳۰ روز نگهداری نمیشوند.</translation> <translation id="5204575267916639804">سؤالات متداول</translation> <translation id="5222676887888702881">خروج از سیستم</translation> -<translation id="5254120496627797685">با خارج شدن از این صفحه، جلسه کنترل دسکتاپ از راه دور Chrome تمام میشود.</translation> +<translation id="5254120496627797685">با خارج شدن از این صفحه، جلسه کنترل رایانه ازراهدور Chrome تمام میشود.</translation> <translation id="5308380583665731573">اتصال</translation> <translation id="533625276787323658">چیزی برای اتصال وجود ندارد</translation> <translation id="5363265567587775042">از کاربری که میخواهید به رایانهاش دسترسی داشته باشید بخواهید روی «<ph name="SHARE" />» کلیک کند و کد دسترسی را به شما بدهد.</translation> -<translation id="5379087427956679853">کنترل دسکتاپ از راه دور Chrome به شما اجازه میدهد بهطور امن رایانه خود را در وب به اشتراک بگذارید. هر دو کاربر باید برنامه کنترل دسکتاپ از راه دور Chrome را اجرا کنند، این برنامه در <ph name="URL" /> یافت میشود.</translation> -<translation id="5397086374758643919">حذف نصبکننده میزبان کنترل دسکتاپ از راه دور Chrome</translation> +<translation id="5379087427956679853">کنترل رایانه ازراهدور Chrome به شما اجازه میدهد بهطور امن رایانه خود را در وب به اشتراک بگذارید. هر دو کاربر باید برنامه کنترل رایانه ازراهدور Chrome را اجرا کنند، این برنامه را در <ph name="URL" /> پیدا میکنید.</translation> +<translation id="5397086374758643919">حذف نصبکننده میزبان کنترل رایانه ازراهدور Chrome</translation> <translation id="5419185025274123272">برنامه بازنشانی نمیشود. همچنان میتوانید یک گزارش اشکال ارسال کنید.</translation> <translation id="5419418238395129586">آخرین حضور آنلاین: <ph name="DATE" /></translation> <translation id="544077782045763683">میزبان خاموش شد.</translation> @@ -225,11 +225,11 @@ <translation id="6040143037577758943">بستن</translation> <translation id="6062854958530969723">مقداردهی اولیه میزبان انجام نشد.</translation> <translation id="6091564239975589852">ارسال کلیدها</translation> -<translation id="6099500228377758828">سرویس کنترل دسکتاپ از راه دور Chrome</translation> +<translation id="6099500228377758828">سرویس کنترل رایانه ازراهدور Chrome</translation> <translation id="6122191549521593678">آنلاین</translation> <translation id="6167788864044230298">اجرای جریانی برنامه Chrome</translation> <translation id="6173536234069435147">نمیتوانم فایلهای Google Drive خودم را باز کنم.</translation> -<translation id="6178645564515549384">میزبان پیامرسانی بومی برای کمک از راه دور</translation> +<translation id="6178645564515549384">میزبان پیامرسانی بومی برای کمک ازراهدور</translation> <translation id="618120821413932081">بهروزرسانی وضوح از راه دور مطابق با پنجره</translation> <translation id="6193698048504518729">اتصال به <ph name="HOSTNAME" /></translation> <translation id="6198252989419008588">تغییر دادن پین</translation> @@ -261,26 +261,26 @@ <translation id="6930242544192836755">مدت زمان</translation> <translation id="6939719207673461467">نمایش/پنهان کردن صفحهکلید</translation> <translation id="6944854424004126054">بازگرداندن پنجره</translation> -<translation id="6948905685698011662">کنترل رایانه از راه دور Chrome اکنون در وب وجود دارد! <ph name="LINK_BEGIN" />برنامه وب رایگان<ph name="LINK_END" /> ما را امتحان کنید.</translation> +<translation id="6948905685698011662">کنترل رایانه ازراهدور Chrome اکنون در وب وجود دارد! <ph name="LINK_BEGIN" />برنامه وب رایگان<ph name="LINK_END" /> ما را امتحان کنید.</translation> <translation id="6963936880795878952">اتصالات به رایانه راه دور بهصورت موقت مسدود میشود، چون شخصی سعی داشت با پین نامعتبر به آن متصل شود. لطفاً بعداً دوباره امتحان کنید.</translation> <translation id="6965382102122355670">قبول</translation> <translation id="6985691951107243942">آیا مطمئنید که میخواهید اتصالات راه دور به <ph name="HOSTNAME" /> را غیرفعال کنید؟ اگر نظرتان عوض شود، باید از همان رایانه اتصالات را مجدداً فعال کنید.</translation> <translation id="6998989275928107238">به</translation> <translation id="7019153418965365059">خطای نامشخص میزبان: <ph name="HOST_OFFLINE_REASON" />.</translation> -<translation id="701976023053394610">راهنمایی از راه دور</translation> +<translation id="701976023053394610">راهنمایی ازراهدور</translation> <translation id="7038683108611689168">با در اختیار قرار دادن آمار استفاده و گزارشهای خرابی، به ما کمک کنید کار با Chrome را بهبود بخشیم.</translation> <translation id="7067321367069083429">صفحه نمایش مانند صفحه لمسی عمل میکند</translation> -<translation id="7116737094673640201">به «کنترل رایانه از راه دور Chrome» خوشآمدید</translation> +<translation id="7116737094673640201">به «کنترل رایانه ازراهدور Chrome» خوشآمدید</translation> <translation id="7144878232160441200">سعی مجدد</translation> -<translation id="7149517134817561223">برنامهای که دستورها را به میزبان کنترل دسک تاپ از راه دور Chrome ارسال میکند.</translation> +<translation id="7149517134817561223">برنامهای که دستورها را به میزبان کنترل رایانه ازراهدور Chrome ارسال میکند.</translation> <translation id="7215059001581613786">لطفاً پینی وارد کنید که دارای شش رقم یا بیشتر باشد.</translation> <translation id="7312846573060934304">میزبان آفلاین است.</translation> <translation id="7319983568955948908">توقف اشتراکگذاری</translation> -<translation id="7401733114166276557">کنترل دسکتاپ از راه دور Chrome</translation> +<translation id="7401733114166276557">کنترل رایانه ازراهدور Chrome</translation> <translation id="7434397035092923453">دسترسی برای کلاینت ممنوع شده است: <ph name="CLIENT_USERNAME" />.</translation> <translation id="7444276978508498879">کلاینت وصل شد: <ph name="CLIENT_USERNAME" />.</translation> <translation id="7526139040829362392">تغییر حساب</translation> -<translation id="7589941250119944644">کنترل رایانه از راه دور Chrome به خانه جدیدی در وب میرود. <ph name="LINK_BEGIN" />برنامه وب<ph name="LINK_END" /> ما را امتحان کنید، برنامهای سریع و رایگان، با همه قابلیتهای قبلی.</translation> +<translation id="7589941250119944644">کنترل رایانه ازراهدور Chrome به خانه جدیدی در وب میرود. <ph name="LINK_BEGIN" />برنامه وب<ph name="LINK_END" /> ما را امتحان کنید، برنامهای سریع و رایگان، با همه قابلیتهای قبلی.</translation> <translation id="7606912958770842224">فعال کردن اتصالات راه دور</translation> <translation id="7628469622942688817">پین من در این دستگاه به خاطر سپرده شود.</translation> <translation id="7649070708921625228">راهنما</translation> @@ -292,7 +292,7 @@ <translation id="7782471917492991422">لطفاً تنظیمات مدیریت نیروی رایانهٔ خود را بررسی کنید و مطمئن شوید که بر روی خواب در هنگام عدم استفاده پیکربندی نشده باشد.</translation> <translation id="7810127880729796595">نمایش آمار (ارتباط: <ph name="QUALITY" />)</translation> <translation id="7836926030608666805">برخی از بخشها از بین رفتهاند. لطفاً مطمئن شوید آخرین نسخه Chrome را دارید و دوباره امتحان کنید.</translation> -<translation id="7850909060902317210">نرمافزار «کنترل رایانه از راه دور Chrome» را نصب کنید و دستورالعملها را برای تکمیل راهاندازی دنبال کنید</translation> +<translation id="7850909060902317210">نرمافزار «کنترل رایانه ازراهدور Chrome» را نصب کنید و دستورالعملها را برای تکمیل راهاندازی دنبال کنید</translation> <translation id="7868137160098754906">لطفاً پین خودتان را برای رایانه راه دور وارد کنید.</translation> <translation id="7869445566579231750">مجوز اجرای این برنامه را ندارید.</translation> <translation id="7895403300744144251">خطمشیهای امنیتی در رایانه راه دور به اتصالات از حساب شما اجازه نمیدهد.</translation> @@ -301,10 +301,10 @@ <translation id="7970576581263377361">احراز هویت انجام نشد. لطفاً دوباره وارد سیستم Chromium شوید.</translation> <translation id="7981525049612125370">وقت جلسه راه دور تمام شد.</translation> <translation id="8041089156583427627">ارسال بازخورد</translation> -<translation id="8041721485428375115">با بارگیری «نصبکننده میزبان کنترل دسکتاپ از راه دور Chrome»، موافقتتان را با <ph name="LINK_BEGIN" />شرایط خدمات<ph name="LINK_END" /> Google اعلام میکنید.</translation> +<translation id="8041721485428375115">با بارگیری «نصبکننده میزبان کنترل رایانه ازراهدور Chrome»، موافقتتان را با <ph name="LINK_BEGIN" />شرایط خدمات<ph name="LINK_END" /> Google اعلام میکنید.</translation> <translation id="8060029310790625334">مرکز راهنمایی</translation> <translation id="806699900641041263">درحال اتصال به <ph name="HOSTNAME" /></translation> -<translation id="8073845705237259513">برای استفاده از کنترل دسکتاپ از راه دور Chrome، باید یک حساب Google به دستگاهتان اضافه کنید.</translation> +<translation id="8073845705237259513">برای استفاده از کنترل رایانه ازراهدور Chrome، باید حساب Google به دستگاهتان اضافه کنید.</translation> <translation id="80739703311984697">میزبان راه دور از شما میخواهد که در وب سایت شخص ثالثی تأیید هویت شوید. برای ادامه، باید با مجوزهای اضافی Chromoting برای دسترسی به این آدرس موافقت کنید:</translation> <translation id="809687642899217504">رایانههای من</translation> @@ -318,14 +318,14 @@ <translation id="8355326866731426344">این کد دسترسی در <ph name="TIMEOUT" /> منقضی میشود</translation> <translation id="8355485110405946777">قرار دادن گزارشهای برنامه برای کمک به رفع مشکلتان (گزارشها ممکن است شامل اطلاعات خصوصی باشند).</translation> <translation id="837021510621780684">از این رایانه</translation> -<translation id="8383794970363966105">برای استفاده از کار با Chrome از راه دور، باید یک حساب Google به دستگاهتان اضافه کنید.</translation> +<translation id="8383794970363966105">برای استفاده از کار با Chrome ازراهدور، باید یک حساب Google به دستگاهتان اضافه کنید.</translation> <translation id="8386846956409881180">میزبان با اعتبارنامه OAuth نامعتبری پیکربندی شده است.</translation> <translation id="8428213095426709021">تنظیمات</translation> <translation id="8445362773033888690">مشاهده در فروشگاه Google Play</translation> <translation id="8509907436388546015">فرآیند یکپارچگی با دسکتاپ</translation> -<translation id="8513093439376855948">میزبان پیامرسانی بومی برای کنترل از راه دور مدیریت میزبان</translation> +<translation id="8513093439376855948">میزبان پیامرسانی بومی برای کنترل ازراهدور مدیریت میزبان</translation> <translation id="8525306231823319788">تمام صفحه</translation> -<translation id="8548209692293300397">قبلاً با <ph name="USER_NAME" /> (<ph name="USER_EMAIL" />) وارد سیستم شده بودید. برای دسترسی به رایانههای آن حساب، با آن حساب <ph name="LINK_BEGIN" />وارد Google Chrome شوید<ph name="LINK_END" /> و کنترل دسک تاپ از راه دور Chrome را دوباره نصب کنید.</translation> +<translation id="8548209692293300397">قبلاً با <ph name="USER_NAME" /> (<ph name="USER_EMAIL" />) وارد سیستم شده بودید. برای دسترسی به رایانههای آن حساب، با آن حساب <ph name="LINK_BEGIN" />وارد Google Chrome شوید<ph name="LINK_END" /> و کنترل رایانه ازراهدور Chrome را دوباره نصب کنید.</translation> <translation id="8642984861538780905">متوسط</translation> <translation id="8712909229180978490">نمیتوانم فایلهای ذخیره شدهام را آنلاین در Google Drive ببینم.</translation> <translation id="8743328882720071828">میخواهید به <ph name="CLIENT_USERNAME" /> اجازه دهید که رایانهتان را ببیند و کنترل کند؟</translation> @@ -335,18 +335,18 @@ <translation id="894763922177556086">خوب</translation> <translation id="895780780740011433">برای Windows 7 و بالاتر</translation> <translation id="897805526397249209">برای فعال کردن اتصالات راه دور به رایانه دیگر، کار با Chrome را نصب کنید و روی «<ph name="BUTTON_NAME" />» کلیک کنید.</translation> -<translation id="8998327464021325874">کنترلکننده برنامه میزبان کنترل دسکتاپ از راه دور Chrome</translation> +<translation id="8998327464021325874">کنترلکننده برنامه میزبان کنترل رایانه ازراهدور Chrome</translation> <translation id="9016232822027372900">در هر حال متصل شود</translation> <translation id="906458777597946297">بازکردن پنجره در حداکثر اندازه</translation> <translation id="9111855907838866522">به دستگاه راه دورتان وصل شدهاید. برای باز کردن منو، لطفاً با چهار انگشت روی صفحه ضربه بزنید.</translation> <translation id="9126115402994542723">هنگام اتصال به میزبان از این دستگاه، پین دوباره درخواست نشود.</translation> -<translation id="9149580767411232853">قابلمشاهده نگهداشتن تمام دسکتاپ از راه دور</translation> +<translation id="9149580767411232853">مرئی نگهداشتن کل رایانه ازراهدور</translation> <translation id="9149992051684092333">برای شروع اشتراکگذاری دسکتاپ خود، کد دسترسی زیر را به شخصی بدهید که به شما کمک میکند.</translation> <translation id="9188433529406846933">ارائهٔ مجوز</translation> <translation id="9213184081240281106">پیکربندی میزبان نامعتبر است.</translation> <translation id="951991426597076286">رد کردن</translation> <translation id="962733587145768554">برای تکمیل این فرآیند لطفاً «<ph name="SHARE" />» را در کادر گفتگوی اتصال انتخاب کنید.</translation> -<translation id="979100198331752041">کنترل دسکتاپ از راه دور Chrome در <ph name="HOSTNAME" /> به روز نیست و باید بهروزرسانی شود.</translation> +<translation id="979100198331752041">کنترل رایانه ازراهدور Chrome در <ph name="HOSTNAME" /> بهروز نیست و باید بهروزرسانی شود.</translation> <translation id="981121421437150478">آفلاین</translation> <translation id="985602178874221306">Chromium Authors</translation> <translation id="992215271654996353"><ph name="HOSTNAME" /> (آخرین حضور آنلاین <ph name="DATE_OR_TIME" />)</translation>
diff --git a/services/metrics/public/cpp/ukm_source_id.cc b/services/metrics/public/cpp/ukm_source_id.cc index a2ffb19..2271cda 100644 --- a/services/metrics/public/cpp/ukm_source_id.cc +++ b/services/metrics/public/cpp/ukm_source_id.cc
@@ -41,4 +41,8 @@ return ((instance_id & kLowBitsMask) << 32) | (source_id & kLowBitsMask); } +SourceIdType GetSourceIdType(SourceId source_id) { + return static_cast<SourceIdType>(source_id & kTypeMask); +} + } // namespace ukm
diff --git a/services/metrics/public/cpp/ukm_source_id.h b/services/metrics/public/cpp/ukm_source_id.h index 662992f..447a2a4 100644 --- a/services/metrics/public/cpp/ukm_source_id.h +++ b/services/metrics/public/cpp/ukm_source_id.h
@@ -31,6 +31,9 @@ METRICS_EXPORT SourceId ConvertSourceIdFromInstance(int64_t instance_id, int64_t source_id); +// Get the SourceIdType of the SourceId. +METRICS_EXPORT SourceIdType GetSourceIdType(SourceId source_id); + } // namespace ukm #endif // SERVICES_METRICS_PUBLIC_CPP_UKM_SOURCE_ID_H_
diff --git a/services/viz/public/cpp/compositing/local_surface_id_struct_traits.h b/services/viz/public/cpp/compositing/local_surface_id_struct_traits.h index cc0c1478..cd3870fb 100644 --- a/services/viz/public/cpp/compositing/local_surface_id_struct_traits.h +++ b/services/viz/public/cpp/compositing/local_surface_id_struct_traits.h
@@ -13,8 +13,9 @@ template <> struct StructTraits<viz::mojom::LocalSurfaceIdDataView, viz::LocalSurfaceId> { - static uint32_t parent_id(const viz::LocalSurfaceId& local_surface_id) { - return local_surface_id.parent_id(); + static uint32_t parent_sequence_number( + const viz::LocalSurfaceId& local_surface_id) { + return local_surface_id.parent_sequence_number(); } static uint32_t child_sequence_number( @@ -29,7 +30,7 @@ static bool Read(viz::mojom::LocalSurfaceIdDataView data, viz::LocalSurfaceId* out) { - out->parent_id_ = data.parent_id(); + out->parent_sequence_number_ = data.parent_sequence_number(); out->child_sequence_number_ = data.child_sequence_number(); return data.ReadNonce(&out->nonce_); }
diff --git a/services/viz/public/interfaces/compositing/local_surface_id.mojom b/services/viz/public/interfaces/compositing/local_surface_id.mojom index 8a1b6dd..1b5ef00 100644 --- a/services/viz/public/interfaces/compositing/local_surface_id.mojom +++ b/services/viz/public/interfaces/compositing/local_surface_id.mojom
@@ -10,7 +10,7 @@ // An identifier to uniquely identify a surface. // Prior to surface synchronization, this is allocated by the child. // With surface synchronization enabled, this is allocated by the parent. - uint32 parent_id; + uint32 parent_sequence_number; // An identifier allocated by the client for when the client wants to allocate // its own surface.
diff --git a/storage/browser/blob/blob_reader.cc b/storage/browser/blob/blob_reader.cc index 9567bfa..aac8bb7 100644 --- a/storage/browser/blob/blob_reader.cc +++ b/storage/browser/blob/blob_reader.cc
@@ -57,6 +57,8 @@ return net::ERR_UNEXPECTED; case BlobStatus::ERR_REFERENCED_BLOB_BROKEN: return net::ERR_INVALID_HANDLE; + case BlobStatus::ERR_REFERENCED_FILE_UNAVAILABLE: + return net::ERR_INVALID_HANDLE; case BlobStatus::DONE: case BlobStatus::PENDING_QUOTA: case BlobStatus::PENDING_TRANSPORT:
diff --git a/storage/browser/blob/blob_registry_impl.cc b/storage/browser/blob/blob_registry_impl.cc index b681c11..07fdc49 100644 --- a/storage/browser/blob/blob_registry_impl.cc +++ b/storage/browser/blob/blob_registry_impl.cc
@@ -489,13 +489,9 @@ for (const auto& element : elements) { if (element->is_file()) { if (!delegate->CanReadFile(element->get_file()->path)) { - // TODO(mek) Using ERR_FILE_WRITE_FAILED matches the IPC based - // implementation, but this is really a very different error than what - // FILE_WRITE_FAILED is used for elsewhere, so this should probably be a - // dfferent error status. http://crbug.com/740730 - std::unique_ptr<BlobDataHandle> handle = - context_->AddBrokenBlob(uuid, content_type, content_disposition, - BlobStatus::ERR_FILE_WRITE_FAILED); + std::unique_ptr<BlobDataHandle> handle = context_->AddBrokenBlob( + uuid, content_type, content_disposition, + BlobStatus::ERR_REFERENCED_FILE_UNAVAILABLE); BlobImpl::Create(std::move(handle), std::move(blob)); std::move(callback).Run(); return; @@ -506,13 +502,9 @@ if (!filesystem_url.is_valid() || !file_system_context_->GetFileSystemBackend(filesystem_url.type()) || !delegate->CanReadFileSystemFile(filesystem_url)) { - // TODO(mek) Using ERR_FILE_WRITE_FAILED matches the IPC based - // implementation, but this is really a very different error than what - // FILE_WRITE_FAILED is used for elsewhere, so this should probably be a - // dfferent error status. http://crbug.com/740730 - std::unique_ptr<BlobDataHandle> handle = - context_->AddBrokenBlob(uuid, content_type, content_disposition, - BlobStatus::ERR_FILE_WRITE_FAILED); + std::unique_ptr<BlobDataHandle> handle = context_->AddBrokenBlob( + uuid, content_type, content_disposition, + BlobStatus::ERR_REFERENCED_FILE_UNAVAILABLE); BlobImpl::Create(std::move(handle), std::move(blob)); std::move(callback).Run(); return;
diff --git a/storage/browser/blob/blob_registry_impl_unittest.cc b/storage/browser/blob/blob_registry_impl_unittest.cc index cee4293..0a24b80 100644 --- a/storage/browser/blob/blob_registry_impl_unittest.cc +++ b/storage/browser/blob/blob_registry_impl_unittest.cc
@@ -507,7 +507,8 @@ WaitForBlobCompletion(handle.get()); EXPECT_TRUE(handle->IsBroken()); - EXPECT_EQ(BlobStatus::ERR_FILE_WRITE_FAILED, handle->GetBlobStatus()); + EXPECT_EQ(BlobStatus::ERR_REFERENCED_FILE_UNAVAILABLE, + handle->GetBlobStatus()); EXPECT_EQ(0u, BlobsUnderConstruction()); } @@ -556,7 +557,8 @@ WaitForBlobCompletion(handle.get()); EXPECT_TRUE(handle->IsBroken()); - EXPECT_EQ(BlobStatus::ERR_FILE_WRITE_FAILED, handle->GetBlobStatus()); + EXPECT_EQ(BlobStatus::ERR_REFERENCED_FILE_UNAVAILABLE, + handle->GetBlobStatus()); EXPECT_EQ(0u, BlobsUnderConstruction()); } @@ -579,7 +581,8 @@ WaitForBlobCompletion(handle.get()); EXPECT_TRUE(handle->IsBroken()); - EXPECT_EQ(BlobStatus::ERR_FILE_WRITE_FAILED, handle->GetBlobStatus()); + EXPECT_EQ(BlobStatus::ERR_REFERENCED_FILE_UNAVAILABLE, + handle->GetBlobStatus()); EXPECT_EQ(0u, BlobsUnderConstruction()); }
diff --git a/storage/browser/blob/view_blob_internals_job.cc b/storage/browser/blob/view_blob_internals_job.cc index 7ddda301..67df48a3f 100644 --- a/storage/browser/blob/view_blob_internals_job.cc +++ b/storage/browser/blob/view_blob_internals_job.cc
@@ -74,7 +74,7 @@ return "BlobStatus::ERR_OUT_OF_MEMORY: Not enough memory or disk space " "available for blob."; case BlobStatus::ERR_FILE_WRITE_FAILED: - return "BlobStatus::ERR_FILE_WRITE_FAILED: File operation filed"; + return "BlobStatus::ERR_FILE_WRITE_FAILED: File operation failed"; case BlobStatus::ERR_SOURCE_DIED_IN_TRANSIT: return "BlobStatus::ERR_SOURCE_DIED_IN_TRANSIT: Blob source died before " "transporting data to browser."; @@ -84,6 +84,9 @@ case BlobStatus::ERR_REFERENCED_BLOB_BROKEN: return "BlobStatus::ERR_REFERENCED_BLOB_BROKEN: Blob contains dependency " "blob that is broken."; + case BlobStatus::ERR_REFERENCED_FILE_UNAVAILABLE: + return "BlobStatus::ERR_REFERENCED_FILE_UNAVAILABLE: Blob contains " + "dependency on file that is unavailable."; case BlobStatus::DONE: return "BlobStatus::DONE: Blob built with no errors."; case BlobStatus::PENDING_QUOTA:
diff --git a/storage/common/blob_storage/blob_storage_constants.h b/storage/common/blob_storage/blob_storage_constants.h index 7450943..f83ea53d 100644 --- a/storage/common/blob_storage/blob_storage_constants.h +++ b/storage/common/blob_storage/blob_storage_constants.h
@@ -109,7 +109,10 @@ // builder tries to build a blob with a blob reference that isn't finished // constructing. ERR_REFERENCED_BLOB_BROKEN = 5, - LAST_ERROR = ERR_REFERENCED_BLOB_BROKEN, + // A file that we referenced during construction is not accessible to the + // renderer trying to create the blob. + ERR_REFERENCED_FILE_UNAVAILABLE = 6, + LAST_ERROR = ERR_REFERENCED_FILE_UNAVAILABLE, // Blob state section: // The blob has finished.
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json index 44ec412..120565f 100644 --- a/testing/buildbot/chromium.chromiumos.json +++ b/testing/buildbot/chromium.chromiumos.json
@@ -1246,6 +1246,12 @@ "swarming": { "can_use_on_swarming_builders": true }, + "test": "select_to_speak_extension_tests" + }, + { + "swarming": { + "can_use_on_swarming_builders": true + }, "test": "services_unittests" }, {
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index 6c846b6..2c98921 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -7338,7 +7338,7 @@ "isolated_scripts": [ { "args": [ - "--additional-driver-flag=--enable-slimming-paint-v2" + "--additional-driver-flag=--enable-slimming-paint-v175" ], "isolate_name": "webkit_layout_tests_exparchive", "merge": {
diff --git a/testing/buildbot/filters/fuchsia.content_unittests.filter b/testing/buildbot/filters/fuchsia.content_unittests.filter index aa824ed..96254ca 100644 --- a/testing/buildbot/filters/fuchsia.content_unittests.filter +++ b/testing/buildbot/filters/fuchsia.content_unittests.filter
@@ -45,6 +45,9 @@ -RenderWidgetHostViewAuraAsyncWheelEventsEnabledTest.* -RenderWidgetHostViewGuestSurfaceTest.TestGuestSurface +# Flaky: https://crbug.com/800877. +-RenderWidgetHostViewAuraTest.SetCanScrollForWebMouseWheelEvent + # Flaky: https://crbug.com/800415. -RenderWidgetHostViewAuraTest.CursorVisibilityChange
diff --git a/testing/buildbot/filters/mojo.fyi.network_browser_tests.filter b/testing/buildbot/filters/mojo.fyi.network_browser_tests.filter index 262e050..6e0cf20 100644 --- a/testing/buildbot/filters/mojo.fyi.network_browser_tests.filter +++ b/testing/buildbot/filters/mojo.fyi.network_browser_tests.filter
@@ -248,6 +248,7 @@ -PreviewsNoScriptBrowserTest.NoScriptPreviewsEnabled # Added in r519342. -PreviewsNoScriptBrowserTest.NoScriptPreviewsEnabledHttpRedirectToHttps +-PreviewsNoScriptBrowserTest.NoScriptPreviewsEnabledButNoTransformDirective # crbug.com/778814 Null NavigationData is given to NavigationURLLoaderDelegate::OnResponseStarted() as parameter. -ChromeResourceDispatcherHostDelegateBrowserTest.NavigationDataProcessed
diff --git a/testing/buildbot/gn_isolate_map.pyl b/testing/buildbot/gn_isolate_map.pyl index fed3cae..d5fc712 100644 --- a/testing/buildbot/gn_isolate_map.pyl +++ b/testing/buildbot/gn_isolate_map.pyl
@@ -886,6 +886,10 @@ "label": "//sandbox/win:sbox_validation_tests", "type": "console_test_launcher", }, + "select_to_speak_extension_tests": { + "label": "//chrome/browser/resources/chromeos/select_to_speak:select_to_speak_extension_tests", + "type": "windowed_test_launcher", + }, "service_manager_unittests": { "label": "//services/service_manager/tests:service_manager_unittests", "type": "console_test_launcher",
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl index d931a078..a54163d 100644 --- a/testing/buildbot/test_suite_exceptions.pyl +++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -3857,7 +3857,7 @@ }, 'WebKit Linux slimming_paint_v2 Dummy Builder': { 'args': [ - '--additional-driver-flag=--enable-slimming-paint-v2', + '--additional-driver-flag=--enable-slimming-paint-v175', ], 'swarming': { 'shards': 15,
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl index 4cde076..43e24289 100644 --- a/testing/buildbot/test_suites.pyl +++ b/testing/buildbot/test_suites.pyl
@@ -1186,6 +1186,7 @@ }, 'ozone_unittests': {}, 'ozone_x11_unittests': {}, + 'select_to_speak_extension_tests': {}, 'views_mus_unittests': {}, 'views_mus_interactive_ui_tests': {}, 'wayland_client_perftests': {},
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index beaecde..d7668b0 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -743,34 +743,6 @@ ] } ], - "ChromeHome": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Default" - }, - { - "name": "Enabled", - "enable_features": [ - "ChromeHome" - ], - "disable_features": [ - "ChromeHomeExpandButton" - ] - }, - { - "name": "Enabled_Button", - "enable_features": [ - "ChromeHome", - "ChromeHomeExpandButton" - ] - } - ] - } - ], "ChromeHomeBottomNavLabels": [ { "platforms": [ @@ -782,9 +754,6 @@ "enable_features": [ "ChromeHomeBottomNavLabels" ] - }, - { - "name": "Default" } ] } @@ -796,13 +765,7 @@ ], "experiments": [ { - "name": "Enabled", - "enable_features": [ - "ChromeHomeInactivitySheetExpansion" - ] - }, - { - "name": "3Hours", + "name": "Enabled_3_Hours", "params": { "time_since_backgrounded_in_mins": "180" }, @@ -813,25 +776,6 @@ ] } ], - "ChromeHomePromo": [ - { - "platforms": [ - "android" - ], - "experiments": [ - { - "name": "Default" - }, - { - "name": "Enabled", - "enable_features": [ - "ChromeHomeOptOutSnackbar", - "ChromeHomePromo" - ] - } - ] - } - ], "ChromeSmartSelection": [ { "platforms": [ @@ -859,13 +803,7 @@ ], "experiments": [ { - "name": "Default" - }, - { - "name": "ForceTopSites", - "disable_features": [ - "DisplaySuggestionsServiceTiles" - ] + "name": "Disabled" } ] } @@ -1289,6 +1227,24 @@ ] } ], + "EnableCastDiscovery": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "win" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "EnableCastDiscovery" + ] + } + ] + } + ], "EnableCsrssLockdown": [ { "platforms": [ @@ -3535,13 +3491,19 @@ ], "experiments": [ { - "name": "Experiment2V3", + "name": "Draft23V4", + "params": { + "variant": "draft23" + } + }, + { + "name": "Experiment2V4", "params": { "variant": "experiment2" } }, { - "name": "Draft22V3", + "name": "Draft22V4", "params": { "variant": "draft22" }
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG index 4e48e2d..63e63b6 100644 --- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG +++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
@@ -261,6 +261,7 @@ crbug.com/591099 compositing/masks/masked-ancestor.html [ Failure ] crbug.com/591099 compositing/masks/multiple-masks.html [ Failure ] crbug.com/591099 compositing/masks/simple-composited-mask.html [ Failure ] +crbug.com/591099 compositing/massive-scale-interest-rect.html [ Failure ] crbug.com/591099 compositing/overflow/accelerated-scrolling-with-clip-path-text.html [ Failure ] crbug.com/591099 compositing/overflow/accelerated-scrolling-with-clip-path.html [ Failure ] crbug.com/591099 compositing/overflow/ancestor-overflow.html [ Failure ] @@ -987,7 +988,6 @@ crbug.com/591099 css3/filters/simple-filter-rendering.html [ Failure ] crbug.com/591099 css3/flexbox/button.html [ Failure ] crbug.com/591099 css3/flexbox/child-overflow.html [ Failure ] -crbug.com/714962 css3/flexbox/content-height-with-scrollbars.html [ Failure ] crbug.com/591099 css3/flexbox/flex-flow-border.html [ Failure ] crbug.com/591099 css3/flexbox/flex-flow-margins-auto-size.html [ Failure ] crbug.com/591099 css3/flexbox/flex-flow-padding.html [ Failure ] @@ -1001,7 +1001,6 @@ crbug.com/591099 css3/flexbox/mozilla/flexbox-inlinecontent-horiz-5.xhtml [ Failure Pass ] crbug.com/714962 css3/flexbox/mozilla/flexbox-items-as-stacking-contexts-2.html [ Failure ] crbug.com/591099 css3/flexbox/nested-orthogonal-flexbox-relayout.html [ Failure ] -crbug.com/714962 css3/flexbox/overflow-auto-dynamic-changes.html [ Failure ] crbug.com/591099 css3/flexbox/position-absolute-child-with-contenteditable.html [ Failure ] crbug.com/591099 css3/flexbox/scrollbars-auto.html [ Failure ] crbug.com/591099 css3/flexbox/scrollbars.html [ Failure ] @@ -1029,6 +1028,13 @@ crbug.com/714962 css3/masking/clip-path-reference.html [ Failure ] crbug.com/591099 css3/masking/clip-path-restore.html [ Failure ] crbug.com/714962 css3/masking/mask-composite-missing-image.html [ Failure ] +crbug.com/591099 css3/masking/mask-luminance-gradient.html [ Failure ] +crbug.com/591099 css3/masking/mask-luminance-png.html [ Failure ] +crbug.com/591099 css3/masking/mask-luminance-svg.html [ Failure ] +crbug.com/591099 css3/masking/mask-repeat-round-content.html [ Failure ] +crbug.com/591099 css3/masking/mask-repeat-space-border.html [ Failure ] +crbug.com/591099 css3/masking/mask-repeat-space-content.html [ Failure ] +crbug.com/591099 css3/masking/mask-repeat-space-padding.html [ Failure ] crbug.com/591099 css3/selectors3/html/css3-modsel-1.html [ Failure ] crbug.com/591099 css3/selectors3/html/css3-modsel-10.html [ Failure ] crbug.com/591099 css3/selectors3/html/css3-modsel-11.html [ Failure ] @@ -2121,6 +2127,7 @@ crbug.com/591099 editing/style/table-selection.html [ Failure ] crbug.com/591099 editing/text-iterator/findString-start-search-after-selection.html [ Failure ] crbug.com/591099 editing/text-iterator/findString.html [ Timeout ] +crbug.com/591099 editing/text-iterator/first_letter_find_string_crash.html [ Crash ] crbug.com/591099 editing/undo/crash-redo-with-iframes.html [ Failure ] crbug.com/591099 editing/undo/undo-deleteWord.html [ Failure ] crbug.com/591099 editing/undo/undo-smart-delete-reversed-selection.html [ Failure ] @@ -2203,7 +2210,6 @@ crbug.com/591099 external/wpt/css/css-display/display-flow-root-001.html [ Failure Pass ] crbug.com/591099 external/wpt/css/css-flexbox/percentage-heights-001.html [ Failure ] crbug.com/591099 external/wpt/css/css-flexbox/percentage-heights-003.html [ Pass ] -crbug.com/714962 external/wpt/css/css-flexbox/position-absolute-005.html [ Failure ] crbug.com/714962 external/wpt/css/css-fonts/font-display/font-display.html [ Failure ] crbug.com/714962 external/wpt/css/css-fonts/font-features-across-space-1.html [ Pass ] crbug.com/714962 external/wpt/css/css-fonts/font-features-across-space-3.html [ Pass ] @@ -2477,7 +2483,7 @@ crbug.com/591099 external/wpt/css/css-shapes/spec-examples/shape-outside-015.html [ Failure ] crbug.com/591099 external/wpt/css/css-shapes/spec-examples/shape-outside-016.html [ Failure ] crbug.com/591099 external/wpt/css/css-shapes/spec-examples/shape-outside-017.html [ Failure ] -crbug.com/591099 external/wpt/css/css-shapes/spec-examples/shape-outside-018.html [ Crash ] +crbug.com/591099 external/wpt/css/css-shapes/spec-examples/shape-outside-018.html [ Crash Failure ] crbug.com/591099 external/wpt/css/css-shapes/spec-examples/shape-outside-019.html [ Failure ] crbug.com/591099 external/wpt/css/css-style-attr/style-attr-urls-001.xht [ Failure ] crbug.com/591099 external/wpt/css/css-style-attr/style-attr-urls-002.xht [ Failure Pass ] @@ -2556,14 +2562,14 @@ crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-icb-vrl-020.xht [ Pass ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-icb-vrl-030.xht [ Pass ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-003.xht [ Failure ] -crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-005.xht [ Failure Pass ] +crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-005.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-007.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-009.xht [ Failure Pass ] -crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-011.xht [ Failure ] +crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-011.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-013.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-015.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-017.xht [ Failure ] -crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-019.xht [ Failure Pass ] +crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-019.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-021.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-023.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-025.xht [ Failure Pass ] @@ -2596,33 +2602,33 @@ crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-079.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-081.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-083.xht [ Failure ] -crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-085.xht [ Failure Pass ] -crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-087.xht [ Failure ] +crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-085.xht [ Failure ] +crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-087.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-089.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-091.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-093.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-095.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-097.xht [ Failure ] -crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-103.xht [ Failure Pass ] +crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-103.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-105.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-107.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-109.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-111.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-113.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-115.xht [ Failure ] -crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-117.xht [ Failure Pass ] +crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-117.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-119.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-121.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-123.xht [ Failure Pass ] -crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-125.xht [ Failure ] +crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-125.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-127.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-129.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-131.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-133.xht [ Failure ] -crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-135.xht [ Failure Pass ] +crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-135.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-137.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-139.xht [ Failure ] -crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-141.xht [ Failure Pass ] +crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-141.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-143.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-145.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-147.xht [ Failure Pass ] @@ -2630,9 +2636,9 @@ crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-151.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-153.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-155.xht [ Failure ] -crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-157.xht [ Failure Pass ] +crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-157.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-159.xht [ Failure ] -crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-161.xht [ Failure Pass ] +crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-161.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-163.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-165.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-167.xht [ Failure ] @@ -2640,15 +2646,15 @@ crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-171.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-173.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-175.xht [ Failure ] -crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-177.xht [ Failure Pass ] -crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-179.xht [ Failure ] +crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-177.xht [ Failure ] +crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-179.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-181.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-183.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-185.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-187.xht [ Failure Pass ] -crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-189.xht [ Failure Pass ] +crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-189.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-191.xht [ Failure ] -crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-193.xht [ Failure Pass ] +crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-193.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-195.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-197.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-199.xht [ Failure Pass ] @@ -2656,16 +2662,16 @@ crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-203.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-205.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-207.xht [ Failure ] -crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-209.xht [ Failure Pass ] +crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-209.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-211.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-213.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-215.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-217.xht [ Failure Pass ] -crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-219.xht [ Failure ] +crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-219.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-221.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-223.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-225.xht [ Failure ] -crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-227.xht [ Failure ] +crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-227.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vlr-229.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-002.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-004.xht [ Failure ] @@ -2680,7 +2686,7 @@ crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-022.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-024.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-026.xht [ Failure ] -crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-028.xht [ Failure ] +crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-028.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-030.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-032.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-034.xht [ Failure Pass ] @@ -2695,7 +2701,7 @@ crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-052.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-054.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-056.xht [ Failure ] -crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-058.xht [ Failure Pass ] +crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-058.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-060.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-062.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-064.xht [ Failure Pass ] @@ -2710,13 +2716,13 @@ crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-082.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-084.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-086.xht [ Failure ] -crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-088.xht [ Failure Pass ] +crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-088.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-090.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-092.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-094.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-096.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-102.xht [ Failure ] -crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-104.xht [ Failure Pass ] +crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-104.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-106.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-108.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-110.xht [ Failure ] @@ -2736,9 +2742,9 @@ crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-138.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-140.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-142.xht [ Failure ] -crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-144.xht [ Failure ] +crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-144.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-146.xht [ Failure ] -crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-148.xht [ Failure Pass ] +crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-148.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-150.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-152.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-154.xht [ Failure ] @@ -2750,7 +2756,7 @@ crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-166.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-168.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-170.xht [ Failure ] -crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-172.xht [ Failure ] +crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-172.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-174.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-176.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-178.xht [ Failure ] @@ -2759,10 +2765,10 @@ crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-184.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-186.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-188.xht [ Failure ] -crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-190.xht [ Failure Pass ] +crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-190.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-192.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-194.xht [ Failure ] -crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-196.xht [ Failure Pass ] +crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-196.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-198.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-200.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/abs-pos-non-replaced-vrl-202.xht [ Failure ] @@ -2796,7 +2802,7 @@ crbug.com/591099 external/wpt/css/css-writing-modes/different-block-flow-dir-002.xht [ Crash ] crbug.com/714962 external/wpt/css/css-writing-modes/direction-vlr-003.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/direction-vlr-005.xht [ Failure ] -crbug.com/714962 external/wpt/css/css-writing-modes/direction-vrl-002.xht [ Failure ] +crbug.com/714962 external/wpt/css/css-writing-modes/direction-vrl-002.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/direction-vrl-004.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/float-contiguous-vrl-002.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/float-contiguous-vrl-004.xht [ Failure ] @@ -2804,10 +2810,10 @@ crbug.com/591099 external/wpt/css/css-writing-modes/float-contiguous-vrl-008.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/float-shrink-to-fit-vrl-008.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/float-vlr-005.xht [ Failure ] -crbug.com/714962 external/wpt/css/css-writing-modes/float-vlr-007.xht [ Failure Pass ] +crbug.com/714962 external/wpt/css/css-writing-modes/float-vlr-007.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/float-vlr-013.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/float-vrl-004.xht [ Failure Pass ] -crbug.com/591099 external/wpt/css/css-writing-modes/float-vrl-006.xht [ Failure ] +crbug.com/591099 external/wpt/css/css-writing-modes/float-vrl-006.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/float-vrl-008.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/float-vrl-012.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/horizontal-rule-vrl-002.xht [ Failure ] @@ -2882,10 +2888,10 @@ crbug.com/714962 external/wpt/css/css-writing-modes/text-align-vlr-007.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/text-align-vlr-009.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/css-writing-modes/text-align-vlr-011.xht [ Failure ] -crbug.com/714962 external/wpt/css/css-writing-modes/text-align-vlr-013.xht [ Failure ] +crbug.com/714962 external/wpt/css/css-writing-modes/text-align-vlr-013.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/text-align-vlr-015.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/text-align-vlr-017.xht [ Failure ] -crbug.com/714962 external/wpt/css/css-writing-modes/text-align-vlr-019.xht [ Failure ] +crbug.com/714962 external/wpt/css/css-writing-modes/text-align-vlr-019.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/text-align-vrl-002.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/text-align-vrl-004.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/text-align-vrl-006.xht [ Failure Pass ] @@ -2894,14 +2900,14 @@ crbug.com/714962 external/wpt/css/css-writing-modes/text-align-vrl-012.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/text-align-vrl-014.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/text-align-vrl-016.xht [ Failure Pass ] -crbug.com/714962 external/wpt/css/css-writing-modes/text-align-vrl-018.xht [ Failure ] +crbug.com/714962 external/wpt/css/css-writing-modes/text-align-vrl-018.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/css-writing-modes/text-baseline-vlr-007.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/text-baseline-vrl-006.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/text-combine-upright-decorations-001.html [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/text-combine-upright-layout-rules-001.html [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/text-indent-vlr-003.xht [ Failure ] crbug.com/714962 external/wpt/css/css-writing-modes/text-indent-vlr-005.xht [ Failure Pass ] -crbug.com/714962 external/wpt/css/css-writing-modes/text-indent-vlr-011.xht [ Failure ] +crbug.com/714962 external/wpt/css/css-writing-modes/text-indent-vlr-011.xht [ Failure Pass ] crbug.com/714962 external/wpt/css/css-writing-modes/text-indent-vlr-013.xht [ Failure Pass ] crbug.com/591099 external/wpt/css/css-writing-modes/text-indent-vrl-002.xht [ Failure ] crbug.com/591099 external/wpt/css/css-writing-modes/text-indent-vrl-004.xht [ Failure Pass ] @@ -3119,7 +3125,7 @@ crbug.com/591099 external/wpt/feature-policy/autoplay-allowed-by-feature-policy.https.sub.html [ Failure ] crbug.com/591099 external/wpt/feature-policy/payment-allowed-by-feature-policy.https.sub.html [ Pass ] crbug.com/591099 external/wpt/feature-policy/payment-disabled-by-feature-policy.https.sub.html [ Pass ] -crbug.com/591099 external/wpt/geolocation-API/PositionOptions.https.html [ Failure Pass ] +crbug.com/591099 external/wpt/geolocation-API/PositionOptions.https.html [ Failure ] crbug.com/591099 external/wpt/html-media-capture/capture_audio_cancel-manual.html [ Failure ] crbug.com/591099 external/wpt/html-media-capture/capture_image_cancel-manual.html [ Failure ] crbug.com/591099 external/wpt/html-media-capture/capture_video_cancel-manual.html [ Failure ] @@ -3131,7 +3137,6 @@ crbug.com/591099 external/wpt/html/dom/interfaces.html [ Timeout ] crbug.com/591099 external/wpt/html/editing/focus/tabindex-focus-flag.html [ Crash ] crbug.com/626703 external/wpt/html/form-elements/the-textarea-element/multiline-placeholder-crlf.html [ Failure Pass ] -crbug.com/591099 external/wpt/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-messagechannel-success.html [ Pass ] crbug.com/591099 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-16be.html [ Timeout ] crbug.com/591099 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-16le.html [ Timeout ] crbug.com/591099 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/utf-8.html [ Timeout ] @@ -3143,7 +3148,7 @@ crbug.com/714962 external/wpt/html/rendering/non-replaced-elements/the-fieldset-element-0/min-width-not-important.html [ Failure ] crbug.com/591099 external/wpt/html/rendering/replaced-elements/svg-embedded-sizing/svg-in-img-auto.html [ Failure ] crbug.com/591099 external/wpt/html/rendering/replaced-elements/svg-embedded-sizing/svg-in-img-percentage.html [ Failure ] -crbug.com/591099 external/wpt/html/rendering/replaced-elements/svg-inline-sizing/svg-inline.html [ Timeout ] +crbug.com/591099 external/wpt/html/rendering/replaced-elements/svg-inline-sizing/svg-inline.html [ Failure Timeout ] crbug.com/714962 external/wpt/html/rendering/the-css-user-agent-style-sheet-and-presentational-hints/body-bgcolor-attribute-change.html [ Failure ] crbug.com/591099 external/wpt/html/semantics/document-metadata/the-link-element/stylesheet-change-href.html [ Failure ] crbug.com/591099 external/wpt/html/semantics/forms/the-form-element/form-elements-filter.html [ Crash ] @@ -3176,6 +3181,7 @@ crbug.com/591099 external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/propagate-nonce-inline-classic.html [ Pass ] crbug.com/591099 external/wpt/html/semantics/scripting-1/the-script-element/module/dynamic-import/propagate-nonce-inline-module.html [ Pass ] crbug.com/591099 external/wpt/html/semantics/scripting-1/the-script-element/module/error-type-3.html [ Pass ] +crbug.com/591099 external/wpt/html/semantics/selectors/pseudo-classes/dir01.html [ Failure ] crbug.com/591099 external/wpt/html/semantics/selectors/pseudo-classes/inrange-outofrange.html [ Crash ] crbug.com/591099 external/wpt/html/semantics/selectors/pseudo-classes/readwrite-readonly.html [ Crash ] crbug.com/591099 external/wpt/html/semantics/text-level-semantics/the-br-element/br-bidi-in-inline-ancestors.html [ Failure ] @@ -3419,10 +3425,6 @@ crbug.com/591099 fast/block/float/018.html [ Failure Pass ] crbug.com/714962 fast/block/float/021.html [ Failure ] crbug.com/591099 fast/block/float/022.html [ Failure ] -crbug.com/714962 fast/block/float/025.html [ Failure ] -crbug.com/714962 fast/block/float/026.html [ Failure ] -crbug.com/714962 fast/block/float/027.html [ Failure ] -crbug.com/714962 fast/block/float/028.html [ Failure ] crbug.com/591099 fast/block/float/br-with-clear-2.html [ Failure ] crbug.com/591099 fast/block/float/element-clears-float-without-clearance.html [ Failure ] crbug.com/591099 fast/block/float/float-avoidance.html [ Failure ] @@ -3737,7 +3739,7 @@ crbug.com/591099 fast/css-grid-layout/grid-item-bad-resolution-double-span.html [ Failure ] crbug.com/591099 fast/css-grid-layout/grid-item-border-overflow-paint.html [ Failure ] crbug.com/591099 fast/css-grid-layout/grid-item-change-order-auto-flow.html [ Failure ] -crbug.com/591099 fast/css-grid-layout/grid-item-column-row-get-set.html [ Timeout ] +crbug.com/591099 fast/css-grid-layout/grid-item-column-row-get-set.html [ Pass Timeout ] crbug.com/714962 fast/css-grid-layout/grid-item-margins-and-writing-modes.html [ Failure ] crbug.com/591099 fast/css-grid-layout/grid-item-multiple-minmax-content-resolution.html [ Failure ] crbug.com/591099 fast/css-grid-layout/grid-item-named-grid-area-resolution.html [ Failure ] @@ -4043,7 +4045,7 @@ crbug.com/591099 fast/css/number-parsing-crash.html [ Failure ] crbug.com/591099 fast/css/object-fit-grow-landscape.html [ Failure ] crbug.com/591099 fast/css/object-fit-grow-portrait.html [ Failure ] -crbug.com/591099 fast/css/object-position-svg.html [ Crash ] +crbug.com/591099 fast/css/object-position-svg.html [ Crash Pass ] crbug.com/591099 fast/css/only-child-pseudo-class.html [ Failure ] crbug.com/591099 fast/css/only-of-type-pseudo-class.html [ Failure ] crbug.com/591099 fast/css/outline-auto-empty-rects.html [ Failure ] @@ -4433,7 +4435,7 @@ crbug.com/591099 fast/events/media-element-focus-tab.html [ Failure ] crbug.com/714962 fast/events/middleClickAutoscroll-click-hyperlink.html [ Timeout ] crbug.com/714962 fast/events/middleClickAutoscroll-latching.html [ Timeout ] -crbug.com/714962 fast/events/mouse-down-on-pseudo-element-remove-crash.html [ Failure ] +crbug.com/714962 fast/events/mouse-down-on-pseudo-element-remove-crash.html [ Failure Pass ] crbug.com/591099 fast/events/mouse-drag-from-frame-to-other-frame.html [ Failure ] crbug.com/591099 fast/events/mouse-event-buttons-attribute.html [ Timeout ] crbug.com/714962 fast/events/mouse-events-on-textarea-resize.html [ Failure ] @@ -5235,7 +5237,6 @@ crbug.com/591099 fast/multicol/abspos-after-break-after.html [ Failure ] crbug.com/591099 fast/multicol/abspos-new-width-rebalance.html [ Failure ] crbug.com/591099 fast/multicol/anonymous-block-split-crash.html [ Crash ] -crbug.com/798844 fast/multicol/auto-height-forced-break-complex-margin-collapsing.html [ Failure ] crbug.com/591099 fast/multicol/balance-float-after-forced-break.html [ Failure ] crbug.com/591099 fast/multicol/balance-float-in-inline.html [ Failure ] crbug.com/591099 fast/multicol/balance-float-with-margin-top-and-line-after-break-2.html [ Failure ] @@ -5251,7 +5252,6 @@ crbug.com/591099 fast/multicol/basic-rtl.html [ Failure ] crbug.com/591099 fast/multicol/border-radius-clipped-layer-second-column.html [ Failure ] crbug.com/591099 fast/multicol/border-radius-clipped-layer.html [ Failure ] -crbug.com/591099 fast/multicol/break-after-always-bottom-margin.html [ Failure ] crbug.com/591099 fast/multicol/break-after-empty-set-crash.html [ Crash ] crbug.com/591099 fast/multicol/break-before-first-line-in-first-child.html [ Failure ] crbug.com/591099 fast/multicol/break-in-scrollable.html [ Failure ] @@ -5380,7 +5380,6 @@ crbug.com/591099 fast/multicol/forced-break-after-block-with-spanner.html [ Crash ] crbug.com/591099 fast/multicol/forced-break-after-empty-block-after-spanner.html [ Crash ] crbug.com/591099 fast/multicol/forced-break-after-last-block-before-spanner.html [ Crash ] -crbug.com/591099 fast/multicol/forced-break-before-complex-margin-collapsing.html [ Failure ] crbug.com/591099 fast/multicol/forced-break-in-nested-columns.html [ Failure ] crbug.com/591099 fast/multicol/forced-break-too-short-column.html [ Failure ] crbug.com/591099 fast/multicol/hit-test-above-or-below.html [ Failure ] @@ -5592,7 +5591,6 @@ crbug.com/591099 fast/multicol/three-inner-rows.html [ Failure ] crbug.com/591099 fast/multicol/transform-inside-opacity.html [ Failure Pass ] crbug.com/714962 fast/multicol/unbreakable-content-taller-than-height-crash.html [ Failure ] -crbug.com/591099 fast/multicol/unforced-break-after-complex-margin-collapsing.html [ Failure ] crbug.com/591099 fast/multicol/vertical-lr/abspos-auto-position-on-line.html [ Crash Failure ] crbug.com/591099 fast/multicol/vertical-lr/balancing/balance-trailing-border.html [ Failure ] crbug.com/591099 fast/multicol/vertical-lr/break-properties.html [ Failure ] @@ -6227,6 +6225,7 @@ crbug.com/591099 fast/text-autosizing/wide-child.html [ Failure ] crbug.com/591099 fast/text-autosizing/wide-in-narrow-overflow-scroll.html [ Failure ] crbug.com/714962 fast/text/atsui-multiple-renderers.html [ Failure ] +crbug.com/591099 fast/text/bdi-get-direction-crash.html [ Failure ] crbug.com/591099 fast/text/break-word-with-floats.html [ Failure ] crbug.com/591099 fast/text/capitalize-boundaries.html [ Failure ] crbug.com/591099 fast/text/chromium-linux-fontconfig-renderstyle.html [ Failure ] @@ -6262,14 +6261,15 @@ crbug.com/714962 fast/text/international/bidi-override.html [ Failure ] crbug.com/714962 fast/text/international/cjk-segmentation.html [ Failure ] crbug.com/714962 fast/text/international/hindi-whitespace.html [ Failure ] -crbug.com/591099 fast/text/international/inline-plaintext-is-isolated.html [ Failure ] +crbug.com/591099 fast/text/international/inline-plaintext-is-isolated.html [ Failure Pass ] crbug.com/714962 fast/text/international/iso-8859-8.html [ Failure ] crbug.com/714962 fast/text/international/listbox-width-rtl.html [ Failure ] +crbug.com/591099 fast/text/international/multiline-and-object-inside-isolate-crash.html [ Failure ] crbug.com/714962 fast/text/international/rtl-selection-rect-with-fallback.html [ Failure ] crbug.com/796943 fast/text/international/shape-across-elements-simple.html [ Pass ] crbug.com/591099 fast/text/international/shape-across-elements.html [ Failure ] crbug.com/591099 fast/text/international/text-combine-image-test.html [ Failure ] -crbug.com/714962 fast/text/international/thai-baht-space.html [ Failure ] +crbug.com/714962 fast/text/international/thai-baht-space.html [ Failure Pass ] crbug.com/591099 fast/text/international/unicode-bidi-plaintext-line-wrap.html [ Failure Pass ] crbug.com/714962 fast/text/international/vertical-text-metrics-test.html [ Failure ] crbug.com/591099 fast/text/justify-ideograph-vertical.html [ Failure ] @@ -6649,7 +6649,7 @@ crbug.com/591099 http/tests/appcache/offline-access.html [ Failure ] crbug.com/591099 http/tests/cache/xhr-vary-header.html [ Failure ] crbug.com/591099 http/tests/css/css-image-valued-shape.html [ Failure ] -crbug.com/714962 http/tests/css/css-resources-referrer-srcdoc.html [ Failure Pass ] +crbug.com/714962 http/tests/css/css-resources-referrer-srcdoc.html [ Failure ] crbug.com/591099 http/tests/css/css-resources-referrer.html [ Failure Pass ] crbug.com/591099 http/tests/css/shape-image-file.html [ Failure ] crbug.com/591099 http/tests/csspaint/invalidation-background-image.html [ Timeout ] @@ -6682,6 +6682,7 @@ crbug.com/714962 http/tests/devtools/elements/edit/edit-dom-actions-shadow-2.js [ Crash ] crbug.com/714962 http/tests/devtools/elements/edit/edit-trimmed-attribute-value.js [ Crash Pass ] crbug.com/714962 http/tests/devtools/elements/edit/insert-node-collapsed.js [ Crash Pass ] +crbug.com/591099 http/tests/devtools/elements/edit/perform-undo-undo.js [ Failure ] crbug.com/714962 http/tests/devtools/elements/edit/remove-node.js [ Crash ] crbug.com/714962 http/tests/devtools/elements/edit/set-attribute.js [ Crash ] crbug.com/714962 http/tests/devtools/elements/edit/set-outer-html-2.js [ Crash ] @@ -6709,6 +6710,7 @@ crbug.com/591099 http/tests/devtools/elements/highlight/highlight-css-shapes-outside-scroll.js [ Failure ] crbug.com/591099 http/tests/devtools/elements/highlight/highlight-css-shapes-outside.js [ Failure ] crbug.com/714962 http/tests/devtools/elements/highlight/highlight-dom-updates.js [ Crash ] +crbug.com/591099 http/tests/devtools/elements/html-link-import.js [ Failure ] crbug.com/714962 http/tests/devtools/elements/iframe-load-event.js [ Crash ] crbug.com/714962 http/tests/devtools/elements/insert-node.js [ Crash ] crbug.com/714962 http/tests/devtools/elements/inspect-pseudo-element.js [ Timeout ] @@ -6750,7 +6752,7 @@ crbug.com/591099 http/tests/devtools/elements/styles-3/styles-disable-then-change.js [ Crash ] crbug.com/591099 http/tests/devtools/elements/styles-3/styles-disable-then-delete.js [ Crash ] crbug.com/591099 http/tests/devtools/elements/styles-3/styles-disable-then-enable-overriden-ua.js [ Crash Pass ] -crbug.com/591099 http/tests/devtools/elements/styles-3/styles-disable-then-enable.js [ Crash ] +crbug.com/591099 http/tests/devtools/elements/styles-3/styles-disable-then-enable.js [ Crash Pass ] crbug.com/591099 http/tests/devtools/elements/styles-4/disable-last-property-without-semicolon.js [ Crash ] crbug.com/591099 http/tests/devtools/elements/styles-4/styles-do-not-detach-sourcemap-on-edits.js [ Crash ] crbug.com/591099 http/tests/devtools/elements/styles-4/styles-formatting.js [ Crash ] @@ -6764,7 +6766,7 @@ crbug.com/591099 http/tests/devtools/elements/styles/selector-line-deprecated.js [ Crash Pass ] crbug.com/591099 http/tests/devtools/elements/styles/selector-line-sourcemap-header-deprecated.js [ Crash Pass ] crbug.com/591099 http/tests/devtools/elements/styles/styles-mouse-test.js [ Failure ] -crbug.com/714962 http/tests/devtools/elements/styles/stylesheet-tracking.js [ Crash Pass ] +crbug.com/714962 http/tests/devtools/elements/styles/stylesheet-tracking.js [ Crash ] crbug.com/591099 http/tests/devtools/elements/styles/undo-after-cancelled-editing.js [ Crash ] crbug.com/714962 http/tests/devtools/elements/styles/undo-change-property.js [ Crash Pass ] crbug.com/714962 http/tests/devtools/elements/styles/undo-property-toggle.js [ Crash Pass ] @@ -7111,7 +7113,7 @@ crbug.com/714962 inspector-protocol/accessibility/accessibility-ignoredNodesModal.js [ Failure ] crbug.com/591099 inspector-protocol/accessibility/accessibility-modal.js [ Crash ] crbug.com/714962 inspector-protocol/accessibility/accessibility-nameSources-buttons.js [ Failure ] -crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-img-figure.js [ Pass Timeout ] +crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-img-figure.js [ Timeout ] crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-input-buttons.js [ Timeout ] crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-input.js [ Timeout ] crbug.com/591099 inspector-protocol/accessibility/accessibility-nameSources-labelledby.js [ Timeout ] @@ -7464,7 +7466,6 @@ crbug.com/714962 paint/invalidation/overflow/overflow-delete-line.html [ Failure ] crbug.com/591099 paint/invalidation/overflow/overflow-hide.html [ Failure ] crbug.com/591099 paint/invalidation/overflow/overflow-into-content.html [ Failure ] -crbug.com/714962 paint/invalidation/overflow/overflow-outline-repaint.html [ Failure ] crbug.com/591099 paint/invalidation/overflow/overflow-show.html [ Failure ] crbug.com/591099 paint/invalidation/overflow/paged-with-overflowing-block-rl.html [ Failure ] crbug.com/591099 paint/invalidation/overflow/repaint-resized-overflow.html [ Failure ] @@ -7486,6 +7487,7 @@ crbug.com/591099 paint/invalidation/position/block-layout-inline-children-float-positioned.html [ Failure ] crbug.com/591099 paint/invalidation/position/containing-block-position-change.html [ Failure ] crbug.com/591099 paint/invalidation/position/fixed-position-layer-moved.html [ Failure ] +crbug.com/591099 paint/invalidation/position/fixed-position-with-text.html [ Crash ] crbug.com/591099 paint/invalidation/position/fixed-scale.html [ Failure ] crbug.com/591099 paint/invalidation/position/fixed-to-relative-position-with-absolute-child.html [ Failure ] crbug.com/591099 paint/invalidation/position/inline-relative-positioned.html [ Failure ] @@ -7963,7 +7965,6 @@ crbug.com/591099 scrollbars/custom-scrollbar-with-incomplete-style.html [ Failure ] crbug.com/714962 scrollbars/custom-scrollbars-paint-outside-iframe.html [ Failure ] crbug.com/714962 scrollbars/disabled-scrollbar.html [ Failure ] -crbug.com/714962 scrollbars/resize-scales-with-dpi-150.html [ Failure ] crbug.com/714962 scrollbars/scrollbar-buttons.html [ Failure ] crbug.com/591099 scrollbars/scrollbar-click-does-not-blur-content.html [ Failure ] crbug.com/591099 scrollbars/scrollbar-large-overflow-rectangle.html [ Crash ] @@ -8345,7 +8346,7 @@ crbug.com/591099 svg/overflow/overflow-on-outermost-svg-element-in-xhtml-hidden.xhtml [ Failure ] crbug.com/591099 svg/overflow/overflow-on-outermost-svg-element-in-xhtml-scroll.xhtml [ Failure ] crbug.com/591099 svg/overflow/overflow-on-outermost-svg-element-in-xhtml-visible.xhtml [ Failure ] -crbug.com/591099 svg/parser/whitespace-length-invalid-1.html [ Pass Timeout ] +crbug.com/591099 svg/parser/whitespace-length-invalid-1.html [ Timeout ] crbug.com/591099 svg/parser/whitespace-length-invalid-2.html [ Pass Timeout ] crbug.com/591099 svg/parser/whitespace-length-invalid-3.html [ Pass Timeout ] crbug.com/591099 svg/parser/whitespace-length-invalid-4.html [ Pass Timeout ] @@ -8820,8 +8821,6 @@ crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/floats-clear/float-replaced-width-002.xht [ Pass ] crbug.com/591099 virtual/layout_ng/external/wpt/css/CSS2/positioning/position-static-001.xht [ Pass ] crbug.com/591099 virtual/layout_ng/fast/block/basic/fieldset-stretch-to-legend.html [ Pass ] -crbug.com/591099 virtual/layout_ng/fast/block/float/026.html [ Failure ] -crbug.com/591099 virtual/layout_ng/fast/block/float/028.html [ Failure ] crbug.com/591099 virtual/layout_ng/fast/block/float/float-not-removed-from-first-letter.html [ Pass ] crbug.com/591099 virtual/layout_ng/fast/block/float/float-on-zero-height-line.html [ Pass ] crbug.com/591099 virtual/layout_ng/fast/block/float/marquee-shrink-to-avoid-floats.html [ Pass ] @@ -8889,7 +8888,7 @@ crbug.com/591099 virtual/mouseevent_fractional/fast/events/keypress-focus-change.html [ Failure ] crbug.com/591099 virtual/mouseevent_fractional/fast/events/media-element-focus-tab.html [ Failure ] crbug.com/714962 virtual/mouseevent_fractional/fast/events/middleClickAutoscroll-click-hyperlink.html [ Timeout ] -crbug.com/714962 virtual/mouseevent_fractional/fast/events/middleClickAutoscroll-latching.html [ Pass Timeout ] +crbug.com/714962 virtual/mouseevent_fractional/fast/events/middleClickAutoscroll-latching.html [ Timeout ] crbug.com/714962 virtual/mouseevent_fractional/fast/events/mouse-down-on-pseudo-element-remove-crash.html [ Failure ] crbug.com/591099 virtual/mouseevent_fractional/fast/events/mouse-drag-from-frame-to-other-frame.html [ Failure ] crbug.com/591099 virtual/mouseevent_fractional/fast/events/mouse-event-buttons-attribute.html [ Timeout ]
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v175 b/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v175 new file mode 100644 index 0000000..3ed0ada5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v175
@@ -0,0 +1,146 @@ +# Skip tests that we are running under virtual/spv175 +Bug(none) compositing/ [ Skip ] +Bug(none) virtual/prefer_compositing_to_lcd_text/compositing [ Skip ] +Bug(none) paint/ [ Skip ] +Bug(none) fast/borders/ [ Skip ] +Bug(none) fast/multicol/ [ Skip ] +Bug(none) fast/pagination/ [ Skip ] +Bug(none) fragmentation/ [ Skip ] +Bug(none) printing/ [ Skip ] +Bug(none) virtual/spv175 [ Skip ] + +crbug.com/769942 css3/masking/clip-path-circle-filter.html [ Failure ] +crbug.com/769942 css3/masking/clip-path-circle-overflow-hidden.html [ Failure ] +crbug.com/769942 css3/masking/clip-path-circle-overflow.html [ Failure ] +crbug.com/769942 css3/masking/clip-path-circle-relative-overflow.html [ Failure ] +crbug.com/769942 css3/masking/clip-path-circle.html [ Failure ] +crbug.com/769942 css3/masking/clip-path-columns-shape.html [ Failure ] +crbug.com/769942 css3/masking/clip-path-columns-svg-clippath-usou.html [ Failure ] +crbug.com/769942 css3/masking/clip-path-ellipse.html [ Failure ] +crbug.com/769942 css3/masking/clip-path-inset-corners.html [ Failure ] +crbug.com/769942 css3/masking/clip-path-polygon-evenodd.html [ Failure ] +crbug.com/769942 css3/masking/clip-path-polygon-nonzero.html [ Failure ] +crbug.com/769942 css3/masking/clip-path-polygon-percentage.html [ Failure ] +crbug.com/769942 css3/masking/clip-path-polygon.html [ Failure ] +crbug.com/769942 css3/masking/clip-path-reference-box-1.html [ Failure ] +crbug.com/769942 css3/masking/clip-path-reference-box-2.html [ Failure ] +crbug.com/769942 css3/masking/clip-path-reference-box-3.html [ Failure ] +crbug.com/769942 css3/masking/clip-path-reference-box-inline.html [ Failure ] +crbug.com/769942 css3/masking/clip-path-reference-local-url-with-base.html [ Failure ] +crbug.com/769942 css3/masking/clip-path-reference-restore.html [ Failure ] +crbug.com/769942 css3/masking/clip-path-reference-userSpaceOnUse.html [ Failure ] +crbug.com/769942 css3/masking/clip-path-reference.html [ Failure ] +crbug.com/769942 css3/masking/clip-path-restore.html [ Failure ] +crbug.com/769942 css3/masking/mask-composite-missing-image.html [ Failure ] +crbug.com/769942 external/wpt/css/css-transforms/matrix/svg-matrix-036.html [ Failure ] +crbug.com/769942 external/wpt/css/css-transforms/matrix/svg-matrix-037.html [ Failure ] +crbug.com/769942 external/wpt/css/css-transforms/matrix/svg-matrix-038.html [ Failure ] +crbug.com/769942 external/wpt/css/css-transforms/matrix/svg-matrix-039.html [ Failure ] +crbug.com/769942 external/wpt/css/css-transforms/matrix/svg-matrix-040.html [ Failure ] +crbug.com/769942 external/wpt/css/css-transforms/matrix/svg-matrix-041.html [ Failure ] +crbug.com/769942 external/wpt/css/css-transforms/matrix/svg-matrix-042.html [ Failure ] +crbug.com/769942 external/wpt/css/css-transforms/matrix/svg-matrix-043.html [ Failure ] +crbug.com/769942 external/wpt/css/css-transforms/matrix/svg-matrix-044.html [ Failure ] +crbug.com/769942 external/wpt/css/css-transforms/matrix/svg-matrix-045.html [ Failure ] +crbug.com/769942 external/wpt/css/css-transforms/matrix/svg-matrix-046.html [ Failure ] +crbug.com/769942 external/wpt/css/css-transforms/matrix/svg-matrix-047.html [ Failure ] +crbug.com/769942 external/wpt/css/css-transforms/matrix/svg-matrix-048.html [ Failure ] +crbug.com/769942 images/color-profile-svg-foreign-object.html [ Failure ] +crbug.com/769942 svg/clip-path/ [ Failure ] +crbug.com/769942 fast/canvas/canvas-css-clip-path.html [ Failure ] +crbug.com/769942 fast/masking/clip-path-inset-large-radii.html [ Failure ] +crbug.com/769942 svg/W3C-SVG-1.1/masking-intro-01-f.svg [ Failure ] +crbug.com/769942 svg/W3C-SVG-1.1/masking-path-01-b.svg [ Failure ] +crbug.com/769942 svg/W3C-SVG-1.1/masking-path-02-b.svg [ Failure ] +crbug.com/769942 svg/W3C-SVG-1.1/masking-path-04-b.svg [ Failure ] +crbug.com/769942 svg/W3C-SVG-1.1/masking-path-05-f.svg [ Failure ] +crbug.com/769942 svg/W3C-SVG-1.1/painting-marker-02-f.svg [ Failure ] +crbug.com/769942 svg/batik/text/textEffect2.svg [ Failure ] +crbug.com/769942 svg/batik/text/textProperties.svg [ Failure ] +crbug.com/769942 svg/custom/clamped-masking-clipping.svg [ Failure ] +crbug.com/769942 svg/custom/clip-mask-negative-scale.svg [ Failure ] +crbug.com/769942 svg/custom/clip-path-referencing-use.svg [ Failure ] +crbug.com/769942 svg/custom/clip-path-with-css-transform-1.svg [ Failure ] +crbug.com/769942 svg/custom/clip-path-with-css-transform-2.svg [ Failure ] +crbug.com/769942 svg/custom/clip-path-with-transform.svg [ Failure ] +crbug.com/769942 svg/custom/focus-ring.svg [ Failure ] +crbug.com/769942 svg/custom/image-with-transform-clip-filter.svg [ Failure ] +crbug.com/769942 svg/custom/masking-clipping-hidpi.svg [ Failure ] +crbug.com/769942 svg/custom/recursive-clippath.svg [ Failure ] +crbug.com/769942 svg/custom/text-clip.svg [ Failure ] +crbug.com/769942 svg/custom/transformed-outlines.svg [ Failure ] +crbug.com/769942 svg/custom/use-clipped-transform.svg [ Failure ] +crbug.com/769942 svg/custom/use-on-clip-path-with-transformation.svg [ Failure ] +crbug.com/769942 svg/custom/viewport-clippath-invalidation.html [ Failure ] +crbug.com/769942 svg/custom/visibility-override-clip.svg [ Failure ] +crbug.com/769942 svg/filters/filter-clip.svg [ Failure ] +crbug.com/769942 svg/filters/filter-huge-clamping.svg [ Failure ] +crbug.com/769942 svg/foreignObject/clip.html [ Failure ] +crbug.com/769942 svg/transforms/svg-css-transforms-clip-path.xhtml [ Failure ] +crbug.com/769942 svg/transforms/transformed-text-fill-pattern.html [ Failure ] +crbug.com/769942 svg/zoom/page/zoom-clip-path.html [ Failure ] +crbug.com/769942 virtual/gpu/fast/canvas/canvas-css-clip-path.html [ Failure ] +crbug.com/769942 virtual/gpu-rasterization/images/color-profile-svg-foreign-object.html [ Failure ] +crbug.com/769942 virtual/exotic-color-space/images/color-profile-svg-foreign-object.html [ Failure ] + +crbug.com/771643 css3/filters/effect-reference-image-lazy-attach.html [ Failure ] +crbug.com/771643 css3/filters/effect-reference-image.html [ Failure ] +crbug.com/771643 css3/filters/effect-reference-on-transparent-element.html [ Failure ] +crbug.com/771643 css3/filters/effect-reference-tile.html [ Pass Failure Crash ] +crbug.com/771643 css3/filters/empty-element-with-filter.html [ Failure ] +crbug.com/771643 css3/filters/filterRegions.html [ Failure ] +crbug.com/771643 editing/selection/drag-select-1.html [ Crash ] +crbug.com/771643 editing/selection/extend-after-mouse-selection.html [ Crash ] +crbug.com/771643 editing/selection/selection-linebreaks-rtl-writing-modes.html [ Failure ] +crbug.com/771643 external/wpt/css/css-backgrounds/background-attachment-local/attachment-local-clipping-color-5.html [ Failure ] +crbug.com/771643 external/wpt/css/css-backgrounds/background-attachment-local/attachment-local-clipping-image-5.html [ Failure ] +crbug.com/771643 external/wpt/css/css-writing-modes/text-combine-upright-line-breaking-rules-001.html [ Failure ] +crbug.com/771643 fast/forms/focus-on-control-with-zero-size.html [ Crash ] +crbug.com/771643 fast/replaced/width100percent-textarea.html [ Failure ] +crbug.com/771643 http/tests/devtools/layers/layer-canvas-log.js [ Failure ] +crbug.com/771643 http/tests/devtools/tracing/scroll-invalidations.js [ Failure ] +crbug.com/771643 http/tests/devtools/tracing/timeline-misc/timeline-grouped-invalidations.js [ Failure ] +crbug.com/771643 http/tests/devtools/tracing/timeline-paint/paint-profiler-update.js [ Crash ] +crbug.com/771643 http/tests/devtools/tracing/timeline-paint/timeline-paint-and-multiple-style-invalidations.js [ Failure ] +crbug.com/771643 http/tests/devtools/tracing/timeline-paint/timeline-paint-with-layout-invalidations-on-deleted-node.js [ Timeout ] +crbug.com/771643 http/tests/devtools/tracing/timeline-paint/timeline-paint-with-layout-invalidations.js [ Timeout ] +crbug.com/771643 http/tests/devtools/tracing/timeline-paint/timeline-paint-with-style-recalc-invalidations.js [ Timeout ] +crbug.com/771643 http/tests/misc/slow-loading-mask.html [ Failure ] +crbug.com/771643 images/cross-fade-invalidation.html [ Failure ] +crbug.com/771643 images/drag-image-transformed-parent.html [ Failure ] +crbug.com/771643 plugins/webview-plugin-lifecycle.html [ Failure ] +crbug.com/771643 plugins/webview-plugin-nested-iframe-scroll.html [ Failure ] +crbug.com/771643 scrollbars/border-box-rect-clips-scrollbars.html [ Failure ] +crbug.com/771643 scrollbars/custom-scrollbars-paint-outside-iframe.html [ Failure ] +crbug.com/771643 svg/as-background-image/animated-svg-as-background.html [ Failure ] +crbug.com/771643 svg/as-background-image/svg-as-background-6.html [ Failure ] +crbug.com/771643 svg/as-image/svg-image-with-css-animation.html [ Failure ] +crbug.com/771643 svg/batik/masking/maskRegions.svg [ Failure ] +crbug.com/771643 svg/custom/local-url-references.html [ Failure ] +crbug.com/771643 svg/foreignObject/vertical-foreignObject.html [ Failure ] +crbug.com/771643 svg/hixie/mixed/006.xml [ Failure ] +crbug.com/771643 svg/hixie/mixed/009.xml [ Failure ] +crbug.com/771643 svg/hixie/mixed/011.xml [ Failure ] +crbug.com/771643 svg/overflow/overflow-on-foreignObject.svg [ Failure ] +crbug.com/771643 svg/text/foreignObject-text-clipping-bug.xml [ Failure ] +crbug.com/771643 svg/zoom/page/zoom-hixie-mixed-009.xml [ Failure ] +crbug.com/771643 svg/zoom/page/zoom-mask-with-percentages.svg [ Failure ] +crbug.com/771643 svg/zoom/text/zoom-hixie-mixed-008.xml [ Failure ] +crbug.com/771643 svg/zoom/text/zoom-hixie-mixed-009.xml [ Failure ] +crbug.com/771643 tables/table-transform-absolute-position-child.html [ Failure ] +crbug.com/771643 virtual/exotic-color-space/images/cross-fade-invalidation.html [ Failure ] +crbug.com/771643 virtual/exotic-color-space/images/drag-image-transformed-parent.html [ Failure ] +crbug.com/771643 virtual/exotic-color-space/images/exif-orientation-height-image-document.html [ Failure ] +crbug.com/771643 virtual/gpu-rasterization/images/cross-fade-invalidation.html [ Failure ] +crbug.com/771643 virtual/gpu-rasterization/images/drag-image-transformed-parent.html [ Failure ] +crbug.com/771643 virtual/modern-media-controls/media/controls/modern/scrubbing.html [ Timeout ] +crbug.com/771643 virtual/rootlayerscrolls/scrollbars/border-box-rect-clips-scrollbars.html [ Failure ] +crbug.com/771643 virtual/rootlayerscrolls/scrollbars/custom-scrollbars-paint-outside-iframe.html [ Failure ] +crbug.com/771643 virtual/threaded/http/tests/devtools/tracing/scroll-invalidations.js [ Failure ] +crbug.com/771643 virtual/threaded/http/tests/devtools/tracing/timeline-misc/timeline-grouped-invalidations.js [ Failure ] +crbug.com/771643 virtual/threaded/http/tests/devtools/tracing/timeline-paint/paint-profiler-update.js [ Crash ] +crbug.com/771643 virtual/threaded/http/tests/devtools/tracing/timeline-paint/timeline-paint-and-multiple-style-invalidations.js [ Failure ] +crbug.com/771643 virtual/threaded/http/tests/devtools/tracing/timeline-paint/timeline-paint-with-layout-invalidations-on-deleted-node.js [ Timeout ] +crbug.com/771643 virtual/threaded/http/tests/devtools/tracing/timeline-paint/timeline-paint-with-layout-invalidations.js [ Timeout ] +crbug.com/771643 virtual/threaded/http/tests/devtools/tracing/timeline-paint/timeline-paint-with-style-recalc-invalidations.js [ Timeout ] +crbug.com/771643 virtual/threaded/printing/fixed-positioned-scrolled.html [ Failure ]
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations index c16d834..1ffe903d 100644 --- a/third_party/WebKit/LayoutTests/TestExpectations +++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -85,7 +85,6 @@ crbug.com/771643 virtual/spv175/fast/multicol/border-radius-clipped-layer.html [ Failure ] crbug.com/771643 virtual/spv175/fast/multicol/mixed-opacity-test.html [ Failure ] crbug.com/771643 virtual/spv175/paint/invalidation/svg/absolute-sized-content-with-resources.xhtml [ Failure ] -crbug.com/771643 virtual/spv175/paint/invalidation/svg/deep-dynamic-updates.svg [ Failure ] # spv175+root-layer-scrolls failures. They also fail with root-layer-scrolls without enable-slimming-paint-v175. crbug.com/417782 virtual/spv175/compositing/overflow/border-radius-composited-subframe.html [ Failure ] @@ -397,12 +396,15 @@ crbug.com/635619 virtual/layout_ng/fast/block/float/014.html [ Failure Crash ] crbug.com/635619 [ Mac ] virtual/layout_ng/fast/block/float/020.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/022.html [ Failure ] +crbug.com/635619 [ Mac ] virtual/layout_ng/fast/block/float/026.html [ Failure ] +crbug.com/635619 [ Mac ] virtual/layout_ng/fast/block/float/028.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/assert-when-moving-float.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/assert-when-moving-float-2.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/br-with-clear-2.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/clear-intruding-floats-when-moving-to-inline-parent-3.html [ Failure Crash Pass ] crbug.com/635619 virtual/layout_ng/fast/block/float/element-clears-float-without-clearance.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/float-at-start-of-clean-lines-that-are-subsequently-dirtied-vertical-rl.html [ Failure ] +crbug.com/635619 [ Mac ] virtual/layout_ng/fast/block/float/floats-and-text-indent.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/float-at-start-of-clean-lines-that-are-subsequently-dirtied.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/float-avoidance.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/float-forced-below-other-floats.html [ Failure ] @@ -412,8 +414,6 @@ crbug.com/635619 virtual/layout_ng/fast/block/float/float-list-changed-before-layout-crash.html [ Crash Pass ] crbug.com/635619 virtual/layout_ng/fast/block/float/float-not-removed-from-next-sibling4.html [ Crash Pass ] crbug.com/635619 virtual/layout_ng/fast/block/float/float-reparent-during-detach-crash.html [ Crash Pass ] -crbug.com/635619 virtual/layout_ng/fast/block/float/floats-and-text-indent-rl.html [ Failure ] -crbug.com/635619 virtual/layout_ng/fast/block/float/floats-and-text-indent.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/floats-do-not-overhang-from-block-formatting-context.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/floats-offset-image-strict-line-height.html [ Failure ] crbug.com/635619 virtual/layout_ng/fast/block/float/floats-offset-inline-block-strict-line-height.html [ Failure ] @@ -541,10 +541,6 @@ crbug.com/714962 virtual/layout_ng/fast/block/float/015.html [ Failure ] crbug.com/714962 [ Mac ] virtual/layout_ng/fast/block/float/017.html [ Failure ] crbug.com/714962 virtual/layout_ng/fast/block/float/021.html [ Failure ] -crbug.com/714962 virtual/layout_ng/fast/block/float/025.html [ Failure ] -crbug.com/714962 virtual/layout_ng/fast/block/float/026.html [ Failure ] -crbug.com/714962 virtual/layout_ng/fast/block/float/027.html [ Failure ] -crbug.com/714962 virtual/layout_ng/fast/block/float/028.html [ Failure ] crbug.com/714962 [ Mac ] virtual/layout_ng/fast/block/float/float-should-dirty-line-even-when-it-doesnt-intersect-it-3.html [ Failure ] crbug.com/714962 virtual/layout_ng/fast/block/float/intruding-float-add-in-sibling-block-on-static-position.html [ Failure ] crbug.com/714962 virtual/layout_ng/fast/block/float/intruding-float-add-in-sibling-block-on-static-position2.html [ Failure ] @@ -903,10 +899,10 @@ crbug.com/779170 virtual/mouseevent_fractional/fast/events/zoom-dblclick.html [ Failure ] # These tests will pass once the --enable-features=TouchpadAndWheelScrollLatching flag is enabled by default. -crbug.com/526463 fast/events/wheel/mouse-wheel-scroll-latching.html [ Failure ] +crbug.com/526463 fast/events/wheel/mouse-wheel-scroll-latching.html [ Pass Failure ] crbug.com/526463 fast/events/wheel/wheel-scroll-latching-on-scrollbar.html [ Failure Timeout ] crbug.com/526463 fast/events/wheel/mainthread-touchpad-fling-latching.html [ Failure Timeout ] -crbug.com/526463 virtual/mouseevent_fractional/fast/events/wheel/mouse-wheel-scroll-latching.html [ Failure ] +crbug.com/526463 virtual/mouseevent_fractional/fast/events/wheel/mouse-wheel-scroll-latching.html [ Pass Failure ] crbug.com/526463 virtual/mouseevent_fractional/fast/events/wheel/wheel-scroll-latching-on-scrollbar.html [ Failure Timeout ] crbug.com/526463 virtual/mouseevent_fractional/fast/events/wheel/mainthread-touchpad-fling-latching.html [ Failure Timeout ] @@ -963,7 +959,6 @@ crbug.com/498539 http/tests/devtools/tracing/timeline-misc/timeline-bound-function.js [ Pass Failure ] crbug.com/498539 virtual/threaded/http/tests/devtools/tracing/timeline-misc/timeline-bound-function.js [ Pass Failure ] -crbug.com/498539 [ Mac ] http/tests/devtools/sources/debugger/live-edit-no-reveal.js [ Crash Pass Timeout Failure ] crbug.com/498539 crbug.com/794869 crbug.com/798548 [ Win7 Mac Linux ] http/tests/devtools/elements/styles-4/styles-update-from-js.js [ Crash Pass Failure ] @@ -1842,8 +1837,11 @@ crbug.com/751952 http/tests/devtools/console/console-uncaught-promise.js [ Pass Failure ] crbug.com/751952 virtual/origin-trials-runtimeflags-disabled/http/tests/origin_trials/webexposed/budget-api-origin-trial-interfaces.html [ Pass Failure ] +crbug.com/800898 external/wpt/FileAPI/url/url-format.any.worker.html [ Pass Failure ] +crbug.com/801078 [ Mac Win ] external/wpt/FileAPI/url/sandboxed-iframe.html [ Pass Failure ] crbug.com/800898 external/wpt/FileAPI/url/url-with-fetch.any.worker.html [ Pass Failure ] crbug.com/800898 external/wpt/FileAPI/url/url-with-xhr.any.worker.html [ Pass Failure ] +crbug.com/801078 virtual/mojo-blobs/external/wpt/FileAPI/url/url-format.any.worker.html [ Pass Failure ] crbug.com/800898 virtual/mojo-blobs/external/wpt/FileAPI/url/url-with-fetch.any.worker.html [ Pass Failure ] crbug.com/800898 virtual/mojo-blobs/external/wpt/FileAPI/url/url-with-xhr.any.worker.html [ Pass Failure ] @@ -2718,6 +2716,8 @@ # ====== Tests from enabling .any.js/.worker.js tests end here ======== +crbug.com/789139 http/tests/devtools/sources/debugger/live-edit-no-reveal.js [ Failure Pass Timeout Crash ] + # ====== Begin of display: contents tests ====== crbug.com/795217 external/wpt/css/css-display/display-contents-details.html [ Failure ] @@ -3496,7 +3496,6 @@ # Sheriff failures 2017-11-28 crbug.com/789111 http/tests/devtools/service-workers/service-worker-v8-cache.js [ Pass Failure Timeout ] -crbug.com/789139 [ Linux ] http/tests/devtools/sources/debugger/live-edit-no-reveal.js [ Pass Failure ] crbug.com/785179 [ Mac10.11 ] http/tests/devtools/console/console-viewport-stick-to-bottom.js [ Pass Failure ] # Sheriff failures 2017-11-29
diff --git a/third_party/WebKit/LayoutTests/compositing/massive-scale-interest-rect-expected.txt b/third_party/WebKit/LayoutTests/compositing/massive-scale-interest-rect-expected.txt index db3c771fa..7fb32ee 100644 --- a/third_party/WebKit/LayoutTests/compositing/massive-scale-interest-rect-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/massive-scale-interest-rect-expected.txt
@@ -7,7 +7,7 @@ LayoutBlockFlow {DIV} at (0,0) size 165x92 layer at (8,8) size 1920x1080 backgroundClip at (8,8) size 165x92 clip at (8,8) size 165x92 LayoutBlockFlow {DIV} at (0,0) size 1920x1080 [bgcolor=#0000FF] -layer at (8,5008) size 300x300 backgroundClip at (0,0) size 800x600 clip at (0,0) size 800x600 +layer at (8,5008) size 300x300 backgroundClip at (8,8) size 165x92 clip at (8,8) size 165x92 LayoutBlockFlow (positioned) {DIV} at (0,5000) size 300x300 -layer at (8,5008) size 300x300 backgroundClip at (0,0) size 800x600 clip at (0,0) size 800x600 +layer at (8,5008) size 300x300 backgroundClip at (8,8) size 165x92 clip at (8,8) size 165x92 LayoutBlockFlow (positioned) {DIV} at (0,5000) size 300x300
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/nested-render-surfaces-with-rotation-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/nested-render-surfaces-with-rotation-expected.txt index 5945cc4..09e538a 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/nested-render-surfaces-with-rotation-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/nested-render-surfaces-with-rotation-expected.txt
@@ -7,25 +7,25 @@ LayoutBlockFlow {DIV} at (0,0) size 769x418 layer at (8,10) size 769x418 transparent LayoutBlockFlow {DIV} at (0,0) size 769x418 -layer at (8,120) size 308x308 clip at (12,124) size 285x285 scrollWidth 339 scrollHeight 448 +layer at (8,120) size 308x308 backgroundClip at (0,87) size 325x334 clip at (12,124) size 285x285 scrollWidth 339 scrollHeight 448 LayoutBlockFlow {DIV} at (0,110) size 308x308 [border: (4px solid #000000)] -layer at (12,134) size 285x418 backgroundClip at (22,91) size 285x285 clip at (22,91) size 285x285 transparent +layer at (12,134) size 285x418 backgroundClip at (0,91) size 306x309 clip at (0,91) size 306x309 transparent LayoutBlockFlow {DIV} at (4,14) size 285x418 -layer at (12,244) size 308x308 backgroundClip at (22,244) size 285x132 clip at (22,248) size 279x128 scrollHeight 560 +layer at (12,244) size 308x308 backgroundClip at (0,211) size 306x189 clip at (16,248) size 285x152 scrollHeight 560 LayoutBlockFlow {DIV} at (0,110) size 308x308 [border: (4px solid #000000)] -layer at (62,234) size 200x200 +layer at (62,234) size 200x200 backgroundClip at (0,91) size 306x309 clip at (0,91) size 306x309 LayoutBlockFlow (positioned) {DIV} at (50,100) size 200x200 [bgcolor=#008000] layer at (22,134) size 100x100 LayoutBlockFlow (relative positioned) zI: 1 {DIV} at (10,0) size 100x100 [bgcolor=#0000FF] layer at (26,258) size 100x100 LayoutBlockFlow (relative positioned) zI: 1 {DIV} at (14,14) size 100x100 [bgcolor=#0000FF] -layer at (26,368) size 100x100 backgroundClip at (22,237) size 263x139 clip at (22,237) size 263x139 +layer at (26,368) size 100x100 backgroundClip at (0,217) size 305x183 clip at (0,217) size 305x183 LayoutBlockFlow (relative positioned) zI: 1 {DIV} at (14,124) size 100x100 [bgcolor=#0000FF] -layer at (26,478) size 100x100 backgroundClip at (22,237) size 263x139 clip at (22,237) size 263x139 +layer at (26,478) size 100x100 backgroundClip at (0,217) size 305x183 clip at (0,217) size 305x183 LayoutBlockFlow (relative positioned) zI: 1 {DIV} at (14,234) size 100x100 [bgcolor=#0000FF] -layer at (26,588) size 100x100 backgroundClip at (22,237) size 263x139 clip at (22,237) size 263x139 +layer at (26,588) size 100x100 backgroundClip at (0,217) size 305x183 clip at (0,217) size 305x183 LayoutBlockFlow (relative positioned) zI: 1 {DIV} at (14,344) size 100x100 [bgcolor=#0000FF] -layer at (26,698) size 100x100 backgroundClip at (22,237) size 263x139 clip at (22,237) size 263x139 +layer at (26,698) size 100x100 backgroundClip at (0,217) size 305x183 clip at (0,217) size 305x183 LayoutBlockFlow (relative positioned) zI: 1 {DIV} at (14,454) size 100x100 [bgcolor=#0000FF] layer at (18,10) size 100x100 LayoutBlockFlow (relative positioned) zI: 1 {DIV} at (10,0) size 100x100 [bgcolor=#0000FF]
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/scaled-overflow-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/scaled-overflow-expected.txt index 476a2a9..8173a555 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/scaled-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/scaled-overflow-expected.txt
@@ -4,12 +4,12 @@ LayoutBlockFlow {HTML} at (0,0) size 800x466 layer at (8,8) size 784x450 LayoutBlockFlow {BODY} at (8,8) size 784x450 [bgcolor=#000000] -layer at (8,8) size 150x150 clip at (8,8) size 135x135 scrollHeight 400 +layer at (8,8) size 150x150 backgroundClip at (8,8) size 113x113 clip at (8,8) size 113x113 scrollHeight 400 LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 150x150 [bgcolor=#FFFFFF] LayoutBlockFlow {DIV} at (0,0) size 135x400 -layer at (9,168) size 150x150 clip at (9,168) size 135x135 scrollHeight 400 +layer at (9,168) size 150x150 backgroundClip at (9,128) size 112x113 clip at (9,168) size 112x73 scrollHeight 400 LayoutBlockFlow (relative positioned) {DIV} at (0,150) size 150x150 [bgcolor=#FFFFFF] LayoutBlockFlow {DIV} at (0,0) size 135x400 -layer at (10,328) size 150x150 clip at (10,328) size 135x135 scrollHeight 400 +layer at (10,328) size 150x150 backgroundClip at (10,248) size 112x113 clip at (10,328) size 112x33 scrollHeight 400 LayoutBlockFlow (relative positioned) {DIV} at (0,300) size 150x150 [bgcolor=#FFFFFF] LayoutBlockFlow {DIV} at (0,0) size 135x400
diff --git a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json index 5b5c9fb6..fd1fd488 100644 --- a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json +++ b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
@@ -27395,6 +27395,18 @@ {} ] ], + "css/css-backgrounds/background-clip/clip-rounded-corner.html": [ + [ + "/css/css-backgrounds/background-clip/clip-rounded-corner.html", + [ + [ + "/css/css-backgrounds/background-clip/clip-rounded-corner-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-backgrounds/background-clip_padding-box.html": [ [ "/css/css-backgrounds/background-clip_padding-box.html", @@ -27527,6 +27539,18 @@ {} ] ], + "css/css-backgrounds/background-image-centered.html": [ + [ + "/css/css-backgrounds/background-image-centered.html", + [ + [ + "/css/css-backgrounds/background-image-centered-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-backgrounds/background-image-first-letter.html": [ [ "/css/css-backgrounds/background-image-first-letter.html", @@ -33539,6 +33563,18 @@ {} ] ], + "css/css-content/element-replacement.html": [ + [ + "/css/css-content/element-replacement.html", + [ + [ + "/css/css-content/element-replacement-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-display/display-contents-alignment-001.html": [ [ "/css/css-display/display-contents-alignment-001.html", @@ -34139,6 +34175,18 @@ {} ] ], + "css/css-display/display-contents-text-inherit-002.html": [ + [ + "/css/css-display/display-contents-text-inherit-002.html", + [ + [ + "/css/css-display/display-contents-text-inherit-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-display/display-contents-text-inherit.html": [ [ "/css/css-display/display-contents-text-inherit.html", @@ -91594,21 +91642,11 @@ {} ] ], - "FileAPI/BlobURL/support/file_test1.js": [ - [ - {} - ] - ], "FileAPI/BlobURL/support/file_test2.txt": [ [ {} ] ], - "FileAPI/BlobURL/support/file_test3.html": [ - [ - {} - ] - ], "FileAPI/FileReader/support/file_test1.txt": [ [ {} @@ -91619,16 +91657,6 @@ {} ] ], - "FileAPI/blob/Blob-Request-revoke-fetch-expected.txt": [ - [ - {} - ] - ], - "FileAPI/blob/Blob-XHR-revoke-expected.txt": [ - [ - {} - ] - ], "FileAPI/blob/Blob-constructor-expected.txt": [ [ {} @@ -91694,6 +91722,51 @@ {} ] ], + "FileAPI/url/cross-global-revoke.sub-expected.txt": [ + [ + {} + ] + ], + "FileAPI/url/resources/create-helper.html": [ + [ + {} + ] + ], + "FileAPI/url/resources/create-helper.js": [ + [ + {} + ] + ], + "FileAPI/url/resources/fetch-tests.js": [ + [ + {} + ] + ], + "FileAPI/url/resources/revoke-helper.html": [ + [ + {} + ] + ], + "FileAPI/url/resources/revoke-helper.js": [ + [ + {} + ] + ], + "FileAPI/url/sandboxed-iframe-expected.txt": [ + [ + {} + ] + ], + "FileAPI/url/url-with-fetch.any-expected.txt": [ + [ + {} + ] + ], + "FileAPI/url/url-with-xhr.any-expected.txt": [ + [ + {} + ] + ], "FileAPI/url/url_xmlhttprequest_img-ref.html": [ [ {} @@ -92479,6 +92552,11 @@ {} ] ], + "bluetooth/resources/health-thermometer-iframe.html": [ + [ + {} + ] + ], "clear-site-data/OWNERS": [ [ {} @@ -98329,6 +98407,11 @@ {} ] ], + "css/css-backgrounds/background-clip/clip-rounded-corner-ref.html": [ + [ + {} + ] + ], "css/css-backgrounds/background-clip/list.txt": [ [ {} @@ -98339,6 +98422,11 @@ {} ] ], + "css/css-backgrounds/background-image-centered-ref.html": [ + [ + {} + ] + ], "css/css-backgrounds/background-origin/list.txt": [ [ {} @@ -99829,6 +99917,16 @@ {} ] ], + "css/css-content/element-replacement-ref.html": [ + [ + {} + ] + ], + "css/css-content/resources/rect.svg": [ + [ + {} + ] + ], "css/css-display/OWNERS": [ [ {} @@ -115884,6 +115982,11 @@ {} ] ], + "css/css-typed-om/the-stylepropertymap/interface-expected.txt": [ + [ + {} + ] + ], "css/css-ui/OWNERS": [ [ {} @@ -124474,11 +124577,6 @@ {} ] ], - "dom/lists/DOMTokenList-coverage-for-attributes-expected.txt": [ - [ - {} - ] - ], "dom/lists/README.md": [ [ {} @@ -130504,11 +130602,6 @@ {} ] ], - "html/dom/historical-expected.txt": [ - [ - {} - ] - ], "html/dom/interactions-with-xpath-and-xslt/.gitkeep": [ [ {} @@ -141099,6 +141192,11 @@ {} ] ], + "interfaces/xhr.idl": [ + [ + {} + ] + ], "intersection-observer/OWNERS": [ [ {} @@ -141144,7 +141242,7 @@ {} ] ], - "keyboard-lock/navigator-requestKeyboardLock-two-parallel-requests.https-expected.txt": [ + "keyboard-lock/navigator-keyboardLock-two-parallel-requests.https-expected.txt": [ [ {} ] @@ -143294,7 +143392,7 @@ {} ] ], - "quirks-mode/OWNERS": [ + "quirks/OWNERS": [ [ {} ] @@ -145989,6 +146087,11 @@ {} ] ], + "resource-timing/resources/blank_page_green.htm": [ + [ + {} + ] + ], "resource-timing/resources/blue.png": [ [ {} @@ -146004,6 +146107,11 @@ {} ] ], + "resource-timing/resources/green_frame.htm": [ + [ + {} + ] + ], "resource-timing/resources/gzip_xml.py": [ [ {} @@ -146104,6 +146212,11 @@ {} ] ], + "resource-timing/resources/worker_with_images.js": [ + [ + {} + ] + ], "resource-timing/test_resource_timing.js": [ [ {} @@ -146294,6 +146407,846 @@ {} ] ], + "server-timing/resources/parsing/0.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/0.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/1.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/1.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/10.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/10.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/11.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/11.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/12.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/12.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/13.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/13.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/14.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/14.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/15.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/15.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/16.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/16.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/17.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/17.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/18.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/18.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/19.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/19.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/2.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/2.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/20.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/20.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/21.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/21.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/22.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/22.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/23.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/23.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/24.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/24.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/25.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/25.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/26.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/26.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/27.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/27.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/28.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/28.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/29.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/29.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/3.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/3.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/30.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/30.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/31.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/31.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/32.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/32.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/33.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/33.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/34.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/34.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/35.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/35.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/36.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/36.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/37.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/37.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/38.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/38.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/39.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/39.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/4.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/4.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/40.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/40.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/41.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/41.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/42.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/42.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/43.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/43.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/44.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/44.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/45.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/45.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/46.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/46.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/47.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/47.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/48.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/48.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/49.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/49.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/5.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/5.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/50.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/50.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/51.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/51.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/52.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/52.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/53.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/53.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/54.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/54.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/55.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/55.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/56.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/56.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/57.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/57.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/58.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/58.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/59.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/59.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/6.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/6.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/60.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/60.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/61.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/61.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/62.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/62.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/63.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/63.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/64.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/64.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/65.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/65.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/66.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/66.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/67.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/67.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/68.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/68.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/69.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/69.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/7.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/7.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/70.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/70.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/71.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/71.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/72.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/72.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/73.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/73.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/74.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/74.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/75.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/75.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/76.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/76.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/77.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/77.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/78.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/78.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/79.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/79.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/8.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/8.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/80.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/80.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/81.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/81.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/82.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/82.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/83.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/83.js.sub.headers": [ + [ + {} + ] + ], + "server-timing/resources/parsing/9.js": [ + [ + {} + ] + ], + "server-timing/resources/parsing/9.js.sub.headers": [ + [ + {} + ] + ], "server-timing/test_server_timing.html.sub.headers": [ [ {} @@ -150364,6 +151317,11 @@ {} ] ], + "webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https-expected.txt": [ + [ + {} + ] + ], "webrtc/RTCPeerConnection-setRemoteDescription-rollback-expected.txt": [ [ {} @@ -150374,6 +151332,11 @@ {} ] ], + "webrtc/RTCPeerConnection-track-stats.https-expected.txt": [ + [ + {} + ] + ], "webrtc/RTCPeerConnectionIceEvent-constructor-expected.txt": [ [ {} @@ -151294,6 +152257,11 @@ {} ] ], + "webvtt/parsing/file-parsing/tests/support/header-regions.vtt": [ + [ + {} + ] + ], "webvtt/parsing/file-parsing/tests/support/header-space.vtt": [ [ {} @@ -159107,18 +160075,6 @@ {} ] ], - "FileAPI/blob/Blob-Request-revoke-fetch.html": [ - [ - "/FileAPI/blob/Blob-Request-revoke-fetch.html", - {} - ] - ], - "FileAPI/blob/Blob-XHR-revoke.html": [ - [ - "/FileAPI/blob/Blob-XHR-revoke.html", - {} - ] - ], "FileAPI/blob/Blob-constructor-endings.html": [ [ "/FileAPI/blob/Blob-constructor-endings.html", @@ -159293,9 +160249,9 @@ {} ] ], - "FileAPI/url/blob-url-in-sandboxed-iframe.html": [ + "FileAPI/url/cross-global-revoke.sub.html": [ [ - "/FileAPI/url/blob-url-in-sandboxed-iframe.html", + "/FileAPI/url/cross-global-revoke.sub.html", {} ] ], @@ -159305,21 +160261,57 @@ {} ] ], - "FileAPI/url/origin.sub.html": [ + "FileAPI/url/sandboxed-iframe.html": [ [ - "/FileAPI/url/origin.sub.html", + "/FileAPI/url/sandboxed-iframe.html", {} ] ], - "FileAPI/url/url_createobjecturl_blob.html": [ + "FileAPI/url/unicode-origin.sub.html": [ [ - "/FileAPI/url/url_createobjecturl_blob.html", + "/FileAPI/url/unicode-origin.sub.html", {} ] ], - "FileAPI/url/url_xmlhttprequest.html": [ + "FileAPI/url/url-format.any.js": [ [ - "/FileAPI/url/url_xmlhttprequest.html", + "/FileAPI/url/url-format.any.html", + {} + ], + [ + "/FileAPI/url/url-format.any.worker.html", + {} + ] + ], + "FileAPI/url/url-in-tags.window.js": [ + [ + "/FileAPI/url/url-in-tags.window.html", + {} + ] + ], + "FileAPI/url/url-lifetime.html": [ + [ + "/FileAPI/url/url-lifetime.html", + {} + ] + ], + "FileAPI/url/url-with-fetch.any.js": [ + [ + "/FileAPI/url/url-with-fetch.any.html", + {} + ], + [ + "/FileAPI/url/url-with-fetch.any.worker.html", + {} + ] + ], + "FileAPI/url/url-with-xhr.any.js": [ + [ + "/FileAPI/url/url-with-xhr.any.html", + {} + ], + [ + "/FileAPI/url/url-with-xhr.any.worker.html", {} ] ], @@ -162547,6 +163539,102 @@ {} ] ], + "bluetooth/requestDevice/acceptAllDevices/device-with-empty-name.https.html": [ + [ + "/bluetooth/requestDevice/acceptAllDevices/device-with-empty-name.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/acceptAllDevices/device-with-name.https.html": [ + [ + "/bluetooth/requestDevice/acceptAllDevices/device-with-name.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/acceptAllDevices/optional-services-missing.https.html": [ + [ + "/bluetooth/requestDevice/acceptAllDevices/optional-services-missing.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/requestDevice/acceptAllDevices/optional-services-present.https.html": [ + [ + "/bluetooth/requestDevice/acceptAllDevices/optional-services-present.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/server/connect/connection-succeeds.https.html": [ + [ + "/bluetooth/server/connect/connection-succeeds.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/server/connect/garbage-collection-ran-during-success.https.html": [ + [ + "/bluetooth/server/connect/garbage-collection-ran-during-success.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/server/connect/get-same-gatt-server.https.html": [ + [ + "/bluetooth/server/connect/get-same-gatt-server.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/server/device-same-object.https.html": [ + [ + "/bluetooth/server/device-same-object.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/server/disconnect/connect-disconnect-twice.https.html": [ + [ + "/bluetooth/server/disconnect/connect-disconnect-twice.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/server/disconnect/detach-gc.https.html": [ + [ + "/bluetooth/server/disconnect/detach-gc.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/server/disconnect/disconnect-twice-in-a-row.https.html": [ + [ + "/bluetooth/server/disconnect/disconnect-twice-in-a-row.https.html", + { + "testdriver": true + } + ] + ], + "bluetooth/server/disconnect/gc-detach.https.html": [ + [ + "/bluetooth/server/disconnect/gc-detach.https.html", + { + "testdriver": true + } + ] + ], "bluetooth/service/getCharacteristic/characteristic-found.https.html": [ [ "/bluetooth/service/getCharacteristic/characteristic-found.https.html", @@ -165429,6 +166517,18 @@ {} ] ], + "css/css-display/display-contents-svg-anchor-child.html": [ + [ + "/css/css-display/display-contents-svg-anchor-child.html", + {} + ] + ], + "css/css-display/display-contents-svg-switch-child.html": [ + [ + "/css/css-display/display-contents-svg-switch-child.html", + {} + ] + ], "css/css-flexbox/display_flex_exist.html": [ [ "/css/css-flexbox/display_flex_exist.html", @@ -169287,6 +170387,12 @@ {} ] ], + "css/css-typed-om/the-stylepropertymap/interface.html": [ + [ + "/css/css-typed-om/the-stylepropertymap/interface.html", + {} + ] + ], "css/css-ui/box-sizing-027.html": [ [ "/css/css-ui/box-sizing-027.html", @@ -173439,6 +174545,12 @@ {} ] ], + "domparsing/xmldomparser.html": [ + [ + "/domparsing/xmldomparser.html", + {} + ] + ], "domxpath/001.html": [ [ "/domxpath/001.html", @@ -186845,6 +187957,12 @@ {} ] ], + "html/semantics/text-level-semantics/the-area-element/rellist-feature-detection.html": [ + [ + "/html/semantics/text-level-semantics/the-area-element/rellist-feature-detection.html", + {} + ] + ], "html/semantics/text-level-semantics/the-data-element/data.value-001.html": [ [ "/html/semantics/text-level-semantics/the-data-element/data.value-001.html", @@ -189095,27 +190213,27 @@ {} ] ], - "keyboard-lock/navigator-cancelKeyboardLock.https.html": [ + "keyboard-lock/navigator-keyboardLock-two-parallel-requests.https.html": [ [ - "/keyboard-lock/navigator-cancelKeyboardLock.https.html", + "/keyboard-lock/navigator-keyboardLock-two-parallel-requests.https.html", {} ] ], - "keyboard-lock/navigator-requestKeyboardLock-two-parallel-requests.https.html": [ + "keyboard-lock/navigator-keyboardLock-two-sequential-requests.https.html": [ [ - "/keyboard-lock/navigator-requestKeyboardLock-two-parallel-requests.https.html", + "/keyboard-lock/navigator-keyboardLock-two-sequential-requests.https.html", {} ] ], - "keyboard-lock/navigator-requestKeyboardLock-two-sequential-requests.https.html": [ + "keyboard-lock/navigator-keyboardLock.https.html": [ [ - "/keyboard-lock/navigator-requestKeyboardLock-two-sequential-requests.https.html", + "/keyboard-lock/navigator-keyboardLock.https.html", {} ] ], - "keyboard-lock/navigator-requestKeyboardLock.https.html": [ + "keyboard-lock/navigator-keyboardUnlock.https.html": [ [ - "/keyboard-lock/navigator-requestKeyboardLock.https.html", + "/keyboard-lock/navigator-keyboardUnlock.https.html", {} ] ], @@ -209411,12 +210529,36 @@ {} ] ], + "resource-timing/resource_dedicated_worker.html": [ + [ + "/resource-timing/resource_dedicated_worker.html", + {} + ] + ], "resource-timing/resource_dynamic_insertion.html": [ [ "/resource-timing/resource_dynamic_insertion.html", {} ] ], + "resource-timing/resource_frame_initiator_type.html": [ + [ + "/resource-timing/resource_frame_initiator_type.html", + {} + ] + ], + "resource-timing/resource_ignore_data_url.html": [ + [ + "/resource-timing/resource_ignore_data_url.html", + {} + ] + ], + "resource-timing/resource_ignore_failures.html": [ + [ + "/resource-timing/resource_ignore_failures.html", + {} + ] + ], "resource-timing/resource_subframe_self_navigation.html": [ [ "/resource-timing/resource_subframe_self_navigation.html", @@ -209789,6 +210931,12 @@ {} ] ], + "server-timing/server_timing_header-parsing.html": [ + [ + "/server-timing/server_timing_header-parsing.html", + {} + ] + ], "server-timing/test_server_timing.html": [ [ "/server-timing/test_server_timing.html", @@ -215459,6 +216607,12 @@ {} ] ], + "webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html": [ + [ + "/webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html", + {} + ] + ], "webrtc/RTCPeerConnection-setRemoteDescription-rollback.html": [ [ "/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html", @@ -215477,6 +216631,12 @@ {} ] ], + "webrtc/RTCPeerConnection-track-stats.https.html": [ + [ + "/webrtc/RTCPeerConnection-track-stats.https.html", + {} + ] + ], "webrtc/RTCPeerConnectionIceEvent-constructor.html": [ [ "/webrtc/RTCPeerConnectionIceEvent-constructor.html", @@ -217877,6 +219037,12 @@ {} ] ], + "webvtt/api/VTTRegion/non-visible-cue-with-region.html": [ + [ + "/webvtt/api/VTTRegion/non-visible-cue-with-region.html", + {} + ] + ], "webvtt/api/VTTRegion/regionAnchorX.html": [ [ "/webvtt/api/VTTRegion/regionAnchorX.html", @@ -217973,6 +219139,12 @@ {} ] ], + "webvtt/parsing/file-parsing/tests/header-regions.html": [ + [ + "/webvtt/parsing/file-parsing/tests/header-regions.html", + {} + ] + ], "webvtt/parsing/file-parsing/tests/header-space.html": [ [ "/webvtt/parsing/file-parsing/tests/header-space.html", @@ -226501,7 +227673,7 @@ "support" ], "./lint.whitelist": [ - "e2ff823a37fdb49a64d144ac380ac00ab4d35655", + "c55f23203c2e4b158dc13d25617031fcbb791744", "support" ], "./update-built-tests.sh": [ @@ -230712,18 +231884,10 @@ "73f0071c06f429c3d47eac8d0863e11f1d6e8c25", "support" ], - "FileAPI/BlobURL/support/file_test1.js": [ - "f917ccbca3184f5e1aa0646fdc4fe1c74261b6bc", - "support" - ], "FileAPI/BlobURL/support/file_test2.txt": [ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" ], - "FileAPI/BlobURL/support/file_test3.html": [ - "271db876d5a617bf94f11af1dceddc114e4d4573", - "support" - ], "FileAPI/FileReader/Progress_event_bubbles_cancelable.html": [ "004de6eeaee89aadbd2f3c505de986f96d33a0e4", "testharness" @@ -230748,22 +231912,6 @@ "f340bcedd53a21c10c03764d047e2c0c1648628d", "support" ], - "FileAPI/blob/Blob-Request-revoke-fetch-expected.txt": [ - "8c0d14c50742d0e6f9b736eca0942a1405494cdf", - "support" - ], - "FileAPI/blob/Blob-Request-revoke-fetch.html": [ - "54df50603ac5ff79f60d50a85c26339483da297b", - "testharness" - ], - "FileAPI/blob/Blob-XHR-revoke-expected.txt": [ - "787131c00ad00d2365cdd58bc29f30a9fb1f0a87", - "support" - ], - "FileAPI/blob/Blob-XHR-revoke.html": [ - "5858a79442dcad6325b3ab4bb6a20fc302fcf64c", - "testharness" - ], "FileAPI/blob/Blob-constructor-endings.html": [ "5ba751f75b52359a021da7b3f6c2f2a304f36d7f", "testharness" @@ -230932,30 +232080,82 @@ "99a52f519e0d12bb9ece822f1480e0b08dca77e3", "testharness" ], - "FileAPI/url/blob-url-in-sandboxed-iframe.html": [ - "59188b2e679f56d5eb7ea01428ce06ff0068111a", + "FileAPI/url/cross-global-revoke.sub-expected.txt": [ + "a58466dec7eccbf415324f15ff8cc48ac3d66d42", + "support" + ], + "FileAPI/url/cross-global-revoke.sub.html": [ + "29af36c1839a1d00c6489675d0818036ddfcb02e", "testharness" ], "FileAPI/url/multi-global-origin-serialization.sub.html": [ "7b3cc737b53e7d7dadc3848fca7e7456e59a8635", "testharness" ], - "FileAPI/url/origin.sub.html": [ - "427ede39094dacc910250495bc39ae5ad5826279", + "FileAPI/url/resources/create-helper.html": [ + "58c01df2de865b76d0e0562562dd56e118f27f9b", + "support" + ], + "FileAPI/url/resources/create-helper.js": [ + "c7a32660bf6937c0f3e8e9c6450850ca3944a89b", + "support" + ], + "FileAPI/url/resources/fetch-tests.js": [ + "f32fd217f3f122a6a910f9258d50d006036b2ee2", + "support" + ], + "FileAPI/url/resources/revoke-helper.html": [ + "f558c2c35ba79c9992b0f24e013eb86415e7e6ff", + "support" + ], + "FileAPI/url/resources/revoke-helper.js": [ + "9946d1d093a3035e4546bff93473ea2925a74130", + "support" + ], + "FileAPI/url/sandboxed-iframe-expected.txt": [ + "cbdc3181c15700b3b9657237a761b15e2bb77e9c", + "support" + ], + "FileAPI/url/sandboxed-iframe.html": [ + "f7de4337c0f154668d24d85753daea9e4636ac52", "testharness" ], - "FileAPI/url/url_createobjecturl_blob.html": [ - "bfd9cbe17c74e7b181156c47228beb694d8375af", + "FileAPI/url/unicode-origin.sub.html": [ + "59efa25d03f8765d4848d4b4e6310c7740763342", + "testharness" + ], + "FileAPI/url/url-format.any.js": [ + "b2e72a48146973a4d2e95b815758d688c8acb2e0", + "testharness" + ], + "FileAPI/url/url-in-tags.window.js": [ + "bf67cd8a24215953b0e68e1d046491c7863b05b6", + "testharness" + ], + "FileAPI/url/url-lifetime.html": [ + "3cbda186b6669c24770013d899e96a71ea49a08d", + "testharness" + ], + "FileAPI/url/url-with-fetch.any-expected.txt": [ + "67073ec781a04364ac8776688c453eb27e0802a7", + "support" + ], + "FileAPI/url/url-with-fetch.any.js": [ + "b9f82d1ea5d2ef12e87946df37c373805a336fa6", + "testharness" + ], + "FileAPI/url/url-with-xhr.any-expected.txt": [ + "44370a7c21b0b4ee90e8085a25ea509572b55fd7", + "support" + ], + "FileAPI/url/url-with-xhr.any.js": [ + "883d206ae9ec439874f2a874e6f4566f037c0f42", "testharness" ], "FileAPI/url/url_createobjecturl_file_img-manual.html": [ "8b8c7324f9978c31cac34f0049d02417f47bf7f7", "manual" ], - "FileAPI/url/url_xmlhttprequest.html": [ - "bb1311c54b236f9c731d31b48323690fce4759bc", - "testharness" - ], "FileAPI/url/url_xmlhttprequest_img-ref.html": [ "3003064bfdf750dc93d84cd4333fd5df6a125320", "support" @@ -233628,10 +234828,62 @@ "9367593c5bfe07afb4629791cf6aab70460dcd4c", "testharness" ], + "bluetooth/requestDevice/acceptAllDevices/device-with-empty-name.https.html": [ + "6e17536a0e3f9d9a0fe6ce075905954b23c83b00", + "testharness" + ], + "bluetooth/requestDevice/acceptAllDevices/device-with-name.https.html": [ + "e212d4609a7f295a564417a22c984c6ddeeeb0c3", + "testharness" + ], + "bluetooth/requestDevice/acceptAllDevices/optional-services-missing.https.html": [ + "899200ebcc741fd99b7c8a4e09cb6877c66c6bf5", + "testharness" + ], + "bluetooth/requestDevice/acceptAllDevices/optional-services-present.https.html": [ + "4478ad0afabf3adcd1f84e8165f1a3f185698974", + "testharness" + ], "bluetooth/resources/bluetooth-helpers.js": [ - "a89b9f07d38edf54e81d009aa94473e756110847", + "bb8e5f352bdaff51bf56c366f30f99c9f1672925", "support" ], + "bluetooth/resources/health-thermometer-iframe.html": [ + "badf5e78964f9979d6870c08fb78eb3987027c00", + "support" + ], + "bluetooth/server/connect/connection-succeeds.https.html": [ + "16fe2bccd7e8f8f626222cc49c1df70401463f3a", + "testharness" + ], + "bluetooth/server/connect/garbage-collection-ran-during-success.https.html": [ + "ff136c9e9b463cb8c545a6f51433743347a50db6", + "testharness" + ], + "bluetooth/server/connect/get-same-gatt-server.https.html": [ + "8f7a9a177770c9a44ed5e6fe8f3833ef18a60c1d", + "testharness" + ], + "bluetooth/server/device-same-object.https.html": [ + "13abe70e2d5bf768007a2c6e4119ebfe086d38aa", + "testharness" + ], + "bluetooth/server/disconnect/connect-disconnect-twice.https.html": [ + "04b2728be0ed8044629828f015b0d4f78dab6031", + "testharness" + ], + "bluetooth/server/disconnect/detach-gc.https.html": [ + "8e9e10665b091c6a7817e1b7d058e48c12163dbd", + "testharness" + ], + "bluetooth/server/disconnect/disconnect-twice-in-a-row.https.html": [ + "26efe3bc26f792baf0ff087d02730be62cc80f0b", + "testharness" + ], + "bluetooth/server/disconnect/gc-detach.https.html": [ + "e673c3120276ffb6a4e8d03f47b049ff72ac0a9c", + "testharness" + ], "bluetooth/service/getCharacteristic/characteristic-found.https.html": [ "1861b9bde75f02ed8d7375b97946149ff1c4bf0a", "testharness" @@ -250656,6 +251908,14 @@ "0ab3cfb39cd0348b7e28ed7b1405f0c3490808a7", "visual" ], + "css/css-backgrounds/background-clip/clip-rounded-corner-ref.html": [ + "d58d1e2f9fed2d5331db9aaeaeb50e4b3f26a1e6", + "support" + ], + "css/css-backgrounds/background-clip/clip-rounded-corner.html": [ + "ea68b7be35cb2637bad30119a2d1ee9734dc63ff", + "reftest" + ], "css/css-backgrounds/background-clip/list.txt": [ "51b104b69911943bc5469c093046d5c0eb45334a", "support" @@ -250716,6 +251976,14 @@ "b0231f487c5d467ac707eb91dcdd561462a54ca1", "reftest" ], + "css/css-backgrounds/background-image-centered-ref.html": [ + "655c4a1f457630f0788d4d4eae465d757b26c6df", + "support" + ], + "css/css-backgrounds/background-image-centered.html": [ + "dfb5aed73f04867336a353a53698ba851b2a1da8", + "reftest" + ], "css/css-backgrounds/background-image-first-letter.html": [ "7e296a53a2abebcd5fcee2431b182efe6f148c64", "reftest" @@ -254624,6 +255892,18 @@ "056b3597f3555c803c74a8f6277a06626efd12ea", "reftest" ], + "css/css-content/element-replacement-ref.html": [ + "f1ad3fca133b1b671e45ae1307fbe9454c40e3ec", + "support" + ], + "css/css-content/element-replacement.html": [ + "f491ddf2b3062ea2f9b616c968c88b9cc95f22eb", + "reftest" + ], + "css/css-content/resources/rect.svg": [ + "e0c37ea653aee58f962133219edc4484a734c6e0", + "support" + ], "css/css-display/OWNERS": [ "26cb5921a61ea01fff54a7e4b35e7929aa5a6cab", "support" @@ -254876,6 +256156,10 @@ "0a689fbe90be794772c66d59b033d15336e6dfe3", "reftest" ], + "css/css-display/display-contents-svg-anchor-child.html": [ + "1debf3811cad0a1ef22a06744c9906cf96c2d990", + "testharness" + ], "css/css-display/display-contents-svg-elements-ref.html": [ "3e4ddf5f740d8fa688bcbb24201be0a6d4349017", "support" @@ -254884,6 +256168,10 @@ "93573e17090a860bb09c2a208d925afac9cb17fd", "reftest" ], + "css/css-display/display-contents-svg-switch-child.html": [ + "4095a2c5035f4758fc0ed52dd9684efaded2615e", + "testharness" + ], "css/css-display/display-contents-table-001-ref.html": [ "9de4ee8151dbfa3c8e2c381ddd213e51b04f70c1", "support" @@ -254904,6 +256192,10 @@ "073573175b4ef24f0ba26ae7456e161f775a7d40", "reftest" ], + "css/css-display/display-contents-text-inherit-002.html": [ + "4ab5c9c2b6c5a0c5e148e550ef16662e6b3575b0", + "reftest" + ], "css/css-display/display-contents-text-inherit-ref.html": [ "b248e78a0255b923c4ed4aa269e65f53b6386bf4", "support" @@ -281292,6 +282584,14 @@ "53394d04d67fa9526240c2c0af8b71f54a60a0c3", "testharness" ], + "css/css-typed-om/the-stylepropertymap/interface-expected.txt": [ + "ed92b2671b88a2f983389b2027ddf050eea4f152", + "support" + ], + "css/css-typed-om/the-stylepropertymap/interface.html": [ + "73aac61c85d142f38b871ef21c8ce75bd468cf40", + "testharness" + ], "css/css-ui/OWNERS": [ "c9e05453fc137fdb2a4e99030acfbd06490384c2", "support" @@ -296648,10 +297948,6 @@ "17630a28cb89baf746841d8cd9d61370b6183f63", "testharness" ], - "dom/lists/DOMTokenList-coverage-for-attributes-expected.txt": [ - "c01374e03c3005c424f87ce9ce8f9184272bdc23", - "support" - ], "dom/lists/DOMTokenList-coverage-for-attributes.html": [ "ef209cd9285ddaaaa1c09d3448607070332bedf7", "testharness" @@ -298112,6 +299408,10 @@ "b62d4cf898f819ccaf02769de3af12cdc80cea7e", "testharness" ], + "domparsing/xmldomparser.html": [ + "bf343e8d7f4488fc2e2755fc2dc3c8fc83a8cb17", + "testharness" + ], "domxpath/001-expected.txt": [ "940467b338503727c4bfae21fba04eeb23047931", "support" @@ -304305,7 +305605,7 @@ "testharness" ], "html/browsers/history/the-location-interface/location-stringifier-expected.txt": [ - "599c705b4070efbf4e035e5d67b7d7afa8e8edbb", + "df267f46310b44be5774469e5d3116c5866d314b", "support" ], "html/browsers/history/the-location-interface/location-stringifier.html": [ @@ -307276,10 +308576,6 @@ "a4f99553c0cdf1c1efab08c85b9e3211b42d5412", "support" ], - "html/dom/historical-expected.txt": [ - "810ed84324e124a97eeede13ca2ef7e0950c3f8f", - "support" - ], "html/dom/historical.html": [ "75fd4e5379337af2ebcb3cd7d62dbf3d726c4036", "testharness" @@ -307289,7 +308585,7 @@ "support" ], "html/dom/interfaces-expected.txt": [ - "4eb59fc2e81fd59d55b5dda15d36db023469fb40", + "04e70a3f7a538f45286bd619412e91e0f3c64440", "support" ], "html/dom/interfaces.html": [ @@ -316705,11 +318001,11 @@ "testharness" ], "html/semantics/forms/the-input-element/datetime-local-expected.txt": [ - "09bff1b6f5b64d8894734f7f48ea4d5064376516", + "c1a22926273bb7075ed014eba165bef59a436fda", "support" ], "html/semantics/forms/the-input-element/datetime-local.html": [ - "7fe3ab2bd5a8d60e11d08460286ee8f02943b769", + "382370387908b4625474b410621497a76476a0cf", "testharness" ], "html/semantics/forms/the-input-element/datetime.html": [ @@ -320136,6 +321432,10 @@ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" ], + "html/semantics/text-level-semantics/the-area-element/rellist-feature-detection.html": [ + "e328666c9e386349db0cf51bee0838d2dcb83415", + "testharness" + ], "html/semantics/text-level-semantics/the-b-element/.gitkeep": [ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" @@ -322340,6 +323640,10 @@ "7b5749e1fece69552e0a8bfac7af401fac15394d", "support" ], + "interfaces/xhr.idl": [ + "5363c96002f96f796f4800b92f8748b1141f0821", + "support" + ], "intersection-observer/OWNERS": [ "dc52b7ff711a8b5c1237d9af34d21e0e2bc6e548", "support" @@ -322465,31 +323769,31 @@ "support" ], "keyboard-lock/idlharness.https-expected.txt": [ - "969b9fe3ad9d959ef9dee5c26d27ca7a4c6efafb", + "91c34bcea13f87b60767638ac7c75f22af165aa7", "support" ], "keyboard-lock/idlharness.https.html": [ - "bcaf4f063cd423d5fb0e1055761e8880e4b63220", + "4b41c1c46a8f7d2374d0ff9d796f3f938c1f74d8", "testharness" ], - "keyboard-lock/navigator-cancelKeyboardLock.https.html": [ - "5109eb45591bba9ce48d3db91fa02c0590397886", - "testharness" - ], - "keyboard-lock/navigator-requestKeyboardLock-two-parallel-requests.https-expected.txt": [ - "723e8f552f3dd5279429b9b9c7114d77901886e2", + "keyboard-lock/navigator-keyboardLock-two-parallel-requests.https-expected.txt": [ + "af872a5883eb5fa822332dca2aaa803fda9bcc26", "support" ], - "keyboard-lock/navigator-requestKeyboardLock-two-parallel-requests.https.html": [ - "6a05080698fbeff768c4f5c85dbbc89cf3cfa09a", + "keyboard-lock/navigator-keyboardLock-two-parallel-requests.https.html": [ + "ee6fe59233abea9325bf7f5e14c1472a72e45a11", "testharness" ], - "keyboard-lock/navigator-requestKeyboardLock-two-sequential-requests.https.html": [ - "79ed9f93e2f72bf8e11d04e25c6fa847c91971e4", + "keyboard-lock/navigator-keyboardLock-two-sequential-requests.https.html": [ + "02ad8f54b7cebed96553bd96bbd7e8fc0227d3b1", "testharness" ], - "keyboard-lock/navigator-requestKeyboardLock.https.html": [ - "6f8091035f4aa18131c548a81cbe80ba328169c9", + "keyboard-lock/navigator-keyboardLock.https.html": [ + "572f4e827bc3807f4c71641e102d7bac9df3e391", + "testharness" + ], + "keyboard-lock/navigator-keyboardUnlock.https.html": [ + "c4de12456714a34fb791b070304da31c99da080f", "testharness" ], "longtask-timing/OWNERS": [ @@ -332760,7 +334064,7 @@ "f64f2ab5d0afa93e5adfa327e478936c0e295823", "support" ], - "quirks-mode/OWNERS": [ + "quirks/OWNERS": [ "bec450f77cd9a3a2f278cc41724ae55f23b883a3", "support" ], @@ -340461,11 +341765,27 @@ "testharness" ], "resource-timing/resource_connection_reuse.html": [ - "8ab91aeb45b1db42af8c87681fcd793d71f05254", + "b20162d02cad807fc2b250b7d73042822fcb9030", + "testharness" + ], + "resource-timing/resource_dedicated_worker.html": [ + "8a4f853bdffe110bc15c04aaed4d4436a5ea3a23", "testharness" ], "resource-timing/resource_dynamic_insertion.html": [ - "1b6e111056101c88623eda6148042c310a5b7a6d", + "a6cd75583f6363a83b18f1bc77d89821de344ff7", + "testharness" + ], + "resource-timing/resource_frame_initiator_type.html": [ + "dcea1111a2c9a40a1d3de7246a5295e84dcf08b5", + "testharness" + ], + "resource-timing/resource_ignore_data_url.html": [ + "f8513b4ae7cc26c07cea1c16d872e0594f05041c", + "testharness" + ], + "resource-timing/resource_ignore_failures.html": [ + "c22e136e1c942a2fd652985a660ca0acd6c3a8b6", "testharness" ], "resource-timing/resource_subframe_self_navigation.html": [ @@ -340476,6 +341796,10 @@ "9e8051a2ff8fff72b36ed1cecb61f9e7bba29071", "support" ], + "resource-timing/resources/blank_page_green.htm": [ + "2d6d55d85e17a9fe978db6dbe25ae35a599d5683", + "support" + ], "resource-timing/resources/blue.png": [ "99949c515749e66f471c3589ee7a0ef518aaccb5", "support" @@ -340488,6 +341812,10 @@ "09568d5f64474184cde594a47e26e374bcc8ac4d", "support" ], + "resource-timing/resources/green_frame.htm": [ + "08f8ca19b61ab0ac68014d5b406a952669fbe104", + "support" + ], "resource-timing/resources/gzip_xml.py": [ "cf637a4389fd259dee3a2df56194a68b3744b4c6", "support" @@ -340568,6 +341896,10 @@ "59692fb2ebe890d65acba54aa2f814fcf9b46d39", "support" ], + "resource-timing/resources/worker_with_images.js": [ + "161473f1cd2157a69c506c80dba6ef25f76122ee", + "support" + ], "resource-timing/single-entry-per-resource.html": [ "e23e9cab8d42a3bb6b0635cd3916d9131ccc6ba2", "testharness" @@ -340577,7 +341909,7 @@ "testharness" ], "resource-timing/test_resource_timing.js": [ - "504f20a00b7be9c3b15666dfe34df02856a8bc72", + "a68dca4f542588b705f126df73dfad8c88c69506", "support" ], "screen-orientation/OWNERS": [ @@ -340940,8 +342272,684 @@ "ed768e3cc679a1fef5c47088443fdaec83838394", "support" ], + "server-timing/resources/parsing/0.js": [ + "4b374f4e2751e3c75af68df671c0287e41d617ae", + "support" + ], + "server-timing/resources/parsing/0.js.sub.headers": [ + "17fa2c18304bcee509c7786fd34e456994360a10", + "support" + ], + "server-timing/resources/parsing/1.js": [ + "1a6924ba411a7f92aef048336bd117ece499f90a", + "support" + ], + "server-timing/resources/parsing/1.js.sub.headers": [ + "1f65859f60eea48564091b7f853e3a1c306d91fe", + "support" + ], + "server-timing/resources/parsing/10.js": [ + "1a6924ba411a7f92aef048336bd117ece499f90a", + "support" + ], + "server-timing/resources/parsing/10.js.sub.headers": [ + "adf8886166350be375d41de58da0d8a72ae8d2ce", + "support" + ], + "server-timing/resources/parsing/11.js": [ + "1a6924ba411a7f92aef048336bd117ece499f90a", + "support" + ], + "server-timing/resources/parsing/11.js.sub.headers": [ + "20c6f242511b2055249eb7bfb0e775af483a6c40", + "support" + ], + "server-timing/resources/parsing/12.js": [ + "1c6ca0aa58035fba39cfe8284c04468787149469", + "support" + ], + "server-timing/resources/parsing/12.js.sub.headers": [ + "802c68f944f30b273d71f59c77289e7d2a08becf", + "support" + ], + "server-timing/resources/parsing/13.js": [ + "266ee41ae7b440ab43e87a087d10fa2b1e193a8f", + "support" + ], + "server-timing/resources/parsing/13.js.sub.headers": [ + "144652b4740f0d42e3ff0685eaac5c4c1223ddfb", + "support" + ], + "server-timing/resources/parsing/14.js": [ + "b45df4c8581d127f4738887a009611092e06fae9", + "support" + ], + "server-timing/resources/parsing/14.js.sub.headers": [ + "ef0ce7496aecd6c2efc4eee9e8a2b35723f68dcd", + "support" + ], + "server-timing/resources/parsing/15.js": [ + "57529824e71a124c2ff69e9153163de9f4c3433d", + "support" + ], + "server-timing/resources/parsing/15.js.sub.headers": [ + "d686b34f5a4b3ca534ad55ca36a0c10775f21212", + "support" + ], + "server-timing/resources/parsing/16.js": [ + "8d82b5abff0bfc1884a350836cb27c8b124129bd", + "support" + ], + "server-timing/resources/parsing/16.js.sub.headers": [ + "aa781c76e32bfaa1a0e05cd2202b3e4e3ce28b35", + "support" + ], + "server-timing/resources/parsing/17.js": [ + "b45df4c8581d127f4738887a009611092e06fae9", + "support" + ], + "server-timing/resources/parsing/17.js.sub.headers": [ + "d8b7e49b673a39e6028b8aeb6241a3be5fa79935", + "support" + ], + "server-timing/resources/parsing/18.js": [ + "e37a27e8de7cb0d7da20de4b4738f868321f4f7d", + "support" + ], + "server-timing/resources/parsing/18.js.sub.headers": [ + "19ea20ca46a0dd73a0f22175c03ea1aa5bfdb560", + "support" + ], + "server-timing/resources/parsing/19.js": [ + "945c0786a390786f6bc648fb80ffe2da2c14c4b1", + "support" + ], + "server-timing/resources/parsing/19.js.sub.headers": [ + "602127ea29736860e5291c9243d2de54c06a1b7c", + "support" + ], + "server-timing/resources/parsing/2.js": [ + "1bc5932490ce45826ee11e124924c9588b3e8c4d", + "support" + ], + "server-timing/resources/parsing/2.js.sub.headers": [ + "49c763e3a400aaa6bc19e02188496a94b952b7f2", + "support" + ], + "server-timing/resources/parsing/20.js": [ + "6c2c1b45ab69ed8b1da28849accaa69a99d07340", + "support" + ], + "server-timing/resources/parsing/20.js.sub.headers": [ + "c9003e0ef6e05d0aa3066a06ae404da09d0d1ca8", + "support" + ], + "server-timing/resources/parsing/21.js": [ + "6c2c1b45ab69ed8b1da28849accaa69a99d07340", + "support" + ], + "server-timing/resources/parsing/21.js.sub.headers": [ + "babbb8839dae15581d70d50133b7e7dcecb72c60", + "support" + ], + "server-timing/resources/parsing/22.js": [ + "6c2c1b45ab69ed8b1da28849accaa69a99d07340", + "support" + ], + "server-timing/resources/parsing/22.js.sub.headers": [ + "60656825b940e844d5b658b15a558d4bf8aeb5a2", + "support" + ], + "server-timing/resources/parsing/23.js": [ + "6c2c1b45ab69ed8b1da28849accaa69a99d07340", + "support" + ], + "server-timing/resources/parsing/23.js.sub.headers": [ + "fb73ea7ff1d6c98cf18e8cdc9ae2106988a3c5cd", + "support" + ], + "server-timing/resources/parsing/24.js": [ + "6c2c1b45ab69ed8b1da28849accaa69a99d07340", + "support" + ], + "server-timing/resources/parsing/24.js.sub.headers": [ + "b63c644ae9025bce231ff4d3be572e4f5968d1e1", + "support" + ], + "server-timing/resources/parsing/25.js": [ + "6c2c1b45ab69ed8b1da28849accaa69a99d07340", + "support" + ], + "server-timing/resources/parsing/25.js.sub.headers": [ + "8761b10c42d5117d5917cd2bafff717f0a5e0d3a", + "support" + ], + "server-timing/resources/parsing/26.js": [ + "6c2c1b45ab69ed8b1da28849accaa69a99d07340", + "support" + ], + "server-timing/resources/parsing/26.js.sub.headers": [ + "a25b4947fb552c63ffc4bebcde9748d8b5d3654e", + "support" + ], + "server-timing/resources/parsing/27.js": [ + "6c2c1b45ab69ed8b1da28849accaa69a99d07340", + "support" + ], + "server-timing/resources/parsing/27.js.sub.headers": [ + "6256524e6218d7f1da03ffde037c3808cd09ee64", + "support" + ], + "server-timing/resources/parsing/28.js": [ + "6c2c1b45ab69ed8b1da28849accaa69a99d07340", + "support" + ], + "server-timing/resources/parsing/28.js.sub.headers": [ + "15bf03440d58c800a88a9bbc493889803e2962e1", + "support" + ], + "server-timing/resources/parsing/29.js": [ + "6c2c1b45ab69ed8b1da28849accaa69a99d07340", + "support" + ], + "server-timing/resources/parsing/29.js.sub.headers": [ + "d61f4f751e96db5f3fb2668d581fb04442545adf", + "support" + ], + "server-timing/resources/parsing/3.js": [ + "1bc5932490ce45826ee11e124924c9588b3e8c4d", + "support" + ], + "server-timing/resources/parsing/3.js.sub.headers": [ + "e37b008d0de07fdd300f0fef181cfaaac0c2ac9f", + "support" + ], + "server-timing/resources/parsing/30.js": [ + "6c2c1b45ab69ed8b1da28849accaa69a99d07340", + "support" + ], + "server-timing/resources/parsing/30.js.sub.headers": [ + "68899f453cbe896880b91add876a2dcf0aa7862c", + "support" + ], + "server-timing/resources/parsing/31.js": [ + "6c2c1b45ab69ed8b1da28849accaa69a99d07340", + "support" + ], + "server-timing/resources/parsing/31.js.sub.headers": [ + "23aa6e0121b3efbd010187aef45ec1e343dcc6f8", + "support" + ], + "server-timing/resources/parsing/32.js": [ + "6c2c1b45ab69ed8b1da28849accaa69a99d07340", + "support" + ], + "server-timing/resources/parsing/32.js.sub.headers": [ + "13f8e002a56499f19d248968d4da2446c457818c", + "support" + ], + "server-timing/resources/parsing/33.js": [ + "6c2c1b45ab69ed8b1da28849accaa69a99d07340", + "support" + ], + "server-timing/resources/parsing/33.js.sub.headers": [ + "3d4b4717629e4564e7e86a8b98eeee76b4278e2e", + "support" + ], + "server-timing/resources/parsing/34.js": [ + "6c2c1b45ab69ed8b1da28849accaa69a99d07340", + "support" + ], + "server-timing/resources/parsing/34.js.sub.headers": [ + "b34910643944972a5fd3cd4323c3e460b764acd6", + "support" + ], + "server-timing/resources/parsing/35.js": [ + "6c2c1b45ab69ed8b1da28849accaa69a99d07340", + "support" + ], + "server-timing/resources/parsing/35.js.sub.headers": [ + "f9055d1f55a5fdb38691374bd7de69b45d979e27", + "support" + ], + "server-timing/resources/parsing/36.js": [ + "6c2c1b45ab69ed8b1da28849accaa69a99d07340", + "support" + ], + "server-timing/resources/parsing/36.js.sub.headers": [ + "87fe726634ad6dae4e348db74a6c64fa19929638", + "support" + ], + "server-timing/resources/parsing/37.js": [ + "6c2c1b45ab69ed8b1da28849accaa69a99d07340", + "support" + ], + "server-timing/resources/parsing/37.js.sub.headers": [ + "39fd3379982b21de04a3c280ba4fcdfe84a4e55d", + "support" + ], + "server-timing/resources/parsing/38.js": [ + "6c2c1b45ab69ed8b1da28849accaa69a99d07340", + "support" + ], + "server-timing/resources/parsing/38.js.sub.headers": [ + "0b4fa5ed0edc8378cc8ce4c482a49f8a02b8dbd2", + "support" + ], + "server-timing/resources/parsing/39.js": [ + "6c2c1b45ab69ed8b1da28849accaa69a99d07340", + "support" + ], + "server-timing/resources/parsing/39.js.sub.headers": [ + "19af60081837aa38b2d14bbe55f1210d3dd75e72", + "support" + ], + "server-timing/resources/parsing/4.js": [ + "b45df4c8581d127f4738887a009611092e06fae9", + "support" + ], + "server-timing/resources/parsing/4.js.sub.headers": [ + "3449afe167f6e32a27f682e79ba8aa19d3e5be64", + "support" + ], + "server-timing/resources/parsing/40.js": [ + "6c2c1b45ab69ed8b1da28849accaa69a99d07340", + "support" + ], + "server-timing/resources/parsing/40.js.sub.headers": [ + "d822691ba762df6d798567a2610e9973bca07236", + "support" + ], + "server-timing/resources/parsing/41.js": [ + "6c2c1b45ab69ed8b1da28849accaa69a99d07340", + "support" + ], + "server-timing/resources/parsing/41.js.sub.headers": [ + "b72a4f5360c93e53338c25ba40e9993859424159", + "support" + ], + "server-timing/resources/parsing/42.js": [ + "6c2c1b45ab69ed8b1da28849accaa69a99d07340", + "support" + ], + "server-timing/resources/parsing/42.js.sub.headers": [ + "973f84b410e397abf7123fe86e03b14684b5b0fb", + "support" + ], + "server-timing/resources/parsing/43.js": [ + "dcf2d8477422cfa60c7eb5da68629925fcc653e2", + "support" + ], + "server-timing/resources/parsing/43.js.sub.headers": [ + "d6fba3c154dce3d074e1e38c744e291a0c4f9e51", + "support" + ], + "server-timing/resources/parsing/44.js": [ + "6c2c1b45ab69ed8b1da28849accaa69a99d07340", + "support" + ], + "server-timing/resources/parsing/44.js.sub.headers": [ + "c447cfda7cf55ee2384842b45a604412e403d8ec", + "support" + ], + "server-timing/resources/parsing/45.js": [ + "72dcb467c3d7fb4a2491a0ba68b612a4033738f3", + "support" + ], + "server-timing/resources/parsing/45.js.sub.headers": [ + "ba5cdefb1d89a1ab8b0a556f15ce1f7b722e9a45", + "support" + ], + "server-timing/resources/parsing/46.js": [ + "6c2c1b45ab69ed8b1da28849accaa69a99d07340", + "support" + ], + "server-timing/resources/parsing/46.js.sub.headers": [ + "aa0c172f597b9b669fb32823e2dc99147a164387", + "support" + ], + "server-timing/resources/parsing/47.js": [ + "6c2c1b45ab69ed8b1da28849accaa69a99d07340", + "support" + ], + "server-timing/resources/parsing/47.js.sub.headers": [ + "34fbb72ad299b3f8da81a55d3357b29b3fb19077", + "support" + ], + "server-timing/resources/parsing/48.js": [ + "6c2c1b45ab69ed8b1da28849accaa69a99d07340", + "support" + ], + "server-timing/resources/parsing/48.js.sub.headers": [ + "c893b1918c565f30f6afeac72507636c1181fc6b", + "support" + ], + "server-timing/resources/parsing/49.js": [ + "6c2c1b45ab69ed8b1da28849accaa69a99d07340", + "support" + ], + "server-timing/resources/parsing/49.js.sub.headers": [ + "11e6ee5677c66ee62c1c973f5a4a455e178666ef", + "support" + ], + "server-timing/resources/parsing/5.js": [ + "b45df4c8581d127f4738887a009611092e06fae9", + "support" + ], + "server-timing/resources/parsing/5.js.sub.headers": [ + "d8b7e49b673a39e6028b8aeb6241a3be5fa79935", + "support" + ], + "server-timing/resources/parsing/50.js": [ + "71068640ee55f176c283ce788237e26059c043c5", + "support" + ], + "server-timing/resources/parsing/50.js.sub.headers": [ + "4e80dc4689ac1622f9df3cfde8f2667c0c334b14", + "support" + ], + "server-timing/resources/parsing/51.js": [ + "1c6ca0aa58035fba39cfe8284c04468787149469", + "support" + ], + "server-timing/resources/parsing/51.js.sub.headers": [ + "1ff4aed6798c6dfe7b22e11ffbd7db7fbe2e248f", + "support" + ], + "server-timing/resources/parsing/52.js": [ + "d0a406b076d345dc36d1792781bd078fb9b65ef3", + "support" + ], + "server-timing/resources/parsing/52.js.sub.headers": [ + "1191714a3f2cdb14c10d7b7f7637bb7fb331826d", + "support" + ], + "server-timing/resources/parsing/53.js": [ + "235f1ee6973489be765e8edec753b94c9f6d5773", + "support" + ], + "server-timing/resources/parsing/53.js.sub.headers": [ + "ce3c065722c2f84b4ea8c958465db0cbfac3046a", + "support" + ], + "server-timing/resources/parsing/54.js": [ + "235f1ee6973489be765e8edec753b94c9f6d5773", + "support" + ], + "server-timing/resources/parsing/54.js.sub.headers": [ + "4d2f64fb627d52fb965fba226648b0078f90e732", + "support" + ], + "server-timing/resources/parsing/55.js": [ + "2209fc9eff24dc4f0d7df2f31e5911dd4e05d78d", + "support" + ], + "server-timing/resources/parsing/55.js.sub.headers": [ + "735e9c9e7e9b4a54a8da1f1ed1893c67a0e5e66e", + "support" + ], + "server-timing/resources/parsing/56.js": [ + "1bc5932490ce45826ee11e124924c9588b3e8c4d", + "support" + ], + "server-timing/resources/parsing/56.js.sub.headers": [ + "e44253ff3485c86895c3b3bcf60633d73136a0a9", + "support" + ], + "server-timing/resources/parsing/57.js": [ + "235f1ee6973489be765e8edec753b94c9f6d5773", + "support" + ], + "server-timing/resources/parsing/57.js.sub.headers": [ + "653481a7bb1305cc776531b990651fd5570ddaed", + "support" + ], + "server-timing/resources/parsing/58.js": [ + "3fddff4eee055bf54f23be4ddd0e277cb79d492d", + "support" + ], + "server-timing/resources/parsing/58.js.sub.headers": [ + "9f9c4e085f0bdc083314fb97d4f485fd7ccf259c", + "support" + ], + "server-timing/resources/parsing/59.js": [ + "63d1c9fc862e586f387e1715c47c14075b9dc39e", + "support" + ], + "server-timing/resources/parsing/59.js.sub.headers": [ + "86c7827becd92238fde74e13321031e48240f8e0", + "support" + ], + "server-timing/resources/parsing/6.js": [ + "1c6ca0aa58035fba39cfe8284c04468787149469", + "support" + ], + "server-timing/resources/parsing/6.js.sub.headers": [ + "2810bd2697637785f251aacb3af4704fe3b612fe", + "support" + ], + "server-timing/resources/parsing/60.js": [ + "63d1c9fc862e586f387e1715c47c14075b9dc39e", + "support" + ], + "server-timing/resources/parsing/60.js.sub.headers": [ + "8bd1fc4b0ede3ae2d20ecaa2f1133b2a7951b48b", + "support" + ], + "server-timing/resources/parsing/61.js": [ + "3560177cc96b27c6ca4dfd3f4755685f067a9c77", + "support" + ], + "server-timing/resources/parsing/61.js.sub.headers": [ + "2cb76e965e4e10e84dc39f7a367171209a7f1c58", + "support" + ], + "server-timing/resources/parsing/62.js": [ + "3560177cc96b27c6ca4dfd3f4755685f067a9c77", + "support" + ], + "server-timing/resources/parsing/62.js.sub.headers": [ + "6ca23860d81e08d87342e5fdc0bdc1b191dfb427", + "support" + ], + "server-timing/resources/parsing/63.js": [ + "5c07fca48386d2d35c248c2053a7cb426ade6b7b", + "support" + ], + "server-timing/resources/parsing/63.js.sub.headers": [ + "4296079454e413eabe5e48799183d37955b25f14", + "support" + ], + "server-timing/resources/parsing/64.js": [ + "df2fb9e4e7999d2bda0c6e435b541fa37a55c788", + "support" + ], + "server-timing/resources/parsing/64.js.sub.headers": [ + "162b4c31d0a7894d2d16a8000694171132384a27", + "support" + ], + "server-timing/resources/parsing/65.js": [ + "5c07fca48386d2d35c248c2053a7cb426ade6b7b", + "support" + ], + "server-timing/resources/parsing/65.js.sub.headers": [ + "889218df84c44751603a94f889abd7f0d4275408", + "support" + ], + "server-timing/resources/parsing/66.js": [ + "df2fb9e4e7999d2bda0c6e435b541fa37a55c788", + "support" + ], + "server-timing/resources/parsing/66.js.sub.headers": [ + "95a5d28f5fc8519b09676ac1fd92bfae2d3fe211", + "support" + ], + "server-timing/resources/parsing/67.js": [ + "1a6924ba411a7f92aef048336bd117ece499f90a", + "support" + ], + "server-timing/resources/parsing/67.js.sub.headers": [ + "8c13333e069ade7cd299d89d4f4e49ea0cc13aa8", + "support" + ], + "server-timing/resources/parsing/68.js": [ + "b5b95d8349cbbc3b92edb61891608b04d004527b", + "support" + ], + "server-timing/resources/parsing/68.js.sub.headers": [ + "3267edb59ffdfcb7994cad0b0b82fbd1f96295e0", + "support" + ], + "server-timing/resources/parsing/69.js": [ + "235f1ee6973489be765e8edec753b94c9f6d5773", + "support" + ], + "server-timing/resources/parsing/69.js.sub.headers": [ + "70735c24c164159739a7d33353715910b7058266", + "support" + ], + "server-timing/resources/parsing/7.js": [ + "266ee41ae7b440ab43e87a087d10fa2b1e193a8f", + "support" + ], + "server-timing/resources/parsing/7.js.sub.headers": [ + "4f66fcaa07aaf41da5597d9a051768239cf9046d", + "support" + ], + "server-timing/resources/parsing/70.js": [ + "1a6924ba411a7f92aef048336bd117ece499f90a", + "support" + ], + "server-timing/resources/parsing/70.js.sub.headers": [ + "eadacef5c09ddfe284c1b04eb88d1ee7b58406b7", + "support" + ], + "server-timing/resources/parsing/71.js": [ + "4b374f4e2751e3c75af68df671c0287e41d617ae", + "support" + ], + "server-timing/resources/parsing/71.js.sub.headers": [ + "262f7940893d9dc71881c4dd05a3abc632e164a6", + "support" + ], + "server-timing/resources/parsing/72.js": [ + "4b374f4e2751e3c75af68df671c0287e41d617ae", + "support" + ], + "server-timing/resources/parsing/72.js.sub.headers": [ + "86acd52721c5aaa6ed6069f192e8be53e61fa691", + "support" + ], + "server-timing/resources/parsing/73.js": [ + "4b374f4e2751e3c75af68df671c0287e41d617ae", + "support" + ], + "server-timing/resources/parsing/73.js.sub.headers": [ + "3cd0b25e1eda63ec48390f3aeb5e7b62afe64dab", + "support" + ], + "server-timing/resources/parsing/74.js": [ + "4b374f4e2751e3c75af68df671c0287e41d617ae", + "support" + ], + "server-timing/resources/parsing/74.js.sub.headers": [ + "3a340394523d7772baa452e4c02f1b428898d9a7", + "support" + ], + "server-timing/resources/parsing/75.js": [ + "4b374f4e2751e3c75af68df671c0287e41d617ae", + "support" + ], + "server-timing/resources/parsing/75.js.sub.headers": [ + "7776357b71f9ff29156489833884bd9263db23b0", + "support" + ], + "server-timing/resources/parsing/76.js": [ + "4b374f4e2751e3c75af68df671c0287e41d617ae", + "support" + ], + "server-timing/resources/parsing/76.js.sub.headers": [ + "62fc9db1810ab0c4c4154f91195cdb29d3e6ac4f", + "support" + ], + "server-timing/resources/parsing/77.js": [ + "4b374f4e2751e3c75af68df671c0287e41d617ae", + "support" + ], + "server-timing/resources/parsing/77.js.sub.headers": [ + "3b60dd6d0bf7c97a468d8a05afcadd29ec769349", + "support" + ], + "server-timing/resources/parsing/78.js": [ + "4b374f4e2751e3c75af68df671c0287e41d617ae", + "support" + ], + "server-timing/resources/parsing/78.js.sub.headers": [ + "66b4011969e248d9ab872bea30776b5e7bd72dfb", + "support" + ], + "server-timing/resources/parsing/79.js": [ + "4b374f4e2751e3c75af68df671c0287e41d617ae", + "support" + ], + "server-timing/resources/parsing/79.js.sub.headers": [ + "9496c56d010e4652f3d0a0ff628abaadeb717c15", + "support" + ], + "server-timing/resources/parsing/8.js": [ + "e30f08cfab17bcd0229ebbf0da701f65a193485b", + "support" + ], + "server-timing/resources/parsing/8.js.sub.headers": [ + "4aa86aa36c632e297433b03a6e63516679ff2cfb", + "support" + ], + "server-timing/resources/parsing/80.js": [ + "4b374f4e2751e3c75af68df671c0287e41d617ae", + "support" + ], + "server-timing/resources/parsing/80.js.sub.headers": [ + "bc541f7873810c93ade3ad836a38c4bfe12b7bdb", + "support" + ], + "server-timing/resources/parsing/81.js": [ + "4b374f4e2751e3c75af68df671c0287e41d617ae", + "support" + ], + "server-timing/resources/parsing/81.js.sub.headers": [ + "5bc9a24481b1d2f242d6361cda38d7325c83d6e5", + "support" + ], + "server-timing/resources/parsing/82.js": [ + "4b374f4e2751e3c75af68df671c0287e41d617ae", + "support" + ], + "server-timing/resources/parsing/82.js.sub.headers": [ + "32d55b5dd32ade7283d69fcf242e757d3dc7eb8f", + "support" + ], + "server-timing/resources/parsing/83.js": [ + "4b374f4e2751e3c75af68df671c0287e41d617ae", + "support" + ], + "server-timing/resources/parsing/83.js.sub.headers": [ + "ba24e1d89104fb25d5100dfa0b38388ca19ee9c1", + "support" + ], + "server-timing/resources/parsing/9.js": [ + "30695307f7a50b46a799f3cf6f5763a359acc0ce", + "support" + ], + "server-timing/resources/parsing/9.js.sub.headers": [ + "6a8feff546c8564268b238e01a0470588b4739e7", + "support" + ], + "server-timing/server_timing_header-parsing.html": [ + "15768941cac8f5adeed09e6d204715d5fa59e5aa", + "testharness" + ], "server-timing/test_server_timing.html": [ - "2c8420d5bc6ac45923f0c5cbc43c6bd88caa877c", + "7c778ca856e5cff0bbc785f59c9ccf1ec86456fb", "testharness" ], "server-timing/test_server_timing.html.sub.headers": [ @@ -340949,7 +342957,7 @@ "support" ], "service-workers/OWNERS": [ - "225f4ab96b69415e53dd2c49a2cc74ebf80abbe7", + "c300e23e64caf2740bcbaa7f3942c3a94dee6350", "support" ], "service-workers/cache-storage/OWNERS": [ @@ -345209,7 +347217,7 @@ "support" ], "svg/extensibility/foreignObject/properties.svg": [ - "946999ca1917a5069103c025197c2903ab0bae64", + "974affbb2c135c9aaa7a3f27687157b5e1250a9f", "testharness" ], "svg/extensibility/interfaces/foreignObject-graphics.svg": [ @@ -348404,6 +350412,14 @@ "6ddea8760cbacc775ee99aa700fd71883cfb9bd7", "testharness" ], + "webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https-expected.txt": [ + "e8a42dbbe38c645c9399a65f66b02287c82530ba", + "support" + ], + "webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html": [ + "9a52673bb20dd7eeabd01e6123c90ff181be32ed", + "testharness" + ], "webrtc/RTCPeerConnection-setRemoteDescription-rollback-expected.txt": [ "da39a3ee5e6b4b0d3255bfef95601890afd80709", "support" @@ -348424,6 +350440,14 @@ "2a2e3f9ff0a5912fa260d7124f7f5a9c3862c533", "testharness" ], + "webrtc/RTCPeerConnection-track-stats.https-expected.txt": [ + "83c11e7e45f624cbcea8981b985211a0c6cce90b", + "support" + ], + "webrtc/RTCPeerConnection-track-stats.https.html": [ + "b23329bf967c7640218090d9dc5419ea413cb902", + "testharness" + ], "webrtc/RTCPeerConnectionIceEvent-constructor-expected.txt": [ "b69971c474359a4d07ed7f13cd0c1c19d62f84f6", "support" @@ -348645,7 +350669,7 @@ "support" ], "webrtc/interfaces.https-expected.txt": [ - "5c261e8814dbb935f71cc0fe3158aef00c305b0d", + "5662f20ebd608976c86ccac37ba5ea148efb11c2", "support" ], "webrtc/interfaces.https.html": [ @@ -350129,7 +352153,7 @@ "testharness" ], "webvtt/api/VTTRegion/constructor.html": [ - "0ee58bc32daf656ddc1c8ea6eec84f487b2bf010", + "c002fac0ad6077fe44987393159f7d86c1226e84", "testharness" ], "webvtt/api/VTTRegion/id.html": [ @@ -350140,6 +352164,10 @@ "590cec0b814df0bca2760cde94b2f74b4c9defca", "testharness" ], + "webvtt/api/VTTRegion/non-visible-cue-with-region.html": [ + "e9cec0ce85495b247368cbecea36cd3574241b69", + "testharness" + ], "webvtt/api/VTTRegion/regionAnchorX.html": [ "671153d52e901146f3243e974ad9d26d61031e47", "testharness" @@ -350452,6 +352480,10 @@ "c6384692eb912f3364c5f9b977934c953bc59c3d", "testharness" ], + "webvtt/parsing/file-parsing/tests/header-regions.html": [ + "e2ad0bb6734d39f857d19dbbc9c27c45792b96cd", + "testharness" + ], "webvtt/parsing/file-parsing/tests/header-space.html": [ "da29d0b7044604aa2bb2447a2174e26332958349", "testharness" @@ -350584,6 +352616,10 @@ "d8266e6a426a7acb319a630ad98bcece2cbaf5aa", "support" ], + "webvtt/parsing/file-parsing/tests/support/header-regions.vtt": [ + "5b039c94a8e0bb35832c7301149aeef264873e25", + "support" + ], "webvtt/parsing/file-parsing/tests/support/header-space.vtt": [ "66e466ff574181ace6fc5823f630fe6ebe2a2368", "support" @@ -354717,7 +356753,7 @@ "testharness" ], "xhr/interfaces.html": [ - "a4c597d2bdb85e37ffe5f5ebba961d7f8a3aeb29", + "eb4babf67805d1d65bcbc44c6dcc1cb3ca793695", "testharness" ], "xhr/loadstart-and-state.html": [
diff --git a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/BlobURL/support/file_test1.js b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/BlobURL/support/file_test1.js deleted file mode 100644 index 3498358..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/BlobURL/support/file_test1.js +++ /dev/null
@@ -1 +0,0 @@ -var test_result = 'test1_OK'; \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/BlobURL/support/file_test3.html b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/BlobURL/support/file_test3.html deleted file mode 100644 index fa234cb..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/BlobURL/support/file_test3.html +++ /dev/null
@@ -1,25 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <meta charset="utf-8"> - <title>Test file</title> - <style> - body { - margin: 0; - } - .block { - height: 5000px; - } - </style> - <script> - window.test_result = 'test3_OK'; - </script> -</head> -<body> - <a id="block1"></a> - <div class="block"></div> - - <a id="block2"></a> - <div class="block"></div> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/blob/Blob-Request-revoke-fetch-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/blob/Blob-Request-revoke-fetch-expected.txt deleted file mode 100644 index 0783209..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/blob/Blob-Request-revoke-fetch-expected.txt +++ /dev/null
@@ -1,6 +0,0 @@ -This is a testharness.js-based test. -FAIL Revoke blob URL after creating Request, will fetch promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch" -PASS Revoke blob URL after fetch, will fetch -PASS Revoke blob URL before creating Request, network error (after fetch) -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/blob/Blob-Request-revoke-fetch.html b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/blob/Blob-Request-revoke-fetch.html deleted file mode 100644 index 2cac534..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/blob/Blob-Request-revoke-fetch.html +++ /dev/null
@@ -1,41 +0,0 @@ -<!doctype html> -<title>Revoking blob URL used with Request/fetch</title> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> - -<script> -promise_test(function(t) { - const blob = new Blob(["test"]); - const url = URL.createObjectURL(blob); - const request = new Request(url); - - // Revoke the object URL. Request should take a reference to the blob as - // soon as it receives it in open(), so the request succeeds even though we - // revoke the URL before calling fetch(). - URL.revokeObjectURL(url); - - return fetch(request).then(response => response.text()).then(text => { - assert_equals(text, 'test'); - }); -}, "Revoke blob URL after creating Request, will fetch"); - -promise_test(function(t) { - const blob = new Blob(["test"]); - const url = URL.createObjectURL(blob); - - return fetch(url).then(response => response.text()).then(text => { - assert_equals(text, 'test'); - }); - - // Revoke the object URL. fetch should have already resolved the blob URL. - URL.revokeObjectURL(url); -}, "Revoke blob URL after fetch, will fetch"); - -promise_test(t => { - const blob = new Blob(["test"]); - const url = URL.createObjectURL(blob); - URL.revokeObjectURL(url); - const request = new Request(url); - return promise_rejects(t, new TypeError, fetch(request)); -}, "Revoke blob URL before creating Request, network error (after fetch)") -</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/blob/Blob-XHR-revoke-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/blob/Blob-XHR-revoke-expected.txt deleted file mode 100644 index 742cdc1..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/blob/Blob-XHR-revoke-expected.txt +++ /dev/null
@@ -1,5 +0,0 @@ -This is a testharness.js-based test. -FAIL Revoke blob URL after open(), will fetch assert_equals: expected "test" but got "" -FAIL Revoke blob URL before open(), network error (after send()) assert_unreached: Got unexpected load event Reached unreachable code -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/blob/Blob-XHR-revoke.html b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/blob/Blob-XHR-revoke.html deleted file mode 100644 index a38caaf..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/blob/Blob-XHR-revoke.html +++ /dev/null
@@ -1,38 +0,0 @@ -<!doctype html> -<title>Revoking blob URL used with XMLHttpRequest</title> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> - -<script> -async_test(function(t) { - var blob = new Blob(["test"]); - var url = URL.createObjectURL(blob); - var xhr = new XMLHttpRequest(); - xhr.open("GET", url); - - // Revoke the object URL. XHR should take a reference to the blob as soon as - // it receives it in open(), so the request succeeds even though we revoke the - // URL before calling send(). - URL.revokeObjectURL(url); - - xhr.send(); - - xhr.onload = t.step_func_done(function() { - assert_equals(xhr.response, "test"); - }) - xhr.onerror = t.step_func(function() { - assert_unreached("Got unexpected error event"); - }) -}, "Revoke blob URL after open(), will fetch"); - -async_test(t => { - const blob = new Blob(["test"]), - blobURL = URL.createObjectURL(blob), - client = new XMLHttpRequest - URL.revokeObjectURL(blobURL) - client.open("GET", blobURL) - client.onload = t.step_func(() => assert_unreached("Got unexpected load event")) - client.onerror = t.step_func_done() - client.send() -}, "Revoke blob URL before open(), network error (after send())") -</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/blob-url-in-sandboxed-iframe.html b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/blob-url-in-sandboxed-iframe.html deleted file mode 100644 index 7d032496..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/blob-url-in-sandboxed-iframe.html +++ /dev/null
@@ -1,66 +0,0 @@ -<!doctype html> -<meta charset="utf-8"> -<title>FileAPI Test: Creating Blob URL with Blob</title> -<link rel="author" title="Victor Costan" href="mailto:pwnall@chromium.org"> -<link rel="help" href="https://w3c.github.io/FileAPI/#originOfBlobURL"> -<link rel="help" href="https://html.spec.whatwg.org/multipage/browsers.html#concept-origin"> -<link rel="help" href="https://url.spec.whatwg.org/#url-parsing"> -<link rel="help" href="https://fetch.spec.whatwg.org/#main-fetch"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> - -<style> -iframe { width: 10px; height: 10px; } -</style> - -<iframe id="unconstrained-iframe"></iframe> -<iframe id="sandboxed-iframe" sandbox="allow-scripts"></iframe> - -<script id="iframe-srcdoc" language="text/html"> -<!doctype html> -<script> -'use strict'; - -window.onload = () => { - const blob = new Blob(['Hello world!']); - const blobUrl = URL.createObjectURL(blob); - - fetch(blobUrl).then(response => response.text()).then(text => { - window.parent.postMessage({ blobUrl, text }, '*'); - }); -}; -// The script tag is closed in readBlobFromUrl(). -</script> - -<script> - -// Carries out the test of minting a Blob URL in an iframe, and reading it back. -// -// Returns a promise resolved with an object with properties blobUrl and text -// (the text read back from the Blob URL). -function readBlobFromUrl(t, iframeSelector) { - return new Promise((resolve, reject) => { - window.onmessage = t.step_func((message) => { resolve(message.data); }); - - const frame = document.querySelector(iframeSelector); - const html = document.querySelector('#iframe-srcdoc').textContent + - '<' + '/script>'; - frame.setAttribute('srcdoc', html); - }); -} - -promise_test(t => readBlobFromUrl(t, '#unconstrained-iframe').then(data => { - assert_true(data.blobUrl.startsWith('blob:'), - "The Blob's URL should use the blob: scheme"); - assert_equals(data.text, 'Hello world!', - "The result of reading the Blob's URL should be the Blob's contents"); -}), 'reading a Blob URL in an unconstrained iframe'); - -promise_test(t => readBlobFromUrl(t, '#sandboxed-iframe').then(data => { - assert_true(data.blobUrl.startsWith('blob:'), - "The Blob's URL should use the blob: scheme"); - assert_equals(data.text, 'Hello world!', - "The result of reading the Blob's URL should be the Blob's contents"); -}), 'reading a Blob URL in a sandboxed iframe without the same-origin flag'); - -</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/cross-global-revoke.sub-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/cross-global-revoke.sub-expected.txt new file mode 100644 index 0000000..77b66fd --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/cross-global-revoke.sub-expected.txt
@@ -0,0 +1,6 @@ +This is a testharness.js-based test. +FAIL It is possible to revoke same-origin blob URLs from different frames. assert_unreached: Should have rejected: undefined Reached unreachable code +FAIL It is possible to revoke same-origin blob URLs from a different worker global. assert_unreached: Should have rejected: undefined Reached unreachable code +PASS It is not possible to revoke cross-origin blob URLs. +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/cross-global-revoke.sub.html b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/cross-global-revoke.sub.html new file mode 100644 index 0000000..f39a8be --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/cross-global-revoke.sub.html
@@ -0,0 +1,61 @@ +<!doctype html> +<meta charset="utf-8"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<script> +async_test(t => { + const blob_contents = 'test blob contents'; + const blob = new Blob([blob_contents]); + const url = URL.createObjectURL(blob); + const frame = document.createElement('iframe'); + frame.setAttribute('style', 'display:none;'); + frame.src = 'resources/revoke-helper.html'; + document.body.appendChild(frame); + + frame.onload = t.step_func(e => { + frame.contentWindow.postMessage({url: url}, '*'); + }); + + self.addEventListener('message', t.step_func(e => { + if (e.source !== frame.contentWindow) return; + assert_equals(e.data, 'revoked'); + promise_rejects(t, new TypeError, fetch(url)).then(t.step_func_done()); + })); +}, 'It is possible to revoke same-origin blob URLs from different frames.'); + +async_test(t => { + const blob_contents = 'test blob contents'; + const blob = new Blob([blob_contents]); + const url = URL.createObjectURL(blob); + const worker = new Worker('resources/revoke-helper.js'); + worker.onmessage = t.step_func(e => { + assert_equals(e.data, 'revoked'); + promise_rejects(t, new TypeError, fetch(url)).then(t.step_func_done()); + }); + worker.postMessage({url: url}); +}, 'It is possible to revoke same-origin blob URLs from a different worker global.'); + +async_test(t => { + const blob_contents = 'test blob contents'; + const blob = new Blob([blob_contents]); + const url = URL.createObjectURL(blob); + const frame = document.createElement('iframe'); + frame.setAttribute('style', 'display:none;'); + frame.src = '//{{domains[www1]}}:{{location[port]}}/FileAPI/url/resources/revoke-helper.html'; + document.body.appendChild(frame); + + frame.onload = t.step_func(e => { + frame.contentWindow.postMessage({url: url}, '*'); + }); + + self.addEventListener('message', t.step_func(e => { + if (e.source !== frame.contentWindow) return; + assert_equals(e.data, 'revoked'); + fetch(url).then(response => response.text()).then(t.step_func_done(text => { + assert_equals(text, blob_contents); + }), t.unreached_func('Unexpected promise rejection')); + })); +}, 'It is not possible to revoke cross-origin blob URLs.'); + +</script> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/resources/create-helper.html b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/resources/create-helper.html new file mode 100644 index 0000000..fa6cf4e6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/resources/create-helper.html
@@ -0,0 +1,7 @@ +<!doctype html> +<script> +self.addEventListener('message', e => { + let url = URL.createObjectURL(e.data.blob); + e.source.postMessage({url: url}, '*'); +}); +</script> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/resources/create-helper.js b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/resources/create-helper.js new file mode 100644 index 0000000..e6344f7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/resources/create-helper.js
@@ -0,0 +1,4 @@ +self.addEventListener('message', e => { + let url = URL.createObjectURL(e.data.blob); + self.postMessage({url: url}); +});
diff --git a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/resources/fetch-tests.js b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/resources/fetch-tests.js new file mode 100644 index 0000000..a81ea1e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/resources/fetch-tests.js
@@ -0,0 +1,71 @@ +// This method generates a number of tests verifying fetching of blob URLs, +// allowing the same tests to be used both with fetch() and XMLHttpRequest. +// +// |fetch_method| is only used in test names, and should describe the +// (javascript) method being used by the other two arguments (i.e. 'fetch' or 'XHR'). +// +// |fetch_should_succeed| is a callback that is called with the Test and a URL. +// Fetching the URL is expected to succeed. The callback should return a promise +// resolved with whatever contents were fetched. +// +// |fetch_should_fail| similarly is a callback that is called with the Test, a URL +// to fetch, and optionally a method to use to do the fetch. If no method is +// specified the callback should use the 'GET' method. Fetching of these URLs is +// expected to fail, and the callback should return a promise that resolves iff +// fetching did indeed fail. +function fetch_tests(fetch_method, fetch_should_succeed, fetch_should_fail) { + const blob_contents = 'test blob contents'; + const blob = new Blob([blob_contents]); + + promise_test(t => { + const url = URL.createObjectURL(blob); + + return fetch_should_succeed(t, url).then(text => { + assert_equals(text, blob_contents); + }); + }, 'Blob URLs can be used in ' + fetch_method); + + promise_test(t => { + const url = URL.createObjectURL(blob); + + return fetch_should_succeed(t, url + '#fragment').then(text => { + assert_equals(text, blob_contents); + }); + }, fetch_method + ' with a fragment should succeed'); + + promise_test(t => { + const url = URL.createObjectURL(blob); + URL.revokeObjectURL(url); + + return fetch_should_fail(t, url); + }, fetch_method + ' of a revoked URL should fail'); + + promise_test(t => { + const url = URL.createObjectURL(blob); + URL.revokeObjectURL(url + '#fragment'); + + return fetch_should_succeed(t, url).then(text => { + assert_equals(text, blob_contents); + }); + }, 'Only exact matches should revoke URLs, using ' + fetch_method); + + promise_test(t => { + const url = URL.createObjectURL(blob); + + return fetch_should_fail(t, url + '?querystring'); + }, 'Appending a query string should cause ' + fetch_method + ' to fail'); + + promise_test(t => { + const url = URL.createObjectURL(blob); + + return fetch_should_fail(t, url + '/path'); + }, 'Appending a path should cause ' + fetch_method + ' to fail'); + + for (const method of ['HEAD', 'POST', 'DELETE', 'OPTIONS', 'PUT', 'CUSTOM']) { + const url = URL.createObjectURL(blob); + + promise_test(t => { + return fetch_should_fail(t, url, method); + }, fetch_method + ' with method "' + method + '" should fail'); + } +} \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/resources/revoke-helper.html b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/resources/revoke-helper.html new file mode 100644 index 0000000..adf5a01 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/resources/revoke-helper.html
@@ -0,0 +1,7 @@ +<!doctype html> +<script> +self.addEventListener('message', e => { + URL.revokeObjectURL(e.data.url); + e.source.postMessage('revoked', '*'); +}); +</script> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/resources/revoke-helper.js b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/resources/revoke-helper.js new file mode 100644 index 0000000..28afce7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/resources/revoke-helper.js
@@ -0,0 +1,4 @@ +self.addEventListener('message', e => { + URL.revokeObjectURL(e.data.url); + self.postMessage('revoked'); +});
diff --git a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/sandboxed-iframe-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/sandboxed-iframe-expected.txt new file mode 100644 index 0000000..b40122b --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/sandboxed-iframe-expected.txt
@@ -0,0 +1,38 @@ +This is a testharness.js-based test. +PASS Generated Blob URLs are unique +PASS Blob URL starts with "blob:" +PASS Blob URL starts with "blob:" for Files +PASS Origin of Blob URL matches our origin +PASS Blob URL parses correctly +PASS Origin of Blob URL matches our origin for Files +PASS Blob URLs can be used in XHR +FAIL XHR with a fragment should succeed promise_test: Unhandled rejection with value: "Got unexpected error event" +PASS XHR of a revoked URL should fail +PASS Only exact matches should revoke URLs, using XHR +PASS Appending a query string should cause XHR to fail +PASS Appending a path should cause XHR to fail +PASS XHR with method "HEAD" should fail +PASS XHR with method "POST" should fail +PASS XHR with method "DELETE" should fail +PASS XHR with method "OPTIONS" should fail +PASS XHR with method "PUT" should fail +PASS XHR with method "CUSTOM" should fail +PASS XHR should return Content-Type from Blob +FAIL Revoke blob URL after open(), will fetch assert_unreached: Got unexpected error event Reached unreachable code +PASS Blob URLs can be used in fetch +FAIL fetch with a fragment should succeed promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch" +PASS fetch of a revoked URL should fail +PASS Only exact matches should revoke URLs, using fetch +PASS Appending a query string should cause fetch to fail +PASS Appending a path should cause fetch to fail +PASS fetch with method "HEAD" should fail +PASS fetch with method "POST" should fail +PASS fetch with method "DELETE" should fail +PASS fetch with method "OPTIONS" should fail +PASS fetch with method "PUT" should fail +PASS fetch with method "CUSTOM" should fail +PASS fetch should return Content-Type from Blob +FAIL Revoke blob URL after creating Request, will fetch promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch" +PASS Revoke blob URL after calling fetch, fetch should succeed +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/sandboxed-iframe.html b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/sandboxed-iframe.html new file mode 100644 index 0000000..e7a8a15 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/sandboxed-iframe.html
@@ -0,0 +1,30 @@ +<!doctype html> +<meta charset="utf-8"> +<title>FileAPI Test: Verify behavior of Blob URL in unique origins</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<iframe id="sandboxed-iframe" sandbox="allow-scripts"></iframe> + +<script> + +const iframe_scripts = [ + '/resources/testharness.js', + 'resources/fetch-tests.js', + 'url-format.any.js', + 'url-with-xhr.any.js', + 'url-with-fetch.any.js', + 'url-with-tags.window.js', +]; + +let html = '<!doctype html>\n<meta charset="utf-8">\n<body>\n'; +for (const script of iframe_scripts) + html = html + '<script src="' + script + '"></' + 'script>\n'; + +const frame = document.querySelector('#sandboxed-iframe'); +frame.setAttribute('srcdoc', html); +frame.setAttribute('style', 'display:none;'); + +fetch_tests_from_window(frame.contentWindow); + +</script> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/origin.sub.html b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/unicode-origin.sub.html similarity index 75% rename from third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/origin.sub.html rename to third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/unicode-origin.sub.html index 56c8fa48..2c4921c0 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/origin.sub.html +++ b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/unicode-origin.sub.html
@@ -5,14 +5,6 @@ <script src="/resources/testharnessreport.js"></script> <body> <script> -test(t => { - const blob = new Blob(["Test Blob"]); - const url = URL.createObjectURL(blob); - assert_equals(new URL(url).origin, location.origin); - assert_true(url.includes(location.origin)); - assert_true(url.startsWith('blob:{{location[scheme]}}://')); -}, 'Verify origin of Blob URI matches our origin'); - async_test(t => { const frame = document.createElement('iframe'); self.addEventListener('message', t.step_func(e => {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/url-format.any.js b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/url-format.any.js new file mode 100644 index 0000000..88b82ce --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/url-format.any.js
@@ -0,0 +1,63 @@ +const blob = new Blob(['test']); +const file = new File(['test'], 'name'); + +test(() => { + const url_count = 10000; + let list = []; + + for (let i = 0; i < url_count; ++i) + list.push(URL.createObjectURL(blob)); + + list.sort(); + + for (let i = 1; i < list.length; ++i) + assert_not_equals(list[i], list[i-1], 'generated Blob URLs should be unique'); +}, 'Generated Blob URLs are unique'); + +test(() => { + const url = URL.createObjectURL(blob); + assert_equals(typeof url, 'string'); + assert_true(url.startsWith('blob:')); +}, 'Blob URL starts with "blob:"'); + +test(() => { + const url = URL.createObjectURL(file); + assert_equals(typeof url, 'string'); + assert_true(url.startsWith('blob:')); +}, 'Blob URL starts with "blob:" for Files'); + +test(() => { + const url = URL.createObjectURL(blob); + assert_equals(new URL(url).origin, location.origin); + if (location.origin !== 'null') { + assert_true(url.includes(location.origin)); + assert_true(url.startsWith('blob:' + location.protocol)); + } +}, 'Origin of Blob URL matches our origin'); + +test(() => { + const url = URL.createObjectURL(blob); + const url_record = new URL(url); + assert_equals(url_record.protocol, 'blob:'); + assert_equals(url_record.origin, location.origin); + assert_equals(url_record.host, '', 'host should be an empty string'); + assert_equals(url_record.port, '', 'port should be an empty string'); + const uuid_path_re = /\/[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; + assert_true(uuid_path_re.test(url_record.pathname), 'Path must end with a valid UUID'); + if (location.origin !== 'null') { + const nested_url = new URL(url_record.pathname); + assert_equals(nested_url.origin, location.origin); + assert_equals(nested_url.pathname.search(uuid_path_re), 0, 'Path must be a valid UUID'); + assert_true(url.includes(location.origin)); + assert_true(url.startsWith('blob:' + location.protocol)); + } +}, 'Blob URL parses correctly'); + +test(() => { + const url = URL.createObjectURL(file); + assert_equals(new URL(url).origin, location.origin); + if (location.origin !== 'null') { + assert_true(url.includes(location.origin)); + assert_true(url.startsWith('blob:' + location.protocol)); + } +}, 'Origin of Blob URL matches our origin for Files');
diff --git a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/url-in-tags.window.js b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/url-in-tags.window.js new file mode 100644 index 0000000..364d33bb --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/url-in-tags.window.js
@@ -0,0 +1,50 @@ +async_test(t => { + const run_result = 'test_script_OK'; + const blob_contents = 'window.test_result = "' + run_result + '";'; + const blob = new Blob([blob_contents]); + const url = URL.createObjectURL(blob); + + const e = document.createElement('script'); + e.setAttribute('src', url); + e.onload = t.step_func_done(() => { + assert_equals(window.test_result, run_result); + }); + + document.body.appendChild(e); +}, 'Blob URLs can be used in <script> tags'); + +async_test(t => { + const run_result = 'test_frame_OK'; + const blob_contents = '<!doctype html>\n<meta charset="utf-8">\n' + + '<script>window.test_result = "' + run_result + '";</script>'; + const blob = new Blob([blob_contents], {type: 'text/html'}); + const url = URL.createObjectURL(blob); + + const frame = document.createElement('iframe'); + frame.setAttribute('src', url); + frame.setAttribute('style', 'display:none;'); + document.body.appendChild(frame); + + frame.onload = t.step_func_done(() => { + assert_equals(frame.contentWindow.test_result, run_result); + }); +}, 'Blob URLs can be used in iframes, and are treated same origin'); + +async_test(t => { + const scroll_position = 5000; + const blob_contents = '<!doctype html>\n<meta charset="utf-8">\n' + + '<style>body { margin: 0; } .block { height: 5000px; }</style>\n' + + '<body>\n' + + '<a id="block1"></a><div class="block"></div>\n' + + '<a id="block2"></a><div class="block"></div>'; + const blob = new Blob([blob_contents], {type: 'text/html'}); + const url = URL.createObjectURL(blob); + + const frame = document.createElement('iframe'); + frame.setAttribute('src', url + '#block2'); + document.body.appendChild(frame); + + frame.onload = t.step_func_done(() => { + assert_equals(frame.contentWindow.scrollY, 5000); + }); +}, 'Blob URL fragment is implemented.');
diff --git a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/url-lifetime.html b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/url-lifetime.html new file mode 100644 index 0000000..3c8345c --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/url-lifetime.html
@@ -0,0 +1,56 @@ +<!doctype html> +<meta charset="utf-8"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> +<script> +promise_test(t => { + const blob_contents = 'test blob contents'; + const blob = new Blob([blob_contents]); + const worker = new Worker('resources/create-helper.js'); + let url; + return new Promise(resolve => { + worker.onmessage = e => resolve(e.data); + worker.postMessage({blob: blob}); + }).then(data => { + url = data.url; + let result = fetch(url); + worker.terminate(); + return result; + }).then(response => response.text()).then(text => { + assert_equals(text, blob_contents); + return new Promise(resolve => t.step_timeout(resolve, 100)); + }).then(() => promise_rejects(t, new TypeError, fetch(url))); +}, 'Terminating worker revokes its URLs'); + +promise_test(t => { + const blob_contents = 'test blob contents'; + const blob = new Blob([blob_contents]); + const frame = document.createElement('iframe'); + frame.setAttribute('style', 'display:none;'); + frame.src = 'resources/create-helper.html'; + document.body.appendChild(frame); + + let url; + return new Promise(resolve => { + frame.onload = t.step_func(e => { + resolve(e); + }); + }).then(e => { + frame.contentWindow.postMessage({blob: blob}, '*'); + return new Promise(resolve => { + self.addEventListener('message', t.step_func(e => { + if (e.source === frame.contentWindow) resolve(e); + })); + }); + }).then(e => { + url = e.data.url; + let fetch_result = fetch(url); + document.body.removeChild(frame); + return fetch_result; + }).then(response => response.text()).then(text => { + assert_equals(text, blob_contents); + return new Promise(resolve => t.step_timeout(resolve, 100)); + }).then(() => promise_rejects(t, new TypeError, fetch(url))); +}, 'Removing an iframe revokes its URLs'); +</script> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/url-with-fetch.any-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/url-with-fetch.any-expected.txt new file mode 100644 index 0000000..50d3788 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/url-with-fetch.any-expected.txt
@@ -0,0 +1,18 @@ +This is a testharness.js-based test. +PASS Blob URLs can be used in fetch +PASS fetch with a fragment should succeed +PASS fetch of a revoked URL should fail +PASS Only exact matches should revoke URLs, using fetch +PASS Appending a query string should cause fetch to fail +PASS Appending a path should cause fetch to fail +PASS fetch with method "HEAD" should fail +PASS fetch with method "POST" should fail +PASS fetch with method "DELETE" should fail +PASS fetch with method "OPTIONS" should fail +PASS fetch with method "PUT" should fail +PASS fetch with method "CUSTOM" should fail +PASS fetch should return Content-Type from Blob +FAIL Revoke blob URL after creating Request, will fetch promise_test: Unhandled rejection with value: object "TypeError: Failed to fetch" +PASS Revoke blob URL after calling fetch, fetch should succeed +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/url-with-fetch.any.js b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/url-with-fetch.any.js new file mode 100644 index 0000000..775d9a0f --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/url-with-fetch.any.js
@@ -0,0 +1,53 @@ +// META: script=resources/fetch-tests.js + +function fetch_should_succeed(test, request) { + return fetch(request).then(response => response.text()); +} + +function fetch_should_fail(test, url, method = 'GET') { + return promise_rejects(test, new TypeError, fetch(url, {method: method})); +} + +fetch_tests('fetch', fetch_should_succeed, fetch_should_fail); + +promise_test(t => { + const blob_contents = 'test blob contents'; + const blob_type = 'image/png'; + const blob = new Blob([blob_contents], {type: blob_type}); + const url = URL.createObjectURL(blob); + + return fetch(url).then(response => { + assert_equals(response.headers.get('Content-Type'), blob_type); + }); +}, 'fetch should return Content-Type from Blob'); + +promise_test(t => { + const blob_contents = 'test blob contents'; + const blob = new Blob([blob_contents]); + const url = URL.createObjectURL(blob); + const request = new Request(url); + + // Revoke the object URL. Request should take a reference to the blob as + // soon as it receives it in open(), so the request succeeds even though we + // revoke the URL before calling fetch(). + URL.revokeObjectURL(url); + + return fetch_should_succeed(t, request).then(text => { + assert_equals(text, blob_contents); + }); +}, 'Revoke blob URL after creating Request, will fetch'); + +promise_test(function(t) { + const blob_contents = 'test blob contents'; + const blob = new Blob([blob_contents]); + const url = URL.createObjectURL(blob); + + const result = fetch_should_succeed(t, url).then(text => { + assert_equals(text, blob_contents); + }); + + // Revoke the object URL. fetch should have already resolved the blob URL. + URL.revokeObjectURL(url); + + return result; +}, 'Revoke blob URL after calling fetch, fetch should succeed');
diff --git a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/url-with-xhr.any-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/url-with-xhr.any-expected.txt new file mode 100644 index 0000000..bb79d062 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/url-with-xhr.any-expected.txt
@@ -0,0 +1,17 @@ +This is a testharness.js-based test. +PASS Blob URLs can be used in XHR +PASS XHR with a fragment should succeed +FAIL XHR of a revoked URL should fail assert_equals: expected 0 but got 404 +PASS Only exact matches should revoke URLs, using XHR +FAIL Appending a query string should cause XHR to fail assert_equals: expected 0 but got 404 +FAIL Appending a path should cause XHR to fail assert_equals: expected 0 but got 404 +PASS XHR with method "HEAD" should fail +PASS XHR with method "POST" should fail +PASS XHR with method "DELETE" should fail +PASS XHR with method "OPTIONS" should fail +PASS XHR with method "PUT" should fail +PASS XHR with method "CUSTOM" should fail +PASS XHR should return Content-Type from Blob +FAIL Revoke blob URL after open(), will fetch assert_equals: expected "test blob contents" but got "" +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/url-with-xhr.any.js b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/url-with-xhr.any.js new file mode 100644 index 0000000..29d8308 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/url-with-xhr.any.js
@@ -0,0 +1,68 @@ +// META: script=resources/fetch-tests.js + +function xhr_should_succeed(test, url) { + return new Promise((resolve, reject) => { + const xhr = new XMLHttpRequest(); + xhr.open('GET', url); + xhr.onload = test.step_func(() => { + assert_equals(xhr.status, 200); + assert_equals(xhr.statusText, 'OK'); + resolve(xhr.response); + }); + xhr.onerror = () => reject('Got unexpected error event'); + xhr.send(); + }); +} + +function xhr_should_fail(test, url, method = 'GET') { + const xhr = new XMLHttpRequest(); + xhr.open(method, url); + const result1 = new Promise((resolve, reject) => { + xhr.onload = () => reject('Got unexpected load event'); + xhr.onerror = resolve; + }); + const result2 = new Promise(resolve => { + xhr.onreadystatechange = test.step_func(() => { + if (xhr.readyState !== xhr.DONE) return; + assert_equals(xhr.status, 0); + resolve(); + }); + }); + xhr.send(); + return Promise.all([result1, result2]); +} + +fetch_tests('XHR', xhr_should_succeed, xhr_should_fail); + +async_test(t => { + const blob_contents = 'test blob contents'; + const blob_type = 'image/png'; + const blob = new Blob([blob_contents], {type: blob_type}); + const url = URL.createObjectURL(blob); + const xhr = new XMLHttpRequest(); + xhr.open('GET', url); + xhr.onloadend = t.step_func_done(() => { + assert_equals(xhr.getResponseHeader('Content-Type'), blob_type); + }); + xhr.send(); +}, 'XHR should return Content-Type from Blob'); + +async_test(t => { + const blob_contents = 'test blob contents'; + const blob = new Blob([blob_contents]); + const url = URL.createObjectURL(blob); + const xhr = new XMLHttpRequest(); + xhr.open('GET', url); + + // Revoke the object URL. XHR should take a reference to the blob as soon as + // it receives it in open(), so the request succeeds even though we revoke the + // URL before calling send(). + URL.revokeObjectURL(url); + + xhr.onload = t.step_func_done(() => { + assert_equals(xhr.response, blob_contents); + }); + xhr.onerror = t.unreached_func('Got unexpected error event'); + + xhr.send(); +}, 'Revoke blob URL after open(), will fetch');
diff --git a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/url_createobjecturl_blob.html b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/url_createobjecturl_blob.html deleted file mode 100644 index 798df08d..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/url_createobjecturl_blob.html +++ /dev/null
@@ -1,20 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<title>FileAPI Test: Creating Blob URL with Blob</title> -<link rel="author" title="Intel" href="http://www.intel.com"> -<link rel="author" title="JunChen Xia" href="mailto:xjconlyme@gmail.com"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> - -<div id="log"></div> - -<script> - var blob = new Blob(["Test Blob"]); - - test(function() { - var testBlob = window.URL.createObjectURL(blob); - assert_equals(typeof testBlob, "string", "Blob URI is typeof string"); - assert_equals(testBlob.indexOf("blob"), 0, "Blob URI starts with 'blob'"); - }, "Check if the Blob URI starts with 'blob' using createObjectURL()"); -</script> -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/url_xmlhttprequest.html b/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/url_xmlhttprequest.html deleted file mode 100644 index 7a86cdd1..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/FileAPI/url/url_xmlhttprequest.html +++ /dev/null
@@ -1,29 +0,0 @@ -<!DOCTYPE html> -<meta charset="utf-8"> -<title>FileAPI Test: Creating Blob URL via XMLHttpRequest</title> -<link rel="author" title="Intel" href="http://www.intel.com"> -<link rel="author" title="JunChen Xia" href="mailto:xjconlyme@gmail.com"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> - -<div id="log"></div> - -<script> - async_test(function () { - var http = new XMLHttpRequest(); - http.open("GET", "/images/blue96x96.png", true); - http.responseType = "blob"; - http.onloadend = this.step_func(function(evt) { - var blobURI = window.URL.createObjectURL(http.response); - assert_true(http.response instanceof Blob, "XMLHttpRequest returns instanceof Blob"); - assert_equals(typeof blobURI, "string", "Blob URI is typeof string"); - assert_equals(blobURI.indexOf("blob"), 0, "Blob URI starts with 'blob'"); - assert_equals(http.status, 200, "The status is 200"); - assert_equals(http.statusText, "OK", "The status text is OK when XMLHttpRequest returns correct blob"); - assert_equals(http.getResponseHeader("Content-Type"), "image/png", "The content type is image/png when set the respnose blob"); - this.done(); - }); - http.send(); - }); -</script> -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/background-clip/clip-rounded-corner-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/background-clip/clip-rounded-corner-ref.html new file mode 100644 index 0000000..379ad369 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/background-clip/clip-rounded-corner-ref.html
@@ -0,0 +1,26 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Filled Background with Rounded Corner</title> +<style> + #a { + width: 100px; + height: 80px; + border: 20px blue solid; + border-top-right-radius: 20px; + background-color: green; + background-clip: border-box; + } + #shield { + position: absolute; + width: 30px; + height: 30px; + left: 120px; + top: 5px; + background-color: black; + } +</style> +<body> + <div id="a"></div> + <!-- Hide the curved outside border to deal with imprecise rendering. --> + <div id="shield"></div> +</body>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/background-clip/clip-rounded-corner.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/background-clip/clip-rounded-corner.html new file mode 100644 index 0000000..3453c5bc --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/background-clip/clip-rounded-corner.html
@@ -0,0 +1,28 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Filled Background with Rounded Corner</title> +<link rel="match" href="clip-rounded-corner-ref.html"> +<link rel="help" href="https://drafts.csswg.org/css-backgrounds-3/#corner-clipping"> +<style> + #b { + width: 100px; + height: 80px; + border: 20px blue solid; + border-top-right-radius: 20px; + background-color: green; + background-clip: content-box; + } + #shield { + position: absolute; + width: 30px; + height: 30px; + left: 120px; + top: 5px; + background-color: black; + } +</style> +<body> + <div id="b"></div> + <!-- Hide the curved outside border to deal with imprecise rendering. --> + <div id="shield"></div> +</body>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/background-image-centered-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/background-image-centered-ref.html new file mode 100644 index 0000000..f52cd96 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/background-image-centered-ref.html
@@ -0,0 +1,16 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Centered Background Gradient</title> +<style> + #a { + width: 200px; + height: 150px; + border-style: solid; + border-width: 10px; + background-position: 0px 0px; + background-image: repeating-radial-gradient(blue, green 20px); + } +</style> +<body> + <div id="a"></div> +</body>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/background-image-centered.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/background-image-centered.html new file mode 100644 index 0000000..7051aa3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-backgrounds/background-image-centered.html
@@ -0,0 +1,18 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Centered Background Gradient</title> +<link rel="match" href="background-image-centered-ref.html"> +<link rel="help" href="http://www.w3.org/TR/css3-background/"> +<style> + #a { + width: 200px; + height: 150px; + border-style: solid; + border-width: 10px; + background-position: center center; + background-image: repeating-radial-gradient(blue, green 20px); + } +</style> +<body> + <div id="a"></div> +</body>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-content/element-replacement-ref.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-content/element-replacement-ref.html new file mode 100644 index 0000000..d301f1d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-content/element-replacement-ref.html
@@ -0,0 +1,4 @@ +<!DOCTYPE html> +<title>Reference for the content CSS attribute can replace an element's contents</title> + +<img src='resources/rect.svg' />
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-content/element-replacement.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-content/element-replacement.html new file mode 100644 index 0000000..a78e9f7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-content/element-replacement.html
@@ -0,0 +1,14 @@ +<!DOCTYPE html> +<title>The content CSS attribute can replace an element's contents</title> +<link rel="match" href="element-replacement-ref.html" /> +<link rel="help" href="https://drafts.csswg.org/css-content-3/#content-property" /> +<meta name="assert" content"This test checks that the CSS content propertly can replace a normal element's contents" /> + +<style> +p { + margin: 0; + content: url('resources/rect.svg'); +} +</style> + +<p>This text should not be visible</p>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-content/resources/rect.svg b/third_party/WebKit/LayoutTests/external/wpt/css/css-content/resources/rect.svg new file mode 100644 index 0000000..d5de6b4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-content/resources/rect.svg
@@ -0,0 +1,3 @@ +<svg width="100" height="100" version="1.1" xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="100" height="100" fill="green" /> +</svg>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/domparsing/xmldomparser.html b/third_party/WebKit/LayoutTests/external/wpt/domparsing/xmldomparser.html new file mode 100644 index 0000000..9dac65d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/domparsing/xmldomparser.html
@@ -0,0 +1,13 @@ +<!doctype html> +<meta charset="utf-8"> +<title>XML Dom Parse readyState Test</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + test(function () { + assert_equals( + (new DOMParser()).parseFromString("<html></html>", "text/xml").readyState, + "complete" + ); + }); +</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/dom/historical-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/html/dom/historical-expected.txt deleted file mode 100644 index 69557f6..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/html/dom/historical-expected.txt +++ /dev/null
@@ -1,9 +0,0 @@ -This is a testharness.js-based test. -PASS document.applets is always empty -PASS HTMLAppletElement is no more -FAIL document.all cannot find applet assert_equals: expected (undefined) undefined but got (object) Element node <applet name="war" align="left"></applet> -PASS document cannot find applet -PASS window cannot find applet -PASS applet is not styled -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/forms/the-input-element/datetime-local-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/forms/the-input-element/datetime-local-expected.txt index b6074ee6..a30d85b 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/forms/the-input-element/datetime-local-expected.txt +++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/forms/the-input-element/datetime-local-expected.txt
@@ -6,6 +6,12 @@ FAIL datetime-local input value set to 2014-01-01 00:00:00.000 without min/max assert_equals: expected "2014-01-01T00:00" but got "" PASS datetime-local input value set to 2014-01-0 11:11 without min/max PASS datetime-local input value set to 2014-01-01 11:1 without min/max +PASS invalid datetime-local input value 1 +PASS invalid datetime-local input value 2 +PASS invalid datetime-local input value 3 +PASS invalid datetime-local input value 4 +PASS invalid datetime-local input value 5 +PASS invalid datetime-local input value 6 FAIL Value >= min attribute assert_equals: expected "2014-01-01T11:12" but got "" FAIL Value < min attribute assert_equals: expected "2014-01-01T11:11" but got "" FAIL Value <= max attribute assert_equals: expected "2014-01-01T11:10" but got ""
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/forms/the-input-element/datetime-local.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/forms/the-input-element/datetime-local.html index b4548b77..60a68170 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/forms/the-input-element/datetime-local.html +++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/forms/the-input-element/datetime-local.html
@@ -16,6 +16,12 @@ {value: "2014-01-01 00:00:00.000", expected: "2014-01-01T00:00", testname: "datetime-local input value set to 2014-01-01 00:00:00.000 without min/max"}, {value: "2014-01-0 11:11", expected: "", testname: "datetime-local input value set to 2014-01-0 11:11 without min/max"}, {value: "2014-01-01 11:1", expected: "", testname: "datetime-local input value set to 2014-01-01 11:1 without min/max"}, + {value: "2014-01-01 11:1d1", expected: "", testname: "invalid datetime-local input value 1"}, + {value: "2014-01-01H11:11", expected: "", testname: "invalid datetime-local input value 2"}, + {value: "2014-01-01 11:11:", expected: "", testname: "invalid datetime-local input value 3"}, + {value: "2014-01-01 11-11", expected: "", testname: "invalid datetime-local input value 4"}, + {value: "2014-01-01 11:11:123", expected: "", testname: "invalid datetime-local input value 5"}, + {value: "2014-01-01 11:11:12.1234", expected: "", testname: "invalid datetime-local input value 6"}, {value: "2014-01-01 11:12", attributes: { min: "2014-01-01 11:11" }, expected: "2014-01-01T11:12", testname: "Value >= min attribute"}, {value: "2014-01-01 11:10", attributes: { min: "2014-01-01 11:11" }, expected: "2014-01-01T11:11", testname: "Value < min attribute"}, {value: "2014-01-01 11:10", attributes: { max: "2014-01-01 11:11" }, expected: "2014-01-01T11:10", testname: "Value <= max attribute"},
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/text-level-semantics/the-a-element/rellist-feature-detection.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/text-level-semantics/the-a-element/rellist-feature-detection.html index 8946eaa..5af9a5e 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/text-level-semantics/the-a-element/rellist-feature-detection.html +++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/text-level-semantics/the-a-element/rellist-feature-detection.html
@@ -32,6 +32,10 @@ assert_equals(element.relList.length, 2); assert_equals(element.relList[0], "first"); assert_equals(element.relList[1], "second"); + // Test that relList is [SameObject]. + let savedRelList = element.relList; + element.rel = "something"; + assert_equals(element.relList, savedRelList); // Test that supports() is returning true for valid values // and false for invalid ones.
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/text-level-semantics/the-area-element/rellist-feature-detection.html b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/text-level-semantics/the-area-element/rellist-feature-detection.html index 1c818760..1099819 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/html/semantics/text-level-semantics/the-area-element/rellist-feature-detection.html +++ b/third_party/WebKit/LayoutTests/external/wpt/html/semantics/text-level-semantics/the-area-element/rellist-feature-detection.html
@@ -32,6 +32,10 @@ assert_equals(element.relList.length, 2); assert_equals(element.relList[0], "first"); assert_equals(element.relList[1], "second"); + // Test that relList is [SameObject]. + let savedRelList = element.relList; + element.rel = "something"; + assert_equals(element.relList, savedRelList); // Test that supports() is returning true for valid values // and false for invalid ones.
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/xhr.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/xhr.idl new file mode 100644 index 0000000..707e3550 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/xhr.idl
@@ -0,0 +1,91 @@ +/*[Exposed=(Window,Worker)]*/ +interface XMLHttpRequestEventTarget : EventTarget { + // event handlers + attribute EventHandler onloadstart; + attribute EventHandler onprogress; + attribute EventHandler onabort; + attribute EventHandler onerror; + attribute EventHandler onload; + attribute EventHandler ontimeout; + attribute EventHandler onloadend; +}; + +/*[Exposed=(Window,Worker)]*/ +interface XMLHttpRequestUpload : XMLHttpRequestEventTarget { +}; + +enum XMLHttpRequestResponseType { + "", + "arraybuffer", + "blob", + "document", + "json", + "text" +}; + +[Constructor/*, + Exposed=(Window,Worker)*/] +interface XMLHttpRequest : XMLHttpRequestEventTarget { + // event handler + attribute EventHandler onreadystatechange; + + // states + const unsigned short UNSENT = 0; + const unsigned short OPENED = 1; + const unsigned short HEADERS_RECEIVED = 2; + const unsigned short LOADING = 3; + const unsigned short DONE = 4; + readonly attribute unsigned short readyState; + + // request + void open(ByteString method, USVString url); + void open(ByteString method, USVString url, boolean async, optional USVString? username = null, optional USVString? password = null); + void setRequestHeader(ByteString name, ByteString value); + attribute unsigned long timeout; + attribute boolean withCredentials; + readonly attribute XMLHttpRequestUpload upload; + void send(optional (Document or BodyInit)? body = null); + void abort(); + + // response + readonly attribute USVString responseURL; + readonly attribute unsigned short status; + readonly attribute ByteString statusText; + ByteString? getResponseHeader(ByteString name); + ByteString getAllResponseHeaders(); + void overrideMimeType(DOMString mime); + attribute XMLHttpRequestResponseType responseType; + readonly attribute any response; + readonly attribute USVString responseText; + [Exposed=Window] readonly attribute Document? responseXML; +}; + +typedef (File or USVString) FormDataEntryValue; + +[Constructor(optional HTMLFormElement form)/*, + Exposed=(Window,Worker)*/] +interface FormData { + void append(USVString name, Blob value, optional USVString filename); + void append(USVString name, USVString value); + void delete(USVString name); + FormDataEntryValue? get(USVString name); + sequence<FormDataEntryValue> getAll(USVString name); + boolean has(USVString name); + void set(USVString name, Blob value, optional USVString filename); + void set(USVString name, USVString value); + /*iterable<USVString, FormDataEntryValue>;*/ +}; + +[Constructor(DOMString type, optional ProgressEventInit eventInitDict)/*, + Exposed=(Window,Worker)*/] +interface ProgressEvent : Event { + readonly attribute boolean lengthComputable; + readonly attribute unsigned long long loaded; + readonly attribute unsigned long long total; +}; + +dictionary ProgressEventInit : EventInit { + boolean lengthComputable = false; + unsigned long long loaded = 0; + unsigned long long total = 0; +};
diff --git a/third_party/WebKit/LayoutTests/external/wpt/lint.whitelist b/third_party/WebKit/LayoutTests/external/wpt/lint.whitelist index dcabf43..b8728fe 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/lint.whitelist +++ b/third_party/WebKit/LayoutTests/external/wpt/lint.whitelist
@@ -38,6 +38,7 @@ TRAILING WHITESPACE: WebIDL/* TRAILING WHITESPACE: webvtt/* TRAILING WHITESPACE: encoding/legacy*/* +TRAILING WHITESPACE: server-timing/resources/parsing/*.sub.headers ## File types that should never be checked ##
diff --git a/third_party/WebKit/LayoutTests/external/wpt/resource-timing/resource_connection_reuse.html b/third_party/WebKit/LayoutTests/external/wpt/resource-timing/resource_connection_reuse.html index c918802..d2bcab9 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/resource-timing/resource_connection_reuse.html +++ b/third_party/WebKit/LayoutTests/external/wpt/resource-timing/resource_connection_reuse.html
@@ -11,12 +11,12 @@ <script src="resources/webperftestharnessextension.js"></script> <script> setup({explicit_done: true}); -var iframe; -var d; -var body; +let iframe; +let d; +let body; -// explicitly test the namespace before we start testing -test_namespace("getEntriesByType"); +// Explicitly test the namespace before we start testing. +test_namespace('getEntriesByType'); function setup_iframe() { iframe = document.getElementById('frameContext'); @@ -30,17 +30,17 @@ done(); return; } - var context = new PerformanceContext(iframe.contentWindow.performance); - var entries = context.getEntriesByType('resource'); + const context = new PerformanceContext(iframe.contentWindow.performance); + const entries = context.getEntriesByType('resource'); - // when a persistent connection is used, follow-on resources should be included as PerformanceResourceTiming objects + // When a persistent connection is used, follow-on resources should be included as PerformanceResourceTiming objects. test_equals(entries.length, 2, 'There should be 2 PerformanceEntries'); if (entries.length >= 2) { - // when a persistent connection is used, for the resource that reuses the socket, connectStart and connectEnd should have the same value as fetchStart - var entry = entries[1]; - test_equals(entry.fetchStart, entry.connectStart, "connectStart and fetchStart should be the same"); - test_equals(entry.fetchStart, entry.connectEnd, "connectEnd and fetchStart should be the same"); + // When a persistent connection is used, for the resource that reuses the socket, connectStart and connectEnd should have the same value as fetchStart. + const entry = entries[1]; + test_equals(entry.fetchStart, entry.connectStart, 'connectStart and fetchStart should be the same'); + test_equals(entry.fetchStart, entry.connectEnd, 'connectEnd and fetchStart should be the same'); } done();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/resource-timing/resource_dedicated_worker.html b/third_party/WebKit/LayoutTests/external/wpt/resource-timing/resource_dedicated_worker.html new file mode 100644 index 0000000..6d27245a --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/resource-timing/resource_dedicated_worker.html
@@ -0,0 +1,28 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8" /> +<title>Resource Timing in dedicated workers</title> +<link rel="author" title="Google" href="http://www.google.com/" /> +<link rel="help" href="http://www.w3.org/TR/resource-timing/"/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/webperftestharness.js"></script> +<script src="resources/webperftestharnessextension.js"></script> +<link rel="stylesheet" href="resources/resource_timing_test0.css" /> +<script> +setup({explicit_done: true}); +const worker = new Worker("resources/worker_with_images.js"); +worker.onmessage = function(event) { + const context = new PerformanceContext(window.performance); + const entries = context.getEntriesByType('resource'); + test_equals(entries.length, 6, "There should be six entries: 4 scripts, 1 stylesheet, and the worker itself"); + done(); +} +</script> +</head> +<body> +<h1>Description</h1> +<p>This test validates that resources requested by dedicated workers don't appear in the main document.</p> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/resource-timing/resource_dynamic_insertion.html b/third_party/WebKit/LayoutTests/external/wpt/resource-timing/resource_dynamic_insertion.html index c669a383..de3c3d01 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/resource-timing/resource_dynamic_insertion.html +++ b/third_party/WebKit/LayoutTests/external/wpt/resource-timing/resource_dynamic_insertion.html
@@ -10,27 +10,27 @@ <script src="resources/webperftestharness.js"></script> <script src="resources/webperftestharnessextension.js"></script> <script> -// explicitly test the namespace before we start testing +// Explicitly test the namespace before we start testing. test_namespace("getEntriesByType"); -var iframe; +let iframe; function setup_iframe() { iframe = document.getElementById('frameContext'); - var d = iframe.contentWindow.document; - var body = d.createElement('body'); + const d = iframe.contentWindow.document; + const body = d.createElement('body'); d.getElementsByTagName('html')[0].appendChild(body); - var style = d.createElement('link'); + const style = d.createElement('link'); style.rel = 'stylesheet'; style.href = 'resource_timing_test0.css'; body.appendChild(style); - var image = d.createElement('img'); + const image = d.createElement('img'); image.src = 'resource_timing_test0.png'; body.appendChild(image); - var subframe = d.createElement('iframe'); + const subframe = d.createElement('iframe'); subframe.src = 'inject_resource_test.html'; body.appendChild(subframe); } @@ -39,13 +39,13 @@ done(); return; } - var context = new PerformanceContext(iframe.contentWindow.performance); - var entries = context.getEntriesByType('resource'); + const context = new PerformanceContext(iframe.contentWindow.performance); + const entries = context.getEntriesByType('resource'); - var index = window.location.pathname.lastIndexOf('/'); - var pathname = window.location.pathname.substring(0, index) + '/'; + const index = window.location.pathname.lastIndexOf('/'); + const pathname = window.location.pathname.substring(0, index) + '/'; - var expected_entries = { }; + let expected_entries = { }; expected_entries[ pathname + 'resources/resource_timing_test0.css' ] = 'link', expected_entries[ pathname + 'resources/resource_timing_test0.png' ] = 'img', expected_entries[ pathname + 'resources/inject_resource_test.html' ] = 'iframe',
diff --git a/third_party/WebKit/LayoutTests/external/wpt/resource-timing/resource_frame_initiator_type.html b/third_party/WebKit/LayoutTests/external/wpt/resource-timing/resource_frame_initiator_type.html new file mode 100644 index 0000000..f647198 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/resource-timing/resource_frame_initiator_type.html
@@ -0,0 +1,37 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8" /> +<title>Resource Timing frame initiator type</title> +<link rel="author" title="Google" href="http://www.google.com/" /> +<link rel="help" href="http://www.w3.org/TR/resource-timing/#dom-performanceresourcetiming-initiatortype"/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/webperftestharness.js"></script> +<script src="resources/webperftestharnessextension.js"></script> +<script> +setup({explicit_done: true}); + +function onload_test() { + const iframe = document.getElementById('frameContext'); + const context = new PerformanceContext(iframe.contentWindow.performance); + const entries = context.getEntriesByType('resource'); + + const index = window.location.pathname.lastIndexOf('/'); + const pathname = window.location.pathname.substring(0, index) + + '/resources/blank_page_green.htm'; + const expected_entries = {}; + expected_entries[pathname] = 'frame'; + + test_resource_entries(entries, expected_entries); + done(); +} +</script> +</head> +<body> +<h1>Description</h1> +<p>This test validates that the frame initiator type is represented.</p> +<div id="log"></div> +<iframe id="frameContext" onload="onload_test();" src="resources/green_frame.htm" style="width: 250px; height: 250px;"></iframe> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/resource-timing/resource_ignore_data_url.html b/third_party/WebKit/LayoutTests/external/wpt/resource-timing/resource_ignore_data_url.html new file mode 100644 index 0000000..f8ca2f11 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/resource-timing/resource_ignore_data_url.html
@@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8" /> +<title>Resource Timing ignores requests for data: URIs</title> +<link rel="author" title="Google" href="http://www.google.com/" /> +<link rel="help" href="http://www.w3.org/TR/resource-timing/#dom-performanceresourcetiming-initiatortype"/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/webperftestharness.js"></script> +<script src="resources/webperftestharnessextension.js"></script> +<script> +let iframe; +function setup_iframe() { + const iframe_content = '<img src="data:image/gif;base64,R0lGODlhAQABAIAAAOTm7AAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="></img>'; + iframe = document.getElementById('frameContext'); + iframe.contentWindow.document.write(iframe_content); +} +function onload_test() { + const context = new PerformanceContext(iframe.contentWindow.performance); + const entries = context.getEntriesByType('resource'); + test_true(entries.length == 0, "entries.length == 0"); +} +window.setup_iframe = setup_iframe; +</script> +</head> +<body> +<h1>Description</h1> +<p>This test validates that resources with data: URIs aren't present in the Resource Timing buffer.</p> +<div id="log"></div> +<iframe id="frameContext" onload="onload_test();" src="resources/inject_resource_test.html"></iframe> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/resource-timing/resource_ignore_failures.html b/third_party/WebKit/LayoutTests/external/wpt/resource-timing/resource_ignore_failures.html new file mode 100644 index 0000000..fa9e411 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/resource-timing/resource_ignore_failures.html
@@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8" /> +<title>Resource Timing ignores failed resources</title> +<link rel="author" title="Google" href="http://www.google.com/" /> +<link rel="help" href="http://www.w3.org/TR/resource-timing/#dom-performanceresourcetiming-initiatortype"/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/webperftestharness.js"></script> +<script src="resources/webperftestharnessextension.js"></script> +<script> +let iframe; +function setup_iframe() { + const iframe_content = '<img src="resources/non-existing-file.png"></img>'; + iframe = document.getElementById('frameContext'); + iframe.contentWindow.document.write(iframe_content); +} +function onload_test() { + const context = new PerformanceContext(iframe.contentWindow.performance); + const entries = context.getEntriesByType('resource'); + test_true(entries.length == 0, "entries.length == 0"); +} +window.setup_iframe = setup_iframe; +</script> +</head> +<body> +<h1>Description</h1> +<p>This test validates that failed resources aren't present in the Resource Timing buffer.</p> +<div id="log"></div> +<iframe id="frameContext" onload="onload_test();" src="resources/inject_resource_test.html"></iframe> +</body> +</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/resource-timing/resources/blank_page_green.htm b/third_party/WebKit/LayoutTests/external/wpt/resource-timing/resources/blank_page_green.htm new file mode 100644 index 0000000..b8a1947 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/resource-timing/resources/blank_page_green.htm
@@ -0,0 +1,10 @@ +<!DOCTYPE HTML> +<html> + <head> + <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> + <title>Green Test Page</title> + </head> + <body style="background-color:#00FF00;"> + <h1>Placeholder</h1> + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/resources/green_frame.htm b/third_party/WebKit/LayoutTests/external/wpt/resource-timing/resources/green_frame.htm similarity index 100% rename from third_party/WebKit/LayoutTests/http/tests/w3c/webperf/resources/green_frame.htm rename to third_party/WebKit/LayoutTests/external/wpt/resource-timing/resources/green_frame.htm
diff --git a/third_party/WebKit/LayoutTests/external/wpt/resource-timing/resources/worker_with_images.js b/third_party/WebKit/LayoutTests/external/wpt/resource-timing/resources/worker_with_images.js new file mode 100644 index 0000000..2d7688f --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/resource-timing/resources/worker_with_images.js
@@ -0,0 +1,21 @@ +let numComplete = 0; + +function checkDone() { + ++numComplete; + if (numComplete == 2) { + postMessage(''); + } +} + +function makeRequest(request) { + var xhr = new XMLHttpRequest; + xhr.open('get', request, true); + xhr.onreadystatechange = function() { + if (xhr.readyState == 4) { + checkDone(); + } + } + xhr.send(); +} +makeRequest('blue.png'); +makeRequest('resource_timing_test0.png');
diff --git a/third_party/WebKit/LayoutTests/external/wpt/resource-timing/test_resource_timing.js b/third_party/WebKit/LayoutTests/external/wpt/resource-timing/test_resource_timing.js index 51a3d2c..8e729e01 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/resource-timing/test_resource_timing.js +++ b/third_party/WebKit/LayoutTests/external/wpt/resource-timing/test_resource_timing.js
@@ -183,7 +183,9 @@ }); t["timing_attrs"].step(function test() { - var actual = window.performance.getEntriesByName(expected.name)[0]; + const entries = window.performance.getEntriesByName(expected.name); + assert_equals(entries.length, 1, 'There should be a single matching entry'); + const actual = entries[0]; // Debugging bug 1263428 // Feel free to remove/overwrite this piece of code @@ -191,18 +193,18 @@ assert_true(false, "actual: "+JSON.stringify(actual)); } - assert_equals(actual.redirectStart, 0, "redirectStart time"); - assert_equals(actual.redirectEnd, 0, "redirectEnd time"); + assert_equals(actual.redirectStart, 0, 'redirectStart should be 0'); + assert_equals(actual.redirectEnd, 0, 'redirectEnd should be 0'); assert_true(actual.secureConnectionStart == undefined || - actual.secureConnectionStart == 0, "secureConnectionStart time"); - assert_equals(actual.fetchStart, actual.startTime, "fetchStart is equal to startTime"); - assert_greater_than_equal(actual.domainLookupStart, actual.fetchStart, "domainLookupStart after fetchStart"); - assert_greater_than_equal(actual.domainLookupEnd, actual.domainLookupStart, "domainLookupEnd after domainLookupStart"); - assert_greater_than_equal(actual.connectStart, actual.domainLookupEnd, "connectStart after domainLookupEnd"); - assert_greater_than_equal(actual.connectEnd, actual.connectStart, "connectEnd after connectStart"); - assert_greater_than_equal(actual.requestStart, actual.connectEnd, "requestStart after connectEnd"); - assert_greater_than_equal(actual.responseStart, actual.requestStart, "responseStart after requestStart"); - assert_greater_than_equal(actual.responseEnd, actual.responseStart, "responseEnd after responseStart"); + actual.secureConnectionStart == 0, 'secureConnectionStart should be 0 or undefined'); + assert_equals(actual.fetchStart, actual.startTime, 'fetchStart is equal to startTime'); + assert_greater_than_equal(actual.domainLookupStart, actual.fetchStart, 'domainLookupStart after fetchStart'); + assert_greater_than_equal(actual.domainLookupEnd, actual.domainLookupStart, 'domainLookupEnd after domainLookupStart'); + assert_greater_than_equal(actual.connectStart, actual.domainLookupEnd, 'connectStart after domainLookupEnd'); + assert_greater_than_equal(actual.connectEnd, actual.connectStart, 'connectEnd after connectStart'); + assert_greater_than_equal(actual.requestStart, actual.connectEnd, 'requestStart after connectEnd'); + assert_greater_than_equal(actual.responseStart, actual.requestStart, 'responseStart after requestStart'); + assert_greater_than_equal(actual.responseEnd, actual.responseStart, 'responseEnd after responseStart'); this.done(); });
diff --git a/third_party/WebKit/LayoutTests/external/wpt/resources/webidl2/lib/webidl2.js b/third_party/WebKit/LayoutTests/external/wpt/resources/webidl2/lib/webidl2.js index 2f116c40..0c9a1fa 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/resources/webidl2/lib/webidl2.js +++ b/third_party/WebKit/LayoutTests/external/wpt/resources/webidl2/lib/webidl2.js
@@ -14,7 +14,8 @@ const types = ["float", "integer", "identifier", "string", "whitespace", "other"]; while (str.length > 0) { let matched = false; - for (const type of types) { + for (var i in types) { + const type = types[i]; str = str.replace(re[type], tok => { tokens.push({ type, value: tok }); matched = true; @@ -119,10 +120,11 @@ "multiline-comment": /^\/\*((?:.|\n|\r)*?)\*\// }; const wsTypes = []; - for (const k in re) wsTypes.push(k); + for (var k in re) wsTypes.push(k); while (w.length) { let matched = false; - for (const type of wsTypes) { + for (var i in wsTypes) { + const type = wsTypes[i]; w = w.replace(re[type], (tok, m1) => { store.push({ type: type + (pea ? ("-" + pea) : ""), value: m1 }); matched = true;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/0.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/0.js new file mode 100644 index 0000000..8de2c01 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/0.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/0.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/0.js.sub.headers new file mode 100644 index 0000000..6f9cb19 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/0.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing:
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/1.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/1.js new file mode 100644 index 0000000..220cf1a --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/1.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric"}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/1.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/1.js.sub.headers new file mode 100644 index 0000000..d5ebb5f --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/1.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/10.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/10.js new file mode 100644 index 0000000..220cf1a --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/10.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric"}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/10.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/10.js.sub.headers new file mode 100644 index 0000000..fc2300f --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/10.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric ;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/11.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/11.js new file mode 100644 index 0000000..220cf1a --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/11.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric"}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/11.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/11.js.sub.headers new file mode 100644 index 0000000..d5ed699 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/11.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric ,
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/12.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/12.js new file mode 100644 index 0000000..c32491d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/12.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","dur":123.4,"desc":"description"}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/12.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/12.js.sub.headers new file mode 100644 index 0000000..7b89b47 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/12.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric ; dur = 123.4 ; desc = description
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/13.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/13.js new file mode 100644 index 0000000..9b767142 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/13.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":"description","dur":123.4}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/13.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/13.js.sub.headers new file mode 100644 index 0000000..dcb056f --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/13.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric ; desc = description ; dur = 123.4
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/14.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/14.js new file mode 100644 index 0000000..153607bf --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/14.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":"description"}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/14.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/14.js.sub.headers new file mode 100644 index 0000000..7ebf8c3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/14.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc = "description"
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/15.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/15.js new file mode 100644 index 0000000..311cabe --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/15.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric1","dur":12.3,"desc":"description1"},{"name":"metric2","dur":45.6,"desc":"description2"},{"name":"metric3","dur":78.9,"desc":"description3"}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/15.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/15.js.sub.headers new file mode 100644 index 0000000..0389e997 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/15.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric1;dur=12.3;desc=description1,metric2;dur=45.6;desc=description2,metric3;dur=78.9;desc=description3
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/16.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/16.js new file mode 100644 index 0000000..ab8597f --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/16.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric1"},{"name":"metric2"},{"name":"metric3"},{"name":"metric4"},{"name":"metric5"}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/16.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/16.js.sub.headers new file mode 100644 index 0000000..b618a89 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/16.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric1,metric2 ,metric3, metric4 , metric5
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/17.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/17.js new file mode 100644 index 0000000..153607bf --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/17.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":"description"}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/17.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/17.js.sub.headers new file mode 100644 index 0000000..c083f60 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/17.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc="description"
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/18.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/18.js new file mode 100644 index 0000000..5924751 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/18.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":"\t description \t"}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/18.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/18.js.sub.headers new file mode 100644 index 0000000..aa51ae04 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/18.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc=" description "
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/19.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/19.js new file mode 100644 index 0000000..d8cc6b7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/19.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":"descr\"iption"}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/19.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/19.js.sub.headers new file mode 100644 index 0000000..d097b92 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/19.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc="descr\"iption"
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/2.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/2.js new file mode 100644 index 0000000..6fd97fa --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/2.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","dur":123.4}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/2.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/2.js.sub.headers new file mode 100644 index 0000000..14eb2f0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/2.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;dur=123.4
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/20.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/20.js new file mode 100644 index 0000000..107695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/20.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/20.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/20.js.sub.headers new file mode 100644 index 0000000..9b131fc --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/20.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc=\
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/21.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/21.js new file mode 100644 index 0000000..107695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/21.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/21.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/21.js.sub.headers new file mode 100644 index 0000000..7134be2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/21.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc="
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/22.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/22.js new file mode 100644 index 0000000..107695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/22.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/22.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/22.js.sub.headers new file mode 100644 index 0000000..465a36b6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/22.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc=\\
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/23.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/23.js new file mode 100644 index 0000000..107695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/23.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/23.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/23.js.sub.headers new file mode 100644 index 0000000..3b76de4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/23.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc=\"
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/24.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/24.js new file mode 100644 index 0000000..107695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/24.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/24.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/24.js.sub.headers new file mode 100644 index 0000000..c54a4d8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/24.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc="\
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/25.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/25.js new file mode 100644 index 0000000..107695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/25.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/25.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/25.js.sub.headers new file mode 100644 index 0000000..752441eb --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/25.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc=""
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/26.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/26.js new file mode 100644 index 0000000..107695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/26.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/26.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/26.js.sub.headers new file mode 100644 index 0000000..60dbdbb --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/26.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc=\\\
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/27.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/27.js new file mode 100644 index 0000000..107695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/27.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/27.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/27.js.sub.headers new file mode 100644 index 0000000..feff2c0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/27.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc=\\"
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/28.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/28.js new file mode 100644 index 0000000..107695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/28.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/28.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/28.js.sub.headers new file mode 100644 index 0000000..3ca9b6b2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/28.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc=\"\
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/29.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/29.js new file mode 100644 index 0000000..107695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/29.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/29.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/29.js.sub.headers new file mode 100644 index 0000000..ae0b8912 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/29.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc=\""
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/3.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/3.js new file mode 100644 index 0000000..6fd97fa --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/3.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","dur":123.4}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/3.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/3.js.sub.headers new file mode 100644 index 0000000..8c6fb60 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/3.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;dur="123.4"
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/30.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/30.js new file mode 100644 index 0000000..107695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/30.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/30.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/30.js.sub.headers new file mode 100644 index 0000000..24906f3c --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/30.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc="\\
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/31.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/31.js new file mode 100644 index 0000000..107695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/31.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/31.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/31.js.sub.headers new file mode 100644 index 0000000..aaceb6ba --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/31.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc="\"
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/32.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/32.js new file mode 100644 index 0000000..107695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/32.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/32.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/32.js.sub.headers new file mode 100644 index 0000000..59e01cf --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/32.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc=""\
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/33.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/33.js new file mode 100644 index 0000000..107695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/33.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/33.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/33.js.sub.headers new file mode 100644 index 0000000..d81429e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/33.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc="""
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/34.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/34.js new file mode 100644 index 0000000..107695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/34.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/34.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/34.js.sub.headers new file mode 100644 index 0000000..bfb8895 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/34.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc=\\\\
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/35.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/35.js new file mode 100644 index 0000000..107695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/35.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/35.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/35.js.sub.headers new file mode 100644 index 0000000..ff41d80b --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/35.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc=\\\"
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/36.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/36.js new file mode 100644 index 0000000..107695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/36.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/36.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/36.js.sub.headers new file mode 100644 index 0000000..a702069 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/36.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc=\\"\
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/37.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/37.js new file mode 100644 index 0000000..107695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/37.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/37.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/37.js.sub.headers new file mode 100644 index 0000000..ecc3756 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/37.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc=\\""
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/38.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/38.js new file mode 100644 index 0000000..107695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/38.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/38.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/38.js.sub.headers new file mode 100644 index 0000000..b13d9f4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/38.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc=\"\\
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/39.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/39.js new file mode 100644 index 0000000..107695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/39.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/39.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/39.js.sub.headers new file mode 100644 index 0000000..0297223 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/39.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc=\"\"
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/4.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/4.js new file mode 100644 index 0000000..153607bf --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/4.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":"description"}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/4.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/4.js.sub.headers new file mode 100644 index 0000000..e929723 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/4.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc=description
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/40.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/40.js new file mode 100644 index 0000000..107695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/40.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/40.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/40.js.sub.headers new file mode 100644 index 0000000..9dd5cd4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/40.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc=\""\
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/41.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/41.js new file mode 100644 index 0000000..107695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/41.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/41.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/41.js.sub.headers new file mode 100644 index 0000000..c5a006c --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/41.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc=\"""
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/42.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/42.js new file mode 100644 index 0000000..107695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/42.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/42.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/42.js.sub.headers new file mode 100644 index 0000000..8a04d7c --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/42.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc="\\\
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/43.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/43.js new file mode 100644 index 0000000..b318cb7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/43.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":"\\"}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/43.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/43.js.sub.headers new file mode 100644 index 0000000..8208c16 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/43.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc="\\"
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/44.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/44.js new file mode 100644 index 0000000..107695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/44.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/44.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/44.js.sub.headers new file mode 100644 index 0000000..e50f42b --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/44.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc="\"\
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/45.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/45.js new file mode 100644 index 0000000..993a690 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/45.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":"\""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/45.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/45.js.sub.headers new file mode 100644 index 0000000..055df4fb --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/45.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc="\""
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/46.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/46.js new file mode 100644 index 0000000..107695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/46.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/46.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/46.js.sub.headers new file mode 100644 index 0000000..5d7ef807 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/46.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc=""\\
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/47.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/47.js new file mode 100644 index 0000000..107695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/47.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/47.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/47.js.sub.headers new file mode 100644 index 0000000..f52c6e8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/47.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc=""\"
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/48.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/48.js new file mode 100644 index 0000000..107695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/48.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/48.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/48.js.sub.headers new file mode 100644 index 0000000..9eeadd3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/48.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc="""\
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/49.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/49.js new file mode 100644 index 0000000..107695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/49.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":""}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/49.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/49.js.sub.headers new file mode 100644 index 0000000..2dbff3c --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/49.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc=""""
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/5.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/5.js new file mode 100644 index 0000000..153607bf --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/5.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":"description"}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/5.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/5.js.sub.headers new file mode 100644 index 0000000..c083f60 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/5.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc="description"
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/50.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/50.js new file mode 100644 index 0000000..61ec691 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/50.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","dur":12.3,"desc":"description1"},{"name":"metric","dur":45.6,"desc":"description2"}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/50.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/50.js.sub.headers new file mode 100644 index 0000000..c8ac573 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/50.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;dur=12.3;desc=description1,metric;dur=45.6;desc=description2
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/51.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/51.js new file mode 100644 index 0000000..c32491d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/51.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","dur":123.4,"desc":"description"}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/51.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/51.js.sub.headers new file mode 100644 index 0000000..5825a54 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/51.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;DuR=123.4;DeSc=description
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/52.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/52.js new file mode 100644 index 0000000..6617af5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/52.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"MeTrIc","desc":"DeScRiPtIoN"}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/52.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/52.js.sub.headers new file mode 100644 index 0000000..f5fcff98 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/52.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: MeTrIc;desc=DeScRiPtIoN
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/53.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/53.js new file mode 100644 index 0000000..40faf41 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/53.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","dur":0}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/53.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/53.js.sub.headers new file mode 100644 index 0000000..3de0f19 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/53.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;dur=foo
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/54.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/54.js new file mode 100644 index 0000000..40faf41 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/54.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","dur":0}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/54.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/54.js.sub.headers new file mode 100644 index 0000000..78f6704 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/54.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;dur="foo"
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/55.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/55.js new file mode 100644 index 0000000..4e2b14b --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/55.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric1","desc":"description","dur":123.4},{"name":"metric2"}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/55.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/55.js.sub.headers new file mode 100644 index 0000000..578232a --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/55.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric1;foo=bar;desc=description;foo=bar;dur=123.4;foo=bar,metric2
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/56.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/56.js new file mode 100644 index 0000000..6fd97fa --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/56.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","dur":123.4}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/56.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/56.js.sub.headers new file mode 100644 index 0000000..8a220ab --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/56.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;dur=123.4;dur=567.8
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/57.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/57.js new file mode 100644 index 0000000..40faf41 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/57.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","dur":0}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/57.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/57.js.sub.headers new file mode 100644 index 0000000..2614e203 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/57.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;dur=foo;dur=567.8
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/58.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/58.js new file mode 100644 index 0000000..13250bb --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/58.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":"description1"}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/58.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/58.js.sub.headers new file mode 100644 index 0000000..e5ef5694 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/58.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc=description1;desc=description2
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/59.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/59.js new file mode 100644 index 0000000..0282f7d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/59.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","dur":0,"desc":"description"}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/59.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/59.js.sub.headers new file mode 100644 index 0000000..5b44836 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/59.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;dur;dur=123.4;desc=description
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/6.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/6.js new file mode 100644 index 0000000..c32491d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/6.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","dur":123.4,"desc":"description"}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/6.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/6.js.sub.headers new file mode 100644 index 0000000..5dbc9d6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/6.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;dur=123.4;desc=description
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/60.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/60.js new file mode 100644 index 0000000..0282f7d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/60.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","dur":0,"desc":"description"}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/60.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/60.js.sub.headers new file mode 100644 index 0000000..bfbddf1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/60.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;dur=;dur=123.4;desc=description
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/61.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/61.js new file mode 100644 index 0000000..62b744cc --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/61.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":"","dur":123.4}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/61.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/61.js.sub.headers new file mode 100644 index 0000000..6d605ad --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/61.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc;desc=description;dur=123.4
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/62.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/62.js new file mode 100644 index 0000000..62b744cc --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/62.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":"","dur":123.4}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/62.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/62.js.sub.headers new file mode 100644 index 0000000..182a81a7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/62.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc=;desc=description;dur=123.4
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/63.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/63.js new file mode 100644 index 0000000..839f8064 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/63.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":"d1","dur":123.4}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/63.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/63.js.sub.headers new file mode 100644 index 0000000..8e9b117 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/63.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc=d1 d2;dur=123.4
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/64.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/64.js new file mode 100644 index 0000000..d64ea0a9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/64.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric1","desc":"d1"},{"name":"metric2"}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/64.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/64.js.sub.headers new file mode 100644 index 0000000..b1dd0cc5b --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/64.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric1;desc=d1 d2,metric2
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/65.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/65.js new file mode 100644 index 0000000..839f8064 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/65.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":"d1","dur":123.4}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/65.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/65.js.sub.headers new file mode 100644 index 0000000..63946cdd --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/65.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc="d1" d2;dur=123.4
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/66.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/66.js new file mode 100644 index 0000000..d64ea0a9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/66.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric1","desc":"d1"},{"name":"metric2"}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/66.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/66.js.sub.headers new file mode 100644 index 0000000..bddbb2c --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/66.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric1;desc="d1" d2,metric2
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/67.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/67.js new file mode 100644 index 0000000..220cf1a --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/67.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric"}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/67.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/67.js.sub.headers new file mode 100644 index 0000000..5fe55cc --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/67.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric== ""foo;dur=123.4
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/68.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/68.js new file mode 100644 index 0000000..4077b26a --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/68.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric1"}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/68.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/68.js.sub.headers new file mode 100644 index 0000000..27dabbe0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/68.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric1== ""foo,metric2
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/69.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/69.js new file mode 100644 index 0000000..40faf41 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/69.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","dur":0}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/69.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/69.js.sub.headers new file mode 100644 index 0000000..55282410 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/69.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;dur foo=12
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/7.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/7.js new file mode 100644 index 0000000..9b767142 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/7.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":"description","dur":123.4}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/7.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/7.js.sub.headers new file mode 100644 index 0000000..c636900 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/7.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc=description;dur=123.4
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/70.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/70.js new file mode 100644 index 0000000..220cf1a --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/70.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric"}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/70.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/70.js.sub.headers new file mode 100644 index 0000000..aa8f70b --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/70.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;foo dur=12
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/71.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/71.js new file mode 100644 index 0000000..8de2c01 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/71.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/71.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/71.js.sub.headers new file mode 100644 index 0000000..26fcf28 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/71.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing:
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/72.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/72.js new file mode 100644 index 0000000..8de2c01 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/72.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/72.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/72.js.sub.headers new file mode 100644 index 0000000..74e059fd --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/72.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: =
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/73.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/73.js new file mode 100644 index 0000000..8de2c01 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/73.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/73.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/73.js.sub.headers new file mode 100644 index 0000000..eeaebdf4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/73.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: [
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/74.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/74.js new file mode 100644 index 0000000..8de2c01 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/74.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/74.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/74.js.sub.headers new file mode 100644 index 0000000..b4f3c56 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/74.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: ]
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/75.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/75.js new file mode 100644 index 0000000..8de2c01 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/75.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/75.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/75.js.sub.headers new file mode 100644 index 0000000..9a3684d4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/75.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: ;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/76.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/76.js new file mode 100644 index 0000000..8de2c01 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/76.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/76.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/76.js.sub.headers new file mode 100644 index 0000000..79cbd0c --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/76.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: ,
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/77.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/77.js new file mode 100644 index 0000000..8de2c01 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/77.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/77.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/77.js.sub.headers new file mode 100644 index 0000000..888fa71e --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/77.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: =;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/78.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/78.js new file mode 100644 index 0000000..8de2c01 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/78.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/78.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/78.js.sub.headers new file mode 100644 index 0000000..fc40e70 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/78.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: ;=
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/79.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/79.js new file mode 100644 index 0000000..8de2c01 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/79.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/79.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/79.js.sub.headers new file mode 100644 index 0000000..0516c4c --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/79.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: =,
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/8.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/8.js new file mode 100644 index 0000000..8581efd9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/8.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"aB3!#$%&'*+-.^_`|~"}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/8.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/8.js.sub.headers new file mode 100644 index 0000000..1d1bb02 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/8.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: aB3!#$%&'*+-.^_`|~
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/80.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/80.js new file mode 100644 index 0000000..8de2c01 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/80.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/80.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/80.js.sub.headers new file mode 100644 index 0000000..03b3909 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/80.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: ,=
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/81.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/81.js new file mode 100644 index 0000000..8de2c01 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/81.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/81.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/81.js.sub.headers new file mode 100644 index 0000000..680d2a2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/81.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: ;,
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/82.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/82.js new file mode 100644 index 0000000..8de2c01 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/82.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/82.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/82.js.sub.headers new file mode 100644 index 0000000..7ab1448b --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/82.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: ,;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/83.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/83.js new file mode 100644 index 0000000..8de2c01 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/83.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/83.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/83.js.sub.headers new file mode 100644 index 0000000..bd079bc --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/83.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: =;,
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/9.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/9.js new file mode 100644 index 0000000..e03b07a2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/9.js
@@ -0,0 +1 @@ +testServerTiming(document.currentScript.src, [{"name":"metric","desc":"descr;,=iption","dur":123.4}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/9.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/9.js.sub.headers new file mode 100644 index 0000000..c385706d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/9.js.sub.headers
@@ -0,0 +1 @@ +Server-Timing: metric;desc="descr;,=iption";dur=123.4
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/server_timing_header-parsing.html b/third_party/WebKit/LayoutTests/external/wpt/server-timing/server_timing_header-parsing.html new file mode 100644 index 0000000..a598a71 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/server_timing_header-parsing.html
@@ -0,0 +1,38 @@ +<!DOCTYPE html> +<!-- +tests generated by: + https://github.com/cvazac/generate-server-timing-tests +--> + +<head> + <meta charset='utf-8' /> + <script src="/resources/testharness.js"></script> + <script src='/resources/testharnessreport.js'></script> + <script src="/common/performance-timeline-utils.js"></script> + <script> + setup({explicit_done: true}) + function testServerTiming(resource, expectedResults) { + const {serverTiming} = performance.getEntriesByName(resource)[0] + const fileName = resource.substring(resource.lastIndexOf('/') + 1) + test_equals(serverTiming.length, expectedResults.length, `${fileName} - count (${serverTiming.length} ?== ${expectedResults.length})`) + + expectedResults.forEach(function(expectedResult, i) { + const dur = expectedResult.dur || 0 + const desc = expectedResult.desc || '' + const index = expectedResults.length === 1 ? '' : `[${i}].` + test_equals(expectedResult.name, serverTiming[i].name, + `${fileName} - ${index}name (${expectedResult.name} ?== ${serverTiming[i].name})`) + test_equals(dur, serverTiming[i].duration, + `${fileName} - ${index}duration (${dur} ?== ${serverTiming[i].duration})`) + test_equals(desc, serverTiming[i].description, + `${fileName} - ${index}description (${desc} ?== ${serverTiming[i].description})`) + }) + } + for (let i = 0; i <= 83; i++) { + var script = document.createElement('script') + script.src = `./resources/parsing/${i}.js` + document.getElementsByTagName('head')[0].appendChild(script) + } + window.addEventListener('load', done) + </script> +</head>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/test_server_timing.html b/third_party/WebKit/LayoutTests/external/wpt/server-timing/test_server_timing.html index fa100301..2d43aa2 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/server-timing/test_server_timing.html +++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/test_server_timing.html
@@ -3,7 +3,6 @@ <meta charset='utf-8' /> <script src="/resources/testharness.js"></script> <script src='/resources/testharnessreport.js'></script> - <script src='resources/webperftestharness.js'></script> <script src="/common/performance-timeline-utils.js"></script> <script> setup({explicit_done: true})
diff --git a/third_party/WebKit/LayoutTests/external/wpt/svg/extensibility/foreignObject/properties.svg b/third_party/WebKit/LayoutTests/external/wpt/svg/extensibility/foreignObject/properties.svg index a89e1e5..b92a6d1 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/svg/extensibility/foreignObject/properties.svg +++ b/third_party/WebKit/LayoutTests/external/wpt/svg/extensibility/foreignObject/properties.svg
@@ -23,29 +23,34 @@ <script><![CDATA[ test(function() { var first = document.getElementById('first'); - var second = document.getElementById('second'); - var third = document.getElementById('third'); - var fourth = document.getElementById('fourth'); - assert_equals(getComputedStyle(first).x, "0px"); assert_equals(getComputedStyle(first).y, "0px"); assert_equals(getComputedStyle(first).width, "auto"); assert_equals(getComputedStyle(first).height, "auto"); + }, 'width and height default to auto'); + test(function() { + var second = document.getElementById('second'); assert_equals(getComputedStyle(second).x, "10px"); assert_equals(getComputedStyle(second).y, "20px"); assert_equals(getComputedStyle(second).width, "30px"); assert_equals(getComputedStyle(second).height, "40px"); + }, 'style rules are applied'); + test(function() { + var third = document.getElementById('third'); assert_equals(getComputedStyle(third).x, "50px"); assert_equals(getComputedStyle(third).y, "60px"); assert_equals(getComputedStyle(third).width, "70px"); assert_equals(getComputedStyle(third).height, "80px"); + }, 'attributes set properties'); + test(function() { + var fourth = document.getElementById('fourth'); assert_equals(getComputedStyle(fourth).x, "10px"); assert_equals(getComputedStyle(fourth).y, "20px"); assert_equals(getComputedStyle(fourth).width, "30px"); assert_equals(getComputedStyle(fourth).height, "40px"); - }); + }, 'style rules override attributes'); ]]></script> </svg>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/xhr/interfaces.html b/third_party/WebKit/LayoutTests/external/wpt/xhr/interfaces.html index 56ba552..cc98075d 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/xhr/interfaces.html +++ b/third_party/WebKit/LayoutTests/external/wpt/xhr/interfaces.html
@@ -14,113 +14,16 @@ callback EventHandlerNonNull = any (Event event); typedef EventHandlerNonNull? EventHandler; </script> -<script type=text/plain> -/*[Exposed=(Window,Worker)]*/ -interface XMLHttpRequestEventTarget : EventTarget { - // event handlers - attribute EventHandler onloadstart; - attribute EventHandler onprogress; - attribute EventHandler onabort; - attribute EventHandler onerror; - attribute EventHandler onload; - attribute EventHandler ontimeout; - attribute EventHandler onloadend; -}; - -/*[Exposed=(Window,Worker)]*/ -interface XMLHttpRequestUpload : XMLHttpRequestEventTarget { -}; - -enum XMLHttpRequestResponseType { - "", - "arraybuffer", - "blob", - "document", - "json", - "text" -}; - -[Constructor/*, - Exposed=(Window,Worker)*/] -interface XMLHttpRequest : XMLHttpRequestEventTarget { - // event handler - attribute EventHandler onreadystatechange; - - // states - const unsigned short UNSENT = 0; - const unsigned short OPENED = 1; - const unsigned short HEADERS_RECEIVED = 2; - const unsigned short LOADING = 3; - const unsigned short DONE = 4; - readonly attribute unsigned short readyState; - - // request - void open(ByteString method, USVString url); - void open(ByteString method, USVString url, boolean async, optional USVString? username = null, optional USVString? password = null); - void setRequestHeader(ByteString name, ByteString value); - attribute unsigned long timeout; - attribute boolean withCredentials; - readonly attribute XMLHttpRequestUpload upload; - void send(optional (Document or BodyInit)? body = null); - void abort(); - - // response - readonly attribute USVString responseURL; - readonly attribute unsigned short status; - readonly attribute ByteString statusText; - ByteString? getResponseHeader(ByteString name); - ByteString getAllResponseHeaders(); - void overrideMimeType(DOMString mime); - attribute XMLHttpRequestResponseType responseType; - readonly attribute any response; - readonly attribute USVString responseText; - [Exposed=Window] readonly attribute Document? responseXML; -}; - -typedef (File or USVString) FormDataEntryValue; - -[Constructor(optional HTMLFormElement form)/*, - Exposed=(Window,Worker)*/] -interface FormData { - void append(USVString name, Blob value, optional USVString filename); - void append(USVString name, USVString value); - void delete(USVString name); - FormDataEntryValue? get(USVString name); - sequence<FormDataEntryValue> getAll(USVString name); - boolean has(USVString name); - void set(USVString name, Blob value, optional USVString filename); - void set(USVString name, USVString value); - /*iterable<USVString, FormDataEntryValue>;*/ -}; - -[Constructor(DOMString type, optional ProgressEventInit eventInitDict)/*, - Exposed=(Window,Worker)*/] -interface ProgressEvent : Event { - readonly attribute boolean lengthComputable; - readonly attribute unsigned long long loaded; - readonly attribute unsigned long long total; -}; - -dictionary ProgressEventInit : EventInit { - boolean lengthComputable = false; - unsigned long long loaded = 0; - unsigned long long total = 0; -}; -</script> <script> "use strict"; var form = document.createElement("form"); var idlArray = new IdlArray(); -function doTest(domIdl) { +function doTest([domIdl, xhrIdl]) { idlArray.add_untested_idls(domIdl); - [].forEach.call(document.querySelectorAll("script[type=text\\/plain]"), function(node) { - if (node.className == "untested") { - idlArray.add_untested_idls(node.textContent); - } else { - idlArray.add_idls(node.textContent); - } - }); + var untestedIdl = document.querySelector("script.untested").textContent; + idlArray.add_untested_idls(untestedIdl); + idlArray.add_idls(xhrIdl); idlArray.add_objects({ XMLHttpRequest: ['new XMLHttpRequest()'], XMLHttpRequestUpload: ['(new XMLHttpRequest()).upload'], @@ -129,8 +32,13 @@ idlArray.test(); } -promise_test(function() { - return fetch("/interfaces/dom.idl").then(response => response.text()) - .then(doTest); +function fetchText(url) { + return fetch(url).then(response => response.text()); +} + +promise_test(() => { + return Promise.all(["/interfaces/dom.idl", + "/interfaces/xhr.idl"].map(fetchText)) + .then(doTest); }, "Test driver"); </script>
diff --git a/third_party/WebKit/LayoutTests/fast/dom/htmlallcollection-name.html b/third_party/WebKit/LayoutTests/fast/dom/htmlallcollection-name.html index 3388e5f..a7cce7d4 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/htmlallcollection-name.html +++ b/third_party/WebKit/LayoutTests/fast/dom/htmlallcollection-name.html
@@ -24,7 +24,6 @@ <script> test(() => { assert_true(!!document.all.a); }, '<a> should be found.'); -test(() => { assert_true(!!document.all.applet); }, '<applet> should be found.'); test(() => { assert_true(!!document.all.button); }, '<button> should be found.'); test(() => { assert_true(!!document.all.embed); }, '<embed> should be found.'); test(() => { assert_true(!!document.all.form); }, '<form> should be found.'); @@ -40,6 +39,7 @@ test(() => { assert_equals(document.all.area, undefined); }, '<area> should not be found.'); test(() => { assert_equals(document.all.option, undefined); }, '<option> should not be found.'); test(() => { assert_equals(document.all.output, undefined); }, '<output> should not be found.'); +test(() => { assert_equals(document.all.applet, undefined); }, '<applet> should not be found.'); document.documentElement.innerHTML = '<frameset name="frameset"><frame name="frame"></frame></frameset>'; test(() => { assert_true(!!document.all.frame); }, '<frame> should be found.');
diff --git a/third_party/WebKit/LayoutTests/fast/hidpi/offset-path-ray-expected.html b/third_party/WebKit/LayoutTests/fast/hidpi/offset-path-ray-expected.html new file mode 100644 index 0000000..929b9d81 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/hidpi/offset-path-ray-expected.html
@@ -0,0 +1,17 @@ +<!DOCTYPE html> +<script src="resources/srcset-helper.js"></script> + +<style> + #target { + background-color: lime; + width: 21px; + height: 13px; + position: absolute; + left: 30px; + top: 0px; + } +</style> + +<body> + <div id="target"></div> +</body>
diff --git a/third_party/WebKit/LayoutTests/fast/hidpi/offset-path-ray.html b/third_party/WebKit/LayoutTests/fast/hidpi/offset-path-ray.html new file mode 100644 index 0000000..7cdb6a2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/hidpi/offset-path-ray.html
@@ -0,0 +1,21 @@ +<!DOCTYPE html> +<script src="resources/srcset-helper.js"></script> + +<style> + #target { + background-color: lime; + width: 21px; + height: 13px; + position: absolute; + left: 0px; + top: 0px; + transform-origin: 0px 0px; + offset-path: ray(90deg closest-side); + offset-distance: 30px; + } +</style> + +<body> + <!-- This test passes if the target moves 30px across --> + <div id="target"></div> +</body>
diff --git a/third_party/WebKit/LayoutTests/fast/hidpi/offset-path-string-expected.html b/third_party/WebKit/LayoutTests/fast/hidpi/offset-path-string-expected.html new file mode 100644 index 0000000..7958c1d --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/hidpi/offset-path-string-expected.html
@@ -0,0 +1,17 @@ +<!DOCTYPE html> +<script src="resources/srcset-helper.js"></script> + +<style> + #target { + background-color: lime; + width: 21px; + height: 13px; + position: absolute; + left: 12px; + top: 8px; + } +</style> + +<body> + <div id="target"></div> +</body>
diff --git a/third_party/WebKit/LayoutTests/fast/hidpi/offset-path-string.html b/third_party/WebKit/LayoutTests/fast/hidpi/offset-path-string.html new file mode 100644 index 0000000..198d1f5e --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/hidpi/offset-path-string.html
@@ -0,0 +1,21 @@ +<!DOCTYPE html> +<script src="resources/srcset-helper.js"></script> + +<style> + #target { + background-color: lime; + width: 21px; + height: 13px; + position: absolute; + left: 0px; + top: 0px; + transform-origin: 0px 0px; + offset-path: path('m 0 0 v 8 h 15 z'); /* length 40 */ + offset-distance: calc(30px + 75%); /* 60px -> 20px */ + } +</style> + +<body> + <!-- This test passes if the target moves 8px down and 12px across --> + <div id="target"></div> +</body>
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/animations/3d/matrix-transform-type-animation-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/animations/3d/matrix-transform-type-animation-expected.png new file mode 100644 index 0000000..c834dc2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/animations/3d/matrix-transform-type-animation-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/css3/blending/effect-background-blend-mode-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/css3/blending/effect-background-blend-mode-expected.png new file mode 100644 index 0000000..496856f --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/css3/blending/effect-background-blend-mode-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/css3/blending/effect-background-blend-mode-stacking-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/css3/blending/effect-background-blend-mode-stacking-expected.png new file mode 100644 index 0000000..7c833e9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/css3/blending/effect-background-blend-mode-stacking-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/css3/blending/effect-background-blend-mode-tiled-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/css3/blending/effect-background-blend-mode-tiled-expected.png new file mode 100644 index 0000000..6a85f94 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/css3/blending/effect-background-blend-mode-tiled-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/css3/blending/mix-blend-mode-isolated-group-1-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/css3/blending/mix-blend-mode-isolated-group-1-expected.png new file mode 100644 index 0000000..e84839d --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/css3/blending/mix-blend-mode-isolated-group-1-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/css3/filters/nested-filter-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/css3/filters/nested-filter-expected.png new file mode 100644 index 0000000..dcc6523 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/css3/filters/nested-filter-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/backgrounds/svg-as-mask-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/backgrounds/svg-as-mask-expected.png new file mode 100644 index 0000000..7ecb4560 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/backgrounds/svg-as-mask-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/clip/overflow-border-radius-combinations-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/clip/overflow-border-radius-combinations-expected.png new file mode 100644 index 0000000..67d99bf --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/clip/overflow-border-radius-combinations-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/clip/overflow-border-radius-combinations-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/clip/overflow-border-radius-combinations-expected.txt new file mode 100644 index 0000000..5a6777802 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/clip/overflow-border-radius-combinations-expected.txt
@@ -0,0 +1,45 @@ +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 462x19 + text run at (0,0) width 462: "The white text and grey backgrounds should all clip to the border-radius. " + LayoutBR {BR} at (461,15) size 1x0 + LayoutText {#text} at (240,145) size 4x19 + text run at (240,145) width 4: " " + LayoutText {#text} at (484,145) size 4x19 + text run at (484,145) width 4: " " + LayoutText {#text} at (0,0) size 0x0 + LayoutText {#text} at (240,290) size 4x19 + text run at (240,290) width 4: " " + LayoutBR {BR} at (244,305) size 0x0 + LayoutText {#text} at (0,0) size 0x0 +layer at (18,38) size 220x120 clip at (28,48) size 200x100 + LayoutBlockFlow {DIV} at (10,30) size 220x120 [border: (10px solid #000000)] + LayoutBlockFlow {DIV} at (10,10) size 200x100 [color=#FFFFFF] [bgcolor=#808080] + LayoutText {#text} at (0,0) size 81x19 + text run at (0,0) width 81: "static > static" +layer at (262,38) size 220x120 clip at (272,48) size 200x100 + LayoutBlockFlow {DIV} at (254,30) size 220x120 [border: (10px solid #000000)] +layer at (272,48) size 200x100 + LayoutBlockFlow (relative positioned) {DIV} at (10,10) size 200x100 [color=#FFFFFF] [bgcolor=#808080] + LayoutText {#text} at (0,0) size 95x19 + text run at (0,0) width 95: "static > relative" +layer at (506,38) size 220x120 clip at (516,48) size 200x100 + LayoutBlockFlow (relative positioned) {DIV} at (498,30) size 220x120 [border: (10px solid #000000)] + LayoutBlockFlow {DIV} at (10,10) size 200x100 [color=#FFFFFF] [bgcolor=#808080] + LayoutText {#text} at (0,0) size 95x19 + text run at (0,0) width 95: "relative > static" +layer at (18,183) size 220x120 clip at (28,193) size 200x100 + LayoutBlockFlow (relative positioned) {DIV} at (10,175) size 220x120 [border: (10px solid #000000)] +layer at (28,193) size 200x100 + LayoutBlockFlow (relative positioned) {DIV} at (10,10) size 200x100 [color=#FFFFFF] [bgcolor=#808080] + LayoutText {#text} at (0,0) size 109x19 + text run at (0,0) width 109: "relative > relative" +layer at (18,328) size 220x120 clip at (28,338) size 200x100 + LayoutBlockFlow (relative positioned) {DIV} at (10,320) size 220x120 [border: (10px solid #000000)] +layer at (28,338) size 200x100 + LayoutBlockFlow (positioned) {DIV} at (10,10) size 200x100 [color=#FFFFFF] [bgcolor=#808080] + LayoutText {#text} at (0,0) size 115x19 + text run at (0,0) width 115: "relative > absolute"
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/clip/overflow-border-radius-composited-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/clip/overflow-border-radius-composited-expected.png new file mode 100644 index 0000000..f161384 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/clip/overflow-border-radius-composited-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/clip/overflow-border-radius-composited-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/clip/overflow-border-radius-composited-expected.txt new file mode 100644 index 0000000..6cf6c18 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/clip/overflow-border-radius-composited-expected.txt
@@ -0,0 +1,47 @@ +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 462x19 + text run at (0,0) width 462: "The white text and grey backgrounds should all clip to the border-radius. " + LayoutBR {BR} at (461,15) size 1x0 + LayoutText {#text} at (240,145) size 4x19 + text run at (240,145) width 4: " " + LayoutText {#text} at (484,145) size 4x19 + text run at (484,145) width 4: " " + LayoutText {#text} at (0,0) size 0x0 + LayoutText {#text} at (240,290) size 4x19 + text run at (240,290) width 4: " " + LayoutBR {BR} at (244,305) size 0x0 + LayoutText {#text} at (0,0) size 0x0 +layer at (18,38) size 220x120 clip at (28,48) size 200x100 scrollWidth 206 scrollHeight 156 + LayoutBlockFlow {DIV} at (10,30) size 220x120 [border: (10px solid #000000)] +layer at (262,38) size 220x120 clip at (272,48) size 200x100 scrollWidth 206 scrollHeight 156 + LayoutBlockFlow {DIV} at (254,30) size 220x120 [border: (10px solid #000000)] +layer at (28,48) size 200x100 + LayoutBlockFlow {DIV} at (10,10) size 200x100 [color=#FFFFFF] [bgcolor=#808080] + LayoutText {#text} at (0,0) size 81x19 + text run at (0,0) width 81: "static > static" +layer at (272,48) size 200x100 + LayoutBlockFlow (relative positioned) {DIV} at (10,10) size 200x100 [color=#FFFFFF] [bgcolor=#808080] + LayoutText {#text} at (0,0) size 95x19 + text run at (0,0) width 95: "static > relative" +layer at (506,38) size 220x120 clip at (516,48) size 200x100 scrollWidth 206 scrollHeight 156 + LayoutBlockFlow (relative positioned) {DIV} at (498,30) size 220x120 [border: (10px solid #000000)] +layer at (516,48) size 200x100 + LayoutBlockFlow {DIV} at (10,10) size 200x100 [color=#FFFFFF] [bgcolor=#808080] + LayoutText {#text} at (0,0) size 95x19 + text run at (0,0) width 95: "relative > static" +layer at (18,183) size 220x120 clip at (28,193) size 200x100 scrollWidth 206 scrollHeight 156 + LayoutBlockFlow (relative positioned) {DIV} at (10,175) size 220x120 [border: (10px solid #000000)] +layer at (28,193) size 200x100 + LayoutBlockFlow (relative positioned) {DIV} at (10,10) size 200x100 [color=#FFFFFF] [bgcolor=#808080] + LayoutText {#text} at (0,0) size 109x19 + text run at (0,0) width 109: "relative > relative" +layer at (18,328) size 220x120 clip at (28,338) size 200x100 scrollWidth 206 scrollHeight 156 + LayoutBlockFlow (relative positioned) {DIV} at (10,320) size 220x120 [border: (10px solid #000000)] +layer at (28,338) size 200x100 + LayoutBlockFlow (positioned) {DIV} at (10,10) size 200x100 [color=#FFFFFF] [bgcolor=#808080] + LayoutText {#text} at (0,0) size 115x19 + text run at (0,0) width 115: "relative > absolute"
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/clip/overflow-border-radius-transformed-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/clip/overflow-border-radius-transformed-expected.png new file mode 100644 index 0000000..df5ae13d --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/clip/overflow-border-radius-transformed-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/clip/overflow-border-radius-transformed-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/clip/overflow-border-radius-transformed-expected.txt new file mode 100644 index 0000000..6cf6c18 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/clip/overflow-border-radius-transformed-expected.txt
@@ -0,0 +1,47 @@ +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 462x19 + text run at (0,0) width 462: "The white text and grey backgrounds should all clip to the border-radius. " + LayoutBR {BR} at (461,15) size 1x0 + LayoutText {#text} at (240,145) size 4x19 + text run at (240,145) width 4: " " + LayoutText {#text} at (484,145) size 4x19 + text run at (484,145) width 4: " " + LayoutText {#text} at (0,0) size 0x0 + LayoutText {#text} at (240,290) size 4x19 + text run at (240,290) width 4: " " + LayoutBR {BR} at (244,305) size 0x0 + LayoutText {#text} at (0,0) size 0x0 +layer at (18,38) size 220x120 clip at (28,48) size 200x100 scrollWidth 206 scrollHeight 156 + LayoutBlockFlow {DIV} at (10,30) size 220x120 [border: (10px solid #000000)] +layer at (262,38) size 220x120 clip at (272,48) size 200x100 scrollWidth 206 scrollHeight 156 + LayoutBlockFlow {DIV} at (254,30) size 220x120 [border: (10px solid #000000)] +layer at (28,48) size 200x100 + LayoutBlockFlow {DIV} at (10,10) size 200x100 [color=#FFFFFF] [bgcolor=#808080] + LayoutText {#text} at (0,0) size 81x19 + text run at (0,0) width 81: "static > static" +layer at (272,48) size 200x100 + LayoutBlockFlow (relative positioned) {DIV} at (10,10) size 200x100 [color=#FFFFFF] [bgcolor=#808080] + LayoutText {#text} at (0,0) size 95x19 + text run at (0,0) width 95: "static > relative" +layer at (506,38) size 220x120 clip at (516,48) size 200x100 scrollWidth 206 scrollHeight 156 + LayoutBlockFlow (relative positioned) {DIV} at (498,30) size 220x120 [border: (10px solid #000000)] +layer at (516,48) size 200x100 + LayoutBlockFlow {DIV} at (10,10) size 200x100 [color=#FFFFFF] [bgcolor=#808080] + LayoutText {#text} at (0,0) size 95x19 + text run at (0,0) width 95: "relative > static" +layer at (18,183) size 220x120 clip at (28,193) size 200x100 scrollWidth 206 scrollHeight 156 + LayoutBlockFlow (relative positioned) {DIV} at (10,175) size 220x120 [border: (10px solid #000000)] +layer at (28,193) size 200x100 + LayoutBlockFlow (relative positioned) {DIV} at (10,10) size 200x100 [color=#FFFFFF] [bgcolor=#808080] + LayoutText {#text} at (0,0) size 109x19 + text run at (0,0) width 109: "relative > relative" +layer at (18,328) size 220x120 clip at (28,338) size 200x100 scrollWidth 206 scrollHeight 156 + LayoutBlockFlow (relative positioned) {DIV} at (10,320) size 220x120 [border: (10px solid #000000)] +layer at (28,338) size 200x100 + LayoutBlockFlow (positioned) {DIV} at (10,10) size 200x100 [color=#FFFFFF] [bgcolor=#808080] + LayoutText {#text} at (0,0) size 115x19 + text run at (0,0) width 115: "relative > absolute"
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/css/nested-rounded-corners-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/css/nested-rounded-corners-expected.png new file mode 100644 index 0000000..701ddfa --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/css/nested-rounded-corners-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/css/resize-corner-tracking-transformed-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/css/resize-corner-tracking-transformed-expected.png new file mode 100644 index 0000000..fa400f9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/css/resize-corner-tracking-transformed-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png new file mode 100644 index 0000000..b71577e2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/forms/calendar-picker/calendar-picker-appearance-zoom125-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/forms/datalist/input-appearance-range-with-transform-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/forms/datalist/input-appearance-range-with-transform-expected.png new file mode 100644 index 0000000..2725cd2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/forms/datalist/input-appearance-range-with-transform-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/forms/placeholder-position-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/forms/placeholder-position-expected.png new file mode 100644 index 0000000..10626c3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/forms/placeholder-position-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/forms/select-popup/popup-menu-appearance-transform-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/forms/select-popup/popup-menu-appearance-transform-expected.png new file mode 100644 index 0000000..cb372b2c --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/forms/select-popup/popup-menu-appearance-transform-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/frames/frame-set-scaling-rotate-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/frames/frame-set-scaling-rotate-expected.png new file mode 100644 index 0000000..4ac4af6a --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/frames/frame-set-scaling-rotate-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/frames/frame-set-scaling-skew-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/frames/frame-set-scaling-skew-expected.png new file mode 100644 index 0000000..fdbac98d --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/frames/frame-set-scaling-skew-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/overflow/overflow-with-local-background-attachment-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/overflow/overflow-with-local-background-attachment-expected.png new file mode 100644 index 0000000..e72d7c5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/overflow/overflow-with-local-background-attachment-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/reflections/opacity-reflection-transform-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/reflections/opacity-reflection-transform-expected.png new file mode 100644 index 0000000..aa1392a5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/reflections/opacity-reflection-transform-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/sub-pixel/should-not-repaint-subpixel-composited-layer-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/sub-pixel/should-not-repaint-subpixel-composited-layer-expected.txt new file mode 100644 index 0000000..d2e1e11 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/fast/sub-pixel/should-not-repaint-subpixel-composited-layer-expected.txt
@@ -0,0 +1,715 @@ +10.1: +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF" + }, + { + "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "bounds": [100, 50], + "drawsContent": false, + "transform": 1 + } + ], + "transforms": [ + { + "id": 1, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [18, 8, 0, 1] + ] + } + ], + "objectPaintInvalidations": [ + { + "object": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "reason": "geometry" + } + ] +} +10.2: +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF" + }, + { + "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "bounds": [100, 50], + "drawsContent": false, + "transform": 1 + } + ], + "transforms": [ + { + "id": 1, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [18, 8, 0, 1] + ] + } + ], + "objectPaintInvalidations": [ + { + "object": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "reason": "geometry" + } + ] +} +10.299999999999999: +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF" + }, + { + "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "bounds": [100, 50], + "drawsContent": false, + "transform": 1 + } + ], + "transforms": [ + { + "id": 1, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [18, 8, 0, 1] + ] + } + ], + "objectPaintInvalidations": [ + { + "object": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "reason": "geometry" + } + ] +} +10.399999999999999: +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF" + }, + { + "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "bounds": [100, 50], + "drawsContent": false, + "transform": 1 + } + ], + "transforms": [ + { + "id": 1, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [18, 8, 0, 1] + ] + } + ], + "objectPaintInvalidations": [ + { + "object": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "reason": "geometry" + } + ] +} +10.499999999999998: +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF" + }, + { + "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "bounds": [100, 50], + "drawsContent": false, + "transform": 1 + } + ], + "transforms": [ + { + "id": 1, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [19, 8, 0, 1] + ] + } + ], + "objectPaintInvalidations": [ + { + "object": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "reason": "geometry" + } + ] +} +10.599999999999998: +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF" + }, + { + "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "bounds": [100, 50], + "drawsContent": false, + "transform": 1 + } + ], + "transforms": [ + { + "id": 1, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [19, 8, 0, 1] + ] + } + ], + "objectPaintInvalidations": [ + { + "object": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "reason": "geometry" + } + ] +} +10.699999999999998: +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF" + }, + { + "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "bounds": [100, 50], + "drawsContent": false, + "transform": 1 + } + ], + "transforms": [ + { + "id": 1, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [19, 8, 0, 1] + ] + } + ], + "objectPaintInvalidations": [ + { + "object": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "reason": "geometry" + } + ] +} +10.799999999999997: +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF" + }, + { + "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "bounds": [100, 50], + "drawsContent": false, + "transform": 1 + } + ], + "transforms": [ + { + "id": 1, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [19, 8, 0, 1] + ] + } + ], + "objectPaintInvalidations": [ + { + "object": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "reason": "geometry" + } + ] +} +10.899999999999997: +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF" + }, + { + "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "bounds": [100, 50], + "drawsContent": false, + "transform": 1 + } + ], + "transforms": [ + { + "id": 1, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [19, 8, 0, 1] + ] + } + ], + "objectPaintInvalidations": [ + { + "object": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "reason": "geometry" + } + ] +} +10.999999999999996: +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF" + }, + { + "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "bounds": [100, 50], + "drawsContent": false, + "transform": 1 + } + ], + "transforms": [ + { + "id": 1, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [19, 8, 0, 1] + ] + } + ], + "objectPaintInvalidations": [ + { + "object": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "reason": "geometry" + } + ] +} +11.099999999999996: +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF" + }, + { + "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "bounds": [100, 50], + "drawsContent": false, + "transform": 1 + } + ], + "transforms": [ + { + "id": 1, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [19, 8, 0, 1] + ] + } + ], + "objectPaintInvalidations": [ + { + "object": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "reason": "geometry" + } + ] +} +11.199999999999996: +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF" + }, + { + "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "bounds": [100, 50], + "drawsContent": false, + "transform": 1 + } + ], + "transforms": [ + { + "id": 1, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [19, 8, 0, 1] + ] + } + ], + "objectPaintInvalidations": [ + { + "object": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "reason": "geometry" + } + ] +} +11.299999999999995: +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF" + }, + { + "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "bounds": [100, 50], + "drawsContent": false, + "transform": 1 + } + ], + "transforms": [ + { + "id": 1, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [19, 8, 0, 1] + ] + } + ], + "objectPaintInvalidations": [ + { + "object": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "reason": "geometry" + } + ] +} +11.399999999999995: +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF" + }, + { + "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "bounds": [100, 50], + "drawsContent": false, + "transform": 1 + } + ], + "transforms": [ + { + "id": 1, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [19, 8, 0, 1] + ] + } + ], + "objectPaintInvalidations": [ + { + "object": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "reason": "geometry" + } + ] +} +11.499999999999995: +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF" + }, + { + "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "bounds": [100, 50], + "drawsContent": false, + "transform": 1 + } + ], + "transforms": [ + { + "id": 1, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [20, 8, 0, 1] + ] + } + ], + "objectPaintInvalidations": [ + { + "object": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "reason": "geometry" + } + ] +} +11.599999999999994: +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF" + }, + { + "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "bounds": [100, 50], + "drawsContent": false, + "transform": 1 + } + ], + "transforms": [ + { + "id": 1, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [20, 8, 0, 1] + ] + } + ], + "objectPaintInvalidations": [ + { + "object": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "reason": "geometry" + } + ] +} +11.699999999999994: +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF" + }, + { + "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "bounds": [100, 50], + "drawsContent": false, + "transform": 1 + } + ], + "transforms": [ + { + "id": 1, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [20, 8, 0, 1] + ] + } + ], + "objectPaintInvalidations": [ + { + "object": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "reason": "geometry" + } + ] +} +11.799999999999994: +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF" + }, + { + "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "bounds": [100, 50], + "drawsContent": false, + "transform": 1 + } + ], + "transforms": [ + { + "id": 1, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [20, 8, 0, 1] + ] + } + ], + "objectPaintInvalidations": [ + { + "object": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "reason": "geometry" + } + ] +} +11.899999999999993: +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF" + }, + { + "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "bounds": [100, 50], + "drawsContent": false, + "transform": 1 + } + ], + "transforms": [ + { + "id": 1, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [20, 8, 0, 1] + ] + } + ], + "objectPaintInvalidations": [ + { + "object": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "reason": "geometry" + } + ] +} +11.999999999999993: +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF" + }, + { + "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "bounds": [100, 50], + "drawsContent": false, + "transform": 1 + } + ], + "transforms": [ + { + "id": 1, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [20, 8, 0, 1] + ] + } + ], + "objectPaintInvalidations": [ + { + "object": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "reason": "geometry" + } + ] +} +12.099999999999993: +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF" + }, + { + "name": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "bounds": [100, 50], + "drawsContent": false, + "transform": 1 + } + ], + "transforms": [ + { + "id": 1, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [20, 8, 0, 1] + ] + } + ], + "objectPaintInvalidations": [ + { + "object": "LayoutBlockFlow (relative positioned) DIV id='layer'", + "reason": "geometry" + } + ] +} +
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/images/color-profile-filter-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/images/color-profile-filter-expected.png new file mode 100644 index 0000000..9f0c22b --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/images/color-profile-filter-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/images/color-profile-image-filter-all-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/images/color-profile-image-filter-all-expected.png new file mode 100644 index 0000000..61752b4f --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/images/color-profile-image-filter-all-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/paint/invalidation/compositing/should-not-repaint-composited-descendants-on-overflow-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/paint/invalidation/compositing/should-not-repaint-composited-descendants-on-overflow-change-expected.txt deleted file mode 100644 index 154117e..0000000 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/paint/invalidation/compositing/should-not-repaint-composited-descendants-on-overflow-change-expected.txt +++ /dev/null
@@ -1,64 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF" - }, - { - "name": "LayoutBlockFlow DIV class='composited-child'", - "bounds": [100, 100], - "contentsOpaque": true, - "backfaceVisibility": "hidden", - "backgroundColor": "#008000" - }, - { - "name": "Ancestor Clipping Layer", - "position": [0, 200], - "bounds": [200, 200], - "drawsContent": false - }, - { - "name": "LayoutBlockFlow DIV class='composited-child'", - "position": [0, 200], - "bounds": [100, 100], - "contentsOpaque": true, - "backfaceVisibility": "hidden", - "backgroundColor": "#008000" - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV class='composited-child overflow-child'", - "position": [150, 150], - "bounds": [100, 100], - "contentsOpaque": true, - "backfaceVisibility": "hidden", - "backgroundColor": "#008000" - }, - { - "name": "Ancestor Clipping Layer", - "position": [0, 200], - "bounds": [200, 200], - "drawsContent": false - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV class='composited-child overflow-child'", - "position": [150, 350], - "bounds": [100, 100], - "contentsOpaque": true, - "backfaceVisibility": "hidden", - "backgroundColor": "#008000" - } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='overflow1'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV id='overflow2'", - "reason": "style change" - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1-SE/filters-image-03-f-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1-SE/filters-image-03-f-expected.png new file mode 100644 index 0000000..edbed693 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1-SE/filters-image-03-f-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1-SE/filters-image-05-f-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1-SE/filters-image-05-f-expected.png new file mode 100644 index 0000000..e558d20 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1-SE/filters-image-05-f-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1-SE/painting-marker-05-f-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1-SE/painting-marker-05-f-expected.png new file mode 100644 index 0000000..7f89982 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1-SE/painting-marker-05-f-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1-SE/types-dom-01-b-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1-SE/types-dom-01-b-expected.png new file mode 100644 index 0000000..8961a70 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1-SE/types-dom-01-b-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-08-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-08-t-expected.png new file mode 100644 index 0000000..b17023a --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-08-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-22-b-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-22-b-expected.png new file mode 100644 index 0000000..2e984da --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-22-b-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-33-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-33-t-expected.png new file mode 100644 index 0000000..524a97a6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-33-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-36-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-36-t-expected.png new file mode 100644 index 0000000..8df34d81 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-36-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-40-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-40-t-expected.png new file mode 100644 index 0000000..ef6f11e --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-40-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-41-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-41-t-expected.png new file mode 100644 index 0000000..eabb7ed8f --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-41-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-61-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-61-t-expected.png new file mode 100644 index 0000000..b5ed226a --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-61-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-63-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-63-t-expected.png new file mode 100644 index 0000000..eabb05c --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-63-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-64-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-64-t-expected.png new file mode 100644 index 0000000..1258d4b2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-64-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-65-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-65-t-expected.png new file mode 100644 index 0000000..8492f9c4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-65-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-66-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-66-t-expected.png new file mode 100644 index 0000000..f18ca49 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-66-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-67-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-67-t-expected.png new file mode 100644 index 0000000..a44e986 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-67-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-68-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-68-t-expected.png new file mode 100644 index 0000000..5dcfd738 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-68-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-69-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-69-t-expected.png new file mode 100644 index 0000000..f174bb6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-69-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-70-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-70-t-expected.png new file mode 100644 index 0000000..91ad532 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-70-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-78-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-78-t-expected.png new file mode 100644 index 0000000..9277e176 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-78-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-80-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-80-t-expected.png new file mode 100644 index 0000000..0747813 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-80-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-82-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-82-t-expected.png new file mode 100644 index 0000000..51a7648c --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-82-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-83-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-83-t-expected.png new file mode 100644 index 0000000..2a817e9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/animate-elem-83-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/coords-units-02-b-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/coords-units-02-b-expected.png new file mode 100644 index 0000000..6711020 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/coords-units-02-b-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/coords-viewattr-01-b-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/coords-viewattr-01-b-expected.png new file mode 100644 index 0000000..7e29399 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/coords-viewattr-01-b-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/coords-viewattr-02-b-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/coords-viewattr-02-b-expected.png new file mode 100644 index 0000000..15dd5fba --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/coords-viewattr-02-b-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/coords-viewattr-03-b-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/coords-viewattr-03-b-expected.png new file mode 100644 index 0000000..e4288db --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/coords-viewattr-03-b-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/filters-gauss-01-b-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/filters-gauss-01-b-expected.png new file mode 100644 index 0000000..c0a73fe --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/filters-gauss-01-b-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/filters-light-04-f-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/filters-light-04-f-expected.png new file mode 100644 index 0000000..50430a8a --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/filters-light-04-f-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/filters-turb-02-f-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/filters-turb-02-f-expected.png new file mode 100644 index 0000000..96a9351 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/filters-turb-02-f-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/masking-mask-01-b-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/masking-mask-01-b-expected.png new file mode 100644 index 0000000..39a0202 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/masking-mask-01-b-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/masking-opacity-01-b-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/masking-opacity-01-b-expected.png new file mode 100644 index 0000000..68e1456 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/masking-opacity-01-b-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/masking-path-03-b-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/masking-path-03-b-expected.png new file mode 100644 index 0000000..d4a3612 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/masking-path-03-b-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/painting-marker-03-f-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/painting-marker-03-f-expected.png new file mode 100644 index 0000000..dcd77ae2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/painting-marker-03-f-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/painting-render-01-b-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/painting-render-01-b-expected.png new file mode 100644 index 0000000..46bbd4f --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/painting-render-01-b-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/painting-stroke-07-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/painting-stroke-07-t-expected.png new file mode 100644 index 0000000..961b29b --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/painting-stroke-07-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/paths-data-04-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/paths-data-04-t-expected.png new file mode 100644 index 0000000..f22b3ea --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/paths-data-04-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/paths-data-05-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/paths-data-05-t-expected.png new file mode 100644 index 0000000..f71c063 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/paths-data-05-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/paths-data-06-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/paths-data-06-t-expected.png new file mode 100644 index 0000000..fb89d83 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/paths-data-06-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/paths-data-07-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/paths-data-07-t-expected.png new file mode 100644 index 0000000..3150fab --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/paths-data-07-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/paths-data-08-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/paths-data-08-t-expected.png new file mode 100644 index 0000000..94112f0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/paths-data-08-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/paths-data-09-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/paths-data-09-t-expected.png new file mode 100644 index 0000000..132584c6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/paths-data-09-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/paths-data-14-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/paths-data-14-t-expected.png new file mode 100644 index 0000000..2acc3d2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/paths-data-14-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/paths-data-15-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/paths-data-15-t-expected.png new file mode 100644 index 0000000..a0fb770 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/paths-data-15-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/pservers-grad-12-b-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/pservers-grad-12-b-expected.png new file mode 100644 index 0000000..608e6efa --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/pservers-grad-12-b-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/pservers-grad-13-b-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/pservers-grad-13-b-expected.png new file mode 100644 index 0000000..bbb7d4b --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/pservers-grad-13-b-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/render-elems-03-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/render-elems-03-t-expected.png new file mode 100644 index 0000000..7a1986d5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/render-elems-03-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/render-groups-01-b-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/render-groups-01-b-expected.png new file mode 100644 index 0000000..4de3252 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/render-groups-01-b-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/render-groups-03-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/render-groups-03-t-expected.png new file mode 100644 index 0000000..eeb1d8c --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/render-groups-03-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/struct-group-03-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/struct-group-03-t-expected.png new file mode 100644 index 0000000..3fd6ee4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/struct-group-03-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/struct-image-06-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/struct-image-06-t-expected.png new file mode 100644 index 0000000..e4f9e2f --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/struct-image-06-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/struct-symbol-01-b-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/struct-symbol-01-b-expected.png new file mode 100644 index 0000000..fda1253 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/struct-symbol-01-b-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/text-align-01-b-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/text-align-01-b-expected.png new file mode 100644 index 0000000..5a51a94 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/text-align-01-b-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/text-align-05-b-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/text-align-05-b-expected.png new file mode 100644 index 0000000..4e115bb --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/text-align-05-b-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/text-text-05-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/text-text-05-t-expected.png new file mode 100644 index 0000000..738af29 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/text-text-05-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/text-text-06-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/text-text-06-t-expected.png new file mode 100644 index 0000000..8bb9e88 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/W3C-SVG-1.1/text-text-06-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/as-background-image/background-image-preserveaspectRatio-support-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/as-background-image/background-image-preserveaspectRatio-support-expected.png new file mode 100644 index 0000000..baf8277 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/as-background-image/background-image-preserveaspectRatio-support-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/as-background-image/svg-as-background-5-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/as-background-image/svg-as-background-5-expected.png new file mode 100644 index 0000000..e481ea3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/as-background-image/svg-as-background-5-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/batik/text/smallFonts-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/batik/text/smallFonts-expected.png new file mode 100644 index 0000000..022b702 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/batik/text/smallFonts-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/batik/text/textAnchor-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/batik/text/textAnchor-expected.png new file mode 100644 index 0000000..452d36df --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/batik/text/textAnchor-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/container-opacity-clip-viewBox-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/container-opacity-clip-viewBox-expected.png new file mode 100644 index 0000000..875f74ee --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/container-opacity-clip-viewBox-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/foreign-object-skew-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/foreign-object-skew-expected.png new file mode 100644 index 0000000..3c258304 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/foreign-object-skew-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/group-opacity-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/group-opacity-expected.png new file mode 100644 index 0000000..8a858024 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/group-opacity-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/marker-zero-length-linecaps-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/marker-zero-length-linecaps-expected.png new file mode 100644 index 0000000..82dde57e --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/marker-zero-length-linecaps-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/preserve-aspect-ratio-syntax-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/preserve-aspect-ratio-syntax-expected.png new file mode 100644 index 0000000..bfa7a89 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/preserve-aspect-ratio-syntax-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/use-modify-container-in-target-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/use-modify-container-in-target-expected.png new file mode 100644 index 0000000..2569653c --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/use-modify-container-in-target-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/use-modify-target-container-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/use-modify-target-container-expected.png new file mode 100644 index 0000000..a1f6443 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/use-modify-target-container-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/use-on-g-containing-use-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/use-on-g-containing-use-expected.png new file mode 100644 index 0000000..417b7b4e --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/use-on-g-containing-use-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/use-on-g-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/use-on-g-expected.png new file mode 100644 index 0000000..76adf282 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/use-on-g-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/use-on-use-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/use-on-use-expected.png new file mode 100644 index 0000000..76adf282 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/use-on-use-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/use-transform-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/use-transform-expected.png new file mode 100644 index 0000000..0aafce72 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/use-transform-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/viewbox-syntax-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/viewbox-syntax-expected.png new file mode 100644 index 0000000..f909da0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/viewbox-syntax-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/width-full-percentage-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/width-full-percentage-expected.png new file mode 100644 index 0000000..3479ed83 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/custom/width-full-percentage-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVG-dynamic-css-transform-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVG-dynamic-css-transform-expected.png new file mode 100644 index 0000000..2f5f897d --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVG-dynamic-css-transform-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-dom-height-attr-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-dom-height-attr-expected.png new file mode 100644 index 0000000..c7f575b --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-dom-height-attr-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-dom-maskContentUnits-attr-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-dom-maskContentUnits-attr-expected.png new file mode 100644 index 0000000..c7f575b --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-dom-maskContentUnits-attr-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-dom-maskUnits-attr-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-dom-maskUnits-attr-expected.png new file mode 100644 index 0000000..559d720 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-dom-maskUnits-attr-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-dom-width-attr-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-dom-width-attr-expected.png new file mode 100644 index 0000000..c7f575b --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-dom-width-attr-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-dom-x-attr-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-dom-x-attr-expected.png new file mode 100644 index 0000000..c7f575b --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-dom-x-attr-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-dom-y-attr-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-dom-y-attr-expected.png new file mode 100644 index 0000000..c7f575b --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-dom-y-attr-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-svgdom-height-prop-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-svgdom-height-prop-expected.png new file mode 100644 index 0000000..c7f575b --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-svgdom-height-prop-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-svgdom-maskContentUnits-prop-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-svgdom-maskContentUnits-prop-expected.png new file mode 100644 index 0000000..c7f575b --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-svgdom-maskContentUnits-prop-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-svgdom-maskUnits-prop-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-svgdom-maskUnits-prop-expected.png new file mode 100644 index 0000000..559d720 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-svgdom-maskUnits-prop-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-svgdom-width-prop-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-svgdom-width-prop-expected.png new file mode 100644 index 0000000..c7f575b --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-svgdom-width-prop-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-svgdom-x-prop-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-svgdom-x-prop-expected.png new file mode 100644 index 0000000..c7f575b --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-svgdom-x-prop-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-svgdom-y-prop-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-svgdom-y-prop-expected.png new file mode 100644 index 0000000..c7f575b --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/dynamic-updates/SVGMaskElement-svgdom-y-prop-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/hixie/perf/007-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/hixie/perf/007-expected.png new file mode 100644 index 0000000..15803c76 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/hixie/perf/007-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/hixie/viewbox/preserveAspectRatio/001-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/hixie/viewbox/preserveAspectRatio/001-expected.png new file mode 100644 index 0000000..b258dd7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/hixie/viewbox/preserveAspectRatio/001-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/text/small-fonts-in-html5-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/text/small-fonts-in-html5-expected.png new file mode 100644 index 0000000..61776f8ed --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/text/small-fonts-in-html5-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/text/text-selection-align-01-b-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/text/text-selection-align-01-b-expected.png new file mode 100644 index 0000000..2399fa2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/text/text-selection-align-01-b-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/text/text-selection-align-05-b-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/text/text-selection-align-05-b-expected.png new file mode 100644 index 0000000..ce86e3c --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/text/text-selection-align-05-b-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/text/text-selection-text-06-t-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/text/text-selection-text-06-t-expected.png new file mode 100644 index 0000000..39c16a7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/text/text-selection-text-06-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/transforms/text-with-mask-with-svg-transform-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/transforms/text-with-mask-with-svg-transform-expected.png new file mode 100644 index 0000000..2e6f6d1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/transforms/text-with-mask-with-svg-transform-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/transforms/text-with-pattern-inside-transformed-html-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/transforms/text-with-pattern-inside-transformed-html-expected.png new file mode 100644 index 0000000..13153d7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/transforms/text-with-pattern-inside-transformed-html-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/transforms/text-with-pattern-with-svg-transform-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/transforms/text-with-pattern-with-svg-transform-expected.png new file mode 100644 index 0000000..ad57f30a --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/transforms/text-with-pattern-with-svg-transform-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/zoom/page/zoom-coords-viewattr-01-b-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/zoom/page/zoom-coords-viewattr-01-b-expected.png new file mode 100644 index 0000000..f9dc745 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/zoom/page/zoom-coords-viewattr-01-b-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/zoom/page/zoom-foreignObject-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/zoom/page/zoom-foreignObject-expected.png new file mode 100644 index 0000000..26c0c98 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/zoom/page/zoom-foreignObject-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/zoom/page/zoom-svg-as-background-with-relative-size-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/zoom/page/zoom-svg-as-background-with-relative-size-expected.png new file mode 100644 index 0000000..2742df8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/svg/zoom/page/zoom-svg-as-background-with-relative-size-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/transforms/2d/hindi-rotated-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/transforms/2d/hindi-rotated-expected.png new file mode 100644 index 0000000..9958b5d --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/transforms/2d/hindi-rotated-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/transforms/transformed-focused-text-input-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/transforms/transformed-focused-text-input-expected.png new file mode 100644 index 0000000..ecb50de43 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/transforms/transformed-focused-text-input-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/virtual/exotic-color-space/images/color-profile-filter-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/virtual/exotic-color-space/images/color-profile-filter-expected.png new file mode 100644 index 0000000..f20ff7d --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/virtual/exotic-color-space/images/color-profile-filter-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png new file mode 100644 index 0000000..6a76870 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/virtual/gpu-rasterization/images/color-profile-filter-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/virtual/gpu-rasterization/images/color-profile-filter-expected.png new file mode 100644 index 0000000..db6f611 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/virtual/gpu-rasterization/images/color-profile-filter-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/virtual/gpu-rasterization/images/color-profile-image-filter-all-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/virtual/gpu-rasterization/images/color-profile-image-filter-all-expected.png new file mode 100644 index 0000000..eb26dfa --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/virtual/gpu-rasterization/images/color-profile-image-filter-all-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/virtual/gpu-rasterization/images/color-profile-mask-image-svg-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/virtual/gpu-rasterization/images/color-profile-mask-image-svg-expected.png new file mode 100644 index 0000000..b6855bc --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/virtual/gpu-rasterization/images/color-profile-mask-image-svg-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/virtual/threaded/printing/fixed-positioned-headers-and-footers-clipped-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/virtual/threaded/printing/fixed-positioned-headers-and-footers-clipped-expected.png new file mode 100644 index 0000000..38d3235 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/virtual/threaded/printing/fixed-positioned-headers-and-footers-clipped-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/virtual/threaded/printing/iframe-print-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/virtual/threaded/printing/iframe-print-expected.png new file mode 100644 index 0000000..47fe9613 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/virtual/threaded/printing/iframe-print-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/virtual/threaded/printing/subframes-percentage-height-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/virtual/threaded/printing/subframes-percentage-height-expected.png new file mode 100644 index 0000000..60622f22 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/virtual/threaded/printing/subframes-percentage-height-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/virtual/threaded/printing/thead-under-multicol-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/virtual/threaded/printing/thead-under-multicol-expected.png new file mode 100644 index 0000000..b095ed6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v175/virtual/threaded/printing/thead-under-multicol-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/components/color-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/components/color-expected.txt index 0781414..624c28e 100644 --- a/third_party/WebKit/LayoutTests/http/tests/devtools/components/color-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/components/color-expected.txt
@@ -135,6 +135,21 @@ - default: rgb(94, 126, 91) - inverse color: rgba(161, 129, 164, 1) - setAlpha(0.42): rgba(94, 126, 91, 0.42) +Dumping 'rgba(94 126 91)' in different formats: + - rgba(94 126 91) + - rgba(94, 126, 91, 1) + - hsl(115, 16%, 43%) + - hsla(115, 16%, 43%, 1) + - hsv(115, 28%, 49%) + - hsva(115, 28%, 49%, 1) + - #5e7e5bff + - #5e7e5b + - null + - null + - null + - default: rgb(94, 126, 91) + - inverse color: rgba(161, 129, 164, 1) + - setAlpha(0.42): rgba(94, 126, 91, 0.42) Dumping 'rgba(94, 126, 91, 0.5)' in different formats: - null - rgba(94, 126, 91, 0.5) @@ -150,6 +165,21 @@ - default: rgba(94, 126, 91, 0.5) - inverse color: rgba(161, 129, 164, 0.5) - setAlpha(0.42): rgba(94, 126, 91, 0.42) +Dumping 'rgb(94 126 91 / 50%)' in different formats: + - null + - rgb(94 126 91 / 50%) + - null + - hsla(115, 16%, 43%, 0.5) + - hsv(115, 28%, 49%) + - hsva(115, 28%, 49%, 0.5) + - #5e7e5b80 + - null + - null + - null + - null + - default: rgba(94, 126, 91, 0.5) + - inverse color: rgba(161, 129, 164, 0.5) + - setAlpha(0.42): rgba(94, 126, 91, 0.42) Dumping 'hsl(212, 55%, 32%)' in different formats: - rgb(37, 79, 126) - rgba(37, 79, 126, 1) @@ -165,6 +195,21 @@ - default: hsl(212, 55%, 32%) - inverse color: rgba(218, 176, 129, 1) - setAlpha(0.42): rgba(37, 79, 126, 0.42) +Dumping 'hsla(212 55% 32%)' in different formats: + - rgb(37, 79, 126) + - rgba(37, 79, 126, 1) + - hsla(212 55% 32%) + - hsla(212, 55%, 32%, 1) + - hsv(212, 71%, 50%) + - hsva(212, 71%, 50%, 1) + - #254f7eff + - #254f7e + - null + - null + - null + - default: hsl(212, 55%, 32%) + - inverse color: rgba(218, 176, 129, 1) + - setAlpha(0.42): rgba(37, 79, 126, 0.42) Dumping 'hsla(212, 55%, 32%, 0.5)' in different formats: - null - rgba(37, 79, 126, 0.5) @@ -180,6 +225,36 @@ - default: hsla(212, 55%, 32%, 0.5) - inverse color: rgba(218, 176, 129, 0.5) - setAlpha(0.42): rgba(37, 79, 126, 0.42) +Dumping 'hsla(212 55% 32% / 50%)' in different formats: + - null + - rgba(37, 79, 126, 0.5) + - null + - hsla(212 55% 32% / 50%) + - hsv(212, 71%, 50%) + - hsva(212, 71%, 50%, 0.5) + - #254f7e80 + - null + - null + - null + - null + - default: hsla(212, 55%, 32%, 0.5) + - inverse color: rgba(218, 176, 129, 0.5) + - setAlpha(0.42): rgba(37, 79, 126, 0.42) +Dumping 'hsla(212deg 55% 32% / 50%)' in different formats: + - null + - rgba(37, 79, 126, 0.5) + - null + - hsla(212deg 55% 32% / 50%) + - hsv(212, 71%, 50%) + - hsva(212, 71%, 50%, 0.5) + - #254f7e80 + - null + - null + - null + - null + - default: hsla(212, 55%, 32%, 0.5) + - inverse color: rgba(218, 176, 129, 0.5) + - setAlpha(0.42): rgba(37, 79, 126, 0.42) Dumping '#12345678' in different formats: - null - rgba(18, 52, 86, 0.47058823529411764)
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/components/color.js b/third_party/WebKit/LayoutTests/http/tests/devtools/components/color.js index a3f00b89..b8ee89a4 100644 --- a/third_party/WebKit/LayoutTests/http/tests/devtools/components/color.js +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/components/color.js
@@ -45,10 +45,15 @@ dumpColor('black'); dumpColor('rgb(94, 126, 91)'); + dumpColor('rgba(94 126 91)'); dumpColor('rgba(94, 126, 91, 0.5)'); + dumpColor('rgb(94 126 91 / 50%)'); dumpColor('hsl(212, 55%, 32%)'); + dumpColor('hsla(212 55% 32%)'); dumpColor('hsla(212, 55%, 32%, 0.5)'); + dumpColor('hsla(212 55% 32% / 50%)'); + dumpColor('hsla(212deg 55% 32% / 50%)'); dumpColor('#12345678'); dumpColor('#00FFFF');
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-format-style-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-format-style-expected.txt index 7a8ae5b..e5e867b 100644 --- a/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-format-style-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-format-style-expected.txt
@@ -1,11 +1,21 @@ Tests that console logging dumps properly styled messages. console-format-style.js:14 Blue!. -Styled text #0: color: blue; +Styled text #0: contain: paint; display: inline-block; color: blue; console-format-style.js:15 Blue! Red! -Styled text #0: color: blue; -Styled text #1: color: red; +Styled text #0: contain: paint; display: inline-block; color: blue; +Styled text #1: contain: paint; display: inline-block; color: red; console-format-style.js:16 www.google.com -Styled text #0: color: blue; -Styled text #1: color: blue; +Styled text #0: contain: paint; display: inline-block; color: blue; +Styled text #1: -webkit-text-stroke: 0px !important; text-decoration: underline !important; color: rgb(84, 84, 84) !important; background-color: rgb(255, 255, 255) !important; +console-format-style.js:17 www.google.com +onload @ console-format-style.js:17 +(anonymous) @ console-format-style.js:19 +Styled text #0: contain: paint; display: inline-block; color: blue; background: blue; +Styled text #1: -webkit-text-stroke: 0px !important; text-decoration: underline !important; color: rgb(84, 84, 84) !important; background-color: rgb(255, 251, 229) !important; +console-format-style.js:18 www.google.com +onload @ console-format-style.js:18 +(anonymous) @ console-format-style.js:19 +Styled text #0: contain: paint; display: inline-block; color: blue; background: blue; +Styled text #1: -webkit-text-stroke: 0px !important; text-decoration: underline !important; color: rgb(84, 84, 84) !important; background-color: rgb(255, 240, 240) !important;
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-format-style-whitelist-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-format-style-whitelist-expected.txt index da9f93a..14fba97 100644 --- a/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-format-style-whitelist-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-format-style-whitelist-expected.txt
@@ -1,15 +1,15 @@ Tests that console logging dumps properly styled messages, and that the whole message gets the same style, regardless of multiple %c settings. console-format-style-whitelist.js:13 Colors are awesome. -Styled text #0: color: blue; +Styled text #0: contain: paint; display: inline-block; color: blue; console-format-style-whitelist.js:14 So are fonts! -Styled text #0: font-style: normal; font-variant: normal; font-weight: normal; font-stretch: normal; font-size: 1em; line-height: normal; font-family: Helvetica; +Styled text #0: contain: paint; display: inline-block; font-style: normal; font-variant: normal; font-weight: normal; font-stretch: normal; font-size: 1em; line-height: normal; font-family: Helvetica; console-format-style-whitelist.js:15 And borders and margins and paddings! -Styled text #0: border: 1px solid red; margin: 20px; padding: 10px; +Styled text #0: contain: paint; display: inline-block; border: 1px solid red; margin: 20px; padding: 10px; console-format-style-whitelist.js:16 text-* is fine by us! -Styled text #0: text-decoration: none; +Styled text #0: contain: paint; display: inline-block; text-decoration: none; console-format-style-whitelist.js:18 Display, on the other hand, is bad news. -Styled text #0: NO STYLES DEFINED +Styled text #0: contain: paint; display: inline-block; console-format-style-whitelist.js:19 And position too. -Styled text #0: NO STYLES DEFINED +Styled text #0: contain: paint; display: inline-block;
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-format-style.js b/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-format-style.js index b2e6be7..2d8a336 100644 --- a/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-format-style.js +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-format-style.js
@@ -14,6 +14,8 @@ console.log("%cBlue!.", "color: blue;"); console.log("%cBlue! %cRed!", "color: blue;", "color: red;"); console.log("%cwww.google.com", "color: blue"); + console.warn("%cwww.google.com", "color: blue; background: blue"); + console.error("%cwww.google.com", "color: blue; background: blue"); })(); `);
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/spectrum-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/spectrum-expected.txt index c5dd09a..882b897a 100644 --- a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/spectrum-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/spectrum-expected.txt
@@ -15,10 +15,22 @@ rgb(1, 2, 3) Testing: rgba(1, 2, 3, 0.2) rgba(1, 2, 3, 0.2) +Testing: rgb(1, 2, 3, 0.2) +rgba(1, 2, 3, 0.2) +Testing: rgb(1 2 3 / 20%) +rgba(1, 2, 3, 0.2) +Testing: rgbA(1 2 3) +rgb(1, 2, 3) Testing: hsl(1, 100%, 50%) hsl(1, 100%, 50%) +Testing: hsl(1 100% 50%) +hsl(1, 100%, 50%) Testing: hsla(1, 100%, 50%, 0.2) hsla(1, 100%, 50%, 0.2) +Testing: hsl(1 100% 50% / 20%) +hsla(1, 100%, 50%, 0.2) +Testing: hsL(1deg 100% 50% / 20%) +hsla(1, 100%, 50%, 0.2) --- Testing alpha changes Testing: red #ff000000 @@ -34,10 +46,22 @@ rgba(1, 2, 3, 0) Testing: rgba(1, 2, 3, 0.2) rgba(1, 2, 3, 0) +Testing: rgb(1, 2, 3, 0.2) +rgba(1, 2, 3, 0) +Testing: rgb(1 2 3 / 20%) +rgba(1, 2, 3, 0) +Testing: rgbA(1 2 3) +rgba(1, 2, 3, 0) Testing: hsl(1, 100%, 50%) hsla(1, 100%, 50%, 0) +Testing: hsl(1 100% 50%) +hsla(1, 100%, 50%, 0) Testing: hsla(1, 100%, 50%, 0.2) hsla(1, 100%, 50%, 0) +Testing: hsl(1 100% 50% / 20%) +hsla(1, 100%, 50%, 0) +Testing: hsL(1deg 100% 50% / 20%) +hsla(1, 100%, 50%, 0) --- Testing _formatViewSwitch() Testing: red rgb @@ -60,10 +84,28 @@ Testing: rgba(1, 2, 3, 0.2) hsl hex +Testing: rgb(1, 2, 3, 0.2) +hsl +hex +Testing: rgb(1 2 3 / 20%) +hsl +hex +Testing: rgbA(1 2 3) +hsl +hex Testing: hsl(1, 100%, 50%) hex rgb +Testing: hsl(1 100% 50%) +hex +rgb Testing: hsla(1, 100%, 50%, 0.2) hex rgb +Testing: hsl(1 100% 50% / 20%) +hex +rgb +Testing: hsL(1deg 100% 50% / 20%) +hex +rgb
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/spectrum.js b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/spectrum.js index c7ca1bda..101b0c4 100644 --- a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/spectrum.js +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-3/spectrum.js
@@ -39,8 +39,11 @@ {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} + {string: 'rgba(1, 2, 3, 0.2)', format: cf.RGB}, {string: 'rgb(1, 2, 3, 0.2)', format: cf.RGB}, + {string: 'rgb(1 2 3 / 20%)', format: cf.RGB}, {string: 'rgbA(1 2 3)', format: cf.RGB}, + {string: 'hsl(1, 100%, 50%)', format: cf.HSL}, {string: 'hsl(1 100% 50%)', format: cf.HSL}, + {string: 'hsla(1, 100%, 50%, 0.2)', format: cf.HSLA}, {string: 'hsl(1 100% 50% / 20%)', format: cf.HSL}, + {string: 'hsL(1deg 100% 50% / 20%)', format: cf.HSL} ]; TestRunner.addResult('--- Testing colorString()');
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/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 index bc9e06a8..a85c6a5 100644 --- a/third_party/WebKit/LayoutTests/http/tests/devtools/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
@@ -112,6 +112,44 @@ hsl: null hsla: hsla(0, 0%, 0%, 0.5) +color: rgb(0,0,0,50%) + simple: false + original: rgb(0,0,0,50%) + hexa: #00000080 + shorthexa: null + rgb: null + rgba: rgb(0,0,0,50%) + hsl: null + hsla: hsla(0, 0%, 0%, 0.5) + +color: rgb( 0 0 0 / 50% ) + simple: false + original: rgb( 0 0 0 / 50% ) + hexa: #00000080 + shorthexa: null + rgb: null + rgba: rgb( 0 0 0 / 50% ) + hsl: null + hsla: hsla(0, 0%, 0%, 0.5) + +color: rgb(1 1 1/1) + simple: true + original: rgb(1 1 1/1) + hex: #010101 + hexa: #010101ff + shorthexa: null + rgb: rgb(1, 1, 1) + hsl: hsl(0, 0%, 0%) + +color: rgb(1 1 1/ 1) + simple: true + original: rgb(1 1 1/ 1) + hex: #010101 + hexa: #010101ff + shorthexa: null + rgb: rgb(1, 1, 1) + hsl: hsl(0, 0%, 0%) + color: hsl(-120, 100%, 50%) simple: true original: hsl(-120, 100%, 50%) @@ -123,6 +161,17 @@ rgb: rgb(0, 0, 255) hsl: hsl(-120, 100%, 50%) +color: hsl(-120deg, 100%, 50%) + simple: true + original: hsl(-120deg, 100%, 50%) + nickname: blue + hex: #0000ff + shorthex: #00f + hexa: #0000ffff + shorthexa: #00ff + rgb: rgb(0, 0, 255) + hsl: hsl(-120deg, 100%, 50%) + color: hsl(-120, 200%, 200%) simple: true original: hsl(-120, 200%, 200%) @@ -250,10 +299,20 @@ SUCCESS: parsed invalid color rgb(1,1,1.2) to null -SUCCESS: parsed invalid color rgba(0,0,0,1%) to null +SUCCESS: parsed invalid color rgba(0 0 0 1%) to null SUCCESS: parsed invalid color rgba(0,0,0,) to null +SUCCESS: parsed invalid color rgba(0 0, 0) to null + +SUCCESS: parsed invalid color rgba(1.0 1.0 1.0) to null + +SUCCESS: parsed invalid color rgba(1 1 1 / ) to null + +SUCCESS: parsed invalid color rgb(1 1 / 1) to null + +SUCCESS: parsed invalid color rgb(1 1/1) to null + SUCCESS: parsed invalid color hsl(0,0,0) to null SUCCESS: parsed invalid color hsl(0%, 0%, 0%) to null @@ -266,5 +325,9 @@ SUCCESS: parsed invalid color hsla(0,0,0,0) to null +SUCCESS: parsed invalid color hsla(0 0% 0% 0) to null + +SUCCESS: parsed invalid color hsla(0 turn, 0, 0, 0) to null + SUCCESS: parsed invalid color hsla to null
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-invalid-color-values.js b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-invalid-color-values.js index 53cff95..5fba230 100644 --- a/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-invalid-color-values.js +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/elements/styles-4/styles-invalid-color-values.js
@@ -16,7 +16,8 @@ '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%)', + 'rgba(0,0,0,0.5)', 'rgb(0,0,0,50%)', 'rgb( 0 0 0 / 50% )', 'rgb(1 1 1/1)', 'rgb(1 1 1/ 1)', + 'hsl(-120, 100%, 50%)', 'hsl(-120deg, 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) @@ -30,8 +31,9 @@ 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' + '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,)', + 'rgba(0 0, 0)', 'rgba(1.0 1.0 1.0)', 'rgba(1 1 1 / )', 'rgb(1 1 / 1)', 'rgb(1 1/1)', '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(0 0% 0% 0)', 'hsla(0 turn, 0, 0, 0)', 'hsla' ]; TestRunner.runTestSuite([
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/webgl-remote-read-remote-image-blocked-no-crossorigin-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/webgl-remote-read-remote-image-blocked-no-crossorigin-expected.txt index 9dd5185a..fcf9dcbf 100644 --- a/third_party/WebKit/LayoutTests/http/tests/security/webgl-remote-read-remote-image-blocked-no-crossorigin-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/security/webgl-remote-read-remote-image-blocked-no-crossorigin-expected.txt
@@ -5,7 +5,7 @@ PASS: Calling toDataURL() on an untainted canvas was allowed. Tainted canvas: -PASS: Calling texImage2D() with a tainted image was not allowed: Threw error: SecurityError: Failed to execute 'texImage2D' on 'WebGLRenderingContext': The cross-origin image at http://localhost:8000/security/resources/abe-allow-star.php may not be loaded.. +PASS: Calling texImage2D() with a tainted image was not allowed: Threw error: SecurityError: Failed to execute 'texImage2D' on 'WebGLRenderingContext': The image element contains cross-origin data, and may not be loaded.. PASS: Calling readPixels() on a canvas where tainting was attempted by a remote image was allowed. PASS: Calling toDataURL() on a canvas where tainting was attempted by a remote image was allowed. PASS: Calling texImage2D() with a tainted canvas was not allowed: Threw error: SecurityError: Failed to execute 'texImage2D' on 'WebGLRenderingContext': Tainted canvases may not be loaded..
diff --git a/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/resources/loader_worker.js b/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/resources/loader_worker.js deleted file mode 100644 index aa514243..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/resources/loader_worker.js +++ /dev/null
@@ -1,48 +0,0 @@ -var numRequests = 0; -var numComplete = 0; - -function checkDone(callback) { - ++numComplete; - if (numComplete == numRequests) { - callback(); - } -} - -function makeRequest(request, callback) { - var xhr = new XMLHttpRequest; - xhr.open('get', request, true); - xhr.onreadystatechange = function() { - if (xhr.readyState == 4) { - checkDone(callback); - } - } - xhr.send(); -} - -function loadRequests(event, callback) { - var requests = event.data; - numComplete = 0; - numRequests = requests.length; - for (var i in requests) { - var request = requests[i]; - makeRequest(request, callback); - } -} - -self.onmessage = function(event) { - loadRequests(event, - function(results) { - postMessage(results); - self.close(); - }); -}; - -self.addEventListener("connect", function(event) { - var port = event.ports[0]; - port.onmessage = function(event) { - loadRequests(event, - function(results) { - port.postMessage(results); - }); - }; -});
diff --git a/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_attribute_order.html b/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_attribute_order.html deleted file mode 100644 index 2820775..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_attribute_order.html +++ /dev/null
@@ -1,49 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta charset="utf-8" /> -<title>Resource Timing attribute order</title> -<link rel="author" title="Google" href="http://www.google.com/" /> -<link rel="help" href="http://www.w3.org/TR/resource-timing/#performanceresourcetiming"/> -<script src="/w3c/resources/testharness.js"></script> -<script src="/w3c/resources/testharnessreport.js"></script> -<script src="/w3c/webperf/resources/webperftestharness.js"></script> -<script src="/w3c/webperf/resources/webperftestharnessextension.js"></script> -<script> -function setup_iframe() { - iframe = document.getElementById('frameContext'); - var d = iframe.contentWindow.document; - var body = d.createElement('body'); - d.getElementsByTagName('html')[0].appendChild(body); - - var image = d.createElement('img'); - image.src = '/w3c/webperf/resources/generate_resource.php?type=image'; - body.appendChild(image); -} -function onload_test() { - var context = new PerformanceContext(iframe.contentWindow.performance); - var origin = window.location.protocol + "//" + window.location.host; - var entries = context.getEntriesByName(origin + '/w3c/webperf/resources/generate_resource.php?type=image'); - test_equals(entries.length, 1, 'Only 1 PerformanceEntry should match'); - var entry = entries[0]; - - test_equals(entry.redirectStart, 0, "redirectStart should be 0"); - test_equals(entry.redirectEnd, 0, "redirectEnd should be 0"); - test_greater_than(entry.fetchStart, 0, "fetchStart should be non-zero"); - test_greater_or_equals(entry.domainLookupStart, entry.fetchStart, "domainLookupStart should be greater than or equal to fetchStart"); - test_greater_or_equals(entry.domainLookupEnd, entry.domainLookupStart, "domainLookupEnd should be greater than or equal to domainLookupStart"); - test_greater_or_equals(entry.connectStart, entry.domainLookupEnd, "connectStart should be greater than or equal to domainLookupEnd"); - test_greater_or_equals(entry.connectEnd, entry.connectStart, "connectEnd should be greater than or equal to connectStart"); - test_greater_or_equals(entry.requestStart, entry.connectEnd, "requestStart should be greater than or equal to connectEnd"); - test_greater_or_equals(entry.responseStart, entry.requestStart, "responseStart should be greater than or equal to requestStart"); - test_greater_or_equals(entry.responseEnd, entry.responseStart, "responseEnd should be greater than or equal to responseStart"); -} -</script> -</head> -<body> -<h1>Description</h1> -<p>This test validates that the PerformanceResourceTiming attributes appear in the correct chronological order.</p> -<div id="log"></div> -<iframe id="frameContext" onload="onload_test();" src="/w3c/webperf/resources/inject_resource_test.html"></iframe> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_connection_reuse.html b/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_connection_reuse.html deleted file mode 100644 index faf03580..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_connection_reuse.html +++ /dev/null
@@ -1,57 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta charset="utf-8" /> -<title>Resource Timing connection reuse</title> -<link rel="author" title="Google" href="http://www.google.com/" /> -<link rel="help" href="http://www.w3.org/TR/resource-timing/#dom-performanceresourcetiming-initiatortype"/> -<script src="/w3c/resources/testharness.js"></script> -<script src="/w3c/resources/testharnessreport.js"></script> -<script src="/w3c/webperf/resources/webperftestharness.js"></script> -<script src="/w3c/webperf/resources/webperftestharnessextension.js"></script> -<script> -setup({explicit_done: true}); -var iframe; -var d; -var body; - -function setup_iframe() { - iframe = document.getElementById('frameContext'); - d = iframe.contentWindow.document; - body = d.createElement('body'); - d.getElementsByTagName('html')[0].appendChild(body); - - var image = d.createElement('img'); - image.src = '/w3c/webperf/resources/generate_resource.php?type=image&id=1'; - image.addEventListener('load', first_image_loaded); - body.appendChild(image); -} - -function first_image_loaded() { - var image = d.createElement('img'); - image.src = '/w3c/webperf/resources/generate_resource.php?type=image&id=2'; - image.addEventListener('load', second_image_loaded); - body.appendChild(image); -} - -function second_image_loaded() { - var context = new PerformanceContext(iframe.contentWindow.performance); - var entries = context.getEntriesByType('resource'); - test_equals(entries.length, 2, 'There should be 2 PerformanceEntries'); - - var entry = entries[0]; - test_equals(entry.connectStart, entry.connectEnd, "connectStart and connectEnd should be the same"); - - done(); -} - -window.setup_iframe = setup_iframe; -</script> -</head> -<body> -<h1>Description</h1> -<p>This test validates that connectStart and connectEnd are the same when a connection is reused.</p> -<div id="log"></div> -<iframe id="frameContext" src="/w3c/webperf/resources/inject_resource_test.html"></iframe> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_dedicated_worker.html b/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_dedicated_worker.html deleted file mode 100644 index 7a1f831..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_dedicated_worker.html +++ /dev/null
@@ -1,44 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta charset="utf-8" /> -<title>Resource Timing in dedicated workers</title> -<link rel="author" title="Google" href="http://www.google.com/" /> -<link rel="help" href="http://www.w3.org/TR/resource-timing/"/> -<script src="/w3c/resources/testharness.js"></script> -<script src="/w3c/resources/testharnessreport.js"></script> -<script src="/w3c/webperf/resources/webperftestharness.js"></script> -<script src="/w3c/webperf/resources/webperftestharnessextension.js"></script> -<link rel="stylesheet" href="/w3c/resources/testharness.css" /> -<script> -setup({explicit_done: true}); - -var worker_requested_resources = [ - '/w3c/webperf/resources/generate_resource.php?type=image&id=1', - '/w3c/webperf/resources/generate_resource.php?type=image&id=2', -]; - -var worker = new Worker("/w3c/webperf/resources/loader_worker.js"); - -worker.onmessage = function(event) { - var context = new PerformanceContext(window.performance); - var entries = context.getEntriesByType('resource'); - test_equals(entries.length, 6, "There should be six entries: 4 scripts, 1 stylesheet, and the worker itself"); - done(); -} - -function start() { - worker.postMessage(worker_requested_resources); -} - -window.addEventListener("load", start); -</script> -</head> -<body> -<h1>Description</h1> -<p>This test validates that resources requested by dedicated workers don't appear in the main document.</p> - -<div id="log"></div> - -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_dynamic_insertion.html b/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_dynamic_insertion.html deleted file mode 100644 index 2f1c47a..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_dynamic_insertion.html +++ /dev/null
@@ -1,54 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta charset="utf-8" /> -<title>Resource Timing initiator types with dynamic insertion</title> -<link rel="author" title="Google" href="http://www.google.com/" /> -<link rel="help" href="http://www.w3.org/TR/resource-timing/#dom-performanceresourcetiming-initiatortype"/> -<script src="/w3c/resources/testharness.js"></script> -<script src="/w3c/resources/testharnessreport.js"></script> -<script src="/w3c/webperf/resources/webperftestharness.js"></script> -<script src="/w3c/webperf/resources/webperftestharnessextension.js"></script> -<script> -var iframe; -function setup_iframe() { - iframe = document.getElementById('frameContext'); - var d = iframe.contentWindow.document; - var body = d.createElement('body'); - d.getElementsByTagName('html')[0].appendChild(body); - - var style = d.createElement('link'); - style.rel = 'stylesheet'; - style.href = '/w3c/webperf/resources/generate_resource.php?type=css'; - body.appendChild(style); - - var image = d.createElement('img'); - image.src = '/w3c/webperf/resources/generate_resource.php?type=image'; - body.appendChild(image); - - var subframe = d.createElement('iframe'); - subframe.src = '/w3c/webperf/resources/generate_resource.php?type=iframe'; - body.appendChild(subframe); -} -function onload_test() { - var context = new PerformanceContext(iframe.contentWindow.performance); - var entries = context.getEntriesByType('resource'); - - var expected_entries = { - '/w3c/webperf/resources/generate_resource.php?type=css': 'link', - '/w3c/webperf/resources/generate_resource.php?type=image': 'img', - '/w3c/webperf/resources/generate_resource.php?type=iframe': 'iframe', - }; - - test_resource_entries(entries, expected_entries); -} -window.setup_iframe = setup_iframe; -</script> -</head> -<body> -<h1>Description</h1> -<p>This test validates that all of the initiator types are represented even when dynamically inserted.</p> -<div id="log"></div> -<iframe id="frameContext" onload="onload_test();" src="/w3c/webperf/resources/inject_resource_test.html"></iframe> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_frame_initiator_type.html b/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_frame_initiator_type.html deleted file mode 100644 index c4d0c3d..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_frame_initiator_type.html +++ /dev/null
@@ -1,35 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta charset="utf-8" /> -<title>Resource Timing frame initiator type</title> -<link rel="author" title="Google" href="http://www.google.com/" /> -<link rel="help" href="http://www.w3.org/TR/resource-timing/#dom-performanceresourcetiming-initiatortype"/> -<script src="/w3c/resources/testharness.js"></script> -<script src="/w3c/resources/testharnessreport.js"></script> -<script src="/w3c/webperf/resources/webperftestharness.js"></script> -<script src="/w3c/webperf/resources/webperftestharnessextension.js"></script> -<script> -setup({explicit_done: true}); - -function onload_test() { - var iframe = document.getElementById('frameContext'); - var context = new PerformanceContext(iframe.contentWindow.performance); - var entries = context.getEntriesByType('resource'); - - var expected_entries = { - '/w3c/webperf/resources/blank_page_green.htm': 'frame', - }; - - test_resource_entries(entries, expected_entries); - done(); -} -</script> -</head> -<body> -<h1>Description</h1> -<p>This test validates that the frame initiator type is represented.</p> -<div id="log"></div> -<iframe id="frameContext" onload="onload_test();" src="/w3c/webperf/resources/green_frame.htm" style="width: 250px; height: 250px;"></iframe> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_ignore_data_url.html b/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_ignore_data_url.html deleted file mode 100644 index 751881b..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_ignore_data_url.html +++ /dev/null
@@ -1,33 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta charset="utf-8" /> -<title>Resource Timing ignores requests for data: URIs</title> -<link rel="author" title="Google" href="http://www.google.com/" /> -<link rel="help" href="http://www.w3.org/TR/resource-timing/#dom-performanceresourcetiming-initiatortype"/> -<script src="/w3c/resources/testharness.js"></script> -<script src="/w3c/resources/testharnessreport.js"></script> -<script src="/w3c/webperf/resources/webperftestharness.js"></script> -<script src="/w3c/webperf/resources/webperftestharnessextension.js"></script> -<script> -var iframe; -function setup_iframe() { - var iframe_content = '<img src="data:image/gif;base64,R0lGODlhAQABAIAAAOTm7AAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="></img>'; - iframe = document.getElementById('frameContext'); - iframe.contentWindow.document.write(iframe_content); -} -function onload_test() { - var context = new PerformanceContext(iframe.contentWindow.performance); - var entries = context.getEntriesByType('resource'); - test_true(entries.length == 0, "entries.length == 0"); -} -window.setup_iframe = setup_iframe; -</script> -</head> -<body> -<h1>Description</h1> -<p>This test validates that resources with data: URIs aren't present in the Resource Timing buffer.</p> -<div id="log"></div> -<iframe id="frameContext" onload="onload_test();" src="/w3c/webperf/resources/inject_resource_test.html"></iframe> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_ignore_failures.html b/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_ignore_failures.html deleted file mode 100644 index 4091ec02..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/submission/Google/resource-timing/html/test_resource_ignore_failures.html +++ /dev/null
@@ -1,33 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta charset="utf-8" /> -<title>Resource Timing ignores failed resources</title> -<link rel="author" title="Google" href="http://www.google.com/" /> -<link rel="help" href="http://www.w3.org/TR/resource-timing/#dom-performanceresourcetiming-initiatortype"/> -<script src="/w3c/resources/testharness.js"></script> -<script src="/w3c/resources/testharnessreport.js"></script> -<script src="/w3c/webperf/resources/webperftestharness.js"></script> -<script src="/w3c/webperf/resources/webperftestharnessextension.js"></script> -<script> -var iframe; -function setup_iframe() { - var iframe_content = '<img src="/w3c/webperf/resources/generate_resource.php?type=error"></img>'; - iframe = document.getElementById('frameContext'); - iframe.contentWindow.document.write(iframe_content); -} -function onload_test() { - var context = new PerformanceContext(iframe.contentWindow.performance); - var entries = context.getEntriesByType('resource'); - test_true(entries.length == 0, "entries.length == 0"); -} -window.setup_iframe = setup_iframe; -</script> -</head> -<body> -<h1>Description</h1> -<p>This test validates that failed resources aren't present in the Resource Timing buffer.</p> -<div id="log"></div> -<iframe id="frameContext" onload="onload_test();" src="/w3c/webperf/resources/inject_resource_test.html"></iframe> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/scaled-mask-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/scaled-mask-expected.txt index 082a57ef..c7afb2a3 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/scaled-mask-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/scaled-mask-expected.txt
@@ -10,11 +10,11 @@ LayoutBlockFlow (positioned) {DIV} at (8,52) size 0x0 layer at (8,52) size 208x208 clip at (12,56) size 200x200 scrollWidth 500 scrollHeight 500 LayoutBlockFlow (positioned) {DIV} at (0,0) size 208x208 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (12,56) size 500x500 backgroundClip at (12,56) size 200x200 clip at (12,56) size 200x200 +layer at (12,56) size 500x500 backgroundClip at (16,56) size 400x200 clip at (16,56) size 400x200 LayoutBlockFlow (positioned) {DIV} at (4,4) size 500x500 [bgcolor=#000000] layer at (8,300) size 0x0 LayoutBlockFlow (positioned) {DIV} at (8,300) size 0x0 layer at (8,300) size 208x208 clip at (12,304) size 200x200 scrollWidth 500 scrollHeight 500 LayoutBlockFlow (positioned) {DIV} at (0,0) size 208x208 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (12,304) size 500x500 backgroundClip at (12,304) size 200x200 clip at (12,304) size 200x200 +layer at (12,304) size 500x500 backgroundClip at (16,304) size 400x200 clip at (16,304) size 400x200 LayoutBlockFlow (positioned) {DIV} at (4,4) size 500x500 [bgcolor=#000000]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/tiled-mask-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/tiled-mask-expected.txt index 736a9f84..fcb1af4 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/tiled-mask-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/tiled-mask-expected.txt
@@ -5,24 +5,24 @@ LayoutBlockFlow {BODY} at (8,8) size 769x808 layer at (8,8) size 808x808 backgroundClip at (8,8) size 777x577 clip at (12,12) size 773x573 scrollWidth 2000 scrollHeight 2000 LayoutBlockFlow {DIV} at (0,0) size 808x808 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (12,12) size 2000x2000 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (12,12) size 2000x2000 backgroundClip at (12,12) size 773x573 clip at (12,12) size 773x573 LayoutBlockFlow (positioned) {DIV} at (4,4) size 2000x2000 [bgcolor=#FFEFD5] LayoutText {#text} at (0,0) size 125x19 text run at (0,0) width 125: "There's stuff in here" layer at (12,12) size 50x50 LayoutBlockFlow (positioned) {DIV} at (4,4) size 50x50 [bgcolor=#800000] -layer at (12,712) size 100x100 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (12,712) size 100x100 backgroundClip at (12,12) size 773x573 clip at (12,12) size 773x573 LayoutBlockFlow (positioned) {DIV} at (4,704) size 100x100 [bgcolor=#FFA500] -layer at (-48,82) size 100x100 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (-48,82) size 100x100 backgroundClip at (12,12) size 773x573 clip at (12,12) size 773x573 LayoutBlockFlow (positioned) {DIV} at (-56,74) size 100x100 [bgcolor=#008000] -layer at (132,712) size 100x100 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (132,712) size 100x100 backgroundClip at (12,12) size 773x573 clip at (12,12) size 773x573 LayoutBlockFlow (positioned) {DIV} at (124,704) size 100x100 [bgcolor=#0000FF] -layer at (762,12) size 100x100 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (762,12) size 100x100 backgroundClip at (12,12) size 773x573 clip at (12,12) size 773x573 LayoutBlockFlow (positioned) {DIV} at (754,4) size 100x100 [bgcolor=#FFFF00] layer at (92,312) size 100x100 LayoutBlockFlow (positioned) {DIV} at (84,304) size 100x100 layer at (32,412) size 100x100 LayoutBlockFlow (positioned) {DIV} at (24,404) size 100x100 [bgcolor=#FF0000] -layer at (762,762) size 50x50 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (762,762) size 50x50 backgroundClip at (12,12) size 773x573 clip at (12,12) size 773x573 LayoutBlockFlow (positioned) {DIV} at (754,754) size 50x50 [bgcolor=#800080] scrolled to 31,239
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/reflections/nested-reflection-on-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/compositing/reflections/nested-reflection-on-overflow-expected.txt index 92c1af3..4f2cdbe 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/compositing/reflections/nested-reflection-on-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/reflections/nested-reflection-on-overflow-expected.txt
@@ -12,7 +12,7 @@ LayoutBlockFlow {DIV} at (11,11) size 100x100 [bgcolor=#008000] layer at (39,67) size 100x100 clip at (39,67) size 85x85 scrollHeight 500 LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 100x100 -layer at (39,67) size 85x500 backgroundClip at (39,67) size 85x85 clip at (39,67) size 85x85 +layer at (39,67) size 85x500 backgroundClip at (39,67) size 232x210 clip at (39,67) size 232x210 LayoutBlockFlow {DIV} at (0,0) size 85x500 LayoutText {#text} at (0,0) size 84x459 text run at (0,0) width 84: "Lorem ipsum"
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css/input-search-padding-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/css/input-search-padding-expected.txt index 6b507194..d8de6953 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/css/input-search-padding-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/css/input-search-padding-expected.txt
@@ -20,7 +20,7 @@ LayoutBlockFlow {DIV} at (2,3) size 450x46 LayoutText {#text} at (0,0) size 362x45 text run at (0,0) width 362: "value jgq not clipped" -layer at (14,171) size 207x24 +layer at (14,171) size 207x24 backgroundClip at (14,172) size 207x21 clip at (14,172) size 207x21 LayoutBlockFlow {DIV} at (0,0) size 207x24 LayoutText {#text} at (0,0) size 118x23 text run at (0,0) width 118: "Sample Input"
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/placeholder-position-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/placeholder-position-expected.txt index f33b3e6..ee12df6c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/placeholder-position-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/placeholder-position-expected.txt
@@ -139,7 +139,7 @@ LayoutBlockFlow {DIV} at (2,4) size 150x16 [color=#757575] LayoutText {#text} at (0,0) size 66x16 text run at (0,0) width 66: "placeholder" -layer at (484,259) size 150x25 +layer at (484,259) size 150x25 backgroundClip at (484,261) size 150x21 clip at (484,261) size 150x21 LayoutBlockFlow {DIV} at (2,0) size 150x25 layer at (10,292) size 150x16 LayoutBlockFlow {DIV} at (2,4.50) size 150x16 [color=#757575] @@ -169,11 +169,11 @@ LayoutBlockFlow {DIV} at (0,3.50) size 9x9 layer at (149,81) size 9x9 transparent LayoutBlockFlow {DIV} at (138,3.50) size 9x9 -layer at (8,334) size 154x36 clip at (10,336) size 150x32 +layer at (8,334) size 154x36 backgroundClip at (9,328) size 152x108 clip at (10,336) size 150x32 LayoutTextControl {INPUT} at (0,326) size 154x36 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] -layer at (10,351) size 150x16 backgroundClip at (29,351) size 131x11 clip at (29,351) size 131x11 +layer at (10,351) size 150x16 backgroundClip at (13,344) size 137x88 clip at (13,351) size 137x16 LayoutBlockFlow {DIV} at (2,17) size 150x16 [color=#757575] LayoutText {#text} at (0,0) size 66x16 text run at (0,0) width 66: "placeholder" -layer at (10,351) size 150x16 backgroundClip at (29,351) size 131x11 clip at (29,351) size 131x11 +layer at (10,351) size 150x16 backgroundClip at (13,344) size 137x88 clip at (13,351) size 137x16 LayoutBlockFlow {DIV} at (2,17) size 150x16
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/search/search-vertical-alignment-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/search/search-vertical-alignment-expected.txt index e5812ad..b016f6d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/search/search-vertical-alignment-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/search/search-vertical-alignment-expected.txt
@@ -42,19 +42,19 @@ LayoutBlockFlow {DIV} at (2,14.50) size 150x16 LayoutText {#text} at (0,0) size 25x16 text run at (0,0) width 25: "Text" -layer at (11,127) size 137x16 +layer at (11,127) size 137x16 backgroundClip at (11,129) size 137x12 clip at (11,129) size 137x12 LayoutBlockFlow {DIV} at (0,0) size 137x16 LayoutText {#text} at (0,0) size 25x16 text run at (0,0) width 25: "Text" -layer at (170,127) size 150x16 +layer at (170,127) size 150x16 backgroundClip at (170,129) size 150x12 clip at (170,129) size 150x12 LayoutBlockFlow {DIV} at (2,0) size 150x16 LayoutText {#text} at (0,0) size 25x16 text run at (0,0) width 25: "Text" -layer at (11,163) size 137x16 +layer at (11,163) size 137x16 backgroundClip at (11,167) size 137x8 clip at (11,167) size 137x8 LayoutBlockFlow {DIV} at (0,0) size 137x16 LayoutText {#text} at (0,0) size 25x16 text run at (0,0) width 25: "Text" -layer at (170,163) size 150x16 +layer at (170,163) size 150x16 backgroundClip at (170,167) size 150x8 clip at (170,167) size 150x8 LayoutBlockFlow {DIV} at (2,-2) size 150x16 LayoutText {#text} at (0,0) size 25x16 text run at (0,0) width 25: "Text" @@ -62,5 +62,5 @@ LayoutBlockFlow {DIV} at (138,3.50) size 9x9 layer at (149,131) size 9x9 transparent LayoutBlockFlow {DIV} at (138,3.50) size 9x9 -layer at (149,167) size 9x9 transparent +layer at (149,167) size 9x9 backgroundClip at (10,167) size 152x8 clip at (10,167) size 152x8 transparent LayoutBlockFlow {DIV} at (138,3.50) size 9x9
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/search/searchfield-heights-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/search/searchfield-heights-expected.txt index 771c2419..6c825fe 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/search/searchfield-heights-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/search/searchfield-heights-expected.txt
@@ -20,7 +20,7 @@ LayoutFlexibleBox {DIV} at (3,83.50) size 301x33 LayoutBlockFlow {DIV} at (0,0) size 278x33 LayoutText {#text} at (0,0) size 0x0 -layer at (11,133) size 64x6 +layer at (11,133) size 64x6 backgroundClip at (11,135) size 64x2 clip at (11,135) size 64x2 LayoutBlockFlow {DIV} at (0,0) size 64x6 LayoutText {#text} at (0,0) size 10x6 text run at (0,0) width 10: "mini" @@ -32,7 +32,7 @@ LayoutBlockFlow {DIV} at (0,0) size 278x33 LayoutText {#text} at (0,0) size 84x32 text run at (0,0) width 84: "regular" -layer at (76,133) size 5x5 transparent +layer at (76,133) size 5x5 backgroundClip at (10,135) size 75x2 clip at (10,135) size 75x2 transparent LayoutBlockFlow {DIV} at (65,0.50) size 5x5 layer at (254,127) size 10x10 transparent LayoutBlockFlow {DIV} at (160,3.50) size 10x10
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/select/menulist-appearance-rtl-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/select/menulist-appearance-rtl-expected.txt index f36f8b47..ded3d6f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/select/menulist-appearance-rtl-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/select/menulist-appearance-rtl-expected.txt
@@ -76,7 +76,7 @@ layer at (8,399) size 784x160 LayoutBlockFlow {DIV} at (0,383) size 784x160 LayoutMultiColumnSet (anonymous) at (0,0) size 784x160 -layer at (8,399) size 384x320 backgroundClip at (0,0) size 800x600 clip at (0,0) size 800x600 +layer at (8,399) size 384x320 backgroundClip at (0,0) size 400x559 clip at (0,0) size 400x559 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 384x320 LayoutBlockFlow {DIV} at (0,0) size 384x160 LayoutMenuList {SELECT} at (0,0) size 350x22 [bgcolor=#C0C0C0] [border: (1px solid #A9A9A9)]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/text-font-height-mismatch-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/text-font-height-mismatch-expected.txt index ab36fa7..e1b574d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/text-font-height-mismatch-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/text-font-height-mismatch-expected.txt
@@ -21,7 +21,7 @@ LayoutBlockFlow {DIV} at (1,2) size 367x24 LayoutText {#text} at (0,0) size 74x24 text run at (0,0) width 74: "\x{3075} ABCgjy" -layer at (9,80) size 274x28 +layer at (9,80) size 274x28 backgroundClip at (9,81) size 274x26 clip at (9,81) size 274x26 LayoutBlockFlow {DIV} at (1,0) size 274x28 LayoutText {#text} at (0,0) size 79x27 text run at (0,0) width 79: "ABCgjy"
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/textfield-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/textfield-overflow-expected.txt index 441e9d35..745bd84 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/textfield-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/text/textfield-overflow-expected.txt
@@ -5,6 +5,6 @@ LayoutBlockFlow {BODY} at (8,8) size 784x584 LayoutTextControl {INPUT} at (0,0) size 154x10 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] LayoutText {#text} at (0,0) size 0x0 -layer at (10,5) size 150x16 +layer at (10,5) size 150x16 backgroundClip at (10,10) size 150x6 clip at (10,10) size 150x6 LayoutBlockFlow {DIV} at (2,-3) size 150x16 caret: position 0 of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of body
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/layers/opacity-transforms-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/layers/opacity-transforms-expected.txt index cdcd481..b96e99a 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/layers/opacity-transforms-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/layers/opacity-transforms-expected.txt
@@ -16,5 +16,5 @@ LayoutBlockFlow (positioned) {DIV} at (100,150) size 100x100 layer at (100,150) size 10x10 LayoutBlockFlow {DIV} at (0,0) size 10x10 -layer at (100,150) size 100x100 +layer at (150,200) size 100x100 LayoutBlockFlow (positioned) {DIV} at (0,0) size 100x100 [bgcolor=#008000]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fragmentation/transformed-clip-before-second-column-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fragmentation/transformed-clip-before-second-column-expected.txt index 140f33c0..d1438d7a12 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fragmentation/transformed-clip-before-second-column-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/fragmentation/transformed-clip-before-second-column-expected.txt
@@ -6,15 +6,15 @@ layer at (8,8) size 784x70 LayoutBlockFlow {DIV} at (0,0) size 784x70 LayoutMultiColumnSet (anonymous) at (0,0) size 784x70 -layer at (8,8) size 384x140 +layer at (8,8) size 384x140 backgroundClip at (0,0) size 400x78 clip at (0,0) size 400x78 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 384x140 LayoutBlockFlow {DIV} at (0,0) size 384x100 -layer at (8,108) size 384x40 scrollHeight 41 +layer at (408,38) size 384x40 scrollHeight 41 LayoutBlockFlow {DIV} at (0,100) size 384x40 LayoutBlockFlow (anonymous) at (0,0) size 384x20 LayoutText {#text} at (0,0) size 312x19 text run at (0,0) width 312: "There should be a black rectangle below this text." -layer at (8,128) size 384x20 backgroundClip at (408,38) size 384x40 clip at (408,38) size 384x40 +layer at (408,58) size 384x20 LayoutBlockFlow {DIV} at (0,20) size 384x20 LayoutInline {<pseudo:before>} at (0,0) size 10x19 LayoutTextFragment (anonymous) at (0,0) size 10x19
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-0px-images-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-0px-images-expected.txt index 77e1b1c..8b03aac 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-0px-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-0px-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,52) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x288 -layer at (8,52) size 180x1000 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,52) size 180x1000 backgroundClip at (0,0) size 196x340 clip at (0,0) size 196x340 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1000 LayoutBlockFlow {DIV} at (0,16) size 180.25x116 LayoutBlockFlow {P} at (0,0) size 180.25x20 @@ -291,6 +291,6 @@ layer at (20,271) size 0x0 LayoutBlockFlow {SPAN} at (0,15) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,411) size 0x0 +layer at (216,123) size 0x0 LayoutBlockFlow {SPAN} at (0,15) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-0px-images-quirk-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-0px-images-quirk-expected.txt index cddc383..3965595 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-0px-images-quirk-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-0px-images-quirk-expected.txt
@@ -9,7 +9,7 @@ layer at (8,44) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x288 -layer at (8,44) size 180x1000 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,44) size 180x1000 backgroundClip at (0,0) size 196x332 clip at (0,0) size 196x332 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1000 LayoutBlockFlow {DIV} at (0,16) size 180.25x116 LayoutBlockFlow {P} at (0,0) size 180.25x20 @@ -245,64 +245,64 @@ layer at (20,303) size 0x0 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,403) size 0x0 +layer at (216,115) size 0x0 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,423) size 0x0 +layer at (216,135) size 0x0 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,443) size 0x0 +layer at (216,155) size 0x0 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,691) size 0x0 scrollWidth 23 scrollHeight 40 +layer at (413,115) size 0x0 scrollWidth 23 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 23x39 LayoutText {#text} at (0,0) size 23x39 text run at (0,0) width 15: "alt" text run at (0,20) width 23: "text" -layer at (20,711) size 0x0 scrollWidth 23 scrollHeight 40 +layer at (413,135) size 0x0 scrollWidth 23 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 23x39 LayoutText {#text} at (0,0) size 23x39 text run at (0,0) width 15: "alt" text run at (0,20) width 23: "text" -layer at (20,731) size 0x0 scrollWidth 23 scrollHeight 40 +layer at (413,155) size 0x0 scrollWidth 23 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 23x39 LayoutText {#text} at (0,0) size 23x39 text run at (0,0) width 15: "alt" text run at (0,20) width 23: "text" -layer at (20,843) size 0x0 scrollWidth 23 scrollHeight 40 +layer at (413,267) size 0x0 scrollWidth 23 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 23x39 LayoutText {#text} at (0,0) size 23x39 text run at (0,0) width 15: "alt" text run at (0,20) width 23: "text" -layer at (20,863) size 0x0 scrollWidth 23 scrollHeight 40 +layer at (413,287) size 0x0 scrollWidth 23 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 23x39 LayoutText {#text} at (0,0) size 23x39 text run at (0,0) width 15: "alt" text run at (0,20) width 23: "text" -layer at (20,883) size 0x0 scrollWidth 23 scrollHeight 40 +layer at (413,307) size 0x0 scrollWidth 23 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 23x39 LayoutText {#text} at (0,0) size 23x39 text run at (0,0) width 15: "alt" text run at (0,20) width 23: "text" -layer at (20,979) size 0x0 scrollWidth 23 scrollHeight 40 +layer at (609,115) size 0x0 scrollWidth 23 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 23x39 LayoutText {#text} at (0,0) size 23x39 text run at (0,0) width 15: "alt" text run at (0,20) width 23: "text" -layer at (20,999) size 0x0 scrollWidth 23 scrollHeight 40 +layer at (609,135) size 0x0 scrollWidth 23 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 23x39 LayoutText {#text} at (0,0) size 23x39 text run at (0,0) width 15: "alt" text run at (0,20) width 23: "text" -layer at (20,1019) size 0x0 scrollWidth 23 scrollHeight 40 +layer at (609,155) size 0x0 scrollWidth 23 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 23x39 LayoutText {#text} at (0,0) size 23x39
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-10px-images-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-10px-images-expected.txt index b1a0851..75a7039 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-10px-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-10px-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,52) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x288 -layer at (8,52) size 180x1000 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,52) size 180x1000 backgroundClip at (0,0) size 196x340 clip at (0,0) size 196x340 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1000 LayoutBlockFlow {DIV} at (0,16) size 180.25x116 LayoutBlockFlow {P} at (0,0) size 180.25x20 @@ -291,6 +291,6 @@ layer at (20,261) size 10x10 LayoutBlockFlow {SPAN} at (0,5) size 10x10 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,401) size 10x10 +layer at (216,113) size 10x10 LayoutBlockFlow {SPAN} at (0,5) size 10x10 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-16px-images-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-16px-images-expected.txt index 166e55be..fb774c4 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-16px-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-16px-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,52) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x290 -layer at (8,52) size 180x1158 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,52) size 180x1158 backgroundClip at (0,0) size 196x342 clip at (0,0) size 196x342 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1158 LayoutBlockFlow {DIV} at (0,16) size 180.25x116 LayoutBlockFlow {P} at (0,0) size 180.25x20 @@ -291,6 +291,6 @@ layer at (20,256) size 16x16 LayoutBlockFlow {SPAN} at (0,0) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,398) size 16x16 +layer at (216,108) size 16x16 LayoutBlockFlow {SPAN} at (0,0) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-1px-images-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-1px-images-expected.txt index 44d10d1..cd2ab0e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-1px-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-1px-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,52) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x288 -layer at (8,52) size 180x1000 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,52) size 180x1000 backgroundClip at (0,0) size 196x340 clip at (0,0) size 196x340 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1000 LayoutBlockFlow {DIV} at (0,16) size 180.25x116 LayoutBlockFlow {P} at (0,0) size 180.25x20 @@ -291,6 +291,6 @@ layer at (20,270) size 1x1 LayoutBlockFlow {SPAN} at (0,14) size 1x1 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,410) size 1x1 +layer at (216,122) size 1x1 LayoutBlockFlow {SPAN} at (0,14) size 1x1 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-block-flow-images-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-block-flow-images-expected.txt index 8aeccd7..80f1cc90 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-block-flow-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-block-flow-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,52) size 769x800 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x800 -layer at (8,52) size 180x3621 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (8,52) size 180x3621 backgroundClip at (0,0) size 196x585 clip at (0,0) size 196x585 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x3621 LayoutBlockFlow {DIV} at (0,16) size 180.25x401 LayoutBlockFlow {P} at (0,0) size 180.25x20 @@ -353,11 +353,11 @@ LayoutBlockFlow {SPAN} at (0,0) size 50x50 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (8,928) size 25x25 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 +layer at (204,128) size 25x25 clip at (205,129) size 23x23 LayoutBlockFlow {SPAN} at (0,0) size 25x25 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (8,993) size 50x50 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 +layer at (204,193) size 50x50 clip at (205,194) size 48x48 LayoutBlockFlow {SPAN} at (0,0) size 50x50 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-images-empty-alt-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-images-empty-alt-expected.txt index a930c75..5648567e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-images-empty-alt-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-images-empty-alt-expected.txt
@@ -9,7 +9,7 @@ layer at (8,52) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x408 -layer at (8,52) size 180x1632 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,52) size 180x1632 backgroundClip at (0,0) size 196x460 clip at (0,0) size 196x460 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1632 LayoutBlockFlow {DIV} at (0,16) size 180.25x156 LayoutBlockFlow {P} at (0,0) size 180.25x40
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-images-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-images-expected.txt index 1896a55..bc8767d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/images/rendering-broken-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,52) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x408 -layer at (8,52) size 180x1552 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,52) size 180x1552 backgroundClip at (0,0) size 196x460 clip at (0,0) size 196x460 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1552 LayoutBlockFlow {DIV} at (0,16) size 180.25x136 LayoutBlockFlow {P} at (0,0) size 180.25x20 @@ -354,11 +354,11 @@ LayoutBlockFlow {SPAN} at (0,0) size 50x50 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,516) size 25x25 clip at (21,517) size 23x23 +layer at (216,108) size 25x25 clip at (217,109) size 23x23 LayoutBlockFlow {SPAN} at (0,0) size 25x25 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,546) size 50x50 clip at (21,547) size 48x48 +layer at (216,138) size 50x50 clip at (217,139) size 48x48 LayoutBlockFlow {SPAN} at (0,0) size 50x50 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-layer-crash-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/video-layer-crash-expected.txt index 4ad5dee..64a0cdb 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/media/video-layer-crash-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-layer-crash-expected.txt
@@ -21,7 +21,7 @@ layer at (15,67) size 200x150 LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 200x150 LayoutBlockFlow {DIV} at (0,118) size 200x32 -layer at (15,67) size 200x108 +layer at (15,67) size 200x108 backgroundClip at (65,105) size 100x155 clip at (65,105) size 100x70 LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 200x108 layer at (12,225) size 206x156 LayoutVideo {VIDEO} at (4,181) size 206x156 [border: (3px solid #FF0000)]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-transformed-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/video-transformed-expected.txt index 6320d0f5..a832d47d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/media/video-transformed-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-transformed-expected.txt
@@ -28,7 +28,7 @@ layer at (15,208) size 200x150 LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 200x150 LayoutBlockFlow {DIV} at (0,118) size 200x32 -layer at (15,208) size 200x108 +layer at (15,208) size 200x108 backgroundClip at (65,246) size 100x54 clip at (65,246) size 100x54 LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 200x108 layer at (12,366) size 206x156 LayoutVideo {VIDEO} at (4,322) size 206x156 [border: (3px solid #FF0000)]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-zoom-controls-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/video-zoom-controls-expected.txt index e228e179..24b19847 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/media/video-zoom-controls-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-zoom-controls-expected.txt
@@ -30,7 +30,7 @@ LayoutBlockFlow {DIV} at (0,132) size 240x48 layer at (57,310) size 240x117 LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 240x117 -layer at (57,442) size 240x48 +layer at (57,442) size 240x48 backgroundClip at (43,421) size 245x88 clip at (57,442) size 231x48 LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 240x48 [bgcolor=#FAFAFA] LayoutButton {INPUT} at (0,0) size 48x48 LayoutFlexibleBox {DIV} at (48,0) size 35x48 [color=#5A5A5A] @@ -38,5 +38,5 @@ LayoutText {#text} at (0,13) size 35x21 text run at (0,13) width 35: "0:00" LayoutButton {INPUT} at (83,0) size 48x48 -layer at (188,442) size 48x48 backgroundClip at (188,442) size 48x27 clip at (188,442) size 48x27 +layer at (188,442) size 48x48 backgroundClip at (172,443) size 56x56 clip at (188,443) size 40x47 LayoutButton {INPUT} at (131,0) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/linux/printing/thead-under-multicol-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/printing/thead-under-multicol-expected.txt index e29862f..7e58de6 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/printing/thead-under-multicol-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/printing/thead-under-multicol-expected.txt
@@ -6,7 +6,7 @@ layer at (8,8) size 1545x2000 backgroundClip at (0,0) size 1561x1193 clip at (0,0) size 1561x1193 LayoutBlockFlow {DIV} at (0,0) size 1545x2000 LayoutMultiColumnSet (anonymous) at (0,0) size 1545x2000 -layer at (8,8) size 765x3840 backgroundClip at (0,0) size 1561x1193 clip at (0,0) size 1561x1193 +layer at (8,8) size 765x3840 backgroundClip at (0,0) size 781x1193 clip at (0,0) size 781x1193 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 764.50x3840 LayoutTable {TABLE} at (0,0) size 305x3840 LayoutTableSection {THEAD} at (0,0) size 305x31
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/hixie/mixed/006-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/hixie/mixed/006-expected.txt index 9f85804..0e2cb4c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/hixie/mixed/006-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/hixie/mixed/006-expected.txt
@@ -11,7 +11,7 @@ LayoutSVGEllipse {circle} at (50,50) size 100x100 [fill={[type=SOLID] [color=#008000]}] [cx=100.00] [cy=100.00] [r=50.00] LayoutSVGForeignObject {foreignObject} at (0,0) size 200x200 LayoutText {#text} at (0,0) size 0x0 -layer at (8,8) size 200x200 +layer at (16,216) size 200x200 LayoutBlockFlow (positioned) {div} at (8,8) size 200x200 [bgcolor=#FFFFFF] LayoutText {#text} at (0,0) size 199x39 text run at (0,0) width 190: "There should be a green circle"
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/transforms/svg-css-transforms-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/transforms/svg-css-transforms-expected.txt index d93bbb6..aaae3373c7 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/transforms/svg-css-transforms-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/transforms/svg-css-transforms-expected.txt
@@ -33,7 +33,7 @@ LayoutBlockFlow (relative positioned) {div} at (10,333.63) size 200x200 [bgcolor=#C0C0C0] [border: (1px solid #000000)] layer at (29,353) size 60x60 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px dotted #000000)] -layer at (30,354) size 60x60 +layer at (105,379) size 60x60 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px dotted #000000)] layer at (31,355) size 60x60 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px solid #0000FF)]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/2d/compound-transforms-vs-containers-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/transforms/2d/compound-transforms-vs-containers-expected.txt index 0e29803..4e3d8cd3 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/transforms/2d/compound-transforms-vs-containers-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/2d/compound-transforms-vs-containers-expected.txt
@@ -14,7 +14,7 @@ text run at (0,0) width 86: "Translate first" layer at (79,129) size 80x80 LayoutBlockFlow (positioned) {DIV} at (1,53) size 80x80 -layer at (79,129) size 80x80 +layer at (154,149) size 80x80 LayoutBlockFlow (positioned) {DIV} at (0,0) size 80x80 layer at (79,129) size 80x80 LayoutBlockFlow (positioned) {DIV} at (0,0) size 80x80
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/svg-vs-css-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/transforms/svg-vs-css-expected.txt index 1cc396f..bbc11d94 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/transforms/svg-vs-css-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/svg-vs-css-expected.txt
@@ -42,7 +42,7 @@ LayoutBlockFlow (relative positioned) {div} at (10,333.63) size 200x200 [bgcolor=#C0C0C0] [border: (1px solid #000000)] layer at (29,353) size 60x60 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px dotted #000000)] -layer at (30,354) size 60x60 +layer at (105,379) size 60x60 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px dotted #000000)] layer at (31,355) size 60x60 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px solid #0000FF)]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/transform-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/transforms/transform-overflow-expected.txt index 22a20c9..8139a36b 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/transforms/transform-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/transform-overflow-expected.txt
@@ -8,5 +8,5 @@ text run at (0,0) width 250: "You should see one green square above" layer at (50,50) size 100x100 LayoutBlockFlow (positioned) {DIV} at (50,50) size 100x100 [bgcolor=#FF0000] -layer at (0,0) size 200x200 +layer at (0,0) size 200x200 backgroundClip at (50,50) size 100x100 clip at (50,50) size 100x100 LayoutBlockFlow {DIV} at (0,0) size 200x200 [bgcolor=#008000]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/transformed-focused-text-input-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/transforms/transformed-focused-text-input-expected.txt index 2ea7fbc..501bed9 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/transforms/transformed-focused-text-input-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/transformed-focused-text-input-expected.txt
@@ -7,6 +7,6 @@ LayoutBlockFlow {DIV} at (0,0) size 784x22 LayoutTextControl {INPUT} at (0,0) size 154x22 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] LayoutText {#text} at (0,0) size 0x0 -layer at (10,11) size 150x16 +layer at (10,11) size 150x16 backgroundClip at (7,11) size 150x42 clip at (10,11) size 147x16 LayoutBlockFlow {DIV} at (2,3) size 150x16 caret: position 0 of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of child 1 {DIV} of body
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/transforms-with-opacity-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/transforms/transforms-with-opacity-expected.txt index c250cf56..84a2ddd 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/transforms/transforms-with-opacity-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/transforms-with-opacity-expected.txt
@@ -10,5 +10,5 @@ LayoutBlockFlow {DIV} at (0,20) size 120x120 [bgcolor=#87CEEB] [border: (10px solid #000000)] layer at (18,38) size 120x120 LayoutBlockFlow {DIV} at (10,10) size 120x120 [border: (10px solid #000000)] -layer at (28,48) size 120x120 +layer at (148,38) size 120x120 LayoutBlockFlow {DIV} at (10,10) size 120x120 [border: (10px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-0px-images-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-0px-images-expected.txt index 77e1b1c..8b03aac 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-0px-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-0px-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,52) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x288 -layer at (8,52) size 180x1000 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,52) size 180x1000 backgroundClip at (0,0) size 196x340 clip at (0,0) size 196x340 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1000 LayoutBlockFlow {DIV} at (0,16) size 180.25x116 LayoutBlockFlow {P} at (0,0) size 180.25x20 @@ -291,6 +291,6 @@ layer at (20,271) size 0x0 LayoutBlockFlow {SPAN} at (0,15) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,411) size 0x0 +layer at (216,123) size 0x0 LayoutBlockFlow {SPAN} at (0,15) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-0px-images-quirk-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-0px-images-quirk-expected.txt index cddc383..3965595 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-0px-images-quirk-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-0px-images-quirk-expected.txt
@@ -9,7 +9,7 @@ layer at (8,44) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x288 -layer at (8,44) size 180x1000 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,44) size 180x1000 backgroundClip at (0,0) size 196x332 clip at (0,0) size 196x332 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1000 LayoutBlockFlow {DIV} at (0,16) size 180.25x116 LayoutBlockFlow {P} at (0,0) size 180.25x20 @@ -245,64 +245,64 @@ layer at (20,303) size 0x0 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,403) size 0x0 +layer at (216,115) size 0x0 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,423) size 0x0 +layer at (216,135) size 0x0 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,443) size 0x0 +layer at (216,155) size 0x0 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,691) size 0x0 scrollWidth 23 scrollHeight 40 +layer at (413,115) size 0x0 scrollWidth 23 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 23x39 LayoutText {#text} at (0,0) size 23x39 text run at (0,0) width 15: "alt" text run at (0,20) width 23: "text" -layer at (20,711) size 0x0 scrollWidth 23 scrollHeight 40 +layer at (413,135) size 0x0 scrollWidth 23 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 23x39 LayoutText {#text} at (0,0) size 23x39 text run at (0,0) width 15: "alt" text run at (0,20) width 23: "text" -layer at (20,731) size 0x0 scrollWidth 23 scrollHeight 40 +layer at (413,155) size 0x0 scrollWidth 23 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 23x39 LayoutText {#text} at (0,0) size 23x39 text run at (0,0) width 15: "alt" text run at (0,20) width 23: "text" -layer at (20,843) size 0x0 scrollWidth 23 scrollHeight 40 +layer at (413,267) size 0x0 scrollWidth 23 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 23x39 LayoutText {#text} at (0,0) size 23x39 text run at (0,0) width 15: "alt" text run at (0,20) width 23: "text" -layer at (20,863) size 0x0 scrollWidth 23 scrollHeight 40 +layer at (413,287) size 0x0 scrollWidth 23 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 23x39 LayoutText {#text} at (0,0) size 23x39 text run at (0,0) width 15: "alt" text run at (0,20) width 23: "text" -layer at (20,883) size 0x0 scrollWidth 23 scrollHeight 40 +layer at (413,307) size 0x0 scrollWidth 23 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 23x39 LayoutText {#text} at (0,0) size 23x39 text run at (0,0) width 15: "alt" text run at (0,20) width 23: "text" -layer at (20,979) size 0x0 scrollWidth 23 scrollHeight 40 +layer at (609,115) size 0x0 scrollWidth 23 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 23x39 LayoutText {#text} at (0,0) size 23x39 text run at (0,0) width 15: "alt" text run at (0,20) width 23: "text" -layer at (20,999) size 0x0 scrollWidth 23 scrollHeight 40 +layer at (609,135) size 0x0 scrollWidth 23 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 23x39 LayoutText {#text} at (0,0) size 23x39 text run at (0,0) width 15: "alt" text run at (0,20) width 23: "text" -layer at (20,1019) size 0x0 scrollWidth 23 scrollHeight 40 +layer at (609,155) size 0x0 scrollWidth 23 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 23x39 LayoutText {#text} at (0,0) size 23x39
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-10px-images-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-10px-images-expected.txt index b1a0851..75a7039 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-10px-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-10px-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,52) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x288 -layer at (8,52) size 180x1000 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,52) size 180x1000 backgroundClip at (0,0) size 196x340 clip at (0,0) size 196x340 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1000 LayoutBlockFlow {DIV} at (0,16) size 180.25x116 LayoutBlockFlow {P} at (0,0) size 180.25x20 @@ -291,6 +291,6 @@ layer at (20,261) size 10x10 LayoutBlockFlow {SPAN} at (0,5) size 10x10 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,401) size 10x10 +layer at (216,113) size 10x10 LayoutBlockFlow {SPAN} at (0,5) size 10x10 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-16px-images-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-16px-images-expected.txt index 166e55be..fb774c4 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-16px-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-16px-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,52) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x290 -layer at (8,52) size 180x1158 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,52) size 180x1158 backgroundClip at (0,0) size 196x342 clip at (0,0) size 196x342 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1158 LayoutBlockFlow {DIV} at (0,16) size 180.25x116 LayoutBlockFlow {P} at (0,0) size 180.25x20 @@ -291,6 +291,6 @@ layer at (20,256) size 16x16 LayoutBlockFlow {SPAN} at (0,0) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,398) size 16x16 +layer at (216,108) size 16x16 LayoutBlockFlow {SPAN} at (0,0) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-1px-images-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-1px-images-expected.txt index 44d10d1..cd2ab0e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-1px-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-1px-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,52) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x288 -layer at (8,52) size 180x1000 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,52) size 180x1000 backgroundClip at (0,0) size 196x340 clip at (0,0) size 196x340 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1000 LayoutBlockFlow {DIV} at (0,16) size 180.25x116 LayoutBlockFlow {P} at (0,0) size 180.25x20 @@ -291,6 +291,6 @@ layer at (20,270) size 1x1 LayoutBlockFlow {SPAN} at (0,14) size 1x1 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,410) size 1x1 +layer at (216,122) size 1x1 LayoutBlockFlow {SPAN} at (0,14) size 1x1 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-block-flow-images-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-block-flow-images-expected.txt index 8aeccd7..80f1cc90 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-block-flow-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-block-flow-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,52) size 769x800 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x800 -layer at (8,52) size 180x3621 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (8,52) size 180x3621 backgroundClip at (0,0) size 196x585 clip at (0,0) size 196x585 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x3621 LayoutBlockFlow {DIV} at (0,16) size 180.25x401 LayoutBlockFlow {P} at (0,0) size 180.25x20 @@ -353,11 +353,11 @@ LayoutBlockFlow {SPAN} at (0,0) size 50x50 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (8,928) size 25x25 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 +layer at (204,128) size 25x25 clip at (205,129) size 23x23 LayoutBlockFlow {SPAN} at (0,0) size 25x25 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (8,993) size 50x50 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 +layer at (204,193) size 50x50 clip at (205,194) size 48x48 LayoutBlockFlow {SPAN} at (0,0) size 50x50 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/rendering-broken-images-empty-alt-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-images-empty-alt-expected.txt similarity index 89% rename from third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/rendering-broken-images-empty-alt-expected.txt rename to third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-images-empty-alt-expected.txt index bcdc326..5648567e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/rendering-broken-images-empty-alt-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-images-empty-alt-expected.txt
@@ -4,18 +4,18 @@ LayoutBlockFlow {HTML} at (0,0) size 785x860 LayoutBlockFlow {BODY} at (8,16) size 769x836 LayoutBlockFlow {P} at (0,0) size 769x20 - LayoutText {#text} at (0,0) size 304x19 - text run at (0,0) width 304: "crbug.com/644802: Render alt text per html5 spec" + LayoutText {#text} at (0,0) size 315x19 + text run at (0,0) width 315: "crbug.com/644802: Render alt text per html5 spec" layer at (8,52) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x408 -layer at (8,52) size 180x1632 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,52) size 180x1632 backgroundClip at (0,0) size 196x460 clip at (0,0) size 196x460 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1632 LayoutBlockFlow {DIV} at (0,16) size 180.25x156 LayoutBlockFlow {P} at (0,0) size 180.25x40 - LayoutText {#text} at (0,0) size 167x39 - text run at (0,0) width 167: "Different dimensions, empty" - text run at (0,20) width 40: "alt text" + LayoutText {#text} at (0,0) size 179x39 + text run at (0,0) width 179: "Different dimensions, empty" + text run at (0,20) width 42: "alt text" LayoutBlockFlow (anonymous) at (0,56) size 180.25x100 LayoutText {#text} at (0,0) size 12x19 text run at (0,0) width 12: "1." @@ -49,10 +49,10 @@ LayoutText {#text} at (0,0) size 0x0 LayoutBlockFlow {DIV} at (0,188) size 180.25x156 LayoutBlockFlow {P} at (0,0) size 180.25x40 - LayoutText {#text} at (0,0) size 167x39 - text run at (0,0) width 167: "Different dimensions, empty" - text run at (0,20) width 48: "alt text, " - text run at (48,20) width 45: "src = \"\"" + LayoutText {#text} at (0,0) size 179x39 + text run at (0,0) width 179: "Different dimensions, empty" + text run at (0,20) width 50: "alt text, " + text run at (50,20) width 49: "src = \"\"" LayoutBlockFlow (anonymous) at (0,56) size 180.25x100 LayoutText {#text} at (0,0) size 12x19 text run at (0,0) width 12: "1." @@ -86,9 +86,9 @@ LayoutBR {BR} at (12,80) size 0x19 LayoutBlockFlow {DIV} at (0,408) size 180.25x236 LayoutBlockFlow {P} at (0,0) size 180.25x40 - LayoutText {#text} at (0,0) size 167x39 - text run at (0,0) width 167: "Different dimensions, empty" - text run at (0,20) width 85: "alt text, no src" + LayoutText {#text} at (0,0) size 179x39 + text run at (0,0) width 179: "Different dimensions, empty" + text run at (0,20) width 88: "alt text, no src" LayoutBlockFlow (anonymous) at (0,56) size 180.25x180 LayoutText {#text} at (0,10) size 12x19 text run at (0,10) width 12: "1." @@ -120,10 +120,10 @@ LayoutText {#text} at (0,0) size 0x0 LayoutBlockFlow {DIV} at (0,660) size 180.25x156 LayoutBlockFlow {P} at (0,0) size 180.25x40 - LayoutText {#text} at (0,0) size 167x39 - text run at (0,0) width 167: "Different dimensions, empty" - text run at (0,20) width 48: "alt text, " - text run at (48,20) width 31: "src =" + LayoutText {#text} at (0,0) size 179x39 + text run at (0,0) width 179: "Different dimensions, empty" + text run at (0,20) width 50: "alt text, " + text run at (50,20) width 31: "src =" LayoutBlockFlow (anonymous) at (0,56) size 180.25x100 LayoutText {#text} at (0,0) size 12x19 text run at (0,0) width 12: "1." @@ -167,9 +167,9 @@ LayoutBR {BR} at (16,80) size 0x19 LayoutBlockFlow {DIV} at (0,816) size 180.25x156 LayoutBlockFlow {P} at (0,0) size 180.25x40 - LayoutText {#text} at (0,0) size 163x39 - text run at (0,0) width 163: "Different dimensions, no alt" - text run at (0,20) width 22: "text" + LayoutText {#text} at (0,0) size 175x39 + text run at (0,0) width 175: "Different dimensions, no alt" + text run at (0,20) width 23: "text" LayoutBlockFlow (anonymous) at (0,56) size 180.25x100 LayoutText {#text} at (0,0) size 12x19 text run at (0,0) width 12: "1." @@ -203,10 +203,10 @@ LayoutText {#text} at (0,0) size 0x0 LayoutBlockFlow {DIV} at (0,988) size 180.25x156 LayoutBlockFlow {P} at (0,0) size 180.25x40 - LayoutText {#text} at (0,0) size 163x39 - text run at (0,0) width 163: "Different dimensions, no alt" - text run at (0,20) width 30: "text, " - text run at (30,20) width 45: "src = \"\"" + LayoutText {#text} at (0,0) size 175x39 + text run at (0,0) width 175: "Different dimensions, no alt" + text run at (0,20) width 31: "text, " + text run at (31,20) width 49: "src = \"\"" LayoutBlockFlow (anonymous) at (0,56) size 180.25x100 LayoutText {#text} at (0,0) size 12x19 text run at (0,0) width 12: "1." @@ -240,9 +240,9 @@ LayoutBR {BR} at (12,80) size 0x19 LayoutBlockFlow {DIV} at (0,1224) size 180.25x236 LayoutBlockFlow {P} at (0,0) size 180.25x40 - LayoutText {#text} at (0,0) size 163x39 - text run at (0,0) width 163: "Different dimensions, no alt" - text run at (0,20) width 67: "text, no src" + LayoutText {#text} at (0,0) size 175x39 + text run at (0,0) width 175: "Different dimensions, no alt" + text run at (0,20) width 69: "text, no src" LayoutBlockFlow (anonymous) at (0,56) size 180.25x180 LayoutText {#text} at (0,10) size 12x19 text run at (0,10) width 12: "1." @@ -274,10 +274,10 @@ LayoutText {#text} at (0,0) size 0x0 LayoutBlockFlow {DIV} at (0,1476) size 180.25x156 LayoutBlockFlow {P} at (0,0) size 180.25x40 - LayoutText {#text} at (0,0) size 163x39 - text run at (0,0) width 163: "Different dimensions, no alt" - text run at (0,20) width 30: "text, " - text run at (30,20) width 31: "src =" + LayoutText {#text} at (0,0) size 175x39 + text run at (0,0) width 175: "Different dimensions, no alt" + text run at (0,20) width 31: "text, " + text run at (31,20) width 31: "src =" LayoutBlockFlow (anonymous) at (0,56) size 180.25x100 LayoutText {#text} at (0,0) size 12x19 text run at (0,0) width 12: "1."
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-images-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-images-expected.txt index 1896a55..bc8767d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,52) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x408 -layer at (8,52) size 180x1552 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,52) size 180x1552 backgroundClip at (0,0) size 196x460 clip at (0,0) size 196x460 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1552 LayoutBlockFlow {DIV} at (0,16) size 180.25x136 LayoutBlockFlow {P} at (0,0) size 180.25x20 @@ -354,11 +354,11 @@ LayoutBlockFlow {SPAN} at (0,0) size 50x50 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,516) size 25x25 clip at (21,517) size 23x23 +layer at (216,108) size 25x25 clip at (217,109) size 23x23 LayoutBlockFlow {SPAN} at (0,0) size 25x25 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,546) size 50x50 clip at (21,547) size 48x48 +layer at (216,138) size 50x50 clip at (217,139) size 48x48 LayoutBlockFlow {SPAN} at (0,0) size 50x50 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-0px-images-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-0px-images-expected.txt index 77e1b1c..8b03aac 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-0px-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-0px-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,52) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x288 -layer at (8,52) size 180x1000 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,52) size 180x1000 backgroundClip at (0,0) size 196x340 clip at (0,0) size 196x340 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1000 LayoutBlockFlow {DIV} at (0,16) size 180.25x116 LayoutBlockFlow {P} at (0,0) size 180.25x20 @@ -291,6 +291,6 @@ layer at (20,271) size 0x0 LayoutBlockFlow {SPAN} at (0,15) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,411) size 0x0 +layer at (216,123) size 0x0 LayoutBlockFlow {SPAN} at (0,15) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-0px-images-quirk-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-0px-images-quirk-expected.txt index cddc383..3965595 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-0px-images-quirk-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-0px-images-quirk-expected.txt
@@ -9,7 +9,7 @@ layer at (8,44) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x288 -layer at (8,44) size 180x1000 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,44) size 180x1000 backgroundClip at (0,0) size 196x332 clip at (0,0) size 196x332 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1000 LayoutBlockFlow {DIV} at (0,16) size 180.25x116 LayoutBlockFlow {P} at (0,0) size 180.25x20 @@ -245,64 +245,64 @@ layer at (20,303) size 0x0 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,403) size 0x0 +layer at (216,115) size 0x0 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,423) size 0x0 +layer at (216,135) size 0x0 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,443) size 0x0 +layer at (216,155) size 0x0 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,691) size 0x0 scrollWidth 23 scrollHeight 40 +layer at (413,115) size 0x0 scrollWidth 23 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 23x39 LayoutText {#text} at (0,0) size 23x39 text run at (0,0) width 15: "alt" text run at (0,20) width 23: "text" -layer at (20,711) size 0x0 scrollWidth 23 scrollHeight 40 +layer at (413,135) size 0x0 scrollWidth 23 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 23x39 LayoutText {#text} at (0,0) size 23x39 text run at (0,0) width 15: "alt" text run at (0,20) width 23: "text" -layer at (20,731) size 0x0 scrollWidth 23 scrollHeight 40 +layer at (413,155) size 0x0 scrollWidth 23 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 23x39 LayoutText {#text} at (0,0) size 23x39 text run at (0,0) width 15: "alt" text run at (0,20) width 23: "text" -layer at (20,843) size 0x0 scrollWidth 23 scrollHeight 40 +layer at (413,267) size 0x0 scrollWidth 23 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 23x39 LayoutText {#text} at (0,0) size 23x39 text run at (0,0) width 15: "alt" text run at (0,20) width 23: "text" -layer at (20,863) size 0x0 scrollWidth 23 scrollHeight 40 +layer at (413,287) size 0x0 scrollWidth 23 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 23x39 LayoutText {#text} at (0,0) size 23x39 text run at (0,0) width 15: "alt" text run at (0,20) width 23: "text" -layer at (20,883) size 0x0 scrollWidth 23 scrollHeight 40 +layer at (413,307) size 0x0 scrollWidth 23 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 23x39 LayoutText {#text} at (0,0) size 23x39 text run at (0,0) width 15: "alt" text run at (0,20) width 23: "text" -layer at (20,979) size 0x0 scrollWidth 23 scrollHeight 40 +layer at (609,115) size 0x0 scrollWidth 23 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 23x39 LayoutText {#text} at (0,0) size 23x39 text run at (0,0) width 15: "alt" text run at (0,20) width 23: "text" -layer at (20,999) size 0x0 scrollWidth 23 scrollHeight 40 +layer at (609,135) size 0x0 scrollWidth 23 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 23x39 LayoutText {#text} at (0,0) size 23x39 text run at (0,0) width 15: "alt" text run at (0,20) width 23: "text" -layer at (20,1019) size 0x0 scrollWidth 23 scrollHeight 40 +layer at (609,155) size 0x0 scrollWidth 23 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 23x39 LayoutText {#text} at (0,0) size 23x39
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-10px-images-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-10px-images-expected.txt index b1a0851..75a7039 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-10px-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-10px-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,52) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x288 -layer at (8,52) size 180x1000 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,52) size 180x1000 backgroundClip at (0,0) size 196x340 clip at (0,0) size 196x340 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1000 LayoutBlockFlow {DIV} at (0,16) size 180.25x116 LayoutBlockFlow {P} at (0,0) size 180.25x20 @@ -291,6 +291,6 @@ layer at (20,261) size 10x10 LayoutBlockFlow {SPAN} at (0,5) size 10x10 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,401) size 10x10 +layer at (216,113) size 10x10 LayoutBlockFlow {SPAN} at (0,5) size 10x10 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-16px-images-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-16px-images-expected.txt index 166e55be..fb774c4 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-16px-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-16px-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,52) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x290 -layer at (8,52) size 180x1158 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,52) size 180x1158 backgroundClip at (0,0) size 196x342 clip at (0,0) size 196x342 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1158 LayoutBlockFlow {DIV} at (0,16) size 180.25x116 LayoutBlockFlow {P} at (0,0) size 180.25x20 @@ -291,6 +291,6 @@ layer at (20,256) size 16x16 LayoutBlockFlow {SPAN} at (0,0) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,398) size 16x16 +layer at (216,108) size 16x16 LayoutBlockFlow {SPAN} at (0,0) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-1px-images-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-1px-images-expected.txt index 44d10d1..cd2ab0e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-1px-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-1px-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,52) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x288 -layer at (8,52) size 180x1000 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,52) size 180x1000 backgroundClip at (0,0) size 196x340 clip at (0,0) size 196x340 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1000 LayoutBlockFlow {DIV} at (0,16) size 180.25x116 LayoutBlockFlow {P} at (0,0) size 180.25x20 @@ -291,6 +291,6 @@ layer at (20,270) size 1x1 LayoutBlockFlow {SPAN} at (0,14) size 1x1 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,410) size 1x1 +layer at (216,122) size 1x1 LayoutBlockFlow {SPAN} at (0,14) size 1x1 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-block-flow-images-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-block-flow-images-expected.txt index 8aeccd7..80f1cc90 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-block-flow-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-block-flow-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,52) size 769x800 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x800 -layer at (8,52) size 180x3621 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (8,52) size 180x3621 backgroundClip at (0,0) size 196x585 clip at (0,0) size 196x585 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x3621 LayoutBlockFlow {DIV} at (0,16) size 180.25x401 LayoutBlockFlow {P} at (0,0) size 180.25x20 @@ -353,11 +353,11 @@ LayoutBlockFlow {SPAN} at (0,0) size 50x50 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (8,928) size 25x25 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 +layer at (204,128) size 25x25 clip at (205,129) size 23x23 LayoutBlockFlow {SPAN} at (0,0) size 25x25 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (8,993) size 50x50 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 +layer at (204,193) size 50x50 clip at (205,194) size 48x48 LayoutBlockFlow {SPAN} at (0,0) size 50x50 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-images-empty-alt-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-images-empty-alt-expected.txt index a930c75..5648567e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-images-empty-alt-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-images-empty-alt-expected.txt
@@ -9,7 +9,7 @@ layer at (8,52) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x408 -layer at (8,52) size 180x1632 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,52) size 180x1632 backgroundClip at (0,0) size 196x460 clip at (0,0) size 196x460 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1632 LayoutBlockFlow {DIV} at (0,16) size 180.25x156 LayoutBlockFlow {P} at (0,0) size 180.25x40
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-images-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-images-expected.txt index 1896a55..bc8767d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/rendering-broken-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,52) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x408 -layer at (8,52) size 180x1552 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,52) size 180x1552 backgroundClip at (0,0) size 196x460 clip at (0,0) size 196x460 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1552 LayoutBlockFlow {DIV} at (0,16) size 180.25x136 LayoutBlockFlow {P} at (0,0) size 180.25x20 @@ -354,11 +354,11 @@ LayoutBlockFlow {SPAN} at (0,0) size 50x50 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,516) size 25x25 clip at (21,517) size 23x23 +layer at (216,108) size 25x25 clip at (217,109) size 23x23 LayoutBlockFlow {SPAN} at (0,0) size 25x25 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,546) size 50x50 clip at (21,547) size 48x48 +layer at (216,138) size 50x50 clip at (217,139) size 48x48 LayoutBlockFlow {SPAN} at (0,0) size 50x50 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-mask-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-mask-expected.txt index 082a57ef..c7afb2a3 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-mask-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-mask-expected.txt
@@ -10,11 +10,11 @@ LayoutBlockFlow (positioned) {DIV} at (8,52) size 0x0 layer at (8,52) size 208x208 clip at (12,56) size 200x200 scrollWidth 500 scrollHeight 500 LayoutBlockFlow (positioned) {DIV} at (0,0) size 208x208 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (12,56) size 500x500 backgroundClip at (12,56) size 200x200 clip at (12,56) size 200x200 +layer at (12,56) size 500x500 backgroundClip at (16,56) size 400x200 clip at (16,56) size 400x200 LayoutBlockFlow (positioned) {DIV} at (4,4) size 500x500 [bgcolor=#000000] layer at (8,300) size 0x0 LayoutBlockFlow (positioned) {DIV} at (8,300) size 0x0 layer at (8,300) size 208x208 clip at (12,304) size 200x200 scrollWidth 500 scrollHeight 500 LayoutBlockFlow (positioned) {DIV} at (0,0) size 208x208 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (12,304) size 500x500 backgroundClip at (12,304) size 200x200 clip at (12,304) size 200x200 +layer at (12,304) size 500x500 backgroundClip at (16,304) size 400x200 clip at (16,304) size 400x200 LayoutBlockFlow (positioned) {DIV} at (4,4) size 500x500 [bgcolor=#000000]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/tiled-mask-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/tiled-mask-expected.txt index 736a9f84..fcb1af4 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/tiled-mask-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/tiled-mask-expected.txt
@@ -5,24 +5,24 @@ LayoutBlockFlow {BODY} at (8,8) size 769x808 layer at (8,8) size 808x808 backgroundClip at (8,8) size 777x577 clip at (12,12) size 773x573 scrollWidth 2000 scrollHeight 2000 LayoutBlockFlow {DIV} at (0,0) size 808x808 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (12,12) size 2000x2000 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (12,12) size 2000x2000 backgroundClip at (12,12) size 773x573 clip at (12,12) size 773x573 LayoutBlockFlow (positioned) {DIV} at (4,4) size 2000x2000 [bgcolor=#FFEFD5] LayoutText {#text} at (0,0) size 125x19 text run at (0,0) width 125: "There's stuff in here" layer at (12,12) size 50x50 LayoutBlockFlow (positioned) {DIV} at (4,4) size 50x50 [bgcolor=#800000] -layer at (12,712) size 100x100 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (12,712) size 100x100 backgroundClip at (12,12) size 773x573 clip at (12,12) size 773x573 LayoutBlockFlow (positioned) {DIV} at (4,704) size 100x100 [bgcolor=#FFA500] -layer at (-48,82) size 100x100 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (-48,82) size 100x100 backgroundClip at (12,12) size 773x573 clip at (12,12) size 773x573 LayoutBlockFlow (positioned) {DIV} at (-56,74) size 100x100 [bgcolor=#008000] -layer at (132,712) size 100x100 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (132,712) size 100x100 backgroundClip at (12,12) size 773x573 clip at (12,12) size 773x573 LayoutBlockFlow (positioned) {DIV} at (124,704) size 100x100 [bgcolor=#0000FF] -layer at (762,12) size 100x100 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (762,12) size 100x100 backgroundClip at (12,12) size 773x573 clip at (12,12) size 773x573 LayoutBlockFlow (positioned) {DIV} at (754,4) size 100x100 [bgcolor=#FFFF00] layer at (92,312) size 100x100 LayoutBlockFlow (positioned) {DIV} at (84,304) size 100x100 layer at (32,412) size 100x100 LayoutBlockFlow (positioned) {DIV} at (24,404) size 100x100 [bgcolor=#FF0000] -layer at (762,762) size 50x50 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (762,762) size 50x50 backgroundClip at (12,12) size 773x573 clip at (12,12) size 773x573 LayoutBlockFlow (positioned) {DIV} at (754,754) size 50x50 [bgcolor=#800080] scrolled to 31,239
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/printing/absolute-position-headers-and-footers-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/printing/absolute-position-headers-and-footers-expected.txt new file mode 100644 index 0000000..01a0487 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/printing/absolute-position-headers-and-footers-expected.txt
@@ -0,0 +1,243 @@ +layer at (0,0) size 1046x799 scrollHeight 2685 + LayoutView at (0,0) size 1046x799 +layer at (0,0) size 1046x2685 backgroundClip at (0,0) size 1046x799 clip at (0,0) size 1046x799 + LayoutBlockFlow {HTML} at (0,0) size 1046x2685 + LayoutBlockFlow {BODY} at (8,16) size 1030x2653 + LayoutBlockFlow {P} at (0,0) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,36) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,72) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,108) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,144) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,180) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,216) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,252) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,288) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,324) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,360) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,396) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,432) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,468) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,504) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,540) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,576) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,612) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,648) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,684) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,720) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,756) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,783) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,819) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,855) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,891) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,927) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,963) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,999) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1035) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1071) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1107) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1143) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1179) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1215) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1251) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1287) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1323) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1359) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1395) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1431) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1467) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1503) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1539) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1582) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1618) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1654) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1690) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1726) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1762) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1798) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1834) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1870) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1906) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1942) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1978) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2014) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2050) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2086) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2122) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2158) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2194) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2230) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2266) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2302) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2338) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2381) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2417) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2453) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2489) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2525) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2561) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2597) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2633) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" +layer at (8,0) size 606x38 + LayoutBlockFlow (positioned) {DIV} at (8,0) size 606x38 + LayoutBlockFlow {DIV} at (0,0) size 606x30 + LayoutBlockFlow (anonymous) at (0,0) size 606x20 + LayoutText {#text} at (0,0) size 606x19 + text run at (0,0) width 606: "crbug.com/303728: Header Line is absolute positioned so should not be repeated on every page." +layer at (8,28) size 606x2 clip at (0,0) size 0x0 + LayoutBlockFlow {HR} at (0,28) size 606x2 [border: (1px inset #EEEEEE)] +layer at (8,761) size 601x38 + LayoutBlockFlow (positioned) {DIV} at (8,761) size 601x38 + LayoutBlockFlow {DIV} at (0,8) size 601x30 + LayoutBlockFlow (anonymous) at (0,10) size 601x20 + LayoutText {#text} at (0,0) size 601x19 + text run at (0,0) width 601: "crbug.com/303728: Footer Line is absolute positioned so should not be repeated on every page." +layer at (8,769) size 601x2 clip at (0,0) size 0x0 + LayoutBlockFlow {HR} at (0,0) size 601x2 [border: (1px inset #EEEEEE)]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/printing/fixed-positioned-but-static-headers-and-footers-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/printing/fixed-positioned-but-static-headers-and-footers-expected.txt new file mode 100644 index 0000000..5753a61 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/printing/fixed-positioned-but-static-headers-and-footers-expected.txt
@@ -0,0 +1,243 @@ +layer at (0,0) size 1046x799 scrollHeight 2685 + LayoutView at (0,0) size 1046x799 +layer at (0,0) size 1046x2685 backgroundClip at (0,0) size 1046x799 clip at (0,0) size 1046x799 + LayoutBlockFlow {HTML} at (0,0) size 1046x2685 + LayoutBlockFlow {BODY} at (8,16) size 1030x2653 + LayoutBlockFlow {P} at (0,0) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,36) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,72) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,108) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,144) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,180) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,216) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,252) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,288) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,324) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,360) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,396) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,432) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,468) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,504) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,540) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,576) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,612) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,648) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,684) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,720) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,756) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,783) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,819) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,855) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,891) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,927) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,963) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,999) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1035) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1071) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1107) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1143) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1179) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1215) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1251) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1287) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1323) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1359) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1395) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1431) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1467) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1503) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1539) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1582) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1618) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1654) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1690) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1726) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1762) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1798) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1834) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1870) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1906) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1942) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1978) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2014) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2050) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2086) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2122) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2158) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2194) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2230) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2266) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2302) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2338) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2381) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2417) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2453) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2489) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2525) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2561) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2597) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2633) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" +layer at (8,16) size 667x38 + LayoutBlockFlow (positioned) {DIV} at (8,16) size 667x38 + LayoutBlockFlow {DIV} at (0,0) size 667x30 + LayoutBlockFlow (anonymous) at (0,0) size 667x20 + LayoutText {#text} at (0,0) size 667x19 + text run at (0,0) width 667: "crbug.com/303728: Fixed-position header Line is statically positioned and will be repeated on every page." +layer at (8,44) size 667x2 clip at (0,0) size 0x0 + LayoutBlockFlow {HR} at (0,28) size 667x2 [border: (1px inset #EEEEEE)] +layer at (8,2685) size 613x38 backgroundClip at (0,0) size 1046x799 clip at (0,0) size 1046x799 + LayoutBlockFlow (positioned) {DIV} at (8,2685) size 613x38 + LayoutBlockFlow {DIV} at (0,8) size 613x30 + LayoutBlockFlow (anonymous) at (0,10) size 613x20 + LayoutText {#text} at (0,0) size 613x19 + text run at (0,0) width 613: "crbug.com/303728: Footer Line is statically positioned and should not be repeated on every page." +layer at (8,2693) size 613x2 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 + LayoutBlockFlow {HR} at (0,0) size 613x2 [border: (1px inset #EEEEEE)]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/printing/fixed-positioned-headers-and-footers-absolute-covering-some-pages-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/printing/fixed-positioned-headers-and-footers-absolute-covering-some-pages-expected.txt new file mode 100644 index 0000000..f001a86 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/printing/fixed-positioned-headers-and-footers-absolute-covering-some-pages-expected.txt
@@ -0,0 +1,19 @@ +layer at (0,0) size 1046x799 scrollHeight 5016 + LayoutView at (0,0) size 1046x799 +layer at (0,0) size 1046x5016 backgroundClip at (0,0) size 1046x799 clip at (0,0) size 1046x799 + LayoutBlockFlow {HTML} at (0,0) size 1046x5016 + LayoutBlockFlow {BODY} at (8,8) size 1030x5000 + LayoutBlockFlow {DIV} at (0,0) size 1030x5000 +layer at (0,0) size 510x68 + LayoutBlockFlow (positioned) {DIV} at (0,0) size 510x68 [border: (5px solid #000000)] + LayoutBlockFlow {DIV} at (5,5) size 500x50 + LayoutBlockFlow (anonymous) at (0,0) size 500x40 + LayoutText {#text} at (0,0) size 466x39 + text run at (0,0) width 466: "crbug.com/303728: Header Line should be repeated on every page except" + text run at (0,20) width 377: "where it's clipped by the absolute element on pages 3 and 4." +layer at (5,53) size 500x2 clip at (0,0) size 0x0 + LayoutBlockFlow {HR} at (0,48) size 500x2 [border: (1px inset #EEEEEE)] +layer at (0,1000) size 600x2000 backgroundClip at (0,0) size 1046x799 clip at (0,0) size 1046x799 + LayoutBlockFlow (positioned) zI: 2 {DIV} at (0,1000) size 600x2000 [bgcolor=#000000] + LayoutText zI: 2 {#text} at (0,0) size 57x19 + text run at (0,0) width 57: "Absolute"
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/printing/fixed-positioned-headers-and-footers-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/printing/fixed-positioned-headers-and-footers-expected.txt new file mode 100644 index 0000000..36751ff --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/printing/fixed-positioned-headers-and-footers-expected.txt
@@ -0,0 +1,243 @@ +layer at (0,0) size 1046x799 scrollHeight 2685 + LayoutView at (0,0) size 1046x799 +layer at (0,0) size 1046x2685 backgroundClip at (0,0) size 1046x799 clip at (0,0) size 1046x799 + LayoutBlockFlow {HTML} at (0,0) size 1046x2685 + LayoutBlockFlow {BODY} at (8,16) size 1030x2653 + LayoutBlockFlow {P} at (0,0) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,36) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,72) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,108) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,144) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,180) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,216) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,252) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,288) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,324) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,360) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,396) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,432) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,468) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,504) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,540) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,576) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,612) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,648) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,684) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,720) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,756) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,783) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,819) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,855) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,891) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,927) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,963) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,999) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1035) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1071) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1107) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1143) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1179) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1215) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1251) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1287) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1323) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1359) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1395) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1431) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1467) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1503) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1539) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1582) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1618) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1654) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1690) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1726) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1762) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1798) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1834) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1870) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1906) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1942) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1978) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2014) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2050) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2086) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2122) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2158) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2194) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2230) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2266) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2302) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2338) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2381) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2417) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2453) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2489) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2525) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2561) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2597) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2633) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" +layer at (8,0) size 516x38 + LayoutBlockFlow (positioned) {DIV} at (8,0) size 516x38 + LayoutBlockFlow {DIV} at (0,0) size 516x30 + LayoutBlockFlow (anonymous) at (0,0) size 516x20 + LayoutText {#text} at (0,0) size 516x19 + text run at (0,0) width 516: "crbug.com/303728: Fixed-position header Line should be repeated on every page." +layer at (8,28) size 516x2 clip at (0,0) size 0x0 + LayoutBlockFlow {HR} at (0,28) size 516x2 [border: (1px inset #EEEEEE)] +layer at (8,761) size 420x38 + LayoutBlockFlow (positioned) {DIV} at (8,761) size 420x38 + LayoutBlockFlow {DIV} at (0,8) size 420x30 + LayoutBlockFlow (anonymous) at (0,10) size 420x20 + LayoutText {#text} at (0,0) size 420x19 + text run at (0,0) width 420: "crbug.com/303728: Footer Line should be repeated on every page." +layer at (8,769) size 420x2 clip at (0,0) size 0x0 + LayoutBlockFlow {HR} at (0,0) size 420x2 [border: (1px inset #EEEEEE)]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/printing/fixed-positioned-headers-and-footers-inside-transform-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/printing/fixed-positioned-headers-and-footers-inside-transform-expected.txt new file mode 100644 index 0000000..fc91a85 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/printing/fixed-positioned-headers-and-footers-inside-transform-expected.txt
@@ -0,0 +1,247 @@ +layer at (0,0) size 1046x799 scrollHeight 2685 + LayoutView at (0,0) size 1046x799 +layer at (0,0) size 1046x2685 backgroundClip at (0,0) size 1046x799 clip at (0,0) size 1046x799 + LayoutBlockFlow {HTML} at (0,0) size 1046x2685 + LayoutBlockFlow {BODY} at (8,16) size 1030x2653 + LayoutBlockFlow {P} at (0,0) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,36) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,72) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,108) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,144) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,180) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,216) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,252) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,288) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,324) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,360) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,396) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,432) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,468) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,504) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,540) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,576) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,612) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,648) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,684) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,720) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,756) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,783) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,819) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,855) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,891) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,927) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,963) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,999) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1035) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1071) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1107) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1143) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1179) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1215) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1251) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1287) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1323) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1359) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1395) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1431) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1467) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1503) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1539) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1582) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1618) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1654) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1690) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1726) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1762) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1798) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1834) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1870) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1906) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1942) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1978) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2014) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2050) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2086) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2122) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2158) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2194) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2230) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2266) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2302) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2338) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2381) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2417) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2453) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2489) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2525) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2561) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2597) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2633) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" +layer at (8,16) size 1030x0 + LayoutBlockFlow {DIV} at (0,0) size 1030x0 +layer at (8,16) size 449x38 + LayoutBlockFlow (positioned) {DIV} at (0,0) size 449x38 + LayoutBlockFlow {DIV} at (0,0) size 449x30 + LayoutBlockFlow (anonymous) at (0,0) size 449x20 + LayoutText {#text} at (0,0) size 449x19 + text run at (0,0) width 449: "crbug.com/303728: Header Line should not be repeated on every page." +layer at (8,44) size 449x2 clip at (0,0) size 0x0 + LayoutBlockFlow {HR} at (0,28) size 449x2 [border: (1px inset #EEEEEE)] +layer at (8,2685) size 1030x0 + LayoutBlockFlow {DIV} at (0,2669) size 1030x0 +layer at (8,2647) size 444x38 backgroundClip at (0,0) size 1046x799 clip at (0,0) size 1046x799 + LayoutBlockFlow (positioned) {DIV} at (0,-38) size 444x38 + LayoutBlockFlow {DIV} at (0,8) size 444x30 + LayoutBlockFlow (anonymous) at (0,10) size 444x20 + LayoutText {#text} at (0,0) size 444x19 + text run at (0,0) width 444: "crbug.com/303728: Footer Line should not be repeated on every page." +layer at (8,2655) size 444x2 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 + LayoutBlockFlow {HR} at (0,0) size 444x2 [border: (1px inset #EEEEEE)]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/printing/fixed-positioned-headers-and-footers-larger-than-page-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/printing/fixed-positioned-headers-and-footers-larger-than-page-expected.txt new file mode 100644 index 0000000..fb731ac --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/printing/fixed-positioned-headers-and-footers-larger-than-page-expected.txt
@@ -0,0 +1,243 @@ +layer at (0,0) size 1046x799 scrollHeight 2685 + LayoutView at (0,0) size 1046x799 +layer at (0,0) size 1046x2685 backgroundClip at (0,0) size 1046x799 clip at (0,0) size 1046x799 + LayoutBlockFlow {HTML} at (0,0) size 1046x2685 + LayoutBlockFlow {BODY} at (8,16) size 1030x2653 + LayoutBlockFlow {P} at (0,0) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,36) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,72) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,108) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,144) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,180) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,216) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,252) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,288) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,324) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,360) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,396) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,432) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,468) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,504) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,540) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,576) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,612) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,648) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,684) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,720) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,756) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,783) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,819) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,855) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,891) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,927) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,963) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,999) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1035) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1071) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1107) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1143) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1179) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1215) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1251) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1287) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1323) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1359) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1395) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1431) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1467) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1503) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1539) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1582) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1618) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1654) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1690) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1726) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1762) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1798) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1834) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1870) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1906) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1942) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,1978) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2014) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2050) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2086) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2122) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2158) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2194) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2230) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2266) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2302) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2338) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2381) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2417) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2453) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2489) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2525) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2561) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2597) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" + LayoutBlockFlow {P} at (0,2633) size 1030x20 + LayoutText {#text} at (0,0) size 66x19 + text run at (0,0) width 66: "Filler lines" +layer at (8,0) size 2010x48 backgroundClip at (0,0) size 1046x799 clip at (0,0) size 1046x799 + LayoutBlockFlow (positioned) {DIV} at (8,0) size 2010x48 [border: (5px solid #000000)] + LayoutBlockFlow {DIV} at (5,5) size 2000x30 + LayoutBlockFlow (anonymous) at (0,0) size 2000x20 + LayoutText {#text} at (0,0) size 696x19 + text run at (0,0) width 696: "crbug.com/303728: Footer Line should be repeated on every page and should be clipped because it's too wide." +layer at (13,33) size 2000x2 backgroundClip at (13,33) size 1033x2 clip at (0,0) size 0x0 + LayoutBlockFlow {HR} at (0,28) size 2000x2 [border: (1px inset #EEEEEE)] +layer at (8,751) size 2010x48 backgroundClip at (0,0) size 1046x799 clip at (0,0) size 1046x799 + LayoutBlockFlow (positioned) {DIV} at (8,751) size 2010x48 [border: (5px solid #000000)] + LayoutBlockFlow {DIV} at (5,13) size 2000x30 + LayoutBlockFlow (anonymous) at (0,10) size 2000x20 + LayoutText {#text} at (0,0) size 696x19 + text run at (0,0) width 696: "crbug.com/303728: Footer Line should be repeated on every page and should be clipped because it's too wide." +layer at (13,764) size 2000x2 backgroundClip at (13,764) size 1033x2 clip at (0,0) size 0x0 + LayoutBlockFlow {HR} at (0,0) size 2000x2 [border: (1px inset #EEEEEE)]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/printing/thead-under-multicol-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/printing/thead-under-multicol-expected.txt new file mode 100644 index 0000000..7e58de6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/printing/thead-under-multicol-expected.txt
@@ -0,0 +1,373 @@ +layer at (0,0) size 1561x1193 scrollHeight 2016 + LayoutView at (0,0) size 1561x1193 +layer at (0,0) size 1561x2016 backgroundClip at (0,0) size 1561x1193 clip at (0,0) size 1561x1193 + LayoutBlockFlow {HTML} at (0,0) size 1561x2016 + LayoutBlockFlow {BODY} at (8,8) size 1545x2000 +layer at (8,8) size 1545x2000 backgroundClip at (0,0) size 1561x1193 clip at (0,0) size 1561x1193 + LayoutBlockFlow {DIV} at (0,0) size 1545x2000 + LayoutMultiColumnSet (anonymous) at (0,0) size 1545x2000 +layer at (8,8) size 765x3840 backgroundClip at (0,0) size 781x1193 clip at (0,0) size 781x1193 + LayoutMultiColumnFlowThread (anonymous) at (0,0) size 764.50x3840 + LayoutTable {TABLE} at (0,0) size 305x3840 + LayoutTableSection {THEAD} at (0,0) size 305x31 + LayoutTableRow {TR} at (0,2) size 305x27 + LayoutTableCell {TH} at (2,2) size 99x27 [r=0 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 97x24 + text run at (1,1) width 97: "Column 1" + LayoutTableCell {TH} at (103,2) size 99x27 [r=0 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 97x24 + text run at (1,1) width 97: "Column 2" + LayoutTableCell {TH} at (204,2) size 99x27 [r=0 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 97x24 + text run at (1,1) width 97: "Column 3" + LayoutTableSection {TBODY} at (0,31) size 305x3809 + LayoutTableRow {TR} at (0,0) size 305x102 + LayoutTableCell {TD} at (2,37) size 99x27 [r=0 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 31x24 + text run at (1,1) width 31: "1-1" + LayoutTableCell {TD} at (103,37) size 99x27 [r=0 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 31x24 + text run at (1,1) width 31: "2-1" + LayoutTableCell {TD} at (204,37) size 99x27 [r=0 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 31x24 + text run at (1,1) width 31: "3-1" + LayoutTableRow {TR} at (0,104) size 305x102 + LayoutTableCell {TD} at (2,141) size 99x27 [r=1 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 31x24 + text run at (1,1) width 31: "1-2" + LayoutTableCell {TD} at (103,141) size 99x27 [r=1 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 31x24 + text run at (1,1) width 31: "2-2" + LayoutTableCell {TD} at (204,141) size 99x27 [r=1 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 31x24 + text run at (1,1) width 31: "3-2" + LayoutTableRow {TR} at (0,208) size 305x102 + LayoutTableCell {TD} at (2,245) size 99x27 [r=2 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 31x24 + text run at (1,1) width 31: "1-3" + LayoutTableCell {TD} at (103,245) size 99x27 [r=2 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 31x24 + text run at (1,1) width 31: "2-3" + LayoutTableCell {TD} at (204,245) size 99x27 [r=2 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 31x24 + text run at (1,1) width 31: "3-3" + LayoutTableRow {TR} at (0,312) size 305x102 + LayoutTableCell {TD} at (2,349) size 99x27 [r=3 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 31x24 + text run at (1,1) width 31: "1-4" + LayoutTableCell {TD} at (103,349) size 99x27 [r=3 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 31x24 + text run at (1,1) width 31: "2-4" + LayoutTableCell {TD} at (204,349) size 99x27 [r=3 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 31x24 + text run at (1,1) width 31: "3-4" + LayoutTableRow {TR} at (0,416) size 305x102 + LayoutTableCell {TD} at (2,453) size 99x27 [r=4 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 31x24 + text run at (1,1) width 31: "1-5" + LayoutTableCell {TD} at (103,453) size 99x27 [r=4 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 31x24 + text run at (1,1) width 31: "2-5" + LayoutTableCell {TD} at (204,453) size 99x27 [r=4 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 31x24 + text run at (1,1) width 31: "3-5" + LayoutTableRow {TR} at (0,520) size 305x102 + LayoutTableCell {TD} at (2,557) size 99x27 [r=5 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 31x24 + text run at (1,1) width 31: "1-6" + LayoutTableCell {TD} at (103,557) size 99x27 [r=5 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 31x24 + text run at (1,1) width 31: "2-6" + LayoutTableCell {TD} at (204,557) size 99x27 [r=5 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 31x24 + text run at (1,1) width 31: "3-6" + LayoutTableRow {TR} at (0,624) size 305x102 + LayoutTableCell {TD} at (2,661) size 99x27 [r=6 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 31x24 + text run at (1,1) width 31: "1-7" + LayoutTableCell {TD} at (103,661) size 99x27 [r=6 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 31x24 + text run at (1,1) width 31: "2-7" + LayoutTableCell {TD} at (204,661) size 99x27 [r=6 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 31x24 + text run at (1,1) width 31: "3-7" + LayoutTableRow {TR} at (0,728) size 305x102 + LayoutTableCell {TD} at (2,765) size 99x27 [r=7 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 31x24 + text run at (1,1) width 31: "1-8" + LayoutTableCell {TD} at (103,765) size 99x27 [r=7 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 31x24 + text run at (1,1) width 31: "2-8" + LayoutTableCell {TD} at (204,765) size 99x27 [r=7 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 31x24 + text run at (1,1) width 31: "3-8" + LayoutTableRow {TR} at (0,832) size 305x102 + LayoutTableCell {TD} at (2,869) size 99x27 [r=8 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 31x24 + text run at (1,1) width 31: "1-9" + LayoutTableCell {TD} at (103,869) size 99x27 [r=8 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 31x24 + text run at (1,1) width 31: "2-9" + LayoutTableCell {TD} at (204,869) size 99x27 [r=8 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 31x24 + text run at (1,1) width 31: "3-9" + LayoutTableRow {TR} at (0,936) size 305x102 + LayoutTableCell {TD} at (2,973) size 99x27 [r=9 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "1-10" + LayoutTableCell {TD} at (103,973) size 99x27 [r=9 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "2-10" + LayoutTableCell {TD} at (204,973) size 99x27 [r=9 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "3-10" + LayoutTableRow {TR} at (0,1040) size 305x102 + LayoutTableCell {TD} at (2,1077) size 99x27 [r=10 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 42x24 + text run at (1,1) width 42: "1-11" + LayoutTableCell {TD} at (103,1077) size 99x27 [r=10 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 42x24 + text run at (1,1) width 42: "2-11" + LayoutTableCell {TD} at (204,1077) size 99x27 [r=10 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 42x24 + text run at (1,1) width 42: "3-11" + LayoutTableRow {TR} at (0,1185) size 305x102 + LayoutTableCell {TD} at (2,1222) size 99x27 [r=11 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "1-12" + LayoutTableCell {TD} at (103,1222) size 99x27 [r=11 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "2-12" + LayoutTableCell {TD} at (204,1222) size 99x27 [r=11 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "3-12" + LayoutTableRow {TR} at (0,1289) size 305x102 + LayoutTableCell {TD} at (2,1326) size 99x27 [r=12 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "1-13" + LayoutTableCell {TD} at (103,1326) size 99x27 [r=12 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "2-13" + LayoutTableCell {TD} at (204,1326) size 99x27 [r=12 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "3-13" + LayoutTableRow {TR} at (0,1393) size 305x102 + LayoutTableCell {TD} at (2,1430) size 99x27 [r=13 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "1-14" + LayoutTableCell {TD} at (103,1430) size 99x27 [r=13 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "2-14" + LayoutTableCell {TD} at (204,1430) size 99x27 [r=13 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "3-14" + LayoutTableRow {TR} at (0,1497) size 305x102 + LayoutTableCell {TD} at (2,1534) size 99x27 [r=14 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "1-15" + LayoutTableCell {TD} at (103,1534) size 99x27 [r=14 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "2-15" + LayoutTableCell {TD} at (204,1534) size 99x27 [r=14 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "3-15" + LayoutTableRow {TR} at (0,1601) size 305x102 + LayoutTableCell {TD} at (2,1638) size 99x27 [r=15 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "1-16" + LayoutTableCell {TD} at (103,1638) size 99x27 [r=15 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "2-16" + LayoutTableCell {TD} at (204,1638) size 99x27 [r=15 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "3-16" + LayoutTableRow {TR} at (0,1705) size 305x102 + LayoutTableCell {TD} at (2,1742) size 99x27 [r=16 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "1-17" + LayoutTableCell {TD} at (103,1742) size 99x27 [r=16 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "2-17" + LayoutTableCell {TD} at (204,1742) size 99x27 [r=16 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "3-17" + LayoutTableRow {TR} at (0,1809) size 305x102 + LayoutTableCell {TD} at (2,1846) size 99x27 [r=17 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "1-18" + LayoutTableCell {TD} at (103,1846) size 99x27 [r=17 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "2-18" + LayoutTableCell {TD} at (204,1846) size 99x27 [r=17 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "3-18" + LayoutTableRow {TR} at (0,1913) size 305x102 + LayoutTableCell {TD} at (2,1950) size 99x27 [r=18 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "1-19" + LayoutTableCell {TD} at (103,1950) size 99x27 [r=18 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "2-19" + LayoutTableCell {TD} at (204,1950) size 99x27 [r=18 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "3-19" + LayoutTableRow {TR} at (0,2017) size 305x102 + LayoutTableCell {TD} at (2,2054) size 99x27 [r=19 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "1-20" + LayoutTableCell {TD} at (103,2054) size 99x27 [r=19 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "2-20" + LayoutTableCell {TD} at (204,2054) size 99x27 [r=19 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "3-20" + LayoutTableRow {TR} at (0,2121) size 305x102 + LayoutTableCell {TD} at (2,2158) size 99x27 [r=20 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "1-21" + LayoutTableCell {TD} at (103,2158) size 99x27 [r=20 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "2-21" + LayoutTableCell {TD} at (204,2158) size 99x27 [r=20 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "3-21" + LayoutTableRow {TR} at (0,2225) size 305x102 + LayoutTableCell {TD} at (2,2262) size 99x27 [r=21 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "1-22" + LayoutTableCell {TD} at (103,2262) size 99x27 [r=21 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "2-22" + LayoutTableCell {TD} at (204,2262) size 99x27 [r=21 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "3-22" + LayoutTableRow {TR} at (0,2370) size 305x102 + LayoutTableCell {TD} at (2,2407) size 99x27 [r=22 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "1-23" + LayoutTableCell {TD} at (103,2407) size 99x27 [r=22 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "2-23" + LayoutTableCell {TD} at (204,2407) size 99x27 [r=22 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "3-23" + LayoutTableRow {TR} at (0,2474) size 305x102 + LayoutTableCell {TD} at (2,2511) size 99x27 [r=23 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "1-24" + LayoutTableCell {TD} at (103,2511) size 99x27 [r=23 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "2-24" + LayoutTableCell {TD} at (204,2511) size 99x27 [r=23 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "3-24" + LayoutTableRow {TR} at (0,2578) size 305x102 + LayoutTableCell {TD} at (2,2615) size 99x27 [r=24 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "1-25" + LayoutTableCell {TD} at (103,2615) size 99x27 [r=24 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "2-25" + LayoutTableCell {TD} at (204,2615) size 99x27 [r=24 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "3-25" + LayoutTableRow {TR} at (0,2682) size 305x102 + LayoutTableCell {TD} at (2,2719) size 99x27 [r=25 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "1-26" + LayoutTableCell {TD} at (103,2719) size 99x27 [r=25 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "2-26" + LayoutTableCell {TD} at (204,2719) size 99x27 [r=25 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "3-26" + LayoutTableRow {TR} at (0,2786) size 305x102 + LayoutTableCell {TD} at (2,2823) size 99x27 [r=26 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "1-27" + LayoutTableCell {TD} at (103,2823) size 99x27 [r=26 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "2-27" + LayoutTableCell {TD} at (204,2823) size 99x27 [r=26 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "3-27" + LayoutTableRow {TR} at (0,2890) size 305x102 + LayoutTableCell {TD} at (2,2927) size 99x27 [r=27 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "1-28" + LayoutTableCell {TD} at (103,2927) size 99x27 [r=27 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "2-28" + LayoutTableCell {TD} at (204,2927) size 99x27 [r=27 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "3-28" + LayoutTableRow {TR} at (0,2994) size 305x102 + LayoutTableCell {TD} at (2,3031) size 99x27 [r=28 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "1-29" + LayoutTableCell {TD} at (103,3031) size 99x27 [r=28 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "2-29" + LayoutTableCell {TD} at (204,3031) size 99x27 [r=28 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "3-29" + LayoutTableRow {TR} at (0,3185) size 305x102 + LayoutTableCell {TD} at (2,3222) size 99x27 [r=29 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "1-30" + LayoutTableCell {TD} at (103,3222) size 99x27 [r=29 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "2-30" + LayoutTableCell {TD} at (204,3222) size 99x27 [r=29 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "3-30" + LayoutTableRow {TR} at (0,3289) size 305x102 + LayoutTableCell {TD} at (2,3326) size 99x27 [r=30 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "1-31" + LayoutTableCell {TD} at (103,3326) size 99x27 [r=30 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "2-31" + LayoutTableCell {TD} at (204,3326) size 99x27 [r=30 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "3-31" + LayoutTableRow {TR} at (0,3393) size 305x102 + LayoutTableCell {TD} at (2,3430) size 99x27 [r=31 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "1-32" + LayoutTableCell {TD} at (103,3430) size 99x27 [r=31 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "2-32" + LayoutTableCell {TD} at (204,3430) size 99x27 [r=31 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "3-32" + LayoutTableRow {TR} at (0,3497) size 305x102 + LayoutTableCell {TD} at (2,3534) size 99x27 [r=32 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "1-33" + LayoutTableCell {TD} at (103,3534) size 99x27 [r=32 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "2-33" + LayoutTableCell {TD} at (204,3534) size 99x27 [r=32 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "3-33" + LayoutTableRow {TR} at (0,3601) size 305x102 + LayoutTableCell {TD} at (2,3638) size 99x27 [r=33 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "1-34" + LayoutTableCell {TD} at (103,3638) size 99x27 [r=33 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "2-34" + LayoutTableCell {TD} at (204,3638) size 99x27 [r=33 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "3-34" + LayoutTableRow {TR} at (0,3705) size 305x102 + LayoutTableCell {TD} at (2,3742) size 99x27 [r=34 c=0 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "1-35" + LayoutTableCell {TD} at (103,3742) size 99x27 [r=34 c=1 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "2-35" + LayoutTableCell {TD} at (204,3742) size 99x27 [r=34 c=2 rs=1 cs=1] + LayoutText {#text} at (1,1) size 43x24 + text run at (1,1) width 43: "3-35"
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/css/input-search-padding-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/css/input-search-padding-expected.txt index 48115de8..5b38a2e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/css/input-search-padding-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/css/input-search-padding-expected.txt
@@ -20,7 +20,7 @@ LayoutBlockFlow {DIV} at (3,3) size 438x47 LayoutText {#text} at (0,0) size 379x47 text run at (0,0) width 379: "value jgq not clipped" -layer at (14,173) size 213x23 +layer at (14,173) size 213x23 backgroundClip at (14,174) size 213x21 clip at (14,174) size 213x21 LayoutBlockFlow {DIV} at (0,0) size 213x23 LayoutText {#text} at (0,0) size 121x23 text run at (0,0) width 121: "Sample Input"
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/placeholder-position-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/placeholder-position-expected.txt index 57d03ef..347fa07 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/placeholder-position-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/placeholder-position-expected.txt
@@ -140,7 +140,7 @@ LayoutBlockFlow {DIV} at (3,6) size 125x13 [color=#757575] LayoutText {#text} at (0,0) size 59x13 text run at (0,0) width 59: "placeholder" -layer at (416,236) size 125x25 +layer at (416,236) size 125x25 backgroundClip at (416,238) size 125x21 clip at (416,238) size 125x21 LayoutBlockFlow {DIV} at (3,0) size 125x25 layer at (551,242) size 125x13 LayoutBlockFlow {DIV} at (3,6) size 125x13 [color=#757575] @@ -170,11 +170,11 @@ LayoutBlockFlow {DIV} at (0,1) size 11x11 layer at (126,69) size 11x11 transparent LayoutBlockFlow {DIV} at (114,1) size 11x11 -layer at (8,283) size 131x33 clip at (10,285) size 127x29 +layer at (8,283) size 131x33 backgroundClip at (9,282) size 129x95 clip at (10,285) size 127x29 LayoutTextControl {INPUT} at (0,275) size 131x33 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] -layer at (11,300) size 125x13 backgroundClip at (27,300) size 109x13 clip at (27,300) size 109x13 +layer at (11,300) size 125x13 backgroundClip at (13,299) size 114x73 clip at (13,300) size 114x13 LayoutBlockFlow {DIV} at (3,17) size 125x13 [color=#757575] LayoutText {#text} at (0,0) size 59x13 text run at (0,0) width 59: "placeholder" -layer at (11,300) size 125x13 backgroundClip at (27,300) size 109x13 clip at (27,300) size 109x13 +layer at (11,300) size 125x13 backgroundClip at (13,299) size 114x73 clip at (13,300) size 114x13 LayoutBlockFlow {DIV} at (3,17) size 125x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/search/search-vertical-alignment-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/search/search-vertical-alignment-expected.txt index d0547c27..b7e5ef2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/search/search-vertical-alignment-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/search/search-vertical-alignment-expected.txt
@@ -42,19 +42,19 @@ LayoutBlockFlow {DIV} at (3,16) size 125x13 LayoutText {#text} at (0,0) size 21x13 text run at (0,0) width 21: "Text" -layer at (11,124) size 113x13 +layer at (11,124) size 113x13 backgroundClip at (11,125) size 113x12 clip at (11,125) size 113x12 LayoutBlockFlow {DIV} at (0,0) size 113x13 LayoutText {#text} at (0,0) size 21x13 text run at (0,0) width 21: "Text" -layer at (146,124) size 125x13 +layer at (146,124) size 125x13 backgroundClip at (146,125) size 125x12 clip at (146,125) size 125x12 LayoutBlockFlow {DIV} at (3,1.50) size 125x13 LayoutText {#text} at (0,0) size 21x13 text run at (0,0) width 21: "Text" -layer at (11,158) size 113x13 +layer at (11,158) size 113x13 backgroundClip at (11,161) size 113x8 clip at (11,161) size 113x8 LayoutBlockFlow {DIV} at (0,0) size 113x13 LayoutText {#text} at (0,0) size 21x13 text run at (0,0) width 21: "Text" -layer at (146,158) size 125x13 +layer at (146,158) size 125x13 backgroundClip at (146,161) size 125x8 clip at (146,161) size 125x8 LayoutBlockFlow {DIV} at (3,-0.50) size 125x13 LayoutText {#text} at (0,0) size 21x13 text run at (0,0) width 21: "Text" @@ -62,5 +62,5 @@ LayoutBlockFlow {DIV} at (114,1) size 11x11 layer at (125,125) size 11x11 transparent LayoutBlockFlow {DIV} at (114,1) size 11x11 -layer at (125,159) size 11x11 transparent +layer at (125,159) size 11x11 backgroundClip at (10,161) size 127x8 clip at (10,161) size 127x8 transparent LayoutBlockFlow {DIV} at (114,1) size 11x11
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/select/menulist-appearance-rtl-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/select/menulist-appearance-rtl-expected.txt index f9e5ae1..10dcfc8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/select/menulist-appearance-rtl-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/select/menulist-appearance-rtl-expected.txt
@@ -76,7 +76,7 @@ layer at (8,377) size 784x164 LayoutBlockFlow {DIV} at (0,361) size 784x164 LayoutMultiColumnSet (anonymous) at (0,0) size 784x164 -layer at (8,377) size 384x328 backgroundClip at (0,0) size 800x600 clip at (0,0) size 800x600 +layer at (8,377) size 384x328 backgroundClip at (0,0) size 400x541 clip at (0,0) size 400x541 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 384x328 LayoutBlockFlow {DIV} at (0,0) size 384x164 LayoutMenuList {SELECT} at (0,0) size 350x23 [bgcolor=#F8F8F8] [border: (1px solid #A6A6A6)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/text/text-font-height-mismatch-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/text/text-font-height-mismatch-expected.txt index f53c173..126b9ecb 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/text/text-font-height-mismatch-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/text/text-font-height-mismatch-expected.txt
@@ -21,7 +21,7 @@ LayoutBlockFlow {DIV} at (2,2) size 190x24 LayoutText {#text} at (0,0) size 74x24 text run at (0,0) width 74: "\x{3075} ABCgjy" -layer at (10,78) size 270x28 +layer at (10,78) size 270x28 backgroundClip at (10,79) size 270x26 clip at (10,79) size 270x26 LayoutBlockFlow {DIV} at (2,0) size 270x28 LayoutText {#text} at (0,0) size 82x28 text run at (0,0) width 82: "ABCgjy"
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/text/textfield-overflow-by-value-update-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/text/textfield-overflow-by-value-update-expected.txt index 98194d6e..3982fcc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/text/textfield-overflow-by-value-update-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/text/textfield-overflow-by-value-update-expected.txt
@@ -5,7 +5,7 @@ LayoutBlockFlow {BODY} at (8,8) size 784x18 LayoutTextControl {INPUT} at (0,1) size 102x2 [bgcolor=#FFFFFF] LayoutText {#text} at (0,0) size 0x0 -layer at (9,-9) size 100x38 backgroundClip at (9,0) size 100x29 clip at (9,0) size 100x29 +layer at (9,-9) size 100x38 backgroundClip at (9,9) size 100x2 clip at (9,9) size 100x2 LayoutBlockFlow {DIV} at (1,-18) size 100x38 LayoutText {#text} at (0,0) size 65x38 text run at (0,0) width 65: "FAIL"
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/input-search-padding-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/input-search-padding-expected.txt index d0ac8c87..accceac 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/input-search-padding-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/input-search-padding-expected.txt
@@ -20,7 +20,7 @@ LayoutBlockFlow {DIV} at (3,3) size 400x47 LayoutText {#text} at (0,0) size 358x47 text run at (0,0) width 358: "value jgq not clipped" -layer at (14,173) size 194x23 +layer at (14,173) size 194x23 backgroundClip at (14,174) size 194x21 clip at (14,174) size 194x21 LayoutBlockFlow {DIV} at (0,0) size 194x23 LayoutText {#text} at (0,0) size 114x23 text run at (0,0) width 114: "Sample Input"
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/forms/placeholder-position-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/forms/placeholder-position-expected.txt index 5b3127a..66963f7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/forms/placeholder-position-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/forms/placeholder-position-expected.txt
@@ -140,7 +140,7 @@ LayoutBlockFlow {DIV} at (3,6) size 125x13 [color=#757575] LayoutText {#text} at (0,0) size 62x13 text run at (0,0) width 62: "placeholder" -layer at (416,237) size 125x25 +layer at (416,237) size 125x25 backgroundClip at (416,239) size 125x21 clip at (416,239) size 125x21 LayoutBlockFlow {DIV} at (3,0) size 125x25 layer at (551,243) size 125x13 LayoutBlockFlow {DIV} at (3,6) size 125x13 [color=#757575] @@ -170,11 +170,11 @@ LayoutBlockFlow {DIV} at (0,1) size 11x11 layer at (126,69) size 11x11 transparent LayoutBlockFlow {DIV} at (114,1) size 11x11 -layer at (8,284) size 131x33 clip at (10,286) size 127x29 +layer at (8,284) size 131x33 backgroundClip at (9,283) size 129x95 clip at (10,286) size 127x29 LayoutTextControl {INPUT} at (0,276) size 131x33 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] -layer at (11,301) size 125x13 backgroundClip at (27,301) size 109x13 clip at (27,301) size 109x13 +layer at (11,301) size 125x13 backgroundClip at (13,300) size 114x73 clip at (13,301) size 114x13 LayoutBlockFlow {DIV} at (3,17) size 125x13 [color=#757575] LayoutText {#text} at (0,0) size 62x13 text run at (0,0) width 62: "placeholder" -layer at (11,301) size 125x13 backgroundClip at (27,301) size 109x13 clip at (27,301) size 109x13 +layer at (11,301) size 125x13 backgroundClip at (13,300) size 114x73 clip at (13,301) size 114x13 LayoutBlockFlow {DIV} at (3,17) size 125x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/forms/search/search-vertical-alignment-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/forms/search/search-vertical-alignment-expected.txt index 158137bb..cb3c379 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/forms/search/search-vertical-alignment-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/forms/search/search-vertical-alignment-expected.txt
@@ -42,19 +42,19 @@ LayoutBlockFlow {DIV} at (3,16) size 125x13 LayoutText {#text} at (0,0) size 22x13 text run at (0,0) width 22: "Text" -layer at (11,124) size 113x13 +layer at (11,124) size 113x13 backgroundClip at (11,125) size 113x12 clip at (11,125) size 113x12 LayoutBlockFlow {DIV} at (0,0) size 113x13 LayoutText {#text} at (0,0) size 22x13 text run at (0,0) width 22: "Text" -layer at (146,124) size 125x13 +layer at (146,124) size 125x13 backgroundClip at (146,125) size 125x12 clip at (146,125) size 125x12 LayoutBlockFlow {DIV} at (3,1.50) size 125x13 LayoutText {#text} at (0,0) size 22x13 text run at (0,0) width 22: "Text" -layer at (11,158) size 113x13 +layer at (11,158) size 113x13 backgroundClip at (11,161) size 113x8 clip at (11,161) size 113x8 LayoutBlockFlow {DIV} at (0,0) size 113x13 LayoutText {#text} at (0,0) size 22x13 text run at (0,0) width 22: "Text" -layer at (146,158) size 125x13 +layer at (146,158) size 125x13 backgroundClip at (146,161) size 125x8 clip at (146,161) size 125x8 LayoutBlockFlow {DIV} at (3,-0.50) size 125x13 LayoutText {#text} at (0,0) size 22x13 text run at (0,0) width 22: "Text" @@ -62,5 +62,5 @@ LayoutBlockFlow {DIV} at (114,1) size 11x11 layer at (125,125) size 11x11 transparent LayoutBlockFlow {DIV} at (114,1) size 11x11 -layer at (125,159) size 11x11 transparent +layer at (125,159) size 11x11 backgroundClip at (10,161) size 127x8 clip at (10,161) size 127x8 transparent LayoutBlockFlow {DIV} at (114,1) size 11x11
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/forms/select/menulist-appearance-rtl-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/forms/select/menulist-appearance-rtl-expected.txt index 649e8c08..07b59f8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/forms/select/menulist-appearance-rtl-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/forms/select/menulist-appearance-rtl-expected.txt
@@ -76,7 +76,7 @@ layer at (8,377) size 784x164 LayoutBlockFlow {DIV} at (0,361) size 784x164 LayoutMultiColumnSet (anonymous) at (0,0) size 784x164 -layer at (8,377) size 384x328 backgroundClip at (0,0) size 800x600 clip at (0,0) size 800x600 +layer at (8,377) size 384x328 backgroundClip at (0,0) size 400x541 clip at (0,0) size 400x541 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 384x328 LayoutBlockFlow {DIV} at (0,0) size 384x164 LayoutMenuList {SELECT} at (0,0) size 350x23 [bgcolor=#F8F8F8] [border: (1px solid #A6A6A6)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/forms/text/text-font-height-mismatch-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/forms/text/text-font-height-mismatch-expected.txt index 61d3c14..9cc1d60 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/forms/text/text-font-height-mismatch-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/forms/text/text-font-height-mismatch-expected.txt
@@ -21,7 +21,7 @@ LayoutBlockFlow {DIV} at (2,2) size 190x24 LayoutText {#text} at (0,0) size 74x24 text run at (0,0) width 74: "\x{3075} ABCgjy" -layer at (10,78) size 251x28 +layer at (10,78) size 251x28 backgroundClip at (10,79) size 251x26 clip at (10,79) size 251x26 LayoutBlockFlow {DIV} at (2,0) size 251x28 LayoutText {#text} at (0,0) size 78x28 text run at (0,0) width 78: "ABCgjy"
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/forms/text/textfield-overflow-by-value-update-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/forms/text/textfield-overflow-by-value-update-expected.txt index 5833f3a..ad4b82b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/forms/text/textfield-overflow-by-value-update-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/forms/text/textfield-overflow-by-value-update-expected.txt
@@ -5,7 +5,7 @@ LayoutBlockFlow {BODY} at (8,8) size 784x18 LayoutTextControl {INPUT} at (0,1) size 102x2 [bgcolor=#FFFFFF] LayoutText {#text} at (0,0) size 0x0 -layer at (9,-9) size 100x38 backgroundClip at (9,0) size 100x29 clip at (9,0) size 100x29 +layer at (9,-9) size 100x38 backgroundClip at (9,9) size 100x2 clip at (9,9) size 100x2 LayoutBlockFlow {DIV} at (1,-18) size 100x38 LayoutText {#text} at (0,0) size 60x38 text run at (0,0) width 60: "FAIL"
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/forms/text/textfield-overflow-by-value-update-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/forms/text/textfield-overflow-by-value-update-expected.txt deleted file mode 100644 index 5833f3a..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/forms/text/textfield-overflow-by-value-update-expected.txt +++ /dev/null
@@ -1,11 +0,0 @@ -layer at (0,0) size 800x600 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 800x34 - LayoutBlockFlow {HTML} at (0,0) size 800x34 - LayoutBlockFlow {BODY} at (8,8) size 784x18 - LayoutTextControl {INPUT} at (0,1) size 102x2 [bgcolor=#FFFFFF] - LayoutText {#text} at (0,0) size 0x0 -layer at (9,-9) size 100x38 backgroundClip at (9,0) size 100x29 clip at (9,0) size 100x29 - LayoutBlockFlow {DIV} at (1,-18) size 100x38 - LayoutText {#text} at (0,0) size 60x38 - text run at (0,0) width 60: "FAIL"
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/mask-with-filter-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/mask-with-filter-expected.txt similarity index 84% rename from third_party/WebKit/LayoutTests/compositing/overflow/mask-with-filter-expected.txt rename to third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/mask-with-filter-expected.txt index 61a1498..c9f1d9f3 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/mask-with-filter-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/mask-with-filter-expected.txt
@@ -8,5 +8,5 @@ LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 208x208 layer at (108,8) size 208x208 clip at (112,12) size 200x200 scrollWidth 500 scrollHeight 500 LayoutBlockFlow {DIV} at (0,0) size 208x208 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (112,12) size 500x500 backgroundClip at (112,12) size 200x200 clip at (112,12) size 200x200 +layer at (112,12) size 500x500 backgroundClip at (27,13) size 436x236 clip at (27,13) size 436x236 LayoutBlockFlow {DIV} at (4,4) size 500x500 [bgcolor=#000000]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/scaled-mask-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/scaled-mask-expected.txt index b50515e..7bed3f72 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/scaled-mask-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/scaled-mask-expected.txt
@@ -10,11 +10,11 @@ LayoutBlockFlow (positioned) {DIV} at (8,50) size 0x0 layer at (8,50) size 208x208 clip at (12,54) size 200x200 scrollWidth 500 scrollHeight 500 LayoutBlockFlow (positioned) {DIV} at (0,0) size 208x208 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (12,54) size 500x500 backgroundClip at (12,54) size 200x200 clip at (12,54) size 200x200 +layer at (12,54) size 500x500 backgroundClip at (16,54) size 400x200 clip at (16,54) size 400x200 LayoutBlockFlow (positioned) {DIV} at (4,4) size 500x500 [bgcolor=#000000] layer at (8,300) size 0x0 LayoutBlockFlow (positioned) {DIV} at (8,300) size 0x0 layer at (8,300) size 208x208 clip at (12,304) size 200x200 scrollWidth 500 scrollHeight 500 LayoutBlockFlow (positioned) {DIV} at (0,0) size 208x208 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (12,304) size 500x500 backgroundClip at (12,304) size 200x200 clip at (12,304) size 200x200 +layer at (12,304) size 500x500 backgroundClip at (16,304) size 400x200 clip at (16,304) size 400x200 LayoutBlockFlow (positioned) {DIV} at (4,4) size 500x500 [bgcolor=#000000]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/tiled-mask-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/tiled-mask-expected.txt index dd82f63..6f4f2cb 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/tiled-mask-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/tiled-mask-expected.txt
@@ -5,24 +5,24 @@ LayoutBlockFlow {BODY} at (8,8) size 769x808 layer at (8,8) size 808x808 backgroundClip at (8,8) size 777x577 clip at (12,12) size 773x573 scrollWidth 2000 scrollHeight 2000 LayoutBlockFlow {DIV} at (0,0) size 808x808 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (12,12) size 2000x2000 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (12,12) size 2000x2000 backgroundClip at (12,12) size 773x573 clip at (12,12) size 773x573 LayoutBlockFlow (positioned) {DIV} at (4,4) size 2000x2000 [bgcolor=#FFEFD5] LayoutText {#text} at (0,0) size 128x18 text run at (0,0) width 128: "There's stuff in here" layer at (12,12) size 50x50 LayoutBlockFlow (positioned) {DIV} at (4,4) size 50x50 [bgcolor=#800000] -layer at (12,712) size 100x100 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (12,712) size 100x100 backgroundClip at (12,12) size 773x573 clip at (12,12) size 773x573 LayoutBlockFlow (positioned) {DIV} at (4,704) size 100x100 [bgcolor=#FFA500] -layer at (-48,82) size 100x100 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (-48,82) size 100x100 backgroundClip at (12,12) size 773x573 clip at (12,12) size 773x573 LayoutBlockFlow (positioned) {DIV} at (-56,74) size 100x100 [bgcolor=#008000] -layer at (132,712) size 100x100 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (132,712) size 100x100 backgroundClip at (12,12) size 773x573 clip at (12,12) size 773x573 LayoutBlockFlow (positioned) {DIV} at (124,704) size 100x100 [bgcolor=#0000FF] -layer at (762,12) size 100x100 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (762,12) size 100x100 backgroundClip at (12,12) size 773x573 clip at (12,12) size 773x573 LayoutBlockFlow (positioned) {DIV} at (754,4) size 100x100 [bgcolor=#FFFF00] layer at (92,312) size 100x100 LayoutBlockFlow (positioned) {DIV} at (84,304) size 100x100 layer at (32,412) size 100x100 LayoutBlockFlow (positioned) {DIV} at (24,404) size 100x100 [bgcolor=#FF0000] -layer at (762,762) size 50x50 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (762,762) size 50x50 backgroundClip at (12,12) size 773x573 clip at (12,12) size 773x573 LayoutBlockFlow (positioned) {DIV} at (754,754) size 50x50 [bgcolor=#800080] scrolled to 31,239
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/reflections/nested-reflection-on-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/reflections/nested-reflection-on-overflow-expected.txt index d406bc0..0e486c6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/compositing/reflections/nested-reflection-on-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/reflections/nested-reflection-on-overflow-expected.txt
@@ -12,7 +12,7 @@ LayoutBlockFlow {DIV} at (11,11) size 100x100 [bgcolor=#008000] layer at (39,65) size 100x100 clip at (39,65) size 85x85 scrollHeight 500 LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 100x100 -layer at (39,65) size 85x500 backgroundClip at (39,65) size 85x85 clip at (39,65) size 85x85 +layer at (39,65) size 85x500 backgroundClip at (39,65) size 232x210 clip at (39,65) size 232x210 LayoutBlockFlow {DIV} at (0,0) size 85x500 LayoutText {#text} at (0,0) size 83x414 text run at (0,0) width 43: "Lorem"
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css/input-search-padding-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/css/input-search-padding-expected.txt index 1b1b684..f848a2d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/css/input-search-padding-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/css/input-search-padding-expected.txt
@@ -20,7 +20,7 @@ LayoutBlockFlow {DIV} at (3,3) size 400x47 LayoutText {#text} at (0,0) size 366x47 text run at (0,0) width 366: "value jgq not clipped" -layer at (14,173) size 194x23 +layer at (14,173) size 194x23 backgroundClip at (14,174) size 194x21 clip at (14,174) size 194x21 LayoutBlockFlow {DIV} at (0,0) size 194x23 LayoutText {#text} at (0,0) size 118x23 text run at (0,0) width 118: "Sample Input"
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/placeholder-position-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/placeholder-position-expected.txt index d3a59ba..d6bf290 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/placeholder-position-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/placeholder-position-expected.txt
@@ -140,7 +140,7 @@ LayoutBlockFlow {DIV} at (3,6) size 125x13 [color=#757575] LayoutText {#text} at (0,0) size 62x13 text run at (0,0) width 62: "placeholder" -layer at (416,237) size 125x25 +layer at (416,237) size 125x25 backgroundClip at (416,239) size 125x21 clip at (416,239) size 125x21 LayoutBlockFlow {DIV} at (3,0) size 125x25 layer at (551,243) size 125x13 LayoutBlockFlow {DIV} at (3,6) size 125x13 [color=#757575] @@ -170,11 +170,11 @@ LayoutBlockFlow {DIV} at (0,1) size 11x11 layer at (126,69) size 11x11 transparent LayoutBlockFlow {DIV} at (114,1) size 11x11 -layer at (8,284) size 131x33 clip at (10,286) size 127x29 +layer at (8,284) size 131x33 backgroundClip at (9,283) size 129x95 clip at (10,286) size 127x29 LayoutTextControl {INPUT} at (0,276) size 131x33 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] -layer at (11,301) size 125x13 backgroundClip at (27,301) size 109x13 clip at (27,301) size 109x13 +layer at (11,301) size 125x13 backgroundClip at (13,300) size 114x73 clip at (13,301) size 114x13 LayoutBlockFlow {DIV} at (3,17) size 125x13 [color=#757575] LayoutText {#text} at (0,0) size 62x13 text run at (0,0) width 62: "placeholder" -layer at (11,301) size 125x13 backgroundClip at (27,301) size 109x13 clip at (27,301) size 109x13 +layer at (11,301) size 125x13 backgroundClip at (13,300) size 114x73 clip at (13,301) size 114x13 LayoutBlockFlow {DIV} at (3,17) size 125x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/search/search-vertical-alignment-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/search/search-vertical-alignment-expected.txt index 6a083aa..a10d8d1 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/search/search-vertical-alignment-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/search/search-vertical-alignment-expected.txt
@@ -42,19 +42,19 @@ LayoutBlockFlow {DIV} at (3,16) size 125x13 LayoutText {#text} at (0,0) size 23x13 text run at (0,0) width 23: "Text" -layer at (11,124) size 113x13 +layer at (11,124) size 113x13 backgroundClip at (11,125) size 113x12 clip at (11,125) size 113x12 LayoutBlockFlow {DIV} at (0,0) size 113x13 LayoutText {#text} at (0,0) size 23x13 text run at (0,0) width 23: "Text" -layer at (146,124) size 125x13 +layer at (146,124) size 125x13 backgroundClip at (146,125) size 125x12 clip at (146,125) size 125x12 LayoutBlockFlow {DIV} at (3,1.50) size 125x13 LayoutText {#text} at (0,0) size 23x13 text run at (0,0) width 23: "Text" -layer at (11,158) size 113x13 +layer at (11,158) size 113x13 backgroundClip at (11,161) size 113x8 clip at (11,161) size 113x8 LayoutBlockFlow {DIV} at (0,0) size 113x13 LayoutText {#text} at (0,0) size 23x13 text run at (0,0) width 23: "Text" -layer at (146,158) size 125x13 +layer at (146,158) size 125x13 backgroundClip at (146,161) size 125x8 clip at (146,161) size 125x8 LayoutBlockFlow {DIV} at (3,-0.50) size 125x13 LayoutText {#text} at (0,0) size 23x13 text run at (0,0) width 23: "Text" @@ -62,5 +62,5 @@ LayoutBlockFlow {DIV} at (114,1) size 11x11 layer at (125,125) size 11x11 transparent LayoutBlockFlow {DIV} at (114,1) size 11x11 -layer at (125,159) size 11x11 transparent +layer at (125,159) size 11x11 backgroundClip at (10,161) size 127x8 clip at (10,161) size 127x8 transparent LayoutBlockFlow {DIV} at (114,1) size 11x11
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/select/menulist-appearance-rtl-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/select/menulist-appearance-rtl-expected.txt index d3f6de8..e1d228a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/select/menulist-appearance-rtl-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/select/menulist-appearance-rtl-expected.txt
@@ -76,7 +76,7 @@ layer at (8,377) size 784x164 LayoutBlockFlow {DIV} at (0,361) size 784x164 LayoutMultiColumnSet (anonymous) at (0,0) size 784x164 -layer at (8,377) size 384x328 backgroundClip at (0,0) size 800x600 clip at (0,0) size 800x600 +layer at (8,377) size 384x328 backgroundClip at (0,0) size 400x541 clip at (0,0) size 400x541 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 384x328 LayoutBlockFlow {DIV} at (0,0) size 384x164 LayoutMenuList {SELECT} at (0,0) size 350x23 [bgcolor=#F8F8F8] [border: (1px solid #A6A6A6)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/text/text-font-height-mismatch-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/text/text-font-height-mismatch-expected.txt index d2c49048..45b2190 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/text/text-font-height-mismatch-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/text/text-font-height-mismatch-expected.txt
@@ -21,7 +21,7 @@ LayoutBlockFlow {DIV} at (2,2) size 190x24 LayoutText {#text} at (0,0) size 74x24 text run at (0,0) width 74: "\x{3075} ABCgjy" -layer at (10,78) size 251x28 +layer at (10,78) size 251x28 backgroundClip at (10,79) size 251x26 clip at (10,79) size 251x26 LayoutBlockFlow {DIV} at (2,0) size 251x28 LayoutText {#text} at (0,0) size 80x28 text run at (0,0) width 80: "ABCgjy"
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/text/textfield-overflow-by-value-update-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/text/textfield-overflow-by-value-update-expected.txt index 2917a21..5d134b24 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/text/textfield-overflow-by-value-update-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/text/textfield-overflow-by-value-update-expected.txt
@@ -5,7 +5,7 @@ LayoutBlockFlow {BODY} at (8,8) size 784x18 LayoutTextControl {INPUT} at (0,1) size 102x2 [bgcolor=#FFFFFF] LayoutText {#text} at (0,0) size 0x0 -layer at (9,-9) size 100x38 backgroundClip at (9,0) size 100x29 clip at (9,0) size 100x29 +layer at (9,-9) size 100x38 backgroundClip at (9,9) size 100x2 clip at (9,9) size 100x2 LayoutBlockFlow {DIV} at (1,-18) size 100x38 LayoutText {#text} at (0,0) size 61x38 text run at (0,0) width 61: "FAIL"
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/text/textfield-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/text/textfield-overflow-expected.txt index 8aeae79..5c6ad2b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/text/textfield-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/text/textfield-overflow-expected.txt
@@ -5,6 +5,6 @@ LayoutBlockFlow {BODY} at (8,8) size 784x584 LayoutTextControl {INPUT} at (0,0) size 131x10 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] LayoutText {#text} at (0,0) size 0x0 -layer at (11,7) size 125x13 +layer at (11,7) size 125x13 backgroundClip at (11,10) size 125x6 clip at (11,10) size 125x6 LayoutBlockFlow {DIV} at (3,-1.50) size 125x13 caret: position 0 of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of body
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/layers/opacity-transforms-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/layers/opacity-transforms-expected.txt index 76ed926..126fc933 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/layers/opacity-transforms-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/layers/opacity-transforms-expected.txt
@@ -16,5 +16,5 @@ LayoutBlockFlow (positioned) {DIV} at (100,150) size 100x100 layer at (100,150) size 10x10 LayoutBlockFlow {DIV} at (0,0) size 10x10 -layer at (100,150) size 100x100 +layer at (150,200) size 100x100 LayoutBlockFlow (positioned) {DIV} at (0,0) size 100x100 [bgcolor=#008000]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fragmentation/transformed-clip-before-second-column-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fragmentation/transformed-clip-before-second-column-expected.txt index 8c5a888d..97365fb 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fragmentation/transformed-clip-before-second-column-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fragmentation/transformed-clip-before-second-column-expected.txt
@@ -6,15 +6,15 @@ layer at (8,8) size 784x68 LayoutBlockFlow {DIV} at (0,0) size 784x68 LayoutMultiColumnSet (anonymous) at (0,0) size 784x68 -layer at (8,8) size 384x136 +layer at (8,8) size 384x136 backgroundClip at (0,0) size 400x76 clip at (0,0) size 400x76 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 384x136 LayoutBlockFlow {DIV} at (0,0) size 384x100 -layer at (8,108) size 384x36 scrollHeight 37 +layer at (408,40) size 384x36 scrollHeight 37 LayoutBlockFlow {DIV} at (0,100) size 384x36 LayoutBlockFlow (anonymous) at (0,0) size 384x18 LayoutText {#text} at (0,0) size 318x18 text run at (0,0) width 318: "There should be a black rectangle below this text." -layer at (8,126) size 384x18 backgroundClip at (408,40) size 384x36 clip at (408,40) size 384x36 +layer at (408,58) size 384x18 LayoutBlockFlow {DIV} at (0,18) size 384x18 LayoutInline {<pseudo:before>} at (0,0) size 12x18 LayoutTextFragment (anonymous) at (0,0) size 12x18
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-0px-images-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-0px-images-expected.txt index dfc65a7b..757b6efd 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-0px-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-0px-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,50) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,34) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x268 -layer at (8,50) size 180x928 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,50) size 180x928 backgroundClip at (0,0) size 196x318 clip at (0,0) size 196x318 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x928 LayoutBlockFlow {DIV} at (0,16) size 180.25x106 LayoutBlockFlow {P} at (0,0) size 180.25x18 @@ -291,6 +291,6 @@ layer at (20,254) size 0x0 LayoutBlockFlow {SPAN} at (0,14) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,384) size 0x0 +layer at (216,116) size 0x0 LayoutBlockFlow {SPAN} at (0,14) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-0px-images-quirk-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-0px-images-quirk-expected.txt index 985e902..31f40e2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-0px-images-quirk-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-0px-images-quirk-expected.txt
@@ -9,7 +9,7 @@ layer at (8,42) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,34) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x264 -layer at (8,42) size 180x916 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,42) size 180x916 backgroundClip at (0,0) size 196x306 clip at (0,0) size 196x306 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x916 LayoutBlockFlow {DIV} at (0,16) size 180.25x106 LayoutBlockFlow {P} at (0,0) size 180.25x18 @@ -245,64 +245,64 @@ layer at (20,282) size 0x0 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,372) size 0x0 +layer at (216,108) size 0x0 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,390) size 0x0 +layer at (216,126) size 0x0 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,408) size 0x0 +layer at (216,144) size 0x0 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,636) size 0x0 scrollWidth 24 scrollHeight 36 +layer at (413,108) size 0x0 scrollWidth 24 scrollHeight 36 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 24x36 LayoutText {#text} at (0,0) size 24x36 text run at (0,0) width 16: "alt" text run at (0,18) width 24: "text" -layer at (20,654) size 0x0 scrollWidth 24 scrollHeight 36 +layer at (413,126) size 0x0 scrollWidth 24 scrollHeight 36 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 24x36 LayoutText {#text} at (0,0) size 24x36 text run at (0,0) width 16: "alt" text run at (0,18) width 24: "text" -layer at (20,672) size 0x0 scrollWidth 24 scrollHeight 36 +layer at (413,144) size 0x0 scrollWidth 24 scrollHeight 36 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 24x36 LayoutText {#text} at (0,0) size 24x36 text run at (0,0) width 16: "alt" text run at (0,18) width 24: "text" -layer at (20,776) size 0x0 scrollWidth 24 scrollHeight 36 +layer at (413,248) size 0x0 scrollWidth 24 scrollHeight 36 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 24x36 LayoutText {#text} at (0,0) size 24x36 text run at (0,0) width 16: "alt" text run at (0,18) width 24: "text" -layer at (20,794) size 0x0 scrollWidth 24 scrollHeight 36 +layer at (413,266) size 0x0 scrollWidth 24 scrollHeight 36 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 24x36 LayoutText {#text} at (0,0) size 24x36 text run at (0,0) width 16: "alt" text run at (0,18) width 24: "text" -layer at (20,812) size 0x0 scrollWidth 24 scrollHeight 36 +layer at (413,284) size 0x0 scrollWidth 24 scrollHeight 36 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 24x36 LayoutText {#text} at (0,0) size 24x36 text run at (0,0) width 16: "alt" text run at (0,18) width 24: "text" -layer at (20,900) size 0x0 scrollWidth 24 scrollHeight 36 +layer at (609,108) size 0x0 scrollWidth 24 scrollHeight 36 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 24x36 LayoutText {#text} at (0,0) size 24x36 text run at (0,0) width 16: "alt" text run at (0,18) width 24: "text" -layer at (20,918) size 0x0 scrollWidth 24 scrollHeight 36 +layer at (609,126) size 0x0 scrollWidth 24 scrollHeight 36 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 24x36 LayoutText {#text} at (0,0) size 24x36 text run at (0,0) width 16: "alt" text run at (0,18) width 24: "text" -layer at (20,936) size 0x0 scrollWidth 24 scrollHeight 36 +layer at (609,144) size 0x0 scrollWidth 24 scrollHeight 36 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 24x36 LayoutText {#text} at (0,0) size 24x36
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-10px-images-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-10px-images-expected.txt index 8deab304..e1ad5548 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-10px-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-10px-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,50) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,34) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x268 -layer at (8,50) size 180x928 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,50) size 180x928 backgroundClip at (0,0) size 196x318 clip at (0,0) size 196x318 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x928 LayoutBlockFlow {DIV} at (0,16) size 180.25x106 LayoutBlockFlow {P} at (0,0) size 180.25x18 @@ -291,6 +291,6 @@ layer at (20,244) size 10x10 LayoutBlockFlow {SPAN} at (0,4) size 10x10 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,374) size 10x10 +layer at (216,106) size 10x10 LayoutBlockFlow {SPAN} at (0,4) size 10x10 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-16px-images-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-16px-images-expected.txt index 0bd2311..0c8d6ff 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-16px-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-16px-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,50) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,34) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x270 -layer at (8,50) size 180x934 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,50) size 180x934 backgroundClip at (0,0) size 196x320 clip at (0,0) size 196x320 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x934 LayoutBlockFlow {DIV} at (0,16) size 180.25x106 LayoutBlockFlow {P} at (0,0) size 180.25x18 @@ -291,6 +291,6 @@ layer at (20,240) size 16x16 LayoutBlockFlow {SPAN} at (0,0) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,372) size 16x16 +layer at (216,102) size 16x16 LayoutBlockFlow {SPAN} at (0,0) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-1px-images-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-1px-images-expected.txt index 8f60927..dfe6d518 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-1px-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-1px-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,50) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,34) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x268 -layer at (8,50) size 180x928 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,50) size 180x928 backgroundClip at (0,0) size 196x318 clip at (0,0) size 196x318 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x928 LayoutBlockFlow {DIV} at (0,16) size 180.25x106 LayoutBlockFlow {P} at (0,0) size 180.25x18 @@ -291,6 +291,6 @@ layer at (20,253) size 1x1 LayoutBlockFlow {SPAN} at (0,13) size 1x1 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,383) size 1x1 +layer at (216,115) size 1x1 LayoutBlockFlow {SPAN} at (0,13) size 1x1 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-block-flow-images-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-block-flow-images-expected.txt index b985763..907e0d4ee 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-block-flow-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-block-flow-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,50) size 769x800 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 LayoutBlockFlow {DIV} at (0,34) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x800 -layer at (8,50) size 180x3593 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (8,50) size 180x3593 backgroundClip at (0,0) size 196x585 clip at (0,0) size 196x585 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x3593 LayoutBlockFlow {DIV} at (0,16) size 180.25x375 LayoutBlockFlow {P} at (0,0) size 180.25x18 @@ -353,11 +353,11 @@ LayoutBlockFlow {SPAN} at (0,0) size 50x50 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (8,920) size 25x25 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 +layer at (204,120) size 25x25 clip at (205,121) size 23x23 LayoutBlockFlow {SPAN} at (0,0) size 25x25 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (8,981) size 50x50 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 +layer at (204,181) size 50x50 clip at (205,182) size 48x48 LayoutBlockFlow {SPAN} at (0,0) size 50x50 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-images-empty-alt-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-images-empty-alt-expected.txt index cded253..a936eb5 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-images-empty-alt-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-images-empty-alt-expected.txt
@@ -9,7 +9,7 @@ layer at (8,50) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,34) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x383 -layer at (8,50) size 180x1532 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,50) size 180x1532 backgroundClip at (0,0) size 196x433 clip at (0,0) size 196x433 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1532 LayoutBlockFlow {DIV} at (0,16) size 180.25x142 LayoutBlockFlow {P} at (0,0) size 180.25x36
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-images-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-images-expected.txt index fac51b9..0979fc0d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/images/rendering-broken-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,50) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,34) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x383 -layer at (8,50) size 180x1449 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,50) size 180x1449 backgroundClip at (0,0) size 196x433 clip at (0,0) size 196x433 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1449 LayoutBlockFlow {DIV} at (0,16) size 180.25x124 LayoutBlockFlow {P} at (0,0) size 180.25x18 @@ -354,11 +354,11 @@ LayoutBlockFlow {SPAN} at (0,0) size 50x50 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,485) size 25x25 clip at (21,486) size 23x23 +layer at (216,102) size 25x25 clip at (217,103) size 23x23 LayoutBlockFlow {SPAN} at (0,0) size 25x25 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,514) size 50x50 clip at (21,515) size 48x48 +layer at (216,131) size 50x50 clip at (217,132) size 48x48 LayoutBlockFlow {SPAN} at (0,0) size 50x50 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/video-layer-crash-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/media/video-layer-crash-expected.txt index 1cb5593..e9e6846 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/media/video-layer-crash-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/media/video-layer-crash-expected.txt
@@ -21,7 +21,7 @@ layer at (15,63) size 200x150 LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 200x150 LayoutBlockFlow {DIV} at (0,118) size 200x32 -layer at (15,63) size 200x108 +layer at (15,63) size 200x108 backgroundClip at (65,101) size 100x155 clip at (65,101) size 100x70 LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 200x108 layer at (12,220) size 206x156 LayoutVideo {VIDEO} at (4,178) size 206x156 [border: (3px solid #FF0000)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/video-transformed-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/media/video-transformed-expected.txt index d162a6d..4c18c28 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/media/video-transformed-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/media/video-transformed-expected.txt
@@ -28,7 +28,7 @@ layer at (15,205) size 200x150 LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 200x150 LayoutBlockFlow {DIV} at (0,118) size 200x32 -layer at (15,205) size 200x108 +layer at (15,205) size 200x108 backgroundClip at (65,243) size 100x54 clip at (65,243) size 100x54 LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 200x108 layer at (12,362) size 206x156 LayoutVideo {VIDEO} at (4,320) size 206x156 [border: (3px solid #FF0000)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/video-zoom-controls-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/media/video-zoom-controls-expected.txt index 4386cfb..f7ff661 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/media/video-zoom-controls-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/media/video-zoom-controls-expected.txt
@@ -30,7 +30,7 @@ LayoutBlockFlow {DIV} at (0,132) size 240x48 layer at (57,310) size 240x117 LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 240x117 -layer at (57,442) size 240x48 +layer at (57,442) size 240x48 backgroundClip at (43,421) size 245x88 clip at (57,442) size 231x48 LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 240x48 [bgcolor=#FAFAFA] LayoutButton {INPUT} at (0,0) size 48x48 LayoutFlexibleBox {DIV} at (48,0) size 35.03x48 [color=#5A5A5A] @@ -38,5 +38,5 @@ LayoutText {#text} at (0,13) size 36x21 text run at (0,13) width 36: "0:00" LayoutButton {INPUT} at (83.03,0) size 48x48 -layer at (188,442) size 48x48 backgroundClip at (188,442) size 48x27 clip at (188,442) size 48x27 +layer at (188,442) size 48x48 backgroundClip at (172,443) size 56x56 clip at (188,443) size 40x47 LayoutButton {INPUT} at (131.03,0) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/mac/printing/thead-under-multicol-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/printing/thead-under-multicol-expected.txt index 0a8a35a..1806b0a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/printing/thead-under-multicol-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/printing/thead-under-multicol-expected.txt
@@ -6,7 +6,7 @@ layer at (8,8) size 1545x2000 backgroundClip at (0,0) size 1561x1193 clip at (0,0) size 1561x1193 LayoutBlockFlow {DIV} at (0,0) size 1545x2000 LayoutMultiColumnSet (anonymous) at (0,0) size 1545x2000 -layer at (8,8) size 765x3839 backgroundClip at (0,0) size 1561x1193 clip at (0,0) size 1561x1193 +layer at (8,8) size 765x3839 backgroundClip at (0,0) size 781x1193 clip at (0,0) size 781x1193 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 764.50x3839 LayoutTable {TABLE} at (0,0) size 308x3839 LayoutTableSection {THEAD} at (0,0) size 308x30
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/hixie/mixed/006-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/hixie/mixed/006-expected.txt index 9025683..415acfb4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/hixie/mixed/006-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/hixie/mixed/006-expected.txt
@@ -11,7 +11,7 @@ LayoutSVGEllipse {circle} at (50,50) size 100x100 [fill={[type=SOLID] [color=#008000]}] [cx=100.00] [cy=100.00] [r=50.00] LayoutSVGForeignObject {foreignObject} at (0,0) size 200x200 LayoutText {#text} at (0,0) size 0x0 -layer at (8,8) size 200x200 +layer at (16,216) size 200x200 LayoutBlockFlow (positioned) {div} at (8,8) size 200x200 [bgcolor=#FFFFFF] LayoutText {#text} at (0,0) size 194x54 text run at (0,0) width 194: "There should be a green circle"
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/transforms/svg-css-transforms-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/transforms/svg-css-transforms-expected.txt index 65252c03..3989f81 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/transforms/svg-css-transforms-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/transforms/svg-css-transforms-expected.txt
@@ -33,7 +33,7 @@ LayoutBlockFlow (relative positioned) {div} at (10,335.63) size 200x200 [bgcolor=#C0C0C0] [border: (1px solid #000000)] layer at (29,355) size 60x60 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px dotted #000000)] -layer at (30,356) size 60x60 +layer at (105,381) size 60x60 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px dotted #000000)] layer at (31,357) size 60x60 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px solid #0000FF)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/transforms/2d/compound-transforms-vs-containers-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/transforms/2d/compound-transforms-vs-containers-expected.txt index 65afd56..8933c4f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/transforms/2d/compound-transforms-vs-containers-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/transforms/2d/compound-transforms-vs-containers-expected.txt
@@ -14,7 +14,7 @@ text run at (0,0) width 88: "Translate first" layer at (79,123) size 80x80 LayoutBlockFlow (positioned) {DIV} at (1,51) size 80x80 -layer at (79,123) size 80x80 +layer at (154,143) size 80x80 LayoutBlockFlow (positioned) {DIV} at (0,0) size 80x80 layer at (79,123) size 80x80 LayoutBlockFlow (positioned) {DIV} at (0,0) size 80x80
diff --git a/third_party/WebKit/LayoutTests/platform/mac/transforms/svg-vs-css-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/transforms/svg-vs-css-expected.txt index d62533394..1539464f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/transforms/svg-vs-css-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/transforms/svg-vs-css-expected.txt
@@ -42,7 +42,7 @@ LayoutBlockFlow (relative positioned) {div} at (10,335.63) size 200x200 [bgcolor=#C0C0C0] [border: (1px solid #000000)] layer at (29,355) size 60x60 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px dotted #000000)] -layer at (30,356) size 60x60 +layer at (105,381) size 60x60 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px dotted #000000)] layer at (31,357) size 60x60 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px solid #0000FF)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/transforms/transform-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/transforms/transform-overflow-expected.txt index f8f69cd..b09ff53b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/transforms/transform-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/transforms/transform-overflow-expected.txt
@@ -8,5 +8,5 @@ text run at (0,0) width 252: "You should see one green square above" layer at (50,50) size 100x100 LayoutBlockFlow (positioned) {DIV} at (50,50) size 100x100 [bgcolor=#FF0000] -layer at (0,0) size 200x200 +layer at (0,0) size 200x200 backgroundClip at (50,50) size 100x100 clip at (50,50) size 100x100 LayoutBlockFlow {DIV} at (0,0) size 200x200 [bgcolor=#008000]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/transforms/transformed-focused-text-input-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/transforms/transformed-focused-text-input-expected.txt index 52a17517..2b74034 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/transforms/transformed-focused-text-input-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/transforms/transformed-focused-text-input-expected.txt
@@ -7,6 +7,6 @@ LayoutBlockFlow {DIV} at (0,0) size 784x19 LayoutTextControl {INPUT} at (0,0) size 131x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] LayoutText {#text} at (0,0) size 0x0 -layer at (11,11) size 125x13 +layer at (11,11) size 125x13 backgroundClip at (8,11) size 126x35 clip at (11,11) size 123x13 LayoutBlockFlow {DIV} at (3,3) size 125x13 caret: position 0 of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of child 1 {DIV} of body
diff --git a/third_party/WebKit/LayoutTests/platform/mac/transforms/transforms-with-opacity-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/transforms/transforms-with-opacity-expected.txt index 86ad743..89cb813 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/transforms/transforms-with-opacity-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/transforms/transforms-with-opacity-expected.txt
@@ -10,5 +10,5 @@ LayoutBlockFlow {DIV} at (0,18) size 120x120 [bgcolor=#87CEEB] [border: (10px solid #000000)] layer at (18,36) size 120x120 LayoutBlockFlow {DIV} at (10,10) size 120x120 [border: (10px solid #000000)] -layer at (28,46) size 120x120 +layer at (148,36) size 120x120 LayoutBlockFlow {DIV} at (10,10) size 120x120 [border: (10px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/gpu-rasterization/images/rendering-broken-images-empty-alt-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/gpu-rasterization/images/rendering-broken-images-empty-alt-expected.txt deleted file mode 100644 index cded253..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/gpu-rasterization/images/rendering-broken-images-empty-alt-expected.txt +++ /dev/null
@@ -1,321 +0,0 @@ -layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollHeight 858 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 785x858 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 - LayoutBlockFlow {HTML} at (0,0) size 785x858 - LayoutBlockFlow {BODY} at (8,16) size 769x834 - LayoutBlockFlow {P} at (0,0) size 769x18 - LayoutText {#text} at (0,0) size 322x18 - text run at (0,0) width 322: "crbug.com/644802: Render alt text per html5 spec" -layer at (8,50) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 - LayoutBlockFlow {DIV} at (0,34) size 769x800 - LayoutMultiColumnSet (anonymous) at (0,0) size 769x383 -layer at (8,50) size 180x1532 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 - LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1532 - LayoutBlockFlow {DIV} at (0,16) size 180.25x142 - LayoutBlockFlow {P} at (0,0) size 180.25x36 - LayoutText {#text} at (0,0) size 140x36 - text run at (0,0) width 140: "Different dimensions," - text run at (0,18) width 88: "empty alt text" - LayoutBlockFlow (anonymous) at (0,52) size 180.25x90 - LayoutText {#text} at (0,0) size 12x18 - text run at (0,0) width 12: "1." - LayoutBlockFlow {IMG} at (12,14) size 0x0 [bgcolor=#008000] - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutBR {BR} at (12,0) size 0x18 - LayoutText {#text} at (0,18) size 12x18 - text run at (0,18) width 12: "2." - LayoutBlockFlow {IMG} at (12,32) size 0x0 [bgcolor=#008000] - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutBR {BR} at (12,18) size 0x18 - LayoutText {#text} at (0,36) size 12x18 - text run at (0,36) width 12: "3." - LayoutBlockFlow {IMG} at (12,50) size 0x0 [bgcolor=#008000] - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutBR {BR} at (12,36) size 0x18 - LayoutText {#text} at (0,54) size 12x18 - text run at (0,54) width 12: "4." - LayoutBlockFlow {IMG} at (12,68) size 0x0 [bgcolor=#008000] - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutBR {BR} at (12,54) size 0x18 - LayoutText {#text} at (0,72) size 12x18 - text run at (0,72) width 12: "5." - LayoutBlockFlow {IMG} at (12,86) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (0,174) size 180.25x142 - LayoutBlockFlow {P} at (0,0) size 180.25x36 - LayoutText {#text} at (0,0) size 145x36 - text run at (0,0) width 140: "Different dimensions," - text run at (0,18) width 96: "empty alt text, " - text run at (95,18) width 50: "src = \"\"" - LayoutBlockFlow (anonymous) at (0,52) size 180.25x90 - LayoutText {#text} at (0,0) size 12x18 - text run at (0,0) width 12: "1." - LayoutBlockFlow {IMG} at (12,14) size 0x0 [bgcolor=#008000] - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutBR {BR} at (12,0) size 0x18 - LayoutText {#text} at (0,18) size 12x18 - text run at (0,18) width 12: "2." - LayoutBlockFlow {IMG} at (12,32) size 0x0 [bgcolor=#008000] - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutBR {BR} at (12,18) size 0x18 - LayoutText {#text} at (0,36) size 12x18 - text run at (0,36) width 12: "3." - LayoutBlockFlow {IMG} at (12,50) size 0x0 [bgcolor=#008000] - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutBR {BR} at (12,36) size 0x18 - LayoutText {#text} at (0,54) size 12x18 - text run at (0,54) width 12: "4." - LayoutBlockFlow {IMG} at (12,68) size 0x0 [bgcolor=#008000] - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutBR {BR} at (12,54) size 0x18 - LayoutText {#text} at (0,72) size 12x18 - text run at (0,72) width 12: "5." - LayoutBlockFlow {IMG} at (12,86) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutBR {BR} at (12,72) size 0x18 - LayoutBlockFlow {DIV} at (0,383) size 180.25x225 - LayoutBlockFlow {P} at (0,0) size 180.25x36 - LayoutText {#text} at (0,0) size 140x36 - text run at (0,0) width 140: "Different dimensions," - text run at (0,18) width 135: "empty alt text, no src" - LayoutBlockFlow (anonymous) at (0,52) size 180.25x173 - LayoutText {#text} at (0,11) size 12x18 - text run at (0,11) width 12: "1." - LayoutImage {IMG} at (12,0) size 25x25 [bgcolor=#008000] - LayoutText {#text} at (37,11) size 4x18 - text run at (37,11) width 4: " " - LayoutBR {BR} at (41,11) size 0x18 - LayoutText {#text} at (0,65) size 12x18 - text run at (0,65) width 12: "2." - LayoutImage {IMG} at (12,29) size 50x50 [bgcolor=#008000] - LayoutText {#text} at (62,65) size 4x18 - text run at (62,65) width 4: " " - LayoutBR {BR} at (66,65) size 0x18 - LayoutText {#text} at (0,83) size 12x18 - text run at (0,83) width 12: "3." - LayoutImage {IMG} at (12,97) size 50x0 [bgcolor=#008000] - LayoutText {#text} at (62,83) size 4x18 - text run at (62,83) width 4: " " - LayoutBR {BR} at (66,83) size 0x18 - LayoutText {#text} at (0,137) size 12x18 - text run at (0,137) width 12: "4." - LayoutImage {IMG} at (12,101) size 0x50 [bgcolor=#008000] - LayoutText {#text} at (12,137) size 4x18 - text run at (12,137) width 4: " " - LayoutBR {BR} at (16,137) size 0x18 - LayoutText {#text} at (0,155) size 12x18 - text run at (0,155) width 12: "5." - LayoutImage {IMG} at (12,169) size 0x0 - LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (0,624) size 180.25x142 - LayoutBlockFlow {P} at (0,0) size 180.25x36 - LayoutText {#text} at (0,0) size 140x36 - text run at (0,0) width 140: "Different dimensions," - text run at (0,18) width 96: "empty alt text, " - text run at (95,18) width 33: "src =" - LayoutBlockFlow (anonymous) at (0,52) size 180.25x90 - LayoutText {#text} at (0,0) size 12x18 - text run at (0,0) width 12: "1." - LayoutBlockFlow {IMG} at (12,14) size 0x0 [bgcolor=#008000] - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutText {#text} at (12,0) size 4x18 - text run at (12,0) width 4: " " - LayoutBR {BR} at (16,0) size 0x18 - LayoutText {#text} at (0,18) size 12x18 - text run at (0,18) width 12: "2." - LayoutBlockFlow {IMG} at (12,32) size 0x0 [bgcolor=#008000] - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutText {#text} at (12,18) size 4x18 - text run at (12,18) width 4: " " - LayoutBR {BR} at (16,18) size 0x18 - LayoutText {#text} at (0,36) size 12x18 - text run at (0,36) width 12: "3." - LayoutBlockFlow {IMG} at (12,50) size 0x0 [bgcolor=#008000] - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutText {#text} at (12,36) size 4x18 - text run at (12,36) width 4: " " - LayoutBR {BR} at (16,36) size 0x18 - LayoutText {#text} at (0,54) size 12x18 - text run at (0,54) width 12: "4." - LayoutBlockFlow {IMG} at (12,68) size 0x0 [bgcolor=#008000] - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutText {#text} at (12,54) size 4x18 - text run at (12,54) width 4: " " - LayoutBR {BR} at (16,54) size 0x18 - LayoutText {#text} at (0,72) size 12x18 - text run at (0,72) width 12: "5." - LayoutBlockFlow {IMG} at (12,86) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutText {#text} at (12,72) size 4x18 - text run at (12,72) width 4: " " - LayoutBR {BR} at (16,72) size 0x18 - LayoutBlockFlow {DIV} at (0,766) size 180.25x142 - LayoutBlockFlow {P} at (0,0) size 180.25x36 - LayoutText {#text} at (0,0) size 180x36 - text run at (0,0) width 180: "Different dimensions, no alt" - text run at (0,18) width 24: "text" - LayoutBlockFlow (anonymous) at (0,52) size 180.25x90 - LayoutText {#text} at (0,0) size 12x18 - text run at (0,0) width 12: "1." - LayoutBlockFlow {IMG} at (12,14) size 0x0 [bgcolor=#008000] - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutBR {BR} at (12,0) size 0x18 - LayoutText {#text} at (0,18) size 12x18 - text run at (0,18) width 12: "2." - LayoutBlockFlow {IMG} at (12,32) size 0x0 [bgcolor=#008000] - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutBR {BR} at (12,18) size 0x18 - LayoutText {#text} at (0,36) size 12x18 - text run at (0,36) width 12: "3." - LayoutBlockFlow {IMG} at (12,50) size 0x0 [bgcolor=#008000] - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutBR {BR} at (12,36) size 0x18 - LayoutText {#text} at (0,54) size 12x18 - text run at (0,54) width 12: "4." - LayoutBlockFlow {IMG} at (12,68) size 0x0 [bgcolor=#008000] - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutBR {BR} at (12,54) size 0x18 - LayoutText {#text} at (0,72) size 12x18 - text run at (0,72) width 12: "5." - LayoutBlockFlow {IMG} at (12,86) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (0,924) size 180.25x142 - LayoutBlockFlow {P} at (0,0) size 180.25x36 - LayoutText {#text} at (0,0) size 180x36 - text run at (0,0) width 180: "Different dimensions, no alt" - text run at (0,18) width 32: "text, " - text run at (31,18) width 50: "src = \"\"" - LayoutBlockFlow (anonymous) at (0,52) size 180.25x90 - LayoutText {#text} at (0,0) size 12x18 - text run at (0,0) width 12: "1." - LayoutBlockFlow {IMG} at (12,14) size 0x0 [bgcolor=#008000] - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutBR {BR} at (12,0) size 0x18 - LayoutText {#text} at (0,18) size 12x18 - text run at (0,18) width 12: "2." - LayoutBlockFlow {IMG} at (12,32) size 0x0 [bgcolor=#008000] - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutBR {BR} at (12,18) size 0x18 - LayoutText {#text} at (0,36) size 12x18 - text run at (0,36) width 12: "3." - LayoutBlockFlow {IMG} at (12,50) size 0x0 [bgcolor=#008000] - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutBR {BR} at (12,36) size 0x18 - LayoutText {#text} at (0,54) size 12x18 - text run at (0,54) width 12: "4." - LayoutBlockFlow {IMG} at (12,68) size 0x0 [bgcolor=#008000] - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutBR {BR} at (12,54) size 0x18 - LayoutText {#text} at (0,72) size 12x18 - text run at (0,72) width 12: "5." - LayoutBlockFlow {IMG} at (12,86) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutBR {BR} at (12,72) size 0x18 - LayoutBlockFlow {DIV} at (0,1149) size 180.25x225 - LayoutBlockFlow {P} at (0,0) size 180.25x36 - LayoutText {#text} at (0,0) size 180x36 - text run at (0,0) width 180: "Different dimensions, no alt" - text run at (0,18) width 71: "text, no src" - LayoutBlockFlow (anonymous) at (0,52) size 180.25x173 - LayoutText {#text} at (0,11) size 12x18 - text run at (0,11) width 12: "1." - LayoutImage {IMG} at (12,0) size 25x25 [bgcolor=#008000] - LayoutText {#text} at (37,11) size 4x18 - text run at (37,11) width 4: " " - LayoutBR {BR} at (41,11) size 0x18 - LayoutText {#text} at (0,65) size 12x18 - text run at (0,65) width 12: "2." - LayoutImage {IMG} at (12,29) size 50x50 [bgcolor=#008000] - LayoutText {#text} at (62,65) size 4x18 - text run at (62,65) width 4: " " - LayoutBR {BR} at (66,65) size 0x18 - LayoutText {#text} at (0,83) size 12x18 - text run at (0,83) width 12: "3." - LayoutImage {IMG} at (12,97) size 50x0 [bgcolor=#008000] - LayoutText {#text} at (62,83) size 4x18 - text run at (62,83) width 4: " " - LayoutBR {BR} at (66,83) size 0x18 - LayoutText {#text} at (0,137) size 12x18 - text run at (0,137) width 12: "4." - LayoutImage {IMG} at (12,101) size 0x50 [bgcolor=#008000] - LayoutText {#text} at (12,137) size 4x18 - text run at (12,137) width 4: " " - LayoutBR {BR} at (16,137) size 0x18 - LayoutText {#text} at (0,155) size 12x18 - text run at (0,155) width 12: "5." - LayoutImage {IMG} at (12,169) size 0x0 - LayoutText {#text} at (0,0) size 0x0 - LayoutBlockFlow {DIV} at (0,1390) size 180.25x142 - LayoutBlockFlow {P} at (0,0) size 180.25x36 - LayoutText {#text} at (0,0) size 180x36 - text run at (0,0) width 180: "Different dimensions, no alt" - text run at (0,18) width 32: "text, " - text run at (31,18) width 33: "src =" - LayoutBlockFlow (anonymous) at (0,52) size 180.25x90 - LayoutText {#text} at (0,0) size 12x18 - text run at (0,0) width 12: "1." - LayoutBlockFlow {IMG} at (12,14) size 0x0 [bgcolor=#008000] - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutText {#text} at (12,0) size 4x18 - text run at (12,0) width 4: " " - LayoutBR {BR} at (16,0) size 0x18 - LayoutText {#text} at (0,18) size 12x18 - text run at (0,18) width 12: "2." - LayoutBlockFlow {IMG} at (12,32) size 0x0 [bgcolor=#008000] - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutText {#text} at (12,18) size 4x18 - text run at (12,18) width 4: " " - LayoutBR {BR} at (16,18) size 0x18 - LayoutText {#text} at (0,36) size 12x18 - text run at (0,36) width 12: "3." - LayoutBlockFlow {IMG} at (12,50) size 0x0 [bgcolor=#008000] - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutText {#text} at (12,36) size 4x18 - text run at (12,36) width 4: " " - LayoutBR {BR} at (16,36) size 0x18 - LayoutText {#text} at (0,54) size 12x18 - text run at (0,54) width 12: "4." - LayoutBlockFlow {IMG} at (12,68) size 0x0 [bgcolor=#008000] - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutText {#text} at (12,54) size 4x18 - text run at (12,54) width 4: " " - LayoutBR {BR} at (16,54) size 0x18 - LayoutText {#text} at (0,72) size 12x18 - text run at (0,72) width 12: "5." - LayoutBlockFlow {IMG} at (12,86) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutInline {SPAN} at (0,0) size 0x0 - LayoutText {#text} at (12,72) size 4x18 - text run at (12,72) width 4: " " - LayoutBR {BR} at (16,72) size 0x18
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-mask-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-mask-expected.txt deleted file mode 100644 index b50515e..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-mask-expected.txt +++ /dev/null
@@ -1,20 +0,0 @@ -layer at (0,0) size 800x600 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 800x50 - LayoutBlockFlow {HTML} at (0,0) size 800x50 - LayoutBlockFlow {BODY} at (8,16) size 784x18 - LayoutBlockFlow {P} at (0,0) size 784x18 - LayoutText {#text} at (0,0) size 524x18 - text run at (0,0) width 524: "Testing masks on compositing layers. Top and bottom rows should look the same." -layer at (8,50) size 0x0 - LayoutBlockFlow (positioned) {DIV} at (8,50) size 0x0 -layer at (8,50) size 208x208 clip at (12,54) size 200x200 scrollWidth 500 scrollHeight 500 - LayoutBlockFlow (positioned) {DIV} at (0,0) size 208x208 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (12,54) size 500x500 backgroundClip at (12,54) size 200x200 clip at (12,54) size 200x200 - LayoutBlockFlow (positioned) {DIV} at (4,4) size 500x500 [bgcolor=#000000] -layer at (8,300) size 0x0 - LayoutBlockFlow (positioned) {DIV} at (8,300) size 0x0 -layer at (8,300) size 208x208 clip at (12,304) size 200x200 scrollWidth 500 scrollHeight 500 - LayoutBlockFlow (positioned) {DIV} at (0,0) size 208x208 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (12,304) size 500x500 backgroundClip at (12,304) size 200x200 clip at (12,304) size 200x200 - LayoutBlockFlow (positioned) {DIV} at (4,4) size 500x500 [bgcolor=#000000]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/tiled-mask-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/tiled-mask-expected.txt deleted file mode 100644 index dd82f63..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/tiled-mask-expected.txt +++ /dev/null
@@ -1,28 +0,0 @@ -layer at (0,0) size 800x600 clip at (0,0) size 785x585 scrollX 31.00 scrollY 239.00 scrollWidth 816 scrollHeight 824 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 785x824 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 - LayoutBlockFlow {HTML} at (0,0) size 785x824 - LayoutBlockFlow {BODY} at (8,8) size 769x808 -layer at (8,8) size 808x808 backgroundClip at (8,8) size 777x577 clip at (12,12) size 773x573 scrollWidth 2000 scrollHeight 2000 - LayoutBlockFlow {DIV} at (0,0) size 808x808 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (12,12) size 2000x2000 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 - LayoutBlockFlow (positioned) {DIV} at (4,4) size 2000x2000 [bgcolor=#FFEFD5] - LayoutText {#text} at (0,0) size 128x18 - text run at (0,0) width 128: "There's stuff in here" -layer at (12,12) size 50x50 - LayoutBlockFlow (positioned) {DIV} at (4,4) size 50x50 [bgcolor=#800000] -layer at (12,712) size 100x100 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 - LayoutBlockFlow (positioned) {DIV} at (4,704) size 100x100 [bgcolor=#FFA500] -layer at (-48,82) size 100x100 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 - LayoutBlockFlow (positioned) {DIV} at (-56,74) size 100x100 [bgcolor=#008000] -layer at (132,712) size 100x100 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 - LayoutBlockFlow (positioned) {DIV} at (124,704) size 100x100 [bgcolor=#0000FF] -layer at (762,12) size 100x100 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 - LayoutBlockFlow (positioned) {DIV} at (754,4) size 100x100 [bgcolor=#FFFF00] -layer at (92,312) size 100x100 - LayoutBlockFlow (positioned) {DIV} at (84,304) size 100x100 -layer at (32,412) size 100x100 - LayoutBlockFlow (positioned) {DIV} at (24,404) size 100x100 [bgcolor=#FF0000] -layer at (762,762) size 50x50 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 - LayoutBlockFlow (positioned) {DIV} at (754,754) size 50x50 [bgcolor=#800080] -scrolled to 31,239
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/mask-with-filter-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/mask-with-filter-expected.txt index 3974072b..b7278d0c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/mask-with-filter-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/mask-with-filter-expected.txt
@@ -8,5 +8,5 @@ LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 208x208 layer at (108,8) size 208x208 clip at (112,12) size 200x200 scrollWidth 500 scrollHeight 500 LayoutBlockFlow {DIV} at (0,0) size 208x208 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (112,12) size 500x500 backgroundClip at (112,12) size 200x200 clip at (112,12) size 200x200 +layer at (112,12) size 500x500 backgroundClip at (27,13) size 436x236 clip at (27,13) size 436x236 LayoutBlockFlow {DIV} at (4,4) size 500x500 [bgcolor=#000000]
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/scaled-mask-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/scaled-mask-expected.txt index 0737c9c..88fee7961 100644 --- a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/scaled-mask-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/scaled-mask-expected.txt
@@ -10,11 +10,11 @@ LayoutBlockFlow (positioned) {DIV} at (8,52) size 0x0 layer at (8,52) size 208x208 clip at (12,56) size 200x200 scrollWidth 500 scrollHeight 500 LayoutBlockFlow (positioned) {DIV} at (0,0) size 208x208 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (12,56) size 500x500 backgroundClip at (12,56) size 200x200 clip at (12,56) size 200x200 +layer at (12,56) size 500x500 backgroundClip at (16,56) size 400x200 clip at (16,56) size 400x200 LayoutBlockFlow (positioned) {DIV} at (4,4) size 500x500 [bgcolor=#000000] layer at (8,300) size 0x0 LayoutBlockFlow (positioned) {DIV} at (8,300) size 0x0 layer at (8,300) size 208x208 clip at (12,304) size 200x200 scrollWidth 500 scrollHeight 500 LayoutBlockFlow (positioned) {DIV} at (0,0) size 208x208 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (12,304) size 500x500 backgroundClip at (12,304) size 200x200 clip at (12,304) size 200x200 +layer at (12,304) size 500x500 backgroundClip at (16,304) size 400x200 clip at (16,304) size 400x200 LayoutBlockFlow (positioned) {DIV} at (4,4) size 500x500 [bgcolor=#000000]
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/tiled-mask-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/tiled-mask-expected.txt index 9a86ebd7..72c4ac8 100644 --- a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/tiled-mask-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/tiled-mask-expected.txt
@@ -5,24 +5,24 @@ LayoutBlockFlow {BODY} at (8,8) size 769x808 layer at (8,8) size 808x808 backgroundClip at (8,8) size 777x577 clip at (12,12) size 773x573 scrollWidth 2000 scrollHeight 2000 LayoutBlockFlow {DIV} at (0,0) size 808x808 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (12,12) size 2000x2000 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (12,12) size 2000x2000 backgroundClip at (12,12) size 773x573 clip at (12,12) size 773x573 LayoutBlockFlow (positioned) {DIV} at (4,4) size 2000x2000 [bgcolor=#FFEFD5] LayoutText {#text} at (0,0) size 117x19 text run at (0,0) width 117: "There's stuff in here" layer at (12,12) size 50x50 LayoutBlockFlow (positioned) {DIV} at (4,4) size 50x50 [bgcolor=#800000] -layer at (12,712) size 100x100 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (12,712) size 100x100 backgroundClip at (12,12) size 773x573 clip at (12,12) size 773x573 LayoutBlockFlow (positioned) {DIV} at (4,704) size 100x100 [bgcolor=#FFA500] -layer at (-48,82) size 100x100 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (-48,82) size 100x100 backgroundClip at (12,12) size 773x573 clip at (12,12) size 773x573 LayoutBlockFlow (positioned) {DIV} at (-56,74) size 100x100 [bgcolor=#008000] -layer at (132,712) size 100x100 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (132,712) size 100x100 backgroundClip at (12,12) size 773x573 clip at (12,12) size 773x573 LayoutBlockFlow (positioned) {DIV} at (124,704) size 100x100 [bgcolor=#0000FF] -layer at (762,12) size 100x100 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (762,12) size 100x100 backgroundClip at (12,12) size 773x573 clip at (12,12) size 773x573 LayoutBlockFlow (positioned) {DIV} at (754,4) size 100x100 [bgcolor=#FFFF00] layer at (92,312) size 100x100 LayoutBlockFlow (positioned) {DIV} at (84,304) size 100x100 layer at (32,412) size 100x100 LayoutBlockFlow (positioned) {DIV} at (24,404) size 100x100 [bgcolor=#FF0000] -layer at (762,762) size 50x50 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (762,762) size 50x50 backgroundClip at (12,12) size 773x573 clip at (12,12) size 773x573 LayoutBlockFlow (positioned) {DIV} at (754,754) size 50x50 [bgcolor=#800080] scrolled to 31,239
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/reflections/nested-reflection-on-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/reflections/nested-reflection-on-overflow-expected.txt index 55a5c48..46513e448 100644 --- a/third_party/WebKit/LayoutTests/platform/win/compositing/reflections/nested-reflection-on-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/compositing/reflections/nested-reflection-on-overflow-expected.txt
@@ -12,7 +12,7 @@ LayoutBlockFlow {DIV} at (11,11) size 100x100 [bgcolor=#008000] layer at (39,67) size 100x100 clip at (39,67) size 85x85 scrollHeight 500 LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 100x100 -layer at (39,67) size 85x500 backgroundClip at (39,67) size 85x85 clip at (39,67) size 85x85 +layer at (39,67) size 85x500 backgroundClip at (39,67) size 232x210 clip at (39,67) size 232x210 LayoutBlockFlow {DIV} at (0,0) size 85x500 LayoutText {#text} at (0,0) size 85x419 text run at (0,0) width 79: "Lorem ipsum"
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/css/input-search-padding-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/css/input-search-padding-expected.txt index 4bb45fc3..687892e5 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/css/input-search-padding-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/fast/css/input-search-padding-expected.txt
@@ -20,7 +20,7 @@ LayoutBlockFlow {DIV} at (2,3) size 449x46 LayoutText {#text} at (0,0) size 357x45 text run at (0,0) width 357: "value jgq not clipped" -layer at (14,171) size 206x24 +layer at (14,171) size 206x24 backgroundClip at (14,172) size 206x21 clip at (14,172) size 206x21 LayoutBlockFlow {DIV} at (0,0) size 206x24 LayoutText {#text} at (0,0) size 115x23 text run at (0,0) width 115: "Sample Input"
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/placeholder-position-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/forms/placeholder-position-expected.txt index a2a6c25..464d6cbd 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/placeholder-position-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/placeholder-position-expected.txt
@@ -139,7 +139,7 @@ LayoutBlockFlow {DIV} at (2,4) size 169x16 [color=#757575] LayoutText {#text} at (0,0) size 66x16 text run at (0,0) width 66: "placeholder" -layer at (541,259) size 169x25 +layer at (541,259) size 169x25 backgroundClip at (541,261) size 169x21 clip at (541,261) size 169x21 LayoutBlockFlow {DIV} at (2,0) size 169x25 layer at (10,292) size 169x16 LayoutBlockFlow {DIV} at (2,4.50) size 169x16 [color=#757575] @@ -169,11 +169,11 @@ LayoutBlockFlow {DIV} at (0,3.50) size 9x9 layer at (168,81) size 9x9 transparent LayoutBlockFlow {DIV} at (157,3.50) size 9x9 -layer at (8,334) size 173x36 clip at (10,336) size 169x32 +layer at (8,334) size 173x36 backgroundClip at (11,323) size 167x118 clip at (11,336) size 167x32 LayoutTextControl {INPUT} at (0,326) size 173x36 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] -layer at (10,351) size 169x16 backgroundClip at (31,351) size 148x6 clip at (31,351) size 148x6 +layer at (10,351) size 169x16 backgroundClip at (14,339) size 154x98 clip at (14,351) size 154x16 LayoutBlockFlow {DIV} at (2,17) size 169x16 [color=#757575] LayoutText {#text} at (0,0) size 66x16 text run at (0,0) width 66: "placeholder" -layer at (10,351) size 169x16 backgroundClip at (31,351) size 148x6 clip at (31,351) size 148x6 +layer at (10,351) size 169x16 backgroundClip at (14,339) size 154x98 clip at (14,351) size 154x16 LayoutBlockFlow {DIV} at (2,17) size 169x16
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/search/search-vertical-alignment-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/forms/search/search-vertical-alignment-expected.txt index e8f72a4..03fc377a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/search/search-vertical-alignment-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/search/search-vertical-alignment-expected.txt
@@ -42,19 +42,19 @@ LayoutBlockFlow {DIV} at (2,14.50) size 169x16 LayoutText {#text} at (0,0) size 24x16 text run at (0,0) width 24: "Text" -layer at (11,127) size 156x16 +layer at (11,127) size 156x16 backgroundClip at (11,129) size 156x12 clip at (11,129) size 156x12 LayoutBlockFlow {DIV} at (0,0) size 156x16 LayoutText {#text} at (0,0) size 24x16 text run at (0,0) width 24: "Text" -layer at (189,127) size 169x16 +layer at (189,127) size 169x16 backgroundClip at (189,129) size 169x12 clip at (189,129) size 169x12 LayoutBlockFlow {DIV} at (2,0) size 169x16 LayoutText {#text} at (0,0) size 24x16 text run at (0,0) width 24: "Text" -layer at (11,163) size 156x16 +layer at (11,163) size 156x16 backgroundClip at (11,167) size 156x8 clip at (11,167) size 156x8 LayoutBlockFlow {DIV} at (0,0) size 156x16 LayoutText {#text} at (0,0) size 24x16 text run at (0,0) width 24: "Text" -layer at (189,163) size 169x16 +layer at (189,163) size 169x16 backgroundClip at (189,167) size 169x8 clip at (189,167) size 169x8 LayoutBlockFlow {DIV} at (2,-2) size 169x16 LayoutText {#text} at (0,0) size 24x16 text run at (0,0) width 24: "Text" @@ -62,5 +62,5 @@ LayoutBlockFlow {DIV} at (157,3.50) size 9x9 layer at (168,131) size 9x9 transparent LayoutBlockFlow {DIV} at (157,3.50) size 9x9 -layer at (168,167) size 9x9 transparent +layer at (168,167) size 9x9 backgroundClip at (10,167) size 171x8 clip at (10,167) size 171x8 transparent LayoutBlockFlow {DIV} at (157,3.50) size 9x9
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/search/searchfield-heights-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/forms/search/searchfield-heights-expected.txt index feb1781..242e00e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/search/searchfield-heights-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/search/searchfield-heights-expected.txt
@@ -20,7 +20,7 @@ LayoutFlexibleBox {DIV} at (3,83.50) size 300x33 LayoutBlockFlow {DIV} at (0,0) size 277x33 LayoutText {#text} at (0,0) size 0x0 -layer at (11,133) size 64x6 +layer at (11,133) size 64x6 backgroundClip at (11,135) size 64x2 clip at (11,135) size 64x2 LayoutBlockFlow {DIV} at (0,0) size 64x6 LayoutText {#text} at (0,0) size 10x6 text run at (0,0) width 10: "mini" @@ -32,7 +32,7 @@ LayoutBlockFlow {DIV} at (0,0) size 277x33 LayoutText {#text} at (0,0) size 84x32 text run at (0,0) width 84: "regular" -layer at (76,133) size 5x5 transparent +layer at (76,133) size 5x5 backgroundClip at (10,135) size 75x2 clip at (10,135) size 75x2 transparent LayoutBlockFlow {DIV} at (65,0.50) size 5x5 layer at (254,127) size 10x10 transparent LayoutBlockFlow {DIV} at (160,3.50) size 10x10
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/select/menulist-appearance-rtl-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/forms/select/menulist-appearance-rtl-expected.txt index 40f63e3..565babae 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/select/menulist-appearance-rtl-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/select/menulist-appearance-rtl-expected.txt
@@ -76,7 +76,7 @@ layer at (8,395) size 784x160 LayoutBlockFlow {DIV} at (0,379) size 784x160 LayoutMultiColumnSet (anonymous) at (0,0) size 784x160 -layer at (8,395) size 384x320 backgroundClip at (0,0) size 800x600 clip at (0,0) size 800x600 +layer at (8,395) size 384x320 backgroundClip at (0,0) size 400x555 clip at (0,0) size 400x555 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 384x320 LayoutBlockFlow {DIV} at (0,0) size 384x160 LayoutMenuList {SELECT} at (0,0) size 350x22 [bgcolor=#FFFFFF] [border: (1px solid #A9A9A9)]
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/text/text-font-height-mismatch-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/forms/text/text-font-height-mismatch-expected.txt index 7263072..6948424 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/text/text-font-height-mismatch-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/text/text-font-height-mismatch-expected.txt
@@ -13,15 +13,15 @@ LayoutTextControl {INPUT} at (0,0) size 275x28 [bgcolor=#FFFFFF] [border: (1px solid #000000)] LayoutBlockFlow {DIV} at (0,92) size 784x28 LayoutTextControl {INPUT} at (0,0) size 180x28 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] -layer at (9,53) size 234x27 +layer at (9,53) size 234x27 backgroundClip at (9,53) size 234x26 clip at (9,53) size 234x26 LayoutBlockFlow {DIV} at (1,0.50) size 234x27 LayoutText {#text} at (0,0) size 70x24 text run at (0,0) width 70: "\x{3075} ABCgjy" -layer at (245,53) size 234x27 +layer at (245,53) size 234x27 backgroundClip at (245,53) size 234x26 clip at (245,53) size 234x26 LayoutBlockFlow {DIV} at (1,0.50) size 234x27 LayoutText {#text} at (0,0) size 70x24 text run at (0,0) width 70: "\x{3075} ABCgjy" -layer at (9,80) size 273x28 +layer at (9,80) size 273x28 backgroundClip at (9,81) size 273x26 clip at (9,81) size 273x26 LayoutBlockFlow {DIV} at (1,0) size 273x28 LayoutText {#text} at (0,0) size 80x27 text run at (0,0) width 80: "ABCgjy"
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/text/textfield-overflow-by-value-update-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/forms/text/textfield-overflow-by-value-update-expected.txt index a6afdb62..1945be6 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/text/textfield-overflow-by-value-update-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/text/textfield-overflow-by-value-update-expected.txt
@@ -5,7 +5,7 @@ LayoutBlockFlow {BODY} at (8,8) size 784x20 LayoutTextControl {INPUT} at (0,3.50) size 100x2 [bgcolor=#FFFFFF] LayoutText {#text} at (0,0) size 0x0 -layer at (8,-6) size 100x37 backgroundClip at (8,0) size 100x31 clip at (8,0) size 100x31 +layer at (8,-6) size 100x37 backgroundClip at (8,12) size 100x2 clip at (8,12) size 100x2 LayoutBlockFlow {DIV} at (0,-17.50) size 100x37 LayoutText {#text} at (0,0) size 67x36 text run at (0,0) width 67: "FAIL"
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/text/textfield-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/forms/text/textfield-overflow-expected.txt index 81bca1d..336b393 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/text/textfield-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/text/textfield-overflow-expected.txt
@@ -5,6 +5,6 @@ LayoutBlockFlow {BODY} at (8,8) size 784x584 LayoutTextControl {INPUT} at (0,0) size 173x10 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] LayoutText {#text} at (0,0) size 0x0 -layer at (10,5) size 169x16 +layer at (10,5) size 169x16 backgroundClip at (10,10) size 169x6 clip at (10,10) size 169x6 LayoutBlockFlow {DIV} at (2,-3) size 169x16 caret: position 0 of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of body
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/layers/opacity-transforms-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/layers/opacity-transforms-expected.txt index 9054a151..def899c9 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/layers/opacity-transforms-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/fast/layers/opacity-transforms-expected.txt
@@ -16,5 +16,5 @@ LayoutBlockFlow (positioned) {DIV} at (100,150) size 100x100 layer at (100,150) size 10x10 LayoutBlockFlow {DIV} at (0,0) size 10x10 -layer at (100,150) size 100x100 +layer at (150,200) size 100x100 LayoutBlockFlow (positioned) {DIV} at (0,0) size 100x100 [bgcolor=#008000]
diff --git a/third_party/WebKit/LayoutTests/platform/win/fragmentation/transformed-clip-before-second-column-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fragmentation/transformed-clip-before-second-column-expected.txt index fe8243f..3e6770b 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fragmentation/transformed-clip-before-second-column-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/fragmentation/transformed-clip-before-second-column-expected.txt
@@ -6,15 +6,15 @@ layer at (8,8) size 784x70 LayoutBlockFlow {DIV} at (0,0) size 784x70 LayoutMultiColumnSet (anonymous) at (0,0) size 784x70 -layer at (8,8) size 384x140 +layer at (8,8) size 384x140 backgroundClip at (0,0) size 400x78 clip at (0,0) size 400x78 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 384x140 LayoutBlockFlow {DIV} at (0,0) size 384x100 -layer at (8,108) size 384x40 scrollHeight 41 +layer at (408,38) size 384x40 scrollHeight 41 LayoutBlockFlow {DIV} at (0,100) size 384x40 LayoutBlockFlow (anonymous) at (0,0) size 384x20 LayoutText {#text} at (0,0) size 298x19 text run at (0,0) width 298: "There should be a black rectangle below this text." -layer at (8,128) size 384x20 backgroundClip at (408,38) size 384x40 clip at (408,38) size 384x40 +layer at (408,58) size 384x20 LayoutBlockFlow {DIV} at (0,20) size 384x20 LayoutInline {<pseudo:before>} at (0,0) size 12x19 LayoutTextFragment (anonymous) at (0,0) size 12x19
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-0px-images-expected.txt b/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-0px-images-expected.txt index f9211aa9..445fd4f7 100644 --- a/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-0px-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-0px-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,52) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x288 -layer at (8,52) size 180x1000 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,52) size 180x1000 backgroundClip at (0,0) size 196x340 clip at (0,0) size 196x340 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1000 LayoutBlockFlow {DIV} at (0,16) size 180.25x116 LayoutBlockFlow {P} at (0,0) size 180.25x20 @@ -289,6 +289,6 @@ layer at (20,271) size 0x0 LayoutBlockFlow {SPAN} at (0,15) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,411) size 0x0 +layer at (216,123) size 0x0 LayoutBlockFlow {SPAN} at (0,15) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-0px-images-quirk-expected.txt b/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-0px-images-quirk-expected.txt index d1558e8..09d4458 100644 --- a/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-0px-images-quirk-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-0px-images-quirk-expected.txt
@@ -9,7 +9,7 @@ layer at (8,44) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x288 -layer at (8,44) size 180x1000 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,44) size 180x1000 backgroundClip at (0,0) size 196x332 clip at (0,0) size 196x332 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1000 LayoutBlockFlow {DIV} at (0,16) size 180.25x116 LayoutBlockFlow {P} at (0,0) size 180.25x20 @@ -243,64 +243,64 @@ layer at (20,303) size 0x0 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,403) size 0x0 +layer at (216,115) size 0x0 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,423) size 0x0 +layer at (216,135) size 0x0 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,443) size 0x0 +layer at (216,155) size 0x0 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,691) size 0x0 scrollWidth 22 scrollHeight 40 +layer at (413,115) size 0x0 scrollWidth 22 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 22x39 LayoutText {#text} at (0,0) size 22x39 text run at (0,0) width 14: "alt" text run at (0,20) width 22: "text" -layer at (20,711) size 0x0 scrollWidth 22 scrollHeight 40 +layer at (413,135) size 0x0 scrollWidth 22 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 22x39 LayoutText {#text} at (0,0) size 22x39 text run at (0,0) width 14: "alt" text run at (0,20) width 22: "text" -layer at (20,731) size 0x0 scrollWidth 22 scrollHeight 40 +layer at (413,155) size 0x0 scrollWidth 22 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 22x39 LayoutText {#text} at (0,0) size 22x39 text run at (0,0) width 14: "alt" text run at (0,20) width 22: "text" -layer at (20,843) size 0x0 scrollWidth 22 scrollHeight 40 +layer at (413,267) size 0x0 scrollWidth 22 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 22x39 LayoutText {#text} at (0,0) size 22x39 text run at (0,0) width 14: "alt" text run at (0,20) width 22: "text" -layer at (20,863) size 0x0 scrollWidth 22 scrollHeight 40 +layer at (413,287) size 0x0 scrollWidth 22 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 22x39 LayoutText {#text} at (0,0) size 22x39 text run at (0,0) width 14: "alt" text run at (0,20) width 22: "text" -layer at (20,883) size 0x0 scrollWidth 22 scrollHeight 40 +layer at (413,307) size 0x0 scrollWidth 22 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 22x39 LayoutText {#text} at (0,0) size 22x39 text run at (0,0) width 14: "alt" text run at (0,20) width 22: "text" -layer at (20,979) size 0x0 scrollWidth 22 scrollHeight 40 +layer at (609,115) size 0x0 scrollWidth 22 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 22x39 LayoutText {#text} at (0,0) size 22x39 text run at (0,0) width 14: "alt" text run at (0,20) width 22: "text" -layer at (20,999) size 0x0 scrollWidth 22 scrollHeight 40 +layer at (609,135) size 0x0 scrollWidth 22 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 22x39 LayoutText {#text} at (0,0) size 22x39 text run at (0,0) width 14: "alt" text run at (0,20) width 22: "text" -layer at (20,1019) size 0x0 scrollWidth 22 scrollHeight 40 +layer at (609,155) size 0x0 scrollWidth 22 scrollHeight 40 LayoutBlockFlow {SPAN} at (0,0) size 0x0 LayoutInline {SPAN} at (0,0) size 22x39 LayoutText {#text} at (0,0) size 22x39
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-10px-images-expected.txt b/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-10px-images-expected.txt index b5040f3..6420988 100644 --- a/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-10px-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-10px-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,52) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x288 -layer at (8,52) size 180x1000 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,52) size 180x1000 backgroundClip at (0,0) size 196x340 clip at (0,0) size 196x340 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1000 LayoutBlockFlow {DIV} at (0,16) size 180.25x116 LayoutBlockFlow {P} at (0,0) size 180.25x20 @@ -289,6 +289,6 @@ layer at (20,261) size 10x10 LayoutBlockFlow {SPAN} at (0,5) size 10x10 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,401) size 10x10 +layer at (216,113) size 10x10 LayoutBlockFlow {SPAN} at (0,5) size 10x10 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-16px-images-expected.txt b/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-16px-images-expected.txt index c38d4ce..8c918033 100644 --- a/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-16px-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-16px-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,52) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x290 -layer at (8,52) size 180x1158 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,52) size 180x1158 backgroundClip at (0,0) size 196x342 clip at (0,0) size 196x342 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1158 LayoutBlockFlow {DIV} at (0,16) size 180.25x116 LayoutBlockFlow {P} at (0,0) size 180.25x20 @@ -289,6 +289,6 @@ layer at (20,256) size 16x16 LayoutBlockFlow {SPAN} at (0,0) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,398) size 16x16 +layer at (216,108) size 16x16 LayoutBlockFlow {SPAN} at (0,0) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-1px-images-expected.txt b/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-1px-images-expected.txt index 10954e7..aabacd4 100644 --- a/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-1px-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-1px-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,52) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x288 -layer at (8,52) size 180x1000 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,52) size 180x1000 backgroundClip at (0,0) size 196x340 clip at (0,0) size 196x340 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1000 LayoutBlockFlow {DIV} at (0,16) size 180.25x116 LayoutBlockFlow {P} at (0,0) size 180.25x20 @@ -289,6 +289,6 @@ layer at (20,270) size 1x1 LayoutBlockFlow {SPAN} at (0,14) size 1x1 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,410) size 1x1 +layer at (216,122) size 1x1 LayoutBlockFlow {SPAN} at (0,14) size 1x1 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-block-flow-images-expected.txt b/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-block-flow-images-expected.txt index dbc530bb..cd8037b 100644 --- a/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-block-flow-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-block-flow-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,52) size 769x800 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x800 -layer at (8,52) size 180x3621 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (8,52) size 180x3621 backgroundClip at (0,0) size 196x585 clip at (0,0) size 196x585 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x3621 LayoutBlockFlow {DIV} at (0,16) size 180.25x401 LayoutBlockFlow {P} at (0,0) size 180.25x20 @@ -351,11 +351,11 @@ LayoutBlockFlow {SPAN} at (0,0) size 50x50 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (8,928) size 25x25 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 +layer at (204,128) size 25x25 clip at (205,129) size 23x23 LayoutBlockFlow {SPAN} at (0,0) size 25x25 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (8,993) size 50x50 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 +layer at (204,193) size 50x50 clip at (205,194) size 48x48 LayoutBlockFlow {SPAN} at (0,0) size 50x50 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-images-empty-alt-expected.txt b/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-images-empty-alt-expected.txt index bcdc326..71b6244 100644 --- a/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-images-empty-alt-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-images-empty-alt-expected.txt
@@ -9,7 +9,7 @@ layer at (8,52) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x408 -layer at (8,52) size 180x1632 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,52) size 180x1632 backgroundClip at (0,0) size 196x460 clip at (0,0) size 196x460 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1632 LayoutBlockFlow {DIV} at (0,16) size 180.25x156 LayoutBlockFlow {P} at (0,0) size 180.25x40
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-images-expected.txt b/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-images-expected.txt index e350081..1a5d4dc 100644 --- a/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-images-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/images/rendering-broken-images-expected.txt
@@ -9,7 +9,7 @@ layer at (8,52) size 769x800 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (0,36) size 769x800 LayoutMultiColumnSet (anonymous) at (0,0) size 769x408 -layer at (8,52) size 180x1552 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 +layer at (8,52) size 180x1552 backgroundClip at (0,0) size 196x460 clip at (0,0) size 196x460 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 180.25x1552 LayoutBlockFlow {DIV} at (0,16) size 180.25x136 LayoutBlockFlow {P} at (0,0) size 180.25x20 @@ -352,11 +352,11 @@ LayoutBlockFlow {SPAN} at (0,0) size 50x50 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,516) size 25x25 clip at (21,517) size 23x23 +layer at (216,108) size 25x25 clip at (217,109) size 23x23 LayoutBlockFlow {SPAN} at (0,0) size 25x25 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0 -layer at (20,546) size 50x50 clip at (21,547) size 48x48 +layer at (216,138) size 50x50 clip at (217,139) size 48x48 LayoutBlockFlow {SPAN} at (0,0) size 50x50 [border: (1px solid #C0C0C0)] LayoutImage (floating) {IMG} at (2,2) size 16x16 LayoutInline {SPAN} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/video-layer-crash-expected.txt b/third_party/WebKit/LayoutTests/platform/win/media/video-layer-crash-expected.txt index 1cea9e2a..5113d8d09 100644 --- a/third_party/WebKit/LayoutTests/platform/win/media/video-layer-crash-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/media/video-layer-crash-expected.txt
@@ -21,7 +21,7 @@ layer at (15,67) size 200x150 LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 200x150 LayoutBlockFlow {DIV} at (0,118) size 200x32 -layer at (15,67) size 200x108 +layer at (15,67) size 200x108 backgroundClip at (65,105) size 100x155 clip at (65,105) size 100x70 LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 200x108 layer at (12,225) size 206x156 LayoutVideo {VIDEO} at (4,181) size 206x156 [border: (3px solid #FF0000)]
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/video-transformed-expected.txt b/third_party/WebKit/LayoutTests/platform/win/media/video-transformed-expected.txt index ae159040..5c54c58 100644 --- a/third_party/WebKit/LayoutTests/platform/win/media/video-transformed-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/media/video-transformed-expected.txt
@@ -3,46 +3,37 @@ layer at (0,0) size 800x600 LayoutBlockFlow {HTML} at (0,0) size 800x600 LayoutBlockFlow {BODY} at (8,8) size 784x584 - LayoutBlockFlow {P} at (0,0) size 784x18 - LayoutText {#text} at (0,0) size 222x17 - text run at (0,0) width 222: "Test painting of transformed video" - LayoutBlockFlow (anonymous) at (0,34) size 784x330 - LayoutText {#text} at (0,92) size 4x17 - text run at (0,92) width 4: " " - LayoutBR {BR} at (210,106) size 0x0 - LayoutText {#text} at (0,202) size 4x17 - text run at (0,202) width 4: " " - LayoutBR {BR} at (210,216) size 0x0 - LayoutText {#text} at (0,312) size 4x17 - text run at (0,312) width 4: " " - LayoutBR {BR} at (210,326) size 0x0 -layer at (12,42) size 206x106 - LayoutVideo {VIDEO} at (4,0) size 206x106 [border: (3px solid #FF0000)] -layer at (15,45) size 200x100 - LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 200x100 - LayoutBlockFlow {DIV} at (0,68) size 200x32 -layer at (15,45) size 200x58 - LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 200x58 -layer at (15,113) size 200x32 - LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 200x32 [bgcolor=#FAFAFA] - LayoutButton {INPUT} at (0,0) size 32x32 -layer at (12,152) size 206x106 - LayoutVideo {VIDEO} at (4,110) size 206x106 [border: (3px solid #FF0000)] -layer at (15,155) size 200x100 - LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 200x100 - LayoutBlockFlow {DIV} at (0,68) size 200x32 -layer at (15,155) size 200x58 - LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 200x58 -layer at (15,223) size 200x32 - LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 200x32 [bgcolor=#FAFAFA] - LayoutButton {INPUT} at (0,0) size 32x32 -layer at (12,262) size 206x106 - LayoutVideo {VIDEO} at (4,220) size 206x106 [border: (3px solid #FF0000)] -layer at (15,265) size 200x100 - LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 200x100 - LayoutBlockFlow {DIV} at (0,68) size 200x32 -layer at (15,265) size 200x58 - LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 200x58 -layer at (15,333) size 200x32 - LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 200x32 [bgcolor=#FAFAFA] - LayoutButton {INPUT} at (0,0) size 32x32 + LayoutBlockFlow {P} at (0,0) size 784x20 + LayoutText {#text} at (0,0) size 204x19 + text run at (0,0) width 204: "Test painting of transformed video" + LayoutBlockFlow (anonymous) at (0,36) size 784x483 + LayoutText {#text} at (0,141) size 4x19 + text run at (0,141) width 4: " " + LayoutBR {BR} at (210,156) size 0x0 + LayoutText {#text} at (0,302) size 4x19 + text run at (0,302) width 4: " " + LayoutBR {BR} at (210,317) size 0x0 + LayoutText {#text} at (0,463) size 4x19 + text run at (0,463) width 4: " " + LayoutBR {BR} at (210,478) size 0x0 +layer at (12,44) size 206x156 + LayoutVideo {VIDEO} at (4,0) size 206x156 [border: (3px solid #FF0000)] +layer at (15,47) size 200x150 + LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 200x150 + LayoutBlockFlow {DIV} at (0,118) size 200x32 +layer at (15,47) size 200x108 + LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 200x108 +layer at (12,205) size 206x156 + LayoutVideo {VIDEO} at (4,161) size 206x156 [border: (3px solid #FF0000)] +layer at (15,208) size 200x150 + LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 200x150 + LayoutBlockFlow {DIV} at (0,118) size 200x32 +layer at (15,208) size 200x108 backgroundClip at (65,246) size 100x54 clip at (65,246) size 100x54 + LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 200x108 +layer at (12,366) size 206x156 + LayoutVideo {VIDEO} at (4,322) size 206x156 [border: (3px solid #FF0000)] +layer at (15,369) size 200x150 + LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 200x150 + LayoutBlockFlow {DIV} at (0,118) size 200x32 +layer at (15,369) size 200x108 + LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 200x108
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/video-zoom-controls-expected.txt b/third_party/WebKit/LayoutTests/platform/win/media/video-zoom-controls-expected.txt index f3d8419..f91536c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/media/video-zoom-controls-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/media/video-zoom-controls-expected.txt
@@ -30,7 +30,7 @@ LayoutBlockFlow {DIV} at (0,132) size 240x48 layer at (57,310) size 240x117 LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 240x117 -layer at (57,442) size 240x48 +layer at (57,442) size 240x48 backgroundClip at (43,421) size 245x88 clip at (57,442) size 231x48 LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 240x48 [bgcolor=#FAFAFA] LayoutButton {INPUT} at (0,0) size 48x48 LayoutFlexibleBox {DIV} at (48,0) size 35x48 [color=#5A5A5A] @@ -38,5 +38,5 @@ LayoutText {#text} at (0,13) size 35x21 text run at (0,13) width 35: "0:00" LayoutButton {INPUT} at (83,0) size 48x48 -layer at (188,442) size 48x48 backgroundClip at (188,442) size 48x27 clip at (188,442) size 48x27 +layer at (188,442) size 48x48 backgroundClip at (172,443) size 56x56 clip at (188,443) size 40x47 LayoutButton {INPUT} at (131,0) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/win/printing/thead-under-multicol-expected.txt b/third_party/WebKit/LayoutTests/platform/win/printing/thead-under-multicol-expected.txt index c95b25d..156cc9b 100644 --- a/third_party/WebKit/LayoutTests/platform/win/printing/thead-under-multicol-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/printing/thead-under-multicol-expected.txt
@@ -6,7 +6,7 @@ layer at (8,8) size 1545x2000 backgroundClip at (0,0) size 1561x1193 clip at (0,0) size 1561x1193 LayoutBlockFlow {DIV} at (0,0) size 1545x2000 LayoutMultiColumnSet (anonymous) at (0,0) size 1545x2000 -layer at (8,8) size 765x3840 backgroundClip at (0,0) size 1561x1193 clip at (0,0) size 1561x1193 +layer at (8,8) size 765x3840 backgroundClip at (0,0) size 781x1193 clip at (0,0) size 781x1193 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 764.50x3840 LayoutTable {TABLE} at (0,0) size 302x3840 LayoutTableSection {THEAD} at (0,0) size 302x31
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/hixie/mixed/006-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/hixie/mixed/006-expected.txt index c719124..e6dd3924 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/hixie/mixed/006-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/svg/hixie/mixed/006-expected.txt
@@ -11,7 +11,7 @@ LayoutSVGEllipse {circle} at (50,50) size 100x100 [fill={[type=SOLID] [color=#008000]}] [cx=100.00] [cy=100.00] [r=50.00] LayoutSVGForeignObject {foreignObject} at (0,0) size 200x200 LayoutText {#text} at (0,0) size 0x0 -layer at (8,8) size 200x200 +layer at (16,216) size 200x200 LayoutBlockFlow (positioned) {div} at (8,8) size 200x200 [bgcolor=#FFFFFF] LayoutText {#text} at (0,0) size 189x39 text run at (0,0) width 181: "There should be a green circle"
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/transforms/svg-css-transforms-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/transforms/svg-css-transforms-expected.txt index 5cfcbcc..307d537 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/transforms/svg-css-transforms-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/svg/transforms/svg-css-transforms-expected.txt
@@ -33,7 +33,7 @@ LayoutBlockFlow (relative positioned) {div} at (10,333.63) size 200x200 [bgcolor=#C0C0C0] [border: (1px solid #000000)] layer at (29,353) size 60x60 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px dotted #000000)] -layer at (30,354) size 60x60 +layer at (105,379) size 60x60 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px dotted #000000)] layer at (31,355) size 60x60 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px solid #0000FF)]
diff --git a/third_party/WebKit/LayoutTests/platform/win/transforms/2d/compound-transforms-vs-containers-expected.txt b/third_party/WebKit/LayoutTests/platform/win/transforms/2d/compound-transforms-vs-containers-expected.txt index 4dbd356..936e63d 100644 --- a/third_party/WebKit/LayoutTests/platform/win/transforms/2d/compound-transforms-vs-containers-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/transforms/2d/compound-transforms-vs-containers-expected.txt
@@ -14,7 +14,7 @@ text run at (0,0) width 81: "Translate first" layer at (79,129) size 80x80 LayoutBlockFlow (positioned) {DIV} at (1,53) size 80x80 -layer at (79,129) size 80x80 +layer at (154,149) size 80x80 LayoutBlockFlow (positioned) {DIV} at (0,0) size 80x80 layer at (79,129) size 80x80 LayoutBlockFlow (positioned) {DIV} at (0,0) size 80x80
diff --git a/third_party/WebKit/LayoutTests/platform/win/transforms/svg-vs-css-expected.txt b/third_party/WebKit/LayoutTests/platform/win/transforms/svg-vs-css-expected.txt index 55ce745d..82ea4e4 100644 --- a/third_party/WebKit/LayoutTests/platform/win/transforms/svg-vs-css-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/transforms/svg-vs-css-expected.txt
@@ -42,7 +42,7 @@ LayoutBlockFlow (relative positioned) {div} at (10,333.63) size 200x200 [bgcolor=#C0C0C0] [border: (1px solid #000000)] layer at (29,353) size 60x60 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px dotted #000000)] -layer at (30,354) size 60x60 +layer at (105,379) size 60x60 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px dotted #000000)] layer at (31,355) size 60x60 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px solid #0000FF)]
diff --git a/third_party/WebKit/LayoutTests/platform/win/transforms/transform-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/win/transforms/transform-overflow-expected.txt index 64ced4a..a376db7be 100644 --- a/third_party/WebKit/LayoutTests/platform/win/transforms/transform-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/transforms/transform-overflow-expected.txt
@@ -8,5 +8,5 @@ text run at (0,0) width 240: "You should see one green square above" layer at (50,50) size 100x100 LayoutBlockFlow (positioned) {DIV} at (50,50) size 100x100 [bgcolor=#FF0000] -layer at (0,0) size 200x200 +layer at (0,0) size 200x200 backgroundClip at (50,50) size 100x100 clip at (50,50) size 100x100 LayoutBlockFlow {DIV} at (0,0) size 200x200 [bgcolor=#008000]
diff --git a/third_party/WebKit/LayoutTests/platform/win/transforms/transformed-focused-text-input-expected.txt b/third_party/WebKit/LayoutTests/platform/win/transforms/transformed-focused-text-input-expected.txt index efd49d3..3322f58f 100644 --- a/third_party/WebKit/LayoutTests/platform/win/transforms/transformed-focused-text-input-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/transforms/transformed-focused-text-input-expected.txt
@@ -7,6 +7,6 @@ LayoutBlockFlow {DIV} at (0,0) size 784x22 LayoutTextControl {INPUT} at (0,0) size 173x22 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] LayoutText {#text} at (0,0) size 0x0 -layer at (10,11) size 169x16 +layer at (10,11) size 169x16 backgroundClip at (7,11) size 169x45 clip at (10,11) size 166x16 LayoutBlockFlow {DIV} at (2,3) size 169x16 caret: position 0 of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of child 1 {DIV} of body
diff --git a/third_party/WebKit/LayoutTests/platform/win/transforms/transforms-with-opacity-expected.txt b/third_party/WebKit/LayoutTests/platform/win/transforms/transforms-with-opacity-expected.txt index 963d8f1..a4bb4be 100644 --- a/third_party/WebKit/LayoutTests/platform/win/transforms/transforms-with-opacity-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/transforms/transforms-with-opacity-expected.txt
@@ -10,5 +10,5 @@ LayoutBlockFlow {DIV} at (0,20) size 120x120 [bgcolor=#87CEEB] [border: (10px solid #000000)] layer at (18,38) size 120x120 LayoutBlockFlow {DIV} at (10,10) size 120x120 [border: (10px solid #000000)] -layer at (28,48) size 120x120 +layer at (148,38) size 120x120 LayoutBlockFlow {DIV} at (10,10) size 120x120 [border: (10px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/tiled-mask-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/tiled-mask-expected.txt deleted file mode 100644 index 9a86ebd7..0000000 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/tiled-mask-expected.txt +++ /dev/null
@@ -1,28 +0,0 @@ -layer at (0,0) size 800x600 clip at (0,0) size 785x585 scrollX 31.00 scrollY 239.00 scrollWidth 816 scrollHeight 824 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 785x824 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 - LayoutBlockFlow {HTML} at (0,0) size 785x824 - LayoutBlockFlow {BODY} at (8,8) size 769x808 -layer at (8,8) size 808x808 backgroundClip at (8,8) size 777x577 clip at (12,12) size 773x573 scrollWidth 2000 scrollHeight 2000 - LayoutBlockFlow {DIV} at (0,0) size 808x808 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (12,12) size 2000x2000 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 - LayoutBlockFlow (positioned) {DIV} at (4,4) size 2000x2000 [bgcolor=#FFEFD5] - LayoutText {#text} at (0,0) size 117x19 - text run at (0,0) width 117: "There's stuff in here" -layer at (12,12) size 50x50 - LayoutBlockFlow (positioned) {DIV} at (4,4) size 50x50 [bgcolor=#800000] -layer at (12,712) size 100x100 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 - LayoutBlockFlow (positioned) {DIV} at (4,704) size 100x100 [bgcolor=#FFA500] -layer at (-48,82) size 100x100 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 - LayoutBlockFlow (positioned) {DIV} at (-56,74) size 100x100 [bgcolor=#008000] -layer at (132,712) size 100x100 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 - LayoutBlockFlow (positioned) {DIV} at (124,704) size 100x100 [bgcolor=#0000FF] -layer at (762,12) size 100x100 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 - LayoutBlockFlow (positioned) {DIV} at (754,4) size 100x100 [bgcolor=#FFFF00] -layer at (92,312) size 100x100 - LayoutBlockFlow (positioned) {DIV} at (84,304) size 100x100 -layer at (32,412) size 100x100 - LayoutBlockFlow (positioned) {DIV} at (24,404) size 100x100 [bgcolor=#FF0000] -layer at (762,762) size 50x50 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 - LayoutBlockFlow (positioned) {DIV} at (754,754) size 50x50 [bgcolor=#800080] -scrolled to 31,239
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/forms/text/text-font-height-mismatch-expected.txt b/third_party/WebKit/LayoutTests/platform/win7/fast/forms/text/text-font-height-mismatch-expected.txt deleted file mode 100644 index c90355c..0000000 --- a/third_party/WebKit/LayoutTests/platform/win7/fast/forms/text/text-font-height-mismatch-expected.txt +++ /dev/null
@@ -1,31 +0,0 @@ -layer at (0,0) size 800x600 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 800x142 - LayoutBlockFlow {HTML} at (0,0) size 800x142 - LayoutBlockFlow {BODY} at (8,16) size 784x118 - LayoutBlockFlow {P} at (0,0) size 784x18 - LayoutText {#text} at (0,0) size 273x17 - text run at (0,0) width 273: "Editable text should be centered vertically." - LayoutBlockFlow {DIV} at (0,34) size 784x28 - LayoutTextControl {INPUT} at (0,0) size 236x28 [bgcolor=#FFFFFF] [border: (1px solid #000000)] - LayoutTextControl {INPUT} at (236,0) size 236x28 [bgcolor=#FFFFFF] [border: (1px solid #000000)] - LayoutBlockFlow {DIV} at (0,62) size 784x28 - LayoutTextControl {INPUT} at (0,0) size 294x28 [bgcolor=#FFFFFF] [border: (1px solid #000000)] - LayoutBlockFlow {DIV} at (0,90) size 784x28 - LayoutTextControl {INPUT} at (0,0) size 199x28 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] -layer at (9,51) size 234x26 - LayoutBlockFlow {DIV} at (1,1) size 234x26 - LayoutText {#text} at (0,0) size 74x24 - text run at (0,0) width 74: "\x{3075} ABCgjy" -layer at (245,51) size 234x26 - LayoutBlockFlow {DIV} at (1,1) size 234x26 - LayoutText {#text} at (0,0) size 74x24 - text run at (0,0) width 74: "\x{3075} ABCgjy" -layer at (9,78) size 292x28 - LayoutBlockFlow {DIV} at (1,0) size 292x28 - LayoutText {#text} at (0,0) size 81x27 - text run at (0,0) width 81: "ABCgjy" -layer at (10,111) size 195x18 - LayoutBlockFlow {DIV} at (2,5) size 195x18 - LayoutText {#text} at (0,0) size 54x17 - text run at (0,0) width 54: "ABCgjy"
diff --git a/third_party/WebKit/LayoutTests/platform/win7/media/video-transformed-expected.txt b/third_party/WebKit/LayoutTests/platform/win7/media/video-transformed-expected.txt deleted file mode 100644 index c6d289e..0000000 --- a/third_party/WebKit/LayoutTests/platform/win7/media/video-transformed-expected.txt +++ /dev/null
@@ -1,39 +0,0 @@ -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 - LayoutBlockFlow {P} at (0,0) size 784x20 - LayoutText {#text} at (0,0) size 204x19 - text run at (0,0) width 204: "Test painting of transformed video" - LayoutBlockFlow (anonymous) at (0,36) size 784x483 - LayoutText {#text} at (0,141) size 4x19 - text run at (0,141) width 4: " " - LayoutBR {BR} at (210,156) size 0x0 - LayoutText {#text} at (0,302) size 4x19 - text run at (0,302) width 4: " " - LayoutBR {BR} at (210,317) size 0x0 - LayoutText {#text} at (0,463) size 4x19 - text run at (0,463) width 4: " " - LayoutBR {BR} at (210,478) size 0x0 -layer at (12,44) size 206x156 - LayoutVideo {VIDEO} at (4,0) size 206x156 [border: (3px solid #FF0000)] -layer at (15,47) size 200x150 - LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 200x150 - LayoutBlockFlow {DIV} at (0,118) size 200x32 -layer at (15,47) size 200x108 - LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 200x108 -layer at (12,205) size 206x156 - LayoutVideo {VIDEO} at (4,161) size 206x156 [border: (3px solid #FF0000)] -layer at (15,208) size 200x150 - LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 200x150 - LayoutBlockFlow {DIV} at (0,118) size 200x32 -layer at (15,208) size 200x108 - LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 200x108 -layer at (12,366) size 206x156 - LayoutVideo {VIDEO} at (4,322) size 206x156 [border: (3px solid #FF0000)] -layer at (15,369) size 200x150 - LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 200x150 - LayoutBlockFlow {DIV} at (0,118) size 200x32 -layer at (15,369) size 200x108 - LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 200x108
diff --git a/third_party/WebKit/LayoutTests/platform/win7/media/video-zoom-controls-expected.txt b/third_party/WebKit/LayoutTests/platform/win7/media/video-zoom-controls-expected.txt deleted file mode 100644 index 5d2df032..0000000 --- a/third_party/WebKit/LayoutTests/platform/win7/media/video-zoom-controls-expected.txt +++ /dev/null
@@ -1,50 +0,0 @@ -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 (12,12) size 776x543 - LayoutBlockFlow {P} at (0,0) size 776x27 - LayoutText {#text} at (0,0) size 278x26 - text run at (0,0) width 278: "Zoomed video with controls." -layer at (57,84) size 240x180 - LayoutVideo {VIDEO} at (45,72) size 240x180 -layer at (57,84) size 240x180 - LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 240x180 - LayoutBlockFlow {DIV} at (0,132) size 240x48 -layer at (57,84) size 240x117 - LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 240x117 -layer at (57,216) size 240x48 scrollWidth 262 scrollHeight 60 - LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 240x48 [bgcolor=#FAFAFA] - LayoutButton {INPUT} at (0,0) size 48x48 - LayoutFlexibleBox {DIV} at (48,0) size 26.59x48 [color=#5A5A5A] - LayoutBlockFlow (anonymous) at (0,0) size 26.59x48 - LayoutText {#text} at (0,13) size 27x21 - text run at (0,13) width 27: "0:00" - LayoutSlider {INPUT} at (101.59,22.50) size 37.50x3 - LayoutFlexibleBox {DIV} at (0,0) size 37.50x3 - LayoutBlockFlow {DIV} at (-27,-34.50) size 91.50x72 - LayoutBlockFlow {DIV} at (0,0) size 54x72 - LayoutButton {INPUT} at (166.09,0) size 48x48 -layer at (271,216) size 48x48 backgroundClip at (271,216) size 26x48 clip at (271,216) size 26x48 - LayoutButton {INPUT} at (214.09,0) size 48x48 -layer at (57,309) size 240x180 - LayoutVideo {VIDEO} at (45,297) size 240x180 -layer at (57,309) size 240x180 - LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 240x180 - LayoutBlockFlow {DIV} at (0,132) size 240x48 -layer at (57,309) size 240x117 - LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 240x117 -layer at (57,441) size 240x48 scrollWidth 262 scrollHeight 60 - LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 240x48 [bgcolor=#FAFAFA] - LayoutButton {INPUT} at (0,0) size 48x48 - LayoutFlexibleBox {DIV} at (48,0) size 26.59x48 [color=#5A5A5A] - LayoutBlockFlow (anonymous) at (0,0) size 26.59x48 - LayoutText {#text} at (0,13) size 27x21 - text run at (0,13) width 27: "0:00" - LayoutSlider {INPUT} at (101.59,22.50) size 37.50x3 - LayoutFlexibleBox {DIV} at (0,0) size 37.50x3 - LayoutBlockFlow {DIV} at (-27,-34.50) size 91.50x72 - LayoutBlockFlow {DIV} at (0,0) size 54x72 - LayoutButton {INPUT} at (166.09,0) size 48x48 -layer at (271,441) size 48x48 backgroundClip at (271,441) size 21x27 clip at (271,441) size 21x27 - LayoutButton {INPUT} at (214.09,0) size 48x48
diff --git a/third_party/WebKit/LayoutTests/svg/overflow/overflow-on-foreignObject-expected.txt b/third_party/WebKit/LayoutTests/svg/overflow/overflow-on-foreignObject-expected.txt index cb30d6b..84722eb 100644 --- a/third_party/WebKit/LayoutTests/svg/overflow/overflow-on-foreignObject-expected.txt +++ b/third_party/WebKit/LayoutTests/svg/overflow/overflow-on-foreignObject-expected.txt
@@ -3,5 +3,5 @@ layer at (0,0) size 500x500 LayoutSVGRoot {svg} at (0,0) size 500x500 LayoutSVGForeignObject {foreignObject} at (100,100) size 300x300 -layer at (0,0) size 6006x6006 backgroundClip at (0,0) size 800x600 clip at (0,0) size 800x600 +layer at (100,100) size 6006x6006 backgroundClip at (0,0) size 500x500 clip at (0,0) size 500x500 LayoutBlockFlow (positioned) {html:div} at (0,0) size 6006x6006 [bgcolor=#008000] [border: (3px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/mask-with-filter-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/mask-with-filter-expected.txt deleted file mode 100644 index 61a1498..0000000 --- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/mask-with-filter-expected.txt +++ /dev/null
@@ -1,12 +0,0 @@ -layer at (0,0) size 800x600 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 800x228 - LayoutBlockFlow {HTML} at (0,0) size 800x228 - LayoutBlockFlow {BODY} at (8,8) size 784x212 - LayoutText {#text} at (0,0) size 0x0 -layer at (108,8) size 208x208 - LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 208x208 -layer at (108,8) size 208x208 clip at (112,12) size 200x200 scrollWidth 500 scrollHeight 500 - LayoutBlockFlow {DIV} at (0,0) size 208x208 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (112,12) size 500x500 backgroundClip at (112,12) size 200x200 clip at (112,12) size 200x200 - LayoutBlockFlow {DIV} at (4,4) size 500x500 [bgcolor=#000000]
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/nested-render-surfaces-with-rotation-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/nested-render-surfaces-with-rotation-expected.txt deleted file mode 100644 index 5945cc4..0000000 --- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/nested-render-surfaces-with-rotation-expected.txt +++ /dev/null
@@ -1,31 +0,0 @@ -layer at (0,0) size 800x600 clip at (0,0) size 785x585 scrollWidth 794 scrollHeight 2018 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 785x2018 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 - LayoutBlockFlow {HTML} at (0,0) size 785x2018 - LayoutBlockFlow {BODY} at (8,10) size 769x2000 -layer at (8,10) size 769x418 - LayoutBlockFlow {DIV} at (0,0) size 769x418 -layer at (8,10) size 769x418 transparent - LayoutBlockFlow {DIV} at (0,0) size 769x418 -layer at (8,120) size 308x308 clip at (12,124) size 285x285 scrollWidth 339 scrollHeight 448 - LayoutBlockFlow {DIV} at (0,110) size 308x308 [border: (4px solid #000000)] -layer at (12,134) size 285x418 backgroundClip at (22,91) size 285x285 clip at (22,91) size 285x285 transparent - LayoutBlockFlow {DIV} at (4,14) size 285x418 -layer at (12,244) size 308x308 backgroundClip at (22,244) size 285x132 clip at (22,248) size 279x128 scrollHeight 560 - LayoutBlockFlow {DIV} at (0,110) size 308x308 [border: (4px solid #000000)] -layer at (62,234) size 200x200 - LayoutBlockFlow (positioned) {DIV} at (50,100) size 200x200 [bgcolor=#008000] -layer at (22,134) size 100x100 - LayoutBlockFlow (relative positioned) zI: 1 {DIV} at (10,0) size 100x100 [bgcolor=#0000FF] -layer at (26,258) size 100x100 - LayoutBlockFlow (relative positioned) zI: 1 {DIV} at (14,14) size 100x100 [bgcolor=#0000FF] -layer at (26,368) size 100x100 backgroundClip at (22,237) size 263x139 clip at (22,237) size 263x139 - LayoutBlockFlow (relative positioned) zI: 1 {DIV} at (14,124) size 100x100 [bgcolor=#0000FF] -layer at (26,478) size 100x100 backgroundClip at (22,237) size 263x139 clip at (22,237) size 263x139 - LayoutBlockFlow (relative positioned) zI: 1 {DIV} at (14,234) size 100x100 [bgcolor=#0000FF] -layer at (26,588) size 100x100 backgroundClip at (22,237) size 263x139 clip at (22,237) size 263x139 - LayoutBlockFlow (relative positioned) zI: 1 {DIV} at (14,344) size 100x100 [bgcolor=#0000FF] -layer at (26,698) size 100x100 backgroundClip at (22,237) size 263x139 clip at (22,237) size 263x139 - LayoutBlockFlow (relative positioned) zI: 1 {DIV} at (14,454) size 100x100 [bgcolor=#0000FF] -layer at (18,10) size 100x100 - LayoutBlockFlow (relative positioned) zI: 1 {DIV} at (10,0) size 100x100 [bgcolor=#0000FF]
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-overflow-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-overflow-expected.txt deleted file mode 100644 index 476a2a9..0000000 --- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-overflow-expected.txt +++ /dev/null
@@ -1,15 +0,0 @@ -layer at (0,0) size 800x600 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 800x466 - LayoutBlockFlow {HTML} at (0,0) size 800x466 -layer at (8,8) size 784x450 - LayoutBlockFlow {BODY} at (8,8) size 784x450 [bgcolor=#000000] -layer at (8,8) size 150x150 clip at (8,8) size 135x135 scrollHeight 400 - LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 150x150 [bgcolor=#FFFFFF] - LayoutBlockFlow {DIV} at (0,0) size 135x400 -layer at (9,168) size 150x150 clip at (9,168) size 135x135 scrollHeight 400 - LayoutBlockFlow (relative positioned) {DIV} at (0,150) size 150x150 [bgcolor=#FFFFFF] - LayoutBlockFlow {DIV} at (0,0) size 135x400 -layer at (10,328) size 150x150 clip at (10,328) size 135x135 scrollHeight 400 - LayoutBlockFlow (relative positioned) {DIV} at (0,300) size 150x150 [bgcolor=#FFFFFF] - LayoutBlockFlow {DIV} at (0,0) size 135x400
diff --git a/third_party/WebKit/LayoutTests/virtual/spv175/compositing/masks/mask-with-added-filters-expected.txt b/third_party/WebKit/LayoutTests/virtual/spv175/compositing/masks/mask-with-added-filters-expected.txt new file mode 100644 index 0000000..304050e --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/spv175/compositing/masks/mask-with-added-filters-expected.txt
@@ -0,0 +1,23 @@ +layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollHeight 646 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 785x646 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 + LayoutBlockFlow {HTML} at (0,0) size 785x646 + LayoutBlockFlow {BODY} at (8,16) size 769x622 + LayoutBlockFlow {P} at (0,0) size 769x40 + LayoutText {#text} at (0,0) size 748x39 + text run at (0,0) width 748: "Testing masks with filters on compositing layers. Left and right columns should look almost the same, composited filter" + text run at (0,20) width 139: "look slightly different." + LayoutBlockFlow (anonymous) at (0,56) size 769x566 + LayoutText {#text} at (262,546) size 4x19 + text run at (262,546) width 4: " " + LayoutText {#text} at (0,0) size 0x0 +layer at (8,72) size 262x562 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 + LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 262x562 [border: (1px solid #000000)] + LayoutText {#text} at (0,0) size 0x0 +layer at (9,73) size 260x560 backgroundClip at (9,73) size 260x527 clip at (9,73) size 260x527 transparent + LayoutImage {IMG} at (1,1) size 260x560 +layer at (274,72) size 262x562 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 + LayoutBlockFlow (relative positioned) {DIV} at (266,0) size 262x562 [border: (1px solid #000000)] + LayoutText {#text} at (0,0) size 0x0 +layer at (275,73) size 260x560 backgroundClip at (275,73) size 260x527 clip at (275,73) size 260x527 transparent + LayoutImage {IMG} at (1,1) size 260x560
diff --git a/third_party/WebKit/LayoutTests/virtual/spv175/compositing/masks/mask-with-removed-filters-expected.txt b/third_party/WebKit/LayoutTests/virtual/spv175/compositing/masks/mask-with-removed-filters-expected.txt new file mode 100644 index 0000000..97d01c58 --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/spv175/compositing/masks/mask-with-removed-filters-expected.txt
@@ -0,0 +1,20 @@ +layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollHeight 626 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 785x626 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 + LayoutBlockFlow {HTML} at (0,0) size 785x626 + LayoutBlockFlow {BODY} at (8,16) size 769x602 + LayoutBlockFlow {P} at (0,0) size 769x20 + LayoutText {#text} at (0,0) size 594x19 + text run at (0,0) width 594: "Testing masks with filters on compositing layers. Left and right columns should look the same." + LayoutBlockFlow (anonymous) at (0,36) size 769x566 + LayoutBlockFlow {DIV} at (0,0) size 262x562 [border: (1px solid #000000)] + LayoutText {#text} at (0,0) size 0x0 + LayoutText {#text} at (262,546) size 4x19 + text run at (262,546) width 4: " " + LayoutBlockFlow {DIV} at (266,0) size 262x562 [border: (1px solid #000000)] + LayoutText {#text} at (0,0) size 0x0 + LayoutText {#text} at (0,0) size 0x0 +layer at (9,53) size 260x560 backgroundClip at (9,53) size 260x547 clip at (9,53) size 260x547 transparent + LayoutImage {IMG} at (1,1) size 260x560 +layer at (275,53) size 260x560 backgroundClip at (275,53) size 260x547 clip at (275,53) size 260x547 transparent + LayoutImage {IMG} at (1,1) size 260x560
diff --git a/third_party/WebKit/LayoutTests/virtual/spv175/compositing/masks/masked-ancestor-expected.txt b/third_party/WebKit/LayoutTests/virtual/spv175/compositing/masks/masked-ancestor-expected.txt new file mode 100644 index 0000000..a8a7e4a --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/spv175/compositing/masks/masked-ancestor-expected.txt
@@ -0,0 +1,20 @@ +layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollHeight 619 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 785x619 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 + LayoutBlockFlow {HTML} at (0,0) size 785x619 + LayoutBlockFlow {BODY} at (8,8) size 769x603 + LayoutBlockFlow {P} at (0,0) size 769x20 + LayoutText {#text} at (0,0) size 523x19 + text run at (0,0) width 523: "Testing masks on compositing layers. Left and right columns should look the same." + LayoutBlockFlow (anonymous) at (0,36) size 769x567 + LayoutText {#text} at (262,547) size 4x19 + text run at (262,547) width 4: " " + LayoutText {#text} at (0,0) size 0x0 +layer at (8,44) size 262x562 backgroundClip at (8,44) size 262x556 clip at (8,44) size 262x556 transparent + LayoutBlockFlow {DIV} at (0,0) size 262x562 [border: (1px solid #000000)] +layer at (39,75) size 200x200 + LayoutBlockFlow (relative positioned) {DIV} at (31,31) size 200x200 [bgcolor=#6464FFCC] [border: (10px solid #000000)] +layer at (274,44) size 262x562 backgroundClip at (274,44) size 262x556 clip at (274,44) size 262x556 transparent + LayoutBlockFlow {DIV} at (266,0) size 262x562 [border: (1px solid #000000)] +layer at (305,75) size 200x200 + LayoutBlockFlow (relative positioned) {DIV} at (31,31) size 200x200 [bgcolor=#6464FFCC] [border: (10px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/mask-with-filter-expected.txt b/third_party/WebKit/LayoutTests/virtual/spv175/compositing/overflow/mask-with-filter-expected.txt similarity index 84% rename from third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/mask-with-filter-expected.txt rename to third_party/WebKit/LayoutTests/virtual/spv175/compositing/overflow/mask-with-filter-expected.txt index 3974072b..b7278d0c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/mask-with-filter-expected.txt +++ b/third_party/WebKit/LayoutTests/virtual/spv175/compositing/overflow/mask-with-filter-expected.txt
@@ -8,5 +8,5 @@ LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 208x208 layer at (108,8) size 208x208 clip at (112,12) size 200x200 scrollWidth 500 scrollHeight 500 LayoutBlockFlow {DIV} at (0,0) size 208x208 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (112,12) size 500x500 backgroundClip at (112,12) size 200x200 clip at (112,12) size 200x200 +layer at (112,12) size 500x500 backgroundClip at (27,13) size 436x236 clip at (27,13) size 436x236 LayoutBlockFlow {DIV} at (4,4) size 500x500 [bgcolor=#000000]
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-mask-expected.txt b/third_party/WebKit/LayoutTests/virtual/spv175/compositing/overflow/scaled-mask-expected.txt similarity index 76% rename from third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-mask-expected.txt rename to third_party/WebKit/LayoutTests/virtual/spv175/compositing/overflow/scaled-mask-expected.txt index 0737c9c..c7afb2a3 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-mask-expected.txt +++ b/third_party/WebKit/LayoutTests/virtual/spv175/compositing/overflow/scaled-mask-expected.txt
@@ -4,17 +4,17 @@ LayoutBlockFlow {HTML} at (0,0) size 800x52 LayoutBlockFlow {BODY} at (8,16) size 784x20 LayoutBlockFlow {P} at (0,0) size 784x20 - LayoutText {#text} at (0,0) size 492x19 - text run at (0,0) width 492: "Testing masks on compositing layers. Top and bottom rows should look the same." + LayoutText {#text} at (0,0) size 515x19 + text run at (0,0) width 515: "Testing masks on compositing layers. Top and bottom rows should look the same." layer at (8,52) size 0x0 LayoutBlockFlow (positioned) {DIV} at (8,52) size 0x0 layer at (8,52) size 208x208 clip at (12,56) size 200x200 scrollWidth 500 scrollHeight 500 LayoutBlockFlow (positioned) {DIV} at (0,0) size 208x208 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (12,56) size 500x500 backgroundClip at (12,56) size 200x200 clip at (12,56) size 200x200 +layer at (12,56) size 500x500 backgroundClip at (16,56) size 400x200 clip at (16,56) size 400x200 LayoutBlockFlow (positioned) {DIV} at (4,4) size 500x500 [bgcolor=#000000] layer at (8,300) size 0x0 LayoutBlockFlow (positioned) {DIV} at (8,300) size 0x0 layer at (8,300) size 208x208 clip at (12,304) size 200x200 scrollWidth 500 scrollHeight 500 LayoutBlockFlow (positioned) {DIV} at (0,0) size 208x208 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (12,304) size 500x500 backgroundClip at (12,304) size 200x200 clip at (12,304) size 200x200 +layer at (12,304) size 500x500 backgroundClip at (16,304) size 400x200 clip at (16,304) size 400x200 LayoutBlockFlow (positioned) {DIV} at (4,4) size 500x500 [bgcolor=#000000]
diff --git a/third_party/WebKit/LayoutTests/virtual/spv175/compositing/overflow/tiled-mask-expected.txt b/third_party/WebKit/LayoutTests/virtual/spv175/compositing/overflow/tiled-mask-expected.txt index 1a6c5c0a..ca6e510 100644 --- a/third_party/WebKit/LayoutTests/virtual/spv175/compositing/overflow/tiled-mask-expected.txt +++ b/third_party/WebKit/LayoutTests/virtual/spv175/compositing/overflow/tiled-mask-expected.txt
@@ -5,19 +5,19 @@ LayoutBlockFlow {BODY} at (8,8) size 769x808 layer at (-23,-231) size 808x808 backgroundClip at (0,0) size 785x577 clip at (0,0) size 781x573 scrollWidth 2000 scrollHeight 2000 LayoutBlockFlow {DIV} at (0,0) size 808x808 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (-19,-227) size 2000x2000 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (-19,-227) size 2000x2000 backgroundClip at (0,0) size 781x573 clip at (0,0) size 781x573 LayoutBlockFlow (positioned) {DIV} at (4,4) size 2000x2000 [bgcolor=#FFEFD5] LayoutText {#text} at (0,0) size 125x19 text run at (0,0) width 125: "There's stuff in here" -layer at (-19,-227) size 50x50 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (-19,-227) size 50x50 backgroundClip at (0,0) size 781x573 clip at (0,0) size 781x573 LayoutBlockFlow (positioned) {DIV} at (4,4) size 50x50 [bgcolor=#800000] -layer at (-19,473) size 100x100 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (-19,473) size 100x100 backgroundClip at (0,0) size 781x573 clip at (0,0) size 781x573 LayoutBlockFlow (positioned) {DIV} at (4,704) size 100x100 [bgcolor=#FFA500] -layer at (-79,-157) size 100x100 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (-79,-157) size 100x100 backgroundClip at (0,0) size 781x573 clip at (0,0) size 781x573 LayoutBlockFlow (positioned) {DIV} at (-56,74) size 100x100 [bgcolor=#008000] layer at (101,473) size 100x100 LayoutBlockFlow (positioned) {DIV} at (124,704) size 100x100 [bgcolor=#0000FF] -layer at (731,-227) size 100x100 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 +layer at (731,-227) size 100x100 backgroundClip at (0,0) size 781x573 clip at (0,0) size 781x573 LayoutBlockFlow (positioned) {DIV} at (754,4) size 100x100 [bgcolor=#FFFF00] layer at (61,73) size 100x100 LayoutBlockFlow (positioned) {DIV} at (84,304) size 100x100
diff --git a/third_party/WebKit/LayoutTests/virtual/spv175/compositing/reflections/nested-reflection-on-overflow-expected.txt b/third_party/WebKit/LayoutTests/virtual/spv175/compositing/reflections/nested-reflection-on-overflow-expected.txt new file mode 100644 index 0000000..4f2cdbe --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/spv175/compositing/reflections/nested-reflection-on-overflow-expected.txt
@@ -0,0 +1,40 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x308 + LayoutBlockFlow {HTML} at (0,0) size 800x308 + LayoutBlockFlow {BODY} at (8,16) size 784x272 + LayoutBlockFlow {P} at (0,0) size 784x20 + LayoutText {#text} at (0,0) size 448x19 + text run at (0,0) width 448: "You should see the original and three copies of the green box with text." +layer at (28,56) size 122x232 + LayoutBlockFlow {DIV} at (20,40) size 122x232 [border: (1px solid #000000)] +layer at (39,67) size 100x100 + LayoutBlockFlow {DIV} at (11,11) size 100x100 [bgcolor=#008000] +layer at (39,67) size 100x100 clip at (39,67) size 85x85 scrollHeight 500 + LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 100x100 +layer at (39,67) size 85x500 backgroundClip at (39,67) size 232x210 clip at (39,67) size 232x210 + LayoutBlockFlow {DIV} at (0,0) size 85x500 + LayoutText {#text} at (0,0) size 84x459 + text run at (0,0) width 84: "Lorem ipsum" + text run at (0,20) width 51: "dolor sit" + text run at (0,40) width 34: "amet," + text run at (0,60) width 71: "consectetur" + text run at (0,80) width 68: "adipisicing" + text run at (0,100) width 68: "elit, sed do" + text run at (0,120) width 53: "eiusmod" + text run at (0,140) width 44: "tempor" + text run at (0,160) width 79: "incididunt ut" + text run at (0,180) width 54: "labore et" + text run at (0,200) width 40: "dolore" + text run at (0,220) width 42: "magna" + text run at (0,240) width 62: "aliqua. Ut" + text run at (0,260) width 50: "enim ad" + text run at (0,280) width 40: "minim" + text run at (0,300) width 80: "veniam, quis" + text run at (0,320) width 47: "nostrud" + text run at (0,340) width 73: "exercitation" + text run at (0,360) width 50: "ullamco" + text run at (0,380) width 84: "laboris nisi ut" + text run at (0,400) width 80: "aliquip ex ea" + text run at (0,420) width 63: "commodo" + text run at (0,440) width 67: "consequat."
diff --git a/third_party/WebKit/LayoutTests/virtual/spv175/paint/invalidation/svg/deep-dynamic-updates-expected.txt b/third_party/WebKit/LayoutTests/virtual/spv175/paint/invalidation/svg/deep-dynamic-updates-expected.txt new file mode 100644 index 0000000..6f2b49c --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/spv175/paint/invalidation/svg/deep-dynamic-updates-expected.txt
@@ -0,0 +1,34 @@ +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [800, 600], + "backgroundColor": "#FFFFFF" + }, + { + "name": "Scrolling Layer", + "bounds": [800, 600], + "drawsContent": false + }, + { + "name": "Scrolling Contents Layer", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF", + "paintInvalidations": [ + { + "object": "LayoutSVGRect rect", + "rect": [24, 24, 402, 402], + "reason": "SVG resource change" + } + ] + } + ], + "objectPaintInvalidations": [ + { + "object": "LayoutSVGRect rect", + "reason": "SVG resource change" + } + ] +} +
diff --git a/third_party/WebKit/LayoutTests/virtual/spv175/printing/thead-under-multicol-expected.txt b/third_party/WebKit/LayoutTests/virtual/spv175/printing/thead-under-multicol-expected.txt index 2f045ba8..f95e21d 100644 --- a/third_party/WebKit/LayoutTests/virtual/spv175/printing/thead-under-multicol-expected.txt +++ b/third_party/WebKit/LayoutTests/virtual/spv175/printing/thead-under-multicol-expected.txt
@@ -6,7 +6,7 @@ layer at (8,8) size 1545x2000 backgroundClip at (0,0) size 800x600 clip at (0,0) size 800x600 LayoutBlockFlow {DIV} at (0,0) size 1545x2000 LayoutMultiColumnSet (anonymous) at (0,0) size 1545x2000 -layer at (8,8) size 765x3840 backgroundClip at (0,0) size 800x600 clip at (0,0) size 800x600 +layer at (8,8) size 765x3840 backgroundClip at (0,0) size 781x600 clip at (0,0) size 781x600 LayoutMultiColumnFlowThread (anonymous) at (0,0) size 764.50x3840 LayoutTable {TABLE} at (0,0) size 305x3840 LayoutTableSection {THEAD} at (0,0) size 305x31
diff --git a/third_party/WebKit/LayoutTests/webaudio/internals/cycle-connection-gc-render-expected.txt b/third_party/WebKit/LayoutTests/webaudio/internals/cycle-connection-gc-render-expected.txt deleted file mode 100644 index c9af512..0000000 --- a/third_party/WebKit/LayoutTests/webaudio/internals/cycle-connection-gc-render-expected.txt +++ /dev/null
@@ -1,13 +0,0 @@ -Cycles of AudioNode connections should be collected, after rendering. - -On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". - - -A cycle was created: -PASS internals.audioHandlerCount() > initialCount is true -GC happened: -PASS internals.audioHandlerCount() is initialCount -PASS successfullyParsed is true - -TEST COMPLETE -
diff --git a/third_party/WebKit/LayoutTests/webaudio/internals/cycle-connection-gc-render.html b/third_party/WebKit/LayoutTests/webaudio/internals/cycle-connection-gc-render.html deleted file mode 100644 index c59381b..0000000 --- a/third_party/WebKit/LayoutTests/webaudio/internals/cycle-connection-gc-render.html +++ /dev/null
@@ -1,40 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <title> - cycle-connection-gc.html - </title> - <script src="../../resources/js-test.js"></script> - </head> - <body> - <script id="layout-test-code"> - description( - 'Cycles of AudioNode connections should be collected, after rendering.'); - window.jsTestIsAsync = true; - - let context = new OfflineAudioContext(2, 1024, 44100); - let initialCount = internals.audioHandlerCount(); - gc(); - createCycle(); - debug('A cycle was created:'); - shouldBeTrue('internals.audioHandlerCount() > initialCount'); - gc(); - debug('GC happened:'); - context.startRendering() - .then(() => { - shouldBe('internals.audioHandlerCount()', 'initialCount'); - }) - .then(finishJSTest); - - function createCycle() { - let source = context.createBufferSource(); - let delay1 = context.createDelay(); - let delay2 = context.createDelay(); - source.connect(delay1); - delay1.connect(delay2); - delay2.connect(delay1); - delay1.connect(context.destination); - } - </script> - </body> -</html>
diff --git a/third_party/WebKit/LayoutTests/webaudio/internals/cycle-connection-gc.html b/third_party/WebKit/LayoutTests/webaudio/internals/cycle-connection-gc.html index 7faa59d4d..caa12aad 100644 --- a/third_party/WebKit/LayoutTests/webaudio/internals/cycle-connection-gc.html +++ b/third_party/WebKit/LayoutTests/webaudio/internals/cycle-connection-gc.html
@@ -9,13 +9,12 @@ <body> <script id="layout-test-code"> description('Cycles of AudioNode connections should be collected.'); + let context = new OfflineAudioContext(2, 44100, 44100); gc(); let initialCount = internals.audioHandlerCount(); - let context = new OfflineAudioContext(2, 1024, 44100); createCycle(); debug('A cycle was created:'); shouldBeTrue('internals.audioHandlerCount() > initialCount'); - context = null; gc(); debug('GC happened:'); shouldBe('internals.audioHandlerCount()', 'initialCount');
diff --git a/third_party/WebKit/Source/core/CoreInitializer.h b/third_party/WebKit/Source/core/CoreInitializer.h index dc5a7186..ece2624 100644 --- a/third_party/WebKit/Source/core/CoreInitializer.h +++ b/third_party/WebKit/Source/core/CoreInitializer.h
@@ -68,7 +68,7 @@ return *instance_; } - virtual ~CoreInitializer() {} + virtual ~CoreInitializer() = default; // Should be called by clients before trying to create Frames. virtual void Initialize(); @@ -116,7 +116,7 @@ protected: // CoreInitializer is only instantiated by subclass ModulesInitializer. - CoreInitializer() {} + CoreInitializer() = default; private: static CoreInitializer* instance_;
diff --git a/third_party/WebKit/Source/core/animation/AnimationEffectReadOnly.h b/third_party/WebKit/Source/core/animation/AnimationEffectReadOnly.h index 0448065..9e6ef495 100644 --- a/third_party/WebKit/Source/core/animation/AnimationEffectReadOnly.h +++ b/third_party/WebKit/Source/core/animation/AnimationEffectReadOnly.h
@@ -72,13 +72,13 @@ class EventDelegate : public GarbageCollectedFinalized<EventDelegate> { public: - virtual ~EventDelegate() {} + virtual ~EventDelegate() = default; virtual bool RequiresIterationEvents(const AnimationEffectReadOnly&) = 0; virtual void OnEventCondition(const AnimationEffectReadOnly&) = 0; virtual void Trace(blink::Visitor* visitor) {} }; - virtual ~AnimationEffectReadOnly() {} + virtual ~AnimationEffectReadOnly() = default; virtual bool IsKeyframeEffectReadOnly() const { return false; } virtual bool IsKeyframeEffect() const { return false; }
diff --git a/third_party/WebKit/Source/core/animation/AnimationTimeline.h b/third_party/WebKit/Source/core/animation/AnimationTimeline.h index 341ec32..0ec23a4d 100644 --- a/third_party/WebKit/Source/core/animation/AnimationTimeline.h +++ b/third_party/WebKit/Source/core/animation/AnimationTimeline.h
@@ -14,7 +14,7 @@ DEFINE_WRAPPERTYPEINFO(); public: - virtual ~AnimationTimeline() {} + virtual ~AnimationTimeline() = default; virtual double currentTime(bool&) = 0;
diff --git a/third_party/WebKit/Source/core/animation/CSSClipInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSClipInterpolationType.cpp index 9912813..58f560d 100644 --- a/third_party/WebKit/Source/core/animation/CSSClipInterpolationType.cpp +++ b/third_party/WebKit/Source/core/animation/CSSClipInterpolationType.cpp
@@ -81,7 +81,7 @@ class CSSClipNonInterpolableValue : public NonInterpolableValue { public: - ~CSSClipNonInterpolableValue() final {} + ~CSSClipNonInterpolableValue() final = default; static scoped_refptr<CSSClipNonInterpolableValue> Create( const ClipAutos& clip_autos) { @@ -107,7 +107,7 @@ class UnderlyingAutosChecker : public CSSInterpolationType::CSSConversionChecker { public: - ~UnderlyingAutosChecker() final {} + ~UnderlyingAutosChecker() final = default; static std::unique_ptr<UnderlyingAutosChecker> Create( const ClipAutos& underlying_autos) {
diff --git a/third_party/WebKit/Source/core/animation/CSSDefaultInterpolationType.h b/third_party/WebKit/Source/core/animation/CSSDefaultInterpolationType.h index 9e0c881..0ff5af4d 100644 --- a/third_party/WebKit/Source/core/animation/CSSDefaultInterpolationType.h +++ b/third_party/WebKit/Source/core/animation/CSSDefaultInterpolationType.h
@@ -12,7 +12,7 @@ class CORE_EXPORT CSSDefaultNonInterpolableValue : public NonInterpolableValue { public: - ~CSSDefaultNonInterpolableValue() final {} + ~CSSDefaultNonInterpolableValue() final = default; static scoped_refptr<CSSDefaultNonInterpolableValue> Create( const CSSValue* css_value) {
diff --git a/third_party/WebKit/Source/core/animation/CSSFontVariationSettingsInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSFontVariationSettingsInterpolationType.cpp index 67e403d..4f0d15cb 100644 --- a/third_party/WebKit/Source/core/animation/CSSFontVariationSettingsInterpolationType.cpp +++ b/third_party/WebKit/Source/core/animation/CSSFontVariationSettingsInterpolationType.cpp
@@ -13,7 +13,7 @@ class CSSFontVariationSettingsNonInterpolableValue : public NonInterpolableValue { public: - ~CSSFontVariationSettingsNonInterpolableValue() final {} + ~CSSFontVariationSettingsNonInterpolableValue() final = default; static scoped_refptr<CSSFontVariationSettingsNonInterpolableValue> Create( Vector<AtomicString> tags) { @@ -52,7 +52,7 @@ class UnderlyingTagsChecker : public InterpolationType::ConversionChecker { public: - ~UnderlyingTagsChecker() final {} + ~UnderlyingTagsChecker() final = default; static std::unique_ptr<UnderlyingTagsChecker> Create( const Vector<AtomicString>& tags) { @@ -73,7 +73,7 @@ class InheritedFontVariationSettingsChecker : public CSSInterpolationType::CSSConversionChecker { public: - ~InheritedFontVariationSettingsChecker() final {} + ~InheritedFontVariationSettingsChecker() final = default; static std::unique_ptr<InheritedFontVariationSettingsChecker> Create( const FontVariationSettings* settings) {
diff --git a/third_party/WebKit/Source/core/animation/CSSImageInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSImageInterpolationType.cpp index 586417c..3cfbbbd 100644 --- a/third_party/WebKit/Source/core/animation/CSSImageInterpolationType.cpp +++ b/third_party/WebKit/Source/core/animation/CSSImageInterpolationType.cpp
@@ -34,7 +34,7 @@ class CSSImageNonInterpolableValue : public NonInterpolableValue { public: - ~CSSImageNonInterpolableValue() final {} + ~CSSImageNonInterpolableValue() final = default; static scoped_refptr<CSSImageNonInterpolableValue> Create(CSSValue* start, CSSValue* end) { @@ -158,7 +158,7 @@ class UnderlyingImageChecker : public CSSInterpolationType::CSSConversionChecker { public: - ~UnderlyingImageChecker() final {} + ~UnderlyingImageChecker() final = default; static std::unique_ptr<UnderlyingImageChecker> Create( const InterpolationValue& underlying) { @@ -201,7 +201,7 @@ class InheritedImageChecker : public CSSInterpolationType::CSSConversionChecker { public: - ~InheritedImageChecker() final {} + ~InheritedImageChecker() final = default; static std::unique_ptr<InheritedImageChecker> Create( const CSSProperty& property,
diff --git a/third_party/WebKit/Source/core/animation/CSSImageListInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSImageListInterpolationType.cpp index b75d952..840966d 100644 --- a/third_party/WebKit/Source/core/animation/CSSImageListInterpolationType.cpp +++ b/third_party/WebKit/Source/core/animation/CSSImageListInterpolationType.cpp
@@ -18,7 +18,7 @@ class UnderlyingImageListChecker : public CSSInterpolationType::CSSConversionChecker { public: - ~UnderlyingImageListChecker() final {} + ~UnderlyingImageListChecker() final = default; static std::unique_ptr<UnderlyingImageListChecker> Create( const InterpolationValue& underlying) { @@ -70,7 +70,7 @@ class InheritedImageListChecker : public CSSInterpolationType::CSSConversionChecker { public: - ~InheritedImageListChecker() final {} + ~InheritedImageListChecker() final = default; static std::unique_ptr<InheritedImageListChecker> Create( const CSSProperty& property,
diff --git a/third_party/WebKit/Source/core/animation/CSSLengthListInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSLengthListInterpolationType.cpp index a8b628b..bb6ebd4b 100644 --- a/third_party/WebKit/Source/core/animation/CSSLengthListInterpolationType.cpp +++ b/third_party/WebKit/Source/core/animation/CSSLengthListInterpolationType.cpp
@@ -65,7 +65,7 @@ class InheritedLengthListChecker : public CSSInterpolationType::CSSConversionChecker { public: - ~InheritedLengthListChecker() final {} + ~InheritedLengthListChecker() final = default; static std::unique_ptr<InheritedLengthListChecker> Create( const CSSProperty& property,
diff --git a/third_party/WebKit/Source/core/animation/CSSOffsetRotateInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSOffsetRotateInterpolationType.cpp index 9c9a639a..e05e77d 100644 --- a/third_party/WebKit/Source/core/animation/CSSOffsetRotateInterpolationType.cpp +++ b/third_party/WebKit/Source/core/animation/CSSOffsetRotateInterpolationType.cpp
@@ -14,7 +14,7 @@ class CSSOffsetRotationNonInterpolableValue : public NonInterpolableValue { public: - ~CSSOffsetRotationNonInterpolableValue() override {} + ~CSSOffsetRotationNonInterpolableValue() override = default; static scoped_refptr<CSSOffsetRotationNonInterpolableValue> Create( OffsetRotationType rotation_type) { @@ -105,7 +105,7 @@ InterpolationValue CSSOffsetRotateInterpolationType::MaybeConvertInitial( const StyleResolverState&, ConversionCheckers& conversion_checkers) const { - return ConvertOffsetRotate(StyleOffsetRotation(0, kOffsetRotationAuto)); + return ConvertOffsetRotate(StyleOffsetRotation(0, OffsetRotationType::kAuto)); } InterpolationValue CSSOffsetRotateInterpolationType::MaybeConvertInherit(
diff --git a/third_party/WebKit/Source/core/animation/CSSScaleInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSScaleInterpolationType.cpp index bbe57d5..8934b030 100644 --- a/third_party/WebKit/Source/core/animation/CSSScaleInterpolationType.cpp +++ b/third_party/WebKit/Source/core/animation/CSSScaleInterpolationType.cpp
@@ -85,7 +85,7 @@ class CSSScaleNonInterpolableValue : public NonInterpolableValue { public: - ~CSSScaleNonInterpolableValue() final {} + ~CSSScaleNonInterpolableValue() final = default; static scoped_refptr<CSSScaleNonInterpolableValue> Create( const Scale& scale) {
diff --git a/third_party/WebKit/Source/core/animation/CSSSizeListInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSSizeListInterpolationType.cpp index 886e6400..2699981 100644 --- a/third_party/WebKit/Source/core/animation/CSSSizeListInterpolationType.cpp +++ b/third_party/WebKit/Source/core/animation/CSSSizeListInterpolationType.cpp
@@ -16,7 +16,7 @@ class UnderlyingSizeListChecker : public CSSInterpolationType::CSSConversionChecker { public: - ~UnderlyingSizeListChecker() final {} + ~UnderlyingSizeListChecker() final = default; static std::unique_ptr<UnderlyingSizeListChecker> Create( const NonInterpolableList& underlying_list) { @@ -50,7 +50,7 @@ class InheritedSizeListChecker : public CSSInterpolationType::CSSConversionChecker { public: - ~InheritedSizeListChecker() final {} + ~InheritedSizeListChecker() final = default; static std::unique_ptr<InheritedSizeListChecker> Create( const CSSProperty& property,
diff --git a/third_party/WebKit/Source/core/animation/CSSTranslateInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSTranslateInterpolationType.cpp index 1e300d3..181120ce 100644 --- a/third_party/WebKit/Source/core/animation/CSSTranslateInterpolationType.cpp +++ b/third_party/WebKit/Source/core/animation/CSSTranslateInterpolationType.cpp
@@ -27,7 +27,7 @@ class InheritedTranslateChecker : public CSSInterpolationType::CSSConversionChecker { public: - ~InheritedTranslateChecker() override {} + ~InheritedTranslateChecker() override = default; static std::unique_ptr<InheritedTranslateChecker> Create( scoped_refptr<TranslateTransformOperation> inherited_translate) {
diff --git a/third_party/WebKit/Source/core/animation/CSSVisibilityInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSVisibilityInterpolationType.cpp index ca9a890..45fb4df7 100644 --- a/third_party/WebKit/Source/core/animation/CSSVisibilityInterpolationType.cpp +++ b/third_party/WebKit/Source/core/animation/CSSVisibilityInterpolationType.cpp
@@ -14,7 +14,7 @@ class CSSVisibilityNonInterpolableValue : public NonInterpolableValue { public: - ~CSSVisibilityNonInterpolableValue() final {} + ~CSSVisibilityNonInterpolableValue() final = default; static scoped_refptr<CSSVisibilityNonInterpolableValue> Create( EVisibility start, @@ -53,7 +53,7 @@ class UnderlyingVisibilityChecker : public CSSInterpolationType::CSSConversionChecker { public: - ~UnderlyingVisibilityChecker() final {} + ~UnderlyingVisibilityChecker() final = default; static std::unique_ptr<UnderlyingVisibilityChecker> Create( EVisibility visibility) {
diff --git a/third_party/WebKit/Source/core/animation/DocumentAnimations.h b/third_party/WebKit/Source/core/animation/DocumentAnimations.h index 94176c9..7e09977 100644 --- a/third_party/WebKit/Source/core/animation/DocumentAnimations.h +++ b/third_party/WebKit/Source/core/animation/DocumentAnimations.h
@@ -55,7 +55,7 @@ Optional<CompositorElementIdSet>&); private: - DocumentAnimations() {} + DocumentAnimations() = default; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/animation/DocumentTimeline.h b/third_party/WebKit/Source/core/animation/DocumentTimeline.h index 1abefc4..5dad714 100644 --- a/third_party/WebKit/Source/core/animation/DocumentTimeline.h +++ b/third_party/WebKit/Source/core/animation/DocumentTimeline.h
@@ -64,7 +64,7 @@ // Calls DocumentTimeline's wake() method after duration seconds. virtual void WakeAfter(double duration) = 0; virtual void ServiceOnNextFrame() = 0; - virtual ~PlatformTiming() {} + virtual ~PlatformTiming() = default; virtual void Trace(blink::Visitor* visitor) {} }; @@ -76,7 +76,7 @@ static DocumentTimeline* Create(ExecutionContext*, const DocumentTimelineOptions&); - ~DocumentTimeline() override {} + ~DocumentTimeline() override = default; bool IsDocumentTimeline() const final { return true; }
diff --git a/third_party/WebKit/Source/core/animation/EffectModel.h b/third_party/WebKit/Source/core/animation/EffectModel.h index e2c1a21b..826c0906 100644 --- a/third_party/WebKit/Source/core/animation/EffectModel.h +++ b/third_party/WebKit/Source/core/animation/EffectModel.h
@@ -56,8 +56,8 @@ ExceptionState* = nullptr); static String CompositeOperationToString(CompositeOperation); - EffectModel() {} - virtual ~EffectModel() {} + EffectModel() = default; + virtual ~EffectModel() = default; virtual bool Sample(int iteration, double fraction, double iteration_duration,
diff --git a/third_party/WebKit/Source/core/animation/EffectStack.cpp b/third_party/WebKit/Source/core/animation/EffectStack.cpp index a240b9e0..9d35658bb 100644 --- a/third_party/WebKit/Source/core/animation/EffectStack.cpp +++ b/third_party/WebKit/Source/core/animation/EffectStack.cpp
@@ -85,7 +85,7 @@ } // namespace -EffectStack::EffectStack() {} +EffectStack::EffectStack() = default; bool EffectStack::HasActiveAnimationsOnCompositor( const PropertyHandle& property) const {
diff --git a/third_party/WebKit/Source/core/animation/ElementAnimations.cpp b/third_party/WebKit/Source/core/animation/ElementAnimations.cpp index ba7a521..b933aab 100644 --- a/third_party/WebKit/Source/core/animation/ElementAnimations.cpp +++ b/third_party/WebKit/Source/core/animation/ElementAnimations.cpp
@@ -36,7 +36,7 @@ ElementAnimations::ElementAnimations() : animation_style_change_(false) {} -ElementAnimations::~ElementAnimations() {} +ElementAnimations::~ElementAnimations() = default; void ElementAnimations::UpdateAnimationFlags(ComputedStyle& style) { for (const auto& entry : animations_) {
diff --git a/third_party/WebKit/Source/core/animation/InterpolableValue.h b/third_party/WebKit/Source/core/animation/InterpolableValue.h index 7d41eaa..570cd977 100644 --- a/third_party/WebKit/Source/core/animation/InterpolableValue.h +++ b/third_party/WebKit/Source/core/animation/InterpolableValue.h
@@ -21,7 +21,7 @@ USING_FAST_MALLOC(InterpolableValue); public: - virtual ~InterpolableValue() {} + virtual ~InterpolableValue() = default; virtual bool IsNumber() const { return false; } virtual bool IsBool() const { return false; }
diff --git a/third_party/WebKit/Source/core/animation/Interpolation.h b/third_party/WebKit/Source/core/animation/Interpolation.h index 4fdba7cd..7547427 100644 --- a/third_party/WebKit/Source/core/animation/Interpolation.h +++ b/third_party/WebKit/Source/core/animation/Interpolation.h
@@ -59,7 +59,7 @@ // the subclass documentation for more. class CORE_EXPORT Interpolation : public RefCounted<Interpolation> { public: - virtual ~Interpolation() {} + virtual ~Interpolation() = default; virtual void Interpolate(int iteration, double fraction) = 0; @@ -75,7 +75,7 @@ virtual bool DependsOnUnderlyingValue() const { return false; } protected: - Interpolation() {} + Interpolation() = default; DISALLOW_COPY_AND_ASSIGN(Interpolation); };
diff --git a/third_party/WebKit/Source/core/animation/InterpolationEnvironment.h b/third_party/WebKit/Source/core/animation/InterpolationEnvironment.h index 0af68d3..74229a1 100644 --- a/third_party/WebKit/Source/core/animation/InterpolationEnvironment.h +++ b/third_party/WebKit/Source/core/animation/InterpolationEnvironment.h
@@ -21,7 +21,7 @@ } protected: - virtual ~InterpolationEnvironment() {} + virtual ~InterpolationEnvironment() = default; explicit InterpolationEnvironment(const InterpolationTypesMap& map) : interpolation_types_map_(map) {}
diff --git a/third_party/WebKit/Source/core/animation/InterpolationType.h b/third_party/WebKit/Source/core/animation/InterpolationType.h index 679ae37..d325d0b 100644 --- a/third_party/WebKit/Source/core/animation/InterpolationType.h +++ b/third_party/WebKit/Source/core/animation/InterpolationType.h
@@ -32,7 +32,7 @@ USING_FAST_MALLOC(InterpolationType); public: - virtual ~InterpolationType() {} + virtual ~InterpolationType() = default; PropertyHandle GetProperty() const { return property_; } @@ -44,7 +44,7 @@ USING_FAST_MALLOC(ConversionChecker); public: - virtual ~ConversionChecker() {} + virtual ~ConversionChecker() = default; void SetType(const InterpolationType& type) { type_ = &type; } const InterpolationType& GetType() const { return *type_; } virtual bool IsValid(const InterpolationEnvironment&,
diff --git a/third_party/WebKit/Source/core/animation/Keyframe.h b/third_party/WebKit/Source/core/animation/Keyframe.h index 4c720637..8e2c516 100644 --- a/third_party/WebKit/Source/core/animation/Keyframe.h +++ b/third_party/WebKit/Source/core/animation/Keyframe.h
@@ -64,7 +64,7 @@ USING_FAST_MALLOC(Keyframe); public: - virtual ~Keyframe() {} + virtual ~Keyframe() = default; // TODO(smcgruer): The keyframe offset should be immutable. void SetOffset(WTF::Optional<double> offset) { offset_ = offset; } @@ -121,7 +121,7 @@ USING_FAST_MALLOC(PropertySpecificKeyframe); public: - virtual ~PropertySpecificKeyframe() {} + virtual ~PropertySpecificKeyframe() = default; double Offset() const { return offset_; } TimingFunction& Easing() const { return *easing_; } EffectModel::CompositeOperation Composite() const { return composite_; }
diff --git a/third_party/WebKit/Source/core/animation/KeyframeEffect.cpp b/third_party/WebKit/Source/core/animation/KeyframeEffect.cpp index c52d87d2..970714f9 100644 --- a/third_party/WebKit/Source/core/animation/KeyframeEffect.cpp +++ b/third_party/WebKit/Source/core/animation/KeyframeEffect.cpp
@@ -108,7 +108,7 @@ EventDelegate* event_delegate) : KeyframeEffectReadOnly(target, model, timing, priority, event_delegate) {} -KeyframeEffect::~KeyframeEffect() {} +KeyframeEffect::~KeyframeEffect() = default; void KeyframeEffect::setComposite(String composite_string) { EffectModel::CompositeOperation composite;
diff --git a/third_party/WebKit/Source/core/animation/KeyframeEffectReadOnly.h b/third_party/WebKit/Source/core/animation/KeyframeEffectReadOnly.h index acb18639..db2f4c7 100644 --- a/third_party/WebKit/Source/core/animation/KeyframeEffectReadOnly.h +++ b/third_party/WebKit/Source/core/animation/KeyframeEffectReadOnly.h
@@ -48,7 +48,7 @@ const DictionarySequenceOrDictionary& effect_input, ExceptionState&); - ~KeyframeEffectReadOnly() override {} + ~KeyframeEffectReadOnly() override = default; bool IsKeyframeEffectReadOnly() const override { return true; }
diff --git a/third_party/WebKit/Source/core/animation/LengthInterpolationFunctions.cpp b/third_party/WebKit/Source/core/animation/LengthInterpolationFunctions.cpp index 17ddd0c2..0b49389b 100644 --- a/third_party/WebKit/Source/core/animation/LengthInterpolationFunctions.cpp +++ b/third_party/WebKit/Source/core/animation/LengthInterpolationFunctions.cpp
@@ -34,7 +34,7 @@ DECLARE_NON_INTERPOLABLE_VALUE_TYPE(); private: - CSSLengthNonInterpolableValue() {} + CSSLengthNonInterpolableValue() = default; }; DEFINE_NON_INTERPOLABLE_VALUE_TYPE(CSSLengthNonInterpolableValue);
diff --git a/third_party/WebKit/Source/core/animation/ListInterpolationFunctions.h b/third_party/WebKit/Source/core/animation/ListInterpolationFunctions.h index 4d5651b..e1d4d50 100644 --- a/third_party/WebKit/Source/core/animation/ListInterpolationFunctions.h +++ b/third_party/WebKit/Source/core/animation/ListInterpolationFunctions.h
@@ -58,7 +58,7 @@ class NonInterpolableList : public NonInterpolableValue { public: - ~NonInterpolableList() final {} + ~NonInterpolableList() final = default; static scoped_refptr<NonInterpolableList> Create() { return base::AdoptRef(new NonInterpolableList()); @@ -80,7 +80,7 @@ DECLARE_NON_INTERPOLABLE_VALUE_TYPE(); private: - NonInterpolableList() {} + NonInterpolableList() = default; NonInterpolableList(Vector<scoped_refptr<NonInterpolableValue>>&& list) : list_(list) {}
diff --git a/third_party/WebKit/Source/core/animation/NonInterpolableValue.h b/third_party/WebKit/Source/core/animation/NonInterpolableValue.h index 20abf34..69e8497 100644 --- a/third_party/WebKit/Source/core/animation/NonInterpolableValue.h +++ b/third_party/WebKit/Source/core/animation/NonInterpolableValue.h
@@ -13,7 +13,7 @@ // not change or 50% flip when interpolating with an adjacent value. class NonInterpolableValue : public RefCounted<NonInterpolableValue> { public: - virtual ~NonInterpolableValue() {} + virtual ~NonInterpolableValue() = default; typedef const void* Type; virtual Type GetType() const = 0;
diff --git a/third_party/WebKit/Source/core/animation/PathInterpolationFunctions.cpp b/third_party/WebKit/Source/core/animation/PathInterpolationFunctions.cpp index b4d3f54..5c55941 100644 --- a/third_party/WebKit/Source/core/animation/PathInterpolationFunctions.cpp +++ b/third_party/WebKit/Source/core/animation/PathInterpolationFunctions.cpp
@@ -19,7 +19,7 @@ class SVGPathNonInterpolableValue : public NonInterpolableValue { public: - ~SVGPathNonInterpolableValue() override {} + ~SVGPathNonInterpolableValue() override = default; static scoped_refptr<SVGPathNonInterpolableValue> Create( Vector<SVGPathSegType>& path_seg_types) { @@ -95,7 +95,7 @@ class UnderlyingPathSegTypesChecker : public InterpolationType::ConversionChecker { public: - ~UnderlyingPathSegTypesChecker() final {} + ~UnderlyingPathSegTypesChecker() final = default; static std::unique_ptr<UnderlyingPathSegTypesChecker> Create( const InterpolationValue& underlying) {
diff --git a/third_party/WebKit/Source/core/animation/PrimitiveInterpolation.h b/third_party/WebKit/Source/core/animation/PrimitiveInterpolation.h index 18de7760..fdb7d29 100644 --- a/third_party/WebKit/Source/core/animation/PrimitiveInterpolation.h +++ b/third_party/WebKit/Source/core/animation/PrimitiveInterpolation.h
@@ -23,7 +23,7 @@ USING_FAST_MALLOC(PrimitiveInterpolation); public: - virtual ~PrimitiveInterpolation() {} + virtual ~PrimitiveInterpolation() = default; virtual void InterpolateValue( double fraction, @@ -34,7 +34,7 @@ virtual bool IsFlip() const { return false; } protected: - PrimitiveInterpolation() {} + PrimitiveInterpolation() = default; DISALLOW_COPY_AND_ASSIGN(PrimitiveInterpolation); }; @@ -42,7 +42,7 @@ // eg. "0px" and "100px". class PairwisePrimitiveInterpolation : public PrimitiveInterpolation { public: - ~PairwisePrimitiveInterpolation() override {} + ~PairwisePrimitiveInterpolation() override = default; static std::unique_ptr<PairwisePrimitiveInterpolation> Create( const InterpolationType& type, @@ -101,7 +101,7 @@ // behaviour eg. "auto" and "0px". class FlipPrimitiveInterpolation : public PrimitiveInterpolation { public: - ~FlipPrimitiveInterpolation() override {} + ~FlipPrimitiveInterpolation() override = default; static std::unique_ptr<FlipPrimitiveInterpolation> Create( std::unique_ptr<TypedInterpolationValue> start,
diff --git a/third_party/WebKit/Source/core/animation/SVGInterpolationTypesMap.h b/third_party/WebKit/Source/core/animation/SVGInterpolationTypesMap.h index 4193193..0a828f7c 100644 --- a/third_party/WebKit/Source/core/animation/SVGInterpolationTypesMap.h +++ b/third_party/WebKit/Source/core/animation/SVGInterpolationTypesMap.h
@@ -11,7 +11,7 @@ class SVGInterpolationTypesMap : public InterpolationTypesMap { public: - SVGInterpolationTypesMap() {} + SVGInterpolationTypesMap() = default; const InterpolationTypes& Get(const PropertyHandle&) const final; };
diff --git a/third_party/WebKit/Source/core/animation/SVGTransformListInterpolationType.cpp b/third_party/WebKit/Source/core/animation/SVGTransformListInterpolationType.cpp index 313b183..0a91b6e 100644 --- a/third_party/WebKit/Source/core/animation/SVGTransformListInterpolationType.cpp +++ b/third_party/WebKit/Source/core/animation/SVGTransformListInterpolationType.cpp
@@ -17,7 +17,7 @@ class SVGTransformNonInterpolableValue : public NonInterpolableValue { public: - ~SVGTransformNonInterpolableValue() override {} + ~SVGTransformNonInterpolableValue() override = default; static scoped_refptr<SVGTransformNonInterpolableValue> Create( Vector<SVGTransformType>& transform_types) {
diff --git a/third_party/WebKit/Source/core/animation/SVGValueInterpolationType.cpp b/third_party/WebKit/Source/core/animation/SVGValueInterpolationType.cpp index 2f4310c1..0893d10 100644 --- a/third_party/WebKit/Source/core/animation/SVGValueInterpolationType.cpp +++ b/third_party/WebKit/Source/core/animation/SVGValueInterpolationType.cpp
@@ -12,7 +12,7 @@ class SVGValueNonInterpolableValue : public NonInterpolableValue { public: - ~SVGValueNonInterpolableValue() override {} + ~SVGValueNonInterpolableValue() override = default; static scoped_refptr<SVGValueNonInterpolableValue> Create( SVGPropertyBase* svg_value) {
diff --git a/third_party/WebKit/Source/core/animation/ShadowInterpolationFunctions.cpp b/third_party/WebKit/Source/core/animation/ShadowInterpolationFunctions.cpp index 05948de..50a0e3e6 100644 --- a/third_party/WebKit/Source/core/animation/ShadowInterpolationFunctions.cpp +++ b/third_party/WebKit/Source/core/animation/ShadowInterpolationFunctions.cpp
@@ -28,7 +28,7 @@ class ShadowNonInterpolableValue : public NonInterpolableValue { public: - ~ShadowNonInterpolableValue() final {} + ~ShadowNonInterpolableValue() final = default; static scoped_refptr<ShadowNonInterpolableValue> Create( ShadowStyle shadow_style) {
diff --git a/third_party/WebKit/Source/core/animation/WorkletAnimationBase.h b/third_party/WebKit/Source/core/animation/WorkletAnimationBase.h index bd5ca03..22750c09 100644 --- a/third_party/WebKit/Source/core/animation/WorkletAnimationBase.h +++ b/third_party/WebKit/Source/core/animation/WorkletAnimationBase.h
@@ -15,7 +15,7 @@ class CORE_EXPORT WorkletAnimationBase : public ScriptWrappable { public: - virtual ~WorkletAnimationBase() {} + virtual ~WorkletAnimationBase() = default; // Attempts to start the animation on the compositor side, returning true if // it succeeds or false otherwise. If false is returned and failure_message
diff --git a/third_party/WebKit/Source/core/animation/animatable/AnimatableDouble.h b/third_party/WebKit/Source/core/animation/animatable/AnimatableDouble.h index be90d43..4a3d7689 100644 --- a/third_party/WebKit/Source/core/animation/animatable/AnimatableDouble.h +++ b/third_party/WebKit/Source/core/animation/animatable/AnimatableDouble.h
@@ -38,7 +38,7 @@ class CORE_EXPORT AnimatableDouble final : public AnimatableValue { public: - ~AnimatableDouble() override {} + ~AnimatableDouble() override = default; static scoped_refptr<AnimatableDouble> Create(double number) { return base::AdoptRef(new AnimatableDouble(number));
diff --git a/third_party/WebKit/Source/core/animation/animatable/AnimatableFilterOperations.h b/third_party/WebKit/Source/core/animation/animatable/AnimatableFilterOperations.h index c318baba..f6dfdfa 100644 --- a/third_party/WebKit/Source/core/animation/animatable/AnimatableFilterOperations.h +++ b/third_party/WebKit/Source/core/animation/animatable/AnimatableFilterOperations.h
@@ -43,7 +43,7 @@ return base::AdoptRef(new AnimatableFilterOperations(operations)); } - ~AnimatableFilterOperations() override {} + ~AnimatableFilterOperations() override = default; const FilterOperations& Operations() const { return operation_wrapper_->Operations();
diff --git a/third_party/WebKit/Source/core/animation/animatable/AnimatableTransform.h b/third_party/WebKit/Source/core/animation/animatable/AnimatableTransform.h index 91b98b8b..a10aa18 100644 --- a/third_party/WebKit/Source/core/animation/animatable/AnimatableTransform.h +++ b/third_party/WebKit/Source/core/animation/animatable/AnimatableTransform.h
@@ -39,7 +39,7 @@ class CORE_EXPORT AnimatableTransform final : public AnimatableValue { public: - ~AnimatableTransform() override {} + ~AnimatableTransform() override = default; static scoped_refptr<AnimatableTransform> Create( const TransformOperations& transform, double zoom) {
diff --git a/third_party/WebKit/Source/core/animation/animatable/AnimatableUnknown.h b/third_party/WebKit/Source/core/animation/animatable/AnimatableUnknown.h index b2053e6..0add5ac 100644 --- a/third_party/WebKit/Source/core/animation/animatable/AnimatableUnknown.h +++ b/third_party/WebKit/Source/core/animation/animatable/AnimatableUnknown.h
@@ -39,7 +39,7 @@ class AnimatableUnknown final : public AnimatableValue { public: - ~AnimatableUnknown() override {} + ~AnimatableUnknown() override = default; static scoped_refptr<AnimatableUnknown> Create(const CSSValue* value) { return base::AdoptRef(new AnimatableUnknown(value));
diff --git a/third_party/WebKit/Source/core/animation/animatable/AnimatableValue.h b/third_party/WebKit/Source/core/animation/animatable/AnimatableValue.h index 76195ee7..6d36d78 100644 --- a/third_party/WebKit/Source/core/animation/animatable/AnimatableValue.h +++ b/third_party/WebKit/Source/core/animation/animatable/AnimatableValue.h
@@ -40,7 +40,7 @@ class CORE_EXPORT AnimatableValue : public RefCounted<AnimatableValue> { public: - virtual ~AnimatableValue() {} + virtual ~AnimatableValue() = default; static scoped_refptr<AnimatableValue> Interpolate(const AnimatableValue*, const AnimatableValue*,
diff --git a/third_party/WebKit/Source/core/animation/css/CSSAnimationData.cpp b/third_party/WebKit/Source/core/animation/css/CSSAnimationData.cpp index 2e73f4a0..b8acac1 100644 --- a/third_party/WebKit/Source/core/animation/css/CSSAnimationData.cpp +++ b/third_party/WebKit/Source/core/animation/css/CSSAnimationData.cpp
@@ -16,13 +16,7 @@ play_state_list_.push_back(InitialPlayState()); } -CSSAnimationData::CSSAnimationData(const CSSAnimationData& other) - : CSSTimingData(other), - name_list_(other.name_list_), - iteration_count_list_(other.iteration_count_list_), - direction_list_(other.direction_list_), - fill_mode_list_(other.fill_mode_list_), - play_state_list_(other.play_state_list_) {} +CSSAnimationData::CSSAnimationData(const CSSAnimationData& other) = default; const AtomicString& CSSAnimationData::InitialName() { DEFINE_STATIC_LOCAL(const AtomicString, name, ("none"));
diff --git a/third_party/WebKit/Source/core/animation/css/CSSAnimationUpdate.cpp b/third_party/WebKit/Source/core/animation/css/CSSAnimationUpdate.cpp index ea89723..56ac678 100644 --- a/third_party/WebKit/Source/core/animation/css/CSSAnimationUpdate.cpp +++ b/third_party/WebKit/Source/core/animation/css/CSSAnimationUpdate.cpp
@@ -9,8 +9,8 @@ namespace blink { // Defined here, to avoid dependencies on ComputedStyle.h in the header file. -CSSAnimationUpdate::CSSAnimationUpdate() {} -CSSAnimationUpdate::~CSSAnimationUpdate() {} +CSSAnimationUpdate::CSSAnimationUpdate() = default; +CSSAnimationUpdate::~CSSAnimationUpdate() = default; void CSSAnimationUpdate::Copy(const CSSAnimationUpdate& update) { DCHECK(IsEmpty()); @@ -70,7 +70,7 @@ new_transitions_.erase(property); } -CSSAnimationUpdate::NewTransition::NewTransition() {} -CSSAnimationUpdate::NewTransition::~NewTransition() {} +CSSAnimationUpdate::NewTransition::NewTransition() = default; +CSSAnimationUpdate::NewTransition::~NewTransition() = default; } // namespace blink
diff --git a/third_party/WebKit/Source/core/animation/css/CSSAnimations.cpp b/third_party/WebKit/Source/core/animation/css/CSSAnimations.cpp index 7e87036..a08301f 100644 --- a/third_party/WebKit/Source/core/animation/css/CSSAnimations.cpp +++ b/third_party/WebKit/Source/core/animation/css/CSSAnimations.cpp
@@ -196,7 +196,7 @@ } // namespace -CSSAnimations::CSSAnimations() {} +CSSAnimations::CSSAnimations() = default; bool CSSAnimations::IsAnimationForInspector(const Animation& animation) { for (const auto& running_animation : running_animations_) {
diff --git a/third_party/WebKit/Source/core/animation/css/CSSTimingData.cpp b/third_party/WebKit/Source/core/animation/css/CSSTimingData.cpp index 86b506af3..d8503739 100644 --- a/third_party/WebKit/Source/core/animation/css/CSSTimingData.cpp +++ b/third_party/WebKit/Source/core/animation/css/CSSTimingData.cpp
@@ -14,10 +14,7 @@ timing_function_list_.push_back(InitialTimingFunction()); } -CSSTimingData::CSSTimingData(const CSSTimingData& other) - : delay_list_(other.delay_list_), - duration_list_(other.duration_list_), - timing_function_list_(other.timing_function_list_) {} +CSSTimingData::CSSTimingData(const CSSTimingData& other) = default; Timing CSSTimingData::ConvertToTiming(size_t index) const { Timing timing;
diff --git a/third_party/WebKit/Source/core/animation/css/CSSTimingData.h b/third_party/WebKit/Source/core/animation/css/CSSTimingData.h index 8aab25a..65faf87e 100644 --- a/third_party/WebKit/Source/core/animation/css/CSSTimingData.h +++ b/third_party/WebKit/Source/core/animation/css/CSSTimingData.h
@@ -18,7 +18,7 @@ USING_FAST_MALLOC(CSSTimingData); public: - ~CSSTimingData() {} + ~CSSTimingData() = default; const Vector<double>& DelayList() const { return delay_list_; } const Vector<double>& DurationList() const { return duration_list_; }
diff --git a/third_party/WebKit/Source/core/animation/css/CSSTransitionData.cpp b/third_party/WebKit/Source/core/animation/css/CSSTransitionData.cpp index 1802e9e8..c059172 100644 --- a/third_party/WebKit/Source/core/animation/css/CSSTransitionData.cpp +++ b/third_party/WebKit/Source/core/animation/css/CSSTransitionData.cpp
@@ -12,8 +12,7 @@ property_list_.push_back(InitialProperty()); } -CSSTransitionData::CSSTransitionData(const CSSTransitionData& other) - : CSSTimingData(other), property_list_(other.property_list_) {} +CSSTransitionData::CSSTransitionData(const CSSTransitionData& other) = default; bool CSSTransitionData::TransitionsMatchForStyleRecalc( const CSSTransitionData& other) const {
diff --git a/third_party/WebKit/Source/core/clipboard/DataObject.cpp b/third_party/WebKit/Source/core/clipboard/DataObject.cpp index 33fd7f5..9d31e11f 100644 --- a/third_party/WebKit/Source/core/clipboard/DataObject.cpp +++ b/third_party/WebKit/Source/core/clipboard/DataObject.cpp
@@ -74,7 +74,7 @@ return new DataObject; } -DataObject::~DataObject() {} +DataObject::~DataObject() = default; size_t DataObject::length() const { return item_list_.size();
diff --git a/third_party/WebKit/Source/core/clipboard/DataTransfer.cpp b/third_party/WebKit/Source/core/clipboard/DataTransfer.cpp index 1cd391fc..625d887 100644 --- a/third_party/WebKit/Source/core/clipboard/DataTransfer.cpp +++ b/third_party/WebKit/Source/core/clipboard/DataTransfer.cpp
@@ -231,7 +231,7 @@ return new DataTransfer(type, policy, data_object); } -DataTransfer::~DataTransfer() {} +DataTransfer::~DataTransfer() = default; void DataTransfer::setDropEffect(const String& effect) { if (!IsForDragAndDrop())
diff --git a/third_party/WebKit/Source/core/css/CSSKeyframesRule.cpp b/third_party/WebKit/Source/core/css/CSSKeyframesRule.cpp index 8cf65a6..5dd6303 100644 --- a/third_party/WebKit/Source/core/css/CSSKeyframesRule.cpp +++ b/third_party/WebKit/Source/core/css/CSSKeyframesRule.cpp
@@ -39,12 +39,7 @@ StyleRuleKeyframes::StyleRuleKeyframes() : StyleRuleBase(kKeyframes), version_(0) {} -StyleRuleKeyframes::StyleRuleKeyframes(const StyleRuleKeyframes& o) - : StyleRuleBase(o), - keyframes_(o.keyframes_), - name_(o.name_), - version_(o.version_), - is_prefixed_(o.is_prefixed_) {} +StyleRuleKeyframes::StyleRuleKeyframes(const StyleRuleKeyframes& o) = default; StyleRuleKeyframes::~StyleRuleKeyframes() = default;
diff --git a/third_party/WebKit/Source/core/css/CSSProperties.json5 b/third_party/WebKit/Source/core/css/CSSProperties.json5 index 8e787b3..d9e8641 100644 --- a/third_party/WebKit/Source/core/css/CSSProperties.json5 +++ b/third_party/WebKit/Source/core/css/CSSProperties.json5
@@ -1887,7 +1887,7 @@ field_group: "*", field_template: "external", include_paths: ["core/style/StyleOffsetRotation.h"], - default_value: "StyleOffsetRotation(0, kOffsetRotationAuto)", + default_value: "StyleOffsetRotation(0, OffsetRotationType::kAuto)", type_name: "StyleOffsetRotation", converter: "ConvertOffsetRotate", },
diff --git a/third_party/WebKit/Source/core/css/CSSPropertySourceData.cpp b/third_party/WebKit/Source/core/css/CSSPropertySourceData.cpp index 4275885..25a47bb 100644 --- a/third_party/WebKit/Source/core/css/CSSPropertySourceData.cpp +++ b/third_party/WebKit/Source/core/css/CSSPropertySourceData.cpp
@@ -58,12 +58,7 @@ parsed_ok(parsed_ok), range(range) {} -CSSPropertySourceData::CSSPropertySourceData(const CSSPropertySourceData& other) - : name(other.name), - value(other.value), - important(other.important), - disabled(other.disabled), - parsed_ok(other.parsed_ok), - range(other.range) {} +CSSPropertySourceData::CSSPropertySourceData( + const CSSPropertySourceData& other) = default; } // namespace blink
diff --git a/third_party/WebKit/Source/core/css/CSSSelector.h b/third_party/WebKit/Source/core/css/CSSSelector.h index 1f303e1..6ce3d75e 100644 --- a/third_party/WebKit/Source/core/css/CSSSelector.h +++ b/third_party/WebKit/Source/core/css/CSSSelector.h
@@ -386,7 +386,7 @@ const CSSSelector* SerializeCompound(StringBuilder&) const; // Hide. - CSSSelector& operator=(const CSSSelector&); + CSSSelector& operator=(const CSSSelector&) = delete; struct RareData : public RefCounted<RareData> { static scoped_refptr<RareData> Create(const AtomicString& value) {
diff --git a/third_party/WebKit/Source/core/css/SelectorChecker.cpp b/third_party/WebKit/Source/core/css/SelectorChecker.cpp index f9d5166..08505de29 100644 --- a/third_party/WebKit/Source/core/css/SelectorChecker.cpp +++ b/third_party/WebKit/Source/core/css/SelectorChecker.cpp
@@ -443,7 +443,7 @@ UseCounter::Count(context.element->GetDocument(), WebFeature::kDeepCombinatorInStaticProfile); if (ShadowRoot* root = context.element->ContainingShadowRoot()) { - if (root->GetType() == ShadowRootType::kUserAgent) + if (root->IsUserAgent()) return kSelectorFailsCompletely; } @@ -1095,7 +1095,7 @@ case CSSSelector::kPseudoHostHasAppearance: DCHECK(is_ua_rule_); if (ShadowRoot* root = element.ContainingShadowRoot()) { - if (root->GetType() != ShadowRootType::kUserAgent) + if (!root->IsUserAgent()) return false; const ComputedStyle* style = root->host().GetComputedStyle(); return style && style->HasAppearance(); @@ -1146,20 +1146,20 @@ } case CSSSelector::kPseudoPlaceholder: if (ShadowRoot* root = element.ContainingShadowRoot()) { - return root->GetType() == ShadowRootType::kUserAgent && + return root->IsUserAgent() && element.ShadowPseudoId() == "-webkit-input-placeholder"; } return false; case CSSSelector::kPseudoWebKitCustomElement: { if (ShadowRoot* root = element.ContainingShadowRoot()) - return root->GetType() == ShadowRootType::kUserAgent && + return root->IsUserAgent() && element.ShadowPseudoId() == selector.Value(); return false; } case CSSSelector::kPseudoBlinkInternalElement: DCHECK(is_ua_rule_); if (ShadowRoot* root = element.ContainingShadowRoot()) - return root->GetType() == ShadowRootType::kUserAgent && + return root->IsUserAgent() && element.ShadowPseudoId() == selector.Value(); return false; case CSSSelector::kPseudoSlotted: {
diff --git a/third_party/WebKit/Source/core/css/StyleElement.cpp b/third_party/WebKit/Source/core/css/StyleElement.cpp index 381f348..bbe5608 100644 --- a/third_party/WebKit/Source/core/css/StyleElement.cpp +++ b/third_party/WebKit/Source/core/css/StyleElement.cpp
@@ -129,7 +129,7 @@ // Main world CSP is bypassed for style elements in user agent shadow DOM. ShadowRoot* root = element.ContainingShadowRoot(); - if (root && root->GetType() == ShadowRootType::kUserAgent) + if (root && root->IsUserAgent()) return true; return false;
diff --git a/third_party/WebKit/Source/core/css/cssom/ComputedStylePropertyMap.h b/third_party/WebKit/Source/core/css/cssom/ComputedStylePropertyMap.h index 0980d44..561043a 100644 --- a/third_party/WebKit/Source/core/css/cssom/ComputedStylePropertyMap.h +++ b/third_party/WebKit/Source/core/css/cssom/ComputedStylePropertyMap.h
@@ -42,14 +42,13 @@ const CSSValue* GetCustomProperty(AtomicString) override; void ForEachProperty(const IterationCallback&) override; + private: // TODO: Pseudo-element support requires reintroducing Element.pseudo(...). // See // https://github.com/w3c/css-houdini-drafts/issues/350#issuecomment-294690156 - // FIXME: Move these to private. PseudoId pseudo_id_; Member<Node> node_; - private: Node* StyledNode() const; const ComputedStyle* UpdateStyle(); DISALLOW_COPY_AND_ASSIGN(ComputedStylePropertyMap);
diff --git a/third_party/WebKit/Source/core/css/cssom/FilteredComputedStylePropertyMapTest.cpp b/third_party/WebKit/Source/core/css/cssom/FilteredComputedStylePropertyMapTest.cpp index aedf4f31..fff39e3 100644 --- a/third_party/WebKit/Source/core/css/cssom/FilteredComputedStylePropertyMapTest.cpp +++ b/third_party/WebKit/Source/core/css/cssom/FilteredComputedStylePropertyMapTest.cpp
@@ -15,7 +15,7 @@ class FilteredComputedStylePropertyMapTest : public PageTestBase { public: - FilteredComputedStylePropertyMapTest() {} + FilteredComputedStylePropertyMapTest() = default; CSSComputedStyleDeclaration* Declaration() const { return declaration_.Get();
diff --git a/third_party/WebKit/Source/core/css/parser/CSSPropertyParserTest.cpp b/third_party/WebKit/Source/core/css/parser/CSSPropertyParserTest.cpp index 7641b4c..12bf5de 100644 --- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParserTest.cpp +++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParserTest.cpp
@@ -6,7 +6,9 @@ #include "core/css/CSSColorValue.h" #include "core/css/CSSValueList.h" +#include "core/css/StyleSheetContents.h" #include "core/css/parser/CSSParser.h" +#include "core/testing/DummyPageHolder.h" #include "platform/testing/RuntimeEnabledFeaturesTestHelpers.h" #include "testing/gtest/include/gtest/gtest.h" @@ -312,4 +314,34 @@ ASSERT_FALSE(value); } +TEST(CSSPropertyParserTest, ClipPathEllipse) { + std::unique_ptr<DummyPageHolder> dummy_holder = + DummyPageHolder::Create(IntSize(500, 500)); + Document* doc = &dummy_holder->GetDocument(); + CSSParserContext* context = CSSParserContext::Create( + kHTMLStandardMode, SecureContextMode::kSecureContext, + CSSParserContext::kDynamicProfile, doc); + + CSSParser::ParseSingleValue(CSSPropertyClipPath, + "ellipse(1px 2px at invalid)", context); + + EXPECT_FALSE( + UseCounter::IsCounted(*doc, WebFeature::kBasicShapeEllipseTwoRadius)); + CSSParser::ParseSingleValue(CSSPropertyClipPath, "ellipse(1px 2px)", context); + EXPECT_TRUE( + UseCounter::IsCounted(*doc, WebFeature::kBasicShapeEllipseTwoRadius)); + + EXPECT_FALSE( + UseCounter::IsCounted(*doc, WebFeature::kBasicShapeEllipseOneRadius)); + CSSParser::ParseSingleValue(CSSPropertyClipPath, "ellipse(1px)", context); + EXPECT_TRUE( + UseCounter::IsCounted(*doc, WebFeature::kBasicShapeEllipseOneRadius)); + + EXPECT_FALSE( + UseCounter::IsCounted(*doc, WebFeature::kBasicShapeEllipseNoRadius)); + CSSParser::ParseSingleValue(CSSPropertyClipPath, "ellipse()", context); + EXPECT_TRUE( + UseCounter::IsCounted(*doc, WebFeature::kBasicShapeEllipseNoRadius)); +} + } // namespace blink
diff --git a/third_party/WebKit/Source/core/css/properties/CSSParsingUtils.cpp b/third_party/WebKit/Source/core/css/properties/CSSParsingUtils.cpp index 9723371..67b7e5a 100644 --- a/third_party/WebKit/Source/core/css/properties/CSSParsingUtils.cpp +++ b/third_party/WebKit/Source/core/css/properties/CSSParsingUtils.cpp
@@ -258,10 +258,14 @@ // spec: https://drafts.csswg.org/css-shapes/#supported-basic-shapes // ellipse( [<shape-radius>{2}]? [at <position>]? ) CSSBasicShapeEllipseValue* shape = CSSBasicShapeEllipseValue::Create(); + WebFeature feature = WebFeature::kBasicShapeEllipseNoRadius; if (CSSValue* radius_x = ConsumeShapeRadius(args, context.Mode())) { shape->SetRadiusX(radius_x); - if (CSSValue* radius_y = ConsumeShapeRadius(args, context.Mode())) + feature = WebFeature::kBasicShapeEllipseOneRadius; + if (CSSValue* radius_y = ConsumeShapeRadius(args, context.Mode())) { shape->SetRadiusY(radius_y); + feature = WebFeature::kBasicShapeEllipseTwoRadius; + } } if (CSSPropertyParserHelpers::ConsumeIdent<CSSValueAt>(args)) { CSSValue* center_x = nullptr; @@ -273,6 +277,7 @@ shape->SetCenterX(center_x); shape->SetCenterY(center_y); } + context.Count(feature); return shape; }
diff --git a/third_party/WebKit/Source/core/css/properties/longhands/OffsetRotateCustom.cpp b/third_party/WebKit/Source/core/css/properties/longhands/OffsetRotateCustom.cpp index 14706fd..181b1a5 100644 --- a/third_party/WebKit/Source/core/css/properties/longhands/OffsetRotateCustom.cpp +++ b/third_party/WebKit/Source/core/css/properties/longhands/OffsetRotateCustom.cpp
@@ -22,7 +22,7 @@ Node*, bool allow_visited_style) const { CSSValueList* list = CSSValueList::CreateSpaceSeparated(); - if (style.OffsetRotate().type == kOffsetRotationAuto) + if (style.OffsetRotate().type == OffsetRotationType::kAuto) list->Append(*CSSIdentifierValue::Create(CSSValueAuto)); list->Append(*CSSPrimitiveValue::Create( style.OffsetRotate().angle, CSSPrimitiveValue::UnitType::kDegrees));
diff --git a/third_party/WebKit/Source/core/css/resolver/StyleBuilderConverter.cpp b/third_party/WebKit/Source/core/css/resolver/StyleBuilderConverter.cpp index 6ff01b30..80e32c0 100644 --- a/third_party/WebKit/Source/core/css/resolver/StyleBuilderConverter.cpp +++ b/third_party/WebKit/Source/core/css/resolver/StyleBuilderConverter.cpp
@@ -1126,17 +1126,17 @@ StyleOffsetRotation StyleBuilderConverter::ConvertOffsetRotate( const CSSValue& value) { - StyleOffsetRotation result(0, kOffsetRotationFixed); + StyleOffsetRotation result(0, OffsetRotationType::kFixed); const CSSValueList& list = ToCSSValueList(value); DCHECK(list.length() == 1 || list.length() == 2); for (const auto& item : list) { if (item->IsIdentifierValue() && ToCSSIdentifierValue(*item).GetValueID() == CSSValueAuto) { - result.type = kOffsetRotationAuto; + result.type = OffsetRotationType::kAuto; } else if (item->IsIdentifierValue() && ToCSSIdentifierValue(*item).GetValueID() == CSSValueReverse) { - result.type = kOffsetRotationAuto; + result.type = OffsetRotationType::kAuto; result.angle = clampTo<float>(result.angle + 180); } else { const CSSPrimitiveValue& primitive_value = ToCSSPrimitiveValue(*item);
diff --git a/third_party/WebKit/Source/core/dom/AXObjectCache.cpp b/third_party/WebKit/Source/core/dom/AXObjectCache.cpp index 531dfc1..a59e78f 100644 --- a/third_party/WebKit/Source/core/dom/AXObjectCache.cpp +++ b/third_party/WebKit/Source/core/dom/AXObjectCache.cpp
@@ -57,7 +57,7 @@ AXObjectCache::AXObjectCache(Document& document) : ContextLifecycleObserver(document.GetExecutionContext()) {} -AXObjectCache::~AXObjectCache() {} +AXObjectCache::~AXObjectCache() = default; std::unique_ptr<ScopedAXObjectCache> ScopedAXObjectCache::Create( Document& document) {
diff --git a/third_party/WebKit/Source/core/dom/AXObjectCacheBase.cpp b/third_party/WebKit/Source/core/dom/AXObjectCacheBase.cpp index 0cb3def..137801b 100644 --- a/third_party/WebKit/Source/core/dom/AXObjectCacheBase.cpp +++ b/third_party/WebKit/Source/core/dom/AXObjectCacheBase.cpp
@@ -9,7 +9,7 @@ namespace blink { -AXObjectCacheBase::~AXObjectCacheBase() {} +AXObjectCacheBase::~AXObjectCacheBase() = default; AXObjectCacheBase::AXObjectCacheBase(Document& document) : AXObjectCache(document) {}
diff --git a/third_party/WebKit/Source/core/dom/AccessibleNode.cpp b/third_party/WebKit/Source/core/dom/AccessibleNode.cpp index 675597c..f4bb1644 100644 --- a/third_party/WebKit/Source/core/dom/AccessibleNode.cpp +++ b/third_party/WebKit/Source/core/dom/AccessibleNode.cpp
@@ -213,7 +213,7 @@ DCHECK(RuntimeEnabledFeatures::AccessibilityObjectModelEnabled()); } -AccessibleNode::~AccessibleNode() {} +AccessibleNode::~AccessibleNode() = default; // static AccessibleNode* AccessibleNode::Create(Document& document) {
diff --git a/third_party/WebKit/Source/core/dom/AccessibleNodeList.cpp b/third_party/WebKit/Source/core/dom/AccessibleNodeList.cpp index d39f7bc4..2ecc854 100644 --- a/third_party/WebKit/Source/core/dom/AccessibleNodeList.cpp +++ b/third_party/WebKit/Source/core/dom/AccessibleNodeList.cpp
@@ -25,7 +25,7 @@ DCHECK(RuntimeEnabledFeatures::AccessibilityObjectModelEnabled()); } -AccessibleNodeList::~AccessibleNodeList() {} +AccessibleNodeList::~AccessibleNodeList() = default; void AccessibleNodeList::AddOwner(AOMRelationListProperty property, AccessibleNode* node) {
diff --git a/third_party/WebKit/Source/core/dom/AnimationWorkletProxyClient.h b/third_party/WebKit/Source/core/dom/AnimationWorkletProxyClient.h index 307ba05..f17680a 100644 --- a/third_party/WebKit/Source/core/dom/AnimationWorkletProxyClient.h +++ b/third_party/WebKit/Source/core/dom/AnimationWorkletProxyClient.h
@@ -16,7 +16,7 @@ class CORE_EXPORT AnimationWorkletProxyClient : public Supplement<WorkerClients> { public: - AnimationWorkletProxyClient() {} + AnimationWorkletProxyClient() = default; static AnimationWorkletProxyClient* From(WorkerClients*); static const char* SupplementName();
diff --git a/third_party/WebKit/Source/core/dom/Attr.cpp b/third_party/WebKit/Source/core/dom/Attr.cpp index b8e8e84..6cb0085 100644 --- a/third_party/WebKit/Source/core/dom/Attr.cpp +++ b/third_party/WebKit/Source/core/dom/Attr.cpp
@@ -58,7 +58,7 @@ return new Attr(document, name, value); } -Attr::~Attr() {} +Attr::~Attr() = default; const QualifiedName Attr::GetQualifiedName() const { if (element_ && !standalone_value_or_attached_local_name_.IsNull()) {
diff --git a/third_party/WebKit/Source/core/dom/ChildNodeList.cpp b/third_party/WebKit/Source/core/dom/ChildNodeList.cpp index 06f1e9f..adc3289 100644 --- a/third_party/WebKit/Source/core/dom/ChildNodeList.cpp +++ b/third_party/WebKit/Source/core/dom/ChildNodeList.cpp
@@ -34,7 +34,7 @@ return &OwnerNode(); } -ChildNodeList::~ChildNodeList() {} +ChildNodeList::~ChildNodeList() = default; void ChildNodeList::ChildrenChanged( const ContainerNode::ChildrenChange& change) {
diff --git a/third_party/WebKit/Source/core/dom/ClassCollection.cpp b/third_party/WebKit/Source/core/dom/ClassCollection.cpp index 3030f6e..e9038e6 100644 --- a/third_party/WebKit/Source/core/dom/ClassCollection.cpp +++ b/third_party/WebKit/Source/core/dom/ClassCollection.cpp
@@ -42,6 +42,6 @@ class_names_(GetDocument().InQuirksMode() ? class_names.LowerASCII() : class_names) {} -ClassCollection::~ClassCollection() {} +ClassCollection::~ClassCollection() = default; } // namespace blink
diff --git a/third_party/WebKit/Source/core/dom/ContainerNode.cpp b/third_party/WebKit/Source/core/dom/ContainerNode.cpp index bfec3c2..306fd877 100644 --- a/third_party/WebKit/Source/core/dom/ContainerNode.cpp +++ b/third_party/WebKit/Source/core/dom/ContainerNode.cpp
@@ -1210,7 +1210,7 @@ // TODO(kochi): Handle UA shadows which marks multiple nodes as focused such // as <input type="date"> the same way as author shadow. if (ShadowRoot* root = ContainingShadowRoot()) { - if (root->GetType() != ShadowRootType::kUserAgent) + if (!root->IsUserAgent()) OwnerShadowHost()->SetFocused(received, focus_type); }
diff --git a/third_party/WebKit/Source/core/dom/ContextFeatures.h b/third_party/WebKit/Source/core/dom/ContextFeatures.h index 797a3e1..38ee11e 100644 --- a/third_party/WebKit/Source/core/dom/ContextFeatures.h +++ b/third_party/WebKit/Source/core/dom/ContextFeatures.h
@@ -72,7 +72,7 @@ public: static std::unique_ptr<ContextFeaturesClient> Empty(); - virtual ~ContextFeaturesClient() {} + virtual ~ContextFeaturesClient() = default; virtual bool IsEnabled(Document*, ContextFeatures::FeatureType, bool default_value) {
diff --git a/third_party/WebKit/Source/core/dom/ContextFeaturesClientImpl.h b/third_party/WebKit/Source/core/dom/ContextFeaturesClientImpl.h index cc3f589..ca27b34a 100644 --- a/third_party/WebKit/Source/core/dom/ContextFeaturesClientImpl.h +++ b/third_party/WebKit/Source/core/dom/ContextFeaturesClientImpl.h
@@ -52,7 +52,7 @@ void UrlDidChange(Document*) override; private: - ContextFeaturesClientImpl() {} + ContextFeaturesClientImpl() = default; bool AskIfIsEnabled(Document*, ContextFeatures::FeatureType,
diff --git a/third_party/WebKit/Source/core/dom/ContextLifecycleNotifier.h b/third_party/WebKit/Source/core/dom/ContextLifecycleNotifier.h index bca9f0f..3ca2dd3 100644 --- a/third_party/WebKit/Source/core/dom/ContextLifecycleNotifier.h +++ b/third_party/WebKit/Source/core/dom/ContextLifecycleNotifier.h
@@ -52,7 +52,7 @@ // 'blink::ExecutionContext' must explicitly initialize the base class // 'blink::ContextLifecycleNotifier' which does not have a default // constructor ExecutionContext::ExecutionContext()". - ContextLifecycleNotifier() {} + ContextLifecycleNotifier() = default; #if DCHECK_IS_ON() bool Contains(PausableObject*) const;
diff --git a/third_party/WebKit/Source/core/dom/DOMStringList.h b/third_party/WebKit/Source/core/dom/DOMStringList.h index 67eb80a..3c670c3 100644 --- a/third_party/WebKit/Source/core/dom/DOMStringList.h +++ b/third_party/WebKit/Source/core/dom/DOMStringList.h
@@ -56,7 +56,7 @@ operator const Vector<String>&() const { return strings_; } private: - explicit DOMStringList() {} + explicit DOMStringList() = default; Vector<String> strings_; };
diff --git a/third_party/WebKit/Source/core/dom/DOMStringMap.h b/third_party/WebKit/Source/core/dom/DOMStringMap.h index c4dd8c0c3..25605d2 100644 --- a/third_party/WebKit/Source/core/dom/DOMStringMap.h +++ b/third_party/WebKit/Source/core/dom/DOMStringMap.h
@@ -63,7 +63,7 @@ bool NamedPropertyQuery(const AtomicString&, ExceptionState&); protected: - DOMStringMap() {} + DOMStringMap() = default; DISALLOW_COPY_AND_ASSIGN(DOMStringMap); };
diff --git a/third_party/WebKit/Source/core/dom/DOMTokenList.h b/third_party/WebKit/Source/core/dom/DOMTokenList.h index 69b571a1..fb1dcbf 100644 --- a/third_party/WebKit/Source/core/dom/DOMTokenList.h +++ b/third_party/WebKit/Source/core/dom/DOMTokenList.h
@@ -46,7 +46,7 @@ static DOMTokenList* Create(Element& element, const QualifiedName& attr) { return new DOMTokenList(element, attr); } - virtual ~DOMTokenList() {} + virtual ~DOMTokenList() = default; virtual void Trace(blink::Visitor*); unsigned length() const { return token_set_.size(); }
diff --git a/third_party/WebKit/Source/core/dom/DecodedDataDocumentParser.cpp b/third_party/WebKit/Source/core/dom/DecodedDataDocumentParser.cpp index bd1abe66..2159053 100644 --- a/third_party/WebKit/Source/core/dom/DecodedDataDocumentParser.cpp +++ b/third_party/WebKit/Source/core/dom/DecodedDataDocumentParser.cpp
@@ -35,7 +35,7 @@ DecodedDataDocumentParser::DecodedDataDocumentParser(Document& document) : DocumentParser(&document), needs_decoder_(true) {} -DecodedDataDocumentParser::~DecodedDataDocumentParser() {} +DecodedDataDocumentParser::~DecodedDataDocumentParser() = default; void DecodedDataDocumentParser::SetDecoder( std::unique_ptr<TextResourceDecoder> decoder) {
diff --git a/third_party/WebKit/Source/core/dom/DistributedNodes.h b/third_party/WebKit/Source/core/dom/DistributedNodes.h index f5a9bd5..88f924f 100644 --- a/third_party/WebKit/Source/core/dom/DistributedNodes.h +++ b/third_party/WebKit/Source/core/dom/DistributedNodes.h
@@ -41,7 +41,7 @@ DISALLOW_NEW(); public: - DistributedNodes() {} + DistributedNodes() = default; Node* First() const { return nodes_.front(); } Node* Last() const { return nodes_.back(); }
diff --git a/third_party/WebKit/Source/core/dom/Document.cpp b/third_party/WebKit/Source/core/dom/Document.cpp index 2f3d017..3a88a0d3 100644 --- a/third_party/WebKit/Source/core/dom/Document.cpp +++ b/third_party/WebKit/Source/core/dom/Document.cpp
@@ -5376,7 +5376,7 @@ struct ParseQualifiedNameResult { QualifiedNameStatus status; UChar32 character; - ParseQualifiedNameResult() {} + ParseQualifiedNameResult() = default; explicit ParseQualifiedNameResult(QualifiedNameStatus status) : status(status) {} ParseQualifiedNameResult(QualifiedNameStatus status, UChar32 character)
diff --git a/third_party/WebKit/Source/core/dom/DocumentInit.cpp b/third_party/WebKit/Source/core/dom/DocumentInit.cpp index a5c3240..0cd536d 100644 --- a/third_party/WebKit/Source/core/dom/DocumentInit.cpp +++ b/third_party/WebKit/Source/core/dom/DocumentInit.cpp
@@ -68,7 +68,7 @@ DocumentInit::DocumentInit(const DocumentInit&) = default; -DocumentInit::~DocumentInit() {} +DocumentInit::~DocumentInit() = default; bool DocumentInit::ShouldSetURL() const { LocalFrame* frame = FrameForSecurityContext();
diff --git a/third_party/WebKit/Source/core/dom/DocumentLifecycle.cpp b/third_party/WebKit/Source/core/dom/DocumentLifecycle.cpp index 4c4bca3..068d71e 100644 --- a/third_party/WebKit/Source/core/dom/DocumentLifecycle.cpp +++ b/third_party/WebKit/Source/core/dom/DocumentLifecycle.cpp
@@ -88,7 +88,7 @@ DocumentLifecycle::DocumentLifecycle() : state_(kUninitialized), detach_count_(0), disallow_transition_count_(0) {} -DocumentLifecycle::~DocumentLifecycle() {} +DocumentLifecycle::~DocumentLifecycle() = default; #if DCHECK_IS_ON()
diff --git a/third_party/WebKit/Source/core/dom/DocumentParser.cpp b/third_party/WebKit/Source/core/dom/DocumentParser.cpp index 764e71b..6ee5059 100644 --- a/third_party/WebKit/Source/core/dom/DocumentParser.cpp +++ b/third_party/WebKit/Source/core/dom/DocumentParser.cpp
@@ -40,7 +40,7 @@ DCHECK(document); } -DocumentParser::~DocumentParser() {} +DocumentParser::~DocumentParser() = default; void DocumentParser::Trace(blink::Visitor* visitor) { visitor->Trace(document_);
diff --git a/third_party/WebKit/Source/core/dom/DocumentParserClient.h b/third_party/WebKit/Source/core/dom/DocumentParserClient.h index 7953a23..90a03098 100644 --- a/third_party/WebKit/Source/core/dom/DocumentParserClient.h +++ b/third_party/WebKit/Source/core/dom/DocumentParserClient.h
@@ -17,7 +17,7 @@ virtual void Trace(blink::Visitor* visitor) {} protected: - DocumentParserClient() {} + DocumentParserClient() = default; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/dom/DocumentParserTiming.h b/third_party/WebKit/Source/core/dom/DocumentParserTiming.h index 4aa96b2f..f53140c4 100644 --- a/third_party/WebKit/Source/core/dom/DocumentParserTiming.h +++ b/third_party/WebKit/Source/core/dom/DocumentParserTiming.h
@@ -20,7 +20,7 @@ USING_GARBAGE_COLLECTED_MIXIN(DocumentParserTiming); public: - virtual ~DocumentParserTiming() {} + virtual ~DocumentParserTiming() = default; static DocumentParserTiming& From(Document&);
diff --git a/third_party/WebKit/Source/core/dom/DocumentTest.cpp b/third_party/WebKit/Source/core/dom/DocumentTest.cpp index 590b602..4373e77 100644 --- a/third_party/WebKit/Source/core/dom/DocumentTest.cpp +++ b/third_party/WebKit/Source/core/dom/DocumentTest.cpp
@@ -314,8 +314,8 @@ class MockWebApplicationCacheHost : public blink::WebApplicationCacheHost { public: - MockWebApplicationCacheHost() {} - ~MockWebApplicationCacheHost() override {} + MockWebApplicationCacheHost() = default; + ~MockWebApplicationCacheHost() override = default; void SelectCacheWithoutManifest() override { without_manifest_was_called_ = true;
diff --git a/third_party/WebKit/Source/core/dom/Element.cpp b/third_party/WebKit/Source/core/dom/Element.cpp index d0fa7b1..89ae7dc0 100644 --- a/third_party/WebKit/Source/core/dom/Element.cpp +++ b/third_party/WebKit/Source/core/dom/Element.cpp
@@ -2408,7 +2408,7 @@ script_state, GetDocument(), HostsUsingFeatures::Feature::kElementCreateShadowRoot); if (ShadowRoot* root = GetShadowRoot()) { - if (root->GetType() == ShadowRootType::kUserAgent) { + if (root->IsUserAgent()) { exception_state.ThrowDOMException( kInvalidStateError, "Shadow root cannot be created on a host which already hosts a " @@ -2496,14 +2496,20 @@ DCHECK(!ClosedShadowRoot()); DCHECK(AreAuthorShadowsAllowed()); if (AlwaysCreateUserAgentShadowRoot()) - EnsureUserAgentShadowRoot(); + EnsureLegacyUserAgentShadowRootV0(); GetDocument().SetShadowCascadeOrder(ShadowCascadeOrder::kShadowCascadeV0); return EnsureShadow().AddShadowRoot(*this, ShadowRootType::V0); } -ShadowRoot& Element::CreateUserAgentShadowRoot() { +ShadowRoot& Element::CreateLegacyUserAgentShadowRootV0() { DCHECK(!GetShadowRoot()); - return EnsureShadow().AddShadowRoot(*this, ShadowRootType::kUserAgent); + return EnsureShadow().AddShadowRoot(*this, + ShadowRootType::kLegacyUserAgentV0); +} + +ShadowRoot& Element::CreateUserAgentShadowRootV1() { + DCHECK(!GetShadowRoot()); + return EnsureShadow().AddShadowRoot(*this, ShadowRootType::kUserAgentV1); } ShadowRoot& Element::AttachShadowRootInternal(ShadowRootType type, @@ -2548,24 +2554,37 @@ ShadowRoot* root = GetShadowRoot(); if (!root) return nullptr; - return root->GetType() != ShadowRootType::kUserAgent ? root : nullptr; + return !root->IsUserAgent() ? root : nullptr; } ShadowRoot* Element::UserAgentShadowRoot() const { if (ElementShadow* element_shadow = Shadow()) { ShadowRoot& root = element_shadow->OldestShadowRoot(); - DCHECK(root.GetType() == ShadowRootType::kUserAgent); + DCHECK(root.IsUserAgent()); return &root; } return nullptr; } -ShadowRoot& Element::EnsureUserAgentShadowRoot() { - if (ShadowRoot* shadow_root = UserAgentShadowRoot()) +ShadowRoot& Element::EnsureLegacyUserAgentShadowRootV0() { + if (ShadowRoot* shadow_root = UserAgentShadowRoot()) { + DCHECK(shadow_root->GetType() == ShadowRootType::kLegacyUserAgentV0); return *shadow_root; + } ShadowRoot& shadow_root = - EnsureShadow().AddShadowRoot(*this, ShadowRootType::kUserAgent); + EnsureShadow().AddShadowRoot(*this, ShadowRootType::kLegacyUserAgentV0); + DidAddUserAgentShadowRoot(shadow_root); + return shadow_root; +} + +ShadowRoot& Element::EnsureUserAgentShadowRootV1() { + if (ShadowRoot* shadow_root = UserAgentShadowRoot()) { + DCHECK(shadow_root->GetType() == ShadowRootType::kUserAgentV1); + return *shadow_root; + } + ShadowRoot& shadow_root = + EnsureShadow().AddShadowRoot(*this, ShadowRootType::kUserAgentV1); DidAddUserAgentShadowRoot(shadow_root); return shadow_root; } @@ -3444,7 +3463,7 @@ const AtomicString& Element::ShadowPseudoId() const { if (ShadowRoot* root = ContainingShadowRoot()) { - if (root->GetType() == ShadowRootType::kUserAgent) + if (root->IsUserAgent()) return FastGetAttribute(pseudoAttr); } return g_null_atom; @@ -4456,8 +4475,8 @@ EnsureUniqueElementData().inline_style_.Clear(); } else if (modification_reason == AttributeModificationReason::kByCloning || ContentSecurityPolicy::ShouldBypassMainWorld(&GetDocument()) || - (ContainingShadowRoot() && ContainingShadowRoot()->GetType() == - ShadowRootType::kUserAgent) || + (ContainingShadowRoot() && + ContainingShadowRoot()->IsUserAgent()) || GetDocument().GetContentSecurityPolicy()->AllowInlineStyle( this, GetDocument().Url(), String(), start_line_number, new_style_string, ContentSecurityPolicy::InlineType::kBlock)) {
diff --git a/third_party/WebKit/Source/core/dom/Element.h b/third_party/WebKit/Source/core/dom/Element.h index 986e31a..895a3570 100644 --- a/third_party/WebKit/Source/core/dom/Element.h +++ b/third_party/WebKit/Source/core/dom/Element.h
@@ -118,7 +118,7 @@ struct FocusParams { STACK_ALLOCATED(); - FocusParams() {} + FocusParams() = default; FocusParams(SelectionBehaviorOnFocus selection, WebFocusType focus_type, InputDeviceCapabilities* capabilities, @@ -494,7 +494,8 @@ const ShadowRootInit&, ExceptionState&); ShadowRoot& CreateShadowRootInternal(); - ShadowRoot& CreateUserAgentShadowRoot(); + ShadowRoot& CreateLegacyUserAgentShadowRootV0(); + ShadowRoot& CreateUserAgentShadowRootV1(); ShadowRoot& AttachShadowRootInternal(ShadowRootType, bool delegates_focus = false); @@ -507,7 +508,8 @@ ShadowRoot* ShadowRootIfV1() const; - ShadowRoot& EnsureUserAgentShadowRoot(); + ShadowRoot& EnsureLegacyUserAgentShadowRootV0(); + ShadowRoot& EnsureUserAgentShadowRootV1(); bool IsInDescendantTreeOf(const Element* shadow_host) const;
diff --git a/third_party/WebKit/Source/core/dom/ElementData.cpp b/third_party/WebKit/Source/core/dom/ElementData.cpp index 7e93da8d..bb45e778 100644 --- a/third_party/WebKit/Source/core/dom/ElementData.cpp +++ b/third_party/WebKit/Source/core/dom/ElementData.cpp
@@ -149,7 +149,7 @@ return new (slot) ShareableElementData(attributes); } -UniqueElementData::UniqueElementData() {} +UniqueElementData::UniqueElementData() = default; UniqueElementData::UniqueElementData(const UniqueElementData& other) : ElementData(other, true),
diff --git a/third_party/WebKit/Source/core/dom/ElementDataCache.cpp b/third_party/WebKit/Source/core/dom/ElementDataCache.cpp index 203734e4..42b98f2 100644 --- a/third_party/WebKit/Source/core/dom/ElementDataCache.cpp +++ b/third_party/WebKit/Source/core/dom/ElementDataCache.cpp
@@ -62,7 +62,7 @@ return it->value.Get(); } -ElementDataCache::ElementDataCache() {} +ElementDataCache::ElementDataCache() = default; void ElementDataCache::Trace(blink::Visitor* visitor) { visitor->Trace(shareable_element_data_cache_);
diff --git a/third_party/WebKit/Source/core/dom/ElementShadow.cpp b/third_party/WebKit/Source/core/dom/ElementShadow.cpp index d76437d..a737e76 100644 --- a/third_party/WebKit/Source/core/dom/ElementShadow.cpp +++ b/third_party/WebKit/Source/core/dom/ElementShadow.cpp
@@ -66,7 +66,8 @@ for (ShadowRoot* root = &YoungestShadowRoot(); root; root = root->OlderShadowRoot()) root->LazyReattachIfAttached(); - } else if (type == ShadowRootType::V0 || type == ShadowRootType::kUserAgent) { + } else if (type == ShadowRootType::V0 || + type == ShadowRootType::kLegacyUserAgentV0) { DCHECK(!element_shadow_v0_); element_shadow_v0_ = ElementShadowV0::Create(*this); }
diff --git a/third_party/WebKit/Source/core/dom/ElementShadowV0.cpp b/third_party/WebKit/Source/core/dom/ElementShadowV0.cpp index 56f7d9b7..256c3f8 100644 --- a/third_party/WebKit/Source/core/dom/ElementShadowV0.cpp +++ b/third_party/WebKit/Source/core/dom/ElementShadowV0.cpp
@@ -130,7 +130,7 @@ ElementShadowV0::ElementShadowV0(ElementShadow& element_shadow) : element_shadow_(&element_shadow), needs_select_feature_set_(false) {} -ElementShadowV0::~ElementShadowV0() {} +ElementShadowV0::~ElementShadowV0() = default; ShadowRoot& ElementShadowV0::YoungestShadowRoot() const { return element_shadow_->YoungestShadowRoot();
diff --git a/third_party/WebKit/Source/core/dom/EmptyNodeList.cpp b/third_party/WebKit/Source/core/dom/EmptyNodeList.cpp index e8b6c7ab..5923363 100644 --- a/third_party/WebKit/Source/core/dom/EmptyNodeList.cpp +++ b/third_party/WebKit/Source/core/dom/EmptyNodeList.cpp
@@ -36,7 +36,7 @@ namespace blink { -EmptyNodeList::~EmptyNodeList() {} +EmptyNodeList::~EmptyNodeList() = default; Node* EmptyNodeList::VirtualOwnerNode() const { return &OwnerNode();
diff --git a/third_party/WebKit/Source/core/dom/ExecutionContext.cpp b/third_party/WebKit/Source/core/dom/ExecutionContext.cpp index 61b5bfe..7a35e2b0 100644 --- a/third_party/WebKit/Source/core/dom/ExecutionContext.cpp +++ b/third_party/WebKit/Source/core/dom/ExecutionContext.cpp
@@ -53,7 +53,7 @@ window_interaction_tokens_(0), referrer_policy_(kReferrerPolicyDefault) {} -ExecutionContext::~ExecutionContext() {} +ExecutionContext::~ExecutionContext() = default; // static ExecutionContext* ExecutionContext::From(const ScriptState* script_state) {
diff --git a/third_party/WebKit/Source/core/dom/IdTargetObserver.cpp b/third_party/WebKit/Source/core/dom/IdTargetObserver.cpp index 2e73248..9474181 100644 --- a/third_party/WebKit/Source/core/dom/IdTargetObserver.cpp +++ b/third_party/WebKit/Source/core/dom/IdTargetObserver.cpp
@@ -35,7 +35,7 @@ Registry().AddObserver(id_, this); } -IdTargetObserver::~IdTargetObserver() {} +IdTargetObserver::~IdTargetObserver() = default; void IdTargetObserver::Trace(blink::Visitor* visitor) { visitor->Trace(registry_);
diff --git a/third_party/WebKit/Source/core/dom/IdleDeadlineTest.cpp b/third_party/WebKit/Source/core/dom/IdleDeadlineTest.cpp index 1e44d95..65edf047 100644 --- a/third_party/WebKit/Source/core/dom/IdleDeadlineTest.cpp +++ b/third_party/WebKit/Source/core/dom/IdleDeadlineTest.cpp
@@ -15,8 +15,8 @@ class MockIdleDeadlineScheduler final : public WebScheduler { public: - MockIdleDeadlineScheduler() {} - ~MockIdleDeadlineScheduler() override {} + MockIdleDeadlineScheduler() = default; + ~MockIdleDeadlineScheduler() override = default; // WebScheduler implementation: WebTaskRunner* LoadingTaskRunner() override { return nullptr; } @@ -48,8 +48,8 @@ class MockIdleDeadlineThread final : public WebThread { public: - MockIdleDeadlineThread() {} - ~MockIdleDeadlineThread() override {} + MockIdleDeadlineThread() = default; + ~MockIdleDeadlineThread() override = default; bool IsCurrentThread() const override { return true; } WebScheduler* Scheduler() const override { return &scheduler_; } @@ -60,8 +60,8 @@ class MockIdleDeadlinePlatform : public TestingPlatformSupport { public: - MockIdleDeadlinePlatform() {} - ~MockIdleDeadlinePlatform() override {} + MockIdleDeadlinePlatform() = default; + ~MockIdleDeadlinePlatform() override = default; WebThread* CurrentThread() override { return &thread_; } private:
diff --git a/third_party/WebKit/Source/core/dom/Iterator.h b/third_party/WebKit/Source/core/dom/Iterator.h index 673b87a4f..767273459 100644 --- a/third_party/WebKit/Source/core/dom/Iterator.h +++ b/third_party/WebKit/Source/core/dom/Iterator.h
@@ -18,8 +18,8 @@ DEFINE_WRAPPERTYPEINFO(); public: - Iterator() {} - virtual ~Iterator() {} + Iterator() = default; + virtual ~Iterator() = default; virtual ScriptValue next(ScriptState*, ExceptionState&) = 0; virtual ScriptValue next(ScriptState*,
diff --git a/third_party/WebKit/Source/core/dom/LiveNodeListBase.h b/third_party/WebKit/Source/core/dom/LiveNodeListBase.h index 63fd954..ffcd400 100644 --- a/third_party/WebKit/Source/core/dom/LiveNodeListBase.h +++ b/third_party/WebKit/Source/core/dom/LiveNodeListBase.h
@@ -54,7 +54,7 @@ DCHECK_EQ(collection_type_, static_cast<unsigned>(collection_type)); } - virtual ~LiveNodeListBase() {} + virtual ~LiveNodeListBase() = default; ContainerNode& RootNode() const;
diff --git a/third_party/WebKit/Source/core/dom/LiveNodeListRegistry.h b/third_party/WebKit/Source/core/dom/LiveNodeListRegistry.h index 84772d8..8994c3e 100644 --- a/third_party/WebKit/Source/core/dom/LiveNodeListRegistry.h +++ b/third_party/WebKit/Source/core/dom/LiveNodeListRegistry.h
@@ -35,7 +35,7 @@ using Entry = std::pair<UntracedMember<const LiveNodeListBase>, unsigned>; public: - LiveNodeListRegistry() {} + LiveNodeListRegistry() = default; void Add(const LiveNodeListBase*, NodeListInvalidationType); void Remove(const LiveNodeListBase*, NodeListInvalidationType);
diff --git a/third_party/WebKit/Source/core/dom/MutationObserverRegistration.cpp b/third_party/WebKit/Source/core/dom/MutationObserverRegistration.cpp index 81d5c6c..453d74ac9 100644 --- a/third_party/WebKit/Source/core/dom/MutationObserverRegistration.cpp +++ b/third_party/WebKit/Source/core/dom/MutationObserverRegistration.cpp
@@ -56,7 +56,7 @@ observer_->ObservationStarted(this); } -MutationObserverRegistration::~MutationObserverRegistration() {} +MutationObserverRegistration::~MutationObserverRegistration() = default; void MutationObserverRegistration::Dispose() { ClearTransientRegistrations();
diff --git a/third_party/WebKit/Source/core/dom/MutationRecord.cpp b/third_party/WebKit/Source/core/dom/MutationRecord.cpp index b17280e..a80523a 100644 --- a/third_party/WebKit/Source/core/dom/MutationRecord.cpp +++ b/third_party/WebKit/Source/core/dom/MutationRecord.cpp
@@ -230,6 +230,6 @@ return new MutationRecordWithNullOldValue(record); } -MutationRecord::~MutationRecord() {} +MutationRecord::~MutationRecord() = default; } // namespace blink
diff --git a/third_party/WebKit/Source/core/dom/MutationRecord.h b/third_party/WebKit/Source/core/dom/MutationRecord.h index 9444d57..1abff9098 100644 --- a/third_party/WebKit/Source/core/dom/MutationRecord.h +++ b/third_party/WebKit/Source/core/dom/MutationRecord.h
@@ -59,7 +59,7 @@ const String& old_value); static MutationRecord* CreateWithNullOldValue(MutationRecord*); - MutationRecord() {} + MutationRecord() = default; virtual ~MutationRecord();
diff --git a/third_party/WebKit/Source/core/dom/NameNodeList.cpp b/third_party/WebKit/Source/core/dom/NameNodeList.cpp index bfa973ad..00fa4f7 100644 --- a/third_party/WebKit/Source/core/dom/NameNodeList.cpp +++ b/third_party/WebKit/Source/core/dom/NameNodeList.cpp
@@ -34,7 +34,7 @@ : LiveNodeList(root_node, kNameNodeListType, kInvalidateOnNameAttrChange), name_(name) {} -NameNodeList::~NameNodeList() {} +NameNodeList::~NameNodeList() = default; bool NameNodeList::ElementMatches(const Element& element) const { return element.GetNameAttribute() == name_;
diff --git a/third_party/WebKit/Source/core/dom/NodeIterator.cpp b/third_party/WebKit/Source/core/dom/NodeIterator.cpp index 9e4c83b..a92f870e 100644 --- a/third_party/WebKit/Source/core/dom/NodeIterator.cpp +++ b/third_party/WebKit/Source/core/dom/NodeIterator.cpp
@@ -31,7 +31,7 @@ namespace blink { -NodeIterator::NodePointer::NodePointer() {} +NodeIterator::NodePointer::NodePointer() = default; NodeIterator::NodePointer::NodePointer(Node* n, bool b) : node(n), is_pointer_before_node(b) {}
diff --git a/third_party/WebKit/Source/core/dom/NodeList.h b/third_party/WebKit/Source/core/dom/NodeList.h index f725d2e..231ca74 100644 --- a/third_party/WebKit/Source/core/dom/NodeList.h +++ b/third_party/WebKit/Source/core/dom/NodeList.h
@@ -35,7 +35,7 @@ DEFINE_WRAPPERTYPEINFO(); public: - virtual ~NodeList() {} + virtual ~NodeList() = default; // DOM methods & attributes for NodeList virtual unsigned length() const = 0; @@ -48,7 +48,7 @@ virtual Node* VirtualOwnerNode() const { return nullptr; } protected: - NodeList() {} + NodeList() = default; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/dom/NodeRareData.h b/third_party/WebKit/Source/core/dom/NodeRareData.h index 03fe80e..96d99f1 100644 --- a/third_party/WebKit/Source/core/dom/NodeRareData.h +++ b/third_party/WebKit/Source/core/dom/NodeRareData.h
@@ -81,7 +81,7 @@ } private: - NodeMutationObserverData() {} + NodeMutationObserverData() = default; HeapVector<TraceWrapperMember<MutationObserverRegistration>> registry_; HeapHashSet<TraceWrapperMember<MutationObserverRegistration>>
diff --git a/third_party/WebKit/Source/core/dom/NodeTest.cpp b/third_party/WebKit/Source/core/dom/NodeTest.cpp index 8fd2922..45c7893f 100644 --- a/third_party/WebKit/Source/core/dom/NodeTest.cpp +++ b/third_party/WebKit/Source/core/dom/NodeTest.cpp
@@ -56,10 +56,10 @@ Node* InitializeShadowDOMTree(Element* test_node) { SetBodyContent("<div id=\"root\"></div>"); Element* root = GetDocument().getElementById("root"); - ShadowRoot& first_shadow = root->CreateUserAgentShadowRoot(); + ShadowRoot& first_shadow = root->CreateLegacyUserAgentShadowRootV0(); first_shadow.AppendChild(test_node); - ShadowRoot& second_shadow = test_node->CreateUserAgentShadowRoot(); + ShadowRoot& second_shadow = test_node->CreateLegacyUserAgentShadowRootV0(); HTMLDivElement* class_div = HTMLDivElement::Create(GetDocument()); class_div->setAttribute("class", "test");
diff --git a/third_party/WebKit/Source/core/dom/ProcessingInstruction.cpp b/third_party/WebKit/Source/core/dom/ProcessingInstruction.cpp index e08f8d4..ee3b8ae5 100644 --- a/third_party/WebKit/Source/core/dom/ProcessingInstruction.cpp +++ b/third_party/WebKit/Source/core/dom/ProcessingInstruction.cpp
@@ -56,7 +56,7 @@ return new ProcessingInstruction(document, target, data); } -ProcessingInstruction::~ProcessingInstruction() {} +ProcessingInstruction::~ProcessingInstruction() = default; EventListener* ProcessingInstruction::EventListenerForXSLT() { if (!listener_for_xslt_)
diff --git a/third_party/WebKit/Source/core/dom/ProcessingInstruction.h b/third_party/WebKit/Source/core/dom/ProcessingInstruction.h index c2a77349..5c39ef6 100644 --- a/third_party/WebKit/Source/core/dom/ProcessingInstruction.h +++ b/third_party/WebKit/Source/core/dom/ProcessingInstruction.h
@@ -57,7 +57,7 @@ // For XSLT class DetachableEventListener : public GarbageCollectedMixin { public: - virtual ~DetachableEventListener() {} + virtual ~DetachableEventListener() = default; virtual EventListener* ToEventListener() = 0; // Detach event listener from its processing instruction. virtual void Detach() = 0;
diff --git a/third_party/WebKit/Source/core/dom/QualifiedName.cpp b/third_party/WebKit/Source/core/dom/QualifiedName.cpp index 23e2f476..857a5cca 100644 --- a/third_party/WebKit/Source/core/dom/QualifiedName.cpp +++ b/third_party/WebKit/Source/core/dom/QualifiedName.cpp
@@ -99,7 +99,7 @@ impl_->Release(); } -QualifiedName::~QualifiedName() {} +QualifiedName::~QualifiedName() = default; QualifiedName::QualifiedNameImpl::~QualifiedNameImpl() { GetQualifiedNameCache().erase(this);
diff --git a/third_party/WebKit/Source/core/dom/QualifiedName.h b/third_party/WebKit/Source/core/dom/QualifiedName.h index fb558a1..a3630fc 100644 --- a/third_party/WebKit/Source/core/dom/QualifiedName.h +++ b/third_party/WebKit/Source/core/dom/QualifiedName.h
@@ -109,7 +109,7 @@ const AtomicString& namespace_uri); ~QualifiedName(); - QualifiedName(const QualifiedName& other) : impl_(other.impl_) {} + QualifiedName(const QualifiedName& other) = default; const QualifiedName& operator=(const QualifiedName& other) { impl_ = other.impl_; return *this;
diff --git a/third_party/WebKit/Source/core/dom/ScriptedIdleTaskController.cpp b/third_party/WebKit/Source/core/dom/ScriptedIdleTaskController.cpp index b67220e8..ac6c55ca 100644 --- a/third_party/WebKit/Source/core/dom/ScriptedIdleTaskController.cpp +++ b/third_party/WebKit/Source/core/dom/ScriptedIdleTaskController.cpp
@@ -29,7 +29,7 @@ ScriptedIdleTaskController* controller) { return base::AdoptRef(new IdleRequestCallbackWrapper(id, controller)); } - virtual ~IdleRequestCallbackWrapper() {} + virtual ~IdleRequestCallbackWrapper() = default; static void IdleTaskFired( scoped_refptr<IdleRequestCallbackWrapper> callback_wrapper, @@ -107,7 +107,7 @@ PauseIfNeeded(); } -ScriptedIdleTaskController::~ScriptedIdleTaskController() {} +ScriptedIdleTaskController::~ScriptedIdleTaskController() = default; void ScriptedIdleTaskController::Trace(blink::Visitor* visitor) { visitor->Trace(idle_tasks_);
diff --git a/third_party/WebKit/Source/core/dom/ScriptedIdleTaskControllerTest.cpp b/third_party/WebKit/Source/core/dom/ScriptedIdleTaskControllerTest.cpp index 3bb117e..e3494211 100644 --- a/third_party/WebKit/Source/core/dom/ScriptedIdleTaskControllerTest.cpp +++ b/third_party/WebKit/Source/core/dom/ScriptedIdleTaskControllerTest.cpp
@@ -21,7 +21,7 @@ public: MockScriptedIdleTaskControllerScheduler(bool should_yield) : should_yield_(should_yield) {} - ~MockScriptedIdleTaskControllerScheduler() override {} + ~MockScriptedIdleTaskControllerScheduler() override = default; // WebScheduler implementation: WebTaskRunner* LoadingTaskRunner() override { return nullptr; } @@ -64,7 +64,7 @@ public: MockScriptedIdleTaskControllerThread(bool should_yield) : scheduler_(should_yield) {} - ~MockScriptedIdleTaskControllerThread() override {} + ~MockScriptedIdleTaskControllerThread() override = default; bool IsCurrentThread() const override { return true; } WebScheduler* Scheduler() const override { return &scheduler_; } @@ -80,7 +80,7 @@ public: MockScriptedIdleTaskControllerPlatform(bool should_yield) : thread_(should_yield) {} - ~MockScriptedIdleTaskControllerPlatform() override {} + ~MockScriptedIdleTaskControllerPlatform() override = default; WebThread* CurrentThread() override { return &thread_; } void RunIdleTask() { thread_.RunIdleTask(); }
diff --git a/third_party/WebKit/Source/core/dom/SecurityContext.cpp b/third_party/WebKit/Source/core/dom/SecurityContext.cpp index b89e1c80..d3667d3 100644 --- a/third_party/WebKit/Source/core/dom/SecurityContext.cpp +++ b/third_party/WebKit/Source/core/dom/SecurityContext.cpp
@@ -40,7 +40,7 @@ insecure_request_policy_(kLeaveInsecureRequestsAlone), require_safe_types_(false) {} -SecurityContext::~SecurityContext() {} +SecurityContext::~SecurityContext() = default; void SecurityContext::Trace(blink::Visitor* visitor) { visitor->Trace(content_security_policy_);
diff --git a/third_party/WebKit/Source/core/dom/ShadowRoot.cpp b/third_party/WebKit/Source/core/dom/ShadowRoot.cpp index 966692c..3d26e12 100644 --- a/third_party/WebKit/Source/core/dom/ShadowRoot.cpp +++ b/third_party/WebKit/Source/core/dom/ShadowRoot.cpp
@@ -67,7 +67,7 @@ delegates_focus_(false), unused_(0) {} -ShadowRoot::~ShadowRoot() {} +ShadowRoot::~ShadowRoot() = default; ShadowRoot* ShadowRoot::YoungerShadowRoot() const { if (GetType() == ShadowRootType::V0 && shadow_root_rare_data_v0_) @@ -368,7 +368,10 @@ std::ostream& operator<<(std::ostream& ostream, const ShadowRootType& type) { switch (type) { - case ShadowRootType::kUserAgent: + case ShadowRootType::kLegacyUserAgentV0: + ostream << "UserAgentV0"; + break; + case ShadowRootType::kUserAgentV1: ostream << "UserAgent"; break; case ShadowRootType::V0:
diff --git a/third_party/WebKit/Source/core/dom/ShadowRoot.h b/third_party/WebKit/Source/core/dom/ShadowRoot.h index 03c62f3..69829d4 100644 --- a/third_party/WebKit/Source/core/dom/ShadowRoot.h +++ b/third_party/WebKit/Source/core/dom/ShadowRoot.h
@@ -49,7 +49,13 @@ class V0InsertionPoint; class WhitespaceAttacher; -enum class ShadowRootType { kUserAgent, V0, kOpen, kClosed }; +enum class ShadowRootType { + kLegacyUserAgentV0, + V0, + kOpen, + kClosed, + kUserAgentV1 +}; class CORE_EXPORT ShadowRoot final : public DocumentFragment, public TreeScope { DEFINE_WRAPPERTYPEINFO(); @@ -93,7 +99,12 @@ } bool IsV1() const { return GetType() == ShadowRootType::kOpen || - GetType() == ShadowRootType::kClosed; + GetType() == ShadowRootType::kClosed || + GetType() == ShadowRootType::kUserAgentV1; + } + bool IsUserAgent() const { + return GetType() == ShadowRootType::kLegacyUserAgentV0 || + GetType() == ShadowRootType::kUserAgentV1; } void AttachLayoutTree(AttachContext&) override; @@ -191,11 +202,12 @@ TraceWrapperMember<StyleSheetList> style_sheet_list_; Member<SlotAssignment> slot_assignment_; unsigned short child_shadow_root_count_; - unsigned short type_ : 2; + // TODO(kochi): Once kUserAgentTypeV0 is gone, shrink this to 2. + unsigned short type_ : 3; unsigned short registered_with_parent_shadow_root_ : 1; unsigned short descendant_insertion_points_is_valid_ : 1; unsigned short delegates_focus_ : 1; - unsigned short unused_ : 11; + unsigned short unused_ : 10; }; inline Element* ShadowRoot::ActiveElement() const {
diff --git a/third_party/WebKit/Source/core/dom/SpaceSplitString.h b/third_party/WebKit/Source/core/dom/SpaceSplitString.h index f2d12cb9..971f6f1 100644 --- a/third_party/WebKit/Source/core/dom/SpaceSplitString.h +++ b/third_party/WebKit/Source/core/dom/SpaceSplitString.h
@@ -33,7 +33,7 @@ USING_FAST_MALLOC(SpaceSplitString); public: - SpaceSplitString() {} + SpaceSplitString() = default; explicit SpaceSplitString(const AtomicString& string) { Set(string); } bool operator!=(const SpaceSplitString& other) const {
diff --git a/third_party/WebKit/Source/core/dom/StaticNodeList.h b/third_party/WebKit/Source/core/dom/StaticNodeList.h index ea3e394..1764dee 100644 --- a/third_party/WebKit/Source/core/dom/StaticNodeList.h +++ b/third_party/WebKit/Source/core/dom/StaticNodeList.h
@@ -71,7 +71,7 @@ } template <typename NodeType> -StaticNodeTypeList<NodeType>::~StaticNodeTypeList() {} +StaticNodeTypeList<NodeType>::~StaticNodeTypeList() = default; template <typename NodeType> unsigned StaticNodeTypeList<NodeType>::length() const {
diff --git a/third_party/WebKit/Source/core/dom/TagCollection.cpp b/third_party/WebKit/Source/core/dom/TagCollection.cpp index e50e6fe..0432904 100644 --- a/third_party/WebKit/Source/core/dom/TagCollection.cpp +++ b/third_party/WebKit/Source/core/dom/TagCollection.cpp
@@ -34,7 +34,7 @@ : HTMLCollection(root_node, type, kDoesNotOverrideItemAfter), qualified_name_(qualified_name) {} -TagCollection::~TagCollection() {} +TagCollection::~TagCollection() = default; bool TagCollection::ElementMatches(const Element& test_node) const { if (qualified_name_ == g_star_atom) @@ -53,7 +53,7 @@ DCHECK(namespace_uri_.IsNull() || !namespace_uri_.IsEmpty()); } -TagCollectionNS::~TagCollectionNS() {} +TagCollectionNS::~TagCollectionNS() = default; bool TagCollectionNS::ElementMatches(const Element& test_node) const { // Implements
diff --git a/third_party/WebKit/Source/core/dom/TreeOrderedList.h b/third_party/WebKit/Source/core/dom/TreeOrderedList.h index 22cf1ab..a051b4b 100644 --- a/third_party/WebKit/Source/core/dom/TreeOrderedList.h +++ b/third_party/WebKit/Source/core/dom/TreeOrderedList.h
@@ -42,7 +42,7 @@ DISALLOW_NEW(); public: - TreeOrderedList() {} + TreeOrderedList() = default; void Add(Node*); void Remove(const Node*);
diff --git a/third_party/WebKit/Source/core/dom/TreeOrderedMap.cpp b/third_party/WebKit/Source/core/dom/TreeOrderedMap.cpp index 97c62225..2d8d842 100644 --- a/third_party/WebKit/Source/core/dom/TreeOrderedMap.cpp +++ b/third_party/WebKit/Source/core/dom/TreeOrderedMap.cpp
@@ -46,7 +46,7 @@ return new TreeOrderedMap; } -TreeOrderedMap::TreeOrderedMap() {} +TreeOrderedMap::TreeOrderedMap() = default; #if DCHECK_IS_ON() static int g_remove_scope_level = 0;
diff --git a/third_party/WebKit/Source/core/dom/TreeScope.cpp b/third_party/WebKit/Source/core/dom/TreeScope.cpp index 724c768c..6ad6b022 100644 --- a/third_party/WebKit/Source/core/dom/TreeScope.cpp +++ b/third_party/WebKit/Source/core/dom/TreeScope.cpp
@@ -74,7 +74,7 @@ root_node_->SetTreeScope(this); } -TreeScope::~TreeScope() {} +TreeScope::~TreeScope() = default; void TreeScope::ResetTreeScope() { selection_ = nullptr;
diff --git a/third_party/WebKit/Source/core/dom/UserActionElementSet.cpp b/third_party/WebKit/Source/core/dom/UserActionElementSet.cpp index 62f7b63..4c078250 100644 --- a/third_party/WebKit/Source/core/dom/UserActionElementSet.cpp +++ b/third_party/WebKit/Source/core/dom/UserActionElementSet.cpp
@@ -31,9 +31,9 @@ namespace blink { -UserActionElementSet::UserActionElementSet() {} +UserActionElementSet::UserActionElementSet() = default; -UserActionElementSet::~UserActionElementSet() {} +UserActionElementSet::~UserActionElementSet() = default; void UserActionElementSet::DidDetach(Element& element) { DCHECK(element.IsUserActionElement());
diff --git a/third_party/WebKit/Source/core/dom/UserGestureIndicator.h b/third_party/WebKit/Source/core/dom/UserGestureIndicator.h index 7ba13a2..4dd952f 100644 --- a/third_party/WebKit/Source/core/dom/UserGestureIndicator.h +++ b/third_party/WebKit/Source/core/dom/UserGestureIndicator.h
@@ -25,7 +25,7 @@ enum Status { kNewGesture, kPossiblyExistingGesture }; enum TimeoutPolicy { kDefault, kOutOfProcess, kHasPaused }; - ~UserGestureToken() {} + ~UserGestureToken() = default; // TODO(mustaq): The only user of this method is PepperPluginInstanceImpl. We // need to investigate the usecase closely.
diff --git a/third_party/WebKit/Source/core/dom/V0InsertionPoint.cpp b/third_party/WebKit/Source/core/dom/V0InsertionPoint.cpp index 24f23ff..0bd59d28 100644 --- a/third_party/WebKit/Source/core/dom/V0InsertionPoint.cpp +++ b/third_party/WebKit/Source/core/dom/V0InsertionPoint.cpp
@@ -50,7 +50,7 @@ SetHasCustomStyleCallbacks(); } -V0InsertionPoint::~V0InsertionPoint() {} +V0InsertionPoint::~V0InsertionPoint() = default; void V0InsertionPoint::SetDistributedNodes( DistributedNodes& distributed_nodes) {
diff --git a/third_party/WebKit/Source/core/dom/WeakIdentifierMap.h b/third_party/WebKit/Source/core/dom/WeakIdentifierMap.h index a30d4afd..360e270 100644 --- a/third_party/WebKit/Source/core/dom/WeakIdentifierMap.h +++ b/third_party/WebKit/Source/core/dom/WeakIdentifierMap.h
@@ -70,7 +70,7 @@ private: static WeakIdentifierMap<T, IdentifierType>& Instance(); - WeakIdentifierMap() {} + WeakIdentifierMap() = default; static IdentifierType Next() { static IdentifierType last_id = 0;
diff --git a/third_party/WebKit/Source/core/dom/WhitespaceAttacher.h b/third_party/WebKit/Source/core/dom/WhitespaceAttacher.h index a9991e3d..92c5687 100644 --- a/third_party/WebKit/Source/core/dom/WhitespaceAttacher.h +++ b/third_party/WebKit/Source/core/dom/WhitespaceAttacher.h
@@ -34,7 +34,7 @@ STACK_ALLOCATED(); public: - WhitespaceAttacher() {} + WhitespaceAttacher() = default; ~WhitespaceAttacher(); void DidVisitText(Text*);
diff --git a/third_party/WebKit/Source/core/dom/events/AddEventListenerOptionsResolved.cpp b/third_party/WebKit/Source/core/dom/events/AddEventListenerOptionsResolved.cpp index b7cf9ff..0df9241 100644 --- a/third_party/WebKit/Source/core/dom/events/AddEventListenerOptionsResolved.cpp +++ b/third_party/WebKit/Source/core/dom/events/AddEventListenerOptionsResolved.cpp
@@ -15,7 +15,7 @@ passive_forced_for_document_target_(false), passive_specified_(false) {} -AddEventListenerOptionsResolved::~AddEventListenerOptionsResolved() {} +AddEventListenerOptionsResolved::~AddEventListenerOptionsResolved() = default; void AddEventListenerOptionsResolved::Trace(blink::Visitor* visitor) { AddEventListenerOptions::Trace(visitor);
diff --git a/third_party/WebKit/Source/core/dom/events/CustomEvent.cpp b/third_party/WebKit/Source/core/dom/events/CustomEvent.cpp index 14385f4..0ea19a1 100644 --- a/third_party/WebKit/Source/core/dom/events/CustomEvent.cpp +++ b/third_party/WebKit/Source/core/dom/events/CustomEvent.cpp
@@ -43,7 +43,7 @@ } } -CustomEvent::~CustomEvent() {} +CustomEvent::~CustomEvent() = default; void CustomEvent::initCustomEvent(ScriptState* script_state, const AtomicString& type,
diff --git a/third_party/WebKit/Source/core/dom/events/DOMWindowEventQueue.cpp b/third_party/WebKit/Source/core/dom/events/DOMWindowEventQueue.cpp index 122d0ed..4a9eb1fa 100644 --- a/third_party/WebKit/Source/core/dom/events/DOMWindowEventQueue.cpp +++ b/third_party/WebKit/Source/core/dom/events/DOMWindowEventQueue.cpp
@@ -74,7 +74,7 @@ pending_event_timer_->PauseIfNeeded(); } -DOMWindowEventQueue::~DOMWindowEventQueue() {} +DOMWindowEventQueue::~DOMWindowEventQueue() = default; void DOMWindowEventQueue::Trace(blink::Visitor* visitor) { visitor->Trace(pending_event_timer_);
diff --git a/third_party/WebKit/Source/core/dom/events/Event.cpp b/third_party/WebKit/Source/core/dom/events/Event.cpp index 9724a9b..09d3753 100644 --- a/third_party/WebKit/Source/core/dom/events/Event.cpp +++ b/third_party/WebKit/Source/core/dom/events/Event.cpp
@@ -109,7 +109,7 @@ : ComposedMode::kScoped, platform_time_stamp) {} -Event::~Event() {} +Event::~Event() = default; bool Event::IsScopedInV0() const { return isTrusted() && is_event_type_scoped_in_v0_;
diff --git a/third_party/WebKit/Source/core/dom/events/EventListener.h b/third_party/WebKit/Source/core/dom/events/EventListener.h index a0c8774..69ec022 100644 --- a/third_party/WebKit/Source/core/dom/events/EventListener.h +++ b/third_party/WebKit/Source/core/dom/events/EventListener.h
@@ -43,7 +43,7 @@ kNativeEventListenerType, }; - virtual ~EventListener() {} + virtual ~EventListener() = default; virtual bool operator==(const EventListener&) const = 0; virtual void handleEvent(ExecutionContext*, Event*) = 0; virtual const String& Code() const { return g_empty_string; }
diff --git a/third_party/WebKit/Source/core/dom/events/EventListenerMap.cpp b/third_party/WebKit/Source/core/dom/events/EventListenerMap.cpp index ba534716..f56ce0b 100644 --- a/third_party/WebKit/Source/core/dom/events/EventListenerMap.cpp +++ b/third_party/WebKit/Source/core/dom/events/EventListenerMap.cpp
@@ -55,7 +55,7 @@ } #endif -EventListenerMap::EventListenerMap() {} +EventListenerMap::EventListenerMap() = default; bool EventListenerMap::Contains(const AtomicString& event_type) const { for (const auto& entry : entries_) {
diff --git a/third_party/WebKit/Source/core/dom/events/EventPath.h b/third_party/WebKit/Source/core/dom/events/EventPath.h index e43d69b55..374c6bd 100644 --- a/third_party/WebKit/Source/core/dom/events/EventPath.h +++ b/third_party/WebKit/Source/core/dom/events/EventPath.h
@@ -93,7 +93,7 @@ } private: - EventPath(); + EventPath() = delete; void Initialize(); void CalculatePath();
diff --git a/third_party/WebKit/Source/core/dom/events/EventQueue.h b/third_party/WebKit/Source/core/dom/events/EventQueue.h index 1cc2016..4ab7c8da 100644 --- a/third_party/WebKit/Source/core/dom/events/EventQueue.h +++ b/third_party/WebKit/Source/core/dom/events/EventQueue.h
@@ -39,7 +39,7 @@ class CORE_EXPORT EventQueue : public GarbageCollectedFinalized<EventQueue> { public: - virtual ~EventQueue() {} + virtual ~EventQueue() = default; virtual void Trace(blink::Visitor* visitor) {} virtual bool EnqueueEvent(const base::Location&, Event*) = 0; virtual bool CancelEvent(Event*) = 0;
diff --git a/third_party/WebKit/Source/core/dom/events/EventTarget.cpp b/third_party/WebKit/Source/core/dom/events/EventTarget.cpp index 0d304b9..79a0640 100644 --- a/third_party/WebKit/Source/core/dom/events/EventTarget.cpp +++ b/third_party/WebKit/Source/core/dom/events/EventTarget.cpp
@@ -153,9 +153,9 @@ } // namespace -EventTargetData::EventTargetData() {} +EventTargetData::EventTargetData() = default; -EventTargetData::~EventTargetData() {} +EventTargetData::~EventTargetData() = default; void EventTargetData::Trace(blink::Visitor* visitor) { visitor->Trace(event_listener_map); @@ -166,9 +166,9 @@ visitor->TraceWrappers(event_listener_map); } -EventTarget::EventTarget() {} +EventTarget::EventTarget() = default; -EventTarget::~EventTarget() {} +EventTarget::~EventTarget() = default; Node* EventTarget::ToNode() { return nullptr;
diff --git a/third_party/WebKit/Source/core/dom/events/EventTarget.h b/third_party/WebKit/Source/core/dom/events/EventTarget.h index 94de526..9eb6538 100644 --- a/third_party/WebKit/Source/core/dom/events/EventTarget.h +++ b/third_party/WebKit/Source/core/dom/events/EventTarget.h
@@ -225,7 +225,7 @@ class CORE_EXPORT EventTargetWithInlineData : public EventTarget { public: - ~EventTargetWithInlineData() override {} + ~EventTargetWithInlineData() override = default; virtual void Trace(blink::Visitor* visitor) { visitor->Trace(event_target_data_);
diff --git a/third_party/WebKit/Source/core/dom/events/EventTargetTest.cpp b/third_party/WebKit/Source/core/dom/events/EventTargetTest.cpp index c0ac434c..640fbedc 100644 --- a/third_party/WebKit/Source/core/dom/events/EventTargetTest.cpp +++ b/third_party/WebKit/Source/core/dom/events/EventTargetTest.cpp
@@ -15,8 +15,8 @@ class EventTargetTest : public RenderingTest { public: - EventTargetTest() {} - ~EventTargetTest() {} + EventTargetTest() = default; + ~EventTargetTest() = default; }; TEST_F(EventTargetTest, PreventDefaultNotCalled) {
diff --git a/third_party/WebKit/Source/core/dom/events/MediaElementEventQueue.cpp b/third_party/WebKit/Source/core/dom/events/MediaElementEventQueue.cpp index 6465a90..d4c2ccd 100644 --- a/third_party/WebKit/Source/core/dom/events/MediaElementEventQueue.cpp +++ b/third_party/WebKit/Source/core/dom/events/MediaElementEventQueue.cpp
@@ -46,7 +46,7 @@ &MediaElementEventQueue::TimerFired), is_closed_(false) {} -MediaElementEventQueue::~MediaElementEventQueue() {} +MediaElementEventQueue::~MediaElementEventQueue() = default; void MediaElementEventQueue::Trace(blink::Visitor* visitor) { visitor->Trace(owner_);
diff --git a/third_party/WebKit/Source/core/editing/BUILD.gn b/third_party/WebKit/Source/core/editing/BUILD.gn index eb13c290..de827b49 100644 --- a/third_party/WebKit/Source/core/editing/BUILD.gn +++ b/third_party/WebKit/Source/core/editing/BUILD.gn
@@ -44,6 +44,8 @@ "InlineBoxTraversal.h", "LayoutSelection.cpp", "LayoutSelection.h", + "LocalCaretRect.cpp", + "LocalCaretRect.h", "PlainTextRange.cpp", "PlainTextRange.h", "Position.cpp", @@ -318,6 +320,7 @@ "GranularityStrategyTest.cpp", "InlineBoxPositionTest.cpp", "LayoutSelectionTest.cpp", + "LocalCaretRectTest.cpp", "PositionIteratorTest.cpp", "PositionTest.cpp", "RelocatablePositionTest.cpp",
diff --git a/third_party/WebKit/Source/core/editing/CaretDisplayItemClient.cpp b/third_party/WebKit/Source/core/editing/CaretDisplayItemClient.cpp index 016210878..d56b443 100644 --- a/third_party/WebKit/Source/core/editing/CaretDisplayItemClient.cpp +++ b/third_party/WebKit/Source/core/editing/CaretDisplayItemClient.cpp
@@ -26,6 +26,7 @@ #include "core/editing/CaretDisplayItemClient.h" #include "core/editing/EditingUtilities.h" +#include "core/editing/LocalCaretRect.h" #include "core/editing/PositionWithAffinity.h" #include "core/editing/VisibleUnits.h" #include "core/frame/LocalFrameView.h"
diff --git a/third_party/WebKit/Source/core/editing/EditingUtilities.cpp b/third_party/WebKit/Source/core/editing/EditingUtilities.cpp index f1889dd..e1d92b60 100644 --- a/third_party/WebKit/Source/core/editing/EditingUtilities.cpp +++ b/third_party/WebKit/Source/core/editing/EditingUtilities.cpp
@@ -2203,4 +2203,14 @@ IsEmptyNonEditableNodeInEditable(node); } +ContainerNode* RootEditableElementOrTreeScopeRootNodeOf( + const Position& position) { + Element* const selection_root = RootEditableElementOf(position); + if (selection_root) + return selection_root; + + Node* const node = position.ComputeContainerNode(); + return node ? &node->GetTreeScope().RootNode() : nullptr; +} + } // namespace blink
diff --git a/third_party/WebKit/Source/core/editing/Editor.cpp b/third_party/WebKit/Source/core/editing/Editor.cpp index 1b0bf64..969eaf9 100644 --- a/third_party/WebKit/Source/core/editing/Editor.cpp +++ b/third_party/WebKit/Source/core/editing/Editor.cpp
@@ -1040,7 +1040,7 @@ default_paragraph_separator_(kEditorParagraphSeparatorIsDiv), overwrite_mode_enabled_(false) {} -Editor::~Editor() {} +Editor::~Editor() = default; void Editor::Clear() { should_style_with_css_ = false;
diff --git a/third_party/WebKit/Source/core/editing/EphemeralRange.cpp b/third_party/WebKit/Source/core/editing/EphemeralRange.cpp index a4611537..d7314a2 100644 --- a/third_party/WebKit/Source/core/editing/EphemeralRange.cpp +++ b/third_party/WebKit/Source/core/editing/EphemeralRange.cpp
@@ -69,10 +69,10 @@ } template <typename Strategy> -EphemeralRangeTemplate<Strategy>::EphemeralRangeTemplate() {} +EphemeralRangeTemplate<Strategy>::EphemeralRangeTemplate() = default; template <typename Strategy> -EphemeralRangeTemplate<Strategy>::~EphemeralRangeTemplate() {} +EphemeralRangeTemplate<Strategy>::~EphemeralRangeTemplate() = default; template <typename Strategy> EphemeralRangeTemplate<Strategy>& EphemeralRangeTemplate<Strategy>::operator=(
diff --git a/third_party/WebKit/Source/core/editing/FrameSelection.cpp b/third_party/WebKit/Source/core/editing/FrameSelection.cpp index 3c3355f..690c8a4 100644 --- a/third_party/WebKit/Source/core/editing/FrameSelection.cpp +++ b/third_party/WebKit/Source/core/editing/FrameSelection.cpp
@@ -105,7 +105,7 @@ frame.GetPage()->GetFocusController().FocusedFrame() == frame), frame_caret_(new FrameCaret(frame, *selection_editor_)) {} -FrameSelection::~FrameSelection() {} +FrameSelection::~FrameSelection() = default; const DisplayItemClient& FrameSelection::CaretDisplayItemClientForTesting() const { @@ -136,18 +136,6 @@ return selection_root ? selection_root : GetDocument().documentElement(); } -// TODO(yosin): We should move |rootEditableElementOrTreeScopeRootNodeOf()| to -// "EditingUtilities.cpp" -ContainerNode* RootEditableElementOrTreeScopeRootNodeOf( - const Position& position) { - Element* selection_root = RootEditableElementOf(position); - if (selection_root) - return selection_root; - - Node* const node = position.ComputeContainerNode(); - return node ? &node->GetTreeScope().RootNode() : nullptr; -} - VisibleSelection FrameSelection::ComputeVisibleSelectionInDOMTreeDeprecated() const { // TODO(editing-dev): Hoist updateStyleAndLayoutIgnorePendingStylesheets
diff --git a/third_party/WebKit/Source/core/editing/GranularityStrategy.cpp b/third_party/WebKit/Source/core/editing/GranularityStrategy.cpp index da309c6..20bc70b 100644 --- a/third_party/WebKit/Source/core/editing/GranularityStrategy.cpp +++ b/third_party/WebKit/Source/core/editing/GranularityStrategy.cpp
@@ -53,13 +53,13 @@ return StartOfWord(pos, word_side); } -GranularityStrategy::GranularityStrategy() {} +GranularityStrategy::GranularityStrategy() = default; -GranularityStrategy::~GranularityStrategy() {} +GranularityStrategy::~GranularityStrategy() = default; -CharacterGranularityStrategy::CharacterGranularityStrategy() {} +CharacterGranularityStrategy::CharacterGranularityStrategy() = default; -CharacterGranularityStrategy::~CharacterGranularityStrategy() {} +CharacterGranularityStrategy::~CharacterGranularityStrategy() = default; SelectionStrategy CharacterGranularityStrategy::GetType() const { return SelectionStrategy::kCharacter; @@ -89,7 +89,7 @@ granularity_(TextGranularity::kCharacter), offset_(0) {} -DirectionGranularityStrategy::~DirectionGranularityStrategy() {} +DirectionGranularityStrategy::~DirectionGranularityStrategy() = default; SelectionStrategy DirectionGranularityStrategy::GetType() const { return SelectionStrategy::kDirection;
diff --git a/third_party/WebKit/Source/core/editing/LocalCaretRect.cpp b/third_party/WebKit/Source/core/editing/LocalCaretRect.cpp new file mode 100644 index 0000000..6034028 --- /dev/null +++ b/third_party/WebKit/Source/core/editing/LocalCaretRect.cpp
@@ -0,0 +1,163 @@ +/* + * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "core/editing/LocalCaretRect.h" + +#include "core/editing/EditingUtilities.h" +#include "core/editing/InlineBoxPosition.h" +#include "core/editing/PositionWithAffinity.h" +#include "core/layout/api/LineLayoutAPIShim.h" +#include "core/layout/line/RootInlineBox.h" + +namespace blink { + +namespace { + +LocalCaretRect ComputeLocalCaretRect(const LayoutObject* layout_object, + const InlineBoxPosition box_position) { + return LocalCaretRect( + layout_object, layout_object->LocalCaretRect(box_position.inline_box, + box_position.offset_in_box)); +} + +template <typename Strategy> +LocalCaretRect LocalCaretRectOfPositionTemplate( + const PositionWithAffinityTemplate<Strategy>& position) { + if (position.IsNull()) + return LocalCaretRect(); + Node* const node = position.AnchorNode(); + LayoutObject* const layout_object = node->GetLayoutObject(); + if (!layout_object) + return LocalCaretRect(); + + const PositionWithAffinityTemplate<Strategy>& adjusted = + ComputeInlineAdjustedPosition(position); + + if (adjusted.IsNotNull()) { + // TODO(xiaochengh): Plug in NG implementation here. + + // TODO(editing-dev): This DCHECK is for ensuring the correctness of + // breaking |ComputeInlineBoxPosition| into |ComputeInlineAdjustedPosition| + // and |ComputeInlineBoxPositionForInlineAdjustedPosition|. If there is any + // DCHECK hit, we should pass primary direction to the latter function. + // TODO(crbug.com/793098): Fix it so that we don't need to bother about + // primary direction. + DCHECK_EQ(PrimaryDirectionOf(*position.AnchorNode()), + PrimaryDirectionOf(*adjusted.AnchorNode())); + const InlineBoxPosition& box_position = + ComputeInlineBoxPositionForInlineAdjustedPosition(adjusted); + + if (box_position.inline_box) { + return ComputeLocalCaretRect( + LineLayoutAPIShim::LayoutObjectFrom( + box_position.inline_box->GetLineLayoutItem()), + box_position); + } + } + + // DeleteSelectionCommandTest.deleteListFromTable goes here. + return LocalCaretRect( + layout_object, + layout_object->LocalCaretRect( + nullptr, position.GetPosition().ComputeEditingOffset())); +} + +// This function was added because the caret rect that is calculated by +// using the line top value instead of the selection top. +template <typename Strategy> +LocalCaretRect LocalSelectionRectOfPositionTemplate( + const PositionWithAffinityTemplate<Strategy>& position) { + if (position.IsNull()) + return LocalCaretRect(); + Node* const node = position.AnchorNode(); + if (!node->GetLayoutObject()) + return LocalCaretRect(); + + const PositionWithAffinityTemplate<Strategy>& adjusted = + ComputeInlineAdjustedPosition(position); + if (adjusted.IsNull()) + return LocalCaretRect(); + + // TODO(xiaochengh): Plug in NG implementation here. + + // TODO(editing-dev): This DCHECK is for ensuring the correctness of + // breaking |ComputeInlineBoxPosition| into |ComputeInlineAdjustedPosition| + // and |ComputeInlineBoxPositionForInlineAdjustedPosition|. If there is any + // DCHECK hit, we should pass primary direction to the latter function. + // TODO(crbug.com/793098): Fix it so that we don't need to bother about + // primary direction. + DCHECK_EQ(PrimaryDirectionOf(*position.AnchorNode()), + PrimaryDirectionOf(*adjusted.AnchorNode())); + const InlineBoxPosition& box_position = + ComputeInlineBoxPositionForInlineAdjustedPosition(adjusted); + + if (!box_position.inline_box) + return LocalCaretRect(); + + LayoutObject* const layout_object = LineLayoutAPIShim::LayoutObjectFrom( + box_position.inline_box->GetLineLayoutItem()); + + const LayoutRect& rect = layout_object->LocalCaretRect( + box_position.inline_box, box_position.offset_in_box); + + if (rect.IsEmpty()) + return LocalCaretRect(); + + const InlineBox* const box = box_position.inline_box; + if (layout_object->Style()->IsHorizontalWritingMode()) { + return LocalCaretRect( + layout_object, + LayoutRect(LayoutPoint(rect.X(), box->Root().SelectionTop()), + LayoutSize(rect.Width(), box->Root().SelectionHeight()))); + } + + return LocalCaretRect( + layout_object, + LayoutRect(LayoutPoint(box->Root().SelectionTop(), rect.Y()), + LayoutSize(box->Root().SelectionHeight(), rect.Height()))); +} + +} // namespace + +LocalCaretRect LocalCaretRectOfPosition(const PositionWithAffinity& position) { + return LocalCaretRectOfPositionTemplate<EditingStrategy>(position); +} + +LocalCaretRect LocalCaretRectOfPosition( + const PositionInFlatTreeWithAffinity& position) { + return LocalCaretRectOfPositionTemplate<EditingInFlatTreeStrategy>(position); +} + +LocalCaretRect LocalSelectionRectOfPosition( + const PositionWithAffinity& position) { + return LocalSelectionRectOfPositionTemplate<EditingStrategy>(position); +} + +} // namespace blink
diff --git a/third_party/WebKit/Source/core/editing/LocalCaretRect.h b/third_party/WebKit/Source/core/editing/LocalCaretRect.h new file mode 100644 index 0000000..ba14f94 --- /dev/null +++ b/third_party/WebKit/Source/core/editing/LocalCaretRect.h
@@ -0,0 +1,40 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef LocalCaretRect_h +#define LocalCaretRect_h + +#include "core/CoreExport.h" +#include "core/editing/Forward.h" +#include "platform/geometry/LayoutRect.h" + +namespace blink { + +class LayoutObject; + +// A transient struct representing a caret rect local to |layout_object|. +struct LocalCaretRect { + STACK_ALLOCATED(); + + const LayoutObject* layout_object = nullptr; + LayoutRect rect; + + LocalCaretRect() = default; + LocalCaretRect(const LayoutObject* layout_object, const LayoutRect& rect) + : layout_object(layout_object), rect(rect) {} + + bool IsEmpty() const { return !layout_object || rect.IsEmpty(); } +}; + +// Rect is local to the returned layoutObject +CORE_EXPORT LocalCaretRect +LocalCaretRectOfPosition(const PositionWithAffinity&); +CORE_EXPORT LocalCaretRect +LocalCaretRectOfPosition(const PositionInFlatTreeWithAffinity&); + +LocalCaretRect LocalSelectionRectOfPosition(const PositionWithAffinity&); + +} // namespace blink + +#endif // LocalCaretRect_h
diff --git a/third_party/WebKit/Source/core/editing/LocalCaretRectTest.cpp b/third_party/WebKit/Source/core/editing/LocalCaretRectTest.cpp new file mode 100644 index 0000000..684da33c --- /dev/null +++ b/third_party/WebKit/Source/core/editing/LocalCaretRectTest.cpp
@@ -0,0 +1,266 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "core/editing/LocalCaretRect.h" + +#include "core/editing/PositionWithAffinity.h" +#include "core/editing/TextAffinity.h" +#include "core/editing/testing/EditingTestBase.h" + +namespace blink { + +class LocalCaretRectTest : public EditingTestBase {}; + +TEST_F(LocalCaretRectTest, DOMAndFlatTrees) { + const char* body_content = + "<p id='host'><b id='one'>1</b></p><b id='two'>22</b>"; + const char* shadow_content = + "<b id='two'>22</b><content select=#one></content><b id='three'>333</b>"; + SetBodyContent(body_content); + SetShadowContent(shadow_content, "host"); + + Element* one = GetDocument().getElementById("one"); + + const LocalCaretRect& caret_rect_from_dom_tree = + LocalCaretRectOfPosition(Position(one->firstChild(), 0)); + + const LocalCaretRect& caret_rect_from_flat_tree = + LocalCaretRectOfPosition(PositionInFlatTree(one->firstChild(), 0)); + + EXPECT_FALSE(caret_rect_from_dom_tree.IsEmpty()); + EXPECT_EQ(caret_rect_from_dom_tree.layout_object, + caret_rect_from_flat_tree.layout_object); + EXPECT_EQ(caret_rect_from_dom_tree.rect, caret_rect_from_flat_tree.rect); +} + +TEST_F(LocalCaretRectTest, SimpleText) { + // This test only records the current behavior. Future changes are allowed. + + LoadAhem(); + SetBodyContent( + "<div id=div style='font: 10px/10px Ahem; width: 30px'>XXX</div>"); + const Node* foo = GetElementById("div")->firstChild(); + + EXPECT_EQ( + LayoutRect(0, 0, 1, 10), + LocalCaretRectOfPosition({Position(foo, 0), TextAffinity::kDownstream}) + .rect); + EXPECT_EQ( + LayoutRect(10, 0, 1, 10), + LocalCaretRectOfPosition({Position(foo, 1), TextAffinity::kDownstream}) + .rect); + EXPECT_EQ( + LayoutRect(20, 0, 1, 10), + LocalCaretRectOfPosition({Position(foo, 2), TextAffinity::kDownstream}) + .rect); + EXPECT_EQ( + LayoutRect(29, 0, 1, 10), + LocalCaretRectOfPosition({Position(foo, 3), TextAffinity::kDownstream}) + .rect); +} + +TEST_F(LocalCaretRectTest, MixedHeightText) { + // This test only records the current behavior. Future changes are allowed. + + LoadAhem(); + SetBodyContent( + "<div id=div style='font: 10px/10px Ahem; width: 30px'>Xpp</div>"); + const Node* foo = GetElementById("div")->firstChild(); + + EXPECT_EQ( + LayoutRect(0, 0, 1, 10), + LocalCaretRectOfPosition({Position(foo, 0), TextAffinity::kDownstream}) + .rect); + EXPECT_EQ( + LayoutRect(10, 0, 1, 10), + LocalCaretRectOfPosition({Position(foo, 1), TextAffinity::kDownstream}) + .rect); + EXPECT_EQ( + LayoutRect(20, 0, 1, 10), + LocalCaretRectOfPosition({Position(foo, 2), TextAffinity::kDownstream}) + .rect); + EXPECT_EQ( + LayoutRect(29, 0, 1, 10), + LocalCaretRectOfPosition({Position(foo, 3), TextAffinity::kDownstream}) + .rect); +} + +TEST_F(LocalCaretRectTest, RtlText) { + // This test only records the current behavior. Future changes are allowed. + + LoadAhem(); + SetBodyContent( + "<bdo dir=rtl id=bdo style='display: block; " + "font: 10px/10px Ahem; width: 30px'>XXX</bdo>"); + const Node* foo = GetElementById("bdo")->firstChild(); + + EXPECT_EQ( + LayoutRect(29, 0, 1, 10), + LocalCaretRectOfPosition({Position(foo, 0), TextAffinity::kDownstream}) + .rect); + EXPECT_EQ( + LayoutRect(20, 0, 1, 10), + LocalCaretRectOfPosition({Position(foo, 1), TextAffinity::kDownstream}) + .rect); + EXPECT_EQ( + LayoutRect(10, 0, 1, 10), + LocalCaretRectOfPosition({Position(foo, 2), TextAffinity::kDownstream}) + .rect); + EXPECT_EQ( + LayoutRect(0, 0, 1, 10), + LocalCaretRectOfPosition({Position(foo, 3), TextAffinity::kDownstream}) + .rect); +} + +TEST_F(LocalCaretRectTest, VerticalText) { + // This test only records the current behavior. Future changes are allowed. + + LoadAhem(); + SetBodyContent( + "<div id=div style='writing-mode: vertical-rl; " + "font: 10px/10px Ahem; width: 30px'>Xpp</div>"); + const Node* foo = GetElementById("div")->firstChild(); + + EXPECT_EQ( + LayoutRect(0, 0, 10, 1), + LocalCaretRectOfPosition({Position(foo, 0), TextAffinity::kDownstream}) + .rect); + EXPECT_EQ( + LayoutRect(0, 10, 10, 1), + LocalCaretRectOfPosition({Position(foo, 1), TextAffinity::kDownstream}) + .rect); + EXPECT_EQ( + LayoutRect(0, 20, 10, 1), + LocalCaretRectOfPosition({Position(foo, 2), TextAffinity::kDownstream}) + .rect); + EXPECT_EQ( + LayoutRect(0, 29, 10, 1), + LocalCaretRectOfPosition({Position(foo, 3), TextAffinity::kDownstream}) + .rect); +} + +TEST_F(LocalCaretRectTest, TwoLinesOfTextWithSoftWrap) { + // This test only records the current behavior. Future changes are allowed. + + LoadAhem(); + SetBodyContent( + "<div id=div style='font: 10px/10px Ahem; width: 30px; " + "word-break: break-all'>XXXXXX</div>"); + const Node* foo = GetElementById("div")->firstChild(); + + // First line + EXPECT_EQ( + LayoutRect(0, 0, 1, 10), + LocalCaretRectOfPosition({Position(foo, 0), TextAffinity::kDownstream}) + .rect); + EXPECT_EQ( + LayoutRect(10, 0, 1, 10), + LocalCaretRectOfPosition({Position(foo, 1), TextAffinity::kDownstream}) + .rect); + EXPECT_EQ( + LayoutRect(20, 0, 1, 10), + LocalCaretRectOfPosition({Position(foo, 2), TextAffinity::kDownstream}) + .rect); + EXPECT_EQ( + LayoutRect(29, 0, 1, 10), + LocalCaretRectOfPosition({Position(foo, 3), TextAffinity::kUpstream}) + .rect); + + // Second line + EXPECT_EQ( + LayoutRect(0, 10, 1, 10), + LocalCaretRectOfPosition({Position(foo, 3), TextAffinity::kDownstream}) + .rect); + EXPECT_EQ( + LayoutRect(10, 10, 1, 10), + LocalCaretRectOfPosition({Position(foo, 4), TextAffinity::kDownstream}) + .rect); + EXPECT_EQ( + LayoutRect(20, 10, 1, 10), + LocalCaretRectOfPosition({Position(foo, 5), TextAffinity::kDownstream}) + .rect); + EXPECT_EQ( + LayoutRect(29, 10, 1, 10), + LocalCaretRectOfPosition({Position(foo, 6), TextAffinity::kDownstream}) + .rect); +} + +TEST_F(LocalCaretRectTest, Images) { + // This test only records the current behavior. Future changes are allowed. + + LoadAhem(); + SetBodyContent( + "<div id=div style='font: 10px/10px Ahem; width: 30px'>" + "<img id=img1 width=10px height=10px>" + "<img id=img2 width=10px height=10px>" + "</div>"); + + const Element& img1 = *GetElementById("img1"); + + EXPECT_EQ(LayoutRect(0, 0, 1, 10), + LocalCaretRectOfPosition( + {Position::BeforeNode(img1), TextAffinity::kDownstream}) + .rect); + EXPECT_EQ(LayoutRect(9, 0, 1, 10), + LocalCaretRectOfPosition( + {Position::AfterNode(img1), TextAffinity::kDownstream}) + .rect); + + const Element& img2 = *GetElementById("img2"); + + // Box-anchored LocalCaretRect is local to the box itself, instead of its + // containing block. + EXPECT_EQ(LayoutRect(0, 0, 1, 10), + LocalCaretRectOfPosition( + {Position::BeforeNode(img2), TextAffinity::kDownstream}) + .rect); + EXPECT_EQ(LayoutRect(9, 0, 1, 10), + LocalCaretRectOfPosition( + {Position::AfterNode(img2), TextAffinity::kDownstream}) + .rect); +} + +TEST_F(LocalCaretRectTest, TextAndImageMixedHeight) { + // This test only records the current behavior. Future changes are allowed. + + LoadAhem(); + SetBodyContent( + "<div id=div style='font: 10px/10px Ahem; width: 30px'>" + "X" + "<img id=img width=10px height=5px style='vertical-align: text-bottom'>" + "p</div>"); + + const Element& img = *GetElementById("img"); + const Node* text1 = img.previousSibling(); + const Node* text2 = img.nextSibling(); + + EXPECT_EQ( + LayoutRect(0, 0, 1, 10), + LocalCaretRectOfPosition({Position(text1, 0), TextAffinity::kDownstream}) + .rect); + EXPECT_EQ( + LayoutRect(10, 0, 1, 10), + LocalCaretRectOfPosition({Position(text1, 1), TextAffinity::kDownstream}) + .rect); + + EXPECT_EQ(LayoutRect(0, -5, 1, 10), + LocalCaretRectOfPosition( + {Position::BeforeNode(img), TextAffinity::kDownstream}) + .rect); + EXPECT_EQ(LayoutRect(9, -5, 1, 10), + LocalCaretRectOfPosition( + {Position::AfterNode(img), TextAffinity::kDownstream}) + .rect); + + EXPECT_EQ( + LayoutRect(20, 5, 1, 10), + LocalCaretRectOfPosition({Position(text2, 0), TextAffinity::kDownstream}) + .rect); + EXPECT_EQ( + LayoutRect(29, 0, 1, 10), + LocalCaretRectOfPosition({Position(text2, 1), TextAffinity::kDownstream}) + .rect); +} + +} // namespace blink
diff --git a/third_party/WebKit/Source/core/editing/PositionWithAffinity.cpp b/third_party/WebKit/Source/core/editing/PositionWithAffinity.cpp index 4894fd5..2e7aa31 100644 --- a/third_party/WebKit/Source/core/editing/PositionWithAffinity.cpp +++ b/third_party/WebKit/Source/core/editing/PositionWithAffinity.cpp
@@ -17,7 +17,8 @@ : affinity_(TextAffinity::kDownstream) {} template <typename Strategy> -PositionWithAffinityTemplate<Strategy>::~PositionWithAffinityTemplate() {} +PositionWithAffinityTemplate<Strategy>::~PositionWithAffinityTemplate() = + default; template <typename Strategy> void PositionWithAffinityTemplate<Strategy>::Trace(blink::Visitor* visitor) {
diff --git a/third_party/WebKit/Source/core/editing/SelectionEditor.cpp b/third_party/WebKit/Source/core/editing/SelectionEditor.cpp index 0580408..9c94869 100644 --- a/third_party/WebKit/Source/core/editing/SelectionEditor.cpp +++ b/third_party/WebKit/Source/core/editing/SelectionEditor.cpp
@@ -38,7 +38,7 @@ ClearVisibleSelection(); } -SelectionEditor::~SelectionEditor() {} +SelectionEditor::~SelectionEditor() = default; void SelectionEditor::AssertSelectionValid() const { #if DCHECK_IS_ON()
diff --git a/third_party/WebKit/Source/core/editing/SelectionModifier.cpp b/third_party/WebKit/Source/core/editing/SelectionModifier.cpp index a63ecfc..737646e 100644 --- a/third_party/WebKit/Source/core/editing/SelectionModifier.cpp +++ b/third_party/WebKit/Source/core/editing/SelectionModifier.cpp
@@ -29,6 +29,7 @@ #include "core/editing/EditingUtilities.h" #include "core/editing/Editor.h" #include "core/editing/InlineBoxPosition.h" +#include "core/editing/LocalCaretRect.h" #include "core/editing/SelectionTemplate.h" #include "core/editing/VisiblePosition.h" #include "core/editing/VisibleUnits.h"
diff --git a/third_party/WebKit/Source/core/editing/VisibleUnits.cpp b/third_party/WebKit/Source/core/editing/VisibleUnits.cpp index 0223f21..2e4c695b 100644 --- a/third_party/WebKit/Source/core/editing/VisibleUnits.cpp +++ b/third_party/WebKit/Source/core/editing/VisibleUnits.cpp
@@ -34,11 +34,10 @@ #include "core/editing/EditingUtilities.h" #include "core/editing/EphemeralRange.h" #include "core/editing/FrameSelection.h" -#include "core/editing/InlineBoxPosition.h" +#include "core/editing/LocalCaretRect.h" #include "core/editing/Position.h" #include "core/editing/PositionIterator.h" #include "core/editing/PositionWithAffinity.h" -#include "core/editing/RenderedPosition.h" #include "core/editing/TextAffinity.h" #include "core/editing/VisiblePosition.h" #include "core/editing/VisibleSelection.h" @@ -58,7 +57,6 @@ #include "core/layout/LayoutInline.h" #include "core/layout/LayoutTextFragment.h" #include "core/layout/LayoutView.h" -#include "core/layout/api/LineLayoutAPIShim.h" #include "core/layout/api/LineLayoutItem.h" #include "core/layout/line/InlineIterator.h" #include "core/layout/line/InlineTextBox.h" @@ -675,125 +673,6 @@ return IsTextControlElement(next_position.DeepEquivalent().AnchorNode()); } -static LocalCaretRect ComputeLocalCaretRect( - const LayoutObject* layout_object, - const InlineBoxPosition box_position) { - return LocalCaretRect( - layout_object, layout_object->LocalCaretRect(box_position.inline_box, - box_position.offset_in_box)); -} - -template <typename Strategy> -LocalCaretRect LocalCaretRectOfPositionTemplate( - const PositionWithAffinityTemplate<Strategy>& position) { - if (position.IsNull()) - return LocalCaretRect(); - Node* const node = position.AnchorNode(); - LayoutObject* const layout_object = node->GetLayoutObject(); - if (!layout_object) - return LocalCaretRect(); - - const PositionWithAffinityTemplate<Strategy>& adjusted = - ComputeInlineAdjustedPosition(position); - - if (adjusted.IsNotNull()) { - // TODO(xiaochengh): Plug in NG implementation here. - - // TODO(editing-dev): This DCHECK is for ensuring the correctness of - // breaking |ComputeInlineBoxPosition| into |ComputeInlineAdjustedPosition| - // and |ComputeInlineBoxPositionForInlineAdjustedPosition|. If there is any - // DCHECK hit, we should pass primary direction to the latter function. - // TODO(crbug.com/793098): Fix it so that we don't need to bother about - // primary direction. - DCHECK_EQ(PrimaryDirectionOf(*position.AnchorNode()), - PrimaryDirectionOf(*adjusted.AnchorNode())); - const InlineBoxPosition& box_position = - ComputeInlineBoxPositionForInlineAdjustedPosition(adjusted); - - if (box_position.inline_box) { - return ComputeLocalCaretRect( - LineLayoutAPIShim::LayoutObjectFrom( - box_position.inline_box->GetLineLayoutItem()), - box_position); - } - } - - // DeleteSelectionCommandTest.deleteListFromTable goes here. - return LocalCaretRect( - layout_object, - layout_object->LocalCaretRect( - nullptr, position.GetPosition().ComputeEditingOffset())); -} - -// This function was added because the caret rect that is calculated by -// using the line top value instead of the selection top. -template <typename Strategy> -LocalCaretRect LocalSelectionRectOfPositionTemplate( - const PositionWithAffinityTemplate<Strategy>& position) { - if (position.IsNull()) - return LocalCaretRect(); - Node* const node = position.AnchorNode(); - if (!node->GetLayoutObject()) - return LocalCaretRect(); - - const PositionWithAffinityTemplate<Strategy>& adjusted = - ComputeInlineAdjustedPosition(position); - if (adjusted.IsNull()) - return LocalCaretRect(); - - // TODO(xiaochengh): Plug in NG implementation here. - - // TODO(editing-dev): This DCHECK is for ensuring the correctness of - // breaking |ComputeInlineBoxPosition| into |ComputeInlineAdjustedPosition| - // and |ComputeInlineBoxPositionForInlineAdjustedPosition|. If there is any - // DCHECK hit, we should pass primary direction to the latter function. - // TODO(crbug.com/793098): Fix it so that we don't need to bother about - // primary direction. - DCHECK_EQ(PrimaryDirectionOf(*position.AnchorNode()), - PrimaryDirectionOf(*adjusted.AnchorNode())); - const InlineBoxPosition& box_position = - ComputeInlineBoxPositionForInlineAdjustedPosition(adjusted); - - if (!box_position.inline_box) - return LocalCaretRect(); - - LayoutObject* const layout_object = LineLayoutAPIShim::LayoutObjectFrom( - box_position.inline_box->GetLineLayoutItem()); - - const LayoutRect& rect = layout_object->LocalCaretRect( - box_position.inline_box, box_position.offset_in_box); - - if (rect.IsEmpty()) - return LocalCaretRect(); - - const InlineBox* const box = box_position.inline_box; - if (layout_object->Style()->IsHorizontalWritingMode()) { - return LocalCaretRect( - layout_object, - LayoutRect(LayoutPoint(rect.X(), box->Root().SelectionTop()), - LayoutSize(rect.Width(), box->Root().SelectionHeight()))); - } - - return LocalCaretRect( - layout_object, - LayoutRect(LayoutPoint(box->Root().SelectionTop(), rect.Y()), - LayoutSize(box->Root().SelectionHeight(), rect.Height()))); -} - -LocalCaretRect LocalCaretRectOfPosition(const PositionWithAffinity& position) { - return LocalCaretRectOfPositionTemplate<EditingStrategy>(position); -} - -static LocalCaretRect LocalSelectionRectOfPosition( - const PositionWithAffinity& position) { - return LocalSelectionRectOfPositionTemplate<EditingStrategy>(position); -} - -LocalCaretRect LocalCaretRectOfPosition( - const PositionInFlatTreeWithAffinity& position) { - return LocalCaretRectOfPositionTemplate<EditingInFlatTreeStrategy>(position); -} - static LayoutUnit BoundingBoxLogicalHeight(LayoutObject* o, const LayoutRect& rect) { return o->Style()->IsHorizontalWritingMode() ? rect.Height() : rect.Width();
diff --git a/third_party/WebKit/Source/core/editing/VisibleUnits.h b/third_party/WebKit/Source/core/editing/VisibleUnits.h index 428555b6..82c9ceb 100644 --- a/third_party/WebKit/Source/core/editing/VisibleUnits.h +++ b/third_party/WebKit/Source/core/editing/VisibleUnits.h
@@ -50,18 +50,6 @@ kPreviousWordIfOnBoundary = true }; -// This struct represents local caret rectangle in |layout_object|. -struct LocalCaretRect { - const LayoutObject* layout_object = nullptr; - LayoutRect rect; - - LocalCaretRect() = default; - LocalCaretRect(const LayoutObject* layout_object, const LayoutRect& rect) - : layout_object(layout_object), rect(rect) {} - - bool IsEmpty() const { return !layout_object || rect.IsEmpty(); } -}; - // offset functions on Node CORE_EXPORT int CaretMinOffset(const Node*); CORE_EXPORT int CaretMaxOffset(const Node*); @@ -275,11 +263,6 @@ CORE_EXPORT bool IsEndOfEditableOrNonEditableContent( const VisiblePositionInFlatTree&); -// Rect is local to the returned layoutObject -CORE_EXPORT LocalCaretRect -LocalCaretRectOfPosition(const PositionWithAffinity&); -CORE_EXPORT LocalCaretRect -LocalCaretRectOfPosition(const PositionInFlatTreeWithAffinity&); bool HasRenderedNonAnonymousDescendantsWithHeight(const LayoutObject*); // Returns a hit-tested VisiblePosition for the given point in contents-space
diff --git a/third_party/WebKit/Source/core/editing/VisibleUnitsTest.cpp b/third_party/WebKit/Source/core/editing/VisibleUnitsTest.cpp index 76247300..536b790 100644 --- a/third_party/WebKit/Source/core/editing/VisibleUnitsTest.cpp +++ b/third_party/WebKit/Source/core/editing/VisibleUnitsTest.cpp
@@ -928,257 +928,6 @@ EXPECT_FALSE(IsVisuallyEquivalentCandidate(Position(&GetDocument(), 0))); } -TEST_F(VisibleUnitsTest, localCaretRectOfPosition) { - const char* body_content = - "<p id='host'><b id='one'>1</b></p><b id='two'>22</b>"; - const char* shadow_content = - "<b id='two'>22</b><content select=#one></content><b id='three'>333</b>"; - SetBodyContent(body_content); - SetShadowContent(shadow_content, "host"); - - Element* one = GetDocument().getElementById("one"); - - const LocalCaretRect& caret_rect_from_dom_tree = - LocalCaretRectOfPosition(Position(one->firstChild(), 0)); - - const LocalCaretRect& caret_rect_from_flat_tree = - LocalCaretRectOfPosition(PositionInFlatTree(one->firstChild(), 0)); - - EXPECT_FALSE(caret_rect_from_dom_tree.IsEmpty()); - EXPECT_EQ(caret_rect_from_dom_tree.layout_object, - caret_rect_from_flat_tree.layout_object); - EXPECT_EQ(caret_rect_from_dom_tree.rect, caret_rect_from_flat_tree.rect); -} - -TEST_F(VisibleUnitsTest, LocalCaretRectOfPositionInText) { - // This test only records the current behavior. Future changes are allowed. - - LoadAhem(); - SetBodyContent( - "<div id=div style='font: 10px/10px Ahem; width: 30px'>XXX</div>"); - const Node* foo = GetElementById("div")->firstChild(); - - EXPECT_EQ( - LayoutRect(0, 0, 1, 10), - LocalCaretRectOfPosition({Position(foo, 0), TextAffinity::kDownstream}) - .rect); - EXPECT_EQ( - LayoutRect(10, 0, 1, 10), - LocalCaretRectOfPosition({Position(foo, 1), TextAffinity::kDownstream}) - .rect); - EXPECT_EQ( - LayoutRect(20, 0, 1, 10), - LocalCaretRectOfPosition({Position(foo, 2), TextAffinity::kDownstream}) - .rect); - EXPECT_EQ( - LayoutRect(29, 0, 1, 10), - LocalCaretRectOfPosition({Position(foo, 3), TextAffinity::kDownstream}) - .rect); -} - -TEST_F(VisibleUnitsTest, LocalCaretRectOfPositionMixedHeightText) { - // This test only records the current behavior. Future changes are allowed. - - LoadAhem(); - SetBodyContent( - "<div id=div style='font: 10px/10px Ahem; width: 30px'>Xpp</div>"); - const Node* foo = GetElementById("div")->firstChild(); - - EXPECT_EQ( - LayoutRect(0, 0, 1, 10), - LocalCaretRectOfPosition({Position(foo, 0), TextAffinity::kDownstream}) - .rect); - EXPECT_EQ( - LayoutRect(10, 0, 1, 10), - LocalCaretRectOfPosition({Position(foo, 1), TextAffinity::kDownstream}) - .rect); - EXPECT_EQ( - LayoutRect(20, 0, 1, 10), - LocalCaretRectOfPosition({Position(foo, 2), TextAffinity::kDownstream}) - .rect); - EXPECT_EQ( - LayoutRect(29, 0, 1, 10), - LocalCaretRectOfPosition({Position(foo, 3), TextAffinity::kDownstream}) - .rect); -} - -TEST_F(VisibleUnitsTest, LocalCaretRectOfPositionRtlText) { - // This test only records the current behavior. Future changes are allowed. - - LoadAhem(); - SetBodyContent( - "<bdo dir=rtl id=bdo style='display: block; " - "font: 10px/10px Ahem; width: 30px'>XXX</bdo>"); - const Node* foo = GetElementById("bdo")->firstChild(); - - EXPECT_EQ( - LayoutRect(29, 0, 1, 10), - LocalCaretRectOfPosition({Position(foo, 0), TextAffinity::kDownstream}) - .rect); - EXPECT_EQ( - LayoutRect(20, 0, 1, 10), - LocalCaretRectOfPosition({Position(foo, 1), TextAffinity::kDownstream}) - .rect); - EXPECT_EQ( - LayoutRect(10, 0, 1, 10), - LocalCaretRectOfPosition({Position(foo, 2), TextAffinity::kDownstream}) - .rect); - EXPECT_EQ( - LayoutRect(0, 0, 1, 10), - LocalCaretRectOfPosition({Position(foo, 3), TextAffinity::kDownstream}) - .rect); -} - -TEST_F(VisibleUnitsTest, LocalCaretRectOfPositionVerticalText) { - // This test only records the current behavior. Future changes are allowed. - - LoadAhem(); - SetBodyContent( - "<div id=div style='writing-mode: vertical-rl; " - "font: 10px/10px Ahem; width: 30px'>Xpp</div>"); - const Node* foo = GetElementById("div")->firstChild(); - - EXPECT_EQ( - LayoutRect(0, 0, 10, 1), - LocalCaretRectOfPosition({Position(foo, 0), TextAffinity::kDownstream}) - .rect); - EXPECT_EQ( - LayoutRect(0, 10, 10, 1), - LocalCaretRectOfPosition({Position(foo, 1), TextAffinity::kDownstream}) - .rect); - EXPECT_EQ( - LayoutRect(0, 20, 10, 1), - LocalCaretRectOfPosition({Position(foo, 2), TextAffinity::kDownstream}) - .rect); - EXPECT_EQ( - LayoutRect(0, 29, 10, 1), - LocalCaretRectOfPosition({Position(foo, 3), TextAffinity::kDownstream}) - .rect); -} - -TEST_F(VisibleUnitsTest, LocalCaretRectOfPositionInTwoLinesOfTextWithSoftWrap) { - // This test only records the current behavior. Future changes are allowed. - - LoadAhem(); - SetBodyContent( - "<div id=div style='font: 10px/10px Ahem; width: 30px; " - "word-break: break-all'>XXXXXX</div>"); - const Node* foo = GetElementById("div")->firstChild(); - - // First line - EXPECT_EQ( - LayoutRect(0, 0, 1, 10), - LocalCaretRectOfPosition({Position(foo, 0), TextAffinity::kDownstream}) - .rect); - EXPECT_EQ( - LayoutRect(10, 0, 1, 10), - LocalCaretRectOfPosition({Position(foo, 1), TextAffinity::kDownstream}) - .rect); - EXPECT_EQ( - LayoutRect(20, 0, 1, 10), - LocalCaretRectOfPosition({Position(foo, 2), TextAffinity::kDownstream}) - .rect); - EXPECT_EQ( - LayoutRect(29, 0, 1, 10), - LocalCaretRectOfPosition({Position(foo, 3), TextAffinity::kUpstream}) - .rect); - - // Second line - EXPECT_EQ( - LayoutRect(0, 10, 1, 10), - LocalCaretRectOfPosition({Position(foo, 3), TextAffinity::kDownstream}) - .rect); - EXPECT_EQ( - LayoutRect(10, 10, 1, 10), - LocalCaretRectOfPosition({Position(foo, 4), TextAffinity::kDownstream}) - .rect); - EXPECT_EQ( - LayoutRect(20, 10, 1, 10), - LocalCaretRectOfPosition({Position(foo, 5), TextAffinity::kDownstream}) - .rect); - EXPECT_EQ( - LayoutRect(29, 10, 1, 10), - LocalCaretRectOfPosition({Position(foo, 6), TextAffinity::kDownstream}) - .rect); -} - -TEST_F(VisibleUnitsTest, LocalCaretRectOfPositionImages) { - // This test only records the current behavior. Future changes are allowed. - - LoadAhem(); - SetBodyContent( - "<div id=div style='font: 10px/10px Ahem; width: 30px'>" - "<img id=img1 width=10px height=10px>" - "<img id=img2 width=10px height=10px>" - "</div>"); - - const Element& img1 = *GetElementById("img1"); - - EXPECT_EQ(LayoutRect(0, 0, 1, 10), - LocalCaretRectOfPosition( - {Position::BeforeNode(img1), TextAffinity::kDownstream}) - .rect); - EXPECT_EQ(LayoutRect(9, 0, 1, 10), - LocalCaretRectOfPosition( - {Position::AfterNode(img1), TextAffinity::kDownstream}) - .rect); - - const Element& img2 = *GetElementById("img2"); - - // Box-anchored LocalCaretRect is local to the box itself, instead of its - // containing block. - EXPECT_EQ(LayoutRect(0, 0, 1, 10), - LocalCaretRectOfPosition( - {Position::BeforeNode(img2), TextAffinity::kDownstream}) - .rect); - EXPECT_EQ(LayoutRect(9, 0, 1, 10), - LocalCaretRectOfPosition( - {Position::AfterNode(img2), TextAffinity::kDownstream}) - .rect); -} - -TEST_F(VisibleUnitsTest, LocalCaretRectOfPositionTextAndImageMixedHeight) { - // This test only records the current behavior. Future changes are allowed. - - LoadAhem(); - SetBodyContent( - "<div id=div style='font: 10px/10px Ahem; width: 30px'>" - "X" - "<img id=img width=10px height=5px style='vertical-align: text-bottom'>" - "p</div>"); - - const Element& img = *GetElementById("img"); - const Node* text1 = img.previousSibling(); - const Node* text2 = img.nextSibling(); - - EXPECT_EQ( - LayoutRect(0, 0, 1, 10), - LocalCaretRectOfPosition({Position(text1, 0), TextAffinity::kDownstream}) - .rect); - EXPECT_EQ( - LayoutRect(10, 0, 1, 10), - LocalCaretRectOfPosition({Position(text1, 1), TextAffinity::kDownstream}) - .rect); - - EXPECT_EQ(LayoutRect(0, -5, 1, 10), - LocalCaretRectOfPosition( - {Position::BeforeNode(img), TextAffinity::kDownstream}) - .rect); - EXPECT_EQ(LayoutRect(9, -5, 1, 10), - LocalCaretRectOfPosition( - {Position::AfterNode(img), TextAffinity::kDownstream}) - .rect); - - EXPECT_EQ( - LayoutRect(20, 5, 1, 10), - LocalCaretRectOfPosition({Position(text2, 0), TextAffinity::kDownstream}) - .rect); - EXPECT_EQ( - LayoutRect(29, 0, 1, 10), - LocalCaretRectOfPosition({Position(text2, 1), TextAffinity::kDownstream}) - .rect); -} - TEST_F(VisibleUnitsTest, logicalEndOfLine) { const char* body_content = "<a id=host><b id=one>11</b><b id=two>22</b></a><i id=three>333</i><i "
diff --git a/third_party/WebKit/Source/core/editing/commands/EditCommand.cpp b/third_party/WebKit/Source/core/editing/commands/EditCommand.cpp index d9b7700..71ec31b 100644 --- a/third_party/WebKit/Source/core/editing/commands/EditCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/EditCommand.cpp
@@ -42,7 +42,7 @@ DCHECK(document_->GetFrame()); } -EditCommand::~EditCommand() {} +EditCommand::~EditCommand() = default; InputEvent::InputType EditCommand::GetInputType() const { return InputEvent::InputType::kNone;
diff --git a/third_party/WebKit/Source/core/editing/commands/EditingState.cpp b/third_party/WebKit/Source/core/editing/commands/EditingState.cpp index 065b23f..70241f7 100644 --- a/third_party/WebKit/Source/core/editing/commands/EditingState.cpp +++ b/third_party/WebKit/Source/core/editing/commands/EditingState.cpp
@@ -6,9 +6,9 @@ namespace blink { -EditingState::EditingState() {} +EditingState::EditingState() = default; -EditingState::~EditingState() {} +EditingState::~EditingState() = default; void EditingState::Abort() { DCHECK(!is_aborted_); @@ -16,9 +16,9 @@ } // --- -IgnorableEditingAbortState::IgnorableEditingAbortState() {} +IgnorableEditingAbortState::IgnorableEditingAbortState() = default; -IgnorableEditingAbortState::~IgnorableEditingAbortState() {} +IgnorableEditingAbortState::~IgnorableEditingAbortState() = default; #if DCHECK_IS_ON() // ---
diff --git a/third_party/WebKit/Source/core/editing/commands/RemoveCSSPropertyCommand.cpp b/third_party/WebKit/Source/core/editing/commands/RemoveCSSPropertyCommand.cpp index 4d856e1e..49629833 100644 --- a/third_party/WebKit/Source/core/editing/commands/RemoveCSSPropertyCommand.cpp +++ b/third_party/WebKit/Source/core/editing/commands/RemoveCSSPropertyCommand.cpp
@@ -43,7 +43,7 @@ DCHECK(element_); } -RemoveCSSPropertyCommand::~RemoveCSSPropertyCommand() {} +RemoveCSSPropertyCommand::~RemoveCSSPropertyCommand() = default; void RemoveCSSPropertyCommand::DoApply(EditingState*) { const CSSPropertyValueSet* style = element_->InlineStyle();
diff --git a/third_party/WebKit/Source/core/editing/commands/SelectionForUndoStep.cpp b/third_party/WebKit/Source/core/editing/commands/SelectionForUndoStep.cpp index b65b0252..0073de3 100644 --- a/third_party/WebKit/Source/core/editing/commands/SelectionForUndoStep.cpp +++ b/third_party/WebKit/Source/core/editing/commands/SelectionForUndoStep.cpp
@@ -25,24 +25,13 @@ return result; } -SelectionForUndoStep::SelectionForUndoStep(const SelectionForUndoStep& other) - : base_(other.base_), - extent_(other.extent_), - affinity_(other.affinity_), - is_base_first_(other.is_base_first_), - is_directional_(other.is_directional_) {} +SelectionForUndoStep::SelectionForUndoStep(const SelectionForUndoStep& other) = + default; SelectionForUndoStep::SelectionForUndoStep() = default; SelectionForUndoStep& SelectionForUndoStep::operator=( - const SelectionForUndoStep& other) { - base_ = other.base_; - extent_ = other.extent_; - affinity_ = other.affinity_; - is_base_first_ = other.is_base_first_; - is_directional_ = other.is_directional_; - return *this; -} + const SelectionForUndoStep& other) = default; bool SelectionForUndoStep::operator==(const SelectionForUndoStep& other) const { if (IsNone())
diff --git a/third_party/WebKit/Source/core/editing/finder/TextFinder.cpp b/third_party/WebKit/Source/core/editing/finder/TextFinder.cpp index aa1b753f..729f7ed 100644 --- a/third_party/WebKit/Source/core/editing/finder/TextFinder.cpp +++ b/third_party/WebKit/Source/core/editing/finder/TextFinder.cpp
@@ -785,7 +785,7 @@ last_find_request_completed_with_no_matches_(false), find_match_rects_are_valid_(false) {} -TextFinder::~TextFinder() {} +TextFinder::~TextFinder() = default; bool TextFinder::SetMarkerActive(Range* range, bool active) { if (!range || range->collapsed())
diff --git a/third_party/WebKit/Source/core/editing/iterators/BitStack.cpp b/third_party/WebKit/Source/core/editing/iterators/BitStack.cpp index 81cddadc..fda266d 100644 --- a/third_party/WebKit/Source/core/editing/iterators/BitStack.cpp +++ b/third_party/WebKit/Source/core/editing/iterators/BitStack.cpp
@@ -33,7 +33,7 @@ BitStack::BitStack() : size_(0) {} -BitStack::~BitStack() {} +BitStack::~BitStack() = default; void BitStack::Push(bool bit) { unsigned index = size_ / kBitsInWord;
diff --git a/third_party/WebKit/Source/core/editing/iterators/FullyClippedStateStack.cpp b/third_party/WebKit/Source/core/editing/iterators/FullyClippedStateStack.cpp index 934d83b7..e14a663 100644 --- a/third_party/WebKit/Source/core/editing/iterators/FullyClippedStateStack.cpp +++ b/third_party/WebKit/Source/core/editing/iterators/FullyClippedStateStack.cpp
@@ -41,10 +41,12 @@ } // namespace template <typename Strategy> -FullyClippedStateStackAlgorithm<Strategy>::FullyClippedStateStackAlgorithm() {} +FullyClippedStateStackAlgorithm<Strategy>::FullyClippedStateStackAlgorithm() = + default; template <typename Strategy> -FullyClippedStateStackAlgorithm<Strategy>::~FullyClippedStateStackAlgorithm() {} +FullyClippedStateStackAlgorithm<Strategy>::~FullyClippedStateStackAlgorithm() = + default; template <typename Strategy> void FullyClippedStateStackAlgorithm<Strategy>::PushFullyClippedState(
diff --git a/third_party/WebKit/Source/core/editing/iterators/SearchBuffer.cpp b/third_party/WebKit/Source/core/editing/iterators/SearchBuffer.cpp index f1709fb..d9bda274 100644 --- a/third_party/WebKit/Source/core/editing/iterators/SearchBuffer.cpp +++ b/third_party/WebKit/Source/core/editing/iterators/SearchBuffer.cpp
@@ -94,7 +94,7 @@ normalized_target_); } -inline SearchBuffer::~SearchBuffer() {} +inline SearchBuffer::~SearchBuffer() = default; template <typename CharType> inline void SearchBuffer::Append(const CharType* characters, size_t length) {
diff --git a/third_party/WebKit/Source/core/editing/iterators/TextIterator.cpp b/third_party/WebKit/Source/core/editing/iterators/TextIterator.cpp index 0eacc4c7..e3fce53 100644 --- a/third_party/WebKit/Source/core/editing/iterators/TextIterator.cpp +++ b/third_party/WebKit/Source/core/editing/iterators/TextIterator.cpp
@@ -329,8 +329,7 @@ if (EntersTextControls() && layout_object->IsTextControl()) { ShadowRoot* user_agent_shadow_root = ToElement(node_)->UserAgentShadowRoot(); - DCHECK(user_agent_shadow_root->GetType() == - ShadowRootType::kUserAgent); + DCHECK(user_agent_shadow_root->IsUserAgent()); node_ = user_agent_shadow_root; iteration_progress_ = kHandledNone; ++shadow_depth_; @@ -438,7 +437,7 @@ // TODO(kochi): Make sure we treat closed shadow as user agent // shadow here. DCHECK(shadow_root->GetType() == ShadowRootType::kClosed || - shadow_root->GetType() == ShadowRootType::kUserAgent); + shadow_root->IsUserAgent()); node_ = &shadow_root->host(); iteration_progress_ = kHandledUserAgentShadowRoot; --shadow_depth_;
diff --git a/third_party/WebKit/Source/core/editing/iterators/TextIteratorTest.cpp b/third_party/WebKit/Source/core/editing/iterators/TextIteratorTest.cpp index b7e3bce..12ada7d 100644 --- a/third_party/WebKit/Source/core/editing/iterators/TextIteratorTest.cpp +++ b/third_party/WebKit/Source/core/editing/iterators/TextIteratorTest.cpp
@@ -35,6 +35,7 @@ #include "core/editing/testing/EditingTestBase.h" #include "core/frame/LocalFrameView.h" #include "core/html/forms/TextControlElement.h" +#include "platform/testing/RuntimeEnabledFeaturesTestHelpers.h" namespace blink { namespace text_iterator_test { @@ -134,6 +135,19 @@ return range; } +class ParameterizedTextIteratorTest + : public ::testing::WithParamInterface<bool>, + private ScopedLayoutNGForTest, + private ScopedLayoutNGPaintFragmentsForTest, + public TextIteratorTest { + public: + ParameterizedTextIteratorTest() + : ScopedLayoutNGForTest(GetParam()), + ScopedLayoutNGPaintFragmentsForTest(GetParam()) {} +}; + +INSTANTIATE_TEST_CASE_P(All, ParameterizedTextIteratorTest, ::testing::Bool()); + TEST_F(TextIteratorTest, BitStackOverflow) { const unsigned kBitsInWord = sizeof(unsigned) * 8; BitStack bs; @@ -1013,5 +1027,10 @@ EXPECT_EQ("[b]", IteratePartial<DOMTree>(start, end)); } +TEST_P(ParameterizedTextIteratorTest, NoZWSForSpaceAfterNoWrapSpace) { + SetBodyContent("<span style='white-space: nowrap'>foo </span> bar"); + EXPECT_EQ("[foo ][bar]", Iterate<DOMTree>()); +} + } // namespace text_iterator_test } // namespace blink
diff --git a/third_party/WebKit/Source/core/editing/serializers/MarkupAccumulator.cpp b/third_party/WebKit/Source/core/editing/serializers/MarkupAccumulator.cpp index 7629f70..2f4c3776 100644 --- a/third_party/WebKit/Source/core/editing/serializers/MarkupAccumulator.cpp +++ b/third_party/WebKit/Source/core/editing/serializers/MarkupAccumulator.cpp
@@ -50,7 +50,7 @@ SerializationType serialization_type) : formatter_(resolve_urls_method, serialization_type) {} -MarkupAccumulator::~MarkupAccumulator() {} +MarkupAccumulator::~MarkupAccumulator() = default; void MarkupAccumulator::AppendString(const String& string) { markup_.Append(string);
diff --git a/third_party/WebKit/Source/core/editing/serializers/MarkupFormatter.cpp b/third_party/WebKit/Source/core/editing/serializers/MarkupFormatter.cpp index bf658924..729b7df 100644 --- a/third_party/WebKit/Source/core/editing/serializers/MarkupFormatter.cpp +++ b/third_party/WebKit/Source/core/editing/serializers/MarkupFormatter.cpp
@@ -126,7 +126,7 @@ : resolve_urls_method_(resolve_urls_method), serialization_type_(serialization_type) {} -MarkupFormatter::~MarkupFormatter() {} +MarkupFormatter::~MarkupFormatter() = default; String MarkupFormatter::ResolveURLIfNeeded(const Element& element, const String& url_string) const {
diff --git a/third_party/WebKit/Source/core/editing/serializers/StyledMarkupSerializer.cpp b/third_party/WebKit/Source/core/editing/serializers/StyledMarkupSerializer.cpp index bf9ef57..128ab2b 100644 --- a/third_party/WebKit/Source/core/editing/serializers/StyledMarkupSerializer.cpp +++ b/third_party/WebKit/Source/core/editing/serializers/StyledMarkupSerializer.cpp
@@ -79,7 +79,7 @@ ElementShadow* shadow = ToElement(node).Shadow(); if (!shadow) return false; - return shadow->YoungestShadowRoot().GetType() == ShadowRootType::kUserAgent; + return shadow->YoungestShadowRoot().IsUserAgent(); } } // namespace
diff --git a/third_party/WebKit/Source/core/editing/serializers/TextOffset.cpp b/third_party/WebKit/Source/core/editing/serializers/TextOffset.cpp index 4b51ed2..6000268 100644 --- a/third_party/WebKit/Source/core/editing/serializers/TextOffset.cpp +++ b/third_party/WebKit/Source/core/editing/serializers/TextOffset.cpp
@@ -12,8 +12,7 @@ TextOffset::TextOffset(Text* text, int offset) : text_(text), offset_(offset) {} -TextOffset::TextOffset(const TextOffset& other) - : text_(other.text_), offset_(other.offset_) {} +TextOffset::TextOffset(const TextOffset& other) = default; bool TextOffset::IsNull() const { return !text_;
diff --git a/third_party/WebKit/Source/core/editing/spellcheck/IdleSpellCheckCallback.cpp b/third_party/WebKit/Source/core/editing/spellcheck/IdleSpellCheckCallback.cpp index afdfc921..113aeeb 100644 --- a/third_party/WebKit/Source/core/editing/spellcheck/IdleSpellCheckCallback.cpp +++ b/third_party/WebKit/Source/core/editing/spellcheck/IdleSpellCheckCallback.cpp
@@ -38,7 +38,7 @@ } // namespace -IdleSpellCheckCallback::~IdleSpellCheckCallback() {} +IdleSpellCheckCallback::~IdleSpellCheckCallback() = default; void IdleSpellCheckCallback::Trace(blink::Visitor* visitor) { visitor->Trace(frame_);
diff --git a/third_party/WebKit/Source/core/editing/spellcheck/SpellCheckRequester.cpp b/third_party/WebKit/Source/core/editing/spellcheck/SpellCheckRequester.cpp index aee96c6..ac0f225b 100644 --- a/third_party/WebKit/Source/core/editing/spellcheck/SpellCheckRequester.cpp +++ b/third_party/WebKit/Source/core/editing/spellcheck/SpellCheckRequester.cpp
@@ -70,7 +70,7 @@ } private: - virtual ~WebTextCheckingCompletionImpl() {} + virtual ~WebTextCheckingCompletionImpl() = default; Persistent<SpellCheckRequest> request_; }; @@ -91,7 +91,7 @@ DCHECK(root_editable_element_); } -SpellCheckRequest::~SpellCheckRequest() {} +SpellCheckRequest::~SpellCheckRequest() = default; void SpellCheckRequest::Trace(blink::Visitor* visitor) { visitor->Trace(requester_); @@ -165,7 +165,7 @@ this, &SpellCheckRequester::TimerFiredToProcessQueuedRequest) {} -SpellCheckRequester::~SpellCheckRequester() {} +SpellCheckRequester::~SpellCheckRequester() = default; WebTextCheckClient* SpellCheckRequester::GetTextCheckerClient() const { return GetFrame().GetSpellChecker().GetTextCheckerClient();
diff --git a/third_party/WebKit/Source/core/editing/spellcheck/TextCheckingParagraph.cpp b/third_party/WebKit/Source/core/editing/spellcheck/TextCheckingParagraph.cpp index 96b2c71..8a56d85 100644 --- a/third_party/WebKit/Source/core/editing/spellcheck/TextCheckingParagraph.cpp +++ b/third_party/WebKit/Source/core/editing/spellcheck/TextCheckingParagraph.cpp
@@ -57,7 +57,7 @@ checking_end_(-1), checking_length_(-1) {} -TextCheckingParagraph::~TextCheckingParagraph() {} +TextCheckingParagraph::~TextCheckingParagraph() = default; void TextCheckingParagraph::ExpandRangeToNextEnd() { DCHECK(checking_range_.IsNotNull());
diff --git a/third_party/WebKit/Source/core/editing/testing/EditingTestBase.cpp b/third_party/WebKit/Source/core/editing/testing/EditingTestBase.cpp index aa76986a75..eb6b14d 100644 --- a/third_party/WebKit/Source/core/editing/testing/EditingTestBase.cpp +++ b/third_party/WebKit/Source/core/editing/testing/EditingTestBase.cpp
@@ -31,9 +31,9 @@ } // namespace -EditingTestBase::EditingTestBase() {} +EditingTestBase::EditingTestBase() = default; -EditingTestBase::~EditingTestBase() {} +EditingTestBase::~EditingTestBase() = default; void EditingTestBase::InsertStyleElement(const std::string& style_rules) { Element* const head = GetOrCreateElement(&GetDocument(), HTMLNames::headTag);
diff --git a/third_party/WebKit/Source/core/events/AnimationEvent.cpp b/third_party/WebKit/Source/core/events/AnimationEvent.cpp index 4a3ac5b..840029e 100644 --- a/third_party/WebKit/Source/core/events/AnimationEvent.cpp +++ b/third_party/WebKit/Source/core/events/AnimationEvent.cpp
@@ -42,7 +42,7 @@ animation_name_(animation_name), elapsed_time_(elapsed_time) {} -AnimationEvent::~AnimationEvent() {} +AnimationEvent::~AnimationEvent() = default; const String& AnimationEvent::animationName() const { return animation_name_;
diff --git a/third_party/WebKit/Source/core/events/AnimationPlaybackEvent.cpp b/third_party/WebKit/Source/core/events/AnimationPlaybackEvent.cpp index b9497c9..22ca533e 100644 --- a/third_party/WebKit/Source/core/events/AnimationPlaybackEvent.cpp +++ b/third_party/WebKit/Source/core/events/AnimationPlaybackEvent.cpp
@@ -23,7 +23,7 @@ timeline_time_ = initializer.timelineTime(); } -AnimationPlaybackEvent::~AnimationPlaybackEvent() {} +AnimationPlaybackEvent::~AnimationPlaybackEvent() = default; double AnimationPlaybackEvent::currentTime(bool& is_null) const { double result = currentTime();
diff --git a/third_party/WebKit/Source/core/events/ApplicationCacheErrorEvent.cpp b/third_party/WebKit/Source/core/events/ApplicationCacheErrorEvent.cpp index 7e547a95..8842034 100644 --- a/third_party/WebKit/Source/core/events/ApplicationCacheErrorEvent.cpp +++ b/third_party/WebKit/Source/core/events/ApplicationCacheErrorEvent.cpp
@@ -64,7 +64,7 @@ message_ = initializer.message(); } -ApplicationCacheErrorEvent::~ApplicationCacheErrorEvent() {} +ApplicationCacheErrorEvent::~ApplicationCacheErrorEvent() = default; void ApplicationCacheErrorEvent::Trace(blink::Visitor* visitor) { Event::Trace(visitor);
diff --git a/third_party/WebKit/Source/core/events/BeforeTextInsertedEvent.cpp b/third_party/WebKit/Source/core/events/BeforeTextInsertedEvent.cpp index 335656b..578cd280 100644 --- a/third_party/WebKit/Source/core/events/BeforeTextInsertedEvent.cpp +++ b/third_party/WebKit/Source/core/events/BeforeTextInsertedEvent.cpp
@@ -31,7 +31,7 @@ : Event(EventTypeNames::webkitBeforeTextInserted, false, true), text_(text) {} -BeforeTextInsertedEvent::~BeforeTextInsertedEvent() {} +BeforeTextInsertedEvent::~BeforeTextInsertedEvent() = default; const AtomicString& BeforeTextInsertedEvent::InterfaceName() const { // Notice that there is no BeforeTextInsertedEvent.idl.
diff --git a/third_party/WebKit/Source/core/events/BeforeUnloadEvent.cpp b/third_party/WebKit/Source/core/events/BeforeUnloadEvent.cpp index 4afa5850..3694a20 100644 --- a/third_party/WebKit/Source/core/events/BeforeUnloadEvent.cpp +++ b/third_party/WebKit/Source/core/events/BeforeUnloadEvent.cpp
@@ -25,9 +25,9 @@ namespace blink { -BeforeUnloadEvent::BeforeUnloadEvent() {} +BeforeUnloadEvent::BeforeUnloadEvent() = default; -BeforeUnloadEvent::~BeforeUnloadEvent() {} +BeforeUnloadEvent::~BeforeUnloadEvent() = default; bool BeforeUnloadEvent::IsBeforeUnloadEvent() const { return true;
diff --git a/third_party/WebKit/Source/core/events/ClipboardEvent.cpp b/third_party/WebKit/Source/core/events/ClipboardEvent.cpp index fa17ad9..1010c85 100644 --- a/third_party/WebKit/Source/core/events/ClipboardEvent.cpp +++ b/third_party/WebKit/Source/core/events/ClipboardEvent.cpp
@@ -34,7 +34,7 @@ const ClipboardEventInit& initializer) : Event(type, initializer), clipboard_data_(initializer.clipboardData()) {} -ClipboardEvent::~ClipboardEvent() {} +ClipboardEvent::~ClipboardEvent() = default; const AtomicString& ClipboardEvent::InterfaceName() const { return EventNames::ClipboardEvent;
diff --git a/third_party/WebKit/Source/core/events/CompositionEvent.cpp b/third_party/WebKit/Source/core/events/CompositionEvent.cpp index 74d356e3..7c5b3976 100644 --- a/third_party/WebKit/Source/core/events/CompositionEvent.cpp +++ b/third_party/WebKit/Source/core/events/CompositionEvent.cpp
@@ -30,7 +30,7 @@ namespace blink { -CompositionEvent::CompositionEvent() {} +CompositionEvent::CompositionEvent() = default; CompositionEvent::CompositionEvent(const AtomicString& type, AbstractView* view, @@ -53,7 +53,7 @@ data_ = initializer.data(); } -CompositionEvent::~CompositionEvent() {} +CompositionEvent::~CompositionEvent() = default; void CompositionEvent::initCompositionEvent(const AtomicString& type, bool can_bubble,
diff --git a/third_party/WebKit/Source/core/events/ErrorEvent.cpp b/third_party/WebKit/Source/core/events/ErrorEvent.cpp index 6f3bafe258..1b7bf93 100644 --- a/third_party/WebKit/Source/core/events/ErrorEvent.cpp +++ b/third_party/WebKit/Source/core/events/ErrorEvent.cpp
@@ -79,7 +79,7 @@ unsanitized_message_ = message; } -ErrorEvent::~ErrorEvent() {} +ErrorEvent::~ErrorEvent() = default; const AtomicString& ErrorEvent::InterfaceName() const { return EventNames::ErrorEvent;
diff --git a/third_party/WebKit/Source/core/events/EventFactory.h b/third_party/WebKit/Source/core/events/EventFactory.h index c35791c5..5a000651 100644 --- a/third_party/WebKit/Source/core/events/EventFactory.h +++ b/third_party/WebKit/Source/core/events/EventFactory.h
@@ -43,10 +43,10 @@ public: virtual Event* Create(ExecutionContext*, const String& event_type) = 0; - virtual ~EventFactoryBase() {} + virtual ~EventFactoryBase() = default; protected: - EventFactoryBase() {} + EventFactoryBase() = default; }; class EventFactory final : public EventFactoryBase {
diff --git a/third_party/WebKit/Source/core/events/FocusEvent.cpp b/third_party/WebKit/Source/core/events/FocusEvent.cpp index c54f3cd7..053e620 100644 --- a/third_party/WebKit/Source/core/events/FocusEvent.cpp +++ b/third_party/WebKit/Source/core/events/FocusEvent.cpp
@@ -38,7 +38,7 @@ return true; } -FocusEvent::FocusEvent() {} +FocusEvent::FocusEvent() = default; FocusEvent::FocusEvent(const AtomicString& type, bool can_bubble,
diff --git a/third_party/WebKit/Source/core/events/GestureEvent.h b/third_party/WebKit/Source/core/events/GestureEvent.h index 5d9d24a..a08dfef 100644 --- a/third_party/WebKit/Source/core/events/GestureEvent.h +++ b/third_party/WebKit/Source/core/events/GestureEvent.h
@@ -36,7 +36,7 @@ class CORE_EXPORT GestureEvent final : public UIEventWithKeyState { public: static GestureEvent* Create(AbstractView*, const WebGestureEvent&); - ~GestureEvent() override {} + ~GestureEvent() override = default; bool IsGestureEvent() const override;
diff --git a/third_party/WebKit/Source/core/events/HashChangeEvent.h b/third_party/WebKit/Source/core/events/HashChangeEvent.h index f0a875a7..9ae23411 100644 --- a/third_party/WebKit/Source/core/events/HashChangeEvent.h +++ b/third_party/WebKit/Source/core/events/HashChangeEvent.h
@@ -51,7 +51,7 @@ virtual void Trace(blink::Visitor* visitor) { Event::Trace(visitor); } private: - HashChangeEvent() {} + HashChangeEvent() = default; HashChangeEvent(const String& old_url, const String& new_url) : Event(EventTypeNames::hashchange, false, false),
diff --git a/third_party/WebKit/Source/core/events/KeyboardEvent.cpp b/third_party/WebKit/Source/core/events/KeyboardEvent.cpp index 35d8bf4..c0169bb 100644 --- a/third_party/WebKit/Source/core/events/KeyboardEvent.cpp +++ b/third_party/WebKit/Source/core/events/KeyboardEvent.cpp
@@ -142,7 +142,7 @@ InitLocationModifiers(initializer.location()); } -KeyboardEvent::~KeyboardEvent() {} +KeyboardEvent::~KeyboardEvent() = default; void KeyboardEvent::initKeyboardEvent(ScriptState* script_state, const AtomicString& type,
diff --git a/third_party/WebKit/Source/core/events/MessageEvent.cpp b/third_party/WebKit/Source/core/events/MessageEvent.cpp index 91efa3e2..a0df55f 100644 --- a/third_party/WebKit/Source/core/events/MessageEvent.cpp +++ b/third_party/WebKit/Source/core/events/MessageEvent.cpp
@@ -139,7 +139,7 @@ data_as_array_buffer_(data), origin_(origin) {} -MessageEvent::~MessageEvent() {} +MessageEvent::~MessageEvent() = default; MessageEvent* MessageEvent::Create(const AtomicString& type, const MessageEventInit& initializer,
diff --git a/third_party/WebKit/Source/core/events/MouseEvent.cpp b/third_party/WebKit/Source/core/events/MouseEvent.cpp index 54a89e32..aee2f31 100644 --- a/third_party/WebKit/Source/core/events/MouseEvent.cpp +++ b/third_party/WebKit/Source/core/events/MouseEvent.cpp
@@ -292,7 +292,7 @@ has_cached_relative_position_ = false; } -MouseEvent::~MouseEvent() {} +MouseEvent::~MouseEvent() = default; unsigned short MouseEvent::WebInputEventModifiersToButtons(unsigned modifiers) { unsigned short buttons = 0;
diff --git a/third_party/WebKit/Source/core/events/MutationEvent.cpp b/third_party/WebKit/Source/core/events/MutationEvent.cpp index 0a7f3b95..7cb0245 100644 --- a/third_party/WebKit/Source/core/events/MutationEvent.cpp +++ b/third_party/WebKit/Source/core/events/MutationEvent.cpp
@@ -41,7 +41,7 @@ attr_name_(attr_name), attr_change_(attr_change) {} -MutationEvent::~MutationEvent() {} +MutationEvent::~MutationEvent() = default; void MutationEvent::initMutationEvent(const AtomicString& type, bool can_bubble,
diff --git a/third_party/WebKit/Source/core/events/PageTransitionEvent.cpp b/third_party/WebKit/Source/core/events/PageTransitionEvent.cpp index dfc22b9..ec8a2e8 100644 --- a/third_party/WebKit/Source/core/events/PageTransitionEvent.cpp +++ b/third_party/WebKit/Source/core/events/PageTransitionEvent.cpp
@@ -41,7 +41,7 @@ persisted_ = initializer.persisted(); } -PageTransitionEvent::~PageTransitionEvent() {} +PageTransitionEvent::~PageTransitionEvent() = default; const AtomicString& PageTransitionEvent::InterfaceName() const { return EventNames::PageTransitionEvent;
diff --git a/third_party/WebKit/Source/core/events/PointerEventFactory.h b/third_party/WebKit/Source/core/events/PointerEventFactory.h index 1be7efdb..de3f860 100644 --- a/third_party/WebKit/Source/core/events/PointerEventFactory.h +++ b/third_party/WebKit/Source/core/events/PointerEventFactory.h
@@ -81,7 +81,7 @@ private: typedef WTF::UnsignedWithZeroKeyHashTraits<int> UnsignedHash; typedef struct IncomingId : public std::pair<int, int> { - IncomingId() {} + IncomingId() = default; IncomingId(WebPointerProperties::PointerType pointer_type, int raw_id) : std::pair<int, int>(static_cast<int>(pointer_type), raw_id) {} int PointerTypeInt() const { return first; }
diff --git a/third_party/WebKit/Source/core/events/PopStateEvent.cpp b/third_party/WebKit/Source/core/events/PopStateEvent.cpp index 507d2e95..88bd0e1 100644 --- a/third_party/WebKit/Source/core/events/PopStateEvent.cpp +++ b/third_party/WebKit/Source/core/events/PopStateEvent.cpp
@@ -52,7 +52,7 @@ state_(this), history_(history) {} -PopStateEvent::~PopStateEvent() {} +PopStateEvent::~PopStateEvent() = default; ScriptValue PopStateEvent::state(ScriptState* script_state) const { if (state_.IsEmpty())
diff --git a/third_party/WebKit/Source/core/events/PromiseRejectionEvent.cpp b/third_party/WebKit/Source/core/events/PromiseRejectionEvent.cpp index 1a43170..fe91a5f5 100644 --- a/third_party/WebKit/Source/core/events/PromiseRejectionEvent.cpp +++ b/third_party/WebKit/Source/core/events/PromiseRejectionEvent.cpp
@@ -25,7 +25,7 @@ } } -PromiseRejectionEvent::~PromiseRejectionEvent() {} +PromiseRejectionEvent::~PromiseRejectionEvent() = default; void PromiseRejectionEvent::Dispose() { // Clear ScopedPersistents so that V8 doesn't call phantom callbacks
diff --git a/third_party/WebKit/Source/core/events/TextEvent.cpp b/third_party/WebKit/Source/core/events/TextEvent.cpp index 6dc6fe2..c4f5bc7 100644 --- a/third_party/WebKit/Source/core/events/TextEvent.cpp +++ b/third_party/WebKit/Source/core/events/TextEvent.cpp
@@ -99,7 +99,7 @@ should_smart_replace_(should_smart_replace), should_match_style_(should_match_style) {} -TextEvent::~TextEvent() {} +TextEvent::~TextEvent() = default; void TextEvent::initTextEvent(const AtomicString& type, bool can_bubble,
diff --git a/third_party/WebKit/Source/core/events/TouchEvent.cpp b/third_party/WebKit/Source/core/events/TouchEvent.cpp index 4f9027c..43934d29 100644 --- a/third_party/WebKit/Source/core/events/TouchEvent.cpp +++ b/third_party/WebKit/Source/core/events/TouchEvent.cpp
@@ -246,7 +246,7 @@ changed_touches_(TouchList::Create(initializer.changedTouches())), current_touch_action_(TouchAction::kTouchActionAuto) {} -TouchEvent::~TouchEvent() {} +TouchEvent::~TouchEvent() = default; const AtomicString& TouchEvent::InterfaceName() const { return EventNames::TouchEvent;
diff --git a/third_party/WebKit/Source/core/events/TransitionEvent.cpp b/third_party/WebKit/Source/core/events/TransitionEvent.cpp index 93e8d08..86ecdb2 100644 --- a/third_party/WebKit/Source/core/events/TransitionEvent.cpp +++ b/third_party/WebKit/Source/core/events/TransitionEvent.cpp
@@ -50,7 +50,7 @@ pseudo_element_ = initializer.pseudoElement(); } -TransitionEvent::~TransitionEvent() {} +TransitionEvent::~TransitionEvent() = default; const String& TransitionEvent::propertyName() const { return property_name_;
diff --git a/third_party/WebKit/Source/core/events/UIEvent.cpp b/third_party/WebKit/Source/core/events/UIEvent.cpp index a515e48..d02e569 100644 --- a/third_party/WebKit/Source/core/events/UIEvent.cpp +++ b/third_party/WebKit/Source/core/events/UIEvent.cpp
@@ -53,7 +53,7 @@ detail_(initializer.detail()), source_capabilities_(initializer.sourceCapabilities()) {} -UIEvent::~UIEvent() {} +UIEvent::~UIEvent() = default; void UIEvent::initUIEvent(const AtomicString& type_arg, bool can_bubble_arg,
diff --git a/third_party/WebKit/Source/core/events/VisualViewportResizeEvent.cpp b/third_party/WebKit/Source/core/events/VisualViewportResizeEvent.cpp index 85f8019..34db636 100644 --- a/third_party/WebKit/Source/core/events/VisualViewportResizeEvent.cpp +++ b/third_party/WebKit/Source/core/events/VisualViewportResizeEvent.cpp
@@ -8,7 +8,7 @@ namespace blink { -VisualViewportResizeEvent::~VisualViewportResizeEvent() {} +VisualViewportResizeEvent::~VisualViewportResizeEvent() = default; VisualViewportResizeEvent::VisualViewportResizeEvent() : Event(EventTypeNames::resize,
diff --git a/third_party/WebKit/Source/core/events/VisualViewportScrollEvent.cpp b/third_party/WebKit/Source/core/events/VisualViewportScrollEvent.cpp index 0dcd9cc..894817cb 100644 --- a/third_party/WebKit/Source/core/events/VisualViewportScrollEvent.cpp +++ b/third_party/WebKit/Source/core/events/VisualViewportScrollEvent.cpp
@@ -8,7 +8,7 @@ namespace blink { -VisualViewportScrollEvent::~VisualViewportScrollEvent() {} +VisualViewportScrollEvent::~VisualViewportScrollEvent() = default; VisualViewportScrollEvent::VisualViewportScrollEvent() : Event(EventTypeNames::scroll,
diff --git a/third_party/WebKit/Source/core/exported/FakeWebPlugin.cpp b/third_party/WebKit/Source/core/exported/FakeWebPlugin.cpp index fdad257..b69ffc3b 100644 --- a/third_party/WebKit/Source/core/exported/FakeWebPlugin.cpp +++ b/third_party/WebKit/Source/core/exported/FakeWebPlugin.cpp
@@ -34,7 +34,7 @@ FakeWebPlugin::FakeWebPlugin(const WebPluginParams& params) {} -FakeWebPlugin::~FakeWebPlugin() {} +FakeWebPlugin::~FakeWebPlugin() = default; bool FakeWebPlugin::Initialize(WebPluginContainer* container) { container_ = container;
diff --git a/third_party/WebKit/Source/core/exported/LocalFrameClientImpl.cpp b/third_party/WebKit/Source/core/exported/LocalFrameClientImpl.cpp index 9115f90f7..1e1f2b9cb 100644 --- a/third_party/WebKit/Source/core/exported/LocalFrameClientImpl.cpp +++ b/third_party/WebKit/Source/core/exported/LocalFrameClientImpl.cpp
@@ -148,7 +148,7 @@ return new LocalFrameClientImpl(frame); } -LocalFrameClientImpl::~LocalFrameClientImpl() {} +LocalFrameClientImpl::~LocalFrameClientImpl() = default; void LocalFrameClientImpl::Trace(blink::Visitor* visitor) { visitor->Trace(web_frame_);
diff --git a/third_party/WebKit/Source/core/exported/LocalFrameClientImplTest.cpp b/third_party/WebKit/Source/core/exported/LocalFrameClientImplTest.cpp index c4b28c3b..c516471 100644 --- a/third_party/WebKit/Source/core/exported/LocalFrameClientImplTest.cpp +++ b/third_party/WebKit/Source/core/exported/LocalFrameClientImplTest.cpp
@@ -51,7 +51,7 @@ class LocalFrameMockWebFrameClient : public FrameTestHelpers::TestWebFrameClient { public: - ~LocalFrameMockWebFrameClient() override {} + ~LocalFrameMockWebFrameClient() override = default; MOCK_METHOD0(UserAgentOverride, WebString()); };
diff --git a/third_party/WebKit/Source/core/exported/PrerenderingTest.cpp b/third_party/WebKit/Source/core/exported/PrerenderingTest.cpp index 1123131..ecf1880 100644 --- a/third_party/WebKit/Source/core/exported/PrerenderingTest.cpp +++ b/third_party/WebKit/Source/core/exported/PrerenderingTest.cpp
@@ -62,8 +62,8 @@ class TestWebPrerendererClient : public WebPrerendererClient { public: - TestWebPrerendererClient() {} - virtual ~TestWebPrerendererClient() {} + TestWebPrerendererClient() = default; + virtual ~TestWebPrerendererClient() = default; void SetExtraDataForNextPrerender(WebPrerender::ExtraData* extra_data) { DCHECK(!extra_data_);
diff --git a/third_party/WebKit/Source/core/exported/SharedWorkerRepositoryClientImpl.h b/third_party/WebKit/Source/core/exported/SharedWorkerRepositoryClientImpl.h index dd8f533..5a8c2a2 100644 --- a/third_party/WebKit/Source/core/exported/SharedWorkerRepositoryClientImpl.h +++ b/third_party/WebKit/Source/core/exported/SharedWorkerRepositoryClientImpl.h
@@ -53,7 +53,7 @@ return WTF::WrapUnique(new SharedWorkerRepositoryClientImpl(client)); } - ~SharedWorkerRepositoryClientImpl() override {} + ~SharedWorkerRepositoryClientImpl() override = default; void Connect(SharedWorker*, MessagePortChannel,
diff --git a/third_party/WebKit/Source/core/exported/WebAssociatedURLLoaderImpl.cpp b/third_party/WebKit/Source/core/exported/WebAssociatedURLLoaderImpl.cpp index 1c67df9..50d432ff 100644 --- a/third_party/WebKit/Source/core/exported/WebAssociatedURLLoaderImpl.cpp +++ b/third_party/WebKit/Source/core/exported/WebAssociatedURLLoaderImpl.cpp
@@ -67,7 +67,7 @@ class HTTPRequestHeaderValidator : public WebHTTPHeaderVisitor { public: HTTPRequestHeaderValidator() : is_safe_(true) {} - ~HTTPRequestHeaderValidator() override {} + ~HTTPRequestHeaderValidator() override = default; void VisitHeader(const WebString& name, const WebString& value) override; bool IsSafe() const { return is_safe_; }
diff --git a/third_party/WebKit/Source/core/exported/WebFileChooserCompletionImpl.cpp b/third_party/WebKit/Source/core/exported/WebFileChooserCompletionImpl.cpp index 471f26d..cf161f4 100644 --- a/third_party/WebKit/Source/core/exported/WebFileChooserCompletionImpl.cpp +++ b/third_party/WebKit/Source/core/exported/WebFileChooserCompletionImpl.cpp
@@ -39,7 +39,7 @@ scoped_refptr<FileChooser> chooser) : file_chooser_(std::move(chooser)) {} -WebFileChooserCompletionImpl::~WebFileChooserCompletionImpl() {} +WebFileChooserCompletionImpl::~WebFileChooserCompletionImpl() = default; void WebFileChooserCompletionImpl::DidChooseFile( const WebVector<WebString>& file_names) {
diff --git a/third_party/WebKit/Source/core/exported/WebFormElementObserverImpl.cpp b/third_party/WebKit/Source/core/exported/WebFormElementObserverImpl.cpp index 59989a0..133d5bd 100644 --- a/third_party/WebKit/Source/core/exported/WebFormElementObserverImpl.cpp +++ b/third_party/WebKit/Source/core/exported/WebFormElementObserverImpl.cpp
@@ -130,7 +130,7 @@ mutation_callback_ = new ObserverCallback(element, std::move(callback)); } -WebFormElementObserverImpl::~WebFormElementObserverImpl() {} +WebFormElementObserverImpl::~WebFormElementObserverImpl() = default; void WebFormElementObserverImpl::Disconnect() { mutation_callback_->Disconnect();
diff --git a/third_party/WebKit/Source/core/exported/WebFrameSerializer.cpp b/third_party/WebKit/Source/core/exported/WebFrameSerializer.cpp index 148e84f..8e32c32 100644 --- a/third_party/WebKit/Source/core/exported/WebFrameSerializer.cpp +++ b/third_party/WebKit/Source/core/exported/WebFrameSerializer.cpp
@@ -357,7 +357,8 @@ String shadow_mode; switch (shadow_root.GetType()) { - case ShadowRootType::kUserAgent: + case ShadowRootType::kLegacyUserAgentV0: + case ShadowRootType::kUserAgentV1: // No need to serialize. return std::pair<Node*, Element*>(); case ShadowRootType::V0:
diff --git a/third_party/WebKit/Source/core/exported/WebFrameSerializerSanitizationTest.cpp b/third_party/WebKit/Source/core/exported/WebFrameSerializerSanitizationTest.cpp index 4cb3c636..1e2d131 100644 --- a/third_party/WebKit/Source/core/exported/WebFrameSerializerSanitizationTest.cpp +++ b/third_party/WebKit/Source/core/exported/WebFrameSerializerSanitizationTest.cpp
@@ -166,9 +166,9 @@ if (shadow_type == ShadowRootType::V0) { DCHECK(!delegates_focus); shadow_root = &host_element->CreateShadowRootInternal(); - } else if (shadow_type == ShadowRootType::kUserAgent) { + } else if (shadow_type == ShadowRootType::kLegacyUserAgentV0) { DCHECK(!delegates_focus); - shadow_root = &host_element->CreateUserAgentShadowRoot(); + shadow_root = &host_element->CreateLegacyUserAgentShadowRootV0(); } else { shadow_root = &host_element->AttachShadowRootInternal(shadow_type, delegates_focus);
diff --git a/third_party/WebKit/Source/core/exported/WebFrameTest.cpp b/third_party/WebKit/Source/core/exported/WebFrameTest.cpp index 10b8f14..ebe7eb9 100644 --- a/third_party/WebKit/Source/core/exported/WebFrameTest.cpp +++ b/third_party/WebKit/Source/core/exported/WebFrameTest.cpp
@@ -392,7 +392,7 @@ public: explicit ScriptExecutionCallbackHelper(v8::Local<v8::Context> context) : did_complete_(false), bool_value_(false), context_(context) {} - ~ScriptExecutionCallbackHelper() override {} + ~ScriptExecutionCallbackHelper() override = default; bool DidComplete() const { return did_complete_; } const String& StringValue() const { return string_value_; } @@ -694,7 +694,7 @@ : public FrameTestHelpers::TestWebFrameClient { public: EvaluateOnLoadWebFrameClient() : executing_(false), was_executed_(false) {} - ~EvaluateOnLoadWebFrameClient() override {} + ~EvaluateOnLoadWebFrameClient() override = default; // FrameTestHelpers::TestWebFrameClient: void DidClearWindowObject() override { @@ -721,7 +721,7 @@ class CSSCallbackWebFrameClient : public FrameTestHelpers::TestWebFrameClient { public: CSSCallbackWebFrameClient() : update_count_(0) {} - ~CSSCallbackWebFrameClient() override {} + ~CSSCallbackWebFrameClient() override = default; // FrameTestHelpers::TestWebFrameClient: void DidMatchCSS( @@ -1085,8 +1085,8 @@ class FixedLayoutTestWebViewClient : public FrameTestHelpers::TestWebViewClient { public: - FixedLayoutTestWebViewClient() {} - ~FixedLayoutTestWebViewClient() override {} + FixedLayoutTestWebViewClient() = default; + ~FixedLayoutTestWebViewClient() override = default; // FrameTestHelpers::TestWebViewClient: WebScreenInfo GetScreenInfo() override { return screen_info_; } @@ -4281,8 +4281,8 @@ class TestReloadDoesntRedirectWebFrameClient : public FrameTestHelpers::TestWebFrameClient { public: - TestReloadDoesntRedirectWebFrameClient() {} - ~TestReloadDoesntRedirectWebFrameClient() override {} + TestReloadDoesntRedirectWebFrameClient() = default; + ~TestReloadDoesntRedirectWebFrameClient() override = default; // FrameTestHelpers::TestWebFrameClient: WebNavigationPolicy DecidePolicyForNavigation( @@ -4311,8 +4311,8 @@ class ClearScrollStateOnCommitWebFrameClient : public FrameTestHelpers::TestWebFrameClient { public: - ClearScrollStateOnCommitWebFrameClient() {} - ~ClearScrollStateOnCommitWebFrameClient() override {} + ClearScrollStateOnCommitWebFrameClient() = default; + ~ClearScrollStateOnCommitWebFrameClient() override = default; // FrameTestHelpers::TestWebFrameClient: void DidCommitProvisionalLoad(const WebHistoryItem&, @@ -4535,7 +4535,7 @@ Vector<std::unique_ptr<Notification>>& release_notifications) : create_notifications_(create_notifications), release_notifications_(release_notifications) {} - ~ContextLifetimeTestWebFrameClient() override {} + ~ContextLifetimeTestWebFrameClient() override = default; void Reset() { create_notifications_.clear(); @@ -4873,8 +4873,8 @@ class TestExecuteScriptDuringDidCreateScriptContext : public FrameTestHelpers::TestWebFrameClient { public: - TestExecuteScriptDuringDidCreateScriptContext() {} - ~TestExecuteScriptDuringDidCreateScriptContext() override {} + TestExecuteScriptDuringDidCreateScriptContext() = default; + ~TestExecuteScriptDuringDidCreateScriptContext() override = default; // FrameTestHelpers::TestWebFrameClient: void DidCreateScriptContext(v8::Local<v8::Context> context, @@ -4898,7 +4898,7 @@ public: FindUpdateWebFrameClient() : find_results_are_ready_(false), count_(-1), active_index_(-1) {} - ~FindUpdateWebFrameClient() override {} + ~FindUpdateWebFrameClient() override = default; // FrameTestHelpers::TestWebFrameClient: void ReportFindInPageMatchCount(int, int count, bool final_update) override { @@ -5975,7 +5975,7 @@ class CompositedSelectionBoundsTestLayerTreeView : public WebLayerTreeView { public: CompositedSelectionBoundsTestLayerTreeView() : selection_cleared_(false) {} - ~CompositedSelectionBoundsTestLayerTreeView() override {} + ~CompositedSelectionBoundsTestLayerTreeView() override = default; // WebLayerTreeView: void RegisterSelection(const WebSelection& selection) override { @@ -6008,7 +6008,7 @@ class CompositedSelectionBoundsTestWebViewClient : public FrameTestHelpers::TestWebViewClient { public: - ~CompositedSelectionBoundsTestWebViewClient() override {} + ~CompositedSelectionBoundsTestWebViewClient() override = default; WebLayerTreeView* InitializeLayerTreeView() override { return &test_layer_tree_view_; } @@ -6291,8 +6291,8 @@ class DisambiguationPopupTestWebViewClient : public FrameTestHelpers::TestWebViewClient { public: - DisambiguationPopupTestWebViewClient() {} - ~DisambiguationPopupTestWebViewClient() override {} + DisambiguationPopupTestWebViewClient() = default; + ~DisambiguationPopupTestWebViewClient() override = default; // FrameTestHelpers::TestWebViewClient: bool DidTapMultipleTargets(const WebSize&, @@ -6604,7 +6604,7 @@ : public FrameTestHelpers::TestWebFrameClient { public: TestSubstituteDataWebFrameClient() : commit_called_(false) {} - ~TestSubstituteDataWebFrameClient() override {} + ~TestSubstituteDataWebFrameClient() override = default; // FrameTestHelpers::TestWebFrameClient: void DidFailProvisionalLoad(const WebURLError& error, @@ -6665,7 +6665,7 @@ : public FrameTestHelpers::TestWebFrameClient { public: TestWillInsertBodyWebFrameClient() : num_bodies_(0), did_load_(false) {} - ~TestWillInsertBodyWebFrameClient() override {} + ~TestWillInsertBodyWebFrameClient() override = default; // FrameTestHelpers::TestWebFrameClient: void DidCommitProvisionalLoad(const WebHistoryItem&, @@ -6718,7 +6718,7 @@ class TextCheckClient : public WebTextCheckClient { public: TextCheckClient() : number_of_times_checked_(0) {} - ~TextCheckClient() override {} + ~TextCheckClient() override = default; // WebTextCheckClient: bool IsSpellCheckingEnabled() const override { return true; } @@ -6877,7 +6877,7 @@ class StubbornTextCheckClient : public WebTextCheckClient { public: StubbornTextCheckClient() : completion_(nullptr) {} - ~StubbornTextCheckClient() override {} + ~StubbornTextCheckClient() override = default; // WebTextCheckClient: bool IsSpellCheckingEnabled() const override { return true; } @@ -7037,8 +7037,8 @@ class TestAccessInitialDocumentWebFrameClient : public FrameTestHelpers::TestWebFrameClient { public: - TestAccessInitialDocumentWebFrameClient() {} - ~TestAccessInitialDocumentWebFrameClient() override {} + TestAccessInitialDocumentWebFrameClient() = default; + ~TestAccessInitialDocumentWebFrameClient() override = default; // FrameTestHelpers::TestWebFrameClient: void DidAccessInitialDocument() override { ++did_access_initial_document_; } @@ -7208,7 +7208,7 @@ class TestScrolledFrameClient : public FrameTestHelpers::TestWebFrameClient { public: TestScrolledFrameClient() { Reset(); } - ~TestScrolledFrameClient() override {} + ~TestScrolledFrameClient() override = default; void Reset() { did_scroll_frame_ = false; } bool WasFrameScrolled() const { return did_scroll_frame_; } @@ -7332,8 +7332,8 @@ class TestNavigationPolicyWebFrameClient : public FrameTestHelpers::TestWebFrameClient { public: - TestNavigationPolicyWebFrameClient() {} - ~TestNavigationPolicyWebFrameClient() override {} + TestNavigationPolicyWebFrameClient() = default; + ~TestNavigationPolicyWebFrameClient() override = default; // FrameTestHelpers::TestWebFrameClient: void DidNavigateWithinPage(const WebHistoryItem&, @@ -7371,8 +7371,8 @@ class TestNewWindowWebViewClient : public FrameTestHelpers::TestWebViewClient { public: - TestNewWindowWebViewClient() {} - ~TestNewWindowWebViewClient() override {} + TestNewWindowWebViewClient() = default; + ~TestNewWindowWebViewClient() override = default; // FrameTestHelpers::TestWebFrameClient: WebView* CreateView(WebLocalFrame*, @@ -7391,7 +7391,7 @@ : public FrameTestHelpers::TestWebFrameClient { public: TestNewWindowWebFrameClient() : decide_policy_call_count_(0) {} - ~TestNewWindowWebFrameClient() override {} + ~TestNewWindowWebFrameClient() override = default; // FrameTestHelpers::TestWebFrameClient: WebNavigationPolicy DecidePolicyForNavigation( @@ -7556,7 +7556,7 @@ TestCachePolicyWebFrameClient() : cache_mode_(mojom::FetchCacheMode::kDefault), will_send_request_call_count_(0) {} - ~TestCachePolicyWebFrameClient() override {} + ~TestCachePolicyWebFrameClient() override = default; mojom::FetchCacheMode GetCacheMode() const { return cache_mode_; } int WillSendRequestCallCount() const { return will_send_request_call_count_; } @@ -7635,7 +7635,7 @@ : public FrameTestHelpers::TestWebFrameClient { public: TestSameDocumentWebFrameClient() : frame_load_type_reload_seen_(false) {} - ~TestSameDocumentWebFrameClient() override {} + ~TestSameDocumentWebFrameClient() override = default; // FrameTestHelpers::TestWebFrameClient: void WillSendRequest(WebURLRequest&) override { @@ -7679,7 +7679,7 @@ : public FrameTestHelpers::TestWebFrameClient { public: TestSameDocumentWithImageWebFrameClient() : num_of_image_requests_(0) {} - ~TestSameDocumentWithImageWebFrameClient() override {} + ~TestSameDocumentWithImageWebFrameClient() override = default; // FrameTestHelpers::TestWebFrameClient: void WillSendRequest(WebURLRequest& request) override { @@ -7803,7 +7803,7 @@ : start_loading_count_(0), stop_loading_count_(0), different_document_start_count_(0) {} - ~TestStartStopCallbackWebFrameClient() override {} + ~TestStartStopCallbackWebFrameClient() override = default; // FrameTestHelpers::TestWebFrameClient: void DidStartLoading(bool to_different_document) override { @@ -7845,7 +7845,7 @@ public: TestDidNavigateCommitTypeWebFrameClient() : last_commit_type_(kWebHistoryInertCommit) {} - ~TestDidNavigateCommitTypeWebFrameClient() override {} + ~TestDidNavigateCommitTypeWebFrameClient() override = default; // FrameTestHelpers::TestWebFrameClient: void DidNavigateWithinPage(const WebHistoryItem&, @@ -7884,8 +7884,8 @@ class TestHistoryChildWebFrameClient : public FrameTestHelpers::TestWebFrameClient { public: - TestHistoryChildWebFrameClient() {} - ~TestHistoryChildWebFrameClient() override {} + TestHistoryChildWebFrameClient() = default; + ~TestHistoryChildWebFrameClient() override = default; // FrameTestHelpers::TestWebFrameClient: void DidStartProvisionalLoad(WebDocumentLoader* document_loader, @@ -7902,8 +7902,8 @@ class TestHistoryWebFrameClient : public FrameTestHelpers::TestWebFrameClient { public: - TestHistoryWebFrameClient() {} - ~TestHistoryWebFrameClient() override {} + TestHistoryWebFrameClient() = default; + ~TestHistoryWebFrameClient() override = default; // FrameTestHelpers::TestWebFrameClient: WebLocalFrame* CreateChildFrame(WebLocalFrame* parent, @@ -8042,7 +8042,7 @@ class FailCreateChildFrame : public FrameTestHelpers::TestWebFrameClient { public: FailCreateChildFrame() : call_count_(0) {} - ~FailCreateChildFrame() override {} + ~FailCreateChildFrame() override = default; // FrameTestHelpers::TestWebFrameClient: WebLocalFrame* CreateChildFrame( @@ -8695,8 +8695,8 @@ class TestFullscreenWebLayerTreeView : public WebLayerTreeView { public: - TestFullscreenWebLayerTreeView() {} - ~TestFullscreenWebLayerTreeView() override {} + TestFullscreenWebLayerTreeView() = default; + ~TestFullscreenWebLayerTreeView() override = default; // WebLayerTreeView: void SetBackgroundColor(blink::WebColor color) override { @@ -8707,8 +8707,8 @@ class TestFullscreenWebViewClient : public FrameTestHelpers::TestWebViewClient { public: - TestFullscreenWebViewClient() {} - ~TestFullscreenWebViewClient() override {} + TestFullscreenWebViewClient() = default; + ~TestFullscreenWebViewClient() override = default; // FrameTestHelpers::TestWebViewClient: WebLayerTreeView* InitializeLayerTreeView() override { @@ -8815,7 +8815,7 @@ : public FrameTestHelpers::TestWebFrameClient { public: ManifestChangeWebFrameClient() : manifest_change_count_(0) {} - ~ManifestChangeWebFrameClient() override {} + ~ManifestChangeWebFrameClient() override = default; // FrameTestHelpers::TestWebFrameClient: void DidChangeManifest() override { ++manifest_change_count_; } @@ -9006,7 +9006,7 @@ : public FrameTestHelpers::TestWebFrameClient { public: ThemeColorTestWebFrameClient() : did_notify_(false) {} - ~ThemeColorTestWebFrameClient() override {} + ~ThemeColorTestWebFrameClient() override = default; void Reset() { did_notify_ = false; } @@ -9167,8 +9167,8 @@ class SwapMainFrameWhenTitleChangesWebFrameClient : public FrameTestHelpers::TestWebFrameClient { public: - SwapMainFrameWhenTitleChangesWebFrameClient() {} - ~SwapMainFrameWhenTitleChangesWebFrameClient() override {} + SwapMainFrameWhenTitleChangesWebFrameClient() = default; + ~SwapMainFrameWhenTitleChangesWebFrameClient() override = default; // FrameTestHelpers::TestWebFrameClient: void DidReceiveTitle(const WebString& title, WebTextDirection) override { @@ -9612,7 +9612,7 @@ explicit RemoteToLocalSwapWebFrameClient(WebRemoteFrame* remote_frame) : history_commit_type_(kWebHistoryInertCommit), remote_frame_(remote_frame) {} - ~RemoteToLocalSwapWebFrameClient() override {} + ~RemoteToLocalSwapWebFrameClient() override = default; // FrameTestHelpers::TestWebFrameClient: void DidCommitProvisionalLoad(const WebHistoryItem&, @@ -9679,8 +9679,8 @@ class RemoteNavigationClient : public FrameTestHelpers::TestWebRemoteFrameClient { public: - RemoteNavigationClient() {} - ~RemoteNavigationClient() override {} + RemoteNavigationClient() = default; + ~RemoteNavigationClient() override = default; // FrameTestHelpers::TestWebRemoteFrameClient: void Navigate(const WebURLRequest& request, @@ -9747,7 +9747,7 @@ class RemoteWindowCloseClient : public FrameTestHelpers::TestWebViewClient { public: RemoteWindowCloseClient() : closed_(false) {} - ~RemoteWindowCloseClient() override {} + ~RemoteWindowCloseClient() override = default; // FrameTestHelpers::TestWebViewClient: void CloseWidgetSoon() override { closed_ = true; } @@ -9826,7 +9826,7 @@ class CommitTypeWebFrameClient : public FrameTestHelpers::TestWebFrameClient { public: CommitTypeWebFrameClient() : history_commit_type_(kWebHistoryInertCommit) {} - ~CommitTypeWebFrameClient() override {} + ~CommitTypeWebFrameClient() override = default; // FrameTestHelpers::TestWebFrameClient: void DidCommitProvisionalLoad(const WebHistoryItem&, @@ -9866,7 +9866,7 @@ : public FrameTestHelpers::TestWebWidgetClient { public: GestureEventTestWebWidgetClient() : did_handle_gesture_event_(false) {} - ~GestureEventTestWebWidgetClient() override {} + ~GestureEventTestWebWidgetClient() override = default; // FrameTestHelpers::TestWebWidgetClient: void DidHandleGestureEvent(const WebGestureEvent& event, @@ -9905,7 +9905,7 @@ : public DocumentThreadableLoaderClient { public: MockDocumentThreadableLoaderClient() : failed_(false) {} - ~MockDocumentThreadableLoaderClient() override {} + ~MockDocumentThreadableLoaderClient() override = default; // DocumentThreadableLoaderClient: void DidFail(const ResourceError&) override { failed_ = true; } @@ -9964,8 +9964,8 @@ class TestConsoleMessageWebFrameClient : public FrameTestHelpers::TestWebFrameClient { public: - TestConsoleMessageWebFrameClient() {} - ~TestConsoleMessageWebFrameClient() override {} + TestConsoleMessageWebFrameClient() = default; + ~TestConsoleMessageWebFrameClient() override = default; // FrameTestHelpers::TestWebFrameClient: void DidAddMessageToConsole(const WebConsoleMessage& message, @@ -10760,7 +10760,7 @@ : public FrameTestHelpers::TestWebFrameClient { public: CallbackOrderingWebFrameClient() : callback_count_(0) {} - ~CallbackOrderingWebFrameClient() override {} + ~CallbackOrderingWebFrameClient() override = default; // FrameTestHelpers::TestWebFrameClient: void DidStartLoading(bool to_different_document) override { @@ -10799,7 +10799,7 @@ : public FrameTestHelpers::TestWebRemoteFrameClient { public: TestWebRemoteFrameClientForVisibility() : visible_(true) {} - ~TestWebRemoteFrameClientForVisibility() override {} + ~TestWebRemoteFrameClientForVisibility() override = default; // FrameTestHelpers::TestWebRemoteFrameClient: void VisibilityChanged(bool visible) override { visible_ = visible; } @@ -10821,7 +10821,7 @@ web_remote_frame_ = FrameTestHelpers::CreateRemote(&remote_frame_client_); } - ~WebFrameVisibilityChangeTest() {} + ~WebFrameVisibilityChangeTest() = default; void ExecuteScriptOnMainFrame(const WebScriptSource& script) { MainFrame()->ExecuteScript(script); @@ -10951,8 +10951,8 @@ class SaveImageFromDataURLWebFrameClient : public FrameTestHelpers::TestWebFrameClient { public: - SaveImageFromDataURLWebFrameClient() {} - ~SaveImageFromDataURLWebFrameClient() override {} + SaveImageFromDataURLWebFrameClient() = default; + ~SaveImageFromDataURLWebFrameClient() override = default; // WebFrameClient: void SaveImageFromDataURL(const WebString& data_url) override { @@ -11154,8 +11154,8 @@ bool seen; }; - TestResourcePriorityWebFrameClient() {} - ~TestResourcePriorityWebFrameClient() override {} + TestResourcePriorityWebFrameClient() = default; + ~TestResourcePriorityWebFrameClient() override = default; // FrameTestHelpers::TestWebFrameClient: void WillSendRequest(WebURLRequest& request) override { @@ -11251,8 +11251,8 @@ class MultipleDataChunkDelegate : public WebURLLoaderTestDelegate { public: - MultipleDataChunkDelegate() {} - ~MultipleDataChunkDelegate() override {} + MultipleDataChunkDelegate() = default; + ~MultipleDataChunkDelegate() override = default; // WebURLLoaderTestDelegate: void DidReceiveData(WebURLLoaderClient* original_client, @@ -11680,8 +11680,8 @@ class LoadingObserverFrameClient : public FrameTestHelpers::TestWebFrameClient { public: - LoadingObserverFrameClient() {} - ~LoadingObserverFrameClient() override {} + LoadingObserverFrameClient() = default; + ~LoadingObserverFrameClient() override = default; // FrameTestHelpers::TestWebFrameClient: void FrameDetached(DetachType type) override { @@ -11736,8 +11736,8 @@ class MainFrameClient : public FrameTestHelpers::TestWebFrameClient { public: - MainFrameClient() {} - ~MainFrameClient() override {} + MainFrameClient() = default; + ~MainFrameClient() override = default; // FrameTestHelpers::TestWebFrameClient: WebLocalFrame* CreateChildFrame(WebLocalFrame* parent, @@ -11790,7 +11790,7 @@ public: ShowVirtualKeyboardObserverWidgetClient() : did_show_virtual_keyboard_(false) {} - ~ShowVirtualKeyboardObserverWidgetClient() override {} + ~ShowVirtualKeyboardObserverWidgetClient() override = default; // FrameTestHelpers::TestWebWidgetClient: void ShowVirtualKeyboardOnElementFocus() override { @@ -11831,8 +11831,8 @@ class ContextMenuWebFrameClient : public FrameTestHelpers::TestWebFrameClient { public: - ContextMenuWebFrameClient() {} - ~ContextMenuWebFrameClient() override {} + ContextMenuWebFrameClient() = default; + ~ContextMenuWebFrameClient() override = default; // WebFrameClient: void ShowContextMenu(const WebContextMenuData& data) override { @@ -11988,7 +11988,7 @@ class TestFallbackWebFrameClient : public FrameTestHelpers::TestWebFrameClient { public: TestFallbackWebFrameClient() : child_client_(nullptr) {} - ~TestFallbackWebFrameClient() override {} + ~TestFallbackWebFrameClient() override = default; void SetChildWebFrameClient(TestFallbackWebFrameClient* client) { child_client_ = client;
diff --git a/third_party/WebKit/Source/core/exported/WebHelperPluginImpl.h b/third_party/WebKit/Source/core/exported/WebHelperPluginImpl.h index 43d3d40f..0a235a4b 100644 --- a/third_party/WebKit/Source/core/exported/WebHelperPluginImpl.h +++ b/third_party/WebKit/Source/core/exported/WebHelperPluginImpl.h
@@ -57,7 +57,7 @@ private: friend class WebHelperPlugin; - WebHelperPluginImpl() {} + WebHelperPluginImpl() = default; bool Initialize(const String& plugin_type, WebLocalFrameImpl*); void ReallyDestroy();
diff --git a/third_party/WebKit/Source/core/exported/WebHelperPluginTest.cpp b/third_party/WebKit/Source/core/exported/WebHelperPluginTest.cpp index 4cf1ce5..7292feb 100644 --- a/third_party/WebKit/Source/core/exported/WebHelperPluginTest.cpp +++ b/third_party/WebKit/Source/core/exported/WebHelperPluginTest.cpp
@@ -19,7 +19,7 @@ public: explicit FakePlaceholderWebPlugin(const WebPluginParams& params) : FakeWebPlugin(params) {} - ~FakePlaceholderWebPlugin() override {} + ~FakePlaceholderWebPlugin() override = default; bool IsPlaceholder() override { return true; } }; @@ -27,7 +27,7 @@ class WebHelperPluginFrameClient : public FrameTestHelpers::TestWebFrameClient { public: WebHelperPluginFrameClient() : create_placeholder_(false) {} - ~WebHelperPluginFrameClient() override {} + ~WebHelperPluginFrameClient() override = default; WebPlugin* CreatePlugin(const WebPluginParams& params) override { return create_placeholder_ ? new FakePlaceholderWebPlugin(params)
diff --git a/third_party/WebKit/Source/core/exported/WebInputMethodControllerImpl.cpp b/third_party/WebKit/Source/core/exported/WebInputMethodControllerImpl.cpp index 1b0bf41..7af466723 100644 --- a/third_party/WebKit/Source/core/exported/WebInputMethodControllerImpl.cpp +++ b/third_party/WebKit/Source/core/exported/WebInputMethodControllerImpl.cpp
@@ -29,7 +29,7 @@ WebLocalFrameImpl& web_frame) : web_frame_(&web_frame) {} -WebInputMethodControllerImpl::~WebInputMethodControllerImpl() {} +WebInputMethodControllerImpl::~WebInputMethodControllerImpl() = default; void WebInputMethodControllerImpl::Trace(blink::Visitor* visitor) { visitor->Trace(web_frame_);
diff --git a/third_party/WebKit/Source/core/exported/WebNode.cpp b/third_party/WebKit/Source/core/exported/WebNode.cpp index 87d93488..db464c8 100644 --- a/third_party/WebKit/Source/core/exported/WebNode.cpp +++ b/third_party/WebKit/Source/core/exported/WebNode.cpp
@@ -56,7 +56,7 @@ namespace blink { -WebNode::WebNode() {} +WebNode::WebNode() = default; WebNode::WebNode(const WebNode& n) { Assign(n);
diff --git a/third_party/WebKit/Source/core/exported/WebPluginContainerTest.cpp b/third_party/WebKit/Source/core/exported/WebPluginContainerTest.cpp index 834b22a..123219b2 100644 --- a/third_party/WebKit/Source/core/exported/WebPluginContainerTest.cpp +++ b/third_party/WebKit/Source/core/exported/WebPluginContainerTest.cpp
@@ -140,7 +140,7 @@ void PrintPage(int page_number, WebCanvas*) override; private: - ~TestPlugin() override {} + ~TestPlugin() override = default; TestPluginWebFrameClient* const test_client_; }; @@ -184,7 +184,7 @@ } private: - ~TestPluginWithEditableText() override {} + ~TestPluginWithEditableText() override = default; bool cut_called_; bool paste_called_; @@ -742,7 +742,7 @@ size_t GetCoalescedEventCount() { return coalesced_event_count_; } private: - ~EventTestPlugin() override {} + ~EventTestPlugin() override = default; size_t coalesced_event_count_; WebInputEvent::Type last_event_type_; @@ -1245,7 +1245,7 @@ } private: - ~TopmostPlugin() override {} + ~TopmostPlugin() override = default; }; RegisterMockedURL("plugin_container.html"); @@ -1298,7 +1298,7 @@ } private: - ~CompositedPlugin() override {} + ~CompositedPlugin() override = default; std::unique_ptr<WebLayer> layer_; };
diff --git a/third_party/WebKit/Source/core/exported/WebRemoteFrameImpl.cpp b/third_party/WebKit/Source/core/exported/WebRemoteFrameImpl.cpp index ad2411d9..ae36691 100644 --- a/third_party/WebKit/Source/core/exported/WebRemoteFrameImpl.cpp +++ b/third_party/WebKit/Source/core/exported/WebRemoteFrameImpl.cpp
@@ -99,7 +99,7 @@ return frame; } -WebRemoteFrameImpl::~WebRemoteFrameImpl() {} +WebRemoteFrameImpl::~WebRemoteFrameImpl() = default; void WebRemoteFrameImpl::Trace(blink::Visitor* visitor) { visitor->Trace(frame_client_);
diff --git a/third_party/WebKit/Source/core/exported/WebScopedUserGesture.cpp b/third_party/WebKit/Source/core/exported/WebScopedUserGesture.cpp index 94ec881..ab2a8bcb 100644 --- a/third_party/WebKit/Source/core/exported/WebScopedUserGesture.cpp +++ b/third_party/WebKit/Source/core/exported/WebScopedUserGesture.cpp
@@ -48,6 +48,6 @@ UserGestureToken::kNewGesture); } -WebScopedUserGesture::~WebScopedUserGesture() {} +WebScopedUserGesture::~WebScopedUserGesture() = default; } // namespace blink
diff --git a/third_party/WebKit/Source/core/exported/WebScopedWindowFocusAllowedIndicator.cpp b/third_party/WebKit/Source/core/exported/WebScopedWindowFocusAllowedIndicator.cpp index 6a85ffe..788032b 100644 --- a/third_party/WebKit/Source/core/exported/WebScopedWindowFocusAllowedIndicator.cpp +++ b/third_party/WebKit/Source/core/exported/WebScopedWindowFocusAllowedIndicator.cpp
@@ -43,6 +43,7 @@ private_.reset(new ScopedWindowFocusAllowedIndicator(document)); } -WebScopedWindowFocusAllowedIndicator::~WebScopedWindowFocusAllowedIndicator() {} +WebScopedWindowFocusAllowedIndicator::~WebScopedWindowFocusAllowedIndicator() = + default; } // namespace blink
diff --git a/third_party/WebKit/Source/core/exported/WebSearchableFormDataTest.cpp b/third_party/WebKit/Source/core/exported/WebSearchableFormDataTest.cpp index 4eaf2e6..e66e7fe 100644 --- a/third_party/WebKit/Source/core/exported/WebSearchableFormDataTest.cpp +++ b/third_party/WebKit/Source/core/exported/WebSearchableFormDataTest.cpp
@@ -57,7 +57,7 @@ class WebSearchableFormDataTest : public ::testing::Test { protected: - WebSearchableFormDataTest() {} + WebSearchableFormDataTest() = default; ~WebSearchableFormDataTest() override { Platform::Current()
diff --git a/third_party/WebKit/Source/core/exported/WebSelection.cpp b/third_party/WebKit/Source/core/exported/WebSelection.cpp index a6fcffb..dba58755 100644 --- a/third_party/WebKit/Source/core/exported/WebSelection.cpp +++ b/third_party/WebKit/Source/core/exported/WebSelection.cpp
@@ -44,9 +44,6 @@ start_(GetWebSelectionBound(selection, true)), end_(GetWebSelectionBound(selection, false)) {} -WebSelection::WebSelection(const WebSelection& other) - : selection_type_(other.selection_type_), - start_(other.start_), - end_(other.end_) {} +WebSelection::WebSelection(const WebSelection& other) = default; } // namespace blink
diff --git a/third_party/WebKit/Source/core/exported/WebSettingsImpl.h b/third_party/WebKit/Source/core/exported/WebSettingsImpl.h index dc157ed2..7c517141 100644 --- a/third_party/WebKit/Source/core/exported/WebSettingsImpl.h +++ b/third_party/WebKit/Source/core/exported/WebSettingsImpl.h
@@ -44,7 +44,7 @@ class CORE_EXPORT WebSettingsImpl final : public WebSettings { public: WebSettingsImpl(Settings*, DevToolsEmulator*); - virtual ~WebSettingsImpl() {} + virtual ~WebSettingsImpl() = default; void SetFromStrings(const WebString& name, const WebString& value) override;
diff --git a/third_party/WebKit/Source/core/exported/WebViewTest.cpp b/third_party/WebKit/Source/core/exported/WebViewTest.cpp index 2ccc2e8..c938f632 100644 --- a/third_party/WebKit/Source/core/exported/WebViewTest.cpp +++ b/third_party/WebKit/Source/core/exported/WebViewTest.cpp
@@ -3173,7 +3173,7 @@ text_changes_from_user_gesture_(0), user_gesture_notifications_count_(0) {} - ~MockAutofillClient() override {} + ~MockAutofillClient() override = default; void TextFieldDidChange(const WebFormControlElement&) override { ++text_changes_; @@ -4546,6 +4546,31 @@ frame->SetAutofillClient(nullptr); } +TEST_P(WebViewTest, FieldValueChangeNotifiesAutofillClient) { + RegisterMockedHttpURLLoad("input_field_password.html"); + MockAutofillClient client; + WebViewImpl* web_view = web_view_helper_.InitializeAndLoad( + base_url_ + "input_field_password.html"); + WebLocalFrameImpl* frame = web_view->MainFrameImpl(); + frame->SetAutofillClient(&client); + web_view->SetInitialFocus(false); + Document* document = web_view->MainFrameImpl()->GetFrame()->GetDocument(); + + HTMLInputElement* input_element = + ToHTMLInputElement(document->getElementById("psw")); + ASSERT_TRUE(input_element); + + // Any value change should trigger |WebAutofillClient::TextFieldDidChange|. + input_element->setValue("secret"); + EXPECT_EQ(1, client.TextChanges()); + input_element->setValue("secret"); + EXPECT_EQ(1, client.TextChanges()); + input_element->setValue("new_secret"); + EXPECT_EQ(2, client.TextChanges()); + + frame->SetAutofillClient(nullptr); +} + // Verify that a WebView created with a ScopedPagePauser already on the // stack defers its loads. TEST_P(WebViewTest, CreatedDuringPagePause) {
diff --git a/third_party/WebKit/Source/core/exported/WorkerShadowPage.h b/third_party/WebKit/Source/core/exported/WorkerShadowPage.h index f7a72b2..d4e19da 100644 --- a/third_party/WebKit/Source/core/exported/WorkerShadowPage.h +++ b/third_party/WebKit/Source/core/exported/WorkerShadowPage.h
@@ -35,7 +35,7 @@ public: class CORE_EXPORT Client : public WebDevToolsAgentImpl::Client { public: - virtual ~Client() {} + virtual ~Client() = default; // Called when the shadow page is requested to create an application cache // host.
diff --git a/third_party/WebKit/Source/core/fileapi/Blob.cpp b/third_party/WebKit/Source/core/fileapi/Blob.cpp index e48329f6..37e869a 100644 --- a/third_party/WebKit/Source/core/fileapi/Blob.cpp +++ b/third_party/WebKit/Source/core/fileapi/Blob.cpp
@@ -81,9 +81,9 @@ } // namespace Blob::Blob(scoped_refptr<BlobDataHandle> data_handle) - : blob_data_handle_(std::move(data_handle)), is_closed_(false) {} + : blob_data_handle_(std::move(data_handle)) {} -Blob::~Blob() {} +Blob::~Blob() = default; // static Blob* Blob::Create(
diff --git a/third_party/WebKit/Source/core/fileapi/Blob.h b/third_party/WebKit/Source/core/fileapi/Blob.h index 2e6fd23..6012edd 100644 --- a/third_party/WebKit/Source/core/fileapi/Blob.h +++ b/third_party/WebKit/Source/core/fileapi/Blob.h
@@ -134,10 +134,9 @@ static String NormalizeType(const String& type); private: - Blob(); + Blob() = delete; scoped_refptr<BlobDataHandle> blob_data_handle_; - bool is_closed_; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/fileapi/FileList.cpp b/third_party/WebKit/Source/core/fileapi/FileList.cpp index 999ccdf..ec3f82a 100644 --- a/third_party/WebKit/Source/core/fileapi/FileList.cpp +++ b/third_party/WebKit/Source/core/fileapi/FileList.cpp
@@ -27,7 +27,7 @@ namespace blink { -FileList::FileList() {} +FileList::FileList() = default; File* FileList::item(unsigned index) const { if (index >= files_.size())
diff --git a/third_party/WebKit/Source/core/fileapi/FileReaderLoader.cpp b/third_party/WebKit/Source/core/fileapi/FileReaderLoader.cpp index b7db814..b3392f7 100644 --- a/third_party/WebKit/Source/core/fileapi/FileReaderLoader.cpp +++ b/third_party/WebKit/Source/core/fileapi/FileReaderLoader.cpp
@@ -192,7 +192,7 @@ handle_watcher_(FROM_HERE, mojo::SimpleWatcher::ArmingPolicy::AUTOMATIC), binding_(this) {} - ~FileReaderLoaderMojo() override {} + ~FileReaderLoaderMojo() override = default; void Start(ExecutionContext*, scoped_refptr<BlobDataHandle>) override;
diff --git a/third_party/WebKit/Source/core/fileapi/FileReaderLoaderClient.h b/third_party/WebKit/Source/core/fileapi/FileReaderLoaderClient.h index b587621..29eb5bd 100644 --- a/third_party/WebKit/Source/core/fileapi/FileReaderLoaderClient.h +++ b/third_party/WebKit/Source/core/fileapi/FileReaderLoaderClient.h
@@ -39,7 +39,7 @@ class CORE_EXPORT FileReaderLoaderClient { public: - virtual ~FileReaderLoaderClient() {} + virtual ~FileReaderLoaderClient() = default; virtual void DidStartLoading() = 0; // Clients must implement this method if they are using any ReadType except
diff --git a/third_party/WebKit/Source/core/frame/DOMVisualViewport.cpp b/third_party/WebKit/Source/core/frame/DOMVisualViewport.cpp index 73621d9..22982aef 100644 --- a/third_party/WebKit/Source/core/frame/DOMVisualViewport.cpp +++ b/third_party/WebKit/Source/core/frame/DOMVisualViewport.cpp
@@ -40,7 +40,7 @@ DOMVisualViewport::DOMVisualViewport(LocalDOMWindow* window) : window_(window) {} -DOMVisualViewport::~DOMVisualViewport() {} +DOMVisualViewport::~DOMVisualViewport() = default; void DOMVisualViewport::Trace(blink::Visitor* visitor) { visitor->Trace(window_);
diff --git a/third_party/WebKit/Source/core/frame/DeferredLoadingTest.cpp b/third_party/WebKit/Source/core/frame/DeferredLoadingTest.cpp index 58964f2..3552c91 100644 --- a/third_party/WebKit/Source/core/frame/DeferredLoadingTest.cpp +++ b/third_party/WebKit/Source/core/frame/DeferredLoadingTest.cpp
@@ -19,7 +19,7 @@ class DeferredLoadingTest : public SimTest { protected: - DeferredLoadingTest() {} + DeferredLoadingTest() = default; void SetUp() override { SimTest::SetUp();
diff --git a/third_party/WebKit/Source/core/frame/Deprecation.cpp b/third_party/WebKit/Source/core/frame/Deprecation.cpp index 97c748c..b0bf07bf 100644 --- a/third_party/WebKit/Source/core/frame/Deprecation.cpp +++ b/third_party/WebKit/Source/core/frame/Deprecation.cpp
@@ -616,7 +616,7 @@ css_property_deprecation_bits_.EnsureSize(numCSSPropertyIDs); } -Deprecation::~Deprecation() {} +Deprecation::~Deprecation() = default; void Deprecation::ClearSuppression() { css_property_deprecation_bits_.ClearAll();
diff --git a/third_party/WebKit/Source/core/frame/DeprecationReport.h b/third_party/WebKit/Source/core/frame/DeprecationReport.h index 7d1cacf..9995086 100644 --- a/third_party/WebKit/Source/core/frame/DeprecationReport.h +++ b/third_party/WebKit/Source/core/frame/DeprecationReport.h
@@ -22,7 +22,7 @@ id_(id), anticipatedRemoval_(anticipatedRemoval) {} - ~DeprecationReport() override {} + ~DeprecationReport() override = default; String id() const { return id_; } double anticipatedRemoval(bool& is_null) const {
diff --git a/third_party/WebKit/Source/core/frame/DeviceSingleWindowEventController.cpp b/third_party/WebKit/Source/core/frame/DeviceSingleWindowEventController.cpp index e4b7fa3..758252f74 100644 --- a/third_party/WebKit/Source/core/frame/DeviceSingleWindowEventController.cpp +++ b/third_party/WebKit/Source/core/frame/DeviceSingleWindowEventController.cpp
@@ -18,7 +18,8 @@ document.domWindow()->RegisterEventListenerObserver(this); } -DeviceSingleWindowEventController::~DeviceSingleWindowEventController() {} +DeviceSingleWindowEventController::~DeviceSingleWindowEventController() = + default; void DeviceSingleWindowEventController::DidUpdateData() { DispatchDeviceEvent(LastEvent());
diff --git a/third_party/WebKit/Source/core/frame/EmbeddedContentView.h b/third_party/WebKit/Source/core/frame/EmbeddedContentView.h index fb613298..8cbd0d3 100644 --- a/third_party/WebKit/Source/core/frame/EmbeddedContentView.h +++ b/third_party/WebKit/Source/core/frame/EmbeddedContentView.h
@@ -19,7 +19,7 @@ // LocalFrameView, RemoteFrameView, and WebPluginContainerImpl. class CORE_EXPORT EmbeddedContentView : public GarbageCollectedMixin { public: - virtual ~EmbeddedContentView() {} + virtual ~EmbeddedContentView() = default; virtual bool IsLocalFrameView() const { return false; } virtual bool IsPluginView() const { return false; }
diff --git a/third_party/WebKit/Source/core/frame/FrameClient.h b/third_party/WebKit/Source/core/frame/FrameClient.h index 8e64265..43cb39b 100644 --- a/third_party/WebKit/Source/core/frame/FrameClient.h +++ b/third_party/WebKit/Source/core/frame/FrameClient.h
@@ -32,7 +32,7 @@ virtual void FrameFocused() const = 0; - virtual ~FrameClient() {} + virtual ~FrameClient() = default; virtual void Trace(blink::Visitor* visitor) {} };
diff --git a/third_party/WebKit/Source/core/frame/FrameOwner.h b/third_party/WebKit/Source/core/frame/FrameOwner.h index 51561e5..4fb11e8 100644 --- a/third_party/WebKit/Source/core/frame/FrameOwner.h +++ b/third_party/WebKit/Source/core/frame/FrameOwner.h
@@ -20,7 +20,7 @@ // be kept (e.g., Frame::m_owner.) class CORE_EXPORT FrameOwner : public GarbageCollectedMixin { public: - virtual ~FrameOwner() {} + virtual ~FrameOwner() = default; virtual void Trace(blink::Visitor* visitor) {} virtual bool IsLocal() const = 0;
diff --git a/third_party/WebKit/Source/core/frame/FrameSerializer.cpp b/third_party/WebKit/Source/core/frame/FrameSerializer.cpp index 01350ed..d4d3a6e 100644 --- a/third_party/WebKit/Source/core/frame/FrameSerializer.cpp +++ b/third_party/WebKit/Source/core/frame/FrameSerializer.cpp
@@ -133,7 +133,7 @@ document_(&document), nodes_(nodes) {} -SerializerMarkupAccumulator::~SerializerMarkupAccumulator() {} +SerializerMarkupAccumulator::~SerializerMarkupAccumulator() = default; void SerializerMarkupAccumulator::AppendCustomAttributes( StringBuilder& result,
diff --git a/third_party/WebKit/Source/core/frame/FrameSerializer.h b/third_party/WebKit/Source/core/frame/FrameSerializer.h index 38f6ed83..184d4ce3 100644 --- a/third_party/WebKit/Source/core/frame/FrameSerializer.h +++ b/third_party/WebKit/Source/core/frame/FrameSerializer.h
@@ -70,7 +70,7 @@ class Delegate { public: - virtual ~Delegate() {} + virtual ~Delegate() = default; // Controls whether HTML serialization should skip the given element. virtual bool ShouldIgnoreElement(const Element&) { return false; }
diff --git a/third_party/WebKit/Source/core/frame/FrameTestHelpers.cpp b/third_party/WebKit/Source/core/frame/FrameTestHelpers.cpp index f9084466..1ae8b94 100644 --- a/third_party/WebKit/Source/core/frame/FrameTestHelpers.cpp +++ b/third_party/WebKit/Source/core/frame/FrameTestHelpers.cpp
@@ -427,7 +427,7 @@ --loads_in_progress_; } -TestWebRemoteFrameClient::TestWebRemoteFrameClient() {} +TestWebRemoteFrameClient::TestWebRemoteFrameClient() = default; void TestWebRemoteFrameClient::Bind( WebRemoteFrame* frame,
diff --git a/third_party/WebKit/Source/core/frame/FrameTestHelpers.h b/third_party/WebKit/Source/core/frame/FrameTestHelpers.h index f813356e..001db527 100644 --- a/third_party/WebKit/Source/core/frame/FrameTestHelpers.h +++ b/third_party/WebKit/Source/core/frame/FrameTestHelpers.h
@@ -163,7 +163,7 @@ class TestWebWidgetClient : public WebWidgetClient { public: - ~TestWebWidgetClient() override {} + ~TestWebWidgetClient() override = default; // WebWidgetClient: bool AllowsBrokenNullLayerTreeView() const override { return true; } @@ -177,7 +177,7 @@ public: explicit TestWebViewWidgetClient(TestWebViewClient& test_web_view_client) : test_web_view_client_(test_web_view_client) {} - ~TestWebViewWidgetClient() override {} + ~TestWebViewWidgetClient() override = default; // TestWebViewWidgetClient: WebLayerTreeView* InitializeLayerTreeView() override; @@ -190,7 +190,7 @@ class TestWebViewClient : public WebViewClient { public: - ~TestWebViewClient() override {} + ~TestWebViewClient() override = default; WebLayerTreeViewImplForTesting* GetLayerTreeViewForTesting(); @@ -287,7 +287,7 @@ class TestWebFrameClient : public WebFrameClient { public: TestWebFrameClient(); - ~TestWebFrameClient() override {} + ~TestWebFrameClient() override = default; static bool IsLoading() { return loads_in_progress_ > 0; } @@ -343,7 +343,7 @@ class TestWebRemoteFrameClient : public WebRemoteFrameClient { public: TestWebRemoteFrameClient(); - ~TestWebRemoteFrameClient() override {} + ~TestWebRemoteFrameClient() override = default; WebRemoteFrame* Frame() const { return frame_; } // Pass ownership of the TestWebFrameClient to |self_owned| here if the
diff --git a/third_party/WebKit/Source/core/frame/FrameView.h b/third_party/WebKit/Source/core/frame/FrameView.h index fcd690b7..93f2966 100644 --- a/third_party/WebKit/Source/core/frame/FrameView.h +++ b/third_party/WebKit/Source/core/frame/FrameView.h
@@ -12,7 +12,7 @@ class CORE_EXPORT FrameView : public EmbeddedContentView { public: - virtual ~FrameView() {} + virtual ~FrameView() = default; virtual void UpdateViewportIntersectionsForSubtree( DocumentLifecycle::LifecycleState) = 0; };
diff --git a/third_party/WebKit/Source/core/frame/InterventionReport.h b/third_party/WebKit/Source/core/frame/InterventionReport.h index b7381f24..a089407 100644 --- a/third_party/WebKit/Source/core/frame/InterventionReport.h +++ b/third_party/WebKit/Source/core/frame/InterventionReport.h
@@ -18,7 +18,7 @@ std::unique_ptr<SourceLocation> location) : MessageReport(message, std::move(location)) {} - ~InterventionReport() override {} + ~InterventionReport() override = default; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/frame/LayoutSubtreeRootList.h b/third_party/WebKit/Source/core/frame/LayoutSubtreeRootList.h index d23f268..2a938c4 100644 --- a/third_party/WebKit/Source/core/frame/LayoutSubtreeRootList.h +++ b/third_party/WebKit/Source/core/frame/LayoutSubtreeRootList.h
@@ -29,7 +29,7 @@ DISALLOW_NEW(); public: - LayoutSubtreeRootList() {} + LayoutSubtreeRootList() = default; void ClearAndMarkContainingBlocksForLayout();
diff --git a/third_party/WebKit/Source/core/frame/LocalFrameClient.h b/third_party/WebKit/Source/core/frame/LocalFrameClient.h index c8e2c21..b5d205be 100644 --- a/third_party/WebKit/Source/core/frame/LocalFrameClient.h +++ b/third_party/WebKit/Source/core/frame/LocalFrameClient.h
@@ -104,7 +104,7 @@ class CORE_EXPORT LocalFrameClient : public FrameClient { public: - ~LocalFrameClient() override {} + ~LocalFrameClient() override = default; virtual WebFrame* GetWebFrame() const { return nullptr; }
diff --git a/third_party/WebKit/Source/core/frame/LocalFrameView.cpp b/third_party/WebKit/Source/core/frame/LocalFrameView.cpp index 963f92b3..ccf43d3 100644 --- a/third_party/WebKit/Source/core/frame/LocalFrameView.cpp +++ b/third_party/WebKit/Source/core/frame/LocalFrameView.cpp
@@ -1460,6 +1460,19 @@ return nullptr; } +bool LocalFrameView::GetIntrinsicSizingInfo( + IntrinsicSizingInfo& intrinsic_sizing_info) const { + if (LayoutReplaced* content_layout_object = EmbeddedReplacedContent()) { + content_layout_object->ComputeIntrinsicSizingInfo(intrinsic_sizing_info); + return true; + } + return false; +} + +bool LocalFrameView::HasIntrinsicSizingInfo() const { + return EmbeddedReplacedContent(); +} + void LocalFrameView::UpdateGeometries() { HeapVector<Member<EmbeddedContentView>> views; ForAllChildViewsAndPlugins(
diff --git a/third_party/WebKit/Source/core/frame/LocalFrameView.h b/third_party/WebKit/Source/core/frame/LocalFrameView.h index fa36f16..a9acb85f6 100644 --- a/third_party/WebKit/Source/core/frame/LocalFrameView.h +++ b/third_party/WebKit/Source/core/frame/LocalFrameView.h
@@ -96,6 +96,7 @@ class WebPluginContainerImpl; struct AnnotatedRegionValue; struct CompositedSelection; +struct IntrinsicSizingInfo; typedef unsigned long long DOMTimeStamp; @@ -204,6 +205,9 @@ int InitialViewportWidth() const; int InitialViewportHeight() const; + bool GetIntrinsicSizingInfo(IntrinsicSizingInfo&) const; + bool HasIntrinsicSizingInfo() const; + void UpdateAcceleratedCompositingSettings(); void RecalcOverflowAfterStyleChange(); @@ -399,8 +403,6 @@ bool ShouldSuspendScrollAnimations() const override; void ScrollbarStyleChanged() override; - LayoutReplaced* EmbeddedReplacedContent() const; - static void SetInitialTracksPaintInvalidationsForTesting(bool); // These methods are for testing. @@ -1027,6 +1029,7 @@ const CullRect&) const; LocalFrameView* ParentFrameView() const; + LayoutReplaced* EmbeddedReplacedContent() const; void UpdateScrollOffset(const ScrollOffset&, ScrollType) override;
diff --git a/third_party/WebKit/Source/core/frame/MessageReport.h b/third_party/WebKit/Source/core/frame/MessageReport.h index 1b9a724..eb76dab 100644 --- a/third_party/WebKit/Source/core/frame/MessageReport.h +++ b/third_party/WebKit/Source/core/frame/MessageReport.h
@@ -15,7 +15,7 @@ MessageReport(const String& message, std::unique_ptr<SourceLocation> location) : message_(message), location_(std::move(location)) {} - ~MessageReport() override {} + ~MessageReport() override = default; String message() const { return message_; } long lineNumber() const { return location_->LineNumber(); }
diff --git a/third_party/WebKit/Source/core/frame/NavigatorLanguage.cpp b/third_party/WebKit/Source/core/frame/NavigatorLanguage.cpp index 00a5dfa..7cf3816d 100644 --- a/third_party/WebKit/Source/core/frame/NavigatorLanguage.cpp +++ b/third_party/WebKit/Source/core/frame/NavigatorLanguage.cpp
@@ -8,7 +8,7 @@ namespace blink { -NavigatorLanguage::NavigatorLanguage() {} +NavigatorLanguage::NavigatorLanguage() = default; AtomicString NavigatorLanguage::language() { return AtomicString(languages().front());
diff --git a/third_party/WebKit/Source/core/frame/OpenedFrameTracker.cpp b/third_party/WebKit/Source/core/frame/OpenedFrameTracker.cpp index b110a5c..ce3cb7d 100644 --- a/third_party/WebKit/Source/core/frame/OpenedFrameTracker.cpp +++ b/third_party/WebKit/Source/core/frame/OpenedFrameTracker.cpp
@@ -9,7 +9,7 @@ namespace blink { -OpenedFrameTracker::OpenedFrameTracker() {} +OpenedFrameTracker::OpenedFrameTracker() = default; OpenedFrameTracker::~OpenedFrameTracker() { DCHECK(IsEmpty());
diff --git a/third_party/WebKit/Source/core/frame/PausableScriptExecutor.cpp b/third_party/WebKit/Source/core/frame/PausableScriptExecutor.cpp index acbf3fe3..35b0a82 100644 --- a/third_party/WebKit/Source/core/frame/PausableScriptExecutor.cpp +++ b/third_party/WebKit/Source/core/frame/PausableScriptExecutor.cpp
@@ -181,7 +181,7 @@ CHECK(script_state_->ContextIsValid()); } -PausableScriptExecutor::~PausableScriptExecutor() {} +PausableScriptExecutor::~PausableScriptExecutor() = default; void PausableScriptExecutor::Fired() { ExecuteAndDestroySelf();
diff --git a/third_party/WebKit/Source/core/frame/PausableScriptExecutor.h b/third_party/WebKit/Source/core/frame/PausableScriptExecutor.h index 7fab821..61c8d2e 100644 --- a/third_party/WebKit/Source/core/frame/PausableScriptExecutor.h +++ b/third_party/WebKit/Source/core/frame/PausableScriptExecutor.h
@@ -53,7 +53,7 @@ class Executor : public GarbageCollectedFinalized<Executor> { public: - virtual ~Executor() {} + virtual ~Executor() = default; virtual Vector<v8::Local<v8::Value>> Execute(LocalFrame*) = 0;
diff --git a/third_party/WebKit/Source/core/frame/PausableTimer.cpp b/third_party/WebKit/Source/core/frame/PausableTimer.cpp index 01a8f5a..fbc77c9 100644 --- a/third_party/WebKit/Source/core/frame/PausableTimer.cpp +++ b/third_party/WebKit/Source/core/frame/PausableTimer.cpp
@@ -43,7 +43,7 @@ DCHECK(context); } -PausableTimer::~PausableTimer() {} +PausableTimer::~PausableTimer() = default; void PausableTimer::Stop() { next_fire_interval_ = kNextFireIntervalInvalid;
diff --git a/third_party/WebKit/Source/core/frame/PlatformEventController.cpp b/third_party/WebKit/Source/core/frame/PlatformEventController.cpp index 5f66e9fe..1f1a25a 100644 --- a/third_party/WebKit/Source/core/frame/PlatformEventController.cpp +++ b/third_party/WebKit/Source/core/frame/PlatformEventController.cpp
@@ -16,7 +16,7 @@ is_active_(false), document_(document) {} -PlatformEventController::~PlatformEventController() {} +PlatformEventController::~PlatformEventController() = default; void PlatformEventController::UpdateCallback() { DCHECK(HasLastData());
diff --git a/third_party/WebKit/Source/core/frame/RemoteFrameClient.h b/third_party/WebKit/Source/core/frame/RemoteFrameClient.h index 4bebb1c..97562eba 100644 --- a/third_party/WebKit/Source/core/frame/RemoteFrameClient.h +++ b/third_party/WebKit/Source/core/frame/RemoteFrameClient.h
@@ -20,7 +20,7 @@ class RemoteFrameClient : public FrameClient { public: - ~RemoteFrameClient() override {} + ~RemoteFrameClient() override = default; virtual void Navigate(const ResourceRequest&, bool should_replace_current_entry) = 0;
diff --git a/third_party/WebKit/Source/core/frame/RemoteFrameView.cpp b/third_party/WebKit/Source/core/frame/RemoteFrameView.cpp index d55fbda..2518596 100644 --- a/third_party/WebKit/Source/core/frame/RemoteFrameView.cpp +++ b/third_party/WebKit/Source/core/frame/RemoteFrameView.cpp
@@ -21,7 +21,7 @@ DCHECK(remote_frame); } -RemoteFrameView::~RemoteFrameView() {} +RemoteFrameView::~RemoteFrameView() = default; LocalFrameView* RemoteFrameView::ParentFrameView() const { if (!is_attached_)
diff --git a/third_party/WebKit/Source/core/frame/Report.h b/third_party/WebKit/Source/core/frame/Report.h index 3d6db00c..b66cfc8 100644 --- a/third_party/WebKit/Source/core/frame/Report.h +++ b/third_party/WebKit/Source/core/frame/Report.h
@@ -16,7 +16,7 @@ Report(const String& type, const String& url, ReportBody* body) : type_(type), url_(url), body_(body) {} - virtual ~Report() {} + virtual ~Report() = default; String type() const { return type_; } String url() const { return url_; }
diff --git a/third_party/WebKit/Source/core/frame/ReportBody.h b/third_party/WebKit/Source/core/frame/ReportBody.h index 660ec5ac..746b9fb5 100644 --- a/third_party/WebKit/Source/core/frame/ReportBody.h +++ b/third_party/WebKit/Source/core/frame/ReportBody.h
@@ -13,7 +13,7 @@ DEFINE_WRAPPERTYPEINFO(); public: - virtual ~ReportBody() {} + virtual ~ReportBody() = default; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/frame/RootFrameViewportTest.cpp b/third_party/WebKit/Source/core/frame/RootFrameViewportTest.cpp index d9d2acb2..5a855c9 100644 --- a/third_party/WebKit/Source/core/frame/RootFrameViewportTest.cpp +++ b/third_party/WebKit/Source/core/frame/RootFrameViewportTest.cpp
@@ -187,7 +187,7 @@ class RootFrameViewportTest : public ::testing::Test { public: - RootFrameViewportTest() {} + RootFrameViewportTest() = default; protected: virtual void SetUp() {}
diff --git a/third_party/WebKit/Source/core/frame/SmartClip.h b/third_party/WebKit/Source/core/frame/SmartClip.h index a7bbdbc1..9183d94 100644 --- a/third_party/WebKit/Source/core/frame/SmartClip.h +++ b/third_party/WebKit/Source/core/frame/SmartClip.h
@@ -42,7 +42,7 @@ STACK_ALLOCATED(); public: - SmartClipData() {} + SmartClipData() = default; SmartClipData(const IntRect& rect, const String& string) : rect_in_viewport_(rect), string_(string) {}
diff --git a/third_party/WebKit/Source/core/frame/WebFrameWidgetBase.cpp b/third_party/WebKit/Source/core/frame/WebFrameWidgetBase.cpp index 57146de..61df396 100644 --- a/third_party/WebKit/Source/core/frame/WebFrameWidgetBase.cpp +++ b/third_party/WebKit/Source/core/frame/WebFrameWidgetBase.cpp
@@ -58,7 +58,7 @@ : fling_modifier_(0), fling_source_device_(kWebGestureDeviceUninitialized) {} -WebFrameWidgetBase::~WebFrameWidgetBase() {} +WebFrameWidgetBase::~WebFrameWidgetBase() = default; WebDragOperation WebFrameWidgetBase::DragTargetDragEnter( const WebDragData& web_drag_data,
diff --git a/third_party/WebKit/Source/core/frame/WebFrameWidgetImpl.cpp b/third_party/WebKit/Source/core/frame/WebFrameWidgetImpl.cpp index f5203b67..e8f42df 100644 --- a/third_party/WebKit/Source/core/frame/WebFrameWidgetImpl.cpp +++ b/third_party/WebKit/Source/core/frame/WebFrameWidgetImpl.cpp
@@ -137,7 +137,7 @@ SetBackgroundColorOverride(Color::kTransparent); } -WebFrameWidgetImpl::~WebFrameWidgetImpl() {} +WebFrameWidgetImpl::~WebFrameWidgetImpl() = default; void WebFrameWidgetImpl::Trace(blink::Visitor* visitor) { visitor->Trace(local_root_);
diff --git a/third_party/WebKit/Source/core/frame/WebLocalFrameImpl.cpp b/third_party/WebKit/Source/core/frame/WebLocalFrameImpl.cpp index 1ed5b47..077389b 100644 --- a/third_party/WebKit/Source/core/frame/WebLocalFrameImpl.cpp +++ b/third_party/WebKit/Source/core/frame/WebLocalFrameImpl.cpp
@@ -432,7 +432,7 @@ plugin_(plugin), print_params_(print_params) {} - ~ChromePluginPrintContext() override {} + ~ChromePluginPrintContext() override = default; virtual void Trace(blink::Visitor* visitor) { visitor->Trace(plugin_);
diff --git a/third_party/WebKit/Source/core/frame/WebViewFrameWidget.cpp b/third_party/WebKit/Source/core/frame/WebViewFrameWidget.cpp index 8c613b3..500ba8c 100644 --- a/third_party/WebKit/Source/core/frame/WebViewFrameWidget.cpp +++ b/third_party/WebKit/Source/core/frame/WebViewFrameWidget.cpp
@@ -23,7 +23,7 @@ web_view_->SetCompositorVisibility(true); } -WebViewFrameWidget::~WebViewFrameWidget() {} +WebViewFrameWidget::~WebViewFrameWidget() = default; void WebViewFrameWidget::Close() { // Note: it's important to use the captured main frame pointer here. During
diff --git a/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.cpp b/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.cpp index fbb0abb..f3e2ff0d 100644 --- a/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.cpp +++ b/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.cpp
@@ -233,7 +233,7 @@ execution_context_->DisableEval(disable_eval_error_message_); } -ContentSecurityPolicy::~ContentSecurityPolicy() {} +ContentSecurityPolicy::~ContentSecurityPolicy() = default; void ContentSecurityPolicy::Trace(blink::Visitor* visitor) { visitor->Trace(execution_context_);
diff --git a/third_party/WebKit/Source/core/fullscreen/Fullscreen.cpp b/third_party/WebKit/Source/core/fullscreen/Fullscreen.cpp index e55cd8f..0cb243e 100644 --- a/third_party/WebKit/Source/core/fullscreen/Fullscreen.cpp +++ b/third_party/WebKit/Source/core/fullscreen/Fullscreen.cpp
@@ -410,7 +410,7 @@ document.SetHasFullscreenSupplement(); } -Fullscreen::~Fullscreen() {} +Fullscreen::~Fullscreen() = default; Document* Fullscreen::GetDocument() { return ToDocument(LifecycleContext());
diff --git a/third_party/WebKit/Source/core/geometry/DOMMatrixReadOnly.cpp b/third_party/WebKit/Source/core/geometry/DOMMatrixReadOnly.cpp index 8e9b561..0109d11 100644 --- a/third_party/WebKit/Source/core/geometry/DOMMatrixReadOnly.cpp +++ b/third_party/WebKit/Source/core/geometry/DOMMatrixReadOnly.cpp
@@ -210,7 +210,7 @@ return new DOMMatrixReadOnly(args, 16); } -DOMMatrixReadOnly::~DOMMatrixReadOnly() {} +DOMMatrixReadOnly::~DOMMatrixReadOnly() = default; bool DOMMatrixReadOnly::is2D() const { return is2d_;
diff --git a/third_party/WebKit/Source/core/geometry/DOMMatrixReadOnly.h b/third_party/WebKit/Source/core/geometry/DOMMatrixReadOnly.h index 718dfd4..7343a16 100644 --- a/third_party/WebKit/Source/core/geometry/DOMMatrixReadOnly.h +++ b/third_party/WebKit/Source/core/geometry/DOMMatrixReadOnly.h
@@ -105,7 +105,7 @@ const TransformationMatrix& Matrix() const { return *matrix_; } protected: - DOMMatrixReadOnly() {} + DOMMatrixReadOnly() = default; DOMMatrixReadOnly(const String&, ExceptionState&); DOMMatrixReadOnly(const TransformationMatrix&, bool is2d = true);
diff --git a/third_party/WebKit/Source/core/geometry/DOMRectList.cpp b/third_party/WebKit/Source/core/geometry/DOMRectList.cpp index 13fe3d9..683bc9c 100644 --- a/third_party/WebKit/Source/core/geometry/DOMRectList.cpp +++ b/third_party/WebKit/Source/core/geometry/DOMRectList.cpp
@@ -28,7 +28,7 @@ namespace blink { -DOMRectList::DOMRectList() {} +DOMRectList::DOMRectList() = default; DOMRectList::DOMRectList(const Vector<FloatQuad>& quads) { list_.ReserveInitialCapacity(quads.size());
diff --git a/third_party/WebKit/Source/core/html/CollectionItemsCache.h b/third_party/WebKit/Source/core/html/CollectionItemsCache.h index 28e062cd..ccc2c7b 100644 --- a/third_party/WebKit/Source/core/html/CollectionItemsCache.h +++ b/third_party/WebKit/Source/core/html/CollectionItemsCache.h
@@ -66,7 +66,7 @@ : list_valid_(false) {} template <typename Collection, typename NodeType> -CollectionItemsCache<Collection, NodeType>::~CollectionItemsCache() {} +CollectionItemsCache<Collection, NodeType>::~CollectionItemsCache() = default; template <typename Collection, typename NodeType> void CollectionItemsCache<Collection, NodeType>::Invalidate() {
diff --git a/third_party/WebKit/Source/core/html/HTMLAllCollection.cpp b/third_party/WebKit/Source/core/html/HTMLAllCollection.cpp index a15c75e..92a0eea 100644 --- a/third_party/WebKit/Source/core/html/HTMLAllCollection.cpp +++ b/third_party/WebKit/Source/core/html/HTMLAllCollection.cpp
@@ -40,7 +40,7 @@ HTMLAllCollection::HTMLAllCollection(ContainerNode& node) : HTMLCollection(node, kDocAll, kDoesNotOverrideItemAfter) {} -HTMLAllCollection::~HTMLAllCollection() {} +HTMLAllCollection::~HTMLAllCollection() = default; Element* HTMLAllCollection::NamedItemWithIndex(const AtomicString& name, unsigned index) const {
diff --git a/third_party/WebKit/Source/core/html/HTMLAnchorElement.cpp b/third_party/WebKit/Source/core/html/HTMLAnchorElement.cpp index be57cf0..595640d04 100644 --- a/third_party/WebKit/Source/core/html/HTMLAnchorElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLAnchorElement.cpp
@@ -59,7 +59,7 @@ return new HTMLAnchorElement(aTag, document); } -HTMLAnchorElement::~HTMLAnchorElement() {} +HTMLAnchorElement::~HTMLAnchorElement() = default; bool HTMLAnchorElement::SupportsFocus() const { if (HasEditableStyle(*this))
diff --git a/third_party/WebKit/Source/core/html/HTMLAnchorElement.h b/third_party/WebKit/Source/core/html/HTMLAnchorElement.h index 0d4fc614..9cda790 100644 --- a/third_party/WebKit/Source/core/html/HTMLAnchorElement.h +++ b/third_party/WebKit/Source/core/html/HTMLAnchorElement.h
@@ -92,8 +92,8 @@ void SendPings(const KURL& destination_url) const; - virtual void Trace(blink::Visitor*); - virtual void TraceWrappers(const ScriptWrappableVisitor*) const; + void Trace(blink::Visitor*) override; + void TraceWrappers(const ScriptWrappableVisitor*) const override; protected: HTMLAnchorElement(const QualifiedName&, Document&);
diff --git a/third_party/WebKit/Source/core/html/HTMLAreaElement.cpp b/third_party/WebKit/Source/core/html/HTMLAreaElement.cpp index 9b502411..2553f7f 100644 --- a/third_party/WebKit/Source/core/html/HTMLAreaElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLAreaElement.cpp
@@ -53,7 +53,7 @@ // HTMLAreaElement.h, when including HTMLAreaElement.h, msvc tries to expand // the destructor and causes a compile error because of lack of blink::Path // definition. -HTMLAreaElement::~HTMLAreaElement() {} +HTMLAreaElement::~HTMLAreaElement() = default; DEFINE_NODE_FACTORY(HTMLAreaElement)
diff --git a/third_party/WebKit/Source/core/html/HTMLBodyElement.cpp b/third_party/WebKit/Source/core/html/HTMLBodyElement.cpp index 435dba9..251c434 100644 --- a/third_party/WebKit/Source/core/html/HTMLBodyElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLBodyElement.cpp
@@ -47,7 +47,7 @@ DEFINE_NODE_FACTORY(HTMLBodyElement) -HTMLBodyElement::~HTMLBodyElement() {} +HTMLBodyElement::~HTMLBodyElement() = default; bool HTMLBodyElement::IsPresentationAttribute(const QualifiedName& name) const { if (name == backgroundAttr || name == marginwidthAttr ||
diff --git a/third_party/WebKit/Source/core/html/HTMLCollection.cpp b/third_party/WebKit/Source/core/html/HTMLCollection.cpp index 2fe17034a..78c5541 100644 --- a/third_party/WebKit/Source/core/html/HTMLCollection.cpp +++ b/third_party/WebKit/Source/core/html/HTMLCollection.cpp
@@ -190,7 +190,7 @@ return new HTMLCollection(base, type, kDoesNotOverrideItemAfter); } -HTMLCollection::~HTMLCollection() {} +HTMLCollection::~HTMLCollection() = default; void HTMLCollection::InvalidateCache(Document* old_document) const { collection_items_cache_.Invalidate(); @@ -322,14 +322,13 @@ // although it returns any type of element by id. static inline bool NameShouldBeVisibleInDocumentAll( const HTMLElement& element) { - return element.HasTagName(aTag) || element.HasTagName(appletTag) || - element.HasTagName(buttonTag) || element.HasTagName(embedTag) || - element.HasTagName(formTag) || element.HasTagName(frameTag) || - element.HasTagName(framesetTag) || element.HasTagName(iframeTag) || - element.HasTagName(imgTag) || element.HasTagName(inputTag) || - element.HasTagName(mapTag) || element.HasTagName(metaTag) || - element.HasTagName(objectTag) || element.HasTagName(selectTag) || - element.HasTagName(textareaTag); + return element.HasTagName(aTag) || element.HasTagName(buttonTag) || + element.HasTagName(embedTag) || element.HasTagName(formTag) || + element.HasTagName(frameTag) || element.HasTagName(framesetTag) || + element.HasTagName(iframeTag) || element.HasTagName(imgTag) || + element.HasTagName(inputTag) || element.HasTagName(mapTag) || + element.HasTagName(metaTag) || element.HasTagName(objectTag) || + element.HasTagName(selectTag) || element.HasTagName(textareaTag); } Element* HTMLCollection::TraverseToFirst() const { @@ -523,7 +522,7 @@ result.AppendVector(*name_results); } -HTMLCollection::NamedItemCache::NamedItemCache() {} +HTMLCollection::NamedItemCache::NamedItemCache() = default; void HTMLCollection::Trace(blink::Visitor* visitor) { visitor->Trace(named_item_cache_);
diff --git a/third_party/WebKit/Source/core/html/HTMLContentElement.cpp b/third_party/WebKit/Source/core/html/HTMLContentElement.cpp index 7917a34..5a35469 100644 --- a/third_party/WebKit/Source/core/html/HTMLContentElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLContentElement.cpp
@@ -54,7 +54,7 @@ UseCounter::Count(document, WebFeature::kHTMLContentElement); } -HTMLContentElement::~HTMLContentElement() {} +HTMLContentElement::~HTMLContentElement() = default; void HTMLContentElement::Trace(blink::Visitor* visitor) { visitor->Trace(filter_);
diff --git a/third_party/WebKit/Source/core/html/HTMLContentElement.h b/third_party/WebKit/Source/core/html/HTMLContentElement.h index 3737919..89d506f 100644 --- a/third_party/WebKit/Source/core/html/HTMLContentElement.h +++ b/third_party/WebKit/Source/core/html/HTMLContentElement.h
@@ -41,7 +41,7 @@ class HTMLContentSelectFilter : public GarbageCollectedFinalized<HTMLContentSelectFilter> { public: - virtual ~HTMLContentSelectFilter() {} + virtual ~HTMLContentSelectFilter() = default; virtual bool CanSelectNode(const HeapVector<Member<Node>, 32>& siblings, int nth) const = 0;
diff --git a/third_party/WebKit/Source/core/html/HTMLDetailsElement.cpp b/third_party/WebKit/Source/core/html/HTMLDetailsElement.cpp index 255344f..2390bb0 100644 --- a/third_party/WebKit/Source/core/html/HTMLDetailsElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLDetailsElement.cpp
@@ -44,7 +44,7 @@ class FirstSummarySelectFilter final : public HTMLContentSelectFilter { public: - virtual ~FirstSummarySelectFilter() {} + virtual ~FirstSummarySelectFilter() = default; static FirstSummarySelectFilter* Create() { return new FirstSummarySelectFilter(); @@ -66,12 +66,12 @@ } private: - FirstSummarySelectFilter() {} + FirstSummarySelectFilter() = default; }; HTMLDetailsElement* HTMLDetailsElement::Create(Document& document) { HTMLDetailsElement* details = new HTMLDetailsElement(document); - details->EnsureUserAgentShadowRoot(); + details->EnsureLegacyUserAgentShadowRootV0(); return details; } @@ -80,7 +80,7 @@ UseCounter::Count(document, WebFeature::kDetailsElement); } -HTMLDetailsElement::~HTMLDetailsElement() {} +HTMLDetailsElement::~HTMLDetailsElement() = default; void HTMLDetailsElement::DispatchPendingEvent() { DispatchEvent(Event::Create(EventTypeNames::toggle)); @@ -138,7 +138,7 @@ FROM_HERE, WTF::Bind(&HTMLDetailsElement::DispatchPendingEvent, WrapPersistent(this))); - Element* content = EnsureUserAgentShadowRoot().getElementById( + Element* content = EnsureLegacyUserAgentShadowRootV0().getElementById( ShadowElementNames::DetailsContent()); DCHECK(content); if (is_open_)
diff --git a/third_party/WebKit/Source/core/html/HTMLDocument.cpp b/third_party/WebKit/Source/core/html/HTMLDocument.cpp index 69b1efc..4b486e8 100644 --- a/third_party/WebKit/Source/core/html/HTMLDocument.cpp +++ b/third_party/WebKit/Source/core/html/HTMLDocument.cpp
@@ -72,7 +72,7 @@ } } -HTMLDocument::~HTMLDocument() {} +HTMLDocument::~HTMLDocument() = default; Document* HTMLDocument::CloneDocumentWithoutChildren() { return Create(DocumentInit::Create()
diff --git a/third_party/WebKit/Source/core/html/HTMLElement.cpp b/third_party/WebKit/Source/core/html/HTMLElement.cpp index b8bcc95b..3f4a9c7 100644 --- a/third_party/WebKit/Source/core/html/HTMLElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLElement.cpp
@@ -600,7 +600,7 @@ if (triggers->web_feature != kNoWebFeature) { // Count usage of attributes but ignore attributes in user agent shadow DOM. if (ShadowRoot* shadow = ContainingShadowRoot()) { - if (shadow->GetType() != ShadowRootType::kUserAgent) + if (shadow->IsUserAgent()) UseCounter::Count(GetDocument(), triggers->web_feature); } }
diff --git a/third_party/WebKit/Source/core/html/HTMLEmbedElement.cpp b/third_party/WebKit/Source/core/html/HTMLEmbedElement.cpp index d0c130e0..20cc024 100644 --- a/third_party/WebKit/Source/core/html/HTMLEmbedElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLEmbedElement.cpp
@@ -51,7 +51,7 @@ HTMLEmbedElement* HTMLEmbedElement::Create(Document& document, bool created_by_parser) { HTMLEmbedElement* element = new HTMLEmbedElement(document, created_by_parser); - element->EnsureUserAgentShadowRoot(); + element->EnsureLegacyUserAgentShadowRootV0(); return element; }
diff --git a/third_party/WebKit/Source/core/html/HTMLIFrameElement.cpp b/third_party/WebKit/Source/core/html/HTMLIFrameElement.cpp index 6e4bedd..23fca847 100644 --- a/third_party/WebKit/Source/core/html/HTMLIFrameElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLIFrameElement.cpp
@@ -53,7 +53,7 @@ Supplementable<HTMLIFrameElement>::Trace(visitor); } -HTMLIFrameElement::~HTMLIFrameElement() {} +HTMLIFrameElement::~HTMLIFrameElement() = default; void HTMLIFrameElement::SetCollapsed(bool collapse) { if (collapsed_by_client_ == collapse)
diff --git a/third_party/WebKit/Source/core/html/HTMLImageElement.cpp b/third_party/WebKit/Source/core/html/HTMLImageElement.cpp index 7c3179b..65536b3 100644 --- a/third_party/WebKit/Source/core/html/HTMLImageElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLImageElement.cpp
@@ -111,7 +111,7 @@ return new HTMLImageElement(document, created_by_parser); } -HTMLImageElement::~HTMLImageElement() {} +HTMLImageElement::~HTMLImageElement() = default; void HTMLImageElement::Trace(blink::Visitor* visitor) { visitor->Trace(image_loader_); @@ -788,7 +788,7 @@ } else { if (layout_disposition_ == LayoutDisposition::kFallbackContent) { EventDispatchForbiddenScope::AllowUserAgentEvents allow_events; - EnsureUserAgentShadowRoot(); + EnsureLegacyUserAgentShadowRootV0(); } LazyReattachIfAttached(); }
diff --git a/third_party/WebKit/Source/core/html/HTMLImageFallbackHelper.cpp b/third_party/WebKit/Source/core/html/HTMLImageFallbackHelper.cpp index 4dc07fc..8d048cbf 100644 --- a/third_party/WebKit/Source/core/html/HTMLImageFallbackHelper.cpp +++ b/third_party/WebKit/Source/core/html/HTMLImageFallbackHelper.cpp
@@ -53,7 +53,7 @@ } void HTMLImageFallbackHelper::CreateAltTextShadowTree(Element& element) { - ShadowRoot& root = element.EnsureUserAgentShadowRoot(); + ShadowRoot& root = element.EnsureLegacyUserAgentShadowRootV0(); HTMLSpanElement* container = HTMLSpanElement::Create(element.GetDocument()); root.AppendChild(container);
diff --git a/third_party/WebKit/Source/core/html/HTMLImageLoader.cpp b/third_party/WebKit/Source/core/html/HTMLImageLoader.cpp index c8bdccc5..f3598c68 100644 --- a/third_party/WebKit/Source/core/html/HTMLImageLoader.cpp +++ b/third_party/WebKit/Source/core/html/HTMLImageLoader.cpp
@@ -37,7 +37,7 @@ HTMLImageLoader::HTMLImageLoader(Element* element) : ImageLoader(element) {} -HTMLImageLoader::~HTMLImageLoader() {} +HTMLImageLoader::~HTMLImageLoader() = default; void HTMLImageLoader::DispatchLoadEvent() { RESOURCE_LOADING_DVLOG(1) << "HTMLImageLoader::dispatchLoadEvent " << this;
diff --git a/third_party/WebKit/Source/core/html/HTMLLinkElement.cpp b/third_party/WebKit/Source/core/html/HTMLLinkElement.cpp index cc06f328..0bf4860 100644 --- a/third_party/WebKit/Source/core/html/HTMLLinkElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLLinkElement.cpp
@@ -62,7 +62,7 @@ return new HTMLLinkElement(document, created_by_parser); } -HTMLLinkElement::~HTMLLinkElement() {} +HTMLLinkElement::~HTMLLinkElement() = default; void HTMLLinkElement::ParseAttribute( const AttributeModificationParams& params) {
diff --git a/third_party/WebKit/Source/core/html/HTMLMapElement.cpp b/third_party/WebKit/Source/core/html/HTMLMapElement.cpp index fc487fc..435225b 100644 --- a/third_party/WebKit/Source/core/html/HTMLMapElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLMapElement.cpp
@@ -42,7 +42,7 @@ DEFINE_NODE_FACTORY(HTMLMapElement) -HTMLMapElement::~HTMLMapElement() {} +HTMLMapElement::~HTMLMapElement() = default; HTMLAreaElement* HTMLMapElement::AreaForPoint( const LayoutPoint& location,
diff --git a/third_party/WebKit/Source/core/html/HTMLMarqueeElement.cpp b/third_party/WebKit/Source/core/html/HTMLMarqueeElement.cpp index ce9289c..d6368496 100644 --- a/third_party/WebKit/Source/core/html/HTMLMarqueeElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLMarqueeElement.cpp
@@ -56,7 +56,7 @@ HTMLMarqueeElement* HTMLMarqueeElement::Create(Document& document) { HTMLMarqueeElement* marquee_element = new HTMLMarqueeElement(document); - marquee_element->EnsureUserAgentShadowRoot(); + marquee_element->EnsureLegacyUserAgentShadowRootV0(); return marquee_element; }
diff --git a/third_party/WebKit/Source/core/html/HTMLMeterElement.cpp b/third_party/WebKit/Source/core/html/HTMLMeterElement.cpp index ac2ee45..4c3a908 100644 --- a/third_party/WebKit/Source/core/html/HTMLMeterElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLMeterElement.cpp
@@ -40,11 +40,11 @@ UseCounter::Count(document, WebFeature::kMeterElement); } -HTMLMeterElement::~HTMLMeterElement() {} +HTMLMeterElement::~HTMLMeterElement() = default; HTMLMeterElement* HTMLMeterElement::Create(Document& document) { HTMLMeterElement* meter = new HTMLMeterElement(document); - meter->EnsureUserAgentShadowRoot(); + meter->EnsureLegacyUserAgentShadowRootV0(); return meter; }
diff --git a/third_party/WebKit/Source/core/html/HTMLObjectElement.cpp b/third_party/WebKit/Source/core/html/HTMLObjectElement.cpp index bf82ab03..dd785fc 100644 --- a/third_party/WebKit/Source/core/html/HTMLObjectElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLObjectElement.cpp
@@ -56,13 +56,13 @@ kShouldNotPreferPlugInsForImages), use_fallback_content_(false) {} -inline HTMLObjectElement::~HTMLObjectElement() {} +inline HTMLObjectElement::~HTMLObjectElement() = default; HTMLObjectElement* HTMLObjectElement::Create(Document& document, bool created_by_parser) { HTMLObjectElement* element = new HTMLObjectElement(document, created_by_parser); - element->EnsureUserAgentShadowRoot(); + element->EnsureLegacyUserAgentShadowRootV0(); return element; }
diff --git a/third_party/WebKit/Source/core/html/HTMLProgressElement.cpp b/third_party/WebKit/Source/core/html/HTMLProgressElement.cpp index 5272290..89510e56 100644 --- a/third_party/WebKit/Source/core/html/HTMLProgressElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLProgressElement.cpp
@@ -41,11 +41,11 @@ UseCounter::Count(document, WebFeature::kProgressElement); } -HTMLProgressElement::~HTMLProgressElement() {} +HTMLProgressElement::~HTMLProgressElement() = default; HTMLProgressElement* HTMLProgressElement::Create(Document& document) { HTMLProgressElement* progress = new HTMLProgressElement(document); - progress->EnsureUserAgentShadowRoot(); + progress->EnsureLegacyUserAgentShadowRootV0(); return progress; }
diff --git a/third_party/WebKit/Source/core/html/HTMLShadowElement.cpp b/third_party/WebKit/Source/core/html/HTMLShadowElement.cpp index 1fd0efe..56e14d53 100644 --- a/third_party/WebKit/Source/core/html/HTMLShadowElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLShadowElement.cpp
@@ -47,7 +47,7 @@ DEFINE_NODE_FACTORY(HTMLShadowElement) -HTMLShadowElement::~HTMLShadowElement() {} +HTMLShadowElement::~HTMLShadowElement() = default; ShadowRoot* HTMLShadowElement::OlderShadowRoot() { ShadowRoot* containing_root = ContainingShadowRoot();
diff --git a/third_party/WebKit/Source/core/html/HTMLSlotElementTest.cpp b/third_party/WebKit/Source/core/html/HTMLSlotElementTest.cpp index c07969f..0be893e 100644 --- a/third_party/WebKit/Source/core/html/HTMLSlotElementTest.cpp +++ b/third_party/WebKit/Source/core/html/HTMLSlotElementTest.cpp
@@ -18,7 +18,7 @@ class HTMLSlotElementTest : public ::testing::Test { protected: - HTMLSlotElementTest() {} + HTMLSlotElementTest() = default; Seq LongestCommonSubsequence(const Seq& seq1, const Seq& seq2); std::array<std::array<size_t, kTableSize>, kTableSize> lcs_table_; std::array<std::array<Backtrack, kTableSize>, kTableSize> backtrack_table_;
diff --git a/third_party/WebKit/Source/core/html/HTMLSourceElement.cpp b/third_party/WebKit/Source/core/html/HTMLSourceElement.cpp index fa324ea..58aca115 100644 --- a/third_party/WebKit/Source/core/html/HTMLSourceElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLSourceElement.cpp
@@ -66,7 +66,7 @@ DEFINE_NODE_FACTORY(HTMLSourceElement) -HTMLSourceElement::~HTMLSourceElement() {} +HTMLSourceElement::~HTMLSourceElement() = default; void HTMLSourceElement::CreateMediaQueryList(const AtomicString& media) { RemoveMediaQueryListListener();
diff --git a/third_party/WebKit/Source/core/html/HTMLStyleElement.cpp b/third_party/WebKit/Source/core/html/HTMLStyleElement.cpp index 19001087..c6ef4ec 100644 --- a/third_party/WebKit/Source/core/html/HTMLStyleElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLStyleElement.cpp
@@ -42,7 +42,7 @@ fired_load_(false), loaded_sheet_(false) {} -HTMLStyleElement::~HTMLStyleElement() {} +HTMLStyleElement::~HTMLStyleElement() = default; HTMLStyleElement* HTMLStyleElement::Create(Document& document, bool created_by_parser) {
diff --git a/third_party/WebKit/Source/core/html/HTMLSummaryElement.cpp b/third_party/WebKit/Source/core/html/HTMLSummaryElement.cpp index a87aa60..12abc11 100644 --- a/third_party/WebKit/Source/core/html/HTMLSummaryElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLSummaryElement.cpp
@@ -37,7 +37,7 @@ HTMLSummaryElement* HTMLSummaryElement::Create(Document& document) { HTMLSummaryElement* summary = new HTMLSummaryElement(document); - summary->EnsureUserAgentShadowRoot(); + summary->EnsureLegacyUserAgentShadowRootV0(); return summary; } @@ -70,7 +70,7 @@ } Element* HTMLSummaryElement::MarkerControl() { - return EnsureUserAgentShadowRoot().getElementById( + return EnsureLegacyUserAgentShadowRootV0().getElementById( ShadowElementNames::DetailsMarker()); }
diff --git a/third_party/WebKit/Source/core/html/HTMLTableElement.cpp b/third_party/WebKit/Source/core/html/HTMLTableElement.cpp index 1c0264bf2..43636f6 100644 --- a/third_party/WebKit/Source/core/html/HTMLTableElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLTableElement.cpp
@@ -65,7 +65,7 @@ // HTMLTableElement.h, when including HTMLTableElement, msvc tries to expand // the destructor and causes a compile error because of lack of // CSSPropertyValueSet definition. -HTMLTableElement::~HTMLTableElement() {} +HTMLTableElement::~HTMLTableElement() = default; DEFINE_NODE_FACTORY(HTMLTableElement)
diff --git a/third_party/WebKit/Source/core/html/HTMLTemplateElement.cpp b/third_party/WebKit/Source/core/html/HTMLTemplateElement.cpp index 2d26f07..81de7f7 100644 --- a/third_party/WebKit/Source/core/html/HTMLTemplateElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLTemplateElement.cpp
@@ -43,7 +43,7 @@ DEFINE_NODE_FACTORY(HTMLTemplateElement) -HTMLTemplateElement::~HTMLTemplateElement() {} +HTMLTemplateElement::~HTMLTemplateElement() = default; DocumentFragment* HTMLTemplateElement::content() const { if (!content_)
diff --git a/third_party/WebKit/Source/core/html/HTMLTrackElement.cpp b/third_party/WebKit/Source/core/html/HTMLTrackElement.cpp index ec07862..387f065 100644 --- a/third_party/WebKit/Source/core/html/HTMLTrackElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLTrackElement.cpp
@@ -58,7 +58,7 @@ DEFINE_NODE_FACTORY(HTMLTrackElement) -HTMLTrackElement::~HTMLTrackElement() {} +HTMLTrackElement::~HTMLTrackElement() = default; Node::InsertionNotificationRequest HTMLTrackElement::InsertedInto( ContainerNode* insertion_point) {
diff --git a/third_party/WebKit/Source/core/html/HTMLUnknownElement.idl b/third_party/WebKit/Source/core/html/HTMLUnknownElement.idl index 21b616d..3845598 100644 --- a/third_party/WebKit/Source/core/html/HTMLUnknownElement.idl +++ b/third_party/WebKit/Source/core/html/HTMLUnknownElement.idl
@@ -29,5 +29,7 @@ // https://html.spec.whatwg.org/#elements-in-the-dom -interface HTMLUnknownElement : HTMLElement { +[ + Exposed=Window +] interface HTMLUnknownElement : HTMLElement { };
diff --git a/third_party/WebKit/Source/core/html/ImageDocument.cpp b/third_party/WebKit/Source/core/html/ImageDocument.cpp index fcabb9f0..4f3b7016 100644 --- a/third_party/WebKit/Source/core/html/ImageDocument.cpp +++ b/third_party/WebKit/Source/core/html/ImageDocument.cpp
@@ -250,7 +250,7 @@ HTMLContentElement* content = HTMLContentElement::Create(*this); div_element_->AppendChild(content); - ShadowRoot& shadow_root = body->EnsureUserAgentShadowRoot(); + ShadowRoot& shadow_root = body->EnsureLegacyUserAgentShadowRootV0(); shadow_root.AppendChild(div_element_); } else { body->setAttribute(styleAttr, "margin: 0px;");
diff --git a/third_party/WebKit/Source/core/html/ImageDocumentTest.cpp b/third_party/WebKit/Source/core/html/ImageDocumentTest.cpp index bcf496d..735f91c 100644 --- a/third_party/WebKit/Source/core/html/ImageDocumentTest.cpp +++ b/third_party/WebKit/Source/core/html/ImageDocumentTest.cpp
@@ -246,8 +246,8 @@ class ImageDocumentViewportTest : public SimTest { public: - ImageDocumentViewportTest() {} - ~ImageDocumentViewportTest() override {} + ImageDocumentViewportTest() = default; + ~ImageDocumentViewportTest() override = default; void SetUp() override { SimTest::SetUp();
diff --git a/third_party/WebKit/Source/core/html/LinkManifest.cpp b/third_party/WebKit/Source/core/html/LinkManifest.cpp index 1d59adc5..72ec626 100644 --- a/third_party/WebKit/Source/core/html/LinkManifest.cpp +++ b/third_party/WebKit/Source/core/html/LinkManifest.cpp
@@ -17,7 +17,7 @@ LinkManifest::LinkManifest(HTMLLinkElement* owner) : LinkResource(owner) {} -LinkManifest::~LinkManifest() {} +LinkManifest::~LinkManifest() = default; void LinkManifest::Process() { if (!owner_ || !owner_->GetDocument().GetFrame())
diff --git a/third_party/WebKit/Source/core/html/LinkResource.cpp b/third_party/WebKit/Source/core/html/LinkResource.cpp index 80cd099..e9f757b0 100644 --- a/third_party/WebKit/Source/core/html/LinkResource.cpp +++ b/third_party/WebKit/Source/core/html/LinkResource.cpp
@@ -40,7 +40,7 @@ DCHECK(owner_); } -LinkResource::~LinkResource() {} +LinkResource::~LinkResource() = default; bool LinkResource::ShouldLoadResource() const { return GetDocument().GetFrame() || GetDocument().ImportsController();
diff --git a/third_party/WebKit/Source/core/html/LinkStyle.cpp b/third_party/WebKit/Source/core/html/LinkStyle.cpp index 527403a..052b24ea 100644 --- a/third_party/WebKit/Source/core/html/LinkStyle.cpp +++ b/third_party/WebKit/Source/core/html/LinkStyle.cpp
@@ -49,7 +49,7 @@ loaded_sheet_(false), fetch_following_cors_(false) {} -LinkStyle::~LinkStyle() {} +LinkStyle::~LinkStyle() = default; enum StyleSheetCacheStatus { kStyleSheetNewEntry,
diff --git a/third_party/WebKit/Source/core/html/MediaElementFillingViewportTest.cpp b/third_party/WebKit/Source/core/html/MediaElementFillingViewportTest.cpp index 506e0c3..a6bdfc6 100644 --- a/third_party/WebKit/Source/core/html/MediaElementFillingViewportTest.cpp +++ b/third_party/WebKit/Source/core/html/MediaElementFillingViewportTest.cpp
@@ -15,7 +15,7 @@ class MediaElementFillingViewportTest : public SimTest { protected: - MediaElementFillingViewportTest() {} + MediaElementFillingViewportTest() = default; void SetUp() override { SimTest::SetUp();
diff --git a/third_party/WebKit/Source/core/html/RelList.cpp b/third_party/WebKit/Source/core/html/RelList.cpp index be265f01..1a3a299b 100644 --- a/third_party/WebKit/Source/core/html/RelList.cpp +++ b/third_party/WebKit/Source/core/html/RelList.cpp
@@ -14,8 +14,6 @@ namespace blink { -using namespace HTMLNames; - RelList::RelList(Element* element) : DOMTokenList(*element, HTMLNames::relAttr) {} @@ -43,14 +41,14 @@ bool RelList::ValidateTokenValue(const AtomicString& token_value, ExceptionState&) const { // https://html.spec.whatwg.org/multipage/links.html#linkTypes - if (GetElement().HasTagName(linkTag)) { + if (GetElement().HasTagName(HTMLNames::linkTag)) { if (SupportedTokensLink().Contains(token_value) || (RuntimeEnabledFeatures::ModulePreloadEnabled() && token_value == "modulepreload")) { return true; } - } else if ((GetElement().HasTagName(aTag) || - GetElement().HasTagName(areaTag)) && + } else if ((GetElement().HasTagName(HTMLNames::aTag) || + GetElement().HasTagName(HTMLNames::areaTag)) && SupportedTokensAnchorAndArea().Contains(token_value)) { return true; }
diff --git a/third_party/WebKit/Source/core/html/TextMetrics.h b/third_party/WebKit/Source/core/html/TextMetrics.h index 577a544..ae894e9 100644 --- a/third_party/WebKit/Source/core/html/TextMetrics.h +++ b/third_party/WebKit/Source/core/html/TextMetrics.h
@@ -73,7 +73,7 @@ const TextBaseline&, const TextAlign&, const String&); - TextMetrics() {} + TextMetrics() = default; // x-direction double width_ = 0.0;
diff --git a/third_party/WebKit/Source/core/html/TimeRanges.h b/third_party/WebKit/Source/core/html/TimeRanges.h index 6e522ff..19753af 100644 --- a/third_party/WebKit/Source/core/html/TimeRanges.h +++ b/third_party/WebKit/Source/core/html/TimeRanges.h
@@ -48,7 +48,7 @@ DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); public: - Range() {} + Range() = default; Range(double start, double end) { start_ = start; end_ = end; @@ -106,7 +106,7 @@ double current_playback_position) const; private: - TimeRanges() {} + TimeRanges() = default; TimeRanges(double start, double end);
diff --git a/third_party/WebKit/Source/core/html/URLRegistry.h b/third_party/WebKit/Source/core/html/URLRegistry.h index 83ffb72d..dd00c59 100644 --- a/third_party/WebKit/Source/core/html/URLRegistry.h +++ b/third_party/WebKit/Source/core/html/URLRegistry.h
@@ -43,7 +43,7 @@ class CORE_EXPORT URLRegistrable { public: - virtual ~URLRegistrable() {} + virtual ~URLRegistrable() = default; virtual URLRegistry& Registry() const = 0; virtual mojom::blink::BlobPtr AsMojoBlob() { return nullptr; } }; @@ -52,7 +52,7 @@ USING_FAST_MALLOC(URLRegistry); public: - virtual ~URLRegistry() {} + virtual ~URLRegistry() = default; virtual void RegisterURL(SecurityOrigin*, const KURL&, URLRegistrable*) = 0; virtual void UnregisterURL(const KURL&) = 0;
diff --git a/third_party/WebKit/Source/core/html/VoidCallback.h b/third_party/WebKit/Source/core/html/VoidCallback.h index 26898b2..b60a465b 100644 --- a/third_party/WebKit/Source/core/html/VoidCallback.h +++ b/third_party/WebKit/Source/core/html/VoidCallback.h
@@ -32,7 +32,7 @@ class VoidCallback : public GarbageCollectedFinalized<VoidCallback> { public: - virtual ~VoidCallback() {} + virtual ~VoidCallback() = default; virtual void Trace(blink::Visitor* visitor) {} virtual void handleEvent() = 0; };
diff --git a/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp b/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp index 123110d92..44d1fd7 100644 --- a/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp +++ b/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp
@@ -207,7 +207,7 @@ } } -CanvasAsyncBlobCreator::~CanvasAsyncBlobCreator() {} +CanvasAsyncBlobCreator::~CanvasAsyncBlobCreator() = default; void CanvasAsyncBlobCreator::Dispose() { // Eagerly let go of references to prevent retention of these
diff --git a/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreatorTest.cpp b/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreatorTest.cpp index b74d920..b9c3948 100644 --- a/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreatorTest.cpp +++ b/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreatorTest.cpp
@@ -127,8 +127,7 @@ Persistent<MockCanvasAsyncBlobCreator> async_blob_creator_; }; -CanvasAsyncBlobCreatorTest::CanvasAsyncBlobCreatorTest() { -} +CanvasAsyncBlobCreatorTest::CanvasAsyncBlobCreatorTest() = default; scoped_refptr<StaticBitmapImage> CreateTransparentImage(int width, int height) { sk_sp<SkSurface> surface = SkSurface::MakeRasterN32Premul(width, height);
diff --git a/third_party/WebKit/Source/core/html/canvas/CanvasDrawListener.cpp b/third_party/WebKit/Source/core/html/canvas/CanvasDrawListener.cpp index ba315f3..b9498ab 100644 --- a/third_party/WebKit/Source/core/html/canvas/CanvasDrawListener.cpp +++ b/third_party/WebKit/Source/core/html/canvas/CanvasDrawListener.cpp
@@ -9,7 +9,7 @@ namespace blink { -CanvasDrawListener::~CanvasDrawListener() {} +CanvasDrawListener::~CanvasDrawListener() = default; void CanvasDrawListener::SendNewFrame( sk_sp<SkImage> image,
diff --git a/third_party/WebKit/Source/core/html/canvas/CanvasFontCacheTest.cpp b/third_party/WebKit/Source/core/html/canvas/CanvasFontCacheTest.cpp index b4803f8..82e58e77 100644 --- a/third_party/WebKit/Source/core/html/canvas/CanvasFontCacheTest.cpp +++ b/third_party/WebKit/Source/core/html/canvas/CanvasFontCacheTest.cpp
@@ -32,7 +32,7 @@ Persistent<HTMLCanvasElement> canvas_element_; }; -CanvasFontCacheTest::CanvasFontCacheTest() {} +CanvasFontCacheTest::CanvasFontCacheTest() = default; CanvasRenderingContext* CanvasFontCacheTest::Context2d() const { // If the following check fails, perhaps you forgot to call createContext
diff --git a/third_party/WebKit/Source/core/html/canvas/CanvasImageSource.h b/third_party/WebKit/Source/core/html/canvas/CanvasImageSource.h index a161794..ecf30c9d 100644 --- a/third_party/WebKit/Source/core/html/canvas/CanvasImageSource.h +++ b/third_party/WebKit/Source/core/html/canvas/CanvasImageSource.h
@@ -84,7 +84,7 @@ virtual bool IsAccelerated() const = 0; protected: - virtual ~CanvasImageSource() {} + virtual ~CanvasImageSource() = default; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContext.h b/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContext.h index 411d054..88c40c1b 100644 --- a/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContext.h +++ b/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContext.h
@@ -61,7 +61,7 @@ USING_PRE_FINALIZER(CanvasRenderingContext, Dispose); public: - virtual ~CanvasRenderingContext() {} + virtual ~CanvasRenderingContext() = default; // A Canvas can either be "2D" or "webgl" but never both. If you request a 2D // canvas and the existing context is already 2D, just return that. If the
diff --git a/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContextFactory.h b/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContextFactory.h index f0e222e..64517d1 100644 --- a/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContextFactory.h +++ b/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContextFactory.h
@@ -23,7 +23,7 @@ public: CanvasRenderingContextFactory() = default; - virtual ~CanvasRenderingContextFactory() {} + virtual ~CanvasRenderingContextFactory() = default; virtual CanvasRenderingContext* Create( CanvasRenderingContextHost*,
diff --git a/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContextHost.cpp b/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContextHost.cpp index 2a987fd..50c62c84 100644 --- a/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContextHost.cpp +++ b/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContextHost.cpp
@@ -11,7 +11,7 @@ namespace blink { -CanvasRenderingContextHost::CanvasRenderingContextHost() {} +CanvasRenderingContextHost::CanvasRenderingContextHost() = default; ScriptPromise CanvasRenderingContextHost::Commit( scoped_refptr<StaticBitmapImage> bitmap_image,
diff --git a/third_party/WebKit/Source/core/html/custom/CustomElementDefinition.cpp b/third_party/WebKit/Source/core/html/custom/CustomElementDefinition.cpp index 51aecb8..408e34f 100644 --- a/third_party/WebKit/Source/core/html/custom/CustomElementDefinition.cpp +++ b/third_party/WebKit/Source/core/html/custom/CustomElementDefinition.cpp
@@ -31,7 +31,7 @@ has_style_attribute_changed_callback_( observed_attributes.Contains(HTMLNames::styleAttr.LocalName())) {} -CustomElementDefinition::~CustomElementDefinition() {} +CustomElementDefinition::~CustomElementDefinition() = default; void CustomElementDefinition::Trace(blink::Visitor* visitor) { visitor->Trace(construction_stack_);
diff --git a/third_party/WebKit/Source/core/html/custom/CustomElementDefinitionBuilder.h b/third_party/WebKit/Source/core/html/custom/CustomElementDefinitionBuilder.h index 08783622..a1e3d88b 100644 --- a/third_party/WebKit/Source/core/html/custom/CustomElementDefinitionBuilder.h +++ b/third_party/WebKit/Source/core/html/custom/CustomElementDefinitionBuilder.h
@@ -22,7 +22,7 @@ STACK_ALLOCATED(); public: - CustomElementDefinitionBuilder() {} + CustomElementDefinitionBuilder() = default; // This API necessarily sounds JavaScript specific; this implements // some steps of the CustomElementRegistry.define process, which
diff --git a/third_party/WebKit/Source/core/html/custom/CustomElementDescriptor.h b/third_party/WebKit/Source/core/html/custom/CustomElementDescriptor.h index c5e37283..be47d9b 100644 --- a/third_party/WebKit/Source/core/html/custom/CustomElementDescriptor.h +++ b/third_party/WebKit/Source/core/html/custom/CustomElementDescriptor.h
@@ -33,7 +33,7 @@ DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); public: - CustomElementDescriptor() {} + CustomElementDescriptor() = default; CustomElementDescriptor(const AtomicString& name, const AtomicString& local_name)
diff --git a/third_party/WebKit/Source/core/html/custom/CustomElementReactionQueue.cpp b/third_party/WebKit/Source/core/html/custom/CustomElementReactionQueue.cpp index b4e8a39..4cf2c95 100644 --- a/third_party/WebKit/Source/core/html/custom/CustomElementReactionQueue.cpp +++ b/third_party/WebKit/Source/core/html/custom/CustomElementReactionQueue.cpp
@@ -12,7 +12,7 @@ CustomElementReactionQueue::CustomElementReactionQueue() : index_(0u) {} -CustomElementReactionQueue::~CustomElementReactionQueue() {} +CustomElementReactionQueue::~CustomElementReactionQueue() = default; void CustomElementReactionQueue::Trace(blink::Visitor* visitor) { visitor->Trace(reactions_);
diff --git a/third_party/WebKit/Source/core/html/custom/CustomElementReactionStack.cpp b/third_party/WebKit/Source/core/html/custom/CustomElementReactionStack.cpp index 3157f89..f5c89ea3 100644 --- a/third_party/WebKit/Source/core/html/custom/CustomElementReactionStack.cpp +++ b/third_party/WebKit/Source/core/html/custom/CustomElementReactionStack.cpp
@@ -25,7 +25,7 @@ // TODO(dominicc): Consider using linked heap structures, avoiding // finalizers, to make short-lived entries fast. -CustomElementReactionStack::CustomElementReactionStack() {} +CustomElementReactionStack::CustomElementReactionStack() = default; void CustomElementReactionStack::Trace(blink::Visitor* visitor) { visitor->Trace(map_);
diff --git a/third_party/WebKit/Source/core/html/custom/CustomElementRegistryTest.cpp b/third_party/WebKit/Source/core/html/custom/CustomElementRegistryTest.cpp index 751afa25..e7420166 100644 --- a/third_party/WebKit/Source/core/html/custom/CustomElementRegistryTest.cpp +++ b/third_party/WebKit/Source/core/html/custom/CustomElementRegistryTest.cpp
@@ -255,7 +255,7 @@ STACK_ALLOCATED(); public: - LogUpgradeBuilder() {} + LogUpgradeBuilder() = default; CustomElementDefinition* Build(const CustomElementDescriptor& descriptor, CustomElementDefinition::Id) override {
diff --git a/third_party/WebKit/Source/core/html/custom/CustomElementTestHelpers.h b/third_party/WebKit/Source/core/html/custom/CustomElementTestHelpers.h index 33433351..cb6c1d6 100644 --- a/third_party/WebKit/Source/core/html/custom/CustomElementTestHelpers.h +++ b/third_party/WebKit/Source/core/html/custom/CustomElementTestHelpers.h
@@ -30,7 +30,7 @@ STACK_ALLOCATED(); public: - TestCustomElementDefinitionBuilder() {} + TestCustomElementDefinitionBuilder() = default; bool CheckConstructorIntrinsics() override { return true; } bool CheckConstructorNotRegistered() override { return true; } bool CheckPrototype() override { return true; }
diff --git a/third_party/WebKit/Source/core/html/custom/V0CustomElementAsyncImportMicrotaskQueue.h b/third_party/WebKit/Source/core/html/custom/V0CustomElementAsyncImportMicrotaskQueue.h index 36da7bc..0eff1a8 100644 --- a/third_party/WebKit/Source/core/html/custom/V0CustomElementAsyncImportMicrotaskQueue.h +++ b/third_party/WebKit/Source/core/html/custom/V0CustomElementAsyncImportMicrotaskQueue.h
@@ -45,7 +45,7 @@ void Enqueue(V0CustomElementMicrotaskStep*); private: - V0CustomElementAsyncImportMicrotaskQueue() {} + V0CustomElementAsyncImportMicrotaskQueue() = default; void DoDispatch() override; };
diff --git a/third_party/WebKit/Source/core/html/custom/V0CustomElementCallbackQueue.cpp b/third_party/WebKit/Source/core/html/custom/V0CustomElementCallbackQueue.cpp index 4ffa0127..86621cc 100644 --- a/third_party/WebKit/Source/core/html/custom/V0CustomElementCallbackQueue.cpp +++ b/third_party/WebKit/Source/core/html/custom/V0CustomElementCallbackQueue.cpp
@@ -50,7 +50,7 @@ // Never run custom element callbacks in UA shadow roots since that would // leak the UA root and it's elements into the page. ShadowRoot* shadow_root = element_->ContainingShadowRoot(); - if (!shadow_root || shadow_root->GetType() != ShadowRootType::kUserAgent) { + if (!shadow_root || !shadow_root->IsUserAgent()) { while (index_ < queue_.size() && Owner() == caller) { in_created_callback_ = queue_[index_]->IsCreatedCallback();
diff --git a/third_party/WebKit/Source/core/html/custom/V0CustomElementDescriptor.h b/third_party/WebKit/Source/core/html/custom/V0CustomElementDescriptor.h index 58a2972..39a58c8e 100644 --- a/third_party/WebKit/Source/core/html/custom/V0CustomElementDescriptor.h +++ b/third_party/WebKit/Source/core/html/custom/V0CustomElementDescriptor.h
@@ -50,8 +50,8 @@ const AtomicString& local_name) : type_(type), namespace_uri_(namespace_uri), local_name_(local_name) {} - V0CustomElementDescriptor() {} - ~V0CustomElementDescriptor() {} + V0CustomElementDescriptor() = default; + ~V0CustomElementDescriptor() = default; // Specifies whether the custom element is in the HTML or SVG // namespace.
diff --git a/third_party/WebKit/Source/core/html/custom/V0CustomElementLifecycleCallbacks.h b/third_party/WebKit/Source/core/html/custom/V0CustomElementLifecycleCallbacks.h index e1203f6..b48c452 100644 --- a/third_party/WebKit/Source/core/html/custom/V0CustomElementLifecycleCallbacks.h +++ b/third_party/WebKit/Source/core/html/custom/V0CustomElementLifecycleCallbacks.h
@@ -41,7 +41,7 @@ class V0CustomElementLifecycleCallbacks : public GarbageCollectedFinalized<V0CustomElementLifecycleCallbacks> { public: - virtual ~V0CustomElementLifecycleCallbacks() {} + virtual ~V0CustomElementLifecycleCallbacks() = default; enum CallbackType { kNone = 0,
diff --git a/third_party/WebKit/Source/core/html/custom/V0CustomElementMicrotaskImportStep.cpp b/third_party/WebKit/Source/core/html/custom/V0CustomElementMicrotaskImportStep.cpp index 3049031..76ba54e 100644 --- a/third_party/WebKit/Source/core/html/custom/V0CustomElementMicrotaskImportStep.cpp +++ b/third_party/WebKit/Source/core/html/custom/V0CustomElementMicrotaskImportStep.cpp
@@ -42,7 +42,8 @@ HTMLImportChild* import) : import_(import), queue_(import->Loader()->MicrotaskQueue()) {} -V0CustomElementMicrotaskImportStep::~V0CustomElementMicrotaskImportStep() {} +V0CustomElementMicrotaskImportStep::~V0CustomElementMicrotaskImportStep() = + default; void V0CustomElementMicrotaskImportStep::Invalidate() { queue_ = V0CustomElementSyncMicrotaskQueue::Create();
diff --git a/third_party/WebKit/Source/core/html/custom/V0CustomElementMicrotaskQueueBase.h b/third_party/WebKit/Source/core/html/custom/V0CustomElementMicrotaskQueueBase.h index 42a52c6..aaa2257 100644 --- a/third_party/WebKit/Source/core/html/custom/V0CustomElementMicrotaskQueueBase.h +++ b/third_party/WebKit/Source/core/html/custom/V0CustomElementMicrotaskQueueBase.h
@@ -15,7 +15,7 @@ class V0CustomElementMicrotaskQueueBase : public GarbageCollectedFinalized<V0CustomElementMicrotaskQueueBase> { public: - virtual ~V0CustomElementMicrotaskQueueBase() {} + virtual ~V0CustomElementMicrotaskQueueBase() = default; bool IsEmpty() const { return queue_.IsEmpty(); } void Dispatch();
diff --git a/third_party/WebKit/Source/core/html/custom/V0CustomElementMicrotaskResolutionStep.cpp b/third_party/WebKit/Source/core/html/custom/V0CustomElementMicrotaskResolutionStep.cpp index d78b70b..bd7e9f23 100644 --- a/third_party/WebKit/Source/core/html/custom/V0CustomElementMicrotaskResolutionStep.cpp +++ b/third_party/WebKit/Source/core/html/custom/V0CustomElementMicrotaskResolutionStep.cpp
@@ -51,7 +51,7 @@ : context_(context), element_(element), descriptor_(descriptor) {} V0CustomElementMicrotaskResolutionStep:: - ~V0CustomElementMicrotaskResolutionStep() {} + ~V0CustomElementMicrotaskResolutionStep() = default; V0CustomElementMicrotaskStep::Result V0CustomElementMicrotaskResolutionStep::Process() {
diff --git a/third_party/WebKit/Source/core/html/custom/V0CustomElementMicrotaskStep.h b/third_party/WebKit/Source/core/html/custom/V0CustomElementMicrotaskStep.h index 5d1b9b75..a52ef56 100644 --- a/third_party/WebKit/Source/core/html/custom/V0CustomElementMicrotaskStep.h +++ b/third_party/WebKit/Source/core/html/custom/V0CustomElementMicrotaskStep.h
@@ -39,8 +39,8 @@ class V0CustomElementMicrotaskStep : public GarbageCollectedFinalized<V0CustomElementMicrotaskStep> { public: - V0CustomElementMicrotaskStep() {} - virtual ~V0CustomElementMicrotaskStep() {} + V0CustomElementMicrotaskStep() = default; + virtual ~V0CustomElementMicrotaskStep() = default; enum Result { kProcessing, kFinishedProcessing };
diff --git a/third_party/WebKit/Source/core/html/custom/V0CustomElementObserver.h b/third_party/WebKit/Source/core/html/custom/V0CustomElementObserver.h index 7f60bcf62..7046e97 100644 --- a/third_party/WebKit/Source/core/html/custom/V0CustomElementObserver.h +++ b/third_party/WebKit/Source/core/html/custom/V0CustomElementObserver.h
@@ -41,7 +41,7 @@ class V0CustomElementObserver : public GarbageCollectedFinalized<V0CustomElementObserver> { public: - virtual ~V0CustomElementObserver() {} + virtual ~V0CustomElementObserver() = default; // API for CustomElement to kick off notifications static void NotifyElementWasDestroyed(Element*); @@ -49,7 +49,7 @@ virtual void Trace(blink::Visitor* visitor) {} protected: - V0CustomElementObserver() {} + V0CustomElementObserver() = default; void Observe(Element*); void Unobserve(Element*);
diff --git a/third_party/WebKit/Source/core/html/custom/V0CustomElementProcessingStep.h b/third_party/WebKit/Source/core/html/custom/V0CustomElementProcessingStep.h index 234a8bab..f6185ebf 100644 --- a/third_party/WebKit/Source/core/html/custom/V0CustomElementProcessingStep.h +++ b/third_party/WebKit/Source/core/html/custom/V0CustomElementProcessingStep.h
@@ -40,9 +40,9 @@ : public GarbageCollectedFinalized<V0CustomElementProcessingStep> { public: - V0CustomElementProcessingStep() {} + V0CustomElementProcessingStep() = default; - virtual ~V0CustomElementProcessingStep() {} + virtual ~V0CustomElementProcessingStep() = default; virtual void Dispatch(Element*) = 0; virtual bool IsCreatedCallback() const { return false; }
diff --git a/third_party/WebKit/Source/core/html/custom/V0CustomElementRegistrationContext.h b/third_party/WebKit/Source/core/html/custom/V0CustomElementRegistrationContext.h index 698c944..94edebc1 100644 --- a/third_party/WebKit/Source/core/html/custom/V0CustomElementRegistrationContext.h +++ b/third_party/WebKit/Source/core/html/custom/V0CustomElementRegistrationContext.h
@@ -49,7 +49,7 @@ return new V0CustomElementRegistrationContext(); } - ~V0CustomElementRegistrationContext() {} + ~V0CustomElementRegistrationContext() = default; void DocumentWasDetached() { registry_.DocumentWasDetached(); } // Definitions
diff --git a/third_party/WebKit/Source/core/html/custom/V0CustomElementScheduler.h b/third_party/WebKit/Source/core/html/custom/V0CustomElementScheduler.h index 60847902..6b20e55 100644 --- a/third_party/WebKit/Source/core/html/custom/V0CustomElementScheduler.h +++ b/third_party/WebKit/Source/core/html/custom/V0CustomElementScheduler.h
@@ -67,7 +67,7 @@ static void CallbackDispatcherDidFinish(); private: - V0CustomElementScheduler() {} + V0CustomElementScheduler() = default; static void EnqueueMicrotaskStep(Document&, V0CustomElementMicrotaskStep*,
diff --git a/third_party/WebKit/Source/core/html/custom/V0CustomElementSyncMicrotaskQueue.h b/third_party/WebKit/Source/core/html/custom/V0CustomElementSyncMicrotaskQueue.h index b9ae3bb..f06a2bb 100644 --- a/third_party/WebKit/Source/core/html/custom/V0CustomElementSyncMicrotaskQueue.h +++ b/third_party/WebKit/Source/core/html/custom/V0CustomElementSyncMicrotaskQueue.h
@@ -19,7 +19,7 @@ void Enqueue(V0CustomElementMicrotaskStep*); private: - V0CustomElementSyncMicrotaskQueue() {} + V0CustomElementSyncMicrotaskQueue() = default; virtual void DoDispatch(); };
diff --git a/third_party/WebKit/Source/core/html/custom/V0CustomElementUpgradeCandidateMap.cpp b/third_party/WebKit/Source/core/html/custom/V0CustomElementUpgradeCandidateMap.cpp index a65999f..17ca8fed 100644 --- a/third_party/WebKit/Source/core/html/custom/V0CustomElementUpgradeCandidateMap.cpp +++ b/third_party/WebKit/Source/core/html/custom/V0CustomElementUpgradeCandidateMap.cpp
@@ -39,7 +39,8 @@ return new V0CustomElementUpgradeCandidateMap(); } -V0CustomElementUpgradeCandidateMap::~V0CustomElementUpgradeCandidateMap() {} +V0CustomElementUpgradeCandidateMap::~V0CustomElementUpgradeCandidateMap() = + default; void V0CustomElementUpgradeCandidateMap::Add( const V0CustomElementDescriptor& descriptor,
diff --git a/third_party/WebKit/Source/core/html/custom/V0CustomElementUpgradeCandidateMap.h b/third_party/WebKit/Source/core/html/custom/V0CustomElementUpgradeCandidateMap.h index 93d271a..5872632 100644 --- a/third_party/WebKit/Source/core/html/custom/V0CustomElementUpgradeCandidateMap.h +++ b/third_party/WebKit/Source/core/html/custom/V0CustomElementUpgradeCandidateMap.h
@@ -56,7 +56,7 @@ virtual void Trace(blink::Visitor*); private: - V0CustomElementUpgradeCandidateMap() {} + V0CustomElementUpgradeCandidateMap() = default; void ElementWasDestroyed(Element*) override;
diff --git a/third_party/WebKit/Source/core/html/forms/BaseTextInputType.cpp b/third_party/WebKit/Source/core/html/forms/BaseTextInputType.cpp index c2e153cd..4d3424f6 100644 --- a/third_party/WebKit/Source/core/html/forms/BaseTextInputType.cpp +++ b/third_party/WebKit/Source/core/html/forms/BaseTextInputType.cpp
@@ -36,7 +36,7 @@ BaseTextInputType::BaseTextInputType(HTMLInputElement& element) : TextFieldInputType(element) {} -BaseTextInputType::~BaseTextInputType() {} +BaseTextInputType::~BaseTextInputType() = default; int BaseTextInputType::MaxLength() const { return GetElement().maxLength();
diff --git a/third_party/WebKit/Source/core/html/forms/ChooserOnlyTemporalInputTypeView.cpp b/third_party/WebKit/Source/core/html/forms/ChooserOnlyTemporalInputTypeView.cpp index 8dad1cb..845d97e 100644 --- a/third_party/WebKit/Source/core/html/forms/ChooserOnlyTemporalInputTypeView.cpp +++ b/third_party/WebKit/Source/core/html/forms/ChooserOnlyTemporalInputTypeView.cpp
@@ -28,6 +28,7 @@ #include "bindings/core/v8/ExceptionState.h" #include "core/dom/Document.h" #include "core/dom/ShadowRoot.h" +#include "core/dom/events/Event.h" #include "core/html/HTMLDivElement.h" #include "core/html/forms/HTMLInputElement.h" #include "core/page/ChromeClient.h" @@ -57,25 +58,28 @@ DateTimeChooserClient::Trace(visitor); } -void ChooserOnlyTemporalInputTypeView::HandleDOMActivateEvent(Event*) { +void ChooserOnlyTemporalInputTypeView::HandleDOMActivateEvent(Event* event) { + Document& document = GetElement().GetDocument(); if (GetElement().IsDisabledOrReadOnly() || !GetElement().GetLayoutObject() || - !Frame::HasTransientUserActivation( - GetElement().GetDocument().GetFrame()) || + !Frame::HasTransientUserActivation(document.GetFrame()) || GetElement().OpenShadowRoot()) return; if (date_time_chooser_) return; - if (!GetElement().GetDocument().IsActive()) + if (!document.IsActive()) return; DateTimeChooserParameters parameters; if (!GetElement().SetupDateTimeChooserParameters(parameters)) return; - date_time_chooser_ = GetElement() - .GetDocument() - .GetPage() - ->GetChromeClient() - .OpenDateTimeChooser(this, parameters); + UseCounter::Count( + document, + (event->UnderlyingEvent() && event->UnderlyingEvent()->isTrusted()) + ? WebFeature::kTemporalInputTypeChooserByTrustedClick + : WebFeature::kTemporalInputTypeChooserByUntrustedClick); + date_time_chooser_ = + document.GetPage()->GetChromeClient().OpenDateTimeChooser(this, + parameters); } void ChooserOnlyTemporalInputTypeView::CreateShadowSubtree() {
diff --git a/third_party/WebKit/Source/core/html/forms/ClearButtonElement.h b/third_party/WebKit/Source/core/html/forms/ClearButtonElement.h index 4b87fa47..68ff7e8 100644 --- a/third_party/WebKit/Source/core/html/forms/ClearButtonElement.h +++ b/third_party/WebKit/Source/core/html/forms/ClearButtonElement.h
@@ -35,7 +35,7 @@ public: class ClearButtonOwner : public GarbageCollectedMixin { public: - virtual ~ClearButtonOwner() {} + virtual ~ClearButtonOwner() = default; virtual void FocusAndSelectClearButtonOwner() = 0; virtual bool ShouldClearButtonRespondToMouseEvents() = 0; virtual void ClearValue() = 0;
diff --git a/third_party/WebKit/Source/core/html/forms/ColorChooser.cpp b/third_party/WebKit/Source/core/html/forms/ColorChooser.cpp index 5bf770a..249f5f0c 100644 --- a/third_party/WebKit/Source/core/html/forms/ColorChooser.cpp +++ b/third_party/WebKit/Source/core/html/forms/ColorChooser.cpp
@@ -31,8 +31,8 @@ namespace blink { -ColorChooser::ColorChooser() {} +ColorChooser::ColorChooser() = default; -ColorChooser::~ColorChooser() {} +ColorChooser::~ColorChooser() = default; } // namespace blink
diff --git a/third_party/WebKit/Source/core/html/forms/ColorChooserClient.cpp b/third_party/WebKit/Source/core/html/forms/ColorChooserClient.cpp index c39c4ce..3d1d62ff 100644 --- a/third_party/WebKit/Source/core/html/forms/ColorChooserClient.cpp +++ b/third_party/WebKit/Source/core/html/forms/ColorChooserClient.cpp
@@ -31,6 +31,6 @@ namespace blink { -ColorChooserClient::~ColorChooserClient() {} +ColorChooserClient::~ColorChooserClient() = default; } // namespace blink
diff --git a/third_party/WebKit/Source/core/html/forms/ColorChooserPopupUIController.cpp b/third_party/WebKit/Source/core/html/forms/ColorChooserPopupUIController.cpp index 831468c..0291d1a 100644 --- a/third_party/WebKit/Source/core/html/forms/ColorChooserPopupUIController.cpp +++ b/third_party/WebKit/Source/core/html/forms/ColorChooserPopupUIController.cpp
@@ -51,7 +51,7 @@ popup_(nullptr), locale_(Locale::DefaultLocale()) {} -ColorChooserPopupUIController::~ColorChooserPopupUIController() {} +ColorChooserPopupUIController::~ColorChooserPopupUIController() = default; void ColorChooserPopupUIController::Dispose() { // Finalized earlier so as to access m_chromeClient while alive.
diff --git a/third_party/WebKit/Source/core/html/forms/ColorInputType.cpp b/third_party/WebKit/Source/core/html/forms/ColorInputType.cpp index 5e6f4b8..772c066 100644 --- a/third_party/WebKit/Source/core/html/forms/ColorInputType.cpp +++ b/third_party/WebKit/Source/core/html/forms/ColorInputType.cpp
@@ -37,6 +37,7 @@ #include "core/dom/events/ScopedEventQueue.h" #include "core/events/MouseEvent.h" #include "core/frame/LocalFrameView.h" +#include "core/frame/UseCounter.h" #include "core/frame/WebFeature.h" #include "core/html/HTMLDivElement.h" #include "core/html/forms/ColorChooser.h" @@ -79,7 +80,7 @@ return new ColorInputType(element); } -ColorInputType::~ColorInputType() {} +ColorInputType::~ColorInputType() = default; void ColorInputType::Trace(blink::Visitor* visitor) { visitor->Trace(chooser_); @@ -148,13 +149,20 @@ if (GetElement().IsDisabledFormControl()) return; - if (!Frame::HasTransientUserActivation(GetElement().GetDocument().GetFrame())) + Document& document = GetElement().GetDocument(); + if (!Frame::HasTransientUserActivation(document.GetFrame())) return; ChromeClient* chrome_client = GetChromeClient(); - if (chrome_client && !chooser_) - chooser_ = chrome_client->OpenColorChooser( - GetElement().GetDocument().GetFrame(), this, ValueAsColor()); + if (chrome_client && !chooser_) { + UseCounter::Count( + document, + (event->UnderlyingEvent() && event->UnderlyingEvent()->isTrusted()) + ? WebFeature::kColorInputTypeChooserByTrustedClick + : WebFeature::kColorInputTypeChooserByUntrustedClick); + chooser_ = chrome_client->OpenColorChooser(document.GetFrame(), this, + ValueAsColor()); + } event->SetDefaultHandled(); }
diff --git a/third_party/WebKit/Source/core/html/forms/DateTimeChooser.cpp b/third_party/WebKit/Source/core/html/forms/DateTimeChooser.cpp index a95cb28..dc6cb9d8 100644 --- a/third_party/WebKit/Source/core/html/forms/DateTimeChooser.cpp +++ b/third_party/WebKit/Source/core/html/forms/DateTimeChooser.cpp
@@ -32,6 +32,6 @@ namespace blink { -DateTimeChooser::~DateTimeChooser() {} +DateTimeChooser::~DateTimeChooser() = default; } // namespace blink
diff --git a/third_party/WebKit/Source/core/html/forms/DateTimeChooserClient.cpp b/third_party/WebKit/Source/core/html/forms/DateTimeChooserClient.cpp index c6ca427..4f3ca73 100644 --- a/third_party/WebKit/Source/core/html/forms/DateTimeChooserClient.cpp +++ b/third_party/WebKit/Source/core/html/forms/DateTimeChooserClient.cpp
@@ -32,6 +32,6 @@ namespace blink { -DateTimeChooserClient::~DateTimeChooserClient() {} +DateTimeChooserClient::~DateTimeChooserClient() = default; } // namespace blink
diff --git a/third_party/WebKit/Source/core/html/forms/DateTimeChooserImpl.cpp b/third_party/WebKit/Source/core/html/forms/DateTimeChooserImpl.cpp index 28925956..77fc422b 100644 --- a/third_party/WebKit/Source/core/html/forms/DateTimeChooserImpl.cpp +++ b/third_party/WebKit/Source/core/html/forms/DateTimeChooserImpl.cpp
@@ -65,7 +65,7 @@ return new DateTimeChooserImpl(chrome_client, client, parameters); } -DateTimeChooserImpl::~DateTimeChooserImpl() {} +DateTimeChooserImpl::~DateTimeChooserImpl() = default; void DateTimeChooserImpl::Trace(blink::Visitor* visitor) { visitor->Trace(chrome_client_);
diff --git a/third_party/WebKit/Source/core/html/forms/DateTimeEditElement.cpp b/third_party/WebKit/Source/core/html/forms/DateTimeEditElement.cpp index 1736464..8c162ab 100644 --- a/third_party/WebKit/Source/core/html/forms/DateTimeEditElement.cpp +++ b/third_party/WebKit/Source/core/html/forms/DateTimeEditElement.cpp
@@ -512,7 +512,7 @@ // ---------------------------- -DateTimeEditElement::EditControlOwner::~EditControlOwner() {} +DateTimeEditElement::EditControlOwner::~EditControlOwner() = default; DateTimeEditElement::DateTimeEditElement(Document& document, EditControlOwner& edit_control_owner) @@ -520,7 +520,7 @@ SetHasCustomStyleCallbacks(); } -DateTimeEditElement::~DateTimeEditElement() {} +DateTimeEditElement::~DateTimeEditElement() = default; void DateTimeEditElement::Trace(blink::Visitor* visitor) { visitor->Trace(fields_);
diff --git a/third_party/WebKit/Source/core/html/forms/DateTimeFieldElement.cpp b/third_party/WebKit/Source/core/html/forms/DateTimeFieldElement.cpp index b803210f..f6c1b7e3 100644 --- a/third_party/WebKit/Source/core/html/forms/DateTimeFieldElement.cpp +++ b/third_party/WebKit/Source/core/html/forms/DateTimeFieldElement.cpp
@@ -39,7 +39,7 @@ using namespace HTMLNames; -DateTimeFieldElement::FieldOwner::~FieldOwner() {} +DateTimeFieldElement::FieldOwner::~FieldOwner() = default; DateTimeFieldElement::DateTimeFieldElement(Document& document, FieldOwner& field_owner)
diff --git a/third_party/WebKit/Source/core/html/forms/ExternalDateTimeChooser.cpp b/third_party/WebKit/Source/core/html/forms/ExternalDateTimeChooser.cpp index 32f7261..d87a4b3 100644 --- a/third_party/WebKit/Source/core/html/forms/ExternalDateTimeChooser.cpp +++ b/third_party/WebKit/Source/core/html/forms/ExternalDateTimeChooser.cpp
@@ -55,7 +55,7 @@ Persistent<ExternalDateTimeChooser> chooser_; }; -ExternalDateTimeChooser::~ExternalDateTimeChooser() {} +ExternalDateTimeChooser::~ExternalDateTimeChooser() = default; void ExternalDateTimeChooser::Trace(blink::Visitor* visitor) { visitor->Trace(client_);
diff --git a/third_party/WebKit/Source/core/html/forms/ExternalPopupMenu.cpp b/third_party/WebKit/Source/core/html/forms/ExternalPopupMenu.cpp index e6dc8cac..2a5dff0 100644 --- a/third_party/WebKit/Source/core/html/forms/ExternalPopupMenu.cpp +++ b/third_party/WebKit/Source/core/html/forms/ExternalPopupMenu.cpp
@@ -71,7 +71,7 @@ &ExternalPopupMenu::DispatchEvent), web_external_popup_menu_(nullptr) {} -ExternalPopupMenu::~ExternalPopupMenu() {} +ExternalPopupMenu::~ExternalPopupMenu() = default; void ExternalPopupMenu::Trace(blink::Visitor* visitor) { visitor->Trace(owner_element_);
diff --git a/third_party/WebKit/Source/core/html/forms/ExternalPopupMenuTest.cpp b/third_party/WebKit/Source/core/html/forms/ExternalPopupMenuTest.cpp index 917bb4a..af13e72 100644 --- a/third_party/WebKit/Source/core/html/forms/ExternalPopupMenuTest.cpp +++ b/third_party/WebKit/Source/core/html/forms/ExternalPopupMenuTest.cpp
@@ -27,7 +27,7 @@ class ExternalPopupMenuDisplayNoneItemsTest : public PageTestBase { public: - ExternalPopupMenuDisplayNoneItemsTest() {} + ExternalPopupMenuDisplayNoneItemsTest() = default; protected: void SetUp() override {
diff --git a/third_party/WebKit/Source/core/html/forms/FileChooser.cpp b/third_party/WebKit/Source/core/html/forms/FileChooser.cpp index ec770f09..391f82ef 100644 --- a/third_party/WebKit/Source/core/html/forms/FileChooser.cpp +++ b/third_party/WebKit/Source/core/html/forms/FileChooser.cpp
@@ -30,7 +30,7 @@ namespace blink { -FileChooserClient::~FileChooserClient() {} +FileChooserClient::~FileChooserClient() = default; FileChooser* FileChooserClient::NewFileChooser( const WebFileChooserParams& params) { @@ -51,7 +51,7 @@ return base::AdoptRef(new FileChooser(client, params)); } -FileChooser::~FileChooser() {} +FileChooser::~FileChooser() = default; void FileChooser::ChooseFiles(const Vector<FileChooserFileInfo>& files) { // FIXME: This is inelegant. We should not be looking at params_ here.
diff --git a/third_party/WebKit/Source/core/html/forms/FormController.cpp b/third_party/WebKit/Source/core/html/forms/FormController.cpp index 535b3ce..05a2e8c 100644 --- a/third_party/WebKit/Source/core/html/forms/FormController.cpp +++ b/third_party/WebKit/Source/core/html/forms/FormController.cpp
@@ -317,7 +317,7 @@ void WillDeleteForm(HTMLFormElement*); private: - FormKeyGenerator() {} + FormKeyGenerator() = default; using FormToKeyMap = HeapHashMap<Member<HTMLFormElement>, AtomicString>; using FormSignatureToNextIndexMap = HashMap<String, unsigned>; @@ -463,7 +463,7 @@ FormController::FormController() : document_state_(DocumentState::Create()) {} -FormController::~FormController() {} +FormController::~FormController() = default; void FormController::Trace(blink::Visitor* visitor) { visitor->Trace(document_state_);
diff --git a/third_party/WebKit/Source/core/html/forms/FormController.h b/third_party/WebKit/Source/core/html/forms/FormController.h index 3b0fe50..ec5f2cf 100644 --- a/third_party/WebKit/Source/core/html/forms/FormController.h +++ b/third_party/WebKit/Source/core/html/forms/FormController.h
@@ -48,8 +48,7 @@ } static FormControlState Deserialize(const Vector<String>& state_vector, size_t& index); - FormControlState(const FormControlState& another) - : type_(another.type_), values_(another.values_) {} + FormControlState(const FormControlState& another) = default; FormControlState& operator=(const FormControlState&); bool IsFailure() const { return type_ == kTypeFailure; } @@ -67,11 +66,7 @@ }; inline FormControlState& FormControlState::operator=( - const FormControlState& another) { - type_ = another.type_; - values_ = another.values_; - return *this; -} + const FormControlState& another) = default; inline void FormControlState::Append(const String& value) { type_ = kTypeRestore;
diff --git a/third_party/WebKit/Source/core/html/forms/HTMLFormControlElement.cpp b/third_party/WebKit/Source/core/html/forms/HTMLFormControlElement.cpp index d7dfe1b..3db843f 100644 --- a/third_party/WebKit/Source/core/html/forms/HTMLFormControlElement.cpp +++ b/third_party/WebKit/Source/core/html/forms/HTMLFormControlElement.cpp
@@ -66,7 +66,7 @@ SetHasCustomStyleCallbacks(); } -HTMLFormControlElement::~HTMLFormControlElement() {} +HTMLFormControlElement::~HTMLFormControlElement() = default; void HTMLFormControlElement::Trace(blink::Visitor* visitor) { ListedElement::Trace(visitor);
diff --git a/third_party/WebKit/Source/core/html/forms/HTMLFormControlElementWithState.cpp b/third_party/WebKit/Source/core/html/forms/HTMLFormControlElementWithState.cpp index 740ae5a..453fd32 100644 --- a/third_party/WebKit/Source/core/html/forms/HTMLFormControlElementWithState.cpp +++ b/third_party/WebKit/Source/core/html/forms/HTMLFormControlElementWithState.cpp
@@ -37,7 +37,7 @@ Document& doc) : HTMLFormControlElement(tag_name, doc) {} -HTMLFormControlElementWithState::~HTMLFormControlElementWithState() {} +HTMLFormControlElementWithState::~HTMLFormControlElementWithState() = default; Node::InsertionNotificationRequest HTMLFormControlElementWithState::InsertedInto(ContainerNode* insertion_point) {
diff --git a/third_party/WebKit/Source/core/html/forms/HTMLFormControlsCollection.cpp b/third_party/WebKit/Source/core/html/forms/HTMLFormControlsCollection.cpp index b60d8dd..54acfa104 100644 --- a/third_party/WebKit/Source/core/html/forms/HTMLFormControlsCollection.cpp +++ b/third_party/WebKit/Source/core/html/forms/HTMLFormControlsCollection.cpp
@@ -53,7 +53,7 @@ return new HTMLFormControlsCollection(owner_node); } -HTMLFormControlsCollection::~HTMLFormControlsCollection() {} +HTMLFormControlsCollection::~HTMLFormControlsCollection() = default; const ListedElement::List& HTMLFormControlsCollection::ListedElements() const { return ToHTMLFormElement(ownerNode()).ListedElements();
diff --git a/third_party/WebKit/Source/core/html/forms/HTMLFormElement.cpp b/third_party/WebKit/Source/core/html/forms/HTMLFormElement.cpp index eeb9efc..1d2db0a 100644 --- a/third_party/WebKit/Source/core/html/forms/HTMLFormElement.cpp +++ b/third_party/WebKit/Source/core/html/forms/HTMLFormElement.cpp
@@ -79,7 +79,7 @@ return new HTMLFormElement(document); } -HTMLFormElement::~HTMLFormElement() {} +HTMLFormElement::~HTMLFormElement() = default; void HTMLFormElement::Trace(blink::Visitor* visitor) { visitor->Trace(past_names_map_);
diff --git a/third_party/WebKit/Source/core/html/forms/HTMLInputElement.cpp b/third_party/WebKit/Source/core/html/forms/HTMLInputElement.cpp index 2f5c35b8..579d3449 100644 --- a/third_party/WebKit/Source/core/html/forms/HTMLInputElement.cpp +++ b/third_party/WebKit/Source/core/html/forms/HTMLInputElement.cpp
@@ -127,7 +127,7 @@ new HTMLInputElement(document, created_by_parser); if (!created_by_parser) { DCHECK(input_element->input_type_view_->NeedsShadowSubtree()); - input_element->CreateUserAgentShadowRoot(); + input_element->CreateLegacyUserAgentShadowRootV0(); input_element->CreateShadowSubtree(); } return input_element; @@ -151,7 +151,7 @@ return *image_loader_; } -HTMLInputElement::~HTMLInputElement() {} +HTMLInputElement::~HTMLInputElement() = default; const AtomicString& HTMLInputElement::GetName() const { return name_.IsNull() ? g_empty_atom : name_; @@ -378,7 +378,7 @@ has_been_password_field_ |= new_type_name == InputTypeNames::password; if (input_type_view_->NeedsShadowSubtree()) { - CreateUserAgentShadowRoot(); + CreateLegacyUserAgentShadowRootV0(); CreateShadowSubtree(); } @@ -437,7 +437,7 @@ input_type_ = new_type; input_type_view_ = input_type_->CreateView(); if (input_type_view_->NeedsShadowSubtree()) { - EnsureUserAgentShadowRoot(); + EnsureLegacyUserAgentShadowRootV0(); CreateShadowSubtree(); } @@ -1129,8 +1129,11 @@ selection); input_type_view_->DidSetValue(sanitized_value, value_changed); - if (value_changed) + if (value_changed) { NotifyFormStateChanged(); + if (auto* page = GetDocument().GetPage()) + page->GetChromeClient().DidChangeValueInTextField(*this); + } } void HTMLInputElement::SetNonAttributeValue(const String& sanitized_value) { @@ -1946,7 +1949,7 @@ // Some input types only need shadow roots to hide any children that may // have been appended by script. For such types, shadow roots are lazily // created when children are added for the first time. - EnsureUserAgentShadowRoot(); + EnsureLegacyUserAgentShadowRootV0(); ContainerNode::ChildrenChanged(change); }
diff --git a/third_party/WebKit/Source/core/html/forms/HTMLOptGroupElement.cpp b/third_party/WebKit/Source/core/html/forms/HTMLOptGroupElement.cpp index 97ccaf92..2e4756bf 100644 --- a/third_party/WebKit/Source/core/html/forms/HTMLOptGroupElement.cpp +++ b/third_party/WebKit/Source/core/html/forms/HTMLOptGroupElement.cpp
@@ -47,11 +47,11 @@ // HTMLOptGroupElement.h, when including HTMLOptGroupElement.h, // msvc tries to expand the destructor and causes // a compile error because of lack of ComputedStyle definition. -HTMLOptGroupElement::~HTMLOptGroupElement() {} +HTMLOptGroupElement::~HTMLOptGroupElement() = default; HTMLOptGroupElement* HTMLOptGroupElement::Create(Document& document) { HTMLOptGroupElement* opt_group_element = new HTMLOptGroupElement(document); - opt_group_element->EnsureUserAgentShadowRoot(); + opt_group_element->EnsureLegacyUserAgentShadowRootV0(); return opt_group_element; }
diff --git a/third_party/WebKit/Source/core/html/forms/HTMLOptionElement.cpp b/third_party/WebKit/Source/core/html/forms/HTMLOptionElement.cpp index e8793a3..bf7d8e81 100644 --- a/third_party/WebKit/Source/core/html/forms/HTMLOptionElement.cpp +++ b/third_party/WebKit/Source/core/html/forms/HTMLOptionElement.cpp
@@ -54,11 +54,11 @@ // HTMLOptionElement.h, when including HTMLOptionElement.h, // msvc tries to expand the destructor and causes // a compile error because of lack of ComputedStyle definition. -HTMLOptionElement::~HTMLOptionElement() {} +HTMLOptionElement::~HTMLOptionElement() = default; HTMLOptionElement* HTMLOptionElement::Create(Document& document) { HTMLOptionElement* option = new HTMLOptionElement(document); - option->EnsureUserAgentShadowRoot(); + option->EnsureLegacyUserAgentShadowRootV0(); return option; } @@ -70,7 +70,7 @@ bool selected, ExceptionState& exception_state) { HTMLOptionElement* element = new HTMLOptionElement(document); - element->EnsureUserAgentShadowRoot(); + element->EnsureLegacyUserAgentShadowRootV0(); if (!data.IsEmpty()) { element->AppendChild(Text::Create(document, data), exception_state); if (exception_state.HadException())
diff --git a/third_party/WebKit/Source/core/html/forms/HTMLOutputElement.cpp b/third_party/WebKit/Source/core/html/forms/HTMLOutputElement.cpp index 3ae5d567..41870a2a 100644 --- a/third_party/WebKit/Source/core/html/forms/HTMLOutputElement.cpp +++ b/third_party/WebKit/Source/core/html/forms/HTMLOutputElement.cpp
@@ -41,7 +41,7 @@ default_value_(""), tokens_(DOMTokenList::Create(*this, HTMLNames::forAttr)) {} -HTMLOutputElement::~HTMLOutputElement() {} +HTMLOutputElement::~HTMLOutputElement() = default; HTMLOutputElement* HTMLOutputElement::Create(Document& document) { return new HTMLOutputElement(document);
diff --git a/third_party/WebKit/Source/core/html/forms/HTMLSelectElement.cpp b/third_party/WebKit/Source/core/html/forms/HTMLSelectElement.cpp index 595a6ffd..1895924 100644 --- a/third_party/WebKit/Source/core/html/forms/HTMLSelectElement.cpp +++ b/third_party/WebKit/Source/core/html/forms/HTMLSelectElement.cpp
@@ -99,11 +99,11 @@ HTMLSelectElement* HTMLSelectElement::Create(Document& document) { HTMLSelectElement* select = new HTMLSelectElement(document); - select->EnsureUserAgentShadowRoot(); + select->EnsureLegacyUserAgentShadowRootV0(); return select; } -HTMLSelectElement::~HTMLSelectElement() {} +HTMLSelectElement::~HTMLSelectElement() = default; const AtomicString& HTMLSelectElement::FormControlType() const { DEFINE_STATIC_LOCAL(const AtomicString, select_multiple, ("select-multiple"));
diff --git a/third_party/WebKit/Source/core/html/forms/HTMLTextAreaElement.cpp b/third_party/WebKit/Source/core/html/forms/HTMLTextAreaElement.cpp index 081300b4..e946ebce 100644 --- a/third_party/WebKit/Source/core/html/forms/HTMLTextAreaElement.cpp +++ b/third_party/WebKit/Source/core/html/forms/HTMLTextAreaElement.cpp
@@ -79,7 +79,7 @@ HTMLTextAreaElement* HTMLTextAreaElement::Create(Document& document) { HTMLTextAreaElement* text_area = new HTMLTextAreaElement(document); - text_area->EnsureUserAgentShadowRoot(); + text_area->EnsureLegacyUserAgentShadowRootV0(); return text_area; }
diff --git a/third_party/WebKit/Source/core/html/forms/InputType.cpp b/third_party/WebKit/Source/core/html/forms/InputType.cpp index 7557c8b..e4e4205 100644 --- a/third_party/WebKit/Source/core/html/forms/InputType.cpp +++ b/third_party/WebKit/Source/core/html/forms/InputType.cpp
@@ -139,7 +139,7 @@ return it == FactoryMap()->end() ? InputTypeNames::text : it->key; } -InputType::~InputType() {} +InputType::~InputType() = default; void InputType::Trace(blink::Visitor* visitor) { visitor->Trace(element_);
diff --git a/third_party/WebKit/Source/core/html/forms/InputTypeView.cpp b/third_party/WebKit/Source/core/html/forms/InputTypeView.cpp index 1cbd4169..78c25c9 100644 --- a/third_party/WebKit/Source/core/html/forms/InputTypeView.cpp +++ b/third_party/WebKit/Source/core/html/forms/InputTypeView.cpp
@@ -37,7 +37,7 @@ namespace blink { -InputTypeView::~InputTypeView() {} +InputTypeView::~InputTypeView() = default; void InputTypeView::Trace(blink::Visitor* visitor) { visitor->Trace(element_);
diff --git a/third_party/WebKit/Source/core/html/forms/InternalPopupMenu.cpp b/third_party/WebKit/Source/core/html/forms/InternalPopupMenu.cpp index c149dd7f..0b1bb14 100644 --- a/third_party/WebKit/Source/core/html/forms/InternalPopupMenu.cpp +++ b/third_party/WebKit/Source/core/html/forms/InternalPopupMenu.cpp
@@ -94,7 +94,7 @@ owner_font_selector_->RegisterForInvalidationCallbacks(this); } -PopupMenuCSSFontSelector::~PopupMenuCSSFontSelector() {} +PopupMenuCSSFontSelector::~PopupMenuCSSFontSelector() = default; scoped_refptr<FontData> PopupMenuCSSFontSelector::GetFontData( const FontDescription& description,
diff --git a/third_party/WebKit/Source/core/html/forms/LabelableElement.cpp b/third_party/WebKit/Source/core/html/forms/LabelableElement.cpp index 243c3bb..a6b1acc 100644 --- a/third_party/WebKit/Source/core/html/forms/LabelableElement.cpp +++ b/third_party/WebKit/Source/core/html/forms/LabelableElement.cpp
@@ -33,7 +33,7 @@ Document& document) : HTMLElement(tag_name, document) {} -LabelableElement::~LabelableElement() {} +LabelableElement::~LabelableElement() = default; LabelsNodeList* LabelableElement::labels() { if (!SupportLabels())
diff --git a/third_party/WebKit/Source/core/html/forms/LabelsNodeList.cpp b/third_party/WebKit/Source/core/html/forms/LabelsNodeList.cpp index 9f47a34..d66cafa 100644 --- a/third_party/WebKit/Source/core/html/forms/LabelsNodeList.cpp +++ b/third_party/WebKit/Source/core/html/forms/LabelsNodeList.cpp
@@ -39,7 +39,7 @@ kInvalidateForFormControls, NodeListRootType::kTreeScope) {} -LabelsNodeList::~LabelsNodeList() {} +LabelsNodeList::~LabelsNodeList() = default; bool LabelsNodeList::ElementMatches(const Element& element) const { return IsHTMLLabelElement(element) &&
diff --git a/third_party/WebKit/Source/core/html/forms/MultipleFieldsTemporalInputTypeView.cpp b/third_party/WebKit/Source/core/html/forms/MultipleFieldsTemporalInputTypeView.cpp index 36def01..dac3cd0 100644 --- a/third_party/WebKit/Source/core/html/forms/MultipleFieldsTemporalInputTypeView.cpp +++ b/third_party/WebKit/Source/core/html/forms/MultipleFieldsTemporalInputTypeView.cpp
@@ -35,6 +35,7 @@ #include "core/dom/ShadowRoot.h" #include "core/dom/events/ScopedEventQueue.h" #include "core/events/KeyboardEvent.h" +#include "core/events/MouseEvent.h" #include "core/html/forms/BaseTemporalInputType.h" #include "core/html/forms/DateTimeFieldsState.h" #include "core/html/forms/FormController.h" @@ -318,7 +319,8 @@ return new MultipleFieldsTemporalInputTypeView(element, input_type); } -MultipleFieldsTemporalInputTypeView::~MultipleFieldsTemporalInputTypeView() {} +MultipleFieldsTemporalInputTypeView::~MultipleFieldsTemporalInputTypeView() = + default; void MultipleFieldsTemporalInputTypeView::Trace(blink::Visitor* visitor) { visitor->Trace(input_type_); @@ -398,6 +400,13 @@ is_destroying_shadow_subtree_ = false; } +void MultipleFieldsTemporalInputTypeView::HandleClickEvent(MouseEvent* event) { + if (!event->isTrusted()) { + UseCounter::Count(GetElement().GetDocument(), + WebFeature::kTemporalInputTypeIgnoreUntrustedClick); + } +} + void MultipleFieldsTemporalInputTypeView::HandleFocusInEvent( Element* old_focused_element, WebFocusType type) {
diff --git a/third_party/WebKit/Source/core/html/forms/MultipleFieldsTemporalInputTypeView.h b/third_party/WebKit/Source/core/html/forms/MultipleFieldsTemporalInputTypeView.h index def9a84ad..1ad37e6 100644 --- a/third_party/WebKit/Source/core/html/forms/MultipleFieldsTemporalInputTypeView.h +++ b/third_party/WebKit/Source/core/html/forms/MultipleFieldsTemporalInputTypeView.h
@@ -102,6 +102,7 @@ void DestroyShadowSubtree() final; void DisabledAttributeChanged() final; void ForwardEvent(Event*) final; + void HandleClickEvent(MouseEvent*) final; void HandleFocusInEvent(Element* old_focused_element, WebFocusType) final; void HandleKeydownEvent(KeyboardEvent*) final; bool HasBadInput() const override;
diff --git a/third_party/WebKit/Source/core/html/forms/PasswordInputTypeTest.cpp b/third_party/WebKit/Source/core/html/forms/PasswordInputTypeTest.cpp index ff87f654..43d19c2 100644 --- a/third_party/WebKit/Source/core/html/forms/PasswordInputTypeTest.cpp +++ b/third_party/WebKit/Source/core/html/forms/PasswordInputTypeTest.cpp
@@ -28,7 +28,7 @@ WTF::Unretained(this))); } - ~MockInsecureInputService() override {} + ~MockInsecureInputService() override = default; void BindRequest(mojo::ScopedMessagePipeHandle handle) { binding_set_.AddBinding(
diff --git a/third_party/WebKit/Source/core/html/forms/PickerIndicatorElement.h b/third_party/WebKit/Source/core/html/forms/PickerIndicatorElement.h index 63b6d65..0bc7557 100644 --- a/third_party/WebKit/Source/core/html/forms/PickerIndicatorElement.h +++ b/third_party/WebKit/Source/core/html/forms/PickerIndicatorElement.h
@@ -48,7 +48,7 @@ // it doesn't handle event, e.g. at destruction. class PickerIndicatorOwner : public GarbageCollectedMixin { public: - virtual ~PickerIndicatorOwner() {} + virtual ~PickerIndicatorOwner() = default; virtual bool IsPickerIndicatorOwnerDisabledOrReadOnly() const = 0; // FIXME: Remove. Deprecated in favor of double version. virtual void PickerIndicatorChooseValue(const String&) = 0;
diff --git a/third_party/WebKit/Source/core/html/forms/PopupMenu.h b/third_party/WebKit/Source/core/html/forms/PopupMenu.h index c3820d6..2273af4 100644 --- a/third_party/WebKit/Source/core/html/forms/PopupMenu.h +++ b/third_party/WebKit/Source/core/html/forms/PopupMenu.h
@@ -28,7 +28,7 @@ class PopupMenu : public GarbageCollectedFinalized<PopupMenu> { public: - virtual ~PopupMenu() {} + virtual ~PopupMenu() = default; virtual void Trace(blink::Visitor* visitor) {} virtual void Show() = 0; virtual void Hide() = 0;
diff --git a/third_party/WebKit/Source/core/html/forms/RadioButtonGroupScope.cpp b/third_party/WebKit/Source/core/html/forms/RadioButtonGroupScope.cpp index f5b6389..35a3b27e 100644 --- a/third_party/WebKit/Source/core/html/forms/RadioButtonGroupScope.cpp +++ b/third_party/WebKit/Source/core/html/forms/RadioButtonGroupScope.cpp
@@ -203,9 +203,9 @@ // Explicity define empty constructor and destructor in order to prevent the // compiler from generating them as inlines. So we don't need to to define // RadioButtonGroup in the header. -RadioButtonGroupScope::RadioButtonGroupScope() {} +RadioButtonGroupScope::RadioButtonGroupScope() = default; -RadioButtonGroupScope::~RadioButtonGroupScope() {} +RadioButtonGroupScope::~RadioButtonGroupScope() = default; void RadioButtonGroupScope::AddButton(HTMLInputElement* element) { DCHECK_EQ(element->type(), InputTypeNames::radio);
diff --git a/third_party/WebKit/Source/core/html/forms/RadioNodeList.cpp b/third_party/WebKit/Source/core/html/forms/RadioNodeList.cpp index 454efee..07484fd 100644 --- a/third_party/WebKit/Source/core/html/forms/RadioNodeList.cpp +++ b/third_party/WebKit/Source/core/html/forms/RadioNodeList.cpp
@@ -48,7 +48,7 @@ : NodeListRootType::kNode), name_(name) {} -RadioNodeList::~RadioNodeList() {} +RadioNodeList::~RadioNodeList() = default; static inline HTMLInputElement* ToRadioButtonInputElement(Element& element) { if (!IsHTMLInputElement(element))
diff --git a/third_party/WebKit/Source/core/html/forms/RadioNodeList.idl b/third_party/WebKit/Source/core/html/forms/RadioNodeList.idl index 9cd41f6b..3f7fde9 100644 --- a/third_party/WebKit/Source/core/html/forms/RadioNodeList.idl +++ b/third_party/WebKit/Source/core/html/forms/RadioNodeList.idl
@@ -25,7 +25,9 @@ // https://html.spec.whatwg.org/#radionodelist -interface RadioNodeList : NodeList { +[ + Exposed=Window +] interface RadioNodeList : NodeList { attribute DOMString value; // TODO(tkent): We need to declare this indexed property getter because our
diff --git a/third_party/WebKit/Source/core/html/forms/SpinButtonElement.h b/third_party/WebKit/Source/core/html/forms/SpinButtonElement.h index a1db881..838b9ed 100644 --- a/third_party/WebKit/Source/core/html/forms/SpinButtonElement.h +++ b/third_party/WebKit/Source/core/html/forms/SpinButtonElement.h
@@ -48,7 +48,7 @@ }; class SpinButtonOwner : public GarbageCollectedMixin { public: - virtual ~SpinButtonOwner() {} + virtual ~SpinButtonOwner() = default; virtual void FocusAndSelectSpinButtonOwner() = 0; virtual bool ShouldSpinButtonRespondToMouseEvents() = 0; virtual bool ShouldSpinButtonRespondToWheelEvents() = 0;
diff --git a/third_party/WebKit/Source/core/html/forms/StepRange.cpp b/third_party/WebKit/Source/core/html/forms/StepRange.cpp index 1978c1c2..f2a408b 100644 --- a/third_party/WebKit/Source/core/html/forms/StepRange.cpp +++ b/third_party/WebKit/Source/core/html/forms/StepRange.cpp
@@ -38,14 +38,7 @@ has_step_(false), has_range_limitations_(false) {} -StepRange::StepRange(const StepRange& step_range) - : maximum_(step_range.maximum_), - minimum_(step_range.minimum_), - step_(step_range.step_), - step_base_(step_range.step_base_), - step_description_(step_range.step_description_), - has_step_(step_range.has_step_), - has_range_limitations_(step_range.has_range_limitations_) {} +StepRange::StepRange(const StepRange& step_range) = default; StepRange::StepRange(const Decimal& step_base, const Decimal& minimum,
diff --git a/third_party/WebKit/Source/core/html/forms/TextControlElement.cpp b/third_party/WebKit/Source/core/html/forms/TextControlElement.cpp index 9633777..89fdb20 100644 --- a/third_party/WebKit/Source/core/html/forms/TextControlElement.cpp +++ b/third_party/WebKit/Source/core/html/forms/TextControlElement.cpp
@@ -77,7 +77,7 @@ : kSelectionHasNoDirection; } -TextControlElement::~TextControlElement() {} +TextControlElement::~TextControlElement() = default; void TextControlElement::DispatchFocusEvent( Element* old_focused_element, @@ -944,8 +944,7 @@ return nullptr; Element* ancestor = container->OwnerShadowHost(); return ancestor && IsTextControlElement(*ancestor) && - container->ContainingShadowRoot()->GetType() == - ShadowRootType::kUserAgent + container->ContainingShadowRoot()->IsUserAgent() ? ToTextControlElement(ancestor) : nullptr; }
diff --git a/third_party/WebKit/Source/core/html/forms/TextFieldInputType.cpp b/third_party/WebKit/Source/core/html/forms/TextFieldInputType.cpp index ac970bb4..cde79db 100644 --- a/third_party/WebKit/Source/core/html/forms/TextFieldInputType.cpp +++ b/third_party/WebKit/Source/core/html/forms/TextFieldInputType.cpp
@@ -107,7 +107,7 @@ TextFieldInputType::TextFieldInputType(HTMLInputElement& element) : InputType(element), InputTypeView(element) {} -TextFieldInputType::~TextFieldInputType() {} +TextFieldInputType::~TextFieldInputType() = default; void TextFieldInputType::Trace(blink::Visitor* visitor) { InputTypeView::Trace(visitor);
diff --git a/third_party/WebKit/Source/core/html/forms/TypeAhead.h b/third_party/WebKit/Source/core/html/forms/TypeAhead.h index 656299b5..d821f97 100644 --- a/third_party/WebKit/Source/core/html/forms/TypeAhead.h +++ b/third_party/WebKit/Source/core/html/forms/TypeAhead.h
@@ -38,7 +38,7 @@ class CORE_EXPORT TypeAheadDataSource { public: - virtual ~TypeAheadDataSource() {} + virtual ~TypeAheadDataSource() = default; virtual int IndexOfSelectedOption() const = 0; virtual int OptionCount() const = 0;
diff --git a/third_party/WebKit/Source/core/html/imports/HTMLImport.h b/third_party/WebKit/Source/core/html/imports/HTMLImport.h index 6e63647..2f0facb 100644 --- a/third_party/WebKit/Source/core/html/imports/HTMLImport.h +++ b/third_party/WebKit/Source/core/html/imports/HTMLImport.h
@@ -48,7 +48,7 @@ public: enum SyncMode { kSync = 0, kAsync = 1 }; - virtual ~HTMLImport() {} + virtual ~HTMLImport() = default; // FIXME: Consider returning HTMLImportTreeRoot. HTMLImport* Root();
diff --git a/third_party/WebKit/Source/core/html/imports/HTMLImportChild.cpp b/third_party/WebKit/Source/core/html/imports/HTMLImportChild.cpp index 2281722d5..9d60c4e 100644 --- a/third_party/WebKit/Source/core/html/imports/HTMLImportChild.cpp +++ b/third_party/WebKit/Source/core/html/imports/HTMLImportChild.cpp
@@ -54,7 +54,7 @@ DCHECK(client_); } -HTMLImportChild::~HTMLImportChild() {} +HTMLImportChild::~HTMLImportChild() = default; void HTMLImportChild::OwnerInserted() { if (!loader_->IsDone())
diff --git a/third_party/WebKit/Source/core/html/imports/HTMLImportChildClient.h b/third_party/WebKit/Source/core/html/imports/HTMLImportChildClient.h index 93c9688..156f4ff 100644 --- a/third_party/WebKit/Source/core/html/imports/HTMLImportChildClient.h +++ b/third_party/WebKit/Source/core/html/imports/HTMLImportChildClient.h
@@ -40,7 +40,7 @@ class HTMLImportChildClient : public GarbageCollectedMixin { public: - virtual ~HTMLImportChildClient() {} + virtual ~HTMLImportChildClient() = default; virtual void DidFinish() = 0; virtual void ImportChildWasDisposed(HTMLImportChild*) = 0; virtual bool IsSync() const = 0;
diff --git a/third_party/WebKit/Source/core/html/imports/HTMLImportLoader.cpp b/third_party/WebKit/Source/core/html/imports/HTMLImportLoader.cpp index dca30d5..03fbf8de 100644 --- a/third_party/WebKit/Source/core/html/imports/HTMLImportLoader.cpp +++ b/third_party/WebKit/Source/core/html/imports/HTMLImportLoader.cpp
@@ -47,7 +47,7 @@ state_(kStateLoading), microtask_queue_(V0CustomElementSyncMicrotaskQueue::Create()) {} -HTMLImportLoader::~HTMLImportLoader() {} +HTMLImportLoader::~HTMLImportLoader() = default; void HTMLImportLoader::Dispose() { controller_ = nullptr;
diff --git a/third_party/WebKit/Source/core/html/imports/HTMLImportSheetsTest.cpp b/third_party/WebKit/Source/core/html/imports/HTMLImportSheetsTest.cpp index db84fd6..0b5a97b 100644 --- a/third_party/WebKit/Source/core/html/imports/HTMLImportSheetsTest.cpp +++ b/third_party/WebKit/Source/core/html/imports/HTMLImportSheetsTest.cpp
@@ -12,7 +12,7 @@ class HTMLImportSheetsTest : public SimTest { protected: - HTMLImportSheetsTest() {} + HTMLImportSheetsTest() = default; void SetUp() override { SimTest::SetUp();
diff --git a/third_party/WebKit/Source/core/html/imports/HTMLImportTreeRoot.cpp b/third_party/WebKit/Source/core/html/imports/HTMLImportTreeRoot.cpp index 041049c5e..5af5dae 100644 --- a/third_party/WebKit/Source/core/html/imports/HTMLImportTreeRoot.cpp +++ b/third_party/WebKit/Source/core/html/imports/HTMLImportTreeRoot.cpp
@@ -25,7 +25,7 @@ ScheduleRecalcState(); // This recomputes initial state. } -HTMLImportTreeRoot::~HTMLImportTreeRoot() {} +HTMLImportTreeRoot::~HTMLImportTreeRoot() = default; void HTMLImportTreeRoot::Dispose() { for (const auto& import_child : imports_)
diff --git a/third_party/WebKit/Source/core/html/imports/LinkImport.cpp b/third_party/WebKit/Source/core/html/imports/LinkImport.cpp index 5f8873d..258268c 100644 --- a/third_party/WebKit/Source/core/html/imports/LinkImport.cpp +++ b/third_party/WebKit/Source/core/html/imports/LinkImport.cpp
@@ -54,7 +54,7 @@ LinkImport::LinkImport(HTMLLinkElement* owner) : LinkResource(owner), child_(nullptr) {} -LinkImport::~LinkImport() {} +LinkImport::~LinkImport() = default; Document* LinkImport::ImportedDocument() const { if (!child_ || !owner_ || !owner_->isConnected())
diff --git a/third_party/WebKit/Source/core/html/media/HTMLAudioElement.cpp b/third_party/WebKit/Source/core/html/media/HTMLAudioElement.cpp index 3b92d1e1..f706be2 100644 --- a/third_party/WebKit/Source/core/html/media/HTMLAudioElement.cpp +++ b/third_party/WebKit/Source/core/html/media/HTMLAudioElement.cpp
@@ -37,7 +37,7 @@ HTMLAudioElement* HTMLAudioElement::Create(Document& document) { HTMLAudioElement* audio = new HTMLAudioElement(document); - audio->EnsureUserAgentShadowRoot(); + audio->EnsureLegacyUserAgentShadowRootV0(); audio->PauseIfNeeded(); return audio; } @@ -46,7 +46,7 @@ Document& document, const AtomicString& src) { HTMLAudioElement* audio = new HTMLAudioElement(document); - audio->EnsureUserAgentShadowRoot(); + audio->EnsureLegacyUserAgentShadowRootV0(); audio->setPreload(AtomicString("auto")); if (!src.IsNull()) audio->SetSrc(src);
diff --git a/third_party/WebKit/Source/core/html/media/HTMLMediaElement.cpp b/third_party/WebKit/Source/core/html/media/HTMLMediaElement.cpp index a1c73dbf..565b337 100644 --- a/third_party/WebKit/Source/core/html/media/HTMLMediaElement.cpp +++ b/third_party/WebKit/Source/core/html/media/HTMLMediaElement.cpp
@@ -3631,7 +3631,7 @@ } TextTrackContainer& HTMLMediaElement::EnsureTextTrackContainer() { - ShadowRoot& shadow_root = EnsureUserAgentShadowRoot(); + ShadowRoot& shadow_root = EnsureLegacyUserAgentShadowRootV0(); AssertShadowRootChildren(shadow_root); Node* first_child = shadow_root.firstChild(); @@ -3760,7 +3760,7 @@ if (GetMediaControls()) return; - ShadowRoot& shadow_root = EnsureUserAgentShadowRoot(); + ShadowRoot& shadow_root = EnsureLegacyUserAgentShadowRootV0(); media_controls_ = CoreInitializer::GetInstance().CreateMediaControls(*this, shadow_root);
diff --git a/third_party/WebKit/Source/core/html/media/HTMLMediaElement.h b/third_party/WebKit/Source/core/html/media/HTMLMediaElement.h index 4bca8d12..050badc 100644 --- a/third_party/WebKit/Source/core/html/media/HTMLMediaElement.h +++ b/third_party/WebKit/Source/core/html/media/HTMLMediaElement.h
@@ -678,7 +678,7 @@ explicit AudioClientImpl(AudioSourceProviderClient* client) : client_(client) {} - ~AudioClientImpl() override {} + ~AudioClientImpl() override = default; // WebAudioSourceProviderClient void SetFormat(size_t number_of_channels, float sample_rate) override; @@ -697,7 +697,7 @@ public: AudioSourceProviderImpl() : web_audio_source_provider_(nullptr) {} - ~AudioSourceProviderImpl() override {} + ~AudioSourceProviderImpl() override = default; // Wraps the given WebAudioSourceProvider. void Wrap(WebAudioSourceProvider*);
diff --git a/third_party/WebKit/Source/core/html/media/HTMLVideoElement.cpp b/third_party/WebKit/Source/core/html/media/HTMLVideoElement.cpp index 34fc776..ffb5e6d0 100644 --- a/third_party/WebKit/Source/core/html/media/HTMLVideoElement.cpp +++ b/third_party/WebKit/Source/core/html/media/HTMLVideoElement.cpp
@@ -80,7 +80,7 @@ HTMLVideoElement* HTMLVideoElement::Create(Document& document) { HTMLVideoElement* video = new HTMLVideoElement(document); - video->EnsureUserAgentShadowRoot(); + video->EnsureLegacyUserAgentShadowRootV0(); video->PauseIfNeeded(); return video; } @@ -514,7 +514,7 @@ const WebString& remote_device_friendly_name) { if (!remoting_interstitial_) { remoting_interstitial_ = new MediaRemotingInterstitial(*this); - ShadowRoot& shadow_root = EnsureUserAgentShadowRoot(); + ShadowRoot& shadow_root = EnsureLegacyUserAgentShadowRootV0(); shadow_root.InsertBefore(remoting_interstitial_, shadow_root.firstChild()); HTMLMediaElement::AssertShadowRootChildren(shadow_root); }
diff --git a/third_party/WebKit/Source/core/html/parser/BackgroundHTMLParser.cpp b/third_party/WebKit/Source/core/html/parser/BackgroundHTMLParser.cpp index 2dcb150..f090fe3 100644 --- a/third_party/WebKit/Source/core/html/parser/BackgroundHTMLParser.cpp +++ b/third_party/WebKit/Source/core/html/parser/BackgroundHTMLParser.cpp
@@ -134,7 +134,7 @@ DCHECK_GE(outstanding_token_limit_, pending_token_limit_); } -BackgroundHTMLParser::~BackgroundHTMLParser() {} +BackgroundHTMLParser::~BackgroundHTMLParser() = default; void BackgroundHTMLParser::AppendRawBytesFromMainThread( std::unique_ptr<Vector<char>> buffer) {
diff --git a/third_party/WebKit/Source/core/html/parser/CSSPreloadScanner.cpp b/third_party/WebKit/Source/core/html/parser/CSSPreloadScanner.cpp index b531720..a68856d 100644 --- a/third_party/WebKit/Source/core/html/parser/CSSPreloadScanner.cpp +++ b/third_party/WebKit/Source/core/html/parser/CSSPreloadScanner.cpp
@@ -42,9 +42,9 @@ namespace blink { -CSSPreloadScanner::CSSPreloadScanner() {} +CSSPreloadScanner::CSSPreloadScanner() = default; -CSSPreloadScanner::~CSSPreloadScanner() {} +CSSPreloadScanner::~CSSPreloadScanner() = default; void CSSPreloadScanner::Reset() { state_ = kInitial; @@ -265,7 +265,7 @@ : kScanOnly), preloader_(preloader) {} -CSSPreloaderResourceClient::~CSSPreloaderResourceClient() {} +CSSPreloaderResourceClient::~CSSPreloaderResourceClient() = default; void CSSPreloaderResourceClient::NotifyFinished(Resource*) { MaybeClearResource();
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp b/third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp index d494b3deb..8f449d3 100644 --- a/third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp +++ b/third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp
@@ -158,7 +158,7 @@ DCHECK(!document.IsPrefetchOnly() || !ShouldUseThreading()); } -HTMLDocumentParser::~HTMLDocumentParser() {} +HTMLDocumentParser::~HTMLDocumentParser() = default; void HTMLDocumentParser::Dispose() { // In Oilpan, HTMLDocumentParser can die together with Document, and detach()
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLElementStack.cpp b/third_party/WebKit/Source/core/html/parser/HTMLElementStack.cpp index 416910dae..d2e587b 100644 --- a/third_party/WebKit/Source/core/html/parser/HTMLElementStack.cpp +++ b/third_party/WebKit/Source/core/html/parser/HTMLElementStack.cpp
@@ -129,7 +129,7 @@ body_element_(nullptr), stack_depth_(0) {} -HTMLElementStack::~HTMLElementStack() {} +HTMLElementStack::~HTMLElementStack() = default; bool HTMLElementStack::HasOnlyOneElement() const { return !TopRecord()->Next();
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLFormattingElementList.cpp b/third_party/WebKit/Source/core/html/parser/HTMLFormattingElementList.cpp index 18995568..102c0e4 100644 --- a/third_party/WebKit/Source/core/html/parser/HTMLFormattingElementList.cpp +++ b/third_party/WebKit/Source/core/html/parser/HTMLFormattingElementList.cpp
@@ -37,9 +37,9 @@ // Noah's Ark of Formatting Elements can fit three of each element. static const size_t kNoahsArkCapacity = 3; -HTMLFormattingElementList::HTMLFormattingElementList() {} +HTMLFormattingElementList::HTMLFormattingElementList() = default; -HTMLFormattingElementList::~HTMLFormattingElementList() {} +HTMLFormattingElementList::~HTMLFormattingElementList() = default; Element* HTMLFormattingElementList::ClosestElementInScopeWithName( const AtomicString& target_name) {
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLFormattingElementList.h b/third_party/WebKit/Source/core/html/parser/HTMLFormattingElementList.h index 803f775..9f9fd32 100644 --- a/third_party/WebKit/Source/core/html/parser/HTMLFormattingElementList.h +++ b/third_party/WebKit/Source/core/html/parser/HTMLFormattingElementList.h
@@ -55,7 +55,7 @@ explicit Entry(HTMLStackItem* item) : item_(item) {} enum MarkerEntryType { kMarkerEntry }; explicit Entry(MarkerEntryType) : item_(nullptr) {} - ~Entry() {} + ~Entry() = default; bool IsMarker() const { return !item_; }
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLMetaCharsetParser.cpp b/third_party/WebKit/Source/core/html/parser/HTMLMetaCharsetParser.cpp index bf46a1a8..c811668 100644 --- a/third_party/WebKit/Source/core/html/parser/HTMLMetaCharsetParser.cpp +++ b/third_party/WebKit/Source/core/html/parser/HTMLMetaCharsetParser.cpp
@@ -42,7 +42,7 @@ in_head_section_(true), done_checking_(false) {} -HTMLMetaCharsetParser::~HTMLMetaCharsetParser() {} +HTMLMetaCharsetParser::~HTMLMetaCharsetParser() = default; bool HTMLMetaCharsetParser::ProcessMeta() { const HTMLToken::AttributeList& token_attributes = token_.Attributes();
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLParserScheduler.cpp b/third_party/WebKit/Source/core/html/parser/HTMLParserScheduler.cpp index 6fe2f339..e4ba1d9 100644 --- a/third_party/WebKit/Source/core/html/parser/HTMLParserScheduler.cpp +++ b/third_party/WebKit/Source/core/html/parser/HTMLParserScheduler.cpp
@@ -39,14 +39,14 @@ PumpSession::PumpSession(unsigned& nesting_level) : NestingLevelIncrementer(nesting_level) {} -PumpSession::~PumpSession() {} +PumpSession::~PumpSession() = default; SpeculationsPumpSession::SpeculationsPumpSession(unsigned& nesting_level) : NestingLevelIncrementer(nesting_level), start_time_(CurrentTime()), processed_element_tokens_(0) {} -SpeculationsPumpSession::~SpeculationsPumpSession() {} +SpeculationsPumpSession::~SpeculationsPumpSession() = default; inline double SpeculationsPumpSession::ElapsedTime() const { return CurrentTime() - start_time_; @@ -63,7 +63,7 @@ loading_task_runner_(std::move(loading_task_runner)), is_paused_with_active_timer_(false) {} -HTMLParserScheduler::~HTMLParserScheduler() {} +HTMLParserScheduler::~HTMLParserScheduler() = default; void HTMLParserScheduler::Trace(blink::Visitor* visitor) { visitor->Trace(parser_);
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLPreloadScanner.cpp b/third_party/WebKit/Source/core/html/parser/HTMLPreloadScanner.cpp index 018bf35..ada8b6a7 100644 --- a/third_party/WebKit/Source/core/html/parser/HTMLPreloadScanner.cpp +++ b/third_party/WebKit/Source/core/html/parser/HTMLPreloadScanner.cpp
@@ -605,7 +605,7 @@ css_scanner_.SetReferrerPolicy(document_parameters_->referrer_policy); } -TokenPreloadScanner::~TokenPreloadScanner() {} +TokenPreloadScanner::~TokenPreloadScanner() = default; TokenPreloadScannerCheckpoint TokenPreloadScanner::CreateCheckpoint() { TokenPreloadScannerCheckpoint checkpoint = checkpoints_.size(); @@ -848,7 +848,7 @@ scanner_type), tokenizer_(HTMLTokenizer::Create(options)) {} -HTMLPreloadScanner::~HTMLPreloadScanner() {} +HTMLPreloadScanner::~HTMLPreloadScanner() = default; void HTMLPreloadScanner::AppendToEnd(const SegmentedString& source) { source_.Append(source);
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLTokenizer.cpp b/third_party/WebKit/Source/core/html/parser/HTMLTokenizer.cpp index 7b498d2..4ea425e6 100644 --- a/third_party/WebKit/Source/core/html/parser/HTMLTokenizer.cpp +++ b/third_party/WebKit/Source/core/html/parser/HTMLTokenizer.cpp
@@ -71,7 +71,7 @@ Reset(); } -HTMLTokenizer::~HTMLTokenizer() {} +HTMLTokenizer::~HTMLTokenizer() = default; void HTMLTokenizer::Reset() { state_ = HTMLTokenizer::kDataState;
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLTreeBuilder.cpp b/third_party/WebKit/Source/core/html/parser/HTMLTreeBuilder.cpp index 2d092b2..1b7602e 100644 --- a/third_party/WebKit/Source/core/html/parser/HTMLTreeBuilder.cpp +++ b/third_party/WebKit/Source/core/html/parser/HTMLTreeBuilder.cpp
@@ -257,7 +257,7 @@ ResetInsertionModeAppropriately(); } -HTMLTreeBuilder::~HTMLTreeBuilder() {} +HTMLTreeBuilder::~HTMLTreeBuilder() = default; void HTMLTreeBuilder::FragmentParsingContext::Init(DocumentFragment* fragment, Element* context_element) {
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLViewSourceParser.h b/third_party/WebKit/Source/core/html/parser/HTMLViewSourceParser.h index 8fcec37..7fbfe6a 100644 --- a/third_party/WebKit/Source/core/html/parser/HTMLViewSourceParser.h +++ b/third_party/WebKit/Source/core/html/parser/HTMLViewSourceParser.h
@@ -44,7 +44,7 @@ const String& mime_type) { return new HTMLViewSourceParser(document, mime_type); } - ~HTMLViewSourceParser() override {} + ~HTMLViewSourceParser() override = default; private: HTMLViewSourceParser(HTMLViewSourceDocument&, const String& mime_type);
diff --git a/third_party/WebKit/Source/core/html/parser/TextDocumentParser.cpp b/third_party/WebKit/Source/core/html/parser/TextDocumentParser.cpp index c80c415c..12fc3f33 100644 --- a/third_party/WebKit/Source/core/html/parser/TextDocumentParser.cpp +++ b/third_party/WebKit/Source/core/html/parser/TextDocumentParser.cpp
@@ -37,7 +37,7 @@ : HTMLDocumentParser(document, sync_policy), have_inserted_fake_pre_element_(false) {} -TextDocumentParser::~TextDocumentParser() {} +TextDocumentParser::~TextDocumentParser() = default; void TextDocumentParser::AppendBytes(const char* data, size_t length) { if (!have_inserted_fake_pre_element_)
diff --git a/third_party/WebKit/Source/core/html/parser/TextResourceDecoder.cpp b/third_party/WebKit/Source/core/html/parser/TextResourceDecoder.cpp index d781db7..34cbd28 100644 --- a/third_party/WebKit/Source/core/html/parser/TextResourceDecoder.cpp +++ b/third_party/WebKit/Source/core/html/parser/TextResourceDecoder.cpp
@@ -136,7 +136,7 @@ } } -TextResourceDecoder::~TextResourceDecoder() {} +TextResourceDecoder::~TextResourceDecoder() = default; void TextResourceDecoder::SetEncoding(const WTF::TextEncoding& encoding, EncodingSource source) {
diff --git a/third_party/WebKit/Source/core/html/parser/TokenizedChunkQueue.cpp b/third_party/WebKit/Source/core/html/parser/TokenizedChunkQueue.cpp index 182225b..e2c478c 100644 --- a/third_party/WebKit/Source/core/html/parser/TokenizedChunkQueue.cpp +++ b/third_party/WebKit/Source/core/html/parser/TokenizedChunkQueue.cpp
@@ -9,9 +9,9 @@ namespace blink { -TokenizedChunkQueue::TokenizedChunkQueue() {} +TokenizedChunkQueue::TokenizedChunkQueue() = default; -TokenizedChunkQueue::~TokenizedChunkQueue() {} +TokenizedChunkQueue::~TokenizedChunkQueue() = default; bool TokenizedChunkQueue::Enqueue( std::unique_ptr<HTMLDocumentParser::TokenizedChunk> chunk) {
diff --git a/third_party/WebKit/Source/core/html/track/AudioTrack.cpp b/third_party/WebKit/Source/core/html/track/AudioTrack.cpp index 7491d154..35c3220 100644 --- a/third_party/WebKit/Source/core/html/track/AudioTrack.cpp +++ b/third_party/WebKit/Source/core/html/track/AudioTrack.cpp
@@ -16,7 +16,7 @@ : TrackBase(WebMediaPlayer::kAudioTrack, kind, label, language, id), enabled_(enabled) {} -AudioTrack::~AudioTrack() {} +AudioTrack::~AudioTrack() = default; void AudioTrack::Trace(blink::Visitor* visitor) { ScriptWrappable::Trace(visitor);
diff --git a/third_party/WebKit/Source/core/html/track/AudioTrack.idl b/third_party/WebKit/Source/core/html/track/AudioTrack.idl index 966cc40..a948469 100644 --- a/third_party/WebKit/Source/core/html/track/AudioTrack.idl +++ b/third_party/WebKit/Source/core/html/track/AudioTrack.idl
@@ -5,7 +5,8 @@ // https://html.spec.whatwg.org/#audiotrack [ - RuntimeEnabled=AudioVideoTracks + RuntimeEnabled=AudioVideoTracks, + Exposed=Window ] interface AudioTrack { readonly attribute DOMString id; readonly attribute DOMString kind;
diff --git a/third_party/WebKit/Source/core/html/track/AudioTrackList.cpp b/third_party/WebKit/Source/core/html/track/AudioTrackList.cpp index ddc0b833..5ee4b8c 100644 --- a/third_party/WebKit/Source/core/html/track/AudioTrackList.cpp +++ b/third_party/WebKit/Source/core/html/track/AudioTrackList.cpp
@@ -10,7 +10,7 @@ return new AudioTrackList(media_element); } -AudioTrackList::~AudioTrackList() {} +AudioTrackList::~AudioTrackList() = default; AudioTrackList::AudioTrackList(HTMLMediaElement& media_element) : TrackListBase<AudioTrack>(&media_element) {}
diff --git a/third_party/WebKit/Source/core/html/track/AudioTrackList.idl b/third_party/WebKit/Source/core/html/track/AudioTrackList.idl index d92862be..0c898d2 100644 --- a/third_party/WebKit/Source/core/html/track/AudioTrackList.idl +++ b/third_party/WebKit/Source/core/html/track/AudioTrackList.idl
@@ -5,7 +5,8 @@ // https://html.spec.whatwg.org/#audiotracklist [ - RuntimeEnabled=AudioVideoTracks + RuntimeEnabled=AudioVideoTracks, + Exposed=Window ] interface AudioTrackList : EventTarget { readonly attribute unsigned long length; getter AudioTrack (unsigned long index);
diff --git a/third_party/WebKit/Source/core/html/track/LoadableTextTrack.cpp b/third_party/WebKit/Source/core/html/track/LoadableTextTrack.cpp index 3f4d82a..4aa282e 100644 --- a/third_party/WebKit/Source/core/html/track/LoadableTextTrack.cpp +++ b/third_party/WebKit/Source/core/html/track/LoadableTextTrack.cpp
@@ -40,7 +40,7 @@ DCHECK(track_element_); } -LoadableTextTrack::~LoadableTextTrack() {} +LoadableTextTrack::~LoadableTextTrack() = default; bool LoadableTextTrack::IsDefault() const { return track_element_->FastHasAttribute(HTMLNames::defaultAttr);
diff --git a/third_party/WebKit/Source/core/html/track/TextTrack.cpp b/third_party/WebKit/Source/core/html/track/TextTrack.cpp index c7787b8..418beae 100644 --- a/third_party/WebKit/Source/core/html/track/TextTrack.cpp +++ b/third_party/WebKit/Source/core/html/track/TextTrack.cpp
@@ -97,7 +97,7 @@ rendered_track_index_(kInvalidTrackIndex), has_been_configured_(false) {} -TextTrack::~TextTrack() {} +TextTrack::~TextTrack() = default; bool TextTrack::IsValidKindKeyword(const String& value) { if (value == SubtitlesKeyword())
diff --git a/third_party/WebKit/Source/core/html/track/TextTrackCue.h b/third_party/WebKit/Source/core/html/track/TextTrackCue.h index d14946f0..3217b42 100644 --- a/third_party/WebKit/Source/core/html/track/TextTrackCue.h +++ b/third_party/WebKit/Source/core/html/track/TextTrackCue.h
@@ -49,7 +49,7 @@ return cue; } - ~TextTrackCue() override {} + ~TextTrackCue() override = default; TextTrack* track() const; void SetTrack(TextTrack*);
diff --git a/third_party/WebKit/Source/core/html/track/TextTrackList.cpp b/third_party/WebKit/Source/core/html/track/TextTrackList.cpp index d2a677d..a8ffd4b4 100644 --- a/third_party/WebKit/Source/core/html/track/TextTrackList.cpp +++ b/third_party/WebKit/Source/core/html/track/TextTrackList.cpp
@@ -40,7 +40,7 @@ async_event_queue_( MediaElementEventQueue::Create(this, &owner_->GetDocument())) {} -TextTrackList::~TextTrackList() {} +TextTrackList::~TextTrackList() = default; unsigned TextTrackList::length() const { return add_track_tracks_.size() + element_tracks_.size() +
diff --git a/third_party/WebKit/Source/core/html/track/TrackBase.cpp b/third_party/WebKit/Source/core/html/track/TrackBase.cpp index b9cf04a..b2d0cc6 100644 --- a/third_party/WebKit/Source/core/html/track/TrackBase.cpp +++ b/third_party/WebKit/Source/core/html/track/TrackBase.cpp
@@ -46,7 +46,7 @@ id_(id), media_element_(nullptr) {} -TrackBase::~TrackBase() {} +TrackBase::~TrackBase() = default; void TrackBase::Trace(blink::Visitor* visitor) { Supplementable<TrackBase>::Trace(visitor);
diff --git a/third_party/WebKit/Source/core/html/track/TrackEvent.cpp b/third_party/WebKit/Source/core/html/track/TrackEvent.cpp index fcc8fb9..8a28ddf 100644 --- a/third_party/WebKit/Source/core/html/track/TrackEvent.cpp +++ b/third_party/WebKit/Source/core/html/track/TrackEvent.cpp
@@ -33,7 +33,7 @@ namespace blink { -TrackEvent::TrackEvent() {} +TrackEvent::TrackEvent() = default; TrackEvent::TrackEvent(const AtomicString& type, const TrackEventInit& initializer) @@ -52,7 +52,7 @@ NOTREACHED(); } -TrackEvent::~TrackEvent() {} +TrackEvent::~TrackEvent() = default; const AtomicString& TrackEvent::InterfaceName() const { return EventNames::TrackEvent;
diff --git a/third_party/WebKit/Source/core/html/track/TrackListBase.h b/third_party/WebKit/Source/core/html/track/TrackListBase.h index e1fc486..658878e8 100644 --- a/third_party/WebKit/Source/core/html/track/TrackListBase.h +++ b/third_party/WebKit/Source/core/html/track/TrackListBase.h
@@ -19,7 +19,7 @@ explicit TrackListBase(HTMLMediaElement* media_element) : media_element_(media_element) {} - ~TrackListBase() override {} + ~TrackListBase() override = default; unsigned length() const { return tracks_.size(); } T* AnonymousIndexedGetter(unsigned index) const {
diff --git a/third_party/WebKit/Source/core/html/track/VideoTrack.cpp b/third_party/WebKit/Source/core/html/track/VideoTrack.cpp index d2adb1195..d4b021c 100644 --- a/third_party/WebKit/Source/core/html/track/VideoTrack.cpp +++ b/third_party/WebKit/Source/core/html/track/VideoTrack.cpp
@@ -16,7 +16,7 @@ : TrackBase(WebMediaPlayer::kVideoTrack, kind, label, language, id), selected_(selected) {} -VideoTrack::~VideoTrack() {} +VideoTrack::~VideoTrack() = default; void VideoTrack::Trace(blink::Visitor* visitor) { ScriptWrappable::Trace(visitor);
diff --git a/third_party/WebKit/Source/core/html/track/VideoTrack.idl b/third_party/WebKit/Source/core/html/track/VideoTrack.idl index a676ed3..52965bdc 100644 --- a/third_party/WebKit/Source/core/html/track/VideoTrack.idl +++ b/third_party/WebKit/Source/core/html/track/VideoTrack.idl
@@ -5,7 +5,8 @@ // https://html.spec.whatwg.org/#videotrack [ - RuntimeEnabled=AudioVideoTracks + RuntimeEnabled=AudioVideoTracks, + Exposed=Window ] interface VideoTrack { readonly attribute DOMString id; readonly attribute DOMString kind;
diff --git a/third_party/WebKit/Source/core/html/track/VideoTrackList.cpp b/third_party/WebKit/Source/core/html/track/VideoTrackList.cpp index b2b54fb..75740a77 100644 --- a/third_party/WebKit/Source/core/html/track/VideoTrackList.cpp +++ b/third_party/WebKit/Source/core/html/track/VideoTrackList.cpp
@@ -13,7 +13,7 @@ return new VideoTrackList(media_element); } -VideoTrackList::~VideoTrackList() {} +VideoTrackList::~VideoTrackList() = default; VideoTrackList::VideoTrackList(HTMLMediaElement& media_element) : TrackListBase<VideoTrack>(&media_element) {}
diff --git a/third_party/WebKit/Source/core/html/track/VideoTrackList.idl b/third_party/WebKit/Source/core/html/track/VideoTrackList.idl index 34017b5..b1a914f 100644 --- a/third_party/WebKit/Source/core/html/track/VideoTrackList.idl +++ b/third_party/WebKit/Source/core/html/track/VideoTrackList.idl
@@ -5,7 +5,8 @@ // https://html.spec.whatwg.org/#videotracklist [ - RuntimeEnabled=AudioVideoTracks + RuntimeEnabled=AudioVideoTracks, + Exposed=Window ] interface VideoTrackList : EventTarget { readonly attribute unsigned long length; getter VideoTrack (unsigned long index);
diff --git a/third_party/WebKit/Source/core/html/track/vtt/VTTCue.cpp b/third_party/WebKit/Source/core/html/track/vtt/VTTCue.cpp index d0b9cd2..a5b167a 100644 --- a/third_party/WebKit/Source/core/html/track/vtt/VTTCue.cpp +++ b/third_party/WebKit/Source/core/html/track/vtt/VTTCue.cpp
@@ -243,7 +243,7 @@ cue_background_box_->SetShadowPseudoId(CueShadowPseudoId()); } -VTTCue::~VTTCue() {} +VTTCue::~VTTCue() = default; #ifndef NDEBUG String VTTCue::ToString() const { @@ -590,7 +590,7 @@ class VTTTextRunIterator : public TextRunIterator { public: - VTTTextRunIterator() {} + VTTTextRunIterator() = default; VTTTextRunIterator(const TextRun* text_run, unsigned offset) : TextRunIterator(text_run, offset) {}
diff --git a/third_party/WebKit/Source/core/html/track/vtt/VTTParser.h b/third_party/WebKit/Source/core/html/track/vtt/VTTParser.h index 9b24c76..ce501965 100644 --- a/third_party/WebKit/Source/core/html/track/vtt/VTTParser.h +++ b/third_party/WebKit/Source/core/html/track/vtt/VTTParser.h
@@ -48,7 +48,7 @@ class VTTParserClient : public GarbageCollectedMixin { public: - virtual ~VTTParserClient() {} + virtual ~VTTParserClient() = default; virtual void NewCuesParsed() = 0; virtual void FileFailedToParse() = 0; @@ -73,7 +73,7 @@ static VTTParser* Create(VTTParserClient* client, Document& document) { return new VTTParser(client, document); } - ~VTTParser() {} + ~VTTParser() = default; static inline bool IsRecognizedTag(const AtomicString& tag_name) { return tag_name == HTMLNames::iTag || tag_name == HTMLNames::bTag ||
diff --git a/third_party/WebKit/Source/core/html/track/vtt/VTTRegion.cpp b/third_party/WebKit/Source/core/html/track/vtt/VTTRegion.cpp index 77ab90ed..5c6063f 100644 --- a/third_party/WebKit/Source/core/html/track/vtt/VTTRegion.cpp +++ b/third_party/WebKit/Source/core/html/track/vtt/VTTRegion.cpp
@@ -98,7 +98,7 @@ this, &VTTRegion::ScrollTimerFired) {} -VTTRegion::~VTTRegion() {} +VTTRegion::~VTTRegion() = default; void VTTRegion::setId(const String& id) { id_ = id;
diff --git a/third_party/WebKit/Source/core/imagebitmap/ImageBitmap.cpp b/third_party/WebKit/Source/core/imagebitmap/ImageBitmap.cpp index 3397512..1908c5e 100644 --- a/third_party/WebKit/Source/core/imagebitmap/ImageBitmap.cpp +++ b/third_party/WebKit/Source/core/imagebitmap/ImageBitmap.cpp
@@ -727,7 +727,7 @@ return std::move(image_); } -ImageBitmap::~ImageBitmap() {} +ImageBitmap::~ImageBitmap() = default; ImageBitmap* ImageBitmap::Create(ImageElementBase* image, Optional<IntRect> crop_rect,
diff --git a/third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.h b/third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.h index 9670ab3..c787222 100644 --- a/third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.h +++ b/third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.h
@@ -90,7 +90,7 @@ Optional<IntRect> crop_rect, const ImageBitmapOptions&); - virtual ~ImageBitmapFactories() {} + virtual ~ImageBitmapFactories() = default; void Trace(blink::Visitor*); @@ -114,7 +114,7 @@ void Trace(blink::Visitor*); - ~ImageBitmapLoader() override {} + ~ImageBitmapLoader() override = default; private: ImageBitmapLoader(ImageBitmapFactories&,
diff --git a/third_party/WebKit/Source/core/imagebitmap/ImageBitmapSource.h b/third_party/WebKit/Source/core/imagebitmap/ImageBitmapSource.h index 7ce2371..e15daa0 100644 --- a/third_party/WebKit/Source/core/imagebitmap/ImageBitmapSource.h +++ b/third_party/WebKit/Source/core/imagebitmap/ImageBitmapSource.h
@@ -32,7 +32,7 @@ static ScriptPromise FulfillImageBitmap(ScriptState*, ImageBitmap*); protected: - virtual ~ImageBitmapSource() {} + virtual ~ImageBitmapSource() = default; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/input/BoundaryEventDispatcher.h b/third_party/WebKit/Source/core/input/BoundaryEventDispatcher.h index f7b8bfb2..4e0410c 100644 --- a/third_party/WebKit/Source/core/input/BoundaryEventDispatcher.h +++ b/third_party/WebKit/Source/core/input/BoundaryEventDispatcher.h
@@ -16,8 +16,8 @@ STACK_ALLOCATED(); public: - BoundaryEventDispatcher() {} - virtual ~BoundaryEventDispatcher() {} + BoundaryEventDispatcher() = default; + virtual ~BoundaryEventDispatcher() = default; void SendBoundaryEvents(EventTarget* exited_target, EventTarget* entered_target);
diff --git a/third_party/WebKit/Source/core/input/EventHandlerTest.cpp b/third_party/WebKit/Source/core/input/EventHandlerTest.cpp index 10be917..a1b38de 100644 --- a/third_party/WebKit/Source/core/input/EventHandlerTest.cpp +++ b/third_party/WebKit/Source/core/input/EventHandlerTest.cpp
@@ -768,7 +768,7 @@ class TooltipCapturingChromeClient : public EmptyChromeClient { public: - TooltipCapturingChromeClient() {} + TooltipCapturingChromeClient() = default; void SetToolTip(LocalFrame&, const String& str, TextDirection) override { last_tool_tip_ = str; @@ -782,7 +782,7 @@ class EventHandlerTooltipTest : public EventHandlerTest { public: - EventHandlerTooltipTest() {} + EventHandlerTooltipTest() = default; void SetUp() override { chrome_client_ = new TooltipCapturingChromeClient(); @@ -828,7 +828,7 @@ class UnbufferedInputEventsTrackingChromeClient : public EmptyChromeClient { public: - UnbufferedInputEventsTrackingChromeClient() {} + UnbufferedInputEventsTrackingChromeClient() = default; void RequestUnbufferedInputEvents(LocalFrame*) override { received_unbuffered_request_ = true; @@ -897,7 +897,7 @@ class NavigationCapturingFrameClient : public EmptyLocalFrameClient { public: - NavigationCapturingFrameClient() {} + NavigationCapturingFrameClient() = default; bool NavigateBackForward(int offset) const override { offset_ = offset; @@ -912,7 +912,7 @@ class EventHandlerNavigationTest : public EventHandlerTest { public: - EventHandlerNavigationTest() {} + EventHandlerNavigationTest() = default; void SetUp() override { frame_client_ = new NavigationCapturingFrameClient();
diff --git a/third_party/WebKit/Source/core/input/TouchEventManager.h b/third_party/WebKit/Source/core/input/TouchEventManager.h index 6a08fdb3..c592712c 100644 --- a/third_party/WebKit/Source/core/input/TouchEventManager.h +++ b/third_party/WebKit/Source/core/input/TouchEventManager.h
@@ -52,7 +52,7 @@ public: void Trace(blink::Visitor* visitor) { visitor->Trace(target_); } - TouchPointAttributes() {} + TouchPointAttributes() = default; explicit TouchPointAttributes(WebPointerEvent event) : event_(event), stale_(false) {}
diff --git a/third_party/WebKit/Source/core/input/TouchList.h b/third_party/WebKit/Source/core/input/TouchList.h index 05c2f92..dccaaa8 100644 --- a/third_party/WebKit/Source/core/input/TouchList.h +++ b/third_party/WebKit/Source/core/input/TouchList.h
@@ -60,7 +60,7 @@ void Trace(blink::Visitor*); private: - TouchList() {} + TouchList() = default; TouchList(HeapVector<Member<Touch>>& touches) { values_.swap(touches); }
diff --git a/third_party/WebKit/Source/core/inspector/ConsoleMessage.cpp b/third_party/WebKit/Source/core/inspector/ConsoleMessage.cpp index 4605c4e..ca5b499 100644 --- a/third_party/WebKit/Source/core/inspector/ConsoleMessage.cpp +++ b/third_party/WebKit/Source/core/inspector/ConsoleMessage.cpp
@@ -67,7 +67,7 @@ timestamp_(WTF::CurrentTimeMS()), frame_(nullptr) {} -ConsoleMessage::~ConsoleMessage() {} +ConsoleMessage::~ConsoleMessage() = default; SourceLocation* ConsoleMessage::Location() const { return location_.get();
diff --git a/third_party/WebKit/Source/core/inspector/DevToolsEmulator.cpp b/third_party/WebKit/Source/core/inspector/DevToolsEmulator.cpp index 5006507..3c8f7e8e 100644 --- a/third_party/WebKit/Source/core/inspector/DevToolsEmulator.cpp +++ b/third_party/WebKit/Source/core/inspector/DevToolsEmulator.cpp
@@ -101,7 +101,7 @@ web_view->GetPage()->GetSettings().GetScriptEnabled()), script_execution_disabled_(false) {} -DevToolsEmulator::~DevToolsEmulator() {} +DevToolsEmulator::~DevToolsEmulator() = default; DevToolsEmulator* DevToolsEmulator::Create(WebViewImpl* web_view_base) { return new DevToolsEmulator(web_view_base);
diff --git a/third_party/WebKit/Source/core/inspector/DevToolsHost.cpp b/third_party/WebKit/Source/core/inspector/DevToolsHost.cpp index 744b473..8e0fe54 100644 --- a/third_party/WebKit/Source/core/inspector/DevToolsHost.cpp +++ b/third_party/WebKit/Source/core/inspector/DevToolsHost.cpp
@@ -116,7 +116,7 @@ frontend_frame_(frontend_frame), menu_provider_(nullptr) {} -DevToolsHost::~DevToolsHost() {} +DevToolsHost::~DevToolsHost() = default; void DevToolsHost::Trace(blink::Visitor* visitor) { visitor->Trace(client_);
diff --git a/third_party/WebKit/Source/core/inspector/InspectorApplicationCacheAgent.h b/third_party/WebKit/Source/core/inspector/InspectorApplicationCacheAgent.h index feeb094b..b073ade1 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorApplicationCacheAgent.h +++ b/third_party/WebKit/Source/core/inspector/InspectorApplicationCacheAgent.h
@@ -44,7 +44,7 @@ InspectedFrames* inspected_frames) { return new InspectorApplicationCacheAgent(inspected_frames); } - ~InspectorApplicationCacheAgent() override {} + ~InspectorApplicationCacheAgent() override = default; void Trace(blink::Visitor*) override; // InspectorBaseAgent
diff --git a/third_party/WebKit/Source/core/inspector/InspectorAuditsAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorAuditsAgent.cpp index 169bfd2..be189f47 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorAuditsAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorAuditsAgent.cpp
@@ -67,7 +67,7 @@ InspectorAuditsAgent::InspectorAuditsAgent(InspectorNetworkAgent* network_agent) : network_agent_(network_agent) {} -InspectorAuditsAgent::~InspectorAuditsAgent() {} +InspectorAuditsAgent::~InspectorAuditsAgent() = default; protocol::Response InspectorAuditsAgent::getEncodedResponse( const String& request_id,
diff --git a/third_party/WebKit/Source/core/inspector/InspectorBaseAgent.h b/third_party/WebKit/Source/core/inspector/InspectorBaseAgent.h index 9aa36863d..8b3c98c 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorBaseAgent.h +++ b/third_party/WebKit/Source/core/inspector/InspectorBaseAgent.h
@@ -45,8 +45,8 @@ class CORE_EXPORT InspectorAgent : public GarbageCollectedFinalized<InspectorAgent> { public: - InspectorAgent() {} - virtual ~InspectorAgent() {} + InspectorAgent() = default; + virtual ~InspectorAgent() = default; virtual void Trace(blink::Visitor* visitor) {} virtual void Restore() {} @@ -63,7 +63,7 @@ class InspectorBaseAgent : public InspectorAgent, public DomainMetainfo::BackendClass { public: - ~InspectorBaseAgent() override {} + ~InspectorBaseAgent() override = default; void Init(CoreProbeSink* instrumenting_agents, protocol::UberDispatcher* dispatcher, @@ -97,7 +97,7 @@ } protected: - InspectorBaseAgent() {} + InspectorBaseAgent() = default; typename DomainMetainfo::FrontendClass* GetFrontend() const { return frontend_.get();
diff --git a/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp index 4778770..4c4fe133 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp
@@ -662,7 +662,7 @@ resource_content_loader_client_id_( resource_content_loader->CreateClientId()) {} -InspectorCSSAgent::~InspectorCSSAgent() {} +InspectorCSSAgent::~InspectorCSSAgent() = default; void InspectorCSSAgent::Restore() { if (state_->booleanProperty(CSSAgentState::kCssAgentEnabled, false))
diff --git a/third_party/WebKit/Source/core/inspector/InspectorDOMAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorDOMAgent.cpp index 8dfcc5b..c73441e 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorDOMAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorDOMAgent.cpp
@@ -236,7 +236,7 @@ last_node_id_(1), suppress_attribute_modified_event_(false) {} -InspectorDOMAgent::~InspectorDOMAgent() {} +InspectorDOMAgent::~InspectorDOMAgent() = default; void InspectorDOMAgent::Restore() { if (!Enabled()) @@ -394,8 +394,7 @@ DCHECK(candidate); ShadowRoot* shadow_root = ToShadowRoot(candidate); - return shadow_root->GetType() == ShadowRootType::kUserAgent ? shadow_root - : nullptr; + return shadow_root->IsUserAgent() ? shadow_root : nullptr; } Response InspectorDOMAgent::AssertEditableNode(int node_id, Node*& node) { @@ -929,8 +928,7 @@ ElementShadow* element_shadow = element.Shadow(); if (element_shadow) { ShadowRoot& shadow_root = element_shadow->YoungestShadowRoot(); - if (shadow_root.GetType() != ShadowRootType::kUserAgent || - include_user_agent_shadow_dom) + if (!shadow_root.IsUserAgent() || include_user_agent_shadow_dom) return &shadow_root; } } @@ -1387,7 +1385,8 @@ static protocol::DOM::ShadowRootType GetShadowRootType( ShadowRoot* shadow_root) { switch (shadow_root->GetType()) { - case ShadowRootType::kUserAgent: + case ShadowRootType::kLegacyUserAgentV0: + case ShadowRootType::kUserAgentV1: return protocol::DOM::ShadowRootTypeEnum::UserAgent; case ShadowRootType::V0: case ShadowRootType::kOpen:
diff --git a/third_party/WebKit/Source/core/inspector/InspectorDOMAgent.h b/third_party/WebKit/Source/core/inspector/InspectorDOMAgent.h index 4918958..e2b43b8 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorDOMAgent.h +++ b/third_party/WebKit/Source/core/inspector/InspectorDOMAgent.h
@@ -70,7 +70,7 @@ : public InspectorBaseAgent<protocol::DOM::Metainfo> { public: struct CORE_EXPORT DOMListener : public GarbageCollectedMixin { - virtual ~DOMListener() {} + virtual ~DOMListener() = default; virtual void DidAddDocument(Document*) = 0; virtual void DidRemoveDocument(Document*) = 0; virtual void DidRemoveDOMNode(Node*) = 0;
diff --git a/third_party/WebKit/Source/core/inspector/InspectorDOMDebuggerAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorDOMDebuggerAgent.cpp index 17c19b8..380a702 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorDOMDebuggerAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorDOMDebuggerAgent.cpp
@@ -194,7 +194,7 @@ v8_inspector::V8InspectorSession* v8_session) : isolate_(isolate), dom_agent_(dom_agent), v8_session_(v8_session) {} -InspectorDOMDebuggerAgent::~InspectorDOMDebuggerAgent() {} +InspectorDOMDebuggerAgent::~InspectorDOMDebuggerAgent() = default; void InspectorDOMDebuggerAgent::Trace(blink::Visitor* visitor) { visitor->Trace(dom_agent_);
diff --git a/third_party/WebKit/Source/core/inspector/InspectorDOMSnapshotAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorDOMSnapshotAgent.cpp index e4e5d0df..ebb4043d 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorDOMSnapshotAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorDOMSnapshotAgent.cpp
@@ -93,7 +93,7 @@ : inspected_frames_(inspected_frames), dom_debugger_agent_(dom_debugger_agent) {} -InspectorDOMSnapshotAgent::~InspectorDOMSnapshotAgent() {} +InspectorDOMSnapshotAgent::~InspectorDOMSnapshotAgent() = default; Response InspectorDOMSnapshotAgent::getSnapshot( std::unique_ptr<protocol::Array<String>> style_whitelist,
diff --git a/third_party/WebKit/Source/core/inspector/InspectorEmulationAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorEmulationAgent.cpp index 224f875..01a9b8b 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorEmulationAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorEmulationAgent.cpp
@@ -39,7 +39,7 @@ WebLocalFrameImpl* web_local_frame_impl) : web_local_frame_(web_local_frame_impl) {} -InspectorEmulationAgent::~InspectorEmulationAgent() {} +InspectorEmulationAgent::~InspectorEmulationAgent() = default; WebViewImpl* InspectorEmulationAgent::GetWebViewImpl() { return web_local_frame_->ViewImpl();
diff --git a/third_party/WebKit/Source/core/inspector/InspectorFrontendClient.h b/third_party/WebKit/Source/core/inspector/InspectorFrontendClient.h index 5bcdfaf..825c1bdd 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorFrontendClient.h +++ b/third_party/WebKit/Source/core/inspector/InspectorFrontendClient.h
@@ -41,7 +41,7 @@ class InspectorFrontendClient : public GarbageCollectedMixin { public: - virtual ~InspectorFrontendClient() {} + virtual ~InspectorFrontendClient() = default; virtual void SendMessageToEmbedder(const String&) = 0;
diff --git a/third_party/WebKit/Source/core/inspector/InspectorHighlight.cpp b/third_party/WebKit/Source/core/inspector/InspectorHighlight.cpp index 4d35af6..20ce02f 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorHighlight.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorHighlight.cpp
@@ -29,7 +29,7 @@ public: PathBuilder() : path_(protocol::ListValue::create()) {} - virtual ~PathBuilder() {} + virtual ~PathBuilder() = default; std::unique_ptr<protocol::ListValue> Release() { return std::move(path_); } @@ -320,7 +320,7 @@ element_info_ = BuildElementInfo(ToElement(node)); } -InspectorHighlight::~InspectorHighlight() {} +InspectorHighlight::~InspectorHighlight() = default; void InspectorHighlight::AppendQuad(const FloatQuad& quad, const Color& fill_color,
diff --git a/third_party/WebKit/Source/core/inspector/InspectorHistory.cpp b/third_party/WebKit/Source/core/inspector/InspectorHistory.cpp index 4844d5d1..857c32d 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorHistory.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorHistory.cpp
@@ -54,7 +54,7 @@ InspectorHistory::Action::Action(const String& name) : name_(name) {} -InspectorHistory::Action::~Action() {} +InspectorHistory::Action::~Action() = default; void InspectorHistory::Action::Trace(blink::Visitor* visitor) {}
diff --git a/third_party/WebKit/Source/core/inspector/InspectorLayerTreeAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorLayerTreeAgent.cpp index 21cbe27..72771df9 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorLayerTreeAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorLayerTreeAgent.cpp
@@ -238,7 +238,7 @@ client_(client), suppress_layer_paint_events_(false) {} -InspectorLayerTreeAgent::~InspectorLayerTreeAgent() {} +InspectorLayerTreeAgent::~InspectorLayerTreeAgent() = default; void InspectorLayerTreeAgent::Trace(blink::Visitor* visitor) { visitor->Trace(inspected_frames_);
diff --git a/third_party/WebKit/Source/core/inspector/InspectorLayerTreeAgent.h b/third_party/WebKit/Source/core/inspector/InspectorLayerTreeAgent.h index fdc40e64..d922dc6 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorLayerTreeAgent.h +++ b/third_party/WebKit/Source/core/inspector/InspectorLayerTreeAgent.h
@@ -54,7 +54,7 @@ public: class Client { public: - virtual ~Client() {} + virtual ~Client() = default; virtual bool IsInspectorLayer(GraphicsLayer*) = 0; };
diff --git a/third_party/WebKit/Source/core/inspector/InspectorLogAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorLogAgent.cpp index b989c2f..f212788 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorLogAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorLogAgent.cpp
@@ -85,7 +85,7 @@ performance_monitor_(performance_monitor), v8_session_(v8_session) {} -InspectorLogAgent::~InspectorLogAgent() {} +InspectorLogAgent::~InspectorLogAgent() = default; void InspectorLogAgent::Trace(blink::Visitor* visitor) { visitor->Trace(storage_);
diff --git a/third_party/WebKit/Source/core/inspector/InspectorMemoryAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorMemoryAgent.cpp index 5d6a860..2fd5a1f 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorMemoryAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorMemoryAgent.cpp
@@ -43,7 +43,7 @@ InspectorMemoryAgent::InspectorMemoryAgent(InspectedFrames* inspected_frames) : detector_(nullptr), callback_(nullptr), frames_(inspected_frames) {} -InspectorMemoryAgent::~InspectorMemoryAgent() {} +InspectorMemoryAgent::~InspectorMemoryAgent() = default; Response InspectorMemoryAgent::getDOMCounters(int* documents, int* nodes,
diff --git a/third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.cpp index 9c2f2be8..b52815d3 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.cpp
@@ -162,7 +162,7 @@ loader_ = FileReaderLoader::Create(FileReaderLoader::kReadByClient, this); } - ~InspectorFileReaderLoaderClient() override {} + ~InspectorFileReaderLoaderClient() override = default; void Start(ExecutionContext* execution_context) { raw_data_ = SharedBuffer::Create(); @@ -551,7 +551,7 @@ return response_object; } -InspectorNetworkAgent::~InspectorNetworkAgent() {} +InspectorNetworkAgent::~InspectorNetworkAgent() = default; void InspectorNetworkAgent::Trace(blink::Visitor* visitor) { visitor->Trace(inspected_frames_);
diff --git a/third_party/WebKit/Source/core/inspector/InspectorOverlayHost.h b/third_party/WebKit/Source/core/inspector/InspectorOverlayHost.h index 26990759..1e62f17 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorOverlayHost.h +++ b/third_party/WebKit/Source/core/inspector/InspectorOverlayHost.h
@@ -40,7 +40,7 @@ public: class Listener : public GarbageCollectedMixin { public: - virtual ~Listener() {} + virtual ~Listener() = default; virtual void OverlayResumed() = 0; virtual void OverlaySteppedOver() = 0; };
diff --git a/third_party/WebKit/Source/core/inspector/InspectorPageAgent.h b/third_party/WebKit/Source/core/inspector/InspectorPageAgent.h index e2f813b..d3bc089d 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorPageAgent.h +++ b/third_party/WebKit/Source/core/inspector/InspectorPageAgent.h
@@ -64,7 +64,7 @@ public: class Client { public: - virtual ~Client() {} + virtual ~Client() = default; virtual void PageLayoutInvalidated(bool resized) {} };
diff --git a/third_party/WebKit/Source/core/inspector/InspectorResourceContainer.cpp b/third_party/WebKit/Source/core/inspector/InspectorResourceContainer.cpp index f6cccac..765f262a 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorResourceContainer.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorResourceContainer.cpp
@@ -12,7 +12,7 @@ InspectedFrames* inspected_frames) : inspected_frames_(inspected_frames) {} -InspectorResourceContainer::~InspectorResourceContainer() {} +InspectorResourceContainer::~InspectorResourceContainer() = default; void InspectorResourceContainer::Trace(blink::Visitor* visitor) { visitor->Trace(inspected_frames_);
diff --git a/third_party/WebKit/Source/core/inspector/InspectorSession.h b/third_party/WebKit/Source/core/inspector/InspectorSession.h index 5330fe1..acd72f2 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorSession.h +++ b/third_party/WebKit/Source/core/inspector/InspectorSession.h
@@ -31,7 +31,7 @@ int call_id, const String& response, const String& state) = 0; - virtual ~Client() {} + virtual ~Client() = default; }; InspectorSession(Client*,
diff --git a/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.cpp b/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.cpp index 7f22cb7..ea55a8e 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.cpp
@@ -730,7 +730,7 @@ DCHECK(style_); } -InspectorStyle::~InspectorStyle() {} +InspectorStyle::~InspectorStyle() = default; std::unique_ptr<protocol::CSS::CSSStyle> InspectorStyle::BuildObjectForStyle() { std::unique_ptr<protocol::CSS::CSSStyle> result = StyleWithProperties(); @@ -982,7 +982,7 @@ InnerSetText(text, false); } -InspectorStyleSheet::~InspectorStyleSheet() {} +InspectorStyleSheet::~InspectorStyleSheet() = default; void InspectorStyleSheet::Trace(blink::Visitor* visitor) { visitor->Trace(resource_container_);
diff --git a/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.h b/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.h index 9a9530a1..8bf521e 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.h +++ b/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.h
@@ -85,11 +85,11 @@ public: class CORE_EXPORT Listener { public: - Listener() {} - virtual ~Listener() {} + Listener() = default; + virtual ~Listener() = default; virtual void StyleSheetChanged(InspectorStyleSheetBase*) = 0; }; - virtual ~InspectorStyleSheetBase() {} + virtual ~InspectorStyleSheetBase() = default; virtual void Trace(blink::Visitor* visitor) {} String Id() { return id_; }
diff --git a/third_party/WebKit/Source/core/inspector/InspectorTaskRunner.cpp b/third_party/WebKit/Source/core/inspector/InspectorTaskRunner.cpp index f108e792..948eb94d 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorTaskRunner.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorTaskRunner.cpp
@@ -22,7 +22,7 @@ InspectorTaskRunner::InspectorTaskRunner() : ignore_interrupts_(false), killed_(false) {} -InspectorTaskRunner::~InspectorTaskRunner() {} +InspectorTaskRunner::~InspectorTaskRunner() = default; void InspectorTaskRunner::AppendTask(Task task) { MutexLocker lock(mutex_);
diff --git a/third_party/WebKit/Source/core/inspector/InspectorTraceEvents.h b/third_party/WebKit/Source/core/inspector/InspectorTraceEvents.h index 11b31a1..54a5f09 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorTraceEvents.h +++ b/third_party/WebKit/Source/core/inspector/InspectorTraceEvents.h
@@ -72,7 +72,7 @@ class CORE_EXPORT InspectorTraceEvents : public GarbageCollected<InspectorTraceEvents> { public: - InspectorTraceEvents() {} + InspectorTraceEvents() = default; void WillSendRequest(ExecutionContext*, unsigned long identifier, @@ -406,7 +406,7 @@ int cache_size; bool rejected; }; - V8CacheResult() {} + V8CacheResult() = default; V8CacheResult(Optional<ProduceResult>, Optional<ConsumeResult>); Optional<ProduceResult> produce_result;
diff --git a/third_party/WebKit/Source/core/inspector/InspectorTracingAgent.h b/third_party/WebKit/Source/core/inspector/InspectorTracingAgent.h index 9858281..e95a1bc 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorTracingAgent.h +++ b/third_party/WebKit/Source/core/inspector/InspectorTracingAgent.h
@@ -24,7 +24,7 @@ public: class Client { public: - virtual ~Client() {} + virtual ~Client() = default; virtual void ShowReloadingBlanket() = 0; virtual void HideReloadingBlanket() = 0;
diff --git a/third_party/WebKit/Source/core/inspector/InspectorWorkerAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorWorkerAgent.cpp index 31bb30b..0c15f59 100644 --- a/third_party/WebKit/Source/core/inspector/InspectorWorkerAgent.cpp +++ b/third_party/WebKit/Source/core/inspector/InspectorWorkerAgent.cpp
@@ -52,7 +52,7 @@ InspectorWorkerAgent::InspectorWorkerAgent(InspectedFrames* inspected_frames) : inspected_frames_(inspected_frames) {} -InspectorWorkerAgent::~InspectorWorkerAgent() {} +InspectorWorkerAgent::~InspectorWorkerAgent() = default; void InspectorWorkerAgent::Restore() { if (!AutoAttachEnabled())
diff --git a/third_party/WebKit/Source/core/inspector/MainThreadDebugger.h b/third_party/WebKit/Source/core/inspector/MainThreadDebugger.h index b70415cc..887cc13 100644 --- a/third_party/WebKit/Source/core/inspector/MainThreadDebugger.h +++ b/third_party/WebKit/Source/core/inspector/MainThreadDebugger.h
@@ -54,7 +54,7 @@ USING_FAST_MALLOC(ClientMessageLoop); public: - virtual ~ClientMessageLoop() {} + virtual ~ClientMessageLoop() = default; virtual void Run(LocalFrame*) = 0; virtual void QuitNow() = 0; virtual void RunIfWaitingForDebugger(LocalFrame*) = 0;
diff --git a/third_party/WebKit/Source/core/inspector/NetworkResourcesData.cpp b/third_party/WebKit/Source/core/inspector/NetworkResourcesData.cpp index 74d218a..0fdcc2b 100644 --- a/third_party/WebKit/Source/core/inspector/NetworkResourcesData.cpp +++ b/third_party/WebKit/Source/core/inspector/NetworkResourcesData.cpp
@@ -188,7 +188,7 @@ maximum_resources_content_size_(total_buffer_size), maximum_single_resource_content_size_(resource_buffer_size) {} -NetworkResourcesData::~NetworkResourcesData() {} +NetworkResourcesData::~NetworkResourcesData() = default; void NetworkResourcesData::Trace(blink::Visitor* visitor) { visitor->Trace(request_id_to_resource_data_map_);
diff --git a/third_party/WebKit/Source/core/inspector/ThreadDebugger.cpp b/third_party/WebKit/Source/core/inspector/ThreadDebugger.cpp index ba27dcb..bba948c 100644 --- a/third_party/WebKit/Source/core/inspector/ThreadDebugger.cpp +++ b/third_party/WebKit/Source/core/inspector/ThreadDebugger.cpp
@@ -37,7 +37,7 @@ v8_inspector_(v8_inspector::V8Inspector::create(isolate, this)), v8_tracing_cpu_profiler_(v8::TracingCpuProfiler::Create(isolate)) {} -ThreadDebugger::~ThreadDebugger() {} +ThreadDebugger::~ThreadDebugger() = default; // static ThreadDebugger* ThreadDebugger::From(v8::Isolate* isolate) {
diff --git a/third_party/WebKit/Source/core/inspector/browser_protocol.json b/third_party/WebKit/Source/core/inspector/browser_protocol.json index 0cf1d72..b73a533 100644 --- a/third_party/WebKit/Source/core/inspector/browser_protocol.json +++ b/third_party/WebKit/Source/core/inspector/browser_protocol.json
@@ -989,6 +989,60 @@ "$ref": "WindowState" } ] + }, + { + "id": "Bucket", + "description": "Chrome histogram bucket.", + "experimental": true, + "type": "object", + "properties": [ + { + "name": "low", + "description": "Minimum value (inclusive).", + "type": "integer" + }, + { + "name": "high", + "description": "Maximum value (exclusive).", + "type": "integer" + }, + { + "name": "count", + "description": "Number of samples.", + "type": "integer" + } + ] + }, + { + "id": "Histogram", + "description": "Chrome histogram.", + "experimental": true, + "type": "object", + "properties": [ + { + "name": "name", + "description": "Name.", + "type": "string" + }, + { + "name": "sum", + "description": "Sum of sample values.", + "type": "integer" + }, + { + "name": "count", + "description": "Total number of samples.", + "type": "integer" + }, + { + "name": "buckets", + "description": "Buckets.", + "type": "array", + "items": { + "$ref": "Bucket" + } + } + ] } ], "commands": [ @@ -1028,6 +1082,48 @@ ] }, { + "name": "getHistograms", + "description": "Get Chrome histograms.", + "experimental": true, + "parameters": [ + { + "name": "query", + "description": "Requested substring in name. Only histograms which have query as a\nsubstring in their name are extracted. An empty or absent query returns\nall histograms.", + "optional": true, + "type": "string" + } + ], + "returns": [ + { + "name": "histograms", + "description": "Histograms.", + "type": "array", + "items": { + "$ref": "Histogram" + } + } + ] + }, + { + "name": "getHistogram", + "description": "Get a Chrome histogram by name.", + "experimental": true, + "parameters": [ + { + "name": "name", + "description": "Requested histogram name.", + "type": "string" + } + ], + "returns": [ + { + "name": "histogram", + "description": "Histogram.", + "$ref": "Histogram" + } + ] + }, + { "name": "getWindowBounds", "description": "Get position and size of the browser window.", "experimental": true,
diff --git a/third_party/WebKit/Source/core/inspector/browser_protocol.pdl b/third_party/WebKit/Source/core/inspector/browser_protocol.pdl index c04abd6..8397eb8 100644 --- a/third_party/WebKit/Source/core/inspector/browser_protocol.pdl +++ b/third_party/WebKit/Source/core/inspector/browser_protocol.pdl
@@ -491,6 +491,48 @@ # V8 version. string jsVersion + # Chrome histogram bucket. + experimental type Bucket extends object + properties + # Minimum value (inclusive). + integer low + # Maximum value (exclusive). + integer high + # Number of samples. + integer count + + # Chrome histogram. + experimental type Histogram extends object + properties + # Name. + string name + # Sum of sample values. + integer sum + # Total number of samples. + integer count + # Buckets. + array of Bucket buckets + + # Get Chrome histograms. + experimental command getHistograms + parameters + # Requested substring in name. Only histograms which have query as a + # substring in their name are extracted. An empty or absent query returns + # all histograms. + optional string query + returns + # Histograms. + array of Histogram histograms + + # Get a Chrome histogram by name. + experimental command getHistogram + parameters + # Requested histogram name. + string name + returns + # Histogram. + Histogram histogram + # Get position and size of the browser window. experimental command getWindowBounds parameters
diff --git a/third_party/WebKit/Source/core/intersection_observer/ElementIntersectionObserverData.cpp b/third_party/WebKit/Source/core/intersection_observer/ElementIntersectionObserverData.cpp index b7b4cc6f..4521fe79 100644 --- a/third_party/WebKit/Source/core/intersection_observer/ElementIntersectionObserverData.cpp +++ b/third_party/WebKit/Source/core/intersection_observer/ElementIntersectionObserverData.cpp
@@ -11,7 +11,7 @@ namespace blink { -ElementIntersectionObserverData::ElementIntersectionObserverData() {} +ElementIntersectionObserverData::ElementIntersectionObserverData() = default; IntersectionObservation* ElementIntersectionObserverData::GetObservationFor( IntersectionObserver& observer) {
diff --git a/third_party/WebKit/Source/core/intersection_observer/IntersectionObserverController.cpp b/third_party/WebKit/Source/core/intersection_observer/IntersectionObserverController.cpp index 0f49517..1e1e2d9d3 100644 --- a/third_party/WebKit/Source/core/intersection_observer/IntersectionObserverController.cpp +++ b/third_party/WebKit/Source/core/intersection_observer/IntersectionObserverController.cpp
@@ -23,7 +23,7 @@ Document* document) : PausableObject(document), callback_fired_while_suspended_(false) {} -IntersectionObserverController::~IntersectionObserverController() {} +IntersectionObserverController::~IntersectionObserverController() = default; void IntersectionObserverController::PostTaskToDeliverObservations() { DCHECK(GetExecutionContext());
diff --git a/third_party/WebKit/Source/core/intersection_observer/IntersectionObserverDelegate.h b/third_party/WebKit/Source/core/intersection_observer/IntersectionObserverDelegate.h index ee86d42a..27a52a0 100644 --- a/third_party/WebKit/Source/core/intersection_observer/IntersectionObserverDelegate.h +++ b/third_party/WebKit/Source/core/intersection_observer/IntersectionObserverDelegate.h
@@ -18,7 +18,7 @@ : public GarbageCollectedFinalized<IntersectionObserverDelegate>, public TraceWrapperBase { public: - virtual ~IntersectionObserverDelegate() {} + virtual ~IntersectionObserverDelegate() = default; virtual void Deliver(const HeapVector<Member<IntersectionObserverEntry>>&, IntersectionObserver&) = 0; virtual ExecutionContext* GetExecutionContext() const = 0;
diff --git a/third_party/WebKit/Source/core/layout/FloatingObjects.cpp b/third_party/WebKit/Source/core/layout/FloatingObjects.cpp index 42ca348e3..8add4e6 100644 --- a/third_party/WebKit/Source/core/layout/FloatingObjects.cpp +++ b/third_party/WebKit/Source/core/layout/FloatingObjects.cpp
@@ -143,7 +143,7 @@ offset_(offset), outermost_float_(nullptr) {} - virtual ~ComputeFloatOffsetAdapter() {} + virtual ~ComputeFloatOffsetAdapter() = default; LayoutUnit LowValue() const { return line_top_; } LayoutUnit HighValue() const { return line_bottom_; } @@ -174,7 +174,7 @@ line_bottom, offset) {} - ~ComputeFloatOffsetForFloatLayoutAdapter() override {} + ~ComputeFloatOffsetForFloatLayoutAdapter() override = default; LayoutUnit HeightRemaining() const; @@ -195,7 +195,7 @@ line_bottom, offset) {} - ~ComputeFloatOffsetForLineLayoutAdapter() override {} + ~ComputeFloatOffsetForLineLayoutAdapter() override = default; protected: bool UpdateOffsetIfNeeded(const FloatingObject&) final; @@ -307,7 +307,7 @@ return adapter.NextLogicalBottom(); } -FloatingObjects::~FloatingObjects() {} +FloatingObjects::~FloatingObjects() = default; void FloatingObjects::ClearLineBoxTreePointers() { // Clear references to originating lines, since the lines are being deleted FloatingObjectSetIterator end = set_.end();
diff --git a/third_party/WebKit/Source/core/layout/FragmentationContext.h b/third_party/WebKit/Source/core/layout/FragmentationContext.h index eee4dc8..ac966ef 100644 --- a/third_party/WebKit/Source/core/layout/FragmentationContext.h +++ b/third_party/WebKit/Source/core/layout/FragmentationContext.h
@@ -29,7 +29,7 @@ // [1] http://www.w3.org/TR/css3-break/#fragmentation-model class CORE_EXPORT FragmentationContext { public: - virtual ~FragmentationContext() {} + virtual ~FragmentationContext() = default; // The height of the fragmentainers may depend on the total height of the // contents (column balancing), in which case false is returned if we haven't
diff --git a/third_party/WebKit/Source/core/layout/GridTrackSizingAlgorithm.cpp b/third_party/WebKit/Source/core/layout/GridTrackSizingAlgorithm.cpp index 2122628..49dc0e7 100644 --- a/third_party/WebKit/Source/core/layout/GridTrackSizingAlgorithm.cpp +++ b/third_party/WebKit/Source/core/layout/GridTrackSizingAlgorithm.cpp
@@ -137,7 +137,7 @@ } } -GridTrackSizingAlgorithmStrategy::~GridTrackSizingAlgorithmStrategy() {} +GridTrackSizingAlgorithmStrategy::~GridTrackSizingAlgorithmStrategy() = default; bool GridTrackSizingAlgorithmStrategy:: ShouldClearOverrideContainingBlockContentSizeForChild(
diff --git a/third_party/WebKit/Source/core/layout/HitTestLocation.cpp b/third_party/WebKit/Source/core/layout/HitTestLocation.cpp index bb4e4e2..ad2bbb14 100644 --- a/third_party/WebKit/Source/core/layout/HitTestLocation.cpp +++ b/third_party/WebKit/Source/core/layout/HitTestLocation.cpp
@@ -80,26 +80,12 @@ Move(offset); } -HitTestLocation::HitTestLocation(const HitTestLocation& other) - : point_(other.point_), - bounding_box_(other.bounding_box_), - transformed_point_(other.transformed_point_), - transformed_rect_(other.transformed_rect_), - is_rect_based_(other.is_rect_based_), - is_rectilinear_(other.is_rectilinear_) {} +HitTestLocation::HitTestLocation(const HitTestLocation& other) = default; -HitTestLocation::~HitTestLocation() {} +HitTestLocation::~HitTestLocation() = default; -HitTestLocation& HitTestLocation::operator=(const HitTestLocation& other) { - point_ = other.point_; - bounding_box_ = other.bounding_box_; - transformed_point_ = other.transformed_point_; - transformed_rect_ = other.transformed_rect_; - is_rect_based_ = other.is_rect_based_; - is_rectilinear_ = other.is_rectilinear_; - - return *this; -} +HitTestLocation& HitTestLocation::operator=(const HitTestLocation& other) = + default; void HitTestLocation::Move(const LayoutSize& offset) { point_.Move(offset);
diff --git a/third_party/WebKit/Source/core/layout/HitTestResult.cpp b/third_party/WebKit/Source/core/layout/HitTestResult.cpp index aa840d6..cdc0865 100644 --- a/third_party/WebKit/Source/core/layout/HitTestResult.cpp +++ b/third_party/WebKit/Source/core/layout/HitTestResult.cpp
@@ -102,7 +102,7 @@ : nullptr; } -HitTestResult::~HitTestResult() {} +HitTestResult::~HitTestResult() = default; HitTestResult& HitTestResult::operator=(const HitTestResult& other) { hit_test_location_ = other.hit_test_location_; @@ -182,7 +182,7 @@ // Consider a closed shadow tree of SVG's <use> element as a special // case so that a toolip title in the shadow tree works. while (containing_shadow_root && - (containing_shadow_root->GetType() == ShadowRootType::kUserAgent || + (containing_shadow_root->IsUserAgent() || IsSVGUseElement(containing_shadow_root->host()))) { shadow_host = &containing_shadow_root->host(); containing_shadow_root = shadow_host->ContainingShadowRoot(); @@ -197,8 +197,7 @@ DCHECK(inner_node_); HTMLImageElement* image_element = ToHTMLImageElementOrNull(inner_node_); if (!image_element && inner_node_->IsInShadowTree()) { - if (inner_node_->ContainingShadowRoot()->GetType() == - ShadowRootType::kUserAgent) { + if (inner_node_->ContainingShadowRoot()->IsUserAgent()) { image_element = ToHTMLImageElementOrNull(inner_node_->OwnerShadowHost()); } }
diff --git a/third_party/WebKit/Source/core/layout/IntersectionGeometry.cpp b/third_party/WebKit/Source/core/layout/IntersectionGeometry.cpp index ca6d8bf..b691ddcc 100644 --- a/third_party/WebKit/Source/core/layout/IntersectionGeometry.cpp +++ b/third_party/WebKit/Source/core/layout/IntersectionGeometry.cpp
@@ -77,7 +77,7 @@ InitializeGeometry(); } -IntersectionGeometry::~IntersectionGeometry() {} +IntersectionGeometry::~IntersectionGeometry() = default; bool IntersectionGeometry::InitializeCanComputeGeometry(Element* root, Element& target) const {
diff --git a/third_party/WebKit/Source/core/layout/LayoutAnalyzer.h b/third_party/WebKit/Source/core/layout/LayoutAnalyzer.h index 02dd635..017c65cc 100644 --- a/third_party/WebKit/Source/core/layout/LayoutAnalyzer.h +++ b/third_party/WebKit/Source/core/layout/LayoutAnalyzer.h
@@ -73,7 +73,7 @@ LayoutUnit height_; }; - LayoutAnalyzer() {} + LayoutAnalyzer() = default; void Reset(); void Push(const LayoutObject&);
diff --git a/third_party/WebKit/Source/core/layout/LayoutBR.cpp b/third_party/WebKit/Source/core/layout/LayoutBR.cpp index edc082aa..7aaaffd7 100644 --- a/third_party/WebKit/Source/core/layout/LayoutBR.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutBR.cpp
@@ -35,7 +35,7 @@ LayoutBR::LayoutBR(Node* node) : LayoutText(node, NewlineString()) {} -LayoutBR::~LayoutBR() {} +LayoutBR::~LayoutBR() = default; int LayoutBR::LineHeight(bool first_line) const { const ComputedStyle& style = StyleRef(
diff --git a/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp b/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp index 3de1be9..e11dad1 100644 --- a/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp
@@ -263,7 +263,7 @@ SetChildrenInline(true); } -LayoutBlockFlow::~LayoutBlockFlow() {} +LayoutBlockFlow::~LayoutBlockFlow() = default; LayoutBlockFlow* LayoutBlockFlow::CreateAnonymous(Document* document) { LayoutBlockFlow* layout_block_flow = RuntimeEnabledFeatures::LayoutNGEnabled()
diff --git a/third_party/WebKit/Source/core/layout/LayoutBox.h b/third_party/WebKit/Source/core/layout/LayoutBox.h index a3abfff..ed1168c 100644 --- a/third_party/WebKit/Source/core/layout/LayoutBox.h +++ b/third_party/WebKit/Source/core/layout/LayoutBox.h
@@ -708,7 +708,7 @@ // SYSTEMS in LayoutBoxModel) for use during layout. struct ComputedMarginValues { DISALLOW_NEW(); - ComputedMarginValues() {} + ComputedMarginValues() = default; LayoutUnit before_; LayoutUnit after_; @@ -720,7 +720,7 @@ // block-flow and inline-direction axis. struct LogicalExtentComputedValues { STACK_ALLOCATED(); - LogicalExtentComputedValues() {} + LogicalExtentComputedValues() = default; // This is the dimension in the measured direction // (logical height or logical width).
diff --git a/third_party/WebKit/Source/core/layout/LayoutButton.cpp b/third_party/WebKit/Source/core/layout/LayoutButton.cpp index 8e5a5eea..c234f781 100644 --- a/third_party/WebKit/Source/core/layout/LayoutButton.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutButton.cpp
@@ -27,7 +27,7 @@ LayoutButton::LayoutButton(Element* element) : LayoutFlexibleBox(element), inner_(nullptr) {} -LayoutButton::~LayoutButton() {} +LayoutButton::~LayoutButton() = default; void LayoutButton::AddChild(LayoutObject* new_child, LayoutObject* before_child) {
diff --git a/third_party/WebKit/Source/core/layout/LayoutCounter.cpp b/third_party/WebKit/Source/core/layout/LayoutCounter.cpp index ff81746..ffdd0b8 100644 --- a/third_party/WebKit/Source/core/layout/LayoutCounter.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutCounter.cpp
@@ -459,7 +459,7 @@ View()->AddLayoutCounter(); } -LayoutCounter::~LayoutCounter() {} +LayoutCounter::~LayoutCounter() = default; void LayoutCounter::WillBeDestroyed() { if (counter_node_) {
diff --git a/third_party/WebKit/Source/core/layout/LayoutDeprecatedFlexibleBox.cpp b/third_party/WebKit/Source/core/layout/LayoutDeprecatedFlexibleBox.cpp index cae0ef44..db71994 100644 --- a/third_party/WebKit/Source/core/layout/LayoutDeprecatedFlexibleBox.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutDeprecatedFlexibleBox.cpp
@@ -296,7 +296,7 @@ } } -LayoutDeprecatedFlexibleBox::~LayoutDeprecatedFlexibleBox() {} +LayoutDeprecatedFlexibleBox::~LayoutDeprecatedFlexibleBox() = default; static LayoutUnit MarginWidthForChild(LayoutBox* child) { // A margin basically has three types: fixed, percentage, and auto (variable).
diff --git a/third_party/WebKit/Source/core/layout/LayoutEmbeddedContent.cpp b/third_party/WebKit/Source/core/layout/LayoutEmbeddedContent.cpp index 8f35323..01558ec0b 100644 --- a/third_party/WebKit/Source/core/layout/LayoutEmbeddedContent.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutEmbeddedContent.cpp
@@ -141,12 +141,6 @@ return false; } -bool LayoutEmbeddedContent::NeedsPreferredWidthsRecalculation() const { - if (LayoutReplaced::NeedsPreferredWidthsRecalculation()) - return true; - return EmbeddedReplacedContent(); -} - bool LayoutEmbeddedContent::NodeAtPointOverEmbeddedContentView( HitTestResult& result, const HitTestLocation& location_in_container,
diff --git a/third_party/WebKit/Source/core/layout/LayoutEmbeddedContent.h b/third_party/WebKit/Source/core/layout/LayoutEmbeddedContent.h index a393a54..e108cd9 100644 --- a/third_party/WebKit/Source/core/layout/LayoutEmbeddedContent.h +++ b/third_party/WebKit/Source/core/layout/LayoutEmbeddedContent.h
@@ -40,8 +40,6 @@ bool RequiresAcceleratedCompositing() const; - bool NeedsPreferredWidthsRecalculation() const final; - bool NodeAtPoint(HitTestResult&, const HitTestLocation& location_in_container, const LayoutPoint& accumulated_offset,
diff --git a/third_party/WebKit/Source/core/layout/LayoutEmbeddedObject.cpp b/third_party/WebKit/Source/core/layout/LayoutEmbeddedObject.cpp index 8a3c08d..9ae50fb9 100644 --- a/third_party/WebKit/Source/core/layout/LayoutEmbeddedObject.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutEmbeddedObject.cpp
@@ -46,7 +46,7 @@ View()->GetFrameView()->SetIsVisuallyNonEmpty(); } -LayoutEmbeddedObject::~LayoutEmbeddedObject() {} +LayoutEmbeddedObject::~LayoutEmbeddedObject() = default; PaintLayerType LayoutEmbeddedObject::LayerTypeRequired() const { // This can't just use LayoutEmbeddedContent::layerTypeRequired, because @@ -153,10 +153,18 @@ return CompositingReason::kNone; } -LayoutReplaced* LayoutEmbeddedObject::EmbeddedReplacedContent() const { +bool LayoutEmbeddedObject::NeedsPreferredWidthsRecalculation() const { + if (LayoutEmbeddedContent::NeedsPreferredWidthsRecalculation()) + return true; + LocalFrameView* frame_view = ChildFrameView(); + return frame_view && frame_view->HasIntrinsicSizingInfo(); +} + +bool LayoutEmbeddedObject::GetNestedIntrinsicSizingInfo( + IntrinsicSizingInfo& intrinsic_sizing_info) const { if (LocalFrameView* frame_view = ChildFrameView()) - return frame_view->EmbeddedReplacedContent(); - return nullptr; + return frame_view->GetIntrinsicSizingInfo(intrinsic_sizing_info); + return false; } } // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/LayoutEmbeddedObject.h b/third_party/WebKit/Source/core/layout/LayoutEmbeddedObject.h index faa9311e..759c821 100644 --- a/third_party/WebKit/Source/core/layout/LayoutEmbeddedObject.h +++ b/third_party/WebKit/Source/core/layout/LayoutEmbeddedObject.h
@@ -62,7 +62,8 @@ return type == kLayoutObjectEmbeddedObject || LayoutEmbeddedContent::IsOfType(type); } - LayoutReplaced* EmbeddedReplacedContent() const final; + bool NeedsPreferredWidthsRecalculation() const override; + bool GetNestedIntrinsicSizingInfo(IntrinsicSizingInfo&) const override; PaintLayerType LayerTypeRequired() const final;
diff --git a/third_party/WebKit/Source/core/layout/LayoutFileUploadControl.cpp b/third_party/WebKit/Source/core/layout/LayoutFileUploadControl.cpp index 7c89d27..efacde1 100644 --- a/third_party/WebKit/Source/core/layout/LayoutFileUploadControl.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutFileUploadControl.cpp
@@ -43,7 +43,7 @@ : LayoutBlockFlow(input), can_receive_dropped_files_(input->CanReceiveDroppedFiles()) {} -LayoutFileUploadControl::~LayoutFileUploadControl() {} +LayoutFileUploadControl::~LayoutFileUploadControl() = default; void LayoutFileUploadControl::UpdateFromElement() { HTMLInputElement* input = ToHTMLInputElement(GetNode());
diff --git a/third_party/WebKit/Source/core/layout/LayoutFlexibleBox.cpp b/third_party/WebKit/Source/core/layout/LayoutFlexibleBox.cpp index b5a17af6..5a7f59c0b 100644 --- a/third_party/WebKit/Source/core/layout/LayoutFlexibleBox.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutFlexibleBox.cpp
@@ -61,7 +61,7 @@ UseCounter::Count(GetDocument(), WebFeature::kCSSFlexibleBox); } -LayoutFlexibleBox::~LayoutFlexibleBox() {} +LayoutFlexibleBox::~LayoutFlexibleBox() = default; LayoutFlexibleBox* LayoutFlexibleBox::CreateAnonymous(Document* document) { LayoutFlexibleBox* layout_object = new LayoutFlexibleBox(nullptr);
diff --git a/third_party/WebKit/Source/core/layout/LayoutFlowThread.h b/third_party/WebKit/Source/core/layout/LayoutFlowThread.h index ee681aaa..b84767a2 100644 --- a/third_party/WebKit/Source/core/layout/LayoutFlowThread.h +++ b/third_party/WebKit/Source/core/layout/LayoutFlowThread.h
@@ -65,7 +65,7 @@ class CORE_EXPORT LayoutFlowThread : public LayoutBlockFlow { public: LayoutFlowThread(); - ~LayoutFlowThread() override {} + ~LayoutFlowThread() override = default; bool IsLayoutFlowThread() const final { return true; } virtual bool IsLayoutMultiColumnFlowThread() const { return false; }
diff --git a/third_party/WebKit/Source/core/layout/LayoutFrameSet.cpp b/third_party/WebKit/Source/core/layout/LayoutFrameSet.cpp index 237ec58..9b7fabd 100644 --- a/third_party/WebKit/Source/core/layout/LayoutFrameSet.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutFrameSet.cpp
@@ -42,7 +42,7 @@ SetInline(false); } -LayoutFrameSet::~LayoutFrameSet() {} +LayoutFrameSet::~LayoutFrameSet() = default; LayoutFrameSet::GridAxis::GridAxis() : split_being_resized_(kNoSplit) {}
diff --git a/third_party/WebKit/Source/core/layout/LayoutGeometryMap.cpp b/third_party/WebKit/Source/core/layout/LayoutGeometryMap.cpp index 0812092..97ff7df76 100644 --- a/third_party/WebKit/Source/core/layout/LayoutGeometryMap.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutGeometryMap.cpp
@@ -41,7 +41,7 @@ fixed_steps_count_(0), map_coordinates_flags_(flags) {} -LayoutGeometryMap::~LayoutGeometryMap() {} +LayoutGeometryMap::~LayoutGeometryMap() = default; void LayoutGeometryMap::MapToAncestor( TransformState& transform_state,
diff --git a/third_party/WebKit/Source/core/layout/LayoutGrid.cpp b/third_party/WebKit/Source/core/layout/LayoutGrid.cpp index 7151fa5..b5cfc2a 100644 --- a/third_party/WebKit/Source/core/layout/LayoutGrid.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutGrid.cpp
@@ -45,7 +45,8 @@ STACK_ALLOCATED(); public: - ContentAlignmentData(){}; + ContentAlignmentData() = default; + ; ContentAlignmentData(LayoutUnit position, LayoutUnit distribution) : position_offset(position), distribution_offset(distribution) {} @@ -62,7 +63,7 @@ UseCounter::Count(GetDocument(), WebFeature::kCSSGridLayout); } -LayoutGrid::~LayoutGrid() {} +LayoutGrid::~LayoutGrid() = default; LayoutGrid* LayoutGrid::CreateAnonymous(Document* document) { LayoutGrid* layout_grid = new LayoutGrid(nullptr);
diff --git a/third_party/WebKit/Source/core/layout/LayoutImage.cpp b/third_party/WebKit/Source/core/layout/LayoutImage.cpp index 8dababa8..68d5e26 100644 --- a/third_party/WebKit/Source/core/layout/LayoutImage.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutImage.cpp
@@ -57,7 +57,7 @@ return image; } -LayoutImage::~LayoutImage() {} +LayoutImage::~LayoutImage() = default; void LayoutImage::WillBeDestroyed() { DCHECK(image_resource_); @@ -325,6 +325,15 @@ return EmbeddedReplacedContent(); } +bool LayoutImage::GetNestedIntrinsicSizingInfo( + IntrinsicSizingInfo& intrinsic_sizing_info) const { + if (LayoutReplaced* content_layout_object = EmbeddedReplacedContent()) { + content_layout_object->ComputeIntrinsicSizingInfo(intrinsic_sizing_info); + return true; + } + return false; +} + LayoutReplaced* LayoutImage::EmbeddedReplacedContent() const { if (!image_resource_) return nullptr;
diff --git a/third_party/WebKit/Source/core/layout/LayoutImage.h b/third_party/WebKit/Source/core/layout/LayoutImage.h index ee0a29c7..b038844b 100644 --- a/third_party/WebKit/Source/core/layout/LayoutImage.h +++ b/third_party/WebKit/Source/core/layout/LayoutImage.h
@@ -89,8 +89,9 @@ protected: bool NeedsPreferredWidthsRecalculation() const final; - LayoutReplaced* EmbeddedReplacedContent() const final; + LayoutReplaced* EmbeddedReplacedContent() const; void ComputeIntrinsicSizingInfo(IntrinsicSizingInfo&) const final; + bool GetNestedIntrinsicSizingInfo(IntrinsicSizingInfo&) const final; void ImageChanged(WrappedImagePtr, CanDeferInvalidation,
diff --git a/third_party/WebKit/Source/core/layout/LayoutImageResource.cpp b/third_party/WebKit/Source/core/layout/LayoutImageResource.cpp index 9e0be1926..d8a0fda 100644 --- a/third_party/WebKit/Source/core/layout/LayoutImageResource.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutImageResource.cpp
@@ -38,7 +38,7 @@ LayoutImageResource::LayoutImageResource() : layout_object_(nullptr), cached_image_(nullptr) {} -LayoutImageResource::~LayoutImageResource() {} +LayoutImageResource::~LayoutImageResource() = default; void LayoutImageResource::Initialize(LayoutObject* layout_object) { DCHECK(!layout_object_);
diff --git a/third_party/WebKit/Source/core/layout/LayoutInline.cpp b/third_party/WebKit/Source/core/layout/LayoutInline.cpp index 3bb7cde5..50443f0 100644 --- a/third_party/WebKit/Source/core/layout/LayoutInline.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutInline.cpp
@@ -60,7 +60,7 @@ } // anonymous namespace struct SameSizeAsLayoutInline : public LayoutBoxModelObject { - ~SameSizeAsLayoutInline() override {} + ~SameSizeAsLayoutInline() override = default; LayoutObjectChildList children_; LineBoxList line_boxes_; };
diff --git a/third_party/WebKit/Source/core/layout/LayoutListBox.cpp b/third_party/WebKit/Source/core/layout/LayoutListBox.cpp index 685c907f..3e86cfd 100644 --- a/third_party/WebKit/Source/core/layout/LayoutListBox.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutListBox.cpp
@@ -51,7 +51,7 @@ DCHECK(IsHTMLSelectElement(element)); } -LayoutListBox::~LayoutListBox() {} +LayoutListBox::~LayoutListBox() = default; inline HTMLSelectElement* LayoutListBox::SelectElement() const { return ToHTMLSelectElement(GetNode());
diff --git a/third_party/WebKit/Source/core/layout/LayoutListMarker.cpp b/third_party/WebKit/Source/core/layout/LayoutListMarker.cpp index 1caffac6..f823cc19 100644 --- a/third_party/WebKit/Source/core/layout/LayoutListMarker.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutListMarker.cpp
@@ -47,7 +47,7 @@ SetIsAtomicInlineLevel(true); } -LayoutListMarker::~LayoutListMarker() {} +LayoutListMarker::~LayoutListMarker() = default; void LayoutListMarker::WillBeDestroyed() { if (image_)
diff --git a/third_party/WebKit/Source/core/layout/LayoutMedia.cpp b/third_party/WebKit/Source/core/layout/LayoutMedia.cpp index a0d214e1..091bc25 100644 --- a/third_party/WebKit/Source/core/layout/LayoutMedia.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutMedia.cpp
@@ -38,7 +38,7 @@ SetImageResource(LayoutImageResource::Create()); } -LayoutMedia::~LayoutMedia() {} +LayoutMedia::~LayoutMedia() = default; HTMLMediaElement* LayoutMedia::MediaElement() const { return ToHTMLMediaElement(GetNode());
diff --git a/third_party/WebKit/Source/core/layout/LayoutMenuList.cpp b/third_party/WebKit/Source/core/layout/LayoutMenuList.cpp index af642438e..16f5d439 100644 --- a/third_party/WebKit/Source/core/layout/LayoutMenuList.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutMenuList.cpp
@@ -50,7 +50,7 @@ DCHECK(IsHTMLSelectElement(element)); } -LayoutMenuList::~LayoutMenuList() {} +LayoutMenuList::~LayoutMenuList() = default; // FIXME: Instead of this hack we should add a ShadowRoot to <select> with no // insertion point to prevent children from rendering.
diff --git a/third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.cpp b/third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.cpp index afdec2c..fd054ac 100644 --- a/third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.cpp
@@ -48,7 +48,7 @@ SetIsInsideFlowThread(true); } -LayoutMultiColumnFlowThread::~LayoutMultiColumnFlowThread() {} +LayoutMultiColumnFlowThread::~LayoutMultiColumnFlowThread() = default; LayoutMultiColumnFlowThread* LayoutMultiColumnFlowThread::CreateAnonymous( Document& document,
diff --git a/third_party/WebKit/Source/core/layout/LayoutObject.cpp b/third_party/WebKit/Source/core/layout/LayoutObject.cpp index 78abe66d..8aa29dfb 100644 --- a/third_party/WebKit/Source/core/layout/LayoutObject.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutObject.cpp
@@ -134,7 +134,7 @@ #endif struct SameSizeAsLayoutObject : DisplayItemClient { - ~SameSizeAsLayoutObject() override {} // Allocate vtable pointer. + ~SameSizeAsLayoutObject() override = default; // Allocate vtable pointer. void* pointers[5]; Member<void*> members[1]; #if DCHECK_IS_ON() @@ -3248,10 +3248,9 @@ // TODO(kochi): If |base| or |node| is nested deep in shadow roots, this // loop may get expensive, as isUnclosedNodeOf() can take up to O(N+M) time // (N and M are depths). - if (base && - (node->IsClosedShadowHiddenFrom(*base) || - (node->IsInShadowTree() && node->ContainingShadowRoot()->GetType() == - ShadowRootType::kUserAgent))) { + if (base && (node->IsClosedShadowHiddenFrom(*base) || + (node->IsInShadowTree() && + node->ContainingShadowRoot()->IsUserAgent()))) { // If 'position: fixed' node is found while traversing up, terminate the // loop and return null. if (ancestor->IsFixedPositioned())
diff --git a/third_party/WebKit/Source/core/layout/LayoutProgress.cpp b/third_party/WebKit/Source/core/layout/LayoutProgress.cpp index 2c71efe..13f454f 100644 --- a/third_party/WebKit/Source/core/layout/LayoutProgress.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutProgress.cpp
@@ -40,7 +40,7 @@ this, &LayoutProgress::AnimationTimerFired) {} -LayoutProgress::~LayoutProgress() {} +LayoutProgress::~LayoutProgress() = default; void LayoutProgress::WillBeDestroyed() { if (animating_) {
diff --git a/third_party/WebKit/Source/core/layout/LayoutReplaced.cpp b/third_party/WebKit/Source/core/layout/LayoutReplaced.cpp index d3adea6..c477305 100644 --- a/third_party/WebKit/Source/core/layout/LayoutReplaced.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutReplaced.cpp
@@ -26,7 +26,6 @@ #include "core/editing/PositionWithAffinity.h" #include "core/layout/LayoutAnalyzer.h" #include "core/layout/LayoutBlock.h" -#include "core/layout/LayoutEmbeddedContent.h" #include "core/layout/LayoutImage.h" #include "core/layout/LayoutInline.h" #include "core/layout/LayoutVideo.h" @@ -56,7 +55,7 @@ SetIsAtomicInlineLevel(true); } -LayoutReplaced::~LayoutReplaced() {} +LayoutReplaced::~LayoutReplaced() = default; void LayoutReplaced::WillBeDestroyed() { if (!DocumentBeingDestroyed() && Parent()) @@ -143,11 +142,8 @@ } void LayoutReplaced::ComputeIntrinsicSizingInfoForReplacedContent( - LayoutReplaced* content_layout_object, IntrinsicSizingInfo& intrinsic_sizing_info) const { - if (content_layout_object) { - content_layout_object->ComputeIntrinsicSizingInfo(intrinsic_sizing_info); - + if (GetNestedIntrinsicSizingInfo(intrinsic_sizing_info)) { // Handle zoom & vertical writing modes here, as the embedded document // doesn't know about them. intrinsic_sizing_info.size.Scale(Style()->EffectiveZoom()); @@ -638,9 +634,6 @@ void LayoutReplaced::ComputeIntrinsicSizingInfo( IntrinsicSizingInfo& intrinsic_sizing_info) const { - // If there's an embeddedReplacedContent() of a remote, referenced document - // available, this code-path should never be used. - DCHECK(!EmbeddedReplacedContent()); intrinsic_sizing_info.size = FloatSize(IntrinsicLogicalWidth().ToFloat(), IntrinsicLogicalHeight().ToFloat()); @@ -694,13 +687,11 @@ Style()->LogicalWidth()), should_compute_preferred); - LayoutReplaced* content_layout_object = EmbeddedReplacedContent(); - // 10.3.2 Inline, replaced elements: // http://www.w3.org/TR/CSS21/visudet.html#inline-replaced-width IntrinsicSizingInfo intrinsic_sizing_info; - ComputeIntrinsicSizingInfoForReplacedContent(content_layout_object, - intrinsic_sizing_info); + ComputeIntrinsicSizingInfoForReplacedContent(intrinsic_sizing_info); + FloatSize constrained_size = ConstrainIntrinsicSizeToMinMax(intrinsic_sizing_info); @@ -781,13 +772,11 @@ ComputeReplacedLogicalHeightUsing(kMainOrPreferredSize, Style()->LogicalHeight())); - LayoutReplaced* content_layout_object = EmbeddedReplacedContent(); - // 10.6.2 Inline, replaced elements: // http://www.w3.org/TR/CSS21/visudet.html#inline-replaced-height IntrinsicSizingInfo intrinsic_sizing_info; - ComputeIntrinsicSizingInfoForReplacedContent(content_layout_object, - intrinsic_sizing_info); + ComputeIntrinsicSizingInfoForReplacedContent(intrinsic_sizing_info); + FloatSize constrained_size = ConstrainIntrinsicSizeToMinMax(intrinsic_sizing_info); @@ -935,7 +924,7 @@ Size().Height()); } -void LayoutReplaced::IntrinsicSizingInfo::Transpose() { +void IntrinsicSizingInfo::Transpose() { size = size.TransposedSize(); aspect_ratio = aspect_ratio.TransposedSize(); std::swap(has_width, has_height);
diff --git a/third_party/WebKit/Source/core/layout/LayoutReplaced.h b/third_party/WebKit/Source/core/layout/LayoutReplaced.h index 7485418b..ebef7f9 100644 --- a/third_party/WebKit/Source/core/layout/LayoutReplaced.h +++ b/third_party/WebKit/Source/core/layout/LayoutReplaced.h
@@ -27,6 +27,18 @@ namespace blink { +struct IntrinsicSizingInfo { + STACK_ALLOCATED(); + IntrinsicSizingInfo() : has_width(true), has_height(true) {} + + FloatSize size; + FloatSize aspect_ratio; + bool has_width; + bool has_height; + + void Transpose(); +}; + // LayoutReplaced is the base class for a replaced element as defined by CSS: // // "An element whose content is outside the scope of the CSS formatting model, @@ -83,18 +95,6 @@ return false; } - struct IntrinsicSizingInfo { - STACK_ALLOCATED(); - IntrinsicSizingInfo() : has_width(true), has_height(true) {} - - FloatSize size; - FloatSize aspect_ratio; - bool has_width; - bool has_height; - - void Transpose(); - }; - // This function is public only so we can call it when computing // intrinsic size in LayoutNG. virtual void ComputeIntrinsicSizingInfo(IntrinsicSizingInfo&) const; @@ -114,6 +114,13 @@ void ComputeIntrinsicLogicalWidths(LayoutUnit& min_logical_width, LayoutUnit& max_logical_width) const final; + // Extract intrinsic sizing info from a potential nested layout + // context. Returns true if successful, and populates the IntrinsicSizingInfo + // structure if so. + virtual bool GetNestedIntrinsicSizingInfo(IntrinsicSizingInfo&) const { + return false; + } + // This function calculates the placement of the replaced contents. It takes // intrinsic size of the replaced contents, stretch to fit CSS content box // according to object-fit. @@ -139,8 +146,6 @@ // CSS properties like 'zoom' or 'image-orientation'. virtual void IntrinsicSizeChanged(); - virtual LayoutReplaced* EmbeddedReplacedContent() const { return nullptr; } - PositionWithAffinity PositionForPoint(const LayoutPoint&) override; bool IsOfType(LayoutObjectType type) const override { @@ -150,8 +155,7 @@ private: void ComputePreferredLogicalWidths() final; - void ComputeIntrinsicSizingInfoForReplacedContent(LayoutReplaced*, - IntrinsicSizingInfo&) const; + void ComputeIntrinsicSizingInfoForReplacedContent(IntrinsicSizingInfo&) const; FloatSize ConstrainIntrinsicSizeToMinMax(const IntrinsicSizingInfo&) const; LayoutUnit ComputeConstrainedLogicalWidth(ShouldComputePreferred) const;
diff --git a/third_party/WebKit/Source/core/layout/LayoutRuby.cpp b/third_party/WebKit/Source/core/layout/LayoutRuby.cpp index eeebdab5..4fc22be 100644 --- a/third_party/WebKit/Source/core/layout/LayoutRuby.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutRuby.cpp
@@ -56,7 +56,7 @@ UseCounter::Count(GetDocument(), WebFeature::kRenderRuby); } -LayoutRubyAsInline::~LayoutRubyAsInline() {} +LayoutRubyAsInline::~LayoutRubyAsInline() = default; void LayoutRubyAsInline::StyleDidChange(StyleDifference diff, const ComputedStyle* old_style) { @@ -121,7 +121,7 @@ UseCounter::Count(GetDocument(), WebFeature::kRenderRuby); } -LayoutRubyAsBlock::~LayoutRubyAsBlock() {} +LayoutRubyAsBlock::~LayoutRubyAsBlock() = default; void LayoutRubyAsBlock::StyleDidChange(StyleDifference diff, const ComputedStyle* old_style) {
diff --git a/third_party/WebKit/Source/core/layout/LayoutRubyBase.cpp b/third_party/WebKit/Source/core/layout/LayoutRubyBase.cpp index c2c27fd5..8a24af8 100644 --- a/third_party/WebKit/Source/core/layout/LayoutRubyBase.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutRubyBase.cpp
@@ -36,7 +36,7 @@ SetInline(false); } -LayoutRubyBase::~LayoutRubyBase() {} +LayoutRubyBase::~LayoutRubyBase() = default; LayoutRubyBase* LayoutRubyBase::CreateAnonymous(Document* document) { LayoutRubyBase* layout_object = new LayoutRubyBase();
diff --git a/third_party/WebKit/Source/core/layout/LayoutRubyRun.cpp b/third_party/WebKit/Source/core/layout/LayoutRubyRun.cpp index 34db240..eecdfb39 100644 --- a/third_party/WebKit/Source/core/layout/LayoutRubyRun.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutRubyRun.cpp
@@ -41,7 +41,7 @@ SetIsAtomicInlineLevel(true); } -LayoutRubyRun::~LayoutRubyRun() {} +LayoutRubyRun::~LayoutRubyRun() = default; bool LayoutRubyRun::HasRubyText() const { // The only place where a ruby text can be is in the first position
diff --git a/third_party/WebKit/Source/core/layout/LayoutRubyText.cpp b/third_party/WebKit/Source/core/layout/LayoutRubyText.cpp index af9e327..0202b848 100644 --- a/third_party/WebKit/Source/core/layout/LayoutRubyText.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutRubyText.cpp
@@ -35,7 +35,7 @@ LayoutRubyText::LayoutRubyText(Element* element) : LayoutBlockFlow(element) {} -LayoutRubyText::~LayoutRubyText() {} +LayoutRubyText::~LayoutRubyText() = default; bool LayoutRubyText::IsChildAllowed(LayoutObject* child, const ComputedStyle&) const {
diff --git a/third_party/WebKit/Source/core/layout/LayoutScrollbarTheme.h b/third_party/WebKit/Source/core/layout/LayoutScrollbarTheme.h index a4bbfe61..00f1d46 100644 --- a/third_party/WebKit/Source/core/layout/LayoutScrollbarTheme.h +++ b/third_party/WebKit/Source/core/layout/LayoutScrollbarTheme.h
@@ -34,7 +34,7 @@ class LayoutScrollbarTheme final : public ScrollbarTheme { public: - ~LayoutScrollbarTheme() override {} + ~LayoutScrollbarTheme() override = default; int ScrollbarThickness(ScrollbarControlSize control_size) override { return ScrollbarTheme::DeprecatedStaticGetTheme().ScrollbarThickness(
diff --git a/third_party/WebKit/Source/core/layout/LayoutSearchField.cpp b/third_party/WebKit/Source/core/layout/LayoutSearchField.cpp index b8899fd..0aae9104 100644 --- a/third_party/WebKit/Source/core/layout/LayoutSearchField.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutSearchField.cpp
@@ -40,7 +40,7 @@ DCHECK_EQ(element->type(), InputTypeNames::search); } -LayoutSearchField::~LayoutSearchField() {} +LayoutSearchField::~LayoutSearchField() = default; inline Element* LayoutSearchField::SearchDecorationElement() const { return InputElement()->UserAgentShadowRoot()->getElementById(
diff --git a/third_party/WebKit/Source/core/layout/LayoutSlider.cpp b/third_party/WebKit/Source/core/layout/LayoutSlider.cpp index 21cebe7..1932174 100644 --- a/third_party/WebKit/Source/core/layout/LayoutSlider.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutSlider.cpp
@@ -37,7 +37,7 @@ DCHECK_EQ(element->type(), InputTypeNames::range); } -LayoutSlider::~LayoutSlider() {} +LayoutSlider::~LayoutSlider() = default; LayoutUnit LayoutSlider::BaselinePosition( FontBaseline,
diff --git a/third_party/WebKit/Source/core/layout/LayoutTable.cpp b/third_party/WebKit/Source/core/layout/LayoutTable.cpp index 4e9364fa..8ffdee7b 100644 --- a/third_party/WebKit/Source/core/layout/LayoutTable.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutTable.cpp
@@ -81,7 +81,7 @@ effective_column_positions_.Fill(0, 1); } -LayoutTable::~LayoutTable() {} +LayoutTable::~LayoutTable() = default; void LayoutTable::StyleDidChange(StyleDifference diff, const ComputedStyle* old_style) {
diff --git a/third_party/WebKit/Source/core/layout/LayoutTableCaption.cpp b/third_party/WebKit/Source/core/layout/LayoutTableCaption.cpp index 2d9ed77..4f36205 100644 --- a/third_party/WebKit/Source/core/layout/LayoutTableCaption.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutTableCaption.cpp
@@ -26,7 +26,7 @@ LayoutTableCaption::LayoutTableCaption(Element* element) : LayoutBlockFlow(element) {} -LayoutTableCaption::~LayoutTableCaption() {} +LayoutTableCaption::~LayoutTableCaption() = default; LayoutUnit LayoutTableCaption::ContainingBlockLogicalWidthForContent() const { LayoutBlock* cb = ContainingBlock();
diff --git a/third_party/WebKit/Source/core/layout/LayoutTableSection.cpp b/third_party/WebKit/Source/core/layout/LayoutTableSection.cpp index 65f3745..c74c91b 100644 --- a/third_party/WebKit/Source/core/layout/LayoutTableSection.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutTableSection.cpp
@@ -102,7 +102,7 @@ SetInline(false); // our object is not Inline } -LayoutTableSection::~LayoutTableSection() {} +LayoutTableSection::~LayoutTableSection() = default; void LayoutTableSection::StyleDidChange(StyleDifference diff, const ComputedStyle* old_style) {
diff --git a/third_party/WebKit/Source/core/layout/LayoutTestHelper.h b/third_party/WebKit/Source/core/layout/LayoutTestHelper.h index 04e5f86..176efd35 100644 --- a/third_party/WebKit/Source/core/layout/LayoutTestHelper.h +++ b/third_party/WebKit/Source/core/layout/LayoutTestHelper.h
@@ -40,7 +40,7 @@ void DidDetachChild() { child_ = nullptr; } private: - explicit SingleChildLocalFrameClient() {} + explicit SingleChildLocalFrameClient() = default; Member<LocalFrame> child_; };
diff --git a/third_party/WebKit/Source/core/layout/LayoutTextControl.cpp b/third_party/WebKit/Source/core/layout/LayoutTextControl.cpp index fc5ac346..17654db8 100644 --- a/third_party/WebKit/Source/core/layout/LayoutTextControl.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutTextControl.cpp
@@ -35,7 +35,7 @@ DCHECK(element); } -LayoutTextControl::~LayoutTextControl() {} +LayoutTextControl::~LayoutTextControl() = default; TextControlElement* LayoutTextControl::GetTextControlElement() const { return ToTextControlElement(GetNode());
diff --git a/third_party/WebKit/Source/core/layout/LayoutTextControl.h b/third_party/WebKit/Source/core/layout/LayoutTextControl.h index 345e7fd0..8ba70137 100644 --- a/third_party/WebKit/Source/core/layout/LayoutTextControl.h +++ b/third_party/WebKit/Source/core/layout/LayoutTextControl.h
@@ -113,7 +113,7 @@ public: explicit LayoutTextControlInnerContainer(Element* element) : LayoutFlexibleBox(element) {} - ~LayoutTextControlInnerContainer() override {} + ~LayoutTextControlInnerContainer() override = default; LayoutUnit BaselinePosition(FontBaseline baseline, bool first_line,
diff --git a/third_party/WebKit/Source/core/layout/LayoutTextControlMultiLine.cpp b/third_party/WebKit/Source/core/layout/LayoutTextControlMultiLine.cpp index 16d2730..3b2929a 100644 --- a/third_party/WebKit/Source/core/layout/LayoutTextControlMultiLine.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutTextControlMultiLine.cpp
@@ -34,7 +34,7 @@ DCHECK(element); } -LayoutTextControlMultiLine::~LayoutTextControlMultiLine() {} +LayoutTextControlMultiLine::~LayoutTextControlMultiLine() = default; bool LayoutTextControlMultiLine::NodeAtPoint( HitTestResult& result,
diff --git a/third_party/WebKit/Source/core/layout/LayoutTextControlSingleLine.cpp b/third_party/WebKit/Source/core/layout/LayoutTextControlSingleLine.cpp index 271a4d8..3e73026 100644 --- a/third_party/WebKit/Source/core/layout/LayoutTextControlSingleLine.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutTextControlSingleLine.cpp
@@ -49,7 +49,7 @@ HTMLInputElement* element) : LayoutTextControl(element), should_draw_caps_lock_indicator_(false) {} -LayoutTextControlSingleLine::~LayoutTextControlSingleLine() {} +LayoutTextControlSingleLine::~LayoutTextControlSingleLine() = default; inline Element* LayoutTextControlSingleLine::ContainerElement() const { return InputElement()->UserAgentShadowRoot()->getElementById(
diff --git a/third_party/WebKit/Source/core/layout/LayoutTheme.h b/third_party/WebKit/Source/core/layout/LayoutTheme.h index 6c31b86..9c63267 100644 --- a/third_party/WebKit/Source/core/layout/LayoutTheme.h +++ b/third_party/WebKit/Source/core/layout/LayoutTheme.h
@@ -54,7 +54,7 @@ explicit LayoutTheme(Theme*); public: - virtual ~LayoutTheme() {} + virtual ~LayoutTheme() = default; static LayoutTheme& GetTheme();
diff --git a/third_party/WebKit/Source/core/layout/LayoutThemeDefault.cpp b/third_party/WebKit/Source/core/layout/LayoutThemeDefault.cpp index 437c023..b6076c4 100644 --- a/third_party/WebKit/Source/core/layout/LayoutThemeDefault.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutThemeDefault.cpp
@@ -59,7 +59,7 @@ caret_blink_interval_ = LayoutTheme::CaretBlinkInterval(); } -LayoutThemeDefault::~LayoutThemeDefault() {} +LayoutThemeDefault::~LayoutThemeDefault() = default; bool LayoutThemeDefault::ThemeDrawsFocusRing(const ComputedStyle& style) const { if (UseMockTheme()) {
diff --git a/third_party/WebKit/Source/core/layout/LayoutThemeMobile.cpp b/third_party/WebKit/Source/core/layout/LayoutThemeMobile.cpp index 48734ff..4a34afa6 100644 --- a/third_party/WebKit/Source/core/layout/LayoutThemeMobile.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutThemeMobile.cpp
@@ -38,7 +38,7 @@ return base::AdoptRef(new LayoutThemeMobile()); } -LayoutThemeMobile::~LayoutThemeMobile() {} +LayoutThemeMobile::~LayoutThemeMobile() = default; String LayoutThemeMobile::ExtraDefaultStyleSheet() { return LayoutThemeDefault::ExtraDefaultStyleSheet() +
diff --git a/third_party/WebKit/Source/core/layout/LayoutTreeAsText.cpp b/third_party/WebKit/Source/core/layout/LayoutTreeAsText.cpp index 2395858..ae2c80c5 100644 --- a/third_party/WebKit/Source/core/layout/LayoutTreeAsText.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutTreeAsText.cpp
@@ -654,10 +654,10 @@ // Calculate the clip rects we should use. LayoutRect layer_bounds; ClipRect damage_rect, clip_rect_to_apply; - layer->Clipper(PaintLayer::kDoNotUseGeometryMapper) - .CalculateRects(ClipRectsContext(root_layer, kUncachedClipRects), nullptr, - paint_rect, layer_bounds, damage_rect, - clip_rect_to_apply); + layer->Clipper(PaintLayer::kUseGeometryMapper) + .CalculateRects(ClipRectsContext(root_layer, kUncachedClipRects), + &layer->GetLayoutObject().FirstFragment(), paint_rect, + layer_bounds, damage_rect, clip_rect_to_apply); // Ensure our lists are up to date. layer->StackingNode()->UpdateLayerListsIfNeeded(); @@ -816,7 +816,7 @@ LayoutAsTextBehavior behavior, const PaintLayer* marked_layer) { if (!(behavior & kLayoutAsTextDontUpdateLayout)) - frame->GetDocument()->UpdateStyleAndLayout(); + frame->View()->UpdateLifecycleToPrePaintClean(); LayoutObject* layout_object = frame->ContentLayoutObject(); if (!layout_object || !layout_object->IsBox()) @@ -828,6 +828,11 @@ if (is_text_printing_mode) { print_context.BeginPrintMode(layout_box->ClientWidth(), layout_box->ClientHeight()); + + // The lifecycle needs to be run again after changing printing mode, + // to account for any style updates due to media query change. + if (!(behavior & kLayoutAsTextDontUpdateLayout)) + frame->View()->UpdateLifecyclePhasesForPrinting(); } String representation = ExternalRepresentation(ToLayoutBox(layout_object),
diff --git a/third_party/WebKit/Source/core/layout/LayoutVideo.cpp b/third_party/WebKit/Source/core/layout/LayoutVideo.cpp index 69a25bc1..5a8f466 100644 --- a/third_party/WebKit/Source/core/layout/LayoutVideo.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutVideo.cpp
@@ -41,7 +41,7 @@ SetIntrinsicSize(CalculateIntrinsicSize()); } -LayoutVideo::~LayoutVideo() {} +LayoutVideo::~LayoutVideo() = default; LayoutSize LayoutVideo::DefaultSize() { return LayoutSize(kDefaultWidth, kDefaultHeight);
diff --git a/third_party/WebKit/Source/core/layout/LayoutView.cpp b/third_party/WebKit/Source/core/layout/LayoutView.cpp index b6e9557..66a0f880 100644 --- a/third_party/WebKit/Source/core/layout/LayoutView.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutView.cpp
@@ -105,7 +105,7 @@ SetPositionState(EPosition::kAbsolute); // to 0,0 :) } -LayoutView::~LayoutView() {} +LayoutView::~LayoutView() = default; bool LayoutView::HitTest(HitTestResult& result) { // We have to recursively update layout/style here because otherwise, when the
diff --git a/third_party/WebKit/Source/core/layout/MultiColumnFragmentainerGroup.cpp b/third_party/WebKit/Source/core/layout/MultiColumnFragmentainerGroup.cpp index a497a8d8..2d96414 100644 --- a/third_party/WebKit/Source/core/layout/MultiColumnFragmentainerGroup.cpp +++ b/third_party/WebKit/Source/core/layout/MultiColumnFragmentainerGroup.cpp
@@ -634,7 +634,8 @@ // MultiColumnFragmentainerGroup::operator=. Since // MultiColumnFragmentainerGroup is non-copyable, we cannot define the // operator=. -MultiColumnFragmentainerGroupList::~MultiColumnFragmentainerGroupList() {} +MultiColumnFragmentainerGroupList::~MultiColumnFragmentainerGroupList() = + default; MultiColumnFragmentainerGroup& MultiColumnFragmentainerGroupList::AddExtraGroup() {
diff --git a/third_party/WebKit/Source/core/layout/ScrollAnchor.cpp b/third_party/WebKit/Source/core/layout/ScrollAnchor.cpp index 66d6535..a73f974 100644 --- a/third_party/WebKit/Source/core/layout/ScrollAnchor.cpp +++ b/third_party/WebKit/Source/core/layout/ScrollAnchor.cpp
@@ -36,7 +36,7 @@ SetScroller(scroller); } -ScrollAnchor::~ScrollAnchor() {} +ScrollAnchor::~ScrollAnchor() = default; void ScrollAnchor::SetScroller(ScrollableArea* scroller) { DCHECK_NE(scroller_, scroller);
diff --git a/third_party/WebKit/Source/core/layout/TableGridCell.cpp b/third_party/WebKit/Source/core/layout/TableGridCell.cpp index ad412688..f9fdb83 100644 --- a/third_party/WebKit/Source/core/layout/TableGridCell.cpp +++ b/third_party/WebKit/Source/core/layout/TableGridCell.cpp
@@ -8,8 +8,8 @@ namespace blink { -TableGridCell::TableGridCell() {} +TableGridCell::TableGridCell() = default; -TableGridCell::~TableGridCell() {} +TableGridCell::~TableGridCell() = default; } // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/TableLayoutAlgorithm.h b/third_party/WebKit/Source/core/layout/TableLayoutAlgorithm.h index 6dce04f..0753d3a 100644 --- a/third_party/WebKit/Source/core/layout/TableLayoutAlgorithm.h +++ b/third_party/WebKit/Source/core/layout/TableLayoutAlgorithm.h
@@ -35,7 +35,7 @@ public: explicit TableLayoutAlgorithm(LayoutTable* table) : table_(table) {} - virtual ~TableLayoutAlgorithm() {} + virtual ~TableLayoutAlgorithm() = default; virtual void ComputeIntrinsicLogicalWidths(LayoutUnit& min_width, LayoutUnit& max_width) = 0;
diff --git a/third_party/WebKit/Source/core/layout/TableLayoutAlgorithmAuto.cpp b/third_party/WebKit/Source/core/layout/TableLayoutAlgorithmAuto.cpp index 9d3fae5f..1a24ac0 100644 --- a/third_party/WebKit/Source/core/layout/TableLayoutAlgorithmAuto.cpp +++ b/third_party/WebKit/Source/core/layout/TableLayoutAlgorithmAuto.cpp
@@ -35,7 +35,7 @@ effective_logical_width_dirty_(true), scaled_width_from_percent_columns_() {} -TableLayoutAlgorithmAuto::~TableLayoutAlgorithmAuto() {} +TableLayoutAlgorithmAuto::~TableLayoutAlgorithmAuto() = default; void TableLayoutAlgorithmAuto::RecalcColumn(unsigned eff_col) { Layout& column_layout = layout_struct_[eff_col];
diff --git a/third_party/WebKit/Source/core/layout/TextAutosizer.cpp b/third_party/WebKit/Source/core/layout/TextAutosizer.cpp index f0132c8..9a0c9bd 100644 --- a/third_party/WebKit/Source/core/layout/TextAutosizer.cpp +++ b/third_party/WebKit/Source/core/layout/TextAutosizer.cpp
@@ -240,7 +240,7 @@ update_page_info_deferred_(false) { } -TextAutosizer::~TextAutosizer() {} +TextAutosizer::~TextAutosizer() = default; void TextAutosizer::Record(LayoutBlock* block) { if (!page_info_.setting_enabled_)
diff --git a/third_party/WebKit/Source/core/layout/TextDecorationOffset.h b/third_party/WebKit/Source/core/layout/TextDecorationOffset.h index 57ab82b..d388d7d 100644 --- a/third_party/WebKit/Source/core/layout/TextDecorationOffset.h +++ b/third_party/WebKit/Source/core/layout/TextDecorationOffset.h
@@ -24,7 +24,7 @@ : TextDecorationOffsetBase(style), inline_text_box_(inline_text_box), decorating_box_(decorating_box) {} - ~TextDecorationOffset() {} + ~TextDecorationOffset() = default; int ComputeUnderlineOffsetForUnder(float text_decoration_thickness, LineVerticalPositionType) const override;
diff --git a/third_party/WebKit/Source/core/layout/TextDecorationOffsetBase.h b/third_party/WebKit/Source/core/layout/TextDecorationOffsetBase.h index d7eaf2c..adc04c6 100644 --- a/third_party/WebKit/Source/core/layout/TextDecorationOffsetBase.h +++ b/third_party/WebKit/Source/core/layout/TextDecorationOffsetBase.h
@@ -21,7 +21,7 @@ public: TextDecorationOffsetBase(const ComputedStyle& style) : style_(style) {} - ~TextDecorationOffsetBase() {} + ~TextDecorationOffsetBase() = default; virtual int ComputeUnderlineOffsetForUnder( float text_decoration_thickness,
diff --git a/third_party/WebKit/Source/core/layout/VerticalPositionCache.h b/third_party/WebKit/Source/core/layout/VerticalPositionCache.h index eeb85f6d..1a471de3 100644 --- a/third_party/WebKit/Source/core/layout/VerticalPositionCache.h +++ b/third_party/WebKit/Source/core/layout/VerticalPositionCache.h
@@ -41,7 +41,7 @@ STACK_ALLOCATED(); public: - VerticalPositionCache() {} + VerticalPositionCache() = default; int Get(LineLayoutItem layout_object, FontBaseline baseline_type) const { const HashMap<LineLayoutItem, int>& map_to_check =
diff --git a/third_party/WebKit/Source/core/layout/api/LineLayoutBR.h b/third_party/WebKit/Source/core/layout/api/LineLayoutBR.h index 1a8ab16..3236531 100644 --- a/third_party/WebKit/Source/core/layout/api/LineLayoutBR.h +++ b/third_party/WebKit/Source/core/layout/api/LineLayoutBR.h
@@ -20,7 +20,7 @@ explicit LineLayoutBR(std::nullptr_t) : LineLayoutText(nullptr) {} - LineLayoutBR() {} + LineLayoutBR() = default; int LineHeight(bool first_line) const { return ToBR()->LineHeight(first_line);
diff --git a/third_party/WebKit/Source/core/layout/api/LineLayoutBlockFlow.h b/third_party/WebKit/Source/core/layout/api/LineLayoutBlockFlow.h index a712e7c1..c6b8c16 100644 --- a/third_party/WebKit/Source/core/layout/api/LineLayoutBlockFlow.h +++ b/third_party/WebKit/Source/core/layout/api/LineLayoutBlockFlow.h
@@ -28,7 +28,7 @@ explicit LineLayoutBlockFlow(std::nullptr_t) : LineLayoutBox(nullptr) {} - LineLayoutBlockFlow() {} + LineLayoutBlockFlow() = default; LineLayoutItem FirstChild() const { return LineLayoutItem(ToBlockFlow()->FirstChild());
diff --git a/third_party/WebKit/Source/core/layout/api/LineLayoutBox.h b/third_party/WebKit/Source/core/layout/api/LineLayoutBox.h index 665f0d91..404180c 100644 --- a/third_party/WebKit/Source/core/layout/api/LineLayoutBox.h +++ b/third_party/WebKit/Source/core/layout/api/LineLayoutBox.h
@@ -26,7 +26,7 @@ explicit LineLayoutBox(std::nullptr_t) : LineLayoutBoxModel(nullptr) {} - LineLayoutBox() {} + LineLayoutBox() = default; LayoutPoint Location() const { return ToBox()->Location(); }
diff --git a/third_party/WebKit/Source/core/layout/api/LineLayoutBoxModel.h b/third_party/WebKit/Source/core/layout/api/LineLayoutBoxModel.h index c2fea0d..c92d0c0 100644 --- a/third_party/WebKit/Source/core/layout/api/LineLayoutBoxModel.h +++ b/third_party/WebKit/Source/core/layout/api/LineLayoutBoxModel.h
@@ -25,7 +25,7 @@ explicit LineLayoutBoxModel(std::nullptr_t) : LineLayoutItem(nullptr) {} - LineLayoutBoxModel() {} + LineLayoutBoxModel() = default; // TODO(dgrogan) Remove. Implement API methods that proxy to the PaintLayer. PaintLayer* Layer() const { return ToBoxModel()->Layer(); }
diff --git a/third_party/WebKit/Source/core/layout/api/LineLayoutInline.h b/third_party/WebKit/Source/core/layout/api/LineLayoutInline.h index ce0a367..e2c6d547 100644 --- a/third_party/WebKit/Source/core/layout/api/LineLayoutInline.h +++ b/third_party/WebKit/Source/core/layout/api/LineLayoutInline.h
@@ -25,7 +25,7 @@ explicit LineLayoutInline(std::nullptr_t) : LineLayoutBoxModel(nullptr) {} - LineLayoutInline() {} + LineLayoutInline() = default; LineLayoutItem FirstChild() const { return LineLayoutItem(ToInline()->FirstChild());
diff --git a/third_party/WebKit/Source/core/layout/api/LineLayoutListMarker.h b/third_party/WebKit/Source/core/layout/api/LineLayoutListMarker.h index e2cd746..ffb4a9d 100644 --- a/third_party/WebKit/Source/core/layout/api/LineLayoutListMarker.h +++ b/third_party/WebKit/Source/core/layout/api/LineLayoutListMarker.h
@@ -22,7 +22,7 @@ explicit LineLayoutListMarker(std::nullptr_t) : LineLayoutBox(nullptr) {} - LineLayoutListMarker() {} + LineLayoutListMarker() = default; bool IsInside() const { return ToListMarker()->IsInside(); }
diff --git a/third_party/WebKit/Source/core/layout/api/LineLayoutRubyBase.h b/third_party/WebKit/Source/core/layout/api/LineLayoutRubyBase.h index 56995b2..9bd0497 100644 --- a/third_party/WebKit/Source/core/layout/api/LineLayoutRubyBase.h +++ b/third_party/WebKit/Source/core/layout/api/LineLayoutRubyBase.h
@@ -22,7 +22,7 @@ explicit LineLayoutRubyBase(std::nullptr_t) : LineLayoutBlockFlow(nullptr) {} - LineLayoutRubyBase() {} + LineLayoutRubyBase() = default; private: LayoutRubyBase* ToRubyBase() { return ToLayoutRubyBase(GetLayoutObject()); }
diff --git a/third_party/WebKit/Source/core/layout/api/LineLayoutRubyRun.h b/third_party/WebKit/Source/core/layout/api/LineLayoutRubyRun.h index 27ae0acd..4b6c420 100644 --- a/third_party/WebKit/Source/core/layout/api/LineLayoutRubyRun.h +++ b/third_party/WebKit/Source/core/layout/api/LineLayoutRubyRun.h
@@ -24,7 +24,7 @@ explicit LineLayoutRubyRun(std::nullptr_t) : LineLayoutBlockFlow(nullptr) {} - LineLayoutRubyRun() {} + LineLayoutRubyRun() = default; void GetOverhang(bool first_line, LineLayoutItem start_layout_item,
diff --git a/third_party/WebKit/Source/core/layout/api/LineLayoutRubyText.h b/third_party/WebKit/Source/core/layout/api/LineLayoutRubyText.h index 40e157c..d6d9d4d 100644 --- a/third_party/WebKit/Source/core/layout/api/LineLayoutRubyText.h +++ b/third_party/WebKit/Source/core/layout/api/LineLayoutRubyText.h
@@ -22,7 +22,7 @@ explicit LineLayoutRubyText(std::nullptr_t) : LineLayoutBlockFlow(nullptr) {} - LineLayoutRubyText() {} + LineLayoutRubyText() = default; private: LayoutRubyText* ToRubyText() { return ToLayoutRubyText(GetLayoutObject()); }
diff --git a/third_party/WebKit/Source/core/layout/api/LineLayoutSVGInline.h b/third_party/WebKit/Source/core/layout/api/LineLayoutSVGInline.h index cbb89e6..6dc7a5a 100644 --- a/third_party/WebKit/Source/core/layout/api/LineLayoutSVGInline.h +++ b/third_party/WebKit/Source/core/layout/api/LineLayoutSVGInline.h
@@ -22,7 +22,7 @@ explicit LineLayoutSVGInline(std::nullptr_t) : LineLayoutInline(nullptr) {} - LineLayoutSVGInline() {} + LineLayoutSVGInline() = default; private: LayoutSVGInline* ToSVGInline() {
diff --git a/third_party/WebKit/Source/core/layout/api/LineLayoutSVGInlineText.h b/third_party/WebKit/Source/core/layout/api/LineLayoutSVGInlineText.h index ab33d2b..276dd0c 100644 --- a/third_party/WebKit/Source/core/layout/api/LineLayoutSVGInlineText.h +++ b/third_party/WebKit/Source/core/layout/api/LineLayoutSVGInlineText.h
@@ -22,7 +22,7 @@ explicit LineLayoutSVGInlineText(std::nullptr_t) : LineLayoutText(nullptr) {} - LineLayoutSVGInlineText() {} + LineLayoutSVGInlineText() = default; const Vector<SVGTextMetrics>& MetricsList() const { return ToSVGInlineText()->MetricsList();
diff --git a/third_party/WebKit/Source/core/layout/api/LineLayoutSVGTextPath.h b/third_party/WebKit/Source/core/layout/api/LineLayoutSVGTextPath.h index 84c3644..1d430f9 100644 --- a/third_party/WebKit/Source/core/layout/api/LineLayoutSVGTextPath.h +++ b/third_party/WebKit/Source/core/layout/api/LineLayoutSVGTextPath.h
@@ -24,7 +24,7 @@ explicit LineLayoutSVGTextPath(std::nullptr_t) : LineLayoutSVGInline(nullptr) {} - LineLayoutSVGTextPath() {} + LineLayoutSVGTextPath() = default; std::unique_ptr<PathPositionMapper> LayoutPath() const { return ToSVGTextPath()->LayoutPath();
diff --git a/third_party/WebKit/Source/core/layout/api/LineLayoutText.h b/third_party/WebKit/Source/core/layout/api/LineLayoutText.h index d3cb1f7..7623ebb5 100644 --- a/third_party/WebKit/Source/core/layout/api/LineLayoutText.h +++ b/third_party/WebKit/Source/core/layout/api/LineLayoutText.h
@@ -25,7 +25,7 @@ explicit LineLayoutText(std::nullptr_t) : LineLayoutItem(nullptr) {} - LineLayoutText() {} + LineLayoutText() = default; InlineTextBox* FirstTextBox() const { return ToText()->FirstTextBox(); }
diff --git a/third_party/WebKit/Source/core/layout/api/LineLayoutTextCombine.h b/third_party/WebKit/Source/core/layout/api/LineLayoutTextCombine.h index 4330471d..85acf190 100644 --- a/third_party/WebKit/Source/core/layout/api/LineLayoutTextCombine.h +++ b/third_party/WebKit/Source/core/layout/api/LineLayoutTextCombine.h
@@ -22,7 +22,7 @@ explicit LineLayoutTextCombine(std::nullptr_t) : LineLayoutText(nullptr) {} - LineLayoutTextCombine() {} + LineLayoutTextCombine() = default; bool IsCombined() const { return ToTextCombine()->IsCombined(); }
diff --git a/third_party/WebKit/Source/core/layout/line/InlineBox.cpp b/third_party/WebKit/Source/core/layout/line/InlineBox.cpp index 5991a42..4fe4eed 100644 --- a/third_party/WebKit/Source/core/layout/line/InlineBox.cpp +++ b/third_party/WebKit/Source/core/layout/line/InlineBox.cpp
@@ -38,7 +38,7 @@ class LayoutObject; struct SameSizeAsInlineBox : DisplayItemClient { - ~SameSizeAsInlineBox() override {} + ~SameSizeAsInlineBox() override = default; void* a[4]; LayoutPoint b; LayoutUnit c;
diff --git a/third_party/WebKit/Source/core/layout/ng/geometry/ng_bfc_offset.h b/third_party/WebKit/Source/core/layout/ng/geometry/ng_bfc_offset.h index 0f8620f6a..06ee9ba 100644 --- a/third_party/WebKit/Source/core/layout/ng/geometry/ng_bfc_offset.h +++ b/third_party/WebKit/Source/core/layout/ng/geometry/ng_bfc_offset.h
@@ -17,7 +17,7 @@ // Care must be taken when converting this to a NGLogicalOffset to respect the // text direction. struct CORE_EXPORT NGBfcOffset { - NGBfcOffset() {} + NGBfcOffset() = default; NGBfcOffset(LayoutUnit line_offset, LayoutUnit block_offset) : line_offset(line_offset), block_offset(block_offset) {}
diff --git a/third_party/WebKit/Source/core/layout/ng/geometry/ng_box_strut.h b/third_party/WebKit/Source/core/layout/ng/geometry/ng_box_strut.h index 815e11c..416676f9 100644 --- a/third_party/WebKit/Source/core/layout/ng/geometry/ng_box_strut.h +++ b/third_party/WebKit/Source/core/layout/ng/geometry/ng_box_strut.h
@@ -18,7 +18,7 @@ // This struct is used for storing margins, borders or padding of a box on all // four edges. struct CORE_EXPORT NGBoxStrut { - NGBoxStrut() {} + NGBoxStrut() = default; NGBoxStrut(LayoutUnit inline_start, LayoutUnit inline_end, LayoutUnit block_start, @@ -78,7 +78,7 @@ // direction. // See https://drafts.csswg.org/css-writing-modes-3/#abstract-box struct CORE_EXPORT NGPhysicalBoxStrut { - NGPhysicalBoxStrut() {} + NGPhysicalBoxStrut() = default; NGPhysicalBoxStrut(LayoutUnit top, LayoutUnit right, LayoutUnit bottom, @@ -99,7 +99,7 @@ // Struct to store pixel snapped physical dimensions. struct CORE_EXPORT NGPixelSnappedPhysicalBoxStrut { - NGPixelSnappedPhysicalBoxStrut() {} + NGPixelSnappedPhysicalBoxStrut() = default; NGPixelSnappedPhysicalBoxStrut(int top, int right, int bottom, int left) : top(top), right(right), bottom(bottom), left(left) {} int top;
diff --git a/third_party/WebKit/Source/core/layout/ng/geometry/ng_logical_offset.h b/third_party/WebKit/Source/core/layout/ng/geometry/ng_logical_offset.h index 3e0862b..c45132be8 100644 --- a/third_party/WebKit/Source/core/layout/ng/geometry/ng_logical_offset.h +++ b/third_party/WebKit/Source/core/layout/ng/geometry/ng_logical_offset.h
@@ -20,7 +20,7 @@ // NGLogicalOffset is the position of a rect (typically a fragment) relative to // its parent rect in the logical coordinate system. struct CORE_EXPORT NGLogicalOffset { - NGLogicalOffset() {} + NGLogicalOffset() = default; NGLogicalOffset(LayoutUnit inline_offset, LayoutUnit block_offset) : inline_offset(inline_offset), block_offset(block_offset) {}
diff --git a/third_party/WebKit/Source/core/layout/ng/geometry/ng_logical_rect.h b/third_party/WebKit/Source/core/layout/ng/geometry/ng_logical_rect.h index 9775d49a..8cae4f5 100644 --- a/third_party/WebKit/Source/core/layout/ng/geometry/ng_logical_rect.h +++ b/third_party/WebKit/Source/core/layout/ng/geometry/ng_logical_rect.h
@@ -16,7 +16,7 @@ // NGLogicalRect is the position and size of a rect (typically a fragment) // relative to the parent. struct CORE_EXPORT NGLogicalRect { - NGLogicalRect() {} + NGLogicalRect() = default; NGLogicalRect(const NGLogicalOffset& offset, const NGLogicalSize& size) : offset(offset), size(size) {}
diff --git a/third_party/WebKit/Source/core/layout/ng/geometry/ng_logical_size.h b/third_party/WebKit/Source/core/layout/ng/geometry/ng_logical_size.h index 8c09920a..5829e8e2 100644 --- a/third_party/WebKit/Source/core/layout/ng/geometry/ng_logical_size.h +++ b/third_party/WebKit/Source/core/layout/ng/geometry/ng_logical_size.h
@@ -20,7 +20,7 @@ // NGLogicalSize is the size of rect (typically a fragment) in the logical // coordinate system. struct CORE_EXPORT NGLogicalSize { - NGLogicalSize() {} + NGLogicalSize() = default; NGLogicalSize(LayoutUnit inline_size, LayoutUnit block_size) : inline_size(inline_size), block_size(block_size) {}
diff --git a/third_party/WebKit/Source/core/layout/ng/geometry/ng_physical_location.h b/third_party/WebKit/Source/core/layout/ng/geometry/ng_physical_location.h index b72dbd3..2115ee9 100644 --- a/third_party/WebKit/Source/core/layout/ng/geometry/ng_physical_location.h +++ b/third_party/WebKit/Source/core/layout/ng/geometry/ng_physical_location.h
@@ -14,7 +14,7 @@ // NGPhysicalLocation is the position of a rect (typically a fragment) relative // to the root document. struct CORE_EXPORT NGPhysicalLocation { - NGPhysicalLocation() {} + NGPhysicalLocation() = default; NGPhysicalLocation(LayoutUnit left, LayoutUnit top) : left(left), top(top) {} LayoutUnit left; LayoutUnit top;
diff --git a/third_party/WebKit/Source/core/layout/ng/geometry/ng_physical_offset.h b/third_party/WebKit/Source/core/layout/ng/geometry/ng_physical_offset.h index db136a35..11c276ad 100644 --- a/third_party/WebKit/Source/core/layout/ng/geometry/ng_physical_offset.h +++ b/third_party/WebKit/Source/core/layout/ng/geometry/ng_physical_offset.h
@@ -19,7 +19,7 @@ // NGPhysicalOffset is the position of a rect (typically a fragment) relative to // its parent rect in the physical coordinate system. struct CORE_EXPORT NGPhysicalOffset { - NGPhysicalOffset() {} + NGPhysicalOffset() = default; NGPhysicalOffset(LayoutUnit left, LayoutUnit top) : left(left), top(top) {} LayoutUnit left;
diff --git a/third_party/WebKit/Source/core/layout/ng/geometry/ng_physical_offset_rect.h b/third_party/WebKit/Source/core/layout/ng/geometry/ng_physical_offset_rect.h index be096bf..278c024 100644 --- a/third_party/WebKit/Source/core/layout/ng/geometry/ng_physical_offset_rect.h +++ b/third_party/WebKit/Source/core/layout/ng/geometry/ng_physical_offset_rect.h
@@ -17,7 +17,7 @@ // NGPhysicalOffsetRect is the position and size of a rect (typically a // fragment) relative to its parent rect in the physical coordinate system. struct CORE_EXPORT NGPhysicalOffsetRect { - NGPhysicalOffsetRect() {} + NGPhysicalOffsetRect() = default; NGPhysicalOffsetRect(const NGPhysicalOffset& offset, const NGPhysicalSize& size) : offset(offset), size(size) {}
diff --git a/third_party/WebKit/Source/core/layout/ng/geometry/ng_physical_size.h b/third_party/WebKit/Source/core/layout/ng/geometry/ng_physical_size.h index fa0a148..cd21866 100644 --- a/third_party/WebKit/Source/core/layout/ng/geometry/ng_physical_size.h +++ b/third_party/WebKit/Source/core/layout/ng/geometry/ng_physical_size.h
@@ -17,7 +17,7 @@ // NGPhysicalSize is the size of a rect (typically a fragment) in the physical // coordinate system. struct CORE_EXPORT NGPhysicalSize { - NGPhysicalSize() {} + NGPhysicalSize() = default; NGPhysicalSize(LayoutUnit width, LayoutUnit height) : width(width), height(height) {}
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_bidi_paragraph.h b/third_party/WebKit/Source/core/layout/ng/inline/ng_bidi_paragraph.h index f9dd929..45e517a 100644 --- a/third_party/WebKit/Source/core/layout/ng/inline/ng_bidi_paragraph.h +++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_bidi_paragraph.h
@@ -27,7 +27,7 @@ STACK_ALLOCATED(); public: - NGBidiParagraph() {} + NGBidiParagraph() = default; ~NGBidiParagraph(); // Splits the given paragraph to bidi runs and resolves the bidi embedding
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_break_token.cc b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_break_token.cc index 512b43fa..f5bfb21 100644 --- a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_break_token.cc +++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_break_token.cc
@@ -31,7 +31,7 @@ ignore_floats_(false), state_stack_(nullptr) {} -NGInlineBreakToken::~NGInlineBreakToken() {} +NGInlineBreakToken::~NGInlineBreakToken() = default; #ifndef NDEBUG
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_item_result.h b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_item_result.h index c8d83a5..e47ead6 100644 --- a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_item_result.h +++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_item_result.h
@@ -110,7 +110,7 @@ DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); public: - NGLineInfo() {} + NGLineInfo() = default; explicit NGLineInfo(size_t capacity) : results_(capacity) {} // The style to use for the line.
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_items_builder.cc b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_items_builder.cc index 09b3037..d8ff304 100644 --- a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_items_builder.cc +++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_items_builder.cc
@@ -177,8 +177,7 @@ // https://drafts.csswg.org/css-text-3/#collapse if (last_collapsible_space_ == CollapsibleSpace::kSpaceNoWrap && IsCollapsibleSpace(string[start]) && style->AutoWrap()) { - AppendBreakOpportunity(style, layout_object); - start++; + AppendBreakOpportunity(style, nullptr); last_collapsible_space_ = CollapsibleSpace::kSpace; }
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.cc b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.cc index 4aea1c7b..e5be260f 100644 --- a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.cc +++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.cc
@@ -138,6 +138,10 @@ const NGInlineItem& item = *item_result.item; if (item.Type() == NGInlineItem::kText || item.Type() == NGInlineItem::kControl) { + if (!item.GetLayoutObject()) { + // TODO(kojii): Add a flag to NGInlineItem for this case. + continue; + } DCHECK(item.GetLayoutObject()->IsText() || item.GetLayoutObject()->IsLayoutNGListItem()); DCHECK(!box->text_metrics.IsEmpty());
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_line_box_fragment_builder.cc b/third_party/WebKit/Source/core/layout/ng/inline/ng_line_box_fragment_builder.cc index e61291658..0399e5d 100644 --- a/third_party/WebKit/Source/core/layout/ng/inline/ng_line_box_fragment_builder.cc +++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_line_box_fragment_builder.cc
@@ -23,7 +23,7 @@ : NGContainerFragmentBuilder(style, writing_mode, TextDirection::kLtr), node_(node) {} -NGLineBoxFragmentBuilder::~NGLineBoxFragmentBuilder() {} +NGLineBoxFragmentBuilder::~NGLineBoxFragmentBuilder() = default; void NGLineBoxFragmentBuilder::Reset() { children_.clear();
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_line_box_fragment_builder.h b/third_party/WebKit/Source/core/layout/ng/inline/ng_line_box_fragment_builder.h index 8fb6e88..4843f662 100644 --- a/third_party/WebKit/Source/core/layout/ng/inline/ng_line_box_fragment_builder.h +++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_line_box_fragment_builder.h
@@ -58,7 +58,7 @@ UBiDiLevel bidi_level = 0xff; // Empty constructor needed for |resize()|. - Child() {} + Child() = default; // Create a placeholder. A placeholder does not have a fragment nor a bidi // level. Child(NGLogicalOffset offset) : offset(offset) {} @@ -107,7 +107,7 @@ STACK_ALLOCATED(); public: - ChildList() {} + ChildList() = default; void operator=(ChildList&& other) { children_ = std::move(other.children_); }
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_line_breaker.h b/third_party/WebKit/Source/core/layout/ng/inline/ng_line_breaker.h index ae2e5f53..d9d227c 100644 --- a/third_party/WebKit/Source/core/layout/ng/inline/ng_line_breaker.h +++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_line_breaker.h
@@ -41,7 +41,7 @@ NGExclusionSpace*, unsigned handled_float_index, const NGInlineBreakToken* = nullptr); - ~NGLineBreaker() {} + ~NGLineBreaker() = default; // Compute the next line break point and produces NGInlineItemResults for // the line.
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_offset_mapping_test.cc b/third_party/WebKit/Source/core/layout/ng/inline/ng_offset_mapping_test.cc index e3594d9..2d902c1 100644 --- a/third_party/WebKit/Source/core/layout/ng/inline/ng_offset_mapping_test.cc +++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_offset_mapping_test.cc
@@ -805,4 +805,29 @@ EXPECT_NE(span_mapping, span_after_mapping); } +TEST_P(ParameterizedNGOffsetMappingTest, NoWrapSpaceAndCollapsibleSpace) { + SetupHtml("t", + "<div id=t>" + "<span style='white-space: nowrap' id=span>foo </span>" + " bar" + "</div>"); + + const Element* span = GetElementById("span"); + const Node* foo = span->firstChild(); + const Node* bar = span->nextSibling(); + const NGOffsetMapping& mapping = GetOffsetMapping(); + + // NGInlineItemsBuilder inserts a ZWS to indicate break opportunity. + EXPECT_EQ(String(u"foo \u200Bbar"), mapping.GetText()); + + // Should't map any character in DOM to the generated ZWS. + ASSERT_EQ(3u, mapping.GetUnits().size()); + TEST_UNIT(mapping.GetUnits()[0], NGOffsetMappingUnitType::kIdentity, foo, 0u, + 4u, 0u, 4u); + TEST_UNIT(mapping.GetUnits()[1], NGOffsetMappingUnitType::kCollapsed, bar, 0u, + 1u, 5u, 5u); + TEST_UNIT(mapping.GetUnits()[2], NGOffsetMappingUnitType::kIdentity, bar, 1u, + 4u, 5u, 8u); +} + } // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/ng/layout_ng_block_flow.cc b/third_party/WebKit/Source/core/layout/ng/layout_ng_block_flow.cc index ec6e4685..8f37743 100644 --- a/third_party/WebKit/Source/core/layout/ng/layout_ng_block_flow.cc +++ b/third_party/WebKit/Source/core/layout/ng/layout_ng_block_flow.cc
@@ -17,7 +17,7 @@ LayoutNGBlockFlow::LayoutNGBlockFlow(Element* element) : LayoutNGMixin<LayoutBlockFlow>(element) {} -LayoutNGBlockFlow::~LayoutNGBlockFlow() {} +LayoutNGBlockFlow::~LayoutNGBlockFlow() = default; bool LayoutNGBlockFlow::IsOfType(LayoutObjectType type) const { return type == kLayoutObjectNGBlockFlow ||
diff --git a/third_party/WebKit/Source/core/layout/ng/layout_ng_mixin.cc b/third_party/WebKit/Source/core/layout/ng/layout_ng_mixin.cc index 5d2c38f..97b10417 100644 --- a/third_party/WebKit/Source/core/layout/ng/layout_ng_mixin.cc +++ b/third_party/WebKit/Source/core/layout/ng/layout_ng_mixin.cc
@@ -18,7 +18,7 @@ namespace blink { template <typename Base> -LayoutNGMixin<Base>::~LayoutNGMixin() {} +LayoutNGMixin<Base>::~LayoutNGMixin() = default; template <typename Base> bool LayoutNGMixin<Base>::IsOfType(LayoutObject::LayoutObjectType type) const {
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_base_fragment_builder.cc b/third_party/WebKit/Source/core/layout/ng/ng_base_fragment_builder.cc index 2e3ada39..1abf582 100644 --- a/third_party/WebKit/Source/core/layout/ng/ng_base_fragment_builder.cc +++ b/third_party/WebKit/Source/core/layout/ng/ng_base_fragment_builder.cc
@@ -20,7 +20,7 @@ TextDirection direction) : writing_mode_(writing_mode), direction_(direction) {} -NGBaseFragmentBuilder::~NGBaseFragmentBuilder() {} +NGBaseFragmentBuilder::~NGBaseFragmentBuilder() = default; NGBaseFragmentBuilder& NGBaseFragmentBuilder::SetStyle( scoped_refptr<const ComputedStyle> style) {
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_block_break_token.cc b/third_party/WebKit/Source/core/layout/ng/ng_block_break_token.cc index 2764006..0ed4256 100644 --- a/third_party/WebKit/Source/core/layout/ng/ng_block_break_token.cc +++ b/third_party/WebKit/Source/core/layout/ng/ng_block_break_token.cc
@@ -26,6 +26,9 @@ used_block_size_(used_block_size), has_last_resort_break_(has_last_resort_break) {} +NGBlockBreakToken::NGBlockBreakToken(NGLayoutInputNode node) + : NGBreakToken(kBlockBreakToken, kUnfinished, node) {} + #ifndef NDEBUG String NGBlockBreakToken::ToString() const {
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_block_break_token.h b/third_party/WebKit/Source/core/layout/ng/ng_block_break_token.h index eab3bb89..0ff8527 100644 --- a/third_party/WebKit/Source/core/layout/ng/ng_block_break_token.h +++ b/third_party/WebKit/Source/core/layout/ng/ng_block_break_token.h
@@ -42,6 +42,16 @@ new NGBlockBreakToken(node, used_block_size, has_last_resort_break)); } + // Creates a break token for a node that needs to produce its first fragment + // in the next fragmentainer. In this case we create a break token for a node + // that hasn't yet produced any fragments. + static scoped_refptr<NGBlockBreakToken> CreateBreakBefore( + NGLayoutInputNode node) { + auto* token = new NGBlockBreakToken(node); + token->is_break_before_ = true; + return base::AdoptRef(token); + } + // Represents the amount of block size used in previous fragments. // // E.g. if the layout block specifies a block size of 200px, and the previous @@ -49,6 +59,12 @@ // should have a size of 50px (assuming no additional fragmentation). LayoutUnit UsedBlockSize() const { return used_block_size_; } + // Return true if this is a break token that was produced without any + // "preceding" fragment. This happens when we determine that the first + // fragment for a node needs to be created in a later fragmentainer than the + // one it was it was first encountered, due to block space shortage. + bool IsBreakBefore() const { return is_break_before_; } + bool HasLastResortBreak() const { return has_last_resort_break_; } // The break tokens for children of the layout node. @@ -77,9 +93,13 @@ LayoutUnit used_block_size, bool has_last_resort_break); + explicit NGBlockBreakToken(NGLayoutInputNode node); + Vector<scoped_refptr<NGBreakToken>> child_break_tokens_; LayoutUnit used_block_size_; + bool is_break_before_ = false; + // We're attempting to break at an undesirable place. Sometimes that's // unavoidable, but we should only break here if we cannot find a better break // point further up in the ancestry.
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_block_child_iterator.cc b/third_party/WebKit/Source/core/layout/ng/ng_block_child_iterator.cc index 57ca240f..1952cd7 100644 --- a/third_party/WebKit/Source/core/layout/ng/ng_block_child_iterator.cc +++ b/third_party/WebKit/Source/core/layout/ng/ng_block_child_iterator.cc
@@ -18,7 +18,7 @@ return; const auto& child_break_tokens = break_token->ChildBreakTokens(); if (!child_break_tokens.size()) { - if (break_token->UsedBlockSize() > LayoutUnit()) { + if (!break_token->IsBreakBefore()) { // We had a break token, but no child break token, and we're not // at the start. This means that we're just processing empty // content, such as the trailing childless portion of a block
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc b/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc index 3830622..4626665 100644 --- a/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc +++ b/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc
@@ -108,6 +108,7 @@ const NGConstraintSpace& space, NGBlockBreakToken* break_token) : NGLayoutAlgorithm(node, space, break_token), + is_resuming_(break_token && !break_token->IsBreakBefore()), exclusion_space_(new NGExclusionSpace(space.ExclusionSpace())) {} Optional<MinMaxSize> NGBlockLayoutAlgorithm::ComputeMinMaxSize() const { @@ -334,8 +335,9 @@ // then the BFC offset is still {} as the margin strut from the constraint // space must also be empty. // If we are resuming layout from a break token the same rule applies. Margin - // struts cannot pass through break tokens. - if (ConstraintSpace().IsNewFormattingContext() || BreakToken()) { + // struts cannot pass through break tokens (unless it's a break token before + // the first fragment (the one we're about to create)). + if (ConstraintSpace().IsNewFormattingContext() || is_resuming_) { MaybeUpdateFragmentBfcOffset(input_bfc_block_offset); DCHECK(input_margin_strut.IsEmpty()); #if DCHECK_IS_ON() @@ -564,7 +566,8 @@ // If there is a break token for a float we must be resuming layout, we must // always know our position in the BFC. - DCHECK(!child_break_token || container_builder_.BfcOffset()); + DCHECK(!child_break_token || child_break_token->IsBreakBefore() || + container_builder_.BfcOffset()); // No need to postpone the positioning if we know the correct offset. if (container_builder_.BfcOffset() || ConstraintSpace().FloatsBfcOffset()) { @@ -1467,9 +1470,7 @@ NGBoxStrut margins = ComputeMarginsFor(*space, child_style, ConstraintSpace()); - - // The block-start margin should only be used in the first fragment. - if (child_break_token) + if (ShouldIgnoreBlockStartMargin(ConstraintSpace(), child, child_break_token)) margins.block_start = LayoutUnit(); // TODO(ikilpatrick): Move the auto margins calculation for different writing @@ -1555,6 +1556,12 @@ if (is_new_fc) { space_available -= child_data.bfc_offset_estimate.block_offset; } + // The policy regarding collapsing block-start margin with the fragmentainer + // block-start is the same throughout the entire fragmentainer (although it + // really only matters at the beginning of each fragmentainer, we don't need + // to bother to check whether we're actually at the start). + space_builder.SetSeparateLeadingFragmentainerMargins( + ConstraintSpace().HasSeparateLeadingFragmentainerMargins()); } space_builder.SetFragmentainerBlockSize( ConstraintSpace().FragmentainerBlockSize());
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.h b/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.h index 3186620..038ea6a 100644 --- a/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.h +++ b/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.h
@@ -212,6 +212,9 @@ // determined that we're unable to fulfill the widows request. bool fit_all_lines_ = false; + // Set if we're resuming layout of a node that has already produced fragments. + bool is_resuming_; + bool abort_when_bfc_resolved_; bool has_processed_first_child_ = false;
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_break_token.h b/third_party/WebKit/Source/core/layout/ng/ng_break_token.h index ed51b1f..dd03b9c 100644 --- a/third_party/WebKit/Source/core/layout/ng/ng_break_token.h +++ b/third_party/WebKit/Source/core/layout/ng/ng_break_token.h
@@ -32,7 +32,7 @@ // The break token should encapsulate enough information to "resume" the layout. class CORE_EXPORT NGBreakToken : public RefCounted<NGBreakToken> { public: - virtual ~NGBreakToken() {} + virtual ~NGBreakToken() = default; enum NGBreakTokenType { kBlockBreakToken, kInlineBreakToken }; NGBreakTokenType Type() const { return static_cast<NGBreakTokenType>(type_); }
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_column_layout_algorithm.cc b/third_party/WebKit/Source/core/layout/ng/ng_column_layout_algorithm.cc index 47a8071..933b688 100644 --- a/third_party/WebKit/Source/core/layout/ng/ng_column_layout_algorithm.cc +++ b/third_party/WebKit/Source/core/layout/ng/ng_column_layout_algorithm.cc
@@ -94,8 +94,6 @@ ResolveUsedColumnCount(content_box_size.inline_size, Style()); do { - scoped_refptr<NGConstraintSpace> child_space = - CreateConstraintSpaceForColumns(column_size); scoped_refptr<NGBlockBreakToken> break_token = BreakToken(); LayoutUnit intrinsic_block_size; LayoutUnit column_inline_offset(border_scrollbar_padding.inline_start); @@ -108,8 +106,15 @@ // balancing). LayoutUnit minimal_space_shortage(LayoutUnit::Max()); + // Allow any block-start margins at the start of the first column. + bool separate_leading_margins = true; + do { // Lay out one column. Each column will become a fragment. + scoped_refptr<NGConstraintSpace> child_space = + CreateConstraintSpaceForColumns(column_size, + separate_leading_margins); + NGBlockLayoutAlgorithm child_algorithm(Node(), *child_space.get(), break_token.get()); scoped_refptr<NGLayoutResult> result = child_algorithm.Layout(); @@ -125,8 +130,12 @@ std::min(minimal_space_shortage, space_shortage); } actual_column_count++; - if (result->HasForcedBreak()) + if (result->HasForcedBreak()) { forced_break_count++; + separate_leading_margins = true; + } else { + separate_leading_margins = false; + } LayoutUnit block_size = NGBoxFragment(writing_mode, *column).BlockSize(); intrinsic_block_size = @@ -273,7 +282,8 @@ scoped_refptr<NGConstraintSpace> NGColumnLayoutAlgorithm::CreateConstraintSpaceForColumns( - const NGLogicalSize& column_size) const { + const NGLogicalSize& column_size, + bool separate_leading_margins) const { NGConstraintSpaceBuilder space_builder(ConstraintSpace()); space_builder.SetAvailableSize(column_size); space_builder.SetPercentageResolutionSize(column_size); @@ -292,6 +302,8 @@ space_builder.SetFragmentainerSpaceAtBfcStart(column_block_size); space_builder.SetIsNewFormattingContext(true); space_builder.SetIsAnonymous(true); + space_builder.SetSeparateLeadingFragmentainerMargins( + separate_leading_margins); return space_builder.ToConstraintSpace(Style().GetWritingMode()); }
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_column_layout_algorithm.h b/third_party/WebKit/Source/core/layout/ng/ng_column_layout_algorithm.h index 8a1975c..0d730d3 100644 --- a/third_party/WebKit/Source/core/layout/ng/ng_column_layout_algorithm.h +++ b/third_party/WebKit/Source/core/layout/ng/ng_column_layout_algorithm.h
@@ -43,7 +43,8 @@ LayoutUnit container_content_box_block_size) const; scoped_refptr<NGConstraintSpace> CreateConstraintSpaceForColumns( - const NGLogicalSize& column_size) const; + const NGLogicalSize& column_size, + bool separate_leading_margins) const; scoped_refptr<NGConstraintSpace> CreateConstaintSpaceForBalancing( const NGLogicalSize& column_size) const; };
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_constraint_space.cc b/third_party/WebKit/Source/core/layout/ng/ng_constraint_space.cc index 18b9862..af88832a 100644 --- a/third_party/WebKit/Source/core/layout/ng/ng_constraint_space.cc +++ b/third_party/WebKit/Source/core/layout/ng/ng_constraint_space.cc
@@ -42,6 +42,7 @@ bool is_inline_direction_triggers_scrollbar, bool is_block_direction_triggers_scrollbar, NGFragmentationType block_direction_fragmentation_type, + bool separate_leading_fragmentainer_margins, bool is_new_fc, bool is_anonymous, bool use_first_line_style, @@ -67,6 +68,8 @@ is_block_direction_triggers_scrollbar_( is_block_direction_triggers_scrollbar), block_direction_fragmentation_type_(block_direction_fragmentation_type), + separate_leading_fragmentainer_margins_( + separate_leading_fragmentainer_margins), is_new_fc_(is_new_fc), is_anonymous_(is_anonymous), use_first_line_style_(use_first_line_style), @@ -224,6 +227,8 @@ block_direction_fragmentation_type_ == other.block_direction_fragmentation_type_ && is_new_fc_ == other.is_new_fc_ && + separate_leading_fragmentainer_margins_ == + other.separate_leading_fragmentainer_margins_ && is_anonymous_ == other.is_anonymous_ && writing_mode_ == other.writing_mode_ && direction_ == other.direction_ &&
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_constraint_space.h b/third_party/WebKit/Source/core/layout/ng/ng_constraint_space.h index 7728eca..e334f04b 100644 --- a/third_party/WebKit/Source/core/layout/ng/ng_constraint_space.h +++ b/third_party/WebKit/Source/core/layout/ng/ng_constraint_space.h
@@ -95,6 +95,15 @@ // Formatting Context. bool IsNewFormattingContext() const { return is_new_fc_; } + // Return true if we are to separate (i.e. honor, rather than collapse) + // block-start margins at the beginning of fragmentainers. This only makes a + // difference if we're block-fragmented (pagination, multicol, etc.). Then + // block-start margins at the beginning of a fragmentainers are to be + // truncated to 0 if they occur after a soft (unforced) break. + bool HasSeparateLeadingFragmentainerMargins() const { + return separate_leading_fragmentainer_margins_; + } + // Whether the fragment produced from layout should be anonymous, (e.g. it // may be a column in a multi-column layout). In such cases it shouldn't have // any borders or padding. @@ -212,6 +221,7 @@ bool is_inline_direction_triggers_scrollbar, bool is_block_direction_triggers_scrollbar, NGFragmentationType block_direction_fragmentation_type, + bool separate_leading_fragmentainer_margins_, bool is_new_fc, bool is_anonymous, bool use_first_line_style, @@ -240,6 +250,7 @@ unsigned is_block_direction_triggers_scrollbar_ : 1; unsigned block_direction_fragmentation_type_ : 2; + unsigned separate_leading_fragmentainer_margins_ : 1; // Whether the current constraint space is for the newly established // formatting Context
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_constraint_space_builder.cc b/third_party/WebKit/Source/core/layout/ng/ng_constraint_space_builder.cc index 18f4981..f480a73 100644 --- a/third_party/WebKit/Source/core/layout/ng/ng_constraint_space_builder.cc +++ b/third_party/WebKit/Source/core/layout/ng/ng_constraint_space_builder.cc
@@ -27,6 +27,7 @@ is_inline_direction_triggers_scrollbar_(false), is_block_direction_triggers_scrollbar_(false), fragmentation_type_(kFragmentNone), + separate_leading_fragmentainer_margins_(false), is_new_fc_(false), is_anonymous_(false), use_first_line_sytle_(false), @@ -231,10 +232,11 @@ is_fixed_size_block_, is_shrink_to_fit_, is_inline_direction_triggers_scrollbar_, is_block_direction_triggers_scrollbar_, - static_cast<NGFragmentationType>(fragmentation_type_), is_new_fc_, - is_anonymous_, use_first_line_sytle_, margin_strut, bfc_offset, - floats_bfc_offset, exclusion_space, unpositioned_floats_, - clearance_offset, baseline_requests_)); + static_cast<NGFragmentationType>(fragmentation_type_), + separate_leading_fragmentainer_margins_, is_new_fc_, is_anonymous_, + use_first_line_sytle_, margin_strut, bfc_offset, floats_bfc_offset, + exclusion_space, unpositioned_floats_, clearance_offset, + baseline_requests_)); } return base::AdoptRef(new NGConstraintSpace( out_writing_mode, true, static_cast<TextDirection>(text_direction_), @@ -245,10 +247,11 @@ is_fixed_size_inline_, is_shrink_to_fit_, is_block_direction_triggers_scrollbar_, is_inline_direction_triggers_scrollbar_, - static_cast<NGFragmentationType>(fragmentation_type_), is_new_fc_, - is_anonymous_, use_first_line_sytle_, margin_strut, bfc_offset, - floats_bfc_offset, exclusion_space, unpositioned_floats_, - clearance_offset, baseline_requests_)); + static_cast<NGFragmentationType>(fragmentation_type_), + separate_leading_fragmentainer_margins_, is_new_fc_, is_anonymous_, + use_first_line_sytle_, margin_strut, bfc_offset, floats_bfc_offset, + exclusion_space, unpositioned_floats_, clearance_offset, + baseline_requests_)); } } // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_constraint_space_builder.h b/third_party/WebKit/Source/core/layout/ng/ng_constraint_space_builder.h index e88902a6a..efc8cb4 100644 --- a/third_party/WebKit/Source/core/layout/ng/ng_constraint_space_builder.h +++ b/third_party/WebKit/Source/core/layout/ng/ng_constraint_space_builder.h
@@ -53,6 +53,12 @@ bool is_block_direction_triggers_scrollbar); NGConstraintSpaceBuilder& SetFragmentationType(NGFragmentationType); + + NGConstraintSpaceBuilder& SetSeparateLeadingFragmentainerMargins(bool val) { + separate_leading_fragmentainer_margins_ = val; + return *this; + } + NGConstraintSpaceBuilder& SetIsNewFormattingContext(bool is_new_fc); NGConstraintSpaceBuilder& SetIsAnonymous(bool is_anonymous); NGConstraintSpaceBuilder& SetUseFirstLineStyle(bool use_first_line_sytle); @@ -102,6 +108,7 @@ unsigned is_inline_direction_triggers_scrollbar_ : 1; unsigned is_block_direction_triggers_scrollbar_ : 1; unsigned fragmentation_type_ : 2; + unsigned separate_leading_fragmentainer_margins_ : 1; unsigned is_new_fc_ : 1; unsigned is_anonymous_ : 1; unsigned use_first_line_sytle_ : 1;
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_container_fragment_builder.cc b/third_party/WebKit/Source/core/layout/ng/ng_container_fragment_builder.cc index fd37506..6b8001b 100644 --- a/third_party/WebKit/Source/core/layout/ng/ng_container_fragment_builder.cc +++ b/third_party/WebKit/Source/core/layout/ng/ng_container_fragment_builder.cc
@@ -18,7 +18,7 @@ TextDirection direction) : NGBaseFragmentBuilder(std::move(style), writing_mode, direction) {} -NGContainerFragmentBuilder::~NGContainerFragmentBuilder() {} +NGContainerFragmentBuilder::~NGContainerFragmentBuilder() = default; NGContainerFragmentBuilder& NGContainerFragmentBuilder::SetInlineSize( LayoutUnit inline_size) {
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_fragment_builder.cc b/third_party/WebKit/Source/core/layout/ng/ng_fragment_builder.cc index 7a67cab..80e3a64 100644 --- a/third_party/WebKit/Source/core/layout/ng/ng_fragment_builder.cc +++ b/third_party/WebKit/Source/core/layout/ng/ng_fragment_builder.cc
@@ -43,7 +43,7 @@ is_old_layout_root_(false), did_break_(false) {} -NGFragmentBuilder::~NGFragmentBuilder() {} +NGFragmentBuilder::~NGFragmentBuilder() = default; NGFragmentBuilder& NGFragmentBuilder::SetIntrinsicBlockSize( LayoutUnit intrinsic_block_size) { @@ -111,12 +111,7 @@ } return *this; } - // TODO(mstensho): Come up with a more intuitive way of creating an unfinished - // break token. We currently need to pass a Vector here, just to end up in the - // right NGBlockBreakToken constructor - the one that sets the token as - // unfinished. - Vector<scoped_refptr<NGBreakToken>> dummy; - auto token = NGBlockBreakToken::Create(child, LayoutUnit(), dummy); + auto token = NGBlockBreakToken::CreateBreakBefore(child); child_break_tokens_.push_back(token); return *this; }
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_fragmentation_utils.cc b/third_party/WebKit/Source/core/layout/ng/ng_fragmentation_utils.cc index 028f630f..012af5c 100644 --- a/third_party/WebKit/Source/core/layout/ng/ng_fragmentation_utils.cc +++ b/third_party/WebKit/Source/core/layout/ng/ng_fragmentation_utils.cc
@@ -103,4 +103,27 @@ return false; } +bool ShouldIgnoreBlockStartMargin(const NGConstraintSpace& constraint_space, + NGLayoutInputNode child, + const NGBreakToken* child_break_token) { + // Always ignore margins if we're not at the start of the child. + if (child_break_token && child_break_token->IsBlockType() && + !ToNGBlockBreakToken(child_break_token)->IsBreakBefore()) + return true; + + // If we're not fragmented or have been explicitly instructed to honor + // margins, don't ignore them. + if (!constraint_space.HasBlockFragmentation() || + constraint_space.HasSeparateLeadingFragmentainerMargins()) + return false; + + // Only ignore margins if we're at the start of the fragmentainer. + if (constraint_space.FragmentainerBlockSize() != + constraint_space.FragmentainerSpaceAtBfcStart()) + return false; + + // Otherwise, only ignore in-flow margins. + return !child.IsFloating() && !child.IsOutOfFlowPositioned(); +} + } // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_fragmentation_utils.h b/third_party/WebKit/Source/core/layout/ng/ng_fragmentation_utils.h index 7f2d636..96c96bd 100644 --- a/third_party/WebKit/Source/core/layout/ng/ng_fragmentation_utils.h +++ b/third_party/WebKit/Source/core/layout/ng/ng_fragmentation_utils.h
@@ -5,6 +5,7 @@ #ifndef NGFragmentationUtils_h #define NGFragmentationUtils_h +#include "core/layout/ng/ng_layout_input_node.h" #include "core/style/ComputedStyleConstants.h" #include "platform/LayoutUnit.h" @@ -42,6 +43,14 @@ // current fragmentation context. bool IsForcedBreakValue(const NGConstraintSpace&, EBreakBetween); +// Return true if we are to ignore the block-start margin of the child. At the +// start of fragmentainers, in-flow block-start margins are ignored, unless +// we're right after a forced break. +// https://drafts.csswg.org/css-break/#break-margins +bool ShouldIgnoreBlockStartMargin(const NGConstraintSpace&, + NGLayoutInputNode, + const NGBreakToken*); + } // namespace blink #endif // NGFragmentationUtils_h
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_layout_algorithm.h b/third_party/WebKit/Source/core/layout/ng/ng_layout_algorithm.h index 4ff3d53..6475c68 100644 --- a/third_party/WebKit/Source/core/layout/ng/ng_layout_algorithm.h +++ b/third_party/WebKit/Source/core/layout/ng/ng_layout_algorithm.h
@@ -42,7 +42,7 @@ space.Direction(), break_token) {} - virtual ~NGLayoutAlgorithm() {} + virtual ~NGLayoutAlgorithm() = default; // Actual layout function. Lays out the children and descendants within the // constraints given by the NGConstraintSpace. Returns a layout result with
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_layout_input_node.cc b/third_party/WebKit/Source/core/layout/ng/ng_layout_input_node.cc index f72bf51..439d907 100644 --- a/third_party/WebKit/Source/core/layout/ng/ng_layout_input_node.cc +++ b/third_party/WebKit/Source/core/layout/ng/ng_layout_input_node.cc
@@ -128,7 +128,7 @@ *default_intrinsic_size = NGLogicalSize(box_intrinsic_size.Width(), box_intrinsic_size.Height()); - LayoutReplaced::IntrinsicSizingInfo legacy_sizing_info; + IntrinsicSizingInfo legacy_sizing_info; ToLayoutReplaced(box_)->ComputeIntrinsicSizingInfo(legacy_sizing_info); if (legacy_sizing_info.has_width)
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_layout_result.cc b/third_party/WebKit/Source/core/layout/ng/ng_layout_result.cc index bec9b46..fc34599 100644 --- a/third_party/WebKit/Source/core/layout/ng/ng_layout_result.cc +++ b/third_party/WebKit/Source/core/layout/ng/ng_layout_result.cc
@@ -42,7 +42,7 @@ // Keep the implementation of the destructor here, to avoid dependencies on // NGUnpositionedFloat in the header file. -NGLayoutResult::~NGLayoutResult() {} +NGLayoutResult::~NGLayoutResult() = default; scoped_refptr<NGLayoutResult> NGLayoutResult::CloneWithoutOffset() const { Vector<NGOutOfFlowPositionedDescendant> oof_positioned_descendants(
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment.cc b/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment.cc index 1014f964..6ce0940 100644 --- a/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment.cc +++ b/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment.cc
@@ -178,7 +178,7 @@ // Keep the implementation of the destructor here, to avoid dependencies on // ComputedStyle in the header file. -NGPhysicalFragment::~NGPhysicalFragment() {} +NGPhysicalFragment::~NGPhysicalFragment() = default; void NGPhysicalFragment::Destroy() const { switch (Type()) {
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_text_decoration_offset.h b/third_party/WebKit/Source/core/layout/ng/ng_text_decoration_offset.h index f9d8bec..5ef85329 100644 --- a/third_party/WebKit/Source/core/layout/ng/ng_text_decoration_offset.h +++ b/third_party/WebKit/Source/core/layout/ng/ng_text_decoration_offset.h
@@ -26,7 +26,7 @@ : TextDecorationOffsetBase(style), text_fragment_(text_fragment), decorating_box_(decorating_box) {} - ~NGTextDecorationOffset() {} + ~NGTextDecorationOffset() = default; int ComputeUnderlineOffsetForUnder(float text_decoration_thickness, LineVerticalPositionType) const override;
diff --git a/third_party/WebKit/Source/core/layout/shapes/BoxShapeTest.cpp b/third_party/WebKit/Source/core/layout/shapes/BoxShapeTest.cpp index 6281bdc4..4a7bd21 100644 --- a/third_party/WebKit/Source/core/layout/shapes/BoxShapeTest.cpp +++ b/third_party/WebKit/Source/core/layout/shapes/BoxShapeTest.cpp
@@ -37,7 +37,7 @@ class BoxShapeTest : public ::testing::Test { protected: - BoxShapeTest() {} + BoxShapeTest() = default; std::unique_ptr<Shape> CreateBoxShape(const FloatRoundedRect& bounds, float shape_margin) {
diff --git a/third_party/WebKit/Source/core/layout/shapes/Shape.h b/third_party/WebKit/Source/core/layout/shapes/Shape.h index f9d59b6b..bb32188 100644 --- a/third_party/WebKit/Source/core/layout/shapes/Shape.h +++ b/third_party/WebKit/Source/core/layout/shapes/Shape.h
@@ -85,7 +85,7 @@ WritingMode, float margin); - virtual ~Shape() {} + virtual ~Shape() = default; virtual LayoutRect ShapeMarginLogicalBoundingBox() const = 0; virtual bool IsEmpty() const = 0;
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGContainer.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGContainer.cpp index a8a4755..1f2d562 100644 --- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGContainer.cpp +++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGContainer.cpp
@@ -40,7 +40,7 @@ has_non_isolated_blending_descendants_(false), has_non_isolated_blending_descendants_dirty_(false) {} -LayoutSVGContainer::~LayoutSVGContainer() {} +LayoutSVGContainer::~LayoutSVGContainer() = default; void LayoutSVGContainer::UpdateLayout() { DCHECK(NeedsLayout());
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGEllipse.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGEllipse.cpp index 1f7b8b1..0983b36 100644 --- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGEllipse.cpp +++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGEllipse.cpp
@@ -35,7 +35,7 @@ LayoutSVGEllipse::LayoutSVGEllipse(SVGGeometryElement* node) : LayoutSVGShape(node), use_path_fallback_(false) {} -LayoutSVGEllipse::~LayoutSVGEllipse() {} +LayoutSVGEllipse::~LayoutSVGEllipse() = default; void LayoutSVGEllipse::UpdateShapeFromElement() { // Before creating a new object we need to clear the cached bounding box
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGForeignObject.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGForeignObject.cpp index becf121..6925d39 100644 --- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGForeignObject.cpp +++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGForeignObject.cpp
@@ -32,7 +32,7 @@ LayoutSVGForeignObject::LayoutSVGForeignObject(SVGForeignObjectElement* node) : LayoutSVGBlock(node), needs_transform_update_(true) {} -LayoutSVGForeignObject::~LayoutSVGForeignObject() {} +LayoutSVGForeignObject::~LayoutSVGForeignObject() = default; bool LayoutSVGForeignObject::IsChildAllowed(LayoutObject* child, const ComputedStyle& style) const {
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGImage.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGImage.cpp index 76d759ed..d9ee79d 100644 --- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGImage.cpp +++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGImage.cpp
@@ -48,7 +48,7 @@ image_resource_->Initialize(this); } -LayoutSVGImage::~LayoutSVGImage() {} +LayoutSVGImage::~LayoutSVGImage() = default; void LayoutSVGImage::WillBeDestroyed() { image_resource_->Shutdown();
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGPath.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGPath.cpp index b9ebb45..e86f222 100644 --- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGPath.cpp +++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGPath.cpp
@@ -36,7 +36,7 @@ LayoutSVGPath::LayoutSVGPath(SVGGeometryElement* node) : LayoutSVGShape(node) {} -LayoutSVGPath::~LayoutSVGPath() {} +LayoutSVGPath::~LayoutSVGPath() = default; void LayoutSVGPath::UpdateShapeFromElement() { LayoutSVGShape::UpdateShapeFromElement();
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGRect.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGRect.cpp index 519028b..d0f6c61 100644 --- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGRect.cpp +++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGRect.cpp
@@ -35,7 +35,7 @@ LayoutSVGRect::LayoutSVGRect(SVGRectElement* node) : LayoutSVGShape(node), use_path_fallback_(false) {} -LayoutSVGRect::~LayoutSVGRect() {} +LayoutSVGRect::~LayoutSVGRect() = default; void LayoutSVGRect::UpdateShapeFromElement() { // Before creating a new object we need to clear the cached bounding box
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceClipper.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceClipper.cpp index 7130fdc7..74338b61 100644 --- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceClipper.cpp +++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceClipper.cpp
@@ -105,7 +105,7 @@ LayoutSVGResourceClipper::LayoutSVGResourceClipper(SVGClipPathElement* node) : LayoutSVGResourceContainer(node), in_clip_expansion_(false) {} -LayoutSVGResourceClipper::~LayoutSVGResourceClipper() {} +LayoutSVGResourceClipper::~LayoutSVGResourceClipper() = default; void LayoutSVGResourceClipper::RemoveAllClientsFromCache( bool mark_for_invalidation) {
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceContainer.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceContainer.cpp index 0a419cf..71b6cd3 100644 --- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceContainer.cpp +++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceContainer.cpp
@@ -40,7 +40,7 @@ registered_(false), is_invalidating_(false) {} -LayoutSVGResourceContainer::~LayoutSVGResourceContainer() {} +LayoutSVGResourceContainer::~LayoutSVGResourceContainer() = default; void LayoutSVGResourceContainer::UpdateLayout() { // FIXME: Investigate a way to detect and break resource layout dependency
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceFilter.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceFilter.cpp index 03e309de..75def82 100644 --- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceFilter.cpp +++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceFilter.cpp
@@ -44,7 +44,7 @@ LayoutSVGResourceFilter::LayoutSVGResourceFilter(SVGFilterElement* node) : LayoutSVGResourceContainer(node) {} -LayoutSVGResourceFilter::~LayoutSVGResourceFilter() {} +LayoutSVGResourceFilter::~LayoutSVGResourceFilter() = default; void LayoutSVGResourceFilter::DisposeFilterMap() { for (auto& entry : filter_)
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceLinearGradient.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceLinearGradient.cpp index 950e7a4..7d39d138 100644 --- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceLinearGradient.cpp +++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceLinearGradient.cpp
@@ -29,7 +29,7 @@ : LayoutSVGResourceGradient(node), attributes_wrapper_(LinearGradientAttributesWrapper::Create()) {} -LayoutSVGResourceLinearGradient::~LayoutSVGResourceLinearGradient() {} +LayoutSVGResourceLinearGradient::~LayoutSVGResourceLinearGradient() = default; bool LayoutSVGResourceLinearGradient::CollectGradientAttributes() { DCHECK(GetElement());
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceMarker.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceMarker.cpp index 24917eb..8349546 100644 --- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceMarker.cpp +++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceMarker.cpp
@@ -29,7 +29,7 @@ LayoutSVGResourceMarker::LayoutSVGResourceMarker(SVGMarkerElement* node) : LayoutSVGResourceContainer(node), needs_transform_update_(true) {} -LayoutSVGResourceMarker::~LayoutSVGResourceMarker() {} +LayoutSVGResourceMarker::~LayoutSVGResourceMarker() = default; void LayoutSVGResourceMarker::UpdateLayout() { DCHECK(NeedsLayout());
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceMasker.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceMasker.cpp index f5c44c7..cb470c5 100644 --- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceMasker.cpp +++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceMasker.cpp
@@ -32,7 +32,7 @@ LayoutSVGResourceMasker::LayoutSVGResourceMasker(SVGMaskElement* node) : LayoutSVGResourceContainer(node) {} -LayoutSVGResourceMasker::~LayoutSVGResourceMasker() {} +LayoutSVGResourceMasker::~LayoutSVGResourceMasker() = default; void LayoutSVGResourceMasker::RemoveAllClientsFromCache( bool mark_for_invalidation) {
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourcePaintServer.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourcePaintServer.cpp index 2c42075..3628c92 100644 --- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourcePaintServer.cpp +++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourcePaintServer.cpp
@@ -187,7 +187,7 @@ LayoutSVGResourcePaintServer::LayoutSVGResourcePaintServer(SVGElement* element) : LayoutSVGResourceContainer(element) {} -LayoutSVGResourcePaintServer::~LayoutSVGResourcePaintServer() {} +LayoutSVGResourcePaintServer::~LayoutSVGResourcePaintServer() = default; SVGPaintDescription LayoutSVGResourcePaintServer::RequestPaintDescription( const LayoutObject& layout_object,
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceRadialGradient.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceRadialGradient.cpp index 440733b..ea8cd6b5 100644 --- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceRadialGradient.cpp +++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceRadialGradient.cpp
@@ -30,7 +30,7 @@ : LayoutSVGResourceGradient(node), attributes_wrapper_(RadialGradientAttributesWrapper::Create()) {} -LayoutSVGResourceRadialGradient::~LayoutSVGResourceRadialGradient() {} +LayoutSVGResourceRadialGradient::~LayoutSVGResourceRadialGradient() = default; bool LayoutSVGResourceRadialGradient::CollectGradientAttributes() { DCHECK(GetElement());
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGRoot.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGRoot.cpp index acaa6bd4..a8377b2 100644 --- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGRoot.cpp +++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGRoot.cpp
@@ -60,7 +60,7 @@ SetIntrinsicSize(intrinsic_size); } -LayoutSVGRoot::~LayoutSVGRoot() {} +LayoutSVGRoot::~LayoutSVGRoot() = default; void LayoutSVGRoot::ComputeIntrinsicSizingInfo( IntrinsicSizingInfo& intrinsic_sizing_info) const {
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGShape.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGShape.cpp index 4d9c2a3..bad1d293 100644 --- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGShape.cpp +++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGShape.cpp
@@ -61,7 +61,7 @@ // updated the first time transforms are updated. transform_uses_reference_box_(false) {} -LayoutSVGShape::~LayoutSVGShape() {} +LayoutSVGShape::~LayoutSVGShape() = default; void LayoutSVGShape::CreatePath() { if (!path_)
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGShape.h b/third_party/WebKit/Source/core/layout/svg/LayoutSVGShape.h index 914b088..1e6dd86 100644 --- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGShape.h +++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGShape.h
@@ -50,7 +50,7 @@ USING_FAST_MALLOC(LayoutSVGShapeRareData); public: - LayoutSVGShapeRareData() {} + LayoutSVGShapeRareData() = default; Path cached_non_scaling_stroke_path_; AffineTransform cached_non_scaling_stroke_transform_; DISALLOW_COPY_AND_ASSIGN(LayoutSVGShapeRareData);
diff --git a/third_party/WebKit/Source/core/layout/svg/SVGResourcesCache.cpp b/third_party/WebKit/Source/core/layout/svg/SVGResourcesCache.cpp index ff8585c..9dd812a 100644 --- a/third_party/WebKit/Source/core/layout/svg/SVGResourcesCache.cpp +++ b/third_party/WebKit/Source/core/layout/svg/SVGResourcesCache.cpp
@@ -28,9 +28,9 @@ namespace blink { -SVGResourcesCache::SVGResourcesCache() {} +SVGResourcesCache::SVGResourcesCache() = default; -SVGResourcesCache::~SVGResourcesCache() {} +SVGResourcesCache::~SVGResourcesCache() = default; void SVGResourcesCache::AddResourcesFromLayoutObject( LayoutObject* object,
diff --git a/third_party/WebKit/Source/core/layout/svg/SVGResourcesCycleSolver.cpp b/third_party/WebKit/Source/core/layout/svg/SVGResourcesCycleSolver.cpp index 908bd384..bbb93856 100644 --- a/third_party/WebKit/Source/core/layout/svg/SVGResourcesCycleSolver.cpp +++ b/third_party/WebKit/Source/core/layout/svg/SVGResourcesCycleSolver.cpp
@@ -32,7 +32,7 @@ DCHECK(resources_); } -SVGResourcesCycleSolver::~SVGResourcesCycleSolver() {} +SVGResourcesCycleSolver::~SVGResourcesCycleSolver() = default; struct ActiveFrame { typedef SVGResourcesCycleSolver::ResourceSet ResourceSet;
diff --git a/third_party/WebKit/Source/core/layout/svg/SVGTextChunkBuilder.cpp b/third_party/WebKit/Source/core/layout/svg/SVGTextChunkBuilder.cpp index 1557cb3..6ef7515 100644 --- a/third_party/WebKit/Source/core/layout/svg/SVGTextChunkBuilder.cpp +++ b/third_party/WebKit/Source/core/layout/svg/SVGTextChunkBuilder.cpp
@@ -109,7 +109,7 @@ } // namespace -SVGTextChunkBuilder::SVGTextChunkBuilder() {} +SVGTextChunkBuilder::SVGTextChunkBuilder() = default; void SVGTextChunkBuilder::ProcessTextChunks( const Vector<SVGInlineTextBox*>& line_layout_boxes) {
diff --git a/third_party/WebKit/Source/core/leak_detector/BlinkLeakDetector.cpp b/third_party/WebKit/Source/core/leak_detector/BlinkLeakDetector.cpp index 69ccf45..fcb688b 100644 --- a/third_party/WebKit/Source/core/leak_detector/BlinkLeakDetector.cpp +++ b/third_party/WebKit/Source/core/leak_detector/BlinkLeakDetector.cpp
@@ -29,7 +29,7 @@ number_of_gc_needed_(0), client_(client) {} -BlinkLeakDetector::~BlinkLeakDetector() {} +BlinkLeakDetector::~BlinkLeakDetector() = default; void BlinkLeakDetector::PrepareForLeakDetection(WebFrame* frame) { v8::Isolate* isolate = v8::Isolate::GetCurrent();
diff --git a/third_party/WebKit/Source/core/leak_detector/WebLeakDetector.cpp b/third_party/WebKit/Source/core/leak_detector/WebLeakDetector.cpp index 0a0e537..fb17f1ac 100644 --- a/third_party/WebKit/Source/core/leak_detector/WebLeakDetector.cpp +++ b/third_party/WebKit/Source/core/leak_detector/WebLeakDetector.cpp
@@ -50,7 +50,7 @@ DCHECK(client_); } - ~WebLeakDetectorImpl() override {} + ~WebLeakDetectorImpl() override = default; void PrepareForLeakDetection(WebFrame*) override; void CollectGarbageAndReport() override;
diff --git a/third_party/WebKit/Source/core/loader/BaseFetchContextTest.cpp b/third_party/WebKit/Source/core/loader/BaseFetchContextTest.cpp index 8d29d5a..b17d441 100644 --- a/third_party/WebKit/Source/core/loader/BaseFetchContextTest.cpp +++ b/third_party/WebKit/Source/core/loader/BaseFetchContextTest.cpp
@@ -42,7 +42,7 @@ public: explicit MockBaseFetchContext(ExecutionContext* execution_context) : execution_context_(execution_context) {} - ~MockBaseFetchContext() override {} + ~MockBaseFetchContext() override = default; // BaseFetchContext overrides: KURL GetSiteForCookies() const override { return KURL(); }
diff --git a/third_party/WebKit/Source/core/loader/EmptyClients.h b/third_party/WebKit/Source/core/loader/EmptyClients.h index 4248c351..d967b9e6 100644 --- a/third_party/WebKit/Source/core/loader/EmptyClients.h +++ b/third_party/WebKit/Source/core/loader/EmptyClients.h
@@ -79,7 +79,7 @@ public: static EmptyChromeClient* Create() { return new EmptyChromeClient; } - ~EmptyChromeClient() override {} + ~EmptyChromeClient() override = default; void ChromeDestroyed() override {} WebViewImpl* GetWebView() const override { return nullptr; } @@ -392,7 +392,7 @@ USING_FAST_MALLOC(EmptySpellCheckPanelHostClient); public: - EmptySpellCheckPanelHostClient() {} + EmptySpellCheckPanelHostClient() = default; void ShowSpellingUI(bool) override {} bool IsShowingSpellingUI() override { return false; }
diff --git a/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp b/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp index 288c5df..9cfe8685 100644 --- a/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp +++ b/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp
@@ -512,7 +512,7 @@ class FrameFetchContextHintsTest : public FrameFetchContextTest { public: - FrameFetchContextHintsTest() {} + FrameFetchContextHintsTest() = default; protected: void ExpectHeader(const char* input,
diff --git a/third_party/WebKit/Source/core/loader/HistoryItem.cpp b/third_party/WebKit/Source/core/loader/HistoryItem.cpp index 252d616..db10129 100644 --- a/third_party/WebKit/Source/core/loader/HistoryItem.cpp +++ b/third_party/WebKit/Source/core/loader/HistoryItem.cpp
@@ -49,7 +49,7 @@ document_sequence_number_(GenerateSequenceNumber()), scroll_restoration_type_(kScrollRestorationAuto) {} -HistoryItem::~HistoryItem() {} +HistoryItem::~HistoryItem() = default; const String& HistoryItem::UrlString() const { return url_string_;
diff --git a/third_party/WebKit/Source/core/loader/ImageLoader.cpp b/third_party/WebKit/Source/core/loader/ImageLoader.cpp index 3f248e879..19dbd0d 100644 --- a/third_party/WebKit/Source/core/loader/ImageLoader.cpp +++ b/third_party/WebKit/Source/core/loader/ImageLoader.cpp
@@ -151,7 +151,7 @@ RESOURCE_LOADING_DVLOG(1) << "new ImageLoader " << this; } -ImageLoader::~ImageLoader() {} +ImageLoader::~ImageLoader() = default; void ImageLoader::Dispose() { RESOURCE_LOADING_DVLOG(1)
diff --git a/third_party/WebKit/Source/core/loader/LinkLoader.cpp b/third_party/WebKit/Source/core/loader/LinkLoader.cpp index 5506ef9..dddf96b 100644 --- a/third_party/WebKit/Source/core/loader/LinkLoader.cpp +++ b/third_party/WebKit/Source/core/loader/LinkLoader.cpp
@@ -130,7 +130,7 @@ DCHECK(client_); } -LinkLoader::~LinkLoader() {} +LinkLoader::~LinkLoader() = default; void LinkLoader::NotifyFinished() { DCHECK(finish_observer_);
diff --git a/third_party/WebKit/Source/core/loader/LinkLoaderClient.h b/third_party/WebKit/Source/core/loader/LinkLoaderClient.h index 4829b8e..7e9489e 100644 --- a/third_party/WebKit/Source/core/loader/LinkLoaderClient.h +++ b/third_party/WebKit/Source/core/loader/LinkLoaderClient.h
@@ -40,7 +40,7 @@ class CORE_EXPORT LinkLoaderClient : public GarbageCollectedMixin { public: - virtual ~LinkLoaderClient() {} + virtual ~LinkLoaderClient() = default; void Trace(blink::Visitor* visitor) override {} virtual bool ShouldLoadLink() = 0;
diff --git a/third_party/WebKit/Source/core/loader/LinkLoaderTest.cpp b/third_party/WebKit/Source/core/loader/LinkLoaderTest.cpp index 5a2e163..a1332921 100644 --- a/third_party/WebKit/Source/core/loader/LinkLoaderTest.cpp +++ b/third_party/WebKit/Source/core/loader/LinkLoaderTest.cpp
@@ -62,7 +62,7 @@ class NetworkHintsMock : public NetworkHintsInterface { public: - NetworkHintsMock() {} + NetworkHintsMock() = default; void DnsPrefetchHost(const String& host) const override { did_dns_prefetch_ = true;
diff --git a/third_party/WebKit/Source/core/loader/ProgressTracker.cpp b/third_party/WebKit/Source/core/loader/ProgressTracker.cpp index a80d2515..7423b08 100644 --- a/third_party/WebKit/Source/core/loader/ProgressTracker.cpp +++ b/third_party/WebKit/Source/core/loader/ProgressTracker.cpp
@@ -78,7 +78,7 @@ did_first_contentful_paint_(false), progress_value_(0) {} -ProgressTracker::~ProgressTracker() {} +ProgressTracker::~ProgressTracker() = default; void ProgressTracker::Trace(blink::Visitor* visitor) { visitor->Trace(frame_);
diff --git a/third_party/WebKit/Source/core/loader/ScheduledNavigation.cpp b/third_party/WebKit/Source/core/loader/ScheduledNavigation.cpp index be359f7..1b5c633 100644 --- a/third_party/WebKit/Source/core/loader/ScheduledNavigation.cpp +++ b/third_party/WebKit/Source/core/loader/ScheduledNavigation.cpp
@@ -26,7 +26,7 @@ user_gesture_token_ = UserGestureIndicator::CurrentToken(); } -ScheduledNavigation::~ScheduledNavigation() {} +ScheduledNavigation::~ScheduledNavigation() = default; std::unique_ptr<UserGestureIndicator> ScheduledNavigation::CreateUserGestureIndicator() {
diff --git a/third_party/WebKit/Source/core/loader/SubresourceFilter.cpp b/third_party/WebKit/Source/core/loader/SubresourceFilter.cpp index 3c95901..9fc5171 100644 --- a/third_party/WebKit/Source/core/loader/SubresourceFilter.cpp +++ b/third_party/WebKit/Source/core/loader/SubresourceFilter.cpp
@@ -47,7 +47,7 @@ : execution_context_(execution_context), subresource_filter_(std::move(subresource_filter)) {} -SubresourceFilter::~SubresourceFilter() {} +SubresourceFilter::~SubresourceFilter() = default; bool SubresourceFilter::AllowLoad( const KURL& resource_url,
diff --git a/third_party/WebKit/Source/core/loader/TextTrackLoader.cpp b/third_party/WebKit/Source/core/loader/TextTrackLoader.cpp index 4a27e34..a984c62c 100644 --- a/third_party/WebKit/Source/core/loader/TextTrackLoader.cpp +++ b/third_party/WebKit/Source/core/loader/TextTrackLoader.cpp
@@ -48,7 +48,7 @@ state_(kLoading), new_cues_available_(false) {} -TextTrackLoader::~TextTrackLoader() {} +TextTrackLoader::~TextTrackLoader() = default; void TextTrackLoader::CueLoadTimerFired(TimerBase* timer) { DCHECK_EQ(timer, &cue_load_timer_);
diff --git a/third_party/WebKit/Source/core/loader/TextTrackLoader.h b/third_party/WebKit/Source/core/loader/TextTrackLoader.h index a378b334..a9c892a 100644 --- a/third_party/WebKit/Source/core/loader/TextTrackLoader.h +++ b/third_party/WebKit/Source/core/loader/TextTrackLoader.h
@@ -38,7 +38,7 @@ class TextTrackLoaderClient : public GarbageCollectedMixin { public: - virtual ~TextTrackLoaderClient() {} + virtual ~TextTrackLoaderClient() = default; virtual void NewCuesAvailable(TextTrackLoader*) = 0; virtual void CueLoadingCompleted(TextTrackLoader*, bool loading_failed) = 0;
diff --git a/third_party/WebKit/Source/core/loader/ThreadableLoaderClient.h b/third_party/WebKit/Source/core/loader/ThreadableLoaderClient.h index e84bef8c..ea2e621 100644 --- a/third_party/WebKit/Source/core/loader/ThreadableLoaderClient.h +++ b/third_party/WebKit/Source/core/loader/ThreadableLoaderClient.h
@@ -65,7 +65,7 @@ virtual void DidDownloadData(int /*dataLength*/) {} - virtual ~ThreadableLoaderClient() {} + virtual ~ThreadableLoaderClient() = default; protected: ThreadableLoaderClient() = default;
diff --git a/third_party/WebKit/Source/core/loader/ThreadableLoaderTest.cpp b/third_party/WebKit/Source/core/loader/ThreadableLoaderTest.cpp index 336b0e7..f5e0841 100644 --- a/third_party/WebKit/Source/core/loader/ThreadableLoaderTest.cpp +++ b/third_party/WebKit/Source/core/loader/ThreadableLoaderTest.cpp
@@ -170,7 +170,7 @@ class ThreadableLoaderTestHelper { public: - virtual ~ThreadableLoaderTestHelper() {} + virtual ~ThreadableLoaderTestHelper() = default; virtual void CreateLoader(ThreadableLoaderClient*) = 0; virtual void StartLoader(const ResourceRequest&) = 0;
diff --git a/third_party/WebKit/Source/core/loader/WorkerFetchContext.cpp b/third_party/WebKit/Source/core/loader/WorkerFetchContext.cpp index 25835c5..23a0023a 100644 --- a/third_party/WebKit/Source/core/loader/WorkerFetchContext.cpp +++ b/third_party/WebKit/Source/core/loader/WorkerFetchContext.cpp
@@ -50,7 +50,7 @@ explicit WorkerFetchContextHolder( std::unique_ptr<WebWorkerFetchContext> web_context) : web_context_(std::move(web_context)) {} - virtual ~WorkerFetchContextHolder() {} + virtual ~WorkerFetchContextHolder() = default; std::unique_ptr<WebWorkerFetchContext> TakeContext() { return std::move(web_context_); @@ -66,7 +66,7 @@ } // namespace -WorkerFetchContext::~WorkerFetchContext() {} +WorkerFetchContext::~WorkerFetchContext() = default; WorkerFetchContext* WorkerFetchContext::Create( WorkerOrWorkletGlobalScope& global_scope) {
diff --git a/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp b/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp index c9f23ae..c63357f 100644 --- a/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp +++ b/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp
@@ -153,7 +153,7 @@ } private: - WaitableEventWithTasks() {} + WaitableEventWithTasks() = default; WaitableEvent event_; Vector<TaskWithLocation> tasks_;
diff --git a/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.h b/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.h index 6827985..c8e45c8 100644 --- a/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.h +++ b/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.h
@@ -101,7 +101,7 @@ // A TaskForwarder forwards a task to the worker thread. class TaskForwarder : public GarbageCollectedFinalized<TaskForwarder> { public: - virtual ~TaskForwarder() {} + virtual ~TaskForwarder() = default; virtual void ForwardTask(const base::Location&, CrossThreadClosure) = 0; virtual void ForwardTaskWithDoneSignal(const base::Location&, CrossThreadClosure) = 0;
diff --git a/third_party/WebKit/Source/core/loader/appcache/ApplicationCache.h b/third_party/WebKit/Source/core/loader/appcache/ApplicationCache.h index 31f759ae..6d503cd 100644 --- a/third_party/WebKit/Source/core/loader/appcache/ApplicationCache.h +++ b/third_party/WebKit/Source/core/loader/appcache/ApplicationCache.h
@@ -46,7 +46,7 @@ static ApplicationCache* Create(LocalFrame* frame) { return new ApplicationCache(frame); } - ~ApplicationCache() override {} + ~ApplicationCache() override = default; unsigned short status() const; void update(ExceptionState&);
diff --git a/third_party/WebKit/Source/core/loader/modulescript/ModuleScriptLoader.cpp b/third_party/WebKit/Source/core/loader/modulescript/ModuleScriptLoader.cpp index 05a3436..ea3558f 100644 --- a/third_party/WebKit/Source/core/loader/modulescript/ModuleScriptLoader.cpp +++ b/third_party/WebKit/Source/core/loader/modulescript/ModuleScriptLoader.cpp
@@ -35,7 +35,7 @@ DCHECK(client); } -ModuleScriptLoader::~ModuleScriptLoader() {} +ModuleScriptLoader::~ModuleScriptLoader() = default; #if DCHECK_IS_ON() const char* ModuleScriptLoader::StateToString(ModuleScriptLoader::State state) {
diff --git a/third_party/WebKit/Source/core/loader/modulescript/ModuleScriptLoaderClient.h b/third_party/WebKit/Source/core/loader/modulescript/ModuleScriptLoaderClient.h index 435065c..ed4b09af 100644 --- a/third_party/WebKit/Source/core/loader/modulescript/ModuleScriptLoaderClient.h +++ b/third_party/WebKit/Source/core/loader/modulescript/ModuleScriptLoaderClient.h
@@ -17,7 +17,8 @@ // time of callback. class ModuleScriptLoaderClient : public GarbageCollectedMixin { public: - virtual ~ModuleScriptLoaderClient(){}; + virtual ~ModuleScriptLoaderClient() = default; + ; private: friend class ModuleScriptLoader;
diff --git a/third_party/WebKit/Source/core/loader/modulescript/ModuleScriptLoaderTest.cpp b/third_party/WebKit/Source/core/loader/modulescript/ModuleScriptLoaderTest.cpp index 3fcef5cba7..e4163e0 100644 --- a/third_party/WebKit/Source/core/loader/modulescript/ModuleScriptLoaderTest.cpp +++ b/third_party/WebKit/Source/core/loader/modulescript/ModuleScriptLoaderTest.cpp
@@ -42,7 +42,7 @@ public: TestModuleScriptLoaderClient() = default; - ~TestModuleScriptLoaderClient() override {} + ~TestModuleScriptLoaderClient() override = default; void Trace(blink::Visitor* visitor) override { visitor->Trace(module_script_); @@ -73,7 +73,7 @@ fetcher_ = ResourceFetcher::Create(fetch_context); } - ~ModuleScriptLoaderTestModulator() override {} + ~ModuleScriptLoaderTestModulator() override = default; const SecurityOrigin* GetSecurityOriginForFetch() override { return security_origin_.get();
diff --git a/third_party/WebKit/Source/core/loader/modulescript/ModuleTreeLinkerTest.cpp b/third_party/WebKit/Source/core/loader/modulescript/ModuleTreeLinkerTest.cpp index 3335f7e3..b5f6844 100644 --- a/third_party/WebKit/Source/core/loader/modulescript/ModuleTreeLinkerTest.cpp +++ b/third_party/WebKit/Source/core/loader/modulescript/ModuleTreeLinkerTest.cpp
@@ -55,7 +55,7 @@ public: ModuleTreeLinkerTestModulator(scoped_refptr<ScriptState> script_state) : script_state_(std::move(script_state)) {} - ~ModuleTreeLinkerTestModulator() override {} + ~ModuleTreeLinkerTestModulator() override = default; void Trace(blink::Visitor*) override;
diff --git a/third_party/WebKit/Source/core/loader/resource/CSSStyleSheetResource.cpp b/third_party/WebKit/Source/core/loader/resource/CSSStyleSheetResource.cpp index 4d775c5..86bf66fb 100644 --- a/third_party/WebKit/Source/core/loader/resource/CSSStyleSheetResource.cpp +++ b/third_party/WebKit/Source/core/loader/resource/CSSStyleSheetResource.cpp
@@ -71,7 +71,7 @@ : TextResource(resource_request, kCSSStyleSheet, options, decoder_options) { } -CSSStyleSheetResource::~CSSStyleSheetResource() {} +CSSStyleSheetResource::~CSSStyleSheetResource() = default; void CSSStyleSheetResource::SetParsedStyleSheetCache( StyleSheetContents* new_sheet) {
diff --git a/third_party/WebKit/Source/core/loader/resource/DocumentResource.cpp b/third_party/WebKit/Source/core/loader/resource/DocumentResource.cpp index 75ac7704..6b7ebd0 100644 --- a/third_party/WebKit/Source/core/loader/resource/DocumentResource.cpp +++ b/third_party/WebKit/Source/core/loader/resource/DocumentResource.cpp
@@ -52,7 +52,7 @@ DCHECK_EQ(type, kSVGDocument); } -DocumentResource::~DocumentResource() {} +DocumentResource::~DocumentResource() = default; void DocumentResource::Trace(blink::Visitor* visitor) { visitor->Trace(document_);
diff --git a/third_party/WebKit/Source/core/loader/resource/FontResource.cpp b/third_party/WebKit/Source/core/loader/resource/FontResource.cpp index 321c65b..b08fd3a 100644 --- a/third_party/WebKit/Source/core/loader/resource/FontResource.cpp +++ b/third_party/WebKit/Source/core/loader/resource/FontResource.cpp
@@ -91,7 +91,7 @@ load_limit_state_(kLoadNotStarted), cors_failed_(false) {} -FontResource::~FontResource() {} +FontResource::~FontResource() = default; void FontResource::DidAddClient(ResourceClient* c) { DCHECK(FontResourceClient::IsExpectedType(c));
diff --git a/third_party/WebKit/Source/core/loader/resource/FontResource.h b/third_party/WebKit/Source/core/loader/resource/FontResource.h index 03e8365..6bdb6522 100644 --- a/third_party/WebKit/Source/core/loader/resource/FontResource.h +++ b/third_party/WebKit/Source/core/loader/resource/FontResource.h
@@ -111,7 +111,7 @@ class FontResourceClient : public ResourceClient { public: - ~FontResourceClient() override {} + ~FontResourceClient() override = default; static bool IsExpectedType(ResourceClient* client) { return client->GetResourceClientType() == kFontType; }
diff --git a/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.cpp b/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.cpp index 0714b0d..549ec17 100644 --- a/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.cpp +++ b/third_party/WebKit/Source/core/loader/resource/ImageResourceContent.cpp
@@ -28,7 +28,7 @@ USING_GARBAGE_COLLECTED_MIXIN(NullImageResourceInfo); public: - NullImageResourceInfo() {} + NullImageResourceInfo() = default; void Trace(blink::Visitor* visitor) override { ImageResourceInfo::Trace(visitor);
diff --git a/third_party/WebKit/Source/core/loader/resource/ImageResourceInfo.h b/third_party/WebKit/Source/core/loader/resource/ImageResourceInfo.h index e387916..210d26f 100644 --- a/third_party/WebKit/Source/core/loader/resource/ImageResourceInfo.h +++ b/third_party/WebKit/Source/core/loader/resource/ImageResourceInfo.h
@@ -28,7 +28,7 @@ // ImageResource and ImageResourceContent. class CORE_EXPORT ImageResourceInfo : public GarbageCollectedMixin { public: - ~ImageResourceInfo() {} + ~ImageResourceInfo() = default; virtual const KURL& Url() const = 0; virtual bool IsSchedulingReload() const = 0; virtual bool HasDevicePixelRatioHeaderValue() const = 0;
diff --git a/third_party/WebKit/Source/core/loader/resource/ImageResourceObserver.h b/third_party/WebKit/Source/core/loader/resource/ImageResourceObserver.h index 00f1e04..be8526d 100644 --- a/third_party/WebKit/Source/core/loader/resource/ImageResourceObserver.h +++ b/third_party/WebKit/Source/core/loader/resource/ImageResourceObserver.h
@@ -45,7 +45,7 @@ // invalidation can not be deferred. enum class CanDeferInvalidation { kYes, kNo }; - virtual ~ImageResourceObserver() {} + virtual ~ImageResourceObserver() = default; // Called whenever a frame of an image changes, either because we got more // data from the network or because we are animating. If not null, the IntRect
diff --git a/third_party/WebKit/Source/core/loader/resource/ImageResourceTest.cpp b/third_party/WebKit/Source/core/loader/resource/ImageResourceTest.cpp index 09ae215..210ce90 100644 --- a/third_party/WebKit/Source/core/loader/resource/ImageResourceTest.cpp +++ b/third_party/WebKit/Source/core/loader/resource/ImageResourceTest.cpp
@@ -516,7 +516,7 @@ } protected: - MockFinishObserver() {} + MockFinishObserver() = default; }; TEST(ImageResourceTest, CancelWithImageAndFinishObserver) { @@ -624,7 +624,7 @@ public: ImageResourceReloadTest() : ScopedClientPlaceholdersForServerLoFiForTest(GetParam()) {} - ~ImageResourceReloadTest() override {} + ~ImageResourceReloadTest() override = default; bool IsClientPlaceholderForServerLoFiEnabled() const { return GetParam(); } @@ -1914,8 +1914,8 @@ class ImageResourceCounterTest : public ::testing::Test { public: - ImageResourceCounterTest() {} - ~ImageResourceCounterTest() {} + ImageResourceCounterTest() = default; + ~ImageResourceCounterTest() = default; void CreateImageResource(const char* url_part, bool ua_resource) { // Create a unique fake data url.
diff --git a/third_party/WebKit/Source/core/loader/resource/LinkFetchResource.cpp b/third_party/WebKit/Source/core/loader/resource/LinkFetchResource.cpp index 8b495df..b592c0d 100644 --- a/third_party/WebKit/Source/core/loader/resource/LinkFetchResource.cpp +++ b/third_party/WebKit/Source/core/loader/resource/LinkFetchResource.cpp
@@ -24,6 +24,6 @@ const ResourceLoaderOptions& options) : Resource(request, type, options) {} -LinkFetchResource::~LinkFetchResource() {} +LinkFetchResource::~LinkFetchResource() = default; } // namespace blink
diff --git a/third_party/WebKit/Source/core/loader/resource/MockFontResourceClient.cpp b/third_party/WebKit/Source/core/loader/resource/MockFontResourceClient.cpp index 4d73055a..04168a2 100644 --- a/third_party/WebKit/Source/core/loader/resource/MockFontResourceClient.cpp +++ b/third_party/WebKit/Source/core/loader/resource/MockFontResourceClient.cpp
@@ -12,7 +12,7 @@ : font_load_short_limit_exceeded_called_(false), font_load_long_limit_exceeded_called_(false) {} -MockFontResourceClient::~MockFontResourceClient() {} +MockFontResourceClient::~MockFontResourceClient() = default; void MockFontResourceClient::FontLoadShortLimitExceeded(FontResource*) { ASSERT_FALSE(font_load_short_limit_exceeded_called_);
diff --git a/third_party/WebKit/Source/core/loader/resource/ScriptResource.cpp b/third_party/WebKit/Source/core/loader/resource/ScriptResource.cpp index 48019b5..74b34063 100644 --- a/third_party/WebKit/Source/core/loader/resource/ScriptResource.cpp +++ b/third_party/WebKit/Source/core/loader/resource/ScriptResource.cpp
@@ -58,7 +58,7 @@ const TextResourceDecoderOptions& decoder_options) : TextResource(resource_request, kScript, options, decoder_options) {} -ScriptResource::~ScriptResource() {} +ScriptResource::~ScriptResource() = default; void ScriptResource::OnMemoryDump(WebMemoryDumpLevelOfDetail level_of_detail, WebProcessMemoryDump* memory_dump) const {
diff --git a/third_party/WebKit/Source/core/loader/resource/TextResource.cpp b/third_party/WebKit/Source/core/loader/resource/TextResource.cpp index 936dfcfe..5442f37 100644 --- a/third_party/WebKit/Source/core/loader/resource/TextResource.cpp +++ b/third_party/WebKit/Source/core/loader/resource/TextResource.cpp
@@ -18,7 +18,7 @@ : Resource(resource_request, type, options), decoder_(TextResourceDecoder::Create(decoder_options)) {} -TextResource::~TextResource() {} +TextResource::~TextResource() = default; void TextResource::SetEncoding(const String& chs) { decoder_->SetEncoding(WTF::TextEncoding(chs),
diff --git a/third_party/WebKit/Source/core/mojo/MojoWatcher.cpp b/third_party/WebKit/Source/core/mojo/MojoWatcher.cpp index 49b6790..f5a64b13 100644 --- a/third_party/WebKit/Source/core/mojo/MojoWatcher.cpp +++ b/third_party/WebKit/Source/core/mojo/MojoWatcher.cpp
@@ -43,7 +43,7 @@ return watcher; } -MojoWatcher::~MojoWatcher() {} +MojoWatcher::~MojoWatcher() = default; MojoResult MojoWatcher::cancel() { if (!watcher_handle_.is_valid())
diff --git a/third_party/WebKit/Source/core/mojo/test/MojoInterfaceInterceptor.cpp b/third_party/WebKit/Source/core/mojo/test/MojoInterfaceInterceptor.cpp index da9564b..4da3936ce 100644 --- a/third_party/WebKit/Source/core/mojo/test/MojoInterfaceInterceptor.cpp +++ b/third_party/WebKit/Source/core/mojo/test/MojoInterfaceInterceptor.cpp
@@ -41,7 +41,7 @@ return new MojoInterfaceInterceptor(context, interface_name, process_scope); } -MojoInterfaceInterceptor::~MojoInterfaceInterceptor() {} +MojoInterfaceInterceptor::~MojoInterfaceInterceptor() = default; void MojoInterfaceInterceptor::start(ExceptionState& exception_state) { if (started_)
diff --git a/third_party/WebKit/Source/core/mojo/test/MojoInterfaceRequestEvent.cpp b/third_party/WebKit/Source/core/mojo/test/MojoInterfaceRequestEvent.cpp index abfbdc7..141feef6 100644 --- a/third_party/WebKit/Source/core/mojo/test/MojoInterfaceRequestEvent.cpp +++ b/third_party/WebKit/Source/core/mojo/test/MojoInterfaceRequestEvent.cpp
@@ -9,7 +9,7 @@ namespace blink { -MojoInterfaceRequestEvent::~MojoInterfaceRequestEvent() {} +MojoInterfaceRequestEvent::~MojoInterfaceRequestEvent() = default; void MojoInterfaceRequestEvent::Trace(blink::Visitor* visitor) { Event::Trace(visitor);
diff --git a/third_party/WebKit/Source/core/mojo/tests/JsToCppTest.cpp b/third_party/WebKit/Source/core/mojo/tests/JsToCppTest.cpp index 77a98bc3..1aa1d5d 100644 --- a/third_party/WebKit/Source/core/mojo/tests/JsToCppTest.cpp +++ b/third_party/WebKit/Source/core/mojo/tests/JsToCppTest.cpp
@@ -219,7 +219,7 @@ class CppSideConnection : public js_to_cpp::blink::CppSide { public: CppSideConnection() : mishandled_messages_(0), binding_(this) {} - ~CppSideConnection() override {} + ~CppSideConnection() override = default; void set_js_side(js_to_cpp::blink::JsSidePtr js_side) { js_side_ = std::move(js_side); @@ -263,7 +263,7 @@ class PingCppSideConnection : public CppSideConnection { public: PingCppSideConnection() : got_message_(false) {} - ~PingCppSideConnection() override {} + ~PingCppSideConnection() override = default; // js_to_cpp::CppSide: void StartTest() override { js_side_->Ping(); } @@ -283,7 +283,7 @@ class EchoCppSideConnection : public CppSideConnection { public: EchoCppSideConnection() : message_count_(0), termination_seen_(false) {} - ~EchoCppSideConnection() override {} + ~EchoCppSideConnection() override = default; // js_to_cpp::CppSide: void StartTest() override { @@ -325,7 +325,7 @@ class BitFlipCppSideConnection : public CppSideConnection { public: BitFlipCppSideConnection() : termination_seen_(false) {} - ~BitFlipCppSideConnection() override {} + ~BitFlipCppSideConnection() override = default; // js_to_cpp::CppSide: void StartTest() override { js_side_->BitFlip(BuildSampleEchoArgs()); } @@ -351,7 +351,7 @@ class BackPointerCppSideConnection : public CppSideConnection { public: BackPointerCppSideConnection() : termination_seen_(false) {} - ~BackPointerCppSideConnection() override {} + ~BackPointerCppSideConnection() override = default; // js_to_cpp::CppSide: void StartTest() override { js_side_->BackPointer(BuildSampleEchoArgs()); }
diff --git a/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.cpp b/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.cpp index 5ce9190..60fbc21 100644 --- a/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.cpp +++ b/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.cpp
@@ -40,7 +40,7 @@ IntSize(clampTo<int>(width), clampTo<int>(height))); } -OffscreenCanvas::~OffscreenCanvas() {} +OffscreenCanvas::~OffscreenCanvas() = default; void OffscreenCanvas::Dispose() { if (context_) {
diff --git a/third_party/WebKit/Source/core/origin_trials/OriginTrialContextTest.cpp b/third_party/WebKit/Source/core/origin_trials/OriginTrialContextTest.cpp index 6dd8523..c502e4b 100644 --- a/third_party/WebKit/Source/core/origin_trials/OriginTrialContextTest.cpp +++ b/third_party/WebKit/Source/core/origin_trials/OriginTrialContextTest.cpp
@@ -40,7 +40,7 @@ public: MockTokenValidator() : response_(OriginTrialTokenStatus::kNotSupported), call_count_(0) {} - ~MockTokenValidator() override {} + ~MockTokenValidator() override = default; // blink::WebTrialTokenValidator implementation OriginTrialTokenStatus ValidateToken(const WebString& token,
diff --git a/third_party/WebKit/Source/core/page/ChromeClient.h b/third_party/WebKit/Source/core/page/ChromeClient.h index c65fefc..8885203 100644 --- a/third_party/WebKit/Source/core/page/ChromeClient.h +++ b/third_party/WebKit/Source/core/page/ChromeClient.h
@@ -355,7 +355,7 @@ void Trace(blink::Visitor*); protected: - ~ChromeClient() override {} + ~ChromeClient() override = default; virtual void ShowMouseOverURL(const HitTestResult&) = 0; virtual void SetWindowRect(const IntRect&, LocalFrame&) = 0;
diff --git a/third_party/WebKit/Source/core/page/ChromeClientImpl.cpp b/third_party/WebKit/Source/core/page/ChromeClientImpl.cpp index 99eedd1..9861828 100644 --- a/third_party/WebKit/Source/core/page/ChromeClientImpl.cpp +++ b/third_party/WebKit/Source/core/page/ChromeClientImpl.cpp
@@ -158,7 +158,7 @@ cursor_overridden_(false), did_request_non_empty_tool_tip_(false) {} -ChromeClientImpl::~ChromeClientImpl() {} +ChromeClientImpl::~ChromeClientImpl() = default; ChromeClientImpl* ChromeClientImpl::Create(WebViewImpl* web_view) { return new ChromeClientImpl(web_view);
diff --git a/third_party/WebKit/Source/core/page/ChromeClientImplTest.cpp b/third_party/WebKit/Source/core/page/ChromeClientImplTest.cpp index 678d9263..91dd605 100644 --- a/third_party/WebKit/Source/core/page/ChromeClientImplTest.cpp +++ b/third_party/WebKit/Source/core/page/ChromeClientImplTest.cpp
@@ -54,7 +54,7 @@ class TestWebViewClient : public FrameTestHelpers::TestWebViewClient { public: explicit TestWebViewClient(WebNavigationPolicy* target) : target_(target) {} - ~TestWebViewClient() override {} + ~TestWebViewClient() override = default; void Show(WebNavigationPolicy policy) override { *target_ = policy; } @@ -112,7 +112,7 @@ public: FakeColorChooserClient(Element* owner_element) : owner_element_(owner_element) {} - ~FakeColorChooserClient() override {} + ~FakeColorChooserClient() override = default; virtual void Trace(blink::Visitor* visitor) { visitor->Trace(owner_element_); @@ -142,7 +142,7 @@ public: FakeDateTimeChooserClient(Element* owner_element) : owner_element_(owner_element) {} - ~FakeDateTimeChooserClient() override {} + ~FakeDateTimeChooserClient() override = default; virtual void Trace(blink::Visitor* visitor) { visitor->Trace(owner_element_); @@ -163,7 +163,7 @@ class PagePopupSuppressionTest : public ::testing::Test { public: - PagePopupSuppressionTest() {} + PagePopupSuppressionTest() = default; bool CanOpenColorChooser() { LocalFrame* frame = main_frame_->GetFrame();
diff --git a/third_party/WebKit/Source/core/page/ContextMenuController.cpp b/third_party/WebKit/Source/core/page/ContextMenuController.cpp index e68ec50e..e3a4b6f 100644 --- a/third_party/WebKit/Source/core/page/ContextMenuController.cpp +++ b/third_party/WebKit/Source/core/page/ContextMenuController.cpp
@@ -69,7 +69,7 @@ ContextMenuController::ContextMenuController(Page* page) : page_(page) {} -ContextMenuController::~ContextMenuController() {} +ContextMenuController::~ContextMenuController() = default; ContextMenuController* ContextMenuController::Create(Page* page) { return new ContextMenuController(page);
diff --git a/third_party/WebKit/Source/core/page/ContextMenuProvider.h b/third_party/WebKit/Source/core/page/ContextMenuProvider.h index 3ac537b..daa1c9a 100644 --- a/third_party/WebKit/Source/core/page/ContextMenuProvider.h +++ b/third_party/WebKit/Source/core/page/ContextMenuProvider.h
@@ -41,7 +41,7 @@ class ContextMenuProvider : public GarbageCollectedFinalized<ContextMenuProvider> { public: - virtual ~ContextMenuProvider() {} + virtual ~ContextMenuProvider() = default; virtual void Trace(blink::Visitor* visitor) {} virtual void PopulateContextMenu(ContextMenu*) = 0;
diff --git a/third_party/WebKit/Source/core/page/DragControllerTest.cpp b/third_party/WebKit/Source/core/page/DragControllerTest.cpp index 82bdd03ab..3698508c 100644 --- a/third_party/WebKit/Source/core/page/DragControllerTest.cpp +++ b/third_party/WebKit/Source/core/page/DragControllerTest.cpp
@@ -26,7 +26,7 @@ class DragMockChromeClient : public EmptyChromeClient { public: - DragMockChromeClient() {} + DragMockChromeClient() = default; void StartDragging(LocalFrame*, const WebDragData&,
diff --git a/third_party/WebKit/Source/core/page/DragState.h b/third_party/WebKit/Source/core/page/DragState.h index c4e2075..6bf443b 100644 --- a/third_party/WebKit/Source/core/page/DragState.h +++ b/third_party/WebKit/Source/core/page/DragState.h
@@ -37,7 +37,7 @@ class DragState final : public GarbageCollected<DragState> { public: - DragState() {} + DragState() = default; // Element that may be a drag source, for the current mouse gesture. Member<Node> drag_src_;
diff --git a/third_party/WebKit/Source/core/page/FocusChangedObserver.h b/third_party/WebKit/Source/core/page/FocusChangedObserver.h index 645dae6..21fb68f2 100644 --- a/third_party/WebKit/Source/core/page/FocusChangedObserver.h +++ b/third_party/WebKit/Source/core/page/FocusChangedObserver.h
@@ -20,7 +20,7 @@ protected: bool IsFrameFocused(LocalFrame*); - virtual ~FocusChangedObserver() {} + virtual ~FocusChangedObserver() = default; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/page/FrameTree.cpp b/third_party/WebKit/Source/core/page/FrameTree.cpp index f57a6e54..4e448f6 100644 --- a/third_party/WebKit/Source/core/page/FrameTree.cpp +++ b/third_party/WebKit/Source/core/page/FrameTree.cpp
@@ -46,7 +46,7 @@ FrameTree::FrameTree(Frame* this_frame) : this_frame_(this_frame), scoped_child_count_(kInvalidChildCount) {} -FrameTree::~FrameTree() {} +FrameTree::~FrameTree() = default; const AtomicString& FrameTree::GetName() const { // TODO(andypaicu): remove this once we have gathered the data
diff --git a/third_party/WebKit/Source/core/page/Page.cpp b/third_party/WebKit/Source/core/page/Page.cpp index 5af70f39..62e856d 100644 --- a/third_party/WebKit/Source/core/page/Page.cpp +++ b/third_party/WebKit/Source/core/page/Page.cpp
@@ -738,7 +738,7 @@ Page::PageClients::PageClients() : chrome_client(nullptr) {} -Page::PageClients::~PageClients() {} +Page::PageClients::~PageClients() = default; template class CORE_TEMPLATE_EXPORT Supplement<Page>;
diff --git a/third_party/WebKit/Source/core/page/PageOverlay.h b/third_party/WebKit/Source/core/page/PageOverlay.h index 3b35f94..15b52b19 100644 --- a/third_party/WebKit/Source/core/page/PageOverlay.h +++ b/third_party/WebKit/Source/core/page/PageOverlay.h
@@ -47,7 +47,7 @@ public: class Delegate { public: - virtual ~Delegate() {} + virtual ~Delegate() = default; // Paints page overlay contents. virtual void PaintPageOverlay(const PageOverlay&,
diff --git a/third_party/WebKit/Source/core/page/PagePopup.h b/third_party/WebKit/Source/core/page/PagePopup.h index a8497811..dacb85a 100644 --- a/third_party/WebKit/Source/core/page/PagePopup.h +++ b/third_party/WebKit/Source/core/page/PagePopup.h
@@ -47,7 +47,7 @@ virtual void PostMessageToPopup(const String& message) = 0; protected: - virtual ~PagePopup() {} + virtual ~PagePopup() = default; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/page/PagePopupClient.h b/third_party/WebKit/Source/core/page/PagePopupClient.h index 7a51d09a..2d73d3e 100644 --- a/third_party/WebKit/Source/core/page/PagePopupClient.h +++ b/third_party/WebKit/Source/core/page/PagePopupClient.h
@@ -77,7 +77,7 @@ // This is called whenever a PagePopup was closed. virtual void DidClosePopup() = 0; - virtual ~PagePopupClient() {} + virtual ~PagePopupClient() = default; // Helper functions to be used in PagePopupClient::writeDocument(). static void AddString(const String&, SharedBuffer*);
diff --git a/third_party/WebKit/Source/core/page/PopupOpeningObserver.h b/third_party/WebKit/Source/core/page/PopupOpeningObserver.h index b9ac274e..4e5539d2 100644 --- a/third_party/WebKit/Source/core/page/PopupOpeningObserver.h +++ b/third_party/WebKit/Source/core/page/PopupOpeningObserver.h
@@ -35,7 +35,7 @@ virtual void WillOpenPopup() = 0; protected: - virtual ~PopupOpeningObserver() {} + virtual ~PopupOpeningObserver() = default; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/page/PrintContextTest.cpp b/third_party/WebKit/Source/core/page/PrintContextTest.cpp index 99608b4e..1244c5e 100644 --- a/third_party/WebKit/Source/core/page/PrintContextTest.cpp +++ b/third_party/WebKit/Source/core/page/PrintContextTest.cpp
@@ -37,7 +37,7 @@ }; MockPageContextCanvas() : SkCanvas(kPageWidth, kPageHeight) {} - ~MockPageContextCanvas() override {} + ~MockPageContextCanvas() override = default; void onDrawAnnotation(const SkRect& rect, const char key[], @@ -66,7 +66,7 @@ protected: explicit PrintContextTest(LocalFrameClient* local_frame_client = nullptr) : RenderingTest(local_frame_client) {} - ~PrintContextTest() override {} + ~PrintContextTest() override = default; void SetUp() override { RenderingTest::SetUp();
diff --git a/third_party/WebKit/Source/core/page/ValidationMessageClient.h b/third_party/WebKit/Source/core/page/ValidationMessageClient.h index 3d240c2..1ca90ec 100644 --- a/third_party/WebKit/Source/core/page/ValidationMessageClient.h +++ b/third_party/WebKit/Source/core/page/ValidationMessageClient.h
@@ -37,7 +37,7 @@ class ValidationMessageClient : public GarbageCollectedMixin { public: - virtual ~ValidationMessageClient() {} + virtual ~ValidationMessageClient() = default; // Show validation message for the specified anchor element. An // implementation of this function may hide the message automatically after
diff --git a/third_party/WebKit/Source/core/page/ValidationMessageClientImpl.cpp b/third_party/WebKit/Source/core/page/ValidationMessageClientImpl.cpp index e836464..6f16347 100644 --- a/third_party/WebKit/Source/core/page/ValidationMessageClientImpl.cpp +++ b/third_party/WebKit/Source/core/page/ValidationMessageClientImpl.cpp
@@ -52,7 +52,7 @@ return new ValidationMessageClientImpl(web_view); } -ValidationMessageClientImpl::~ValidationMessageClientImpl() {} +ValidationMessageClientImpl::~ValidationMessageClientImpl() = default; LocalFrameView* ValidationMessageClientImpl::CurrentView() { return current_anchor_->GetDocument().View();
diff --git a/third_party/WebKit/Source/core/page/ViewportTest.cpp b/third_party/WebKit/Source/core/page/ViewportTest.cpp index b747581..f26f597 100644 --- a/third_party/WebKit/Source/core/page/ViewportTest.cpp +++ b/third_party/WebKit/Source/core/page/ViewportTest.cpp
@@ -3368,7 +3368,7 @@ class ViewportHistogramsTest : public SimTest { public: - ViewportHistogramsTest() {} + ViewportHistogramsTest() = default; void SetUp() override { SimTest::SetUp();
diff --git a/third_party/WebKit/Source/core/page/scrolling/ScrollCustomizationCallbacks.h b/third_party/WebKit/Source/core/page/scrolling/ScrollCustomizationCallbacks.h index 53125d3..7a6bc643f 100644 --- a/third_party/WebKit/Source/core/page/scrolling/ScrollCustomizationCallbacks.h +++ b/third_party/WebKit/Source/core/page/scrolling/ScrollCustomizationCallbacks.h
@@ -18,7 +18,7 @@ class CORE_EXPORT ScrollCustomizationCallbacks : public GarbageCollected<ScrollCustomizationCallbacks> { public: - ScrollCustomizationCallbacks() {} + ScrollCustomizationCallbacks() = default; void SetDistributeScroll(Element*, ScrollStateCallback*); ScrollStateCallback* GetDistributeScroll(Element*); void SetApplyScroll(Element*, ScrollStateCallback*);
diff --git a/third_party/WebKit/Source/core/page/scrolling/ScrollState.h b/third_party/WebKit/Source/core/page/scrolling/ScrollState.h index e6d7037..5367640 100644 --- a/third_party/WebKit/Source/core/page/scrolling/ScrollState.h +++ b/third_party/WebKit/Source/core/page/scrolling/ScrollState.h
@@ -26,7 +26,7 @@ static ScrollState* Create(ScrollStateInit); static ScrollState* Create(std::unique_ptr<ScrollStateData>); - ~ScrollState() {} + ~ScrollState() = default; // Web exposed methods. @@ -94,7 +94,7 @@ } private: - ScrollState(); + ScrollState() = delete; explicit ScrollState(std::unique_ptr<ScrollStateData>); std::unique_ptr<ScrollStateData> data_;
diff --git a/third_party/WebKit/Source/core/page/scrolling/ScrollStateCallback.h b/third_party/WebKit/Source/core/page/scrolling/ScrollStateCallback.h index 5d09e637..fd84e25 100644 --- a/third_party/WebKit/Source/core/page/scrolling/ScrollStateCallback.h +++ b/third_party/WebKit/Source/core/page/scrolling/ScrollStateCallback.h
@@ -19,7 +19,7 @@ : native_scroll_behavior_(WebNativeScrollBehavior::kDisableNativeScroll) { } - virtual ~ScrollStateCallback() {} + virtual ~ScrollStateCallback() = default; virtual void Trace(blink::Visitor* visitor) {} virtual void handleEvent(ScrollState*) = 0;
diff --git a/third_party/WebKit/Source/core/page/scrolling/SnapCoordinator.cpp b/third_party/WebKit/Source/core/page/scrolling/SnapCoordinator.cpp index 6357133..0363166 100644 --- a/third_party/WebKit/Source/core/page/scrolling/SnapCoordinator.cpp +++ b/third_party/WebKit/Source/core/page/scrolling/SnapCoordinator.cpp
@@ -17,7 +17,7 @@ SnapCoordinator::SnapCoordinator() : snap_container_map_() {} -SnapCoordinator::~SnapCoordinator() {} +SnapCoordinator::~SnapCoordinator() = default; SnapCoordinator* SnapCoordinator::Create() { return new SnapCoordinator();
diff --git a/third_party/WebKit/Source/core/page/scrolling/StickyPositionScrollingConstraints.h b/third_party/WebKit/Source/core/page/scrolling/StickyPositionScrollingConstraints.h index c6a2d07..8d0d8d8 100644 --- a/third_party/WebKit/Source/core/page/scrolling/StickyPositionScrollingConstraints.h +++ b/third_party/WebKit/Source/core/page/scrolling/StickyPositionScrollingConstraints.h
@@ -91,23 +91,7 @@ nearest_sticky_layer_shifting_containing_block_(nullptr) {} StickyPositionScrollingConstraints( - const StickyPositionScrollingConstraints& other) - : anchor_edges_(other.anchor_edges_), - left_offset_(other.left_offset_), - right_offset_(other.right_offset_), - top_offset_(other.top_offset_), - bottom_offset_(other.bottom_offset_), - scroll_container_relative_containing_block_rect_( - other.scroll_container_relative_containing_block_rect_), - scroll_container_relative_sticky_box_rect_( - other.scroll_container_relative_sticky_box_rect_), - nearest_sticky_layer_shifting_sticky_box_( - other.nearest_sticky_layer_shifting_sticky_box_), - nearest_sticky_layer_shifting_containing_block_( - other.nearest_sticky_layer_shifting_containing_block_), - total_sticky_box_sticky_offset_(other.total_sticky_box_sticky_offset_), - total_containing_block_sticky_offset_( - other.total_containing_block_sticky_offset_) {} + const StickyPositionScrollingConstraints& other) = default; // Computes the sticky offset for a given overflow clip rect. //
diff --git a/third_party/WebKit/Source/core/page/scrolling/ViewportScrollCallback.cpp b/third_party/WebKit/Source/core/page/scrolling/ViewportScrollCallback.cpp index a49e55d..ac98ddbf 100644 --- a/third_party/WebKit/Source/core/page/scrolling/ViewportScrollCallback.cpp +++ b/third_party/WebKit/Source/core/page/scrolling/ViewportScrollCallback.cpp
@@ -23,7 +23,7 @@ overscroll_controller_(overscroll_controller), root_frame_viewport_(&root_frame_viewport) {} -ViewportScrollCallback::~ViewportScrollCallback() {} +ViewportScrollCallback::~ViewportScrollCallback() = default; void ViewportScrollCallback::Trace(blink::Visitor* visitor) { visitor->Trace(browser_controls_);
diff --git a/third_party/WebKit/Source/core/paint/FirstMeaningfulPaintDetector.h b/third_party/WebKit/Source/core/paint/FirstMeaningfulPaintDetector.h index d9e0f70e..fe0ddce 100644 --- a/third_party/WebKit/Source/core/paint/FirstMeaningfulPaintDetector.h +++ b/third_party/WebKit/Source/core/paint/FirstMeaningfulPaintDetector.h
@@ -40,7 +40,7 @@ static FirstMeaningfulPaintDetector& From(Document&); FirstMeaningfulPaintDetector(PaintTiming*, Document&); - virtual ~FirstMeaningfulPaintDetector() {} + virtual ~FirstMeaningfulPaintDetector() = default; void MarkNextPaintAsMeaningfulIfNeeded(const LayoutObjectCounter&, int contents_height_before_layout,
diff --git a/third_party/WebKit/Source/core/paint/FragmentData.cpp b/third_party/WebKit/Source/core/paint/FragmentData.cpp index 52a7d519..70d9eb87 100644 --- a/third_party/WebKit/Source/core/paint/FragmentData.cpp +++ b/third_party/WebKit/Source/core/paint/FragmentData.cpp
@@ -13,7 +13,7 @@ : unique_id(NewUniqueObjectId()), location_in_backing(location_in_backing) {} -FragmentData::RareData::~RareData() {} +FragmentData::RareData::~RareData() = default; FragmentData& FragmentData::EnsureNextFragment() { if (!next_fragment_)
diff --git a/third_party/WebKit/Source/core/paint/NinePieceImageGridTest.cpp b/third_party/WebKit/Source/core/paint/NinePieceImageGridTest.cpp index d6f0410..a1dfec5 100644 --- a/third_party/WebKit/Source/core/paint/NinePieceImageGridTest.cpp +++ b/third_party/WebKit/Source/core/paint/NinePieceImageGridTest.cpp
@@ -15,7 +15,7 @@ class NinePieceImageGridTest : public RenderingTest { public: - NinePieceImageGridTest() {} + NinePieceImageGridTest() = default; StyleImage* GeneratedImage() { cssvalue::CSSGradientValue* gradient =
diff --git a/third_party/WebKit/Source/core/paint/NinePieceImagePainter.h b/third_party/WebKit/Source/core/paint/NinePieceImagePainter.h index d296af0..ec988d5 100644 --- a/third_party/WebKit/Source/core/paint/NinePieceImagePainter.h +++ b/third_party/WebKit/Source/core/paint/NinePieceImagePainter.h
@@ -32,7 +32,7 @@ SkBlendMode = SkBlendMode::kSrcOver); private: - NinePieceImagePainter() {} + NinePieceImagePainter() = default; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/paint/ObjectPaintProperties.h b/third_party/WebKit/Source/core/paint/ObjectPaintProperties.h index f376ac4..8f2b0e5 100644 --- a/third_party/WebKit/Source/core/paint/ObjectPaintProperties.h +++ b/third_party/WebKit/Source/core/paint/ObjectPaintProperties.h
@@ -271,7 +271,7 @@ #endif private: - ObjectPaintProperties() {} + ObjectPaintProperties() = default; // Return true if the property tree structure changes (an existing node was // deleted), and false otherwise. See the class-level comment ("update & clear
diff --git a/third_party/WebKit/Source/core/paint/ObjectPainterBase.h b/third_party/WebKit/Source/core/paint/ObjectPainterBase.h index 6878d76..d870370a 100644 --- a/third_party/WebKit/Source/core/paint/ObjectPainterBase.h +++ b/third_party/WebKit/Source/core/paint/ObjectPainterBase.h
@@ -38,7 +38,7 @@ bool antialias = false); protected: - ObjectPainterBase() {} + ObjectPainterBase() = default; void PaintOutlineRects(const PaintInfo&, const Vector<LayoutRect>&, const ComputedStyle&,
diff --git a/third_party/WebKit/Source/core/paint/PaintLayer.cpp b/third_party/WebKit/Source/core/paint/PaintLayer.cpp index ad36bf5..4d151538 100644 --- a/third_party/WebKit/Source/core/paint/PaintLayer.cpp +++ b/third_party/WebKit/Source/core/paint/PaintLayer.cpp
@@ -128,7 +128,7 @@ squashing_disallowed_reasons(SquashingDisallowedReason::kNone), grouped_mapping(nullptr) {} -PaintLayerRareData::~PaintLayerRareData() {} +PaintLayerRareData::~PaintLayerRareData() = default; PaintLayer::PaintLayer(LayoutBoxModelObject& layout_object) : has_self_painting_layer_descendant_(false), @@ -1619,22 +1619,16 @@ const PaintLayer* root_layer, const LayoutRect& dirty_rect, ClipRectsCacheSlot clip_rects_cache_slot, - PaintLayer::GeometryMapperOption geometry_mapper_option, OverlayScrollbarClipBehavior overlay_scrollbar_clip_behavior, ShouldRespectOverflowClipType respect_overflow_clip, const LayoutPoint* offset_from_root, const LayoutSize& sub_pixel_accumulation) const { PaintLayerFragment fragment; - ClipRectsContext clip_rects_context(root_layer, clip_rects_cache_slot, - overlay_scrollbar_clip_behavior, - sub_pixel_accumulation); - if (respect_overflow_clip == kIgnoreOverflowClip) - clip_rects_context.SetIgnoreOverflowClip(); - Clipper(geometry_mapper_option) - .CalculateRects(clip_rects_context, - geometry_mapper_option == kUseGeometryMapper - ? &GetLayoutObject().FirstFragment() - : nullptr, + ClipRectsContext clip_rects_context( + root_layer, clip_rects_cache_slot, overlay_scrollbar_clip_behavior, + respect_overflow_clip, sub_pixel_accumulation); + Clipper(kUseGeometryMapper) + .CalculateRects(clip_rects_context, &GetLayoutObject().FirstFragment(), dirty_rect, fragment.layer_bounds, fragment.background_rect, fragment.foreground_rect, offset_from_root); @@ -1665,20 +1659,14 @@ const PaintLayer* root_layer, const LayoutRect& dirty_rect, ClipRectsCacheSlot clip_rects_cache_slot, - PaintLayer::GeometryMapperOption geometry_mapper_option, OverlayScrollbarClipBehavior overlay_scrollbar_clip_behavior, ShouldRespectOverflowClipType respect_overflow_clip, const LayoutPoint* offset_from_root, const LayoutSize& sub_pixel_accumulation) const { - // TODO(chrishtr): enable this once it works with rasterize-and-record. - // DCHECK_EQ(DocumentLifecycle::kInPaint, - // GetLayoutObject().GetDocument().Lifecycle().GetState()); PaintLayerFragment fragment; - ClipRectsContext clip_rects_context(root_layer, clip_rects_cache_slot, - overlay_scrollbar_clip_behavior, - sub_pixel_accumulation); - if (respect_overflow_clip == kIgnoreOverflowClip) - clip_rects_context.SetIgnoreOverflowClip(); + ClipRectsContext clip_rects_context( + root_layer, clip_rects_cache_slot, overlay_scrollbar_clip_behavior, + respect_overflow_clip, sub_pixel_accumulation); // The inherited offset_from_root does not include any pagination offsets. // In the presence of fragmentation, we cannot use it. @@ -1686,7 +1674,7 @@ !ShouldFragmentCompositedBounds(root_layer); for (auto* fragment_data = &GetLayoutObject().FirstFragment(); fragment_data; fragment_data = fragment_data->NextFragment()) { - Clipper(geometry_mapper_option) + Clipper(kUseGeometryMapper) .CalculateRects( clip_rects_context, fragment_data, dirty_rect, fragment.layer_bounds, fragment.background_rect, @@ -1899,17 +1887,20 @@ if (!IsSelfPaintingLayer() && !HasSelfPaintingLayerDescendant()) return nullptr; - ClipRectsCacheSlot clip_rects_cache_slot = - result.GetHitTestRequest().IgnoreClipping() - ? kRootRelativeClipRectsIgnoringViewportClip - : kRootRelativeClipRects; + ClipRectsCacheSlot clip_rects_cache_slot = kRootRelativeClipRects; + ShouldRespectOverflowClipType clip_behavior = kRespectOverflowClip; + if (result.GetHitTestRequest().IgnoreClipping()) { + clip_rects_cache_slot = kRootRelativeClipRectsIgnoringViewportClip; + clip_behavior = kIgnoreOverflowClip; + } // Apply a transform if we have one. if (Transform() && !applied_transform) { - if (EnclosingPaginationLayer()) + if (EnclosingPaginationLayer()) { return HitTestTransformedLayerInFragments( root_layer, container_layer, result, hit_test_rect, hit_test_location, - transform_state, z_offset, clip_rects_cache_slot); + transform_state, z_offset, clip_rects_cache_slot, clip_behavior); + } // Make sure the parent's clip rects have been calculated. if (Parent()) { @@ -1917,7 +1908,8 @@ Clipper(PaintLayer::kDoNotUseGeometryMapper) .CalculateBackgroundClipRect( ClipRectsContext(root_layer, clip_rects_cache_slot, - kExcludeOverlayScrollbarSizeForHitTesting), + kExcludeOverlayScrollbarSizeForHitTesting, + clip_behavior), clip_rect); // Go ahead and test the enclosing clip now. if (!clip_rect.Intersects(hit_test_location)) @@ -2025,11 +2017,10 @@ if (applied_transform) { AppendSingleFragmentIgnoringPagination( layer_fragments, root_layer, hit_test_rect, clip_rects_cache_slot, - PaintLayer::kUseGeometryMapper, kExcludeOverlayScrollbarSizeForHitTesting); } else { CollectFragments(layer_fragments, root_layer, hit_test_rect, - clip_rects_cache_slot, PaintLayer::kUseGeometryMapper, + clip_rects_cache_slot, kExcludeOverlayScrollbarSizeForHitTesting); } @@ -2140,15 +2131,15 @@ const HitTestLocation& hit_test_location, const HitTestingTransformState* transform_state, double* z_offset, - ClipRectsCacheSlot clip_rects_cache_slot) { + ClipRectsCacheSlot clip_rects_cache_slot, + ShouldRespectOverflowClipType clip_behavior) { PaintLayerFragments enclosing_pagination_fragments; // FIXME: We're missing a sub-pixel offset here crbug.com/348728 EnclosingPaginationLayer()->CollectFragments( enclosing_pagination_fragments, root_layer, hit_test_rect, - clip_rects_cache_slot, PaintLayer::kUseGeometryMapper, - kExcludeOverlayScrollbarSizeForHitTesting, kRespectOverflowClip, nullptr, - LayoutSize()); + clip_rects_cache_slot, kExcludeOverlayScrollbarSizeForHitTesting, + clip_behavior, nullptr, LayoutSize()); for (const auto& fragment : enclosing_pagination_fragments) { // Apply the page/column clip for this fragment, as well as any clips
diff --git a/third_party/WebKit/Source/core/paint/PaintLayer.h b/third_party/WebKit/Source/core/paint/PaintLayer.h index 3eef0f0713..4ab9195 100644 --- a/third_party/WebKit/Source/core/paint/PaintLayer.h +++ b/third_party/WebKit/Source/core/paint/PaintLayer.h
@@ -888,7 +888,6 @@ const PaintLayer* root_layer, const LayoutRect& dirty_rect, ClipRectsCacheSlot, - GeometryMapperOption, OverlayScrollbarClipBehavior = kIgnorePlatformOverlayScrollbarSize, ShouldRespectOverflowClipType = kRespectOverflowClip, const LayoutPoint* offset_from_root = nullptr, @@ -899,7 +898,6 @@ const PaintLayer* root_layer, const LayoutRect& dirty_rect, ClipRectsCacheSlot, - GeometryMapperOption, OverlayScrollbarClipBehavior = kIgnorePlatformOverlayScrollbarSize, ShouldRespectOverflowClipType = kRespectOverflowClip, const LayoutPoint* offset_from_root = nullptr, @@ -1117,7 +1115,8 @@ const HitTestLocation&, const HitTestingTransformState*, double* z_offset, - ClipRectsCacheSlot); + ClipRectsCacheSlot, + ShouldRespectOverflowClipType); bool HitTestClippedOutByClipPath(PaintLayer* root_layer, const HitTestLocation&) const;
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerClipper.cpp b/third_party/WebKit/Source/core/paint/PaintLayerClipper.cpp index 31784ec..0f31c8c 100644 --- a/third_party/WebKit/Source/core/paint/PaintLayerClipper.cpp +++ b/third_party/WebKit/Source/core/paint/PaintLayerClipper.cpp
@@ -62,14 +62,7 @@ } bool ClipRectsContext::ShouldRespectRootLayerClip() const { - if (respect_overflow_clip == kIgnoreOverflowClip) - return false; - - if (root_layer->IsRootLayer() && - respect_overflow_clip_for_viewport == kIgnoreOverflowClip) - return false; - - return true; + return respect_overflow_clip == kRespectOverflowClip; } static void AdjustClipRectsForChildren(
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerClipper.h b/third_party/WebKit/Source/core/paint/PaintLayerClipper.h index 65331a2..ea3dc30d 100644 --- a/third_party/WebKit/Source/core/paint/PaintLayerClipper.h +++ b/third_party/WebKit/Source/core/paint/PaintLayerClipper.h
@@ -72,27 +72,14 @@ ClipRectsCacheSlot slot, OverlayScrollbarClipBehavior overlay_scrollbar_clip_behavior = kIgnorePlatformOverlayScrollbarSize, + ShouldRespectOverflowClipType root_layer_clip_behavior = + kRespectOverflowClip, const LayoutSize& accumulation = LayoutSize()) : root_layer(root), overlay_scrollbar_clip_behavior(overlay_scrollbar_clip_behavior), cache_slot_(slot), sub_pixel_accumulation(accumulation), - respect_overflow_clip(slot == kPaintingClipRectsIgnoringOverflowClip - ? kIgnoreOverflowClip - : kRespectOverflowClip), - respect_overflow_clip_for_viewport( - (slot == kRootRelativeClipRectsIgnoringViewportClip || - slot == kAbsoluteClipRectsIgnoringViewportClip) - ? kIgnoreOverflowClip - : kRespectOverflowClip) {} - - void SetIgnoreOverflowClip() { - DCHECK(!UsesCache() || cache_slot_ == kPaintingClipRects); - DCHECK(respect_overflow_clip == kRespectOverflowClip); - if (UsesCache()) - cache_slot_ = kPaintingClipRectsIgnoringOverflowClip; - respect_overflow_clip = kIgnoreOverflowClip; - } + respect_overflow_clip(root_layer_clip_behavior) {} bool UsesCache() const { return cache_slot_ != kUncachedClipRects; } @@ -109,7 +96,6 @@ ClipRectsCacheSlot cache_slot_; LayoutSize sub_pixel_accumulation; ShouldRespectOverflowClipType respect_overflow_clip; - ShouldRespectOverflowClipType respect_overflow_clip_for_viewport; }; // PaintLayerClipper is responsible for computing and caching clip
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerClipperTest.cpp b/third_party/WebKit/Source/core/paint/PaintLayerClipperTest.cpp index c19cf253a..149df815 100644 --- a/third_party/WebKit/Source/core/paint/PaintLayerClipperTest.cpp +++ b/third_party/WebKit/Source/core/paint/PaintLayerClipperTest.cpp
@@ -41,13 +41,16 @@ Element* target = GetDocument().getElementById("target"); PaintLayer* target_paint_layer = ToLayoutBoxModelObject(target->GetLayoutObject())->Layer(); - ClipRectsContext context( - GetDocument().GetLayoutView()->Layer(), kUncachedClipRects, - kIgnorePlatformOverlayScrollbarSize, LayoutSize(FloatSize(0.25, 0.35))); - // When RLS is enabled, the LayoutView will have a composited scrolling layer, - // so don't apply an overflow clip. - if (RuntimeEnabledFeatures::RootLayerScrollingEnabled()) - context.SetIgnoreOverflowClip(); + ClipRectsContext context(GetDocument().GetLayoutView()->Layer(), + kUncachedClipRects, + kIgnorePlatformOverlayScrollbarSize, + // When RLS is enabled, the LayoutView will have a + // composited scrolling layer, so don't apply an + // overflow clip. + RuntimeEnabledFeatures::RootLayerScrollingEnabled() + ? kIgnoreOverflowClip + : kRespectOverflowClip, + LayoutSize(FloatSize(0.25, 0.35))); ClipRect background_rect; target_paint_layer->Clipper(PaintLayer::kUseGeometryMapper) @@ -68,13 +71,15 @@ Element* target = GetDocument().getElementById("target"); PaintLayer* target_paint_layer = ToLayoutBoxModelObject(target->GetLayoutObject())->Layer(); - ClipRectsContext context( - GetDocument().GetLayoutView()->Layer(), kUncachedClipRects, - kIgnorePlatformOverlayScrollbarSize, LayoutSize(FloatSize(0.25, 0.35))); // When RLS is enabled, the LayoutView will have a composited scrolling layer, // so don't apply an overflow clip. - if (RuntimeEnabledFeatures::RootLayerScrollingEnabled()) - context.SetIgnoreOverflowClip(); + ClipRectsContext context(GetDocument().GetLayoutView()->Layer(), + kUncachedClipRects, + kIgnorePlatformOverlayScrollbarSize, + RuntimeEnabledFeatures::RootLayerScrollingEnabled() + ? kIgnoreOverflowClip + : kRespectOverflowClip, + LayoutSize(FloatSize(0.25, 0.35))); LayoutRect layer_bounds; ClipRect background_rect, foreground_rect; @@ -100,12 +105,14 @@ Element* target = GetDocument().getElementById("target"); PaintLayer* target_paint_layer = ToLayoutBoxModelObject(target->GetLayoutObject())->Layer(); - ClipRectsContext context(GetDocument().GetLayoutView()->Layer(), - kUncachedClipRects); // When RLS is enabled, the LayoutView will have a composited scrolling layer, // so don't apply an overflow clip. - if (RuntimeEnabledFeatures::RootLayerScrollingEnabled()) - context.SetIgnoreOverflowClip(); + ClipRectsContext context(GetDocument().GetLayoutView()->Layer(), + kUncachedClipRects, + kIgnorePlatformOverlayScrollbarSize, + RuntimeEnabledFeatures::RootLayerScrollingEnabled() + ? kIgnoreOverflowClip + : kRespectOverflowClip); LayoutRect layer_bounds; ClipRect background_rect, foreground_rect; @@ -143,11 +150,14 @@ PaintLayer* target_paint_layer = ToLayoutBoxModelObject(target->GetLayoutObject())->Layer(); ClipRectsContext context(GetDocument().GetLayoutView()->Layer(), - kUncachedClipRects); - // When RLS is enabled, the LayoutView will have a composited scrolling layer, - // so don't apply an overflow clip. - if (RuntimeEnabledFeatures::RootLayerScrollingEnabled()) - context.SetIgnoreOverflowClip(); + kUncachedClipRects, + kIgnorePlatformOverlayScrollbarSize, + // When RLS is enabled, the LayoutView will have a + // composited scrolling layer, so don't apply an + // overflow clip. + RuntimeEnabledFeatures::RootLayerScrollingEnabled() + ? kIgnoreOverflowClip + : kRespectOverflowClip); LayoutRect layer_bounds; ClipRect background_rect, foreground_rect; @@ -222,11 +232,15 @@ PaintLayer* target_paint_layer = ToLayoutBoxModelObject(target->GetLayoutObject())->Layer(); ClipRectsContext context(GetDocument().GetLayoutView()->Layer(), - kUncachedClipRects); - // When RLS is enabled, the LayoutView will have a composited scrolling layer, - // so don't apply an overflow clip. - if (RuntimeEnabledFeatures::RootLayerScrollingEnabled()) - context.SetIgnoreOverflowClip(); + kUncachedClipRects, + kIgnorePlatformOverlayScrollbarSize, + // When RLS is enabled, the LayoutView will have a + // composited scrolling layer, so don't apply an + // overflow clip. + RuntimeEnabledFeatures::RootLayerScrollingEnabled() + ? kIgnoreOverflowClip + : kRespectOverflowClip); + LayoutRect layer_bounds; ClipRect background_rect, foreground_rect; @@ -284,7 +298,9 @@ LayoutRect infinite_rect(LayoutRect::InfiniteIntRect()); PaintLayer* layer = ToLayoutBoxModelObject(GetLayoutObjectByElementId("target"))->Layer(); - ClipRectsContext context(layer, kPaintingClipRectsIgnoringOverflowClip); + ClipRectsContext context(layer, kPaintingClipRectsIgnoringOverflowClip, + kIgnorePlatformOverlayScrollbarSize, + kIgnoreOverflowClip); LayoutRect layer_bounds; ClipRect background_rect, foreground_rect; @@ -320,8 +336,9 @@ LayoutRect infinite_rect(LayoutRect::InfiniteIntRect()); PaintLayer* layer = ToLayoutBoxModelObject(GetLayoutObjectByElementId("target"))->Layer(); - ClipRectsContext context(layer->Parent(), - kPaintingClipRectsIgnoringOverflowClip); + ClipRectsContext context( + layer->Parent(), kPaintingClipRectsIgnoringOverflowClip, + kIgnorePlatformOverlayScrollbarSize, kIgnoreOverflowClip); LayoutRect layer_bounds; ClipRect background_rect, foreground_rect; @@ -563,7 +580,9 @@ ToLayoutBoxModelObject(GetLayoutObjectByElementId("root"))->Layer(); PaintLayer* target = ToLayoutBoxModelObject(GetLayoutObjectByElementId("target"))->Layer(); - ClipRectsContext context(root, kPaintingClipRectsIgnoringOverflowClip); + ClipRectsContext context(root, kPaintingClipRectsIgnoringOverflowClip, + kIgnorePlatformOverlayScrollbarSize, + kIgnoreOverflowClip); LayoutRect infinite_rect(LayoutRect::InfiniteIntRect()); LayoutRect layer_bounds(infinite_rect); ClipRect background_rect(infinite_rect); @@ -597,7 +616,9 @@ ToLayoutBoxModelObject(GetLayoutObjectByElementId("root"))->Layer(); PaintLayer* target = ToLayoutBoxModelObject(GetLayoutObjectByElementId("target"))->Layer(); - ClipRectsContext context(root, kPaintingClipRectsIgnoringOverflowClip); + ClipRectsContext context(root, kPaintingClipRectsIgnoringOverflowClip, + kIgnorePlatformOverlayScrollbarSize, + kIgnoreOverflowClip); LayoutRect infinite_rect(LayoutRect::InfiniteIntRect()); LayoutRect layer_bounds(infinite_rect); ClipRect background_rect(infinite_rect); @@ -632,7 +653,9 @@ ToLayoutBoxModelObject(GetLayoutObjectByElementId("root"))->Layer(); PaintLayer* target = ToLayoutBoxModelObject(GetLayoutObjectByElementId("target"))->Layer(); - ClipRectsContext context(root, kPaintingClipRectsIgnoringOverflowClip); + ClipRectsContext context(root, kPaintingClipRectsIgnoringOverflowClip, + kIgnorePlatformOverlayScrollbarSize, + kIgnoreOverflowClip); LayoutRect infinite_rect(LayoutRect::InfiniteIntRect()); LayoutRect layer_bounds(infinite_rect); ClipRect background_rect(infinite_rect);
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp b/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp index 2357e11..b09ef17 100644 --- a/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp +++ b/third_party/WebKit/Source/core/paint/PaintLayerPainter.cpp
@@ -489,9 +489,8 @@ paint_layer_for_fragments->AppendSingleFragmentIgnoringPagination( layer_fragments, local_painting_info.root_layer, local_painting_info.paint_dirty_rect, kUncachedClipRects, - PaintLayer::kUseGeometryMapper, kIgnorePlatformOverlayScrollbarSize, - respect_overflow_clip, &offset_from_root, - local_painting_info.sub_pixel_accumulation); + kIgnorePlatformOverlayScrollbarSize, respect_overflow_clip, + &offset_from_root, local_painting_info.sub_pixel_accumulation); layer_fragments[0].fragment_data = fragment->fragment_data; } else if (paint_layer_.GetLayoutObject() .IsFixedPositionObjectInPagedMedia()) { @@ -499,9 +498,8 @@ paint_layer_for_fragments->AppendSingleFragmentIgnoringPagination( single_fragment, local_painting_info.root_layer, local_painting_info.paint_dirty_rect, kUncachedClipRects, - PaintLayer::kUseGeometryMapper, kIgnorePlatformOverlayScrollbarSize, - respect_overflow_clip, &offset_from_root, - local_painting_info.sub_pixel_accumulation); + kIgnorePlatformOverlayScrollbarSize, respect_overflow_clip, + &offset_from_root, local_painting_info.sub_pixel_accumulation); RepeatFixedPositionObjectInPages(single_fragment[0], painting_info, layer_fragments); } else if (image_filter && !paint_layer_.EnclosingPaginationLayer()) { @@ -533,9 +531,8 @@ paint_layer_for_fragments->CollectFragments( layer_fragments, local_painting_info.root_layer, local_painting_info.paint_dirty_rect, kUncachedClipRects, - PaintLayer::kUseGeometryMapper, kIgnorePlatformOverlayScrollbarSize, - respect_overflow_clip, &offset_from_root, - local_painting_info.sub_pixel_accumulation); + kIgnorePlatformOverlayScrollbarSize, respect_overflow_clip, + &offset_from_root, local_painting_info.sub_pixel_accumulation); // PaintLayer::CollectFragmentsForPaint depends on the paint dirty rect in // complicated ways. For now, always assume a partially painted output @@ -574,9 +571,8 @@ paint_layer_.AppendSingleFragmentIgnoringPagination( filter_fragments, local_painting_info.root_layer, local_painting_info.paint_dirty_rect, kUncachedClipRects, - PaintLayer::kUseGeometryMapper, kIgnorePlatformOverlayScrollbarSize, - respect_overflow_clip, &offset_from_root, - local_painting_info.sub_pixel_accumulation); + kIgnorePlatformOverlayScrollbarSize, respect_overflow_clip, + &offset_from_root, local_painting_info.sub_pixel_accumulation); filter_painter.emplace(paint_layer_, context, offset_from_root, filter_fragments.IsEmpty() @@ -808,8 +804,8 @@ paint_layer_.CollectFragments( layer_fragments, painting_info.root_layer, painting_info.paint_dirty_rect, kUncachedClipRects, - PaintLayer::kUseGeometryMapper, kIgnorePlatformOverlayScrollbarSize, - respect_overflow_clip, nullptr, painting_info.sub_pixel_accumulation); + kIgnorePlatformOverlayScrollbarSize, respect_overflow_clip, nullptr, + painting_info.sub_pixel_accumulation); // PaintLayer::CollectFragmentsForPaint depends on the paint dirty rect in // complicated ways. For now, always assume a partially painted output // for fragmented content.
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp index ad66b87..41a46210 100644 --- a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp +++ b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
@@ -105,7 +105,7 @@ .BoundingBox()); } -PaintLayerScrollableAreaRareData::PaintLayerScrollableAreaRareData() {} +PaintLayerScrollableAreaRareData::PaintLayerScrollableAreaRareData() = default; const int kResizerControlExpandRatioForTouch = 2; @@ -1274,7 +1274,7 @@ return layout_object; if (ShadowRoot* shadow_root = node->ContainingShadowRoot()) { - if (shadow_root->GetType() == ShadowRootType::kUserAgent) { + if (shadow_root->IsUserAgent()) { if (LayoutObject* host_layout_object = shadow_root->host().GetLayoutObject()) return *host_layout_object;
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerTest.cpp b/third_party/WebKit/Source/core/paint/PaintLayerTest.cpp index f4a1146dd..c0a6836c 100644 --- a/third_party/WebKit/Source/core/paint/PaintLayerTest.cpp +++ b/third_party/WebKit/Source/core/paint/PaintLayerTest.cpp
@@ -51,6 +51,9 @@ } TEST_P(PaintLayerTest, CompositedBoundsAbsPosGrandchild) { + // BoundingBoxForCompositing is not used in SPv2 mode. + if (RuntimeEnabledFeatures::SlimmingPaintV2Enabled()) + return; SetBodyInnerHTML( " <div id='parent'><div id='absposparent'><div id='absposchild'>" " </div></div></div>"
diff --git a/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.h b/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.h index a5b9a51..c283374 100644 --- a/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.h +++ b/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.h
@@ -112,7 +112,7 @@ USING_FAST_MALLOC(PaintPropertyTreeBuilderContext); public: - PaintPropertyTreeBuilderContext() {} + PaintPropertyTreeBuilderContext() = default; Vector<PaintPropertyTreeBuilderFragmentContext, 1> fragments; const LayoutObject* container_for_absolute_position = nullptr;
diff --git a/third_party/WebKit/Source/core/paint/PaintPropertyTreePrinter.cpp b/third_party/WebKit/Source/core/paint/PaintPropertyTreePrinter.cpp index b6c3a4b..44d187e 100644 --- a/third_party/WebKit/Source/core/paint/PaintPropertyTreePrinter.cpp +++ b/third_party/WebKit/Source/core/paint/PaintPropertyTreePrinter.cpp
@@ -225,7 +225,7 @@ class PaintPropertyTreeGraphBuilder { public: - PaintPropertyTreeGraphBuilder() {} + PaintPropertyTreeGraphBuilder() = default; void GenerateTreeGraph(const LocalFrameView& frame_view, StringBuilder& string_builder) {
diff --git a/third_party/WebKit/Source/core/paint/PaintTiming.h b/third_party/WebKit/Source/core/paint/PaintTiming.h index 4b1150e3..7f51536 100644 --- a/third_party/WebKit/Source/core/paint/PaintTiming.h +++ b/third_party/WebKit/Source/core/paint/PaintTiming.h
@@ -31,7 +31,7 @@ WTF::CrossThreadFunction<void(WebLayerTreeView::SwapResult, double)>; public: - virtual ~PaintTiming() {} + virtual ~PaintTiming() = default; static PaintTiming& From(Document&);
diff --git a/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.h b/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.h index 0e75ead..98383a3 100644 --- a/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.h +++ b/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.h
@@ -21,7 +21,7 @@ // phase. class CORE_EXPORT PrePaintTreeWalk { public: - PrePaintTreeWalk() {} + PrePaintTreeWalk() = default; void Walk(LocalFrameView& root_frame); private:
diff --git a/third_party/WebKit/Source/core/paint/SelectionPaintingUtils.cpp b/third_party/WebKit/Source/core/paint/SelectionPaintingUtils.cpp index e1f94dd..7775714 100644 --- a/third_party/WebKit/Source/core/paint/SelectionPaintingUtils.cpp +++ b/third_party/WebKit/Source/core/paint/SelectionPaintingUtils.cpp
@@ -36,7 +36,7 @@ // we calculate ::selection style on the shadow host for elements inside the // UA shadow. if (ShadowRoot* root = node->ContainingShadowRoot()) { - if (root->GetType() == ShadowRootType::kUserAgent) { + if (root->IsUserAgent()) { if (Element* shadow_host = node->OwnerShadowHost()) { return shadow_host->GetUncachedPseudoStyle( PseudoStyleRequest(kPseudoIdSelection));
diff --git a/third_party/WebKit/Source/core/paint/TextPainter.h b/third_party/WebKit/Source/core/paint/TextPainter.h index 4cfb30f..47cb0dc 100644 --- a/third_party/WebKit/Source/core/paint/TextPainter.h +++ b/third_party/WebKit/Source/core/paint/TextPainter.h
@@ -28,7 +28,7 @@ : TextPainterBase(context, font, text_origin, text_bounds, horizontal), run_(run), combined_text_(nullptr) {} - ~TextPainter() {} + ~TextPainter() = default; void SetCombinedText(LayoutTextCombine* combined_text) { combined_text_ = combined_text;
diff --git a/third_party/WebKit/Source/core/paint/TextPainterBase.cpp b/third_party/WebKit/Source/core/paint/TextPainterBase.cpp index dc3795f6..b0421301 100644 --- a/third_party/WebKit/Source/core/paint/TextPainterBase.cpp +++ b/third_party/WebKit/Source/core/paint/TextPainterBase.cpp
@@ -35,7 +35,7 @@ emphasis_mark_offset_(0), ellipsis_offset_(0) {} -TextPainterBase::~TextPainterBase() {} +TextPainterBase::~TextPainterBase() = default; void TextPainterBase::SetEmphasisMark(const AtomicString& emphasis_mark, TextEmphasisPosition position) {
diff --git a/third_party/WebKit/Source/core/paint/ThemePainter.cpp b/third_party/WebKit/Source/core/paint/ThemePainter.cpp index 8a790948..245a80b4 100644 --- a/third_party/WebKit/Source/core/paint/ThemePainter.cpp +++ b/third_party/WebKit/Source/core/paint/ThemePainter.cpp
@@ -60,7 +60,7 @@ } // anonymous namespace -ThemePainter::ThemePainter() {} +ThemePainter::ThemePainter() = default; bool ThemePainter::Paint(const LayoutObject& o, const PaintInfo& paint_info,
diff --git a/third_party/WebKit/Source/core/paint/compositing/CompositedLayerMapping.cpp b/third_party/WebKit/Source/core/paint/compositing/CompositedLayerMapping.cpp index 4068233..70c4925 100644 --- a/third_party/WebKit/Source/core/paint/compositing/CompositedLayerMapping.cpp +++ b/third_party/WebKit/Source/core/paint/compositing/CompositedLayerMapping.cpp
@@ -609,10 +609,9 @@ // of the inherited state. // FIXME: this should use cached clip rects, but this sometimes give // inaccurate results (and trips the ASSERTS in PaintLayerClipper). - ClipRectsContext clip_rects_context(clip_inheritance_ancestor_, - kUncachedClipRects, - kIgnorePlatformOverlayScrollbarSize); - clip_rects_context.SetIgnoreOverflowClip(); + ClipRectsContext clip_rects_context( + clip_inheritance_ancestor_, kUncachedClipRects, + kIgnorePlatformOverlayScrollbarSize, kIgnoreOverflowClip); ClipRect clip_rect; owning_layer_.Clipper(PaintLayer::kDoNotUseGeometryMapper) @@ -1356,9 +1355,9 @@ if (!compositing_container || !ancestor_clipping_layer_) return; - ClipRectsContext clip_rects_context(clip_inheritance_ancestor_, - kPaintingClipRectsIgnoringOverflowClip, - kIgnorePlatformOverlayScrollbarSize); + ClipRectsContext clip_rects_context( + clip_inheritance_ancestor_, kPaintingClipRectsIgnoringOverflowClip, + kIgnorePlatformOverlayScrollbarSize, kIgnoreOverflowClip); // Note: kPaintingClipRectsIgnoringOverflowClip implies SetIgnoreOverflowClip. ClipRect clip_rect;
diff --git a/third_party/WebKit/Source/core/paint/compositing/CompositingInputsUpdater.cpp b/third_party/WebKit/Source/core/paint/compositing/CompositingInputsUpdater.cpp index 90953f9..5c5e39a 100644 --- a/third_party/WebKit/Source/core/paint/compositing/CompositingInputsUpdater.cpp +++ b/third_party/WebKit/Source/core/paint/compositing/CompositingInputsUpdater.cpp
@@ -19,7 +19,7 @@ CompositingInputsUpdater::CompositingInputsUpdater(PaintLayer* root_layer) : geometry_map_(kUseTransforms), root_layer_(root_layer) {} -CompositingInputsUpdater::~CompositingInputsUpdater() {} +CompositingInputsUpdater::~CompositingInputsUpdater() = default; void CompositingInputsUpdater::Update() { TRACE_EVENT0("blink", "CompositingInputsUpdater::update"); @@ -156,8 +156,9 @@ ClipRect clip_rect; layer->Clipper(PaintLayer::kDoNotUseGeometryMapper) .CalculateBackgroundClipRect( - ClipRectsContext(root_layer_, - kAbsoluteClipRectsIgnoringViewportClip), + ClipRectsContext( + root_layer_, kAbsoluteClipRectsIgnoringViewportClip, + kIgnorePlatformOverlayScrollbarSize, kIgnoreOverflowClip), clip_rect); IntRect snapped_clip_rect = PixelSnappedIntRect(clip_rect.Rect()); properties.clipped_absolute_bounding_box =
diff --git a/third_party/WebKit/Source/core/paint/compositing/CompositingLayerAssigner.cpp b/third_party/WebKit/Source/core/paint/compositing/CompositingLayerAssigner.cpp index 64abb403..8b40c67 100644 --- a/third_party/WebKit/Source/core/paint/compositing/CompositingLayerAssigner.cpp +++ b/third_party/WebKit/Source/core/paint/compositing/CompositingLayerAssigner.cpp
@@ -44,7 +44,7 @@ PaintLayerCompositor* compositor) : compositor_(compositor), layers_changed_(false) {} -CompositingLayerAssigner::~CompositingLayerAssigner() {} +CompositingLayerAssigner::~CompositingLayerAssigner() = default; void CompositingLayerAssigner::Assign( PaintLayer* update_root,
diff --git a/third_party/WebKit/Source/core/paint/compositing/CompositingRequirementsUpdater.cpp b/third_party/WebKit/Source/core/paint/compositing/CompositingRequirementsUpdater.cpp index 61f58e37..5392537 100644 --- a/third_party/WebKit/Source/core/paint/compositing/CompositingRequirementsUpdater.cpp +++ b/third_party/WebKit/Source/core/paint/compositing/CompositingRequirementsUpdater.cpp
@@ -224,7 +224,7 @@ : layout_view_(layout_view), compositing_reason_finder_(compositing_reason_finder) {} -CompositingRequirementsUpdater::~CompositingRequirementsUpdater() {} +CompositingRequirementsUpdater::~CompositingRequirementsUpdater() = default; void CompositingRequirementsUpdater::Update( PaintLayer* root,
diff --git a/third_party/WebKit/Source/core/paint/compositing/GraphicsLayerTreeBuilder.cpp b/third_party/WebKit/Source/core/paint/compositing/GraphicsLayerTreeBuilder.cpp index 3e53e0a..46dc499 100644 --- a/third_party/WebKit/Source/core/paint/compositing/GraphicsLayerTreeBuilder.cpp +++ b/third_party/WebKit/Source/core/paint/compositing/GraphicsLayerTreeBuilder.cpp
@@ -35,9 +35,9 @@ namespace blink { -GraphicsLayerTreeBuilder::GraphicsLayerTreeBuilder() {} +GraphicsLayerTreeBuilder::GraphicsLayerTreeBuilder() = default; -GraphicsLayerTreeBuilder::~GraphicsLayerTreeBuilder() {} +GraphicsLayerTreeBuilder::~GraphicsLayerTreeBuilder() = default; static bool ShouldAppendLayer(const PaintLayer& layer) { Node* node = layer.GetLayoutObject().GetNode();
diff --git a/third_party/WebKit/Source/core/paint/compositing/GraphicsLayerUpdater.cpp b/third_party/WebKit/Source/core/paint/compositing/GraphicsLayerUpdater.cpp index 7a56c8d..c13ea9be 100644 --- a/third_party/WebKit/Source/core/paint/compositing/GraphicsLayerUpdater.cpp +++ b/third_party/WebKit/Source/core/paint/compositing/GraphicsLayerUpdater.cpp
@@ -87,7 +87,7 @@ GraphicsLayerUpdater::GraphicsLayerUpdater() : needs_rebuild_tree_(false) {} -GraphicsLayerUpdater::~GraphicsLayerUpdater() {} +GraphicsLayerUpdater::~GraphicsLayerUpdater() = default; void GraphicsLayerUpdater::Update( PaintLayer& layer,
diff --git a/third_party/WebKit/Source/core/paint/ng/ng_box_fragment_painter.cc b/third_party/WebKit/Source/core/paint/ng/ng_box_fragment_painter.cc index 38585f0..f562d6fa 100644 --- a/third_party/WebKit/Source/core/paint/ng/ng_box_fragment_painter.cc +++ b/third_party/WebKit/Source/core/paint/ng/ng_box_fragment_painter.cc
@@ -20,11 +20,13 @@ #include "core/paint/PaintInfo.h" #include "core/paint/PaintLayer.h" #include "core/paint/PaintPhase.h" +#include "core/paint/ScrollableAreaPainter.h" #include "core/paint/ng/ng_fragment_painter.h" #include "core/paint/ng/ng_paint_fragment.h" #include "core/paint/ng/ng_text_fragment_painter.h" #include "platform/geometry/LayoutRectOutsets.h" #include "platform/graphics/GraphicsContextStateSaver.h" +#include "platform/graphics/paint/ClipRecorder.h" #include "platform/graphics/paint/DrawingRecorder.h" #include "platform/scroll/ScrollTypes.h" @@ -496,9 +498,32 @@ return false; } -void NGBoxFragmentPainter::PaintOverflowControlsIfNeeded(const PaintInfo&, - const LayoutPoint&) { - // TODO(layout-dev): Implement once we have support for scrolling. +// Clone of BlockPainter::PaintOverflowControlsIfNeeded +void NGBoxFragmentPainter::PaintOverflowControlsIfNeeded( + const PaintInfo& paint_info, + const LayoutPoint& paint_offset) { + if (box_fragment_.HasOverflowClip() && + box_fragment_.Style().Visibility() == EVisibility::kVisible && + ShouldPaintSelfBlockBackground(paint_info.phase) && + !paint_info.PaintRootBackgroundOnly()) { + LayoutObject* layout_object = + box_fragment_.PhysicalFragment().GetLayoutObject(); + if (layout_object->IsLayoutBlock()) { + LayoutBlock* layout_block = ToLayoutBlock(layout_object); + Optional<ClipRecorder> clip_recorder; + if (!layout_block->Layer()->IsSelfPaintingLayer()) { + LayoutRect clip_rect = layout_block->BorderBoxRect(); + clip_rect.MoveBy(paint_offset); + clip_recorder.emplace(paint_info.context, *layout_block, + DisplayItem::kClipScrollbarsToBoxBounds, + PixelSnappedIntRect(clip_rect)); + } + ScrollableAreaPainter(*layout_block->Layer()->GetScrollableArea()) + .PaintOverflowControls( + paint_info.context, RoundedIntPoint(paint_offset), + paint_info.GetCullRect(), false /* paintingOverlayControls */); + } + } } bool NGBoxFragmentPainter::IntersectsPaintRect(
diff --git a/third_party/WebKit/Source/core/paint/ng/ng_text_painter.h b/third_party/WebKit/Source/core/paint/ng/ng_text_painter.h index 5d06896..9e9c313 100644 --- a/third_party/WebKit/Source/core/paint/ng/ng_text_painter.h +++ b/third_party/WebKit/Source/core/paint/ng/ng_text_painter.h
@@ -30,7 +30,7 @@ bool horizontal) : TextPainterBase(context, font, text_origin, text_bounds, horizontal), fragment_(text_fragment) {} - ~NGTextPainter() {} + ~NGTextPainter() = default; void ClipDecorationsStripe(float upper, float stripe_width,
diff --git a/third_party/WebKit/Source/core/resize_observer/ResizeObserver.h b/third_party/WebKit/Source/core/resize_observer/ResizeObserver.h index ec562549..5b81677 100644 --- a/third_party/WebKit/Source/core/resize_observer/ResizeObserver.h +++ b/third_party/WebKit/Source/core/resize_observer/ResizeObserver.h
@@ -37,7 +37,8 @@ static ResizeObserver* Create(Document&, V8ResizeObserverCallback*); static ResizeObserver* Create(Document&, Delegate*); - virtual ~ResizeObserver(){}; + virtual ~ResizeObserver() = default; + ; // API methods void observe(Element*);
diff --git a/third_party/WebKit/Source/core/scheduler/FrameThrottlingTest.cpp b/third_party/WebKit/Source/core/scheduler/FrameThrottlingTest.cpp index 639e2ac1..84c471f 100644 --- a/third_party/WebKit/Source/core/scheduler/FrameThrottlingTest.cpp +++ b/third_party/WebKit/Source/core/scheduler/FrameThrottlingTest.cpp
@@ -43,7 +43,7 @@ class MockWebDisplayItemList : public WebDisplayItemList { public: - ~MockWebDisplayItemList() override {} + ~MockWebDisplayItemList() override = default; MOCK_METHOD2(AppendDrawingItem, void(const WebRect& visual_rect, sk_sp<const cc::PaintRecord>));
diff --git a/third_party/WebKit/Source/core/script/HTMLParserScriptRunnerHost.h b/third_party/WebKit/Source/core/script/HTMLParserScriptRunnerHost.h index 14b7ab9..8c76ee5 100644 --- a/third_party/WebKit/Source/core/script/HTMLParserScriptRunnerHost.h +++ b/third_party/WebKit/Source/core/script/HTMLParserScriptRunnerHost.h
@@ -36,7 +36,7 @@ class CORE_EXPORT HTMLParserScriptRunnerHost : public GarbageCollectedMixin { public: - virtual ~HTMLParserScriptRunnerHost() {} + virtual ~HTMLParserScriptRunnerHost() = default; void Trace(blink::Visitor* visitor) override {} virtual void NotifyScriptLoaded(PendingScript*) = 0;
diff --git a/third_party/WebKit/Source/core/script/ScriptModuleResolver.h b/third_party/WebKit/Source/core/script/ScriptModuleResolver.h index 68ff59c12..86cdb157 100644 --- a/third_party/WebKit/Source/core/script/ScriptModuleResolver.h +++ b/third_party/WebKit/Source/core/script/ScriptModuleResolver.h
@@ -25,7 +25,7 @@ class CORE_EXPORT ScriptModuleResolver : public GarbageCollectedFinalized<ScriptModuleResolver> { public: - virtual ~ScriptModuleResolver() {} + virtual ~ScriptModuleResolver() = default; virtual void Trace(blink::Visitor* visitor) {} // Notifies the ScriptModuleResolver that a ModuleScript exists.
diff --git a/third_party/WebKit/Source/core/script/XMLParserScriptRunnerHost.h b/third_party/WebKit/Source/core/script/XMLParserScriptRunnerHost.h index cc349439..e4ffd2c 100644 --- a/third_party/WebKit/Source/core/script/XMLParserScriptRunnerHost.h +++ b/third_party/WebKit/Source/core/script/XMLParserScriptRunnerHost.h
@@ -12,7 +12,7 @@ class CORE_EXPORT XMLParserScriptRunnerHost : public GarbageCollectedMixin { public: - virtual ~XMLParserScriptRunnerHost() {} + virtual ~XMLParserScriptRunnerHost() = default; virtual void Trace(Visitor*) {} virtual void NotifyScriptExecuted() = 0;
diff --git a/third_party/WebKit/Source/core/streams/UnderlyingSourceBase.h b/third_party/WebKit/Source/core/streams/UnderlyingSourceBase.h index b430889..3f656b0 100644 --- a/third_party/WebKit/Source/core/streams/UnderlyingSourceBase.h +++ b/third_party/WebKit/Source/core/streams/UnderlyingSourceBase.h
@@ -29,7 +29,7 @@ public: void Trace(blink::Visitor*) override; - virtual ~UnderlyingSourceBase() {} + virtual ~UnderlyingSourceBase() = default; ScriptPromise startWrapper(ScriptState*, ScriptValue stream); virtual ScriptPromise Start(ScriptState*);
diff --git a/third_party/WebKit/Source/core/style/BasicShapes.h b/third_party/WebKit/Source/core/style/BasicShapes.h index 31386356..62c609a 100644 --- a/third_party/WebKit/Source/core/style/BasicShapes.h +++ b/third_party/WebKit/Source/core/style/BasicShapes.h
@@ -47,7 +47,7 @@ class CORE_EXPORT BasicShape : public RefCounted<BasicShape> { public: - virtual ~BasicShape() {} + virtual ~BasicShape() = default; enum ShapeType { kBasicShapeEllipseType, @@ -69,7 +69,7 @@ virtual ShapeType GetType() const = 0; protected: - BasicShape() {} + BasicShape() = default; }; #define DEFINE_BASICSHAPE_TYPE_CASTS(thisType) \ @@ -154,7 +154,7 @@ ShapeType GetType() const override { return kBasicShapeCircleType; } private: - BasicShapeCircle() {} + BasicShapeCircle() = default; BasicShapeCenterCoordinate center_x_; BasicShapeCenterCoordinate center_y_; @@ -188,7 +188,7 @@ ShapeType GetType() const override { return kBasicShapeEllipseType; } private: - BasicShapeEllipse() {} + BasicShapeEllipse() = default; BasicShapeCenterCoordinate center_x_; BasicShapeCenterCoordinate center_y_; @@ -266,7 +266,7 @@ ShapeType GetType() const override { return kBasicShapeInsetType; } private: - BasicShapeInset() {} + BasicShapeInset() = default; Length right_; Length top_;
diff --git a/third_party/WebKit/Source/core/style/ClipPathOperation.h b/third_party/WebKit/Source/core/style/ClipPathOperation.h index 558fc0bae..86755e7 100644 --- a/third_party/WebKit/Source/core/style/ClipPathOperation.h +++ b/third_party/WebKit/Source/core/style/ClipPathOperation.h
@@ -48,7 +48,7 @@ public: enum OperationType { REFERENCE, SHAPE }; - virtual ~ClipPathOperation() {} + virtual ~ClipPathOperation() = default; virtual bool operator==(const ClipPathOperation&) const = 0; bool operator!=(const ClipPathOperation& o) const { return !(*this == o); } @@ -59,7 +59,7 @@ } protected: - ClipPathOperation() {} + ClipPathOperation() = default; }; class ReferenceClipPathOperation final : public ClipPathOperation {
diff --git a/third_party/WebKit/Source/core/style/ComputedStyle.cpp b/third_party/WebKit/Source/core/style/ComputedStyle.cpp index 8b20c67..64200c38 100644 --- a/third_party/WebKit/Source/core/style/ComputedStyle.cpp +++ b/third_party/WebKit/Source/core/style/ComputedStyle.cpp
@@ -1003,9 +1003,11 @@ point.SetX(float_distance * cos(deg2rad(angle))); point.SetY(float_distance * sin(deg2rad(angle))); } else { + float zoom = EffectiveZoom(); const StylePath& motion_path = ToStylePath(*path); float path_length = motion_path.length(); - float float_distance = FloatValueForLength(distance, path_length); + float float_distance = + FloatValueForLength(distance, path_length * zoom) / zoom; float computed_distance; if (motion_path.IsClosed() && path_length > 0) { computed_distance = fmod(float_distance, path_length); @@ -1017,9 +1019,11 @@ motion_path.GetPath().PointAndNormalAtLength(computed_distance, point, angle); + + point.Scale(zoom, zoom); } - if (rotate.type == kOffsetRotationFixed) + if (rotate.type == OffsetRotationType::kFixed) angle = 0; float origin_shift_x = 0;
diff --git a/third_party/WebKit/Source/core/style/ComputedStyleConstants.h b/third_party/WebKit/Source/core/style/ComputedStyleConstants.h index 6fbf2e1..acdcfc16 100644 --- a/third_party/WebKit/Source/core/style/ComputedStyleConstants.h +++ b/third_party/WebKit/Source/core/style/ComputedStyleConstants.h
@@ -150,7 +150,7 @@ enum class EAnimPlayState : unsigned { kPlaying, kPaused }; -enum OffsetRotationType { kOffsetRotationAuto, kOffsetRotationFixed }; +enum class OffsetRotationType : unsigned { kAuto, kFixed }; static const size_t kGridAutoFlowBits = 4; enum InternalGridAutoFlowAlgorithm {
diff --git a/third_party/WebKit/Source/core/style/ContentData.h b/third_party/WebKit/Source/core/style/ContentData.h index f5bb3c5..de1e7cf9 100644 --- a/third_party/WebKit/Source/core/style/ContentData.h +++ b/third_party/WebKit/Source/core/style/ContentData.h
@@ -44,7 +44,7 @@ static ContentData* Create(std::unique_ptr<CounterContent>); static ContentData* Create(QuoteType); - virtual ~ContentData() {} + virtual ~ContentData() = default; virtual bool IsCounter() const { return false; } virtual bool IsImage() const { return false; }
diff --git a/third_party/WebKit/Source/core/style/FillLayer.h b/third_party/WebKit/Source/core/style/FillLayer.h index b94a416..47fe67ce 100644 --- a/third_party/WebKit/Source/core/style/FillLayer.h +++ b/third_party/WebKit/Source/core/style/FillLayer.h
@@ -300,7 +300,7 @@ private: friend class ComputedStyle; - FillLayer() {} + FillLayer() = default; bool ImageIsOpaque(const Document&, const ComputedStyle&) const; bool ImageTilesLayer() const;
diff --git a/third_party/WebKit/Source/core/style/FilterOperation.h b/third_party/WebKit/Source/core/style/FilterOperation.h index 010d5814..ece0aad 100644 --- a/third_party/WebKit/Source/core/style/FilterOperation.h +++ b/third_party/WebKit/Source/core/style/FilterOperation.h
@@ -87,7 +87,7 @@ return false; } - virtual ~FilterOperation() {} + virtual ~FilterOperation() = default; virtual void Trace(blink::Visitor* visitor) {} static FilterOperation* Blend(const FilterOperation* from,
diff --git a/third_party/WebKit/Source/core/style/FilterOperations.cpp b/third_party/WebKit/Source/core/style/FilterOperations.cpp index 5fb48b1..1823401b 100644 --- a/third_party/WebKit/Source/core/style/FilterOperations.cpp +++ b/third_party/WebKit/Source/core/style/FilterOperations.cpp
@@ -29,16 +29,14 @@ namespace blink { -FilterOperations::FilterOperations() {} +FilterOperations::FilterOperations() = default; void FilterOperations::Trace(blink::Visitor* visitor) { visitor->Trace(operations_); } -FilterOperations& FilterOperations::operator=(const FilterOperations& other) { - operations_ = other.operations_; - return *this; -} +FilterOperations& FilterOperations::operator=(const FilterOperations& other) = + default; bool FilterOperations::operator==(const FilterOperations& o) const { if (operations_.size() != o.operations_.size())
diff --git a/third_party/WebKit/Source/core/style/FilterOperations.h b/third_party/WebKit/Source/core/style/FilterOperations.h index 447aab2..117835ba 100644 --- a/third_party/WebKit/Source/core/style/FilterOperations.h +++ b/third_party/WebKit/Source/core/style/FilterOperations.h
@@ -97,7 +97,7 @@ void Trace(blink::Visitor* visitor) { visitor->Trace(operations_); } private: - FilterOperationsWrapper() {} + FilterOperationsWrapper() = default; explicit FilterOperationsWrapper(const FilterOperations& operations) : operations_(operations) {}
diff --git a/third_party/WebKit/Source/core/style/QuotesData.h b/third_party/WebKit/Source/core/style/QuotesData.h index 9a4b7ba7..791941c 100644 --- a/third_party/WebKit/Source/core/style/QuotesData.h +++ b/third_party/WebKit/Source/core/style/QuotesData.h
@@ -50,7 +50,7 @@ int size() { return quote_pairs_.size(); } private: - QuotesData() {} + QuotesData() = default; Vector<std::pair<String, String>> quote_pairs_; };
diff --git a/third_party/WebKit/Source/core/style/SVGComputedStyle.cpp b/third_party/WebKit/Source/core/style/SVGComputedStyle.cpp index fad6453..d320882 100644 --- a/third_party/WebKit/Source/core/style/SVGComputedStyle.cpp +++ b/third_party/WebKit/Source/core/style/SVGComputedStyle.cpp
@@ -73,7 +73,7 @@ svg_noninherited_flags = other.svg_noninherited_flags; } -SVGComputedStyle::~SVGComputedStyle() {} +SVGComputedStyle::~SVGComputedStyle() = default; bool SVGComputedStyle::operator==(const SVGComputedStyle& other) const { return InheritedEqual(other) && NonInheritedEqual(other);
diff --git a/third_party/WebKit/Source/core/style/StyleFetchedImage.cpp b/third_party/WebKit/Source/core/style/StyleFetchedImage.cpp index d6278bb..5177ae2 100644 --- a/third_party/WebKit/Source/core/style/StyleFetchedImage.cpp +++ b/third_party/WebKit/Source/core/style/StyleFetchedImage.cpp
@@ -44,7 +44,7 @@ image_->SetNotRefetchableDataFromDiskCache(); } -StyleFetchedImage::~StyleFetchedImage() {} +StyleFetchedImage::~StyleFetchedImage() = default; void StyleFetchedImage::Dispose() { image_->RemoveObserver(this);
diff --git a/third_party/WebKit/Source/core/style/StyleFetchedImageSet.cpp b/third_party/WebKit/Source/core/style/StyleFetchedImageSet.cpp index 8ec4889..d9005ec 100644 --- a/third_party/WebKit/Source/core/style/StyleFetchedImageSet.cpp +++ b/third_party/WebKit/Source/core/style/StyleFetchedImageSet.cpp
@@ -44,7 +44,7 @@ best_fit_image_->AddObserver(this); } -StyleFetchedImageSet::~StyleFetchedImageSet() {} +StyleFetchedImageSet::~StyleFetchedImageSet() = default; void StyleFetchedImageSet::Dispose() { best_fit_image_->RemoveObserver(this);
diff --git a/third_party/WebKit/Source/core/style/StyleImage.h b/third_party/WebKit/Source/core/style/StyleImage.h index 344c1a2..28df92d 100644 --- a/third_party/WebKit/Source/core/style/StyleImage.h +++ b/third_party/WebKit/Source/core/style/StyleImage.h
@@ -45,7 +45,7 @@ // value. class CORE_EXPORT StyleImage : public GarbageCollectedFinalized<StyleImage> { public: - virtual ~StyleImage() {} + virtual ~StyleImage() = default; bool operator==(const StyleImage& other) const { return Data() == other.Data();
diff --git a/third_party/WebKit/Source/core/style/StylePath.cpp b/third_party/WebKit/Source/core/style/StylePath.cpp index 7ac67be..d20a2604 100644 --- a/third_party/WebKit/Source/core/style/StylePath.cpp +++ b/third_party/WebKit/Source/core/style/StylePath.cpp
@@ -19,7 +19,7 @@ DCHECK(byte_stream_); } -StylePath::~StylePath() {} +StylePath::~StylePath() = default; scoped_refptr<StylePath> StylePath::Create( std::unique_ptr<SVGPathByteStream> path_byte_stream) {
diff --git a/third_party/WebKit/Source/core/style/StyleRay.h b/third_party/WebKit/Source/core/style/StyleRay.h index c2edad6a8..ea31c84 100644 --- a/third_party/WebKit/Source/core/style/StyleRay.h +++ b/third_party/WebKit/Source/core/style/StyleRay.h
@@ -20,7 +20,7 @@ }; static scoped_refptr<StyleRay> Create(float angle, RaySize, bool contain); - virtual ~StyleRay() {} + virtual ~StyleRay() = default; float Angle() const { return angle_; } RaySize Size() const { return size_; }
diff --git a/third_party/WebKit/Source/core/svg/LinearGradientAttributes.h b/third_party/WebKit/Source/core/svg/LinearGradientAttributes.h index e0fffb1..afc3002 100644 --- a/third_party/WebKit/Source/core/svg/LinearGradientAttributes.h +++ b/third_party/WebKit/Source/core/svg/LinearGradientAttributes.h
@@ -105,7 +105,7 @@ void Trace(blink::Visitor* visitor) { visitor->Trace(attributes_); } private: - LinearGradientAttributesWrapper() {} + LinearGradientAttributesWrapper() = default; LinearGradientAttributes attributes_; };
diff --git a/third_party/WebKit/Source/core/svg/PatternAttributes.h b/third_party/WebKit/Source/core/svg/PatternAttributes.h index 213f8a1..cc90d0863 100644 --- a/third_party/WebKit/Source/core/svg/PatternAttributes.h +++ b/third_party/WebKit/Source/core/svg/PatternAttributes.h
@@ -180,7 +180,7 @@ void Trace(blink::Visitor* visitor) { visitor->Trace(attributes_); } private: - PatternAttributesWrapper() {} + PatternAttributesWrapper() = default; PatternAttributes attributes_; };
diff --git a/third_party/WebKit/Source/core/svg/RadialGradientAttributes.h b/third_party/WebKit/Source/core/svg/RadialGradientAttributes.h index a336648c..bc202870 100644 --- a/third_party/WebKit/Source/core/svg/RadialGradientAttributes.h +++ b/third_party/WebKit/Source/core/svg/RadialGradientAttributes.h
@@ -127,7 +127,7 @@ void Trace(blink::Visitor* visitor) { visitor->Trace(attributes_); } private: - RadialGradientAttributesWrapper() {} + RadialGradientAttributesWrapper() = default; RadialGradientAttributes attributes_; };
diff --git a/third_party/WebKit/Source/core/svg/SVGAngle.cpp b/third_party/WebKit/Source/core/svg/SVGAngle.cpp index a67fccc..1c4a822a 100644 --- a/third_party/WebKit/Source/core/svg/SVGAngle.cpp +++ b/third_party/WebKit/Source/core/svg/SVGAngle.cpp
@@ -50,7 +50,7 @@ : SVGEnumeration<SVGMarkerOrientType>(kSVGMarkerOrientAngle), angle_(angle) {} -SVGMarkerOrientEnumeration::~SVGMarkerOrientEnumeration() {} +SVGMarkerOrientEnumeration::~SVGMarkerOrientEnumeration() = default; void SVGMarkerOrientEnumeration::Trace(blink::Visitor* visitor) { visitor->Trace(angle_); @@ -101,7 +101,7 @@ orient_type_->SetEnumValue(orient_type); } -SVGAngle::~SVGAngle() {} +SVGAngle::~SVGAngle() = default; void SVGAngle::Trace(blink::Visitor* visitor) { visitor->Trace(orient_type_);
diff --git a/third_party/WebKit/Source/core/svg/SVGAngleTearOff.cpp b/third_party/WebKit/Source/core/svg/SVGAngleTearOff.cpp index 175003ce..bf4d39a7 100644 --- a/third_party/WebKit/Source/core/svg/SVGAngleTearOff.cpp +++ b/third_party/WebKit/Source/core/svg/SVGAngleTearOff.cpp
@@ -45,7 +45,7 @@ property_is_anim_val, attribute_name) {} -SVGAngleTearOff::~SVGAngleTearOff() {} +SVGAngleTearOff::~SVGAngleTearOff() = default; void SVGAngleTearOff::setValue(float value, ExceptionState& exception_state) { if (IsImmutable()) {
diff --git a/third_party/WebKit/Source/core/svg/SVGAnimateElement.cpp b/third_party/WebKit/Source/core/svg/SVGAnimateElement.cpp index ae75425..72f4ace 100644 --- a/third_party/WebKit/Source/core/svg/SVGAnimateElement.cpp +++ b/third_party/WebKit/Source/core/svg/SVGAnimateElement.cpp
@@ -111,7 +111,7 @@ return new SVGAnimateElement(SVGNames::animateTag, document); } -SVGAnimateElement::~SVGAnimateElement() {} +SVGAnimateElement::~SVGAnimateElement() = default; bool SVGAnimateElement::IsSVGAnimationAttributeSettingJavaScriptURL( const Attribute& attribute) const {
diff --git a/third_party/WebKit/Source/core/svg/SVGAnimateMotionElement.cpp b/third_party/WebKit/Source/core/svg/SVGAnimateMotionElement.cpp index 1648b65..f79696d 100644 --- a/third_party/WebKit/Source/core/svg/SVGAnimateMotionElement.cpp +++ b/third_party/WebKit/Source/core/svg/SVGAnimateMotionElement.cpp
@@ -64,7 +64,7 @@ DEFINE_NODE_FACTORY(SVGAnimateMotionElement) -SVGAnimateMotionElement::~SVGAnimateMotionElement() {} +SVGAnimateMotionElement::~SVGAnimateMotionElement() = default; bool SVGAnimateMotionElement::HasValidTarget() { return SVGAnimationElement::HasValidTarget() &&
diff --git a/third_party/WebKit/Source/core/svg/SVGAnimatedAngle.cpp b/third_party/WebKit/Source/core/svg/SVGAnimatedAngle.cpp index 24e4acf..68772c2 100644 --- a/third_party/WebKit/Source/core/svg/SVGAnimatedAngle.cpp +++ b/third_party/WebKit/Source/core/svg/SVGAnimatedAngle.cpp
@@ -43,7 +43,7 @@ SVGNames::orientAttr, BaseValue()->OrientType())) {} -SVGAnimatedAngle::~SVGAnimatedAngle() {} +SVGAnimatedAngle::~SVGAnimatedAngle() = default; void SVGAnimatedAngle::Trace(blink::Visitor* visitor) { visitor->Trace(orient_type_);
diff --git a/third_party/WebKit/Source/core/svg/SVGAnimatedEnumerationBase.cpp b/third_party/WebKit/Source/core/svg/SVGAnimatedEnumerationBase.cpp index bca67d03..a740f39 100644 --- a/third_party/WebKit/Source/core/svg/SVGAnimatedEnumerationBase.cpp +++ b/third_party/WebKit/Source/core/svg/SVGAnimatedEnumerationBase.cpp
@@ -35,7 +35,7 @@ namespace blink { -SVGAnimatedEnumerationBase::~SVGAnimatedEnumerationBase() {} +SVGAnimatedEnumerationBase::~SVGAnimatedEnumerationBase() = default; void SVGAnimatedEnumerationBase::setBaseVal(unsigned short value, ExceptionState& exception_state) {
diff --git a/third_party/WebKit/Source/core/svg/SVGAnimatedPath.cpp b/third_party/WebKit/Source/core/svg/SVGAnimatedPath.cpp index 24473a7..c9e0cfb 100644 --- a/third_party/WebKit/Source/core/svg/SVGAnimatedPath.cpp +++ b/third_party/WebKit/Source/core/svg/SVGAnimatedPath.cpp
@@ -42,7 +42,7 @@ SVGPath::Create(), css_property_id) {} -SVGAnimatedPath::~SVGAnimatedPath() {} +SVGAnimatedPath::~SVGAnimatedPath() = default; const CSSValue* SVGAnimatedPath::CssValue() const { const cssvalue::CSSPathValue* path_value = CurrentValue()->PathValue();
diff --git a/third_party/WebKit/Source/core/svg/SVGDocumentExtensions.cpp b/third_party/WebKit/Source/core/svg/SVGDocumentExtensions.cpp index 2b4bdd6..533cdea 100644 --- a/third_party/WebKit/Source/core/svg/SVGDocumentExtensions.cpp +++ b/third_party/WebKit/Source/core/svg/SVGDocumentExtensions.cpp
@@ -31,7 +31,7 @@ SVGDocumentExtensions::SVGDocumentExtensions(Document* document) : document_(document) {} -SVGDocumentExtensions::~SVGDocumentExtensions() {} +SVGDocumentExtensions::~SVGDocumentExtensions() = default; void SVGDocumentExtensions::AddTimeContainer(SVGSVGElement* element) { time_containers_.insert(element);
diff --git a/third_party/WebKit/Source/core/svg/SVGElementProxy.cpp b/third_party/WebKit/Source/core/svg/SVGElementProxy.cpp index ef593e0..db248d3 100644 --- a/third_party/WebKit/Source/core/svg/SVGElementProxy.cpp +++ b/third_party/WebKit/Source/core/svg/SVGElementProxy.cpp
@@ -70,7 +70,7 @@ SVGElementProxy::SVGElementProxy(const String& url, const AtomicString& id) : id_(id), url_(url), is_local_(false) {} -SVGElementProxy::~SVGElementProxy() {} +SVGElementProxy::~SVGElementProxy() = default; void SVGElementProxy::AddClient(SVGResourceClient* client, WebTaskRunner* task_runner) {
diff --git a/third_party/WebKit/Source/core/svg/SVGEnumeration.cpp b/third_party/WebKit/Source/core/svg/SVGEnumeration.cpp index 8b80b5e..d61358e 100644 --- a/third_party/WebKit/Source/core/svg/SVGEnumeration.cpp +++ b/third_party/WebKit/Source/core/svg/SVGEnumeration.cpp
@@ -36,7 +36,7 @@ DEFINE_SVG_PROPERTY_TYPE_CASTS(SVGEnumerationBase); -SVGEnumerationBase::~SVGEnumerationBase() {} +SVGEnumerationBase::~SVGEnumerationBase() = default; SVGPropertyBase* SVGEnumerationBase::CloneForAnimation( const String& value) const {
diff --git a/third_party/WebKit/Source/core/svg/SVGEnumeration.h b/third_party/WebKit/Source/core/svg/SVGEnumeration.h index 76984e0..c9712b5 100644 --- a/third_party/WebKit/Source/core/svg/SVGEnumeration.h +++ b/third_party/WebKit/Source/core/svg/SVGEnumeration.h
@@ -115,7 +115,7 @@ return new SVGEnumeration<Enum>(new_value); } - ~SVGEnumeration() override {} + ~SVGEnumeration() override = default; SVGEnumerationBase* Clone() const override { return Create(EnumValue()); }
diff --git a/third_party/WebKit/Source/core/svg/SVGFilterElement.cpp b/third_party/WebKit/Source/core/svg/SVGFilterElement.cpp index 337aa20..9583980 100644 --- a/third_party/WebKit/Source/core/svg/SVGFilterElement.cpp +++ b/third_party/WebKit/Source/core/svg/SVGFilterElement.cpp
@@ -71,7 +71,7 @@ AddToPropertyMap(primitive_units_); } -SVGFilterElement::~SVGFilterElement() {} +SVGFilterElement::~SVGFilterElement() = default; DEFINE_NODE_FACTORY(SVGFilterElement)
diff --git a/third_party/WebKit/Source/core/svg/SVGGraphicsElement.cpp b/third_party/WebKit/Source/core/svg/SVGGraphicsElement.cpp index afda8d0..25ae51c 100644 --- a/third_party/WebKit/Source/core/svg/SVGGraphicsElement.cpp +++ b/third_party/WebKit/Source/core/svg/SVGGraphicsElement.cpp
@@ -42,7 +42,7 @@ AddToPropertyMap(transform_); } -SVGGraphicsElement::~SVGGraphicsElement() {} +SVGGraphicsElement::~SVGGraphicsElement() = default; void SVGGraphicsElement::Trace(blink::Visitor* visitor) { visitor->Trace(transform_);
diff --git a/third_party/WebKit/Source/core/svg/SVGLengthList.cpp b/third_party/WebKit/Source/core/svg/SVGLengthList.cpp index f33cca80..c51e123 100644 --- a/third_party/WebKit/Source/core/svg/SVGLengthList.cpp +++ b/third_party/WebKit/Source/core/svg/SVGLengthList.cpp
@@ -28,7 +28,7 @@ SVGLengthList::SVGLengthList(SVGLengthMode mode) : mode_(mode) {} -SVGLengthList::~SVGLengthList() {} +SVGLengthList::~SVGLengthList() = default; SVGLengthList* SVGLengthList::Clone() { SVGLengthList* ret = SVGLengthList::Create(mode_);
diff --git a/third_party/WebKit/Source/core/svg/SVGMPathElement.cpp b/third_party/WebKit/Source/core/svg/SVGMPathElement.cpp index 612bc42..e6f3a28 100644 --- a/third_party/WebKit/Source/core/svg/SVGMPathElement.cpp +++ b/third_party/WebKit/Source/core/svg/SVGMPathElement.cpp
@@ -40,7 +40,7 @@ DEFINE_NODE_FACTORY(SVGMPathElement) -SVGMPathElement::~SVGMPathElement() {} +SVGMPathElement::~SVGMPathElement() = default; void SVGMPathElement::BuildPendingResource() { ClearResourceReferences();
diff --git a/third_party/WebKit/Source/core/svg/SVGNumberList.cpp b/third_party/WebKit/Source/core/svg/SVGNumberList.cpp index cf37c50..d131ee6 100644 --- a/third_party/WebKit/Source/core/svg/SVGNumberList.cpp +++ b/third_party/WebKit/Source/core/svg/SVGNumberList.cpp
@@ -27,9 +27,9 @@ namespace blink { -SVGNumberList::SVGNumberList() {} +SVGNumberList::SVGNumberList() = default; -SVGNumberList::~SVGNumberList() {} +SVGNumberList::~SVGNumberList() = default; String SVGNumberList::ValueAsString() const { StringBuilder builder;
diff --git a/third_party/WebKit/Source/core/svg/SVGPath.cpp b/third_party/WebKit/Source/core/svg/SVGPath.cpp index 2c336f2..cca93e7 100644 --- a/third_party/WebKit/Source/core/svg/SVGPath.cpp +++ b/third_party/WebKit/Source/core/svg/SVGPath.cpp
@@ -83,7 +83,7 @@ DCHECK(path_value_); } -SVGPath::~SVGPath() {} +SVGPath::~SVGPath() = default; String SVGPath::ValueAsString() const { return BuildStringFromByteStream(ByteStream());
diff --git a/third_party/WebKit/Source/core/svg/SVGPathByteStream.h b/third_party/WebKit/Source/core/svg/SVGPathByteStream.h index 789f8e3..3587c94d 100644 --- a/third_party/WebKit/Source/core/svg/SVGPathByteStream.h +++ b/third_party/WebKit/Source/core/svg/SVGPathByteStream.h
@@ -65,7 +65,7 @@ } private: - SVGPathByteStream() {} + SVGPathByteStream() = default; SVGPathByteStream(const Data& data) : data_(data) {} Data data_;
diff --git a/third_party/WebKit/Source/core/svg/SVGPathConsumer.h b/third_party/WebKit/Source/core/svg/SVGPathConsumer.h index 359858e..5f392b7 100644 --- a/third_party/WebKit/Source/core/svg/SVGPathConsumer.h +++ b/third_party/WebKit/Source/core/svg/SVGPathConsumer.h
@@ -36,8 +36,8 @@ STACK_ALLOCATED(); public: - SVGPathConsumer() {} - virtual ~SVGPathConsumer() {} + SVGPathConsumer() = default; + virtual ~SVGPathConsumer() = default; virtual void EmitSegment(const PathSegmentData&) = 0;
diff --git a/third_party/WebKit/Source/core/svg/SVGPoint.cpp b/third_party/WebKit/Source/core/svg/SVGPoint.cpp index 49d76f5..aee358f 100644 --- a/third_party/WebKit/Source/core/svg/SVGPoint.cpp +++ b/third_party/WebKit/Source/core/svg/SVGPoint.cpp
@@ -38,7 +38,7 @@ namespace blink { -SVGPoint::SVGPoint() {} +SVGPoint::SVGPoint() = default; SVGPoint::SVGPoint(const FloatPoint& point) : value_(point) {}
diff --git a/third_party/WebKit/Source/core/svg/SVGPointList.cpp b/third_party/WebKit/Source/core/svg/SVGPointList.cpp index bc16ea80..f91093e 100644 --- a/third_party/WebKit/Source/core/svg/SVGPointList.cpp +++ b/third_party/WebKit/Source/core/svg/SVGPointList.cpp
@@ -28,9 +28,9 @@ namespace blink { -SVGPointList::SVGPointList() {} +SVGPointList::SVGPointList() = default; -SVGPointList::~SVGPointList() {} +SVGPointList::~SVGPointList() = default; String SVGPointList::ValueAsString() const { StringBuilder builder;
diff --git a/third_party/WebKit/Source/core/svg/SVGResourceClient.h b/third_party/WebKit/Source/core/svg/SVGResourceClient.h index 0b5bd79..a2e6be1 100644 --- a/third_party/WebKit/Source/core/svg/SVGResourceClient.h +++ b/third_party/WebKit/Source/core/svg/SVGResourceClient.h
@@ -15,7 +15,7 @@ class CORE_EXPORT SVGResourceClient : public ResourceClient { public: - virtual ~SVGResourceClient() {} + virtual ~SVGResourceClient() = default; virtual TreeScope* GetTreeScope() = 0; @@ -23,7 +23,7 @@ virtual void ResourceElementChanged() = 0; protected: - SVGResourceClient() {} + SVGResourceClient() = default; String DebugName() const override { return "SVGResourceClient"; } void NotifyFinished(Resource*) override { ResourceElementChanged(); }
diff --git a/third_party/WebKit/Source/core/svg/SVGSVGElement.cpp b/third_party/WebKit/Source/core/svg/SVGSVGElement.cpp index 4785487..6b33788 100644 --- a/third_party/WebKit/Source/core/svg/SVGSVGElement.cpp +++ b/third_party/WebKit/Source/core/svg/SVGSVGElement.cpp
@@ -97,7 +97,7 @@ DEFINE_NODE_FACTORY(SVGSVGElement) -SVGSVGElement::~SVGSVGElement() {} +SVGSVGElement::~SVGSVGElement() = default; float SVGSVGElement::currentScale() const { if (!isConnected() || !IsOutermostSVGSVGElement())
diff --git a/third_party/WebKit/Source/core/svg/SVGStaticStringList.cpp b/third_party/WebKit/Source/core/svg/SVGStaticStringList.cpp index 6b15e4b1..d611806 100644 --- a/third_party/WebKit/Source/core/svg/SVGStaticStringList.cpp +++ b/third_party/WebKit/Source/core/svg/SVGStaticStringList.cpp
@@ -44,7 +44,7 @@ DCHECK(context_element); } -SVGStaticStringList::~SVGStaticStringList() {} +SVGStaticStringList::~SVGStaticStringList() = default; void SVGStaticStringList::Trace(blink::Visitor* visitor) { visitor->Trace(value_);
diff --git a/third_party/WebKit/Source/core/svg/SVGString.h b/third_party/WebKit/Source/core/svg/SVGString.h index 92270ba..b3b4be2 100644 --- a/third_party/WebKit/Source/core/svg/SVGString.h +++ b/third_party/WebKit/Source/core/svg/SVGString.h
@@ -74,7 +74,7 @@ AnimatedPropertyType GetType() const override { return ClassType(); } private: - SVGString() {} + SVGString() = default; explicit SVGString(const String& value) : value_(value) {} String value_;
diff --git a/third_party/WebKit/Source/core/svg/SVGStringList.cpp b/third_party/WebKit/Source/core/svg/SVGStringList.cpp index 72cf3c6..a2ec4f7 100644 --- a/third_party/WebKit/Source/core/svg/SVGStringList.cpp +++ b/third_party/WebKit/Source/core/svg/SVGStringList.cpp
@@ -29,9 +29,9 @@ namespace blink { -SVGStringList::SVGStringList() {} +SVGStringList::SVGStringList() = default; -SVGStringList::~SVGStringList() {} +SVGStringList::~SVGStringList() = default; void SVGStringList::Initialize(const String& item) { values_.clear();
diff --git a/third_party/WebKit/Source/core/svg/SVGStyleElement.cpp b/third_party/WebKit/Source/core/svg/SVGStyleElement.cpp index dff1bd6..e3838ce 100644 --- a/third_party/WebKit/Source/core/svg/SVGStyleElement.cpp +++ b/third_party/WebKit/Source/core/svg/SVGStyleElement.cpp
@@ -35,7 +35,7 @@ : SVGElement(SVGNames::styleTag, document), StyleElement(&document, created_by_parser) {} -SVGStyleElement::~SVGStyleElement() {} +SVGStyleElement::~SVGStyleElement() = default; SVGStyleElement* SVGStyleElement::Create(Document& document, bool created_by_parser) {
diff --git a/third_party/WebKit/Source/core/svg/SVGTextPathElement.cpp b/third_party/WebKit/Source/core/svg/SVGTextPathElement.cpp index e74b722..c3114e1 100644 --- a/third_party/WebKit/Source/core/svg/SVGTextPathElement.cpp +++ b/third_party/WebKit/Source/core/svg/SVGTextPathElement.cpp
@@ -69,7 +69,7 @@ DEFINE_NODE_FACTORY(SVGTextPathElement) -SVGTextPathElement::~SVGTextPathElement() {} +SVGTextPathElement::~SVGTextPathElement() = default; void SVGTextPathElement::Trace(blink::Visitor* visitor) { visitor->Trace(start_offset_);
diff --git a/third_party/WebKit/Source/core/svg/SVGTransform.cpp b/third_party/WebKit/Source/core/svg/SVGTransform.cpp index 199c4972..dba087b 100644 --- a/third_party/WebKit/Source/core/svg/SVGTransform.cpp +++ b/third_party/WebKit/Source/core/svg/SVGTransform.cpp
@@ -48,7 +48,7 @@ center_(center), matrix_(matrix) {} -SVGTransform::~SVGTransform() {} +SVGTransform::~SVGTransform() = default; SVGTransform* SVGTransform::Clone() const { return new SVGTransform(transform_type_, angle_, center_, matrix_);
diff --git a/third_party/WebKit/Source/core/svg/SVGTransformList.cpp b/third_party/WebKit/Source/core/svg/SVGTransformList.cpp index 9eaa07e..75b45a0 100644 --- a/third_party/WebKit/Source/core/svg/SVGTransformList.cpp +++ b/third_party/WebKit/Source/core/svg/SVGTransformList.cpp
@@ -36,9 +36,9 @@ namespace blink { -SVGTransformList::SVGTransformList() {} +SVGTransformList::SVGTransformList() = default; -SVGTransformList::~SVGTransformList() {} +SVGTransformList::~SVGTransformList() = default; SVGTransform* SVGTransformList::Consolidate() { AffineTransform matrix;
diff --git a/third_party/WebKit/Source/core/svg/SVGTransformListTearOff.cpp b/third_party/WebKit/Source/core/svg/SVGTransformListTearOff.cpp index 7d28b20..eeced65e 100644 --- a/third_party/WebKit/Source/core/svg/SVGTransformListTearOff.cpp +++ b/third_party/WebKit/Source/core/svg/SVGTransformListTearOff.cpp
@@ -45,7 +45,7 @@ property_is_anim_val, attribute_name) {} -SVGTransformListTearOff::~SVGTransformListTearOff() {} +SVGTransformListTearOff::~SVGTransformListTearOff() = default; SVGTransformTearOff* SVGTransformListTearOff::createSVGTransformFromMatrix( SVGMatrixTearOff* matrix) const {
diff --git a/third_party/WebKit/Source/core/svg/SVGTransformTearOff.cpp b/third_party/WebKit/Source/core/svg/SVGTransformTearOff.cpp index 6b7aadc..58d0806c 100644 --- a/third_party/WebKit/Source/core/svg/SVGTransformTearOff.cpp +++ b/third_party/WebKit/Source/core/svg/SVGTransformTearOff.cpp
@@ -45,7 +45,7 @@ property_is_anim_val, attribute_name) {} -SVGTransformTearOff::~SVGTransformTearOff() {} +SVGTransformTearOff::~SVGTransformTearOff() = default; void SVGTransformTearOff::Trace(blink::Visitor* visitor) { visitor->Trace(matrix_tearoff_);
diff --git a/third_party/WebKit/Source/core/svg/SVGURIReference.h b/third_party/WebKit/Source/core/svg/SVGURIReference.h index 6b0e0e2b..5cce3a98 100644 --- a/third_party/WebKit/Source/core/svg/SVGURIReference.h +++ b/third_party/WebKit/Source/core/svg/SVGURIReference.h
@@ -35,7 +35,7 @@ class CORE_EXPORT SVGURIReference : public GarbageCollectedMixin { public: - virtual ~SVGURIReference() {} + virtual ~SVGURIReference() = default; bool IsKnownAttribute(const QualifiedName&);
diff --git a/third_party/WebKit/Source/core/svg/SVGUnitTypes.h b/third_party/WebKit/Source/core/svg/SVGUnitTypes.h index 508edc9..dded1514 100644 --- a/third_party/WebKit/Source/core/svg/SVGUnitTypes.h +++ b/third_party/WebKit/Source/core/svg/SVGUnitTypes.h
@@ -37,7 +37,7 @@ }; private: - SVGUnitTypes(); // No instantiation. + SVGUnitTypes() = delete; // No instantiation. }; template <>
diff --git a/third_party/WebKit/Source/core/svg/SVGUseElement.cpp b/third_party/WebKit/Source/core/svg/SVGUseElement.cpp index 0b4eff8..436fb3f 100644 --- a/third_party/WebKit/Source/core/svg/SVGUseElement.cpp +++ b/third_party/WebKit/Source/core/svg/SVGUseElement.cpp
@@ -86,7 +86,7 @@ return use; } -SVGUseElement::~SVGUseElement() {} +SVGUseElement::~SVGUseElement() = default; void SVGUseElement::Dispose() { ClearResource();
diff --git a/third_party/WebKit/Source/core/svg/SVGZoomAndPan.h b/third_party/WebKit/Source/core/svg/SVGZoomAndPan.h index a558a01..2c6ba5c 100644 --- a/third_party/WebKit/Source/core/svg/SVGZoomAndPan.h +++ b/third_party/WebKit/Source/core/svg/SVGZoomAndPan.h
@@ -44,7 +44,7 @@ kSvgZoomandpanMagnify = kSVGZoomAndPanMagnify }; - virtual ~SVGZoomAndPan() {} + virtual ~SVGZoomAndPan() = default; static bool IsKnownAttribute(const QualifiedName&);
diff --git a/third_party/WebKit/Source/core/svg/animation/SMILTime.h b/third_party/WebKit/Source/core/svg/animation/SMILTime.h index e68a062..79409be 100644 --- a/third_party/WebKit/Source/core/svg/animation/SMILTime.h +++ b/third_party/WebKit/Source/core/svg/animation/SMILTime.h
@@ -78,7 +78,7 @@ struct SMILInterval { DISALLOW_NEW(); - SMILInterval() {} + SMILInterval() = default; SMILInterval(const SMILTime& begin, const SMILTime& end) : begin(begin), end(end) {}
diff --git a/third_party/WebKit/Source/core/svg/animation/SVGSMILElement.cpp b/third_party/WebKit/Source/core/svg/animation/SVGSMILElement.cpp index 9c9293d..4c736ae 100644 --- a/third_party/WebKit/Source/core/svg/animation/SVGSMILElement.cpp +++ b/third_party/WebKit/Source/core/svg/animation/SVGSMILElement.cpp
@@ -50,7 +50,7 @@ return new RepeatEvent(type, false, false, repeat); } - ~RepeatEvent() override {} + ~RepeatEvent() override = default; int Repeat() const { return repeat_; } @@ -229,7 +229,7 @@ ResolveFirstInterval(); } -SVGSMILElement::~SVGSMILElement() {} +SVGSMILElement::~SVGSMILElement() = default; void SVGSMILElement::ClearResourceAndEventBaseReferences() { SVGURIReference::UnobserveTarget(target_id_observer_);
diff --git a/third_party/WebKit/Source/core/svg/graphics/SVGImage.cpp b/third_party/WebKit/Source/core/svg/graphics/SVGImage.cpp index e78b1bb..97bce0b 100644 --- a/third_party/WebKit/Source/core/svg/graphics/SVGImage.cpp +++ b/third_party/WebKit/Source/core/svg/graphics/SVGImage.cpp
@@ -218,7 +218,7 @@ if (!layout_object) return FloatSize(); - LayoutReplaced::IntrinsicSizingInfo intrinsic_sizing_info; + IntrinsicSizingInfo intrinsic_sizing_info; layout_object->ComputeIntrinsicSizingInfo(intrinsic_sizing_info); // https://www.w3.org/TR/css3-images/#default-sizing
diff --git a/third_party/WebKit/Source/core/svg/graphics/filters/SVGFEImage.h b/third_party/WebKit/Source/core/svg/graphics/filters/SVGFEImage.h index 907666a..e43b707 100644 --- a/third_party/WebKit/Source/core/svg/graphics/filters/SVGFEImage.h +++ b/third_party/WebKit/Source/core/svg/graphics/filters/SVGFEImage.h
@@ -52,7 +52,7 @@ virtual void Trace(blink::Visitor*); private: - ~FEImage() override {} + ~FEImage() override = default; FEImage(Filter*, scoped_refptr<Image>, SVGPreserveAspectRatio*); FEImage(Filter*, TreeScope&, const String&, SVGPreserveAspectRatio*); LayoutObject* ReferencedLayoutObject() const;
diff --git a/third_party/WebKit/Source/core/svg/graphics/filters/SVGFilterBuilder.cpp b/third_party/WebKit/Source/core/svg/graphics/filters/SVGFilterBuilder.cpp index 6758952..c2aacf43 100644 --- a/third_party/WebKit/Source/core/svg/graphics/filters/SVGFilterBuilder.cpp +++ b/third_party/WebKit/Source/core/svg/graphics/filters/SVGFilterBuilder.cpp
@@ -61,7 +61,7 @@ } // namespace -SVGFilterGraphNodeMap::SVGFilterGraphNodeMap() {} +SVGFilterGraphNodeMap::SVGFilterGraphNodeMap() = default; void SVGFilterGraphNodeMap::AddBuiltinEffect(FilterEffect* effect) { effect_references_.insert(effect, FilterEffectSet());
diff --git a/third_party/WebKit/Source/core/svg/properties/SVGAnimatedProperty.cpp b/third_party/WebKit/Source/core/svg/properties/SVGAnimatedProperty.cpp index 2d33e3b..cf01225 100644 --- a/third_party/WebKit/Source/core/svg/properties/SVGAnimatedProperty.cpp +++ b/third_party/WebKit/Source/core/svg/properties/SVGAnimatedProperty.cpp
@@ -52,7 +52,7 @@ DCHECK_EQ(this->CssPropertyId(), css_property_id); } -SVGAnimatedPropertyBase::~SVGAnimatedPropertyBase() {} +SVGAnimatedPropertyBase::~SVGAnimatedPropertyBase() = default; void SVGAnimatedPropertyBase::AnimationEnded() { SynchronizeAttribute();
diff --git a/third_party/WebKit/Source/core/svg/properties/SVGListPropertyHelper.h b/third_party/WebKit/Source/core/svg/properties/SVGListPropertyHelper.h index b8a4059..e5ac5439 100644 --- a/third_party/WebKit/Source/core/svg/properties/SVGListPropertyHelper.h +++ b/third_party/WebKit/Source/core/svg/properties/SVGListPropertyHelper.h
@@ -48,9 +48,9 @@ public: typedef ItemProperty ItemPropertyType; - SVGListPropertyHelper() {} + SVGListPropertyHelper() = default; - ~SVGListPropertyHelper() {} + ~SVGListPropertyHelper() = default; // used from Blink C++ code:
diff --git a/third_party/WebKit/Source/core/svg/properties/SVGProperty.h b/third_party/WebKit/Source/core/svg/properties/SVGProperty.h index 1e51c324..d13aa94 100644 --- a/third_party/WebKit/Source/core/svg/properties/SVGProperty.h +++ b/third_party/WebKit/Source/core/svg/properties/SVGProperty.h
@@ -46,7 +46,7 @@ // Properties do not have a primitive type by default typedef void PrimitiveType; - virtual ~SVGPropertyBase() {} + virtual ~SVGPropertyBase() = default; // FIXME: remove this in WebAnimations transition. // This is used from SVGAnimatedNewPropertyAnimator for its animate-by-string
diff --git a/third_party/WebKit/Source/core/svg/properties/SVGPropertyTearOff.h b/third_party/WebKit/Source/core/svg/properties/SVGPropertyTearOff.h index d42a1b9d..9a9548f 100644 --- a/third_party/WebKit/Source/core/svg/properties/SVGPropertyTearOff.h +++ b/third_party/WebKit/Source/core/svg/properties/SVGPropertyTearOff.h
@@ -45,7 +45,7 @@ class SVGPropertyTearOffBase : public ScriptWrappable { public: - virtual ~SVGPropertyTearOffBase() {} + virtual ~SVGPropertyTearOffBase() = default; PropertyIsAnimValType PropertyIsAnimVal() const { return property_is_anim_val_;
diff --git a/third_party/WebKit/Source/core/testing/DeathAwareScriptWrappable.h b/third_party/WebKit/Source/core/testing/DeathAwareScriptWrappable.h index f6fc3028..0c08b79 100644 --- a/third_party/WebKit/Source/core/testing/DeathAwareScriptWrappable.h +++ b/third_party/WebKit/Source/core/testing/DeathAwareScriptWrappable.h
@@ -69,7 +69,7 @@ } private: - DeathAwareScriptWrappable() {} + DeathAwareScriptWrappable() = default; Wrapper wrapped_dependency_; HeapVector<Wrapper> wrapped_vector_dependency_;
diff --git a/third_party/WebKit/Source/core/testing/DictionaryTest.cpp b/third_party/WebKit/Source/core/testing/DictionaryTest.cpp index 30d6bd22..5394058 100644 --- a/third_party/WebKit/Source/core/testing/DictionaryTest.cpp +++ b/third_party/WebKit/Source/core/testing/DictionaryTest.cpp
@@ -15,7 +15,7 @@ DictionaryTest::DictionaryTest() : required_boolean_member_(false) {} -DictionaryTest::~DictionaryTest() {} +DictionaryTest::~DictionaryTest() = default; void DictionaryTest::set(const InternalDictionary& testing_dictionary) { Reset();
diff --git a/third_party/WebKit/Source/core/testing/DummyModulator.cpp b/third_party/WebKit/Source/core/testing/DummyModulator.cpp index e7c3c1c..6732368 100644 --- a/third_party/WebKit/Source/core/testing/DummyModulator.cpp +++ b/third_party/WebKit/Source/core/testing/DummyModulator.cpp
@@ -13,7 +13,7 @@ class EmptyScriptModuleResolver final : public ScriptModuleResolver { public: - EmptyScriptModuleResolver() {} + EmptyScriptModuleResolver() = default; // We ignore {Unr,R}egisterModuleScript() calls caused by // ModuleScript::CreateForTest(). @@ -37,7 +37,7 @@ DummyModulator::DummyModulator() : resolver_(new EmptyScriptModuleResolver()) {} -DummyModulator::~DummyModulator() {} +DummyModulator::~DummyModulator() = default; void DummyModulator::Trace(blink::Visitor* visitor) { visitor->Trace(resolver_);
diff --git a/third_party/WebKit/Source/core/testing/GarbageCollectedScriptWrappable.cpp b/third_party/WebKit/Source/core/testing/GarbageCollectedScriptWrappable.cpp index 3badfae..348f197 100644 --- a/third_party/WebKit/Source/core/testing/GarbageCollectedScriptWrappable.cpp +++ b/third_party/WebKit/Source/core/testing/GarbageCollectedScriptWrappable.cpp
@@ -10,6 +10,6 @@ const String& string) : string_(string) {} -GarbageCollectedScriptWrappable::~GarbageCollectedScriptWrappable() {} +GarbageCollectedScriptWrappable::~GarbageCollectedScriptWrappable() = default; } // namespace blink
diff --git a/third_party/WebKit/Source/core/testing/InternalSettings.cpp b/third_party/WebKit/Source/core/testing/InternalSettings.cpp index 5c23eaba..819e906 100644 --- a/third_party/WebKit/Source/core/testing/InternalSettings.cpp +++ b/third_party/WebKit/Source/core/testing/InternalSettings.cpp
@@ -120,7 +120,7 @@ return "InternalSettings"; } -InternalSettings::~InternalSettings() {} +InternalSettings::~InternalSettings() = default; InternalSettings::InternalSettings(Page& page) : InternalSettingsGenerated(&page),
diff --git a/third_party/WebKit/Source/core/testing/Internals.cpp b/third_party/WebKit/Source/core/testing/Internals.cpp index 7638480..8fc6678e 100644 --- a/third_party/WebKit/Source/core/testing/Internals.cpp +++ b/third_party/WebKit/Source/core/testing/Internals.cpp
@@ -735,7 +735,7 @@ ShadowRoot* Internals::createUserAgentShadowRoot(Element* host) { DCHECK(host); - return &host->EnsureUserAgentShadowRoot(); + return &host->EnsureLegacyUserAgentShadowRootV0(); } void Internals::setBrowserControlsState(float top_height, @@ -792,7 +792,8 @@ } switch (ToShadowRoot(root)->GetType()) { - case ShadowRootType::kUserAgent: + case ShadowRootType::kLegacyUserAgentV0: + case ShadowRootType::kUserAgentV1: return String("UserAgentShadowRoot"); case ShadowRootType::V0: return String("V0ShadowRoot");
diff --git a/third_party/WebKit/Source/core/testing/LayerRectList.cpp b/third_party/WebKit/Source/core/testing/LayerRectList.cpp index 49ae3b61..3fe4600 100644 --- a/third_party/WebKit/Source/core/testing/LayerRectList.cpp +++ b/third_party/WebKit/Source/core/testing/LayerRectList.cpp
@@ -36,7 +36,7 @@ namespace blink { -LayerRectList::LayerRectList() {} +LayerRectList::LayerRectList() = default; unsigned LayerRectList::length() const { return list_.size();
diff --git a/third_party/WebKit/Source/core/testing/NullExecutionContext.cpp b/third_party/WebKit/Source/core/testing/NullExecutionContext.cpp index d1f6e9d9..2b43363 100644 --- a/third_party/WebKit/Source/core/testing/NullExecutionContext.cpp +++ b/third_party/WebKit/Source/core/testing/NullExecutionContext.cpp
@@ -15,8 +15,8 @@ class NullEventQueue final : public EventQueue { public: - NullEventQueue() {} - ~NullEventQueue() override {} + NullEventQueue() = default; + ~NullEventQueue() override = default; bool EnqueueEvent(const base::Location&, Event*) override { return true; } bool CancelEvent(Event*) override { return true; } void Close() override {}
diff --git a/third_party/WebKit/Source/core/testing/PageTestBase.cpp b/third_party/WebKit/Source/core/testing/PageTestBase.cpp index e0d45f1c..a972b1b 100644 --- a/third_party/WebKit/Source/core/testing/PageTestBase.cpp +++ b/third_party/WebKit/Source/core/testing/PageTestBase.cpp
@@ -15,9 +15,9 @@ namespace blink { -PageTestBase::PageTestBase() {} +PageTestBase::PageTestBase() = default; -PageTestBase::~PageTestBase() {} +PageTestBase::~PageTestBase() = default; void PageTestBase::SetUp() { DCHECK(!dummy_page_holder_) << "Page should be set up only once";
diff --git a/third_party/WebKit/Source/core/testing/RecordTest.cpp b/third_party/WebKit/Source/core/testing/RecordTest.cpp index 93e45d2..a4bea6e 100644 --- a/third_party/WebKit/Source/core/testing/RecordTest.cpp +++ b/third_party/WebKit/Source/core/testing/RecordTest.cpp
@@ -6,9 +6,9 @@ namespace blink { -RecordTest::RecordTest() {} +RecordTest::RecordTest() = default; -RecordTest::~RecordTest() {} +RecordTest::~RecordTest() = default; void RecordTest::setStringLongRecord( const Vector<std::pair<String, int32_t>>& arg) {
diff --git a/third_party/WebKit/Source/core/testing/SequenceTest.cpp b/third_party/WebKit/Source/core/testing/SequenceTest.cpp index 7bba578..eac76157 100644 --- a/third_party/WebKit/Source/core/testing/SequenceTest.cpp +++ b/third_party/WebKit/Source/core/testing/SequenceTest.cpp
@@ -6,9 +6,9 @@ namespace blink { -SequenceTest::SequenceTest() {} +SequenceTest::SequenceTest() = default; -SequenceTest::~SequenceTest() {} +SequenceTest::~SequenceTest() = default; Vector<Vector<String>> SequenceTest::identityByteStringSequenceSequence( const Vector<Vector<String>>& arg) const {
diff --git a/third_party/WebKit/Source/core/testing/UnionTypesTest.h b/third_party/WebKit/Source/core/testing/UnionTypesTest.h index 1f053532..15482dd 100644 --- a/third_party/WebKit/Source/core/testing/UnionTypesTest.h +++ b/third_party/WebKit/Source/core/testing/UnionTypesTest.h
@@ -18,7 +18,7 @@ public: static UnionTypesTest* Create() { return new UnionTypesTest(); } - virtual ~UnionTypesTest() {} + virtual ~UnionTypesTest() = default; void doubleOrStringOrStringSequenceAttribute(DoubleOrStringOrStringSequence&); void setDoubleOrStringOrStringSequenceAttribute(
diff --git a/third_party/WebKit/Source/core/testing/WorkerInternals.cpp b/third_party/WebKit/Source/core/testing/WorkerInternals.cpp index 21866863..dd47e32 100644 --- a/third_party/WebKit/Source/core/testing/WorkerInternals.cpp +++ b/third_party/WebKit/Source/core/testing/WorkerInternals.cpp
@@ -13,9 +13,9 @@ namespace blink { -WorkerInternals::~WorkerInternals() {} +WorkerInternals::~WorkerInternals() = default; -WorkerInternals::WorkerInternals() {} +WorkerInternals::WorkerInternals() = default; OriginTrialsTest* WorkerInternals::originTrialsTest() const { return OriginTrialsTest::Create();
diff --git a/third_party/WebKit/Source/core/testing/data/input_field_password.html b/third_party/WebKit/Source/core/testing/data/input_field_password.html index 98ed14c..0db87f4b9 100644 --- a/third_party/WebKit/Source/core/testing/data/input_field_password.html +++ b/third_party/WebKit/Source/core/testing/data/input_field_password.html
@@ -1 +1 @@ -<input type="password" /> +<input id="psw" type="password" />
diff --git a/third_party/WebKit/Source/core/testing/sim/SimDisplayItemList.cpp b/third_party/WebKit/Source/core/testing/sim/SimDisplayItemList.cpp index fe0a037..ad5b3789 100644 --- a/third_party/WebKit/Source/core/testing/sim/SimDisplayItemList.cpp +++ b/third_party/WebKit/Source/core/testing/sim/SimDisplayItemList.cpp
@@ -11,7 +11,7 @@ namespace blink { -SimDisplayItemList::SimDisplayItemList() {} +SimDisplayItemList::SimDisplayItemList() = default; void SimDisplayItemList::AppendDrawingItem(const WebRect& visual_rect, sk_sp<const PaintRecord> record) {
diff --git a/third_party/WebKit/Source/core/testing/sim/SimPage.cpp b/third_party/WebKit/Source/core/testing/sim/SimPage.cpp index 5770b44..638ee55 100644 --- a/third_party/WebKit/Source/core/testing/sim/SimPage.cpp +++ b/third_party/WebKit/Source/core/testing/sim/SimPage.cpp
@@ -11,7 +11,7 @@ SimPage::SimPage() : page_(nullptr) {} -SimPage::~SimPage() {} +SimPage::~SimPage() = default; void SimPage::SetPage(Page* page) { page_ = page;
diff --git a/third_party/WebKit/Source/core/timing/Performance.cpp b/third_party/WebKit/Source/core/timing/Performance.cpp index 88323a8..4f4cccde 100644 --- a/third_party/WebKit/Source/core/timing/Performance.cpp +++ b/third_party/WebKit/Source/core/timing/Performance.cpp
@@ -112,8 +112,7 @@ window->document()->GetTaskRunner(TaskType::kPerformanceTimeline)), DOMWindowClient(window) {} -Performance::~Performance() { -} +Performance::~Performance() = default; ExecutionContext* Performance::GetExecutionContext() const { if (!GetFrame())
diff --git a/third_party/WebKit/Source/core/timing/PerformanceBase.cpp b/third_party/WebKit/Source/core/timing/PerformanceBase.cpp index 4539cc5..89acf21 100644 --- a/third_party/WebKit/Source/core/timing/PerformanceBase.cpp +++ b/third_party/WebKit/Source/core/timing/PerformanceBase.cpp
@@ -100,7 +100,7 @@ this, &PerformanceBase::DeliverObservationsTimerFired) {} -PerformanceBase::~PerformanceBase() {} +PerformanceBase::~PerformanceBase() = default; const AtomicString& PerformanceBase::InterfaceName() const { return EventTargetNames::Performance;
diff --git a/third_party/WebKit/Source/core/timing/PerformanceBaseTest.cpp b/third_party/WebKit/Source/core/timing/PerformanceBaseTest.cpp index 8cfcb8e6..3ca61b6c 100644 --- a/third_party/WebKit/Source/core/timing/PerformanceBaseTest.cpp +++ b/third_party/WebKit/Source/core/timing/PerformanceBaseTest.cpp
@@ -25,7 +25,7 @@ : PerformanceBase(0, ExecutionContext::From(script_state) ->GetTaskRunner(TaskType::kPerformanceTimeline)) {} - ~TestPerformanceBase() {} + ~TestPerformanceBase() = default; ExecutionContext* GetExecutionContext() const override { return nullptr; }
diff --git a/third_party/WebKit/Source/core/timing/PerformanceEntry.cpp b/third_party/WebKit/Source/core/timing/PerformanceEntry.cpp index 2797b47..d7ab6439 100644 --- a/third_party/WebKit/Source/core/timing/PerformanceEntry.cpp +++ b/third_party/WebKit/Source/core/timing/PerformanceEntry.cpp
@@ -51,7 +51,7 @@ entry_type_enum_(ToEntryTypeEnum(entry_type)), index_(index_seq.GetNext()) {} -PerformanceEntry::~PerformanceEntry() {} +PerformanceEntry::~PerformanceEntry() = default; String PerformanceEntry::name() const { return name_;
diff --git a/third_party/WebKit/Source/core/timing/PerformanceLongTaskTiming.cpp b/third_party/WebKit/Source/core/timing/PerformanceLongTaskTiming.cpp index 19d659e..d3296b1 100644 --- a/third_party/WebKit/Source/core/timing/PerformanceLongTaskTiming.cpp +++ b/third_party/WebKit/Source/core/timing/PerformanceLongTaskTiming.cpp
@@ -53,7 +53,7 @@ } } -PerformanceLongTaskTiming::~PerformanceLongTaskTiming() {} +PerformanceLongTaskTiming::~PerformanceLongTaskTiming() = default; TaskAttributionVector PerformanceLongTaskTiming::attribution() const { return attribution_;
diff --git a/third_party/WebKit/Source/core/timing/PerformanceMark.h b/third_party/WebKit/Source/core/timing/PerformanceMark.h index 1271167..52ff9aa 100644 --- a/third_party/WebKit/Source/core/timing/PerformanceMark.h +++ b/third_party/WebKit/Source/core/timing/PerformanceMark.h
@@ -48,7 +48,7 @@ PerformanceMark(const String& name, double start_time) : PerformanceEntry(name, "mark", start_time, start_time) {} - ~PerformanceMark() override {} + ~PerformanceMark() override = default; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/timing/PerformanceMeasure.h b/third_party/WebKit/Source/core/timing/PerformanceMeasure.h index 0dc5b08..59c9873 100644 --- a/third_party/WebKit/Source/core/timing/PerformanceMeasure.h +++ b/third_party/WebKit/Source/core/timing/PerformanceMeasure.h
@@ -50,7 +50,7 @@ private: PerformanceMeasure(const String& name, double start_time, double end_time) : PerformanceEntry(name, "measure", start_time, end_time) {} - ~PerformanceMeasure() override {} + ~PerformanceMeasure() override = default; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/timing/PerformanceNavigationTiming.cpp b/third_party/WebKit/Source/core/timing/PerformanceNavigationTiming.cpp index f53f92ad..14ef9f4 100644 --- a/third_party/WebKit/Source/core/timing/PerformanceNavigationTiming.cpp +++ b/third_party/WebKit/Source/core/timing/PerformanceNavigationTiming.cpp
@@ -33,7 +33,7 @@ DCHECK(info); } -PerformanceNavigationTiming::~PerformanceNavigationTiming() {} +PerformanceNavigationTiming::~PerformanceNavigationTiming() = default; void PerformanceNavigationTiming::Trace(blink::Visitor* visitor) { ContextClient::Trace(visitor);
diff --git a/third_party/WebKit/Source/core/timing/PerformanceObserverEntryList.cpp b/third_party/WebKit/Source/core/timing/PerformanceObserverEntryList.cpp index bc2df19..8b61a11 100644 --- a/third_party/WebKit/Source/core/timing/PerformanceObserverEntryList.cpp +++ b/third_party/WebKit/Source/core/timing/PerformanceObserverEntryList.cpp
@@ -14,7 +14,7 @@ const PerformanceEntryVector& entry_vector) : performance_entries_(entry_vector) {} -PerformanceObserverEntryList::~PerformanceObserverEntryList() {} +PerformanceObserverEntryList::~PerformanceObserverEntryList() = default; PerformanceEntryVector PerformanceObserverEntryList::getEntries() const { PerformanceEntryVector entries;
diff --git a/third_party/WebKit/Source/core/timing/PerformanceObserverTest.cpp b/third_party/WebKit/Source/core/timing/PerformanceObserverTest.cpp index a7c4d9d..c3886a0 100644 --- a/third_party/WebKit/Source/core/timing/PerformanceObserverTest.cpp +++ b/third_party/WebKit/Source/core/timing/PerformanceObserverTest.cpp
@@ -22,7 +22,7 @@ : PerformanceBase(0, ExecutionContext::From(script_state) ->GetTaskRunner(TaskType::kPerformanceTimeline)) {} - ~MockPerformanceBase() {} + ~MockPerformanceBase() = default; ExecutionContext* GetExecutionContext() const override { return nullptr; } };
diff --git a/third_party/WebKit/Source/core/timing/PerformancePaintTiming.cpp b/third_party/WebKit/Source/core/timing/PerformancePaintTiming.cpp index a18ae0c..3f17bfcc 100644 --- a/third_party/WebKit/Source/core/timing/PerformancePaintTiming.cpp +++ b/third_party/WebKit/Source/core/timing/PerformancePaintTiming.cpp
@@ -15,7 +15,7 @@ start_time, start_time) {} -PerformancePaintTiming::~PerformancePaintTiming() {} +PerformancePaintTiming::~PerformancePaintTiming() = default; String PerformancePaintTiming::FromPaintTypeToString(PaintType type) { switch (type) {
diff --git a/third_party/WebKit/Source/core/timing/PerformanceResourceTiming.cpp b/third_party/WebKit/Source/core/timing/PerformanceResourceTiming.cpp index 6c65e24..0e22f34 100644 --- a/third_party/WebKit/Source/core/timing/PerformanceResourceTiming.cpp +++ b/third_party/WebKit/Source/core/timing/PerformanceResourceTiming.cpp
@@ -85,7 +85,7 @@ time_origin_(time_origin), serverTiming_(serverTiming) {} -PerformanceResourceTiming::~PerformanceResourceTiming() {} +PerformanceResourceTiming::~PerformanceResourceTiming() = default; ResourceLoadTiming* PerformanceResourceTiming::GetResourceLoadTiming() const { return timing_.get();
diff --git a/third_party/WebKit/Source/core/timing/PerformanceServerTiming.cpp b/third_party/WebKit/Source/core/timing/PerformanceServerTiming.cpp index 942b359..ed8d449 100644 --- a/third_party/WebKit/Source/core/timing/PerformanceServerTiming.cpp +++ b/third_party/WebKit/Source/core/timing/PerformanceServerTiming.cpp
@@ -20,7 +20,7 @@ description_(description), shouldAllowTimingDetails_(shouldAllowTimingDetails) {} -PerformanceServerTiming::~PerformanceServerTiming() {} +PerformanceServerTiming::~PerformanceServerTiming() = default; String PerformanceServerTiming::name() const { return name_;
diff --git a/third_party/WebKit/Source/core/timing/TaskAttributionTiming.cpp b/third_party/WebKit/Source/core/timing/TaskAttributionTiming.cpp index db97f6b..7e795db 100644 --- a/third_party/WebKit/Source/core/timing/TaskAttributionTiming.cpp +++ b/third_party/WebKit/Source/core/timing/TaskAttributionTiming.cpp
@@ -24,7 +24,7 @@ container_name_(container_name), script_url_(script_url) {} -TaskAttributionTiming::~TaskAttributionTiming() {} +TaskAttributionTiming::~TaskAttributionTiming() = default; String TaskAttributionTiming::scriptURL() const { return script_url_;
diff --git a/third_party/WebKit/Source/core/typed_arrays/ArrayBufferViewHelpers.h b/third_party/WebKit/Source/core/typed_arrays/ArrayBufferViewHelpers.h index 00053a5..61ebb55 100644 --- a/third_party/WebKit/Source/core/typed_arrays/ArrayBufferViewHelpers.h +++ b/third_party/WebKit/Source/core/typed_arrays/ArrayBufferViewHelpers.h
@@ -32,7 +32,7 @@ public: using TypedArrayType = T; - NotShared() {} + NotShared() = default; explicit NotShared(T* typedArray) : typed_array_(typedArray) { DCHECK(!(typedArray && typedArray->View()->IsShared())); @@ -88,7 +88,7 @@ public: using TypedArrayType = T; - MaybeShared() {} + MaybeShared() = default; explicit MaybeShared(T* typedArray) : typed_array_(typedArray) {} MaybeShared(const MaybeShared& other) = default;
diff --git a/third_party/WebKit/Source/core/typed_arrays/DOMArrayBufferBase.h b/third_party/WebKit/Source/core/typed_arrays/DOMArrayBufferBase.h index 41dd2b9..91e8e47c02 100644 --- a/third_party/WebKit/Source/core/typed_arrays/DOMArrayBufferBase.h +++ b/third_party/WebKit/Source/core/typed_arrays/DOMArrayBufferBase.h
@@ -14,7 +14,7 @@ class CORE_EXPORT DOMArrayBufferBase : public ScriptWrappable { public: - virtual ~DOMArrayBufferBase() {} + virtual ~DOMArrayBufferBase() = default; const WTF::ArrayBuffer* Buffer() const { return buffer_.get(); } WTF::ArrayBuffer* Buffer() { return buffer_.get(); }
diff --git a/third_party/WebKit/Source/core/typed_arrays/DOMArrayBufferView.h b/third_party/WebKit/Source/core/typed_arrays/DOMArrayBufferView.h index fa83c4ca..661b4909 100644 --- a/third_party/WebKit/Source/core/typed_arrays/DOMArrayBufferView.h +++ b/third_party/WebKit/Source/core/typed_arrays/DOMArrayBufferView.h
@@ -30,7 +30,7 @@ static const ViewType kTypeFloat64 = WTF::ArrayBufferView::kTypeFloat64; static const ViewType kTypeDataView = WTF::ArrayBufferView::kTypeDataView; - virtual ~DOMArrayBufferView() {} + virtual ~DOMArrayBufferView() = default; DOMArrayBuffer* buffer() const { DCHECK(!IsShared());
diff --git a/third_party/WebKit/Source/core/typed_arrays/DOMArrayPiece.h b/third_party/WebKit/Source/core/typed_arrays/DOMArrayPiece.h index 153b9ecb..66e788a 100644 --- a/third_party/WebKit/Source/core/typed_arrays/DOMArrayPiece.h +++ b/third_party/WebKit/Source/core/typed_arrays/DOMArrayPiece.h
@@ -35,7 +35,7 @@ kAllowNullPointToNullWithZeroSize, }; - DOMArrayPiece() {} + DOMArrayPiece() = default; DOMArrayPiece(DOMArrayBuffer* buffer) : ArrayPiece(buffer->Buffer()) {} DOMArrayPiece(DOMArrayBufferView* view) : ArrayPiece(view->View()) {} DOMArrayPiece(const ArrayBufferOrArrayBufferView&,
diff --git a/third_party/WebKit/Source/core/url/DOMURL.cpp b/third_party/WebKit/Source/core/url/DOMURL.cpp index 0f009651..6776f8f 100644 --- a/third_party/WebKit/Source/core/url/DOMURL.cpp +++ b/third_party/WebKit/Source/core/url/DOMURL.cpp
@@ -50,7 +50,7 @@ exception_state.ThrowTypeError("Invalid URL"); } -DOMURL::~DOMURL() {} +DOMURL::~DOMURL() = default; void DOMURL::Trace(blink::Visitor* visitor) { visitor->Trace(search_params_);
diff --git a/third_party/WebKit/Source/core/url/DOMURLUtils.cpp b/third_party/WebKit/Source/core/url/DOMURLUtils.cpp index 491c5e6..eb77f2b 100644 --- a/third_party/WebKit/Source/core/url/DOMURLUtils.cpp +++ b/third_party/WebKit/Source/core/url/DOMURLUtils.cpp
@@ -31,7 +31,7 @@ namespace blink { -DOMURLUtils::~DOMURLUtils() {} +DOMURLUtils::~DOMURLUtils() = default; void DOMURLUtils::setHref(const String& value) { SetInput(value);
diff --git a/third_party/WebKit/Source/core/url/DOMURLUtilsReadOnly.h b/third_party/WebKit/Source/core/url/DOMURLUtilsReadOnly.h index cf003a9..08de543 100644 --- a/third_party/WebKit/Source/core/url/DOMURLUtilsReadOnly.h +++ b/third_party/WebKit/Source/core/url/DOMURLUtilsReadOnly.h
@@ -37,7 +37,7 @@ public: virtual KURL Url() const = 0; virtual String Input() const = 0; - virtual ~DOMURLUtilsReadOnly() {} + virtual ~DOMURLUtilsReadOnly() = default; String href();
diff --git a/third_party/WebKit/Source/core/url/URLSearchParams.cpp b/third_party/WebKit/Source/core/url/URLSearchParams.cpp index 0573f14..7b97b2f2 100644 --- a/third_party/WebKit/Source/core/url/URLSearchParams.cpp +++ b/third_party/WebKit/Source/core/url/URLSearchParams.cpp
@@ -102,7 +102,7 @@ return instance; } -URLSearchParams::~URLSearchParams() {} +URLSearchParams::~URLSearchParams() = default; void URLSearchParams::Trace(blink::Visitor* visitor) { visitor->Trace(url_object_);
diff --git a/third_party/WebKit/Source/core/workers/AbstractWorker.cpp b/third_party/WebKit/Source/core/workers/AbstractWorker.cpp index 6f7e04a1..1c1020091 100644 --- a/third_party/WebKit/Source/core/workers/AbstractWorker.cpp +++ b/third_party/WebKit/Source/core/workers/AbstractWorker.cpp
@@ -41,7 +41,7 @@ AbstractWorker::AbstractWorker(ExecutionContext* context) : ContextLifecycleObserver(context) {} -AbstractWorker::~AbstractWorker() {} +AbstractWorker::~AbstractWorker() = default; // static KURL AbstractWorker::ResolveURL(ExecutionContext* execution_context,
diff --git a/third_party/WebKit/Source/core/workers/DedicatedWorkerGlobalScope.cpp b/third_party/WebKit/Source/core/workers/DedicatedWorkerGlobalScope.cpp index 856cca4..8834a182 100644 --- a/third_party/WebKit/Source/core/workers/DedicatedWorkerGlobalScope.cpp +++ b/third_party/WebKit/Source/core/workers/DedicatedWorkerGlobalScope.cpp
@@ -51,7 +51,7 @@ double time_origin) : WorkerGlobalScope(std::move(creation_params), thread, time_origin) {} -DedicatedWorkerGlobalScope::~DedicatedWorkerGlobalScope() {} +DedicatedWorkerGlobalScope::~DedicatedWorkerGlobalScope() = default; const AtomicString& DedicatedWorkerGlobalScope::InterfaceName() const { return EventTargetNames::DedicatedWorkerGlobalScope;
diff --git a/third_party/WebKit/Source/core/workers/DedicatedWorkerObjectProxy.cpp b/third_party/WebKit/Source/core/workers/DedicatedWorkerObjectProxy.cpp index 602552b..33c0510 100644 --- a/third_party/WebKit/Source/core/workers/DedicatedWorkerObjectProxy.cpp +++ b/third_party/WebKit/Source/core/workers/DedicatedWorkerObjectProxy.cpp
@@ -59,7 +59,7 @@ messaging_proxy_weak_ptr, parent_frame_task_runners)); } -DedicatedWorkerObjectProxy::~DedicatedWorkerObjectProxy() {} +DedicatedWorkerObjectProxy::~DedicatedWorkerObjectProxy() = default; void DedicatedWorkerObjectProxy::PostMessageToWorkerObject( scoped_refptr<SerializedScriptValue> message,
diff --git a/third_party/WebKit/Source/core/workers/DedicatedWorkerTest.cpp b/third_party/WebKit/Source/core/workers/DedicatedWorkerTest.cpp index 3efcab7..fcd96ed 100644 --- a/third_party/WebKit/Source/core/workers/DedicatedWorkerTest.cpp +++ b/third_party/WebKit/Source/core/workers/DedicatedWorkerTest.cpp
@@ -171,7 +171,7 @@ class DedicatedWorkerTest : public PageTestBase { public: - DedicatedWorkerTest() {} + DedicatedWorkerTest() = default; void SetUp() override { PageTestBase::SetUp(IntSize());
diff --git a/third_party/WebKit/Source/core/workers/DedicatedWorkerThread.cpp b/third_party/WebKit/Source/core/workers/DedicatedWorkerThread.cpp index e2193eba..639d9c08 100644 --- a/third_party/WebKit/Source/core/workers/DedicatedWorkerThread.cpp +++ b/third_party/WebKit/Source/core/workers/DedicatedWorkerThread.cpp
@@ -55,7 +55,7 @@ WorkerBackingThread::Create("DedicatedWorker Thread")), worker_object_proxy_(worker_object_proxy) {} -DedicatedWorkerThread::~DedicatedWorkerThread() {} +DedicatedWorkerThread::~DedicatedWorkerThread() = default; void DedicatedWorkerThread::ClearWorkerBackingThread() { worker_backing_thread_ = nullptr;
diff --git a/third_party/WebKit/Source/core/workers/MainThreadWorkletGlobalScope.cpp b/third_party/WebKit/Source/core/workers/MainThreadWorkletGlobalScope.cpp index fb9e4d37..e69a0f98 100644 --- a/third_party/WebKit/Source/core/workers/MainThreadWorkletGlobalScope.cpp +++ b/third_party/WebKit/Source/core/workers/MainThreadWorkletGlobalScope.cpp
@@ -22,7 +22,7 @@ : WorkletGlobalScope(std::move(creation_params), isolate, reporting_proxy), ContextClient(frame) {} -MainThreadWorkletGlobalScope::~MainThreadWorkletGlobalScope() {} +MainThreadWorkletGlobalScope::~MainThreadWorkletGlobalScope() = default; WorkerThread* MainThreadWorkletGlobalScope::GetThread() const { NOTREACHED();
diff --git a/third_party/WebKit/Source/core/workers/SharedWorker.cpp b/third_party/WebKit/Source/core/workers/SharedWorker.cpp index e127f78..e15336d 100644 --- a/third_party/WebKit/Source/core/workers/SharedWorker.cpp +++ b/third_party/WebKit/Source/core/workers/SharedWorker.cpp
@@ -88,7 +88,7 @@ return worker; } -SharedWorker::~SharedWorker() {} +SharedWorker::~SharedWorker() = default; const AtomicString& SharedWorker::InterfaceName() const { return EventTargetNames::SharedWorker;
diff --git a/third_party/WebKit/Source/core/workers/SharedWorkerRepositoryClient.h b/third_party/WebKit/Source/core/workers/SharedWorkerRepositoryClient.h index 23988412..35b02a92 100644 --- a/third_party/WebKit/Source/core/workers/SharedWorkerRepositoryClient.h +++ b/third_party/WebKit/Source/core/workers/SharedWorkerRepositoryClient.h
@@ -47,8 +47,8 @@ DISALLOW_NEW(); public: - SharedWorkerRepositoryClient() {} - virtual ~SharedWorkerRepositoryClient() {} + SharedWorkerRepositoryClient() = default; + virtual ~SharedWorkerRepositoryClient() = default; virtual void Connect(SharedWorker*, MessagePortChannel,
diff --git a/third_party/WebKit/Source/core/workers/SharedWorkerThread.cpp b/third_party/WebKit/Source/core/workers/SharedWorkerThread.cpp index 57625ce..f1962ee 100644 --- a/third_party/WebKit/Source/core/workers/SharedWorkerThread.cpp +++ b/third_party/WebKit/Source/core/workers/SharedWorkerThread.cpp
@@ -47,7 +47,7 @@ WorkerBackingThread::Create("SharedWorker Thread")), name_(name.IsolatedCopy()) {} -SharedWorkerThread::~SharedWorkerThread() {} +SharedWorkerThread::~SharedWorkerThread() = default; void SharedWorkerThread::ClearWorkerBackingThread() { worker_backing_thread_ = nullptr;
diff --git a/third_party/WebKit/Source/core/workers/ThreadedWorkletObjectProxy.cpp b/third_party/WebKit/Source/core/workers/ThreadedWorkletObjectProxy.cpp index 0f7bf65..177bbb51 100644 --- a/third_party/WebKit/Source/core/workers/ThreadedWorkletObjectProxy.cpp +++ b/third_party/WebKit/Source/core/workers/ThreadedWorkletObjectProxy.cpp
@@ -20,7 +20,7 @@ messaging_proxy_weak_ptr, parent_frame_task_runners)); } -ThreadedWorkletObjectProxy::~ThreadedWorkletObjectProxy() {} +ThreadedWorkletObjectProxy::~ThreadedWorkletObjectProxy() = default; void ThreadedWorkletObjectProxy::FetchAndInvokeScript( const KURL& module_url_record,
diff --git a/third_party/WebKit/Source/core/workers/ThreadedWorkletTest.cpp b/third_party/WebKit/Source/core/workers/ThreadedWorkletTest.cpp index 4eb520ee..3ebda32 100644 --- a/third_party/WebKit/Source/core/workers/ThreadedWorkletTest.cpp +++ b/third_party/WebKit/Source/core/workers/ThreadedWorkletTest.cpp
@@ -55,7 +55,7 @@ explicit ThreadedWorkletThreadForTest( WorkerReportingProxy& worker_reporting_proxy) : WorkerThread(nullptr, worker_reporting_proxy) {} - ~ThreadedWorkletThreadForTest() override {} + ~ThreadedWorkletThreadForTest() override = default; WorkerBackingThread& GetWorkerBackingThread() override { auto* worklet_thread_holder = @@ -166,7 +166,7 @@ this, GetParentFrameTaskRunners()); } - ~ThreadedWorkletMessagingProxyForTest() override {} + ~ThreadedWorkletMessagingProxyForTest() override = default; void Start() { Document* document = ToDocument(GetExecutionContext());
diff --git a/third_party/WebKit/Source/core/workers/WorkerBackingThread.cpp b/third_party/WebKit/Source/core/workers/WorkerBackingThread.cpp index b48c6db..82562c6 100644 --- a/third_party/WebKit/Source/core/workers/WorkerBackingThread.cpp +++ b/third_party/WebKit/Source/core/workers/WorkerBackingThread.cpp
@@ -68,7 +68,7 @@ is_owning_thread_(false), should_call_gc_on_shutdown_(should_call_gc_on_shutdown) {} -WorkerBackingThread::~WorkerBackingThread() {} +WorkerBackingThread::~WorkerBackingThread() = default; void WorkerBackingThread::InitializeOnBackingThread( const WorkerBackingThreadStartupData& startup_data) {
diff --git a/third_party/WebKit/Source/core/workers/WorkerClients.h b/third_party/WebKit/Source/core/workers/WorkerClients.h index 82686978..84cf445 100644 --- a/third_party/WebKit/Source/core/workers/WorkerClients.h +++ b/third_party/WebKit/Source/core/workers/WorkerClients.h
@@ -54,7 +54,7 @@ } private: - WorkerClients() {} + WorkerClients() = default; DISALLOW_COPY_AND_ASSIGN(WorkerClients); };
diff --git a/third_party/WebKit/Source/core/workers/WorkerContentSettingsClient.cpp b/third_party/WebKit/Source/core/workers/WorkerContentSettingsClient.cpp index bc1bdcc1..54d428a 100644 --- a/third_party/WebKit/Source/core/workers/WorkerContentSettingsClient.cpp +++ b/third_party/WebKit/Source/core/workers/WorkerContentSettingsClient.cpp
@@ -43,7 +43,7 @@ return new WorkerContentSettingsClient(std::move(client)); } -WorkerContentSettingsClient::~WorkerContentSettingsClient() {} +WorkerContentSettingsClient::~WorkerContentSettingsClient() = default; bool WorkerContentSettingsClient::RequestFileSystemAccessSync() { if (!client_)
diff --git a/third_party/WebKit/Source/core/workers/WorkerInspectorProxy.cpp b/third_party/WebKit/Source/core/workers/WorkerInspectorProxy.cpp index 67144dbf..d02bd173 100644 --- a/third_party/WebKit/Source/core/workers/WorkerInspectorProxy.cpp +++ b/third_party/WebKit/Source/core/workers/WorkerInspectorProxy.cpp
@@ -42,7 +42,7 @@ return new WorkerInspectorProxy(); } -WorkerInspectorProxy::~WorkerInspectorProxy() {} +WorkerInspectorProxy::~WorkerInspectorProxy() = default; const String& WorkerInspectorProxy::InspectorId() { if (inspector_id_.IsEmpty())
diff --git a/third_party/WebKit/Source/core/workers/WorkerInspectorProxy.h b/third_party/WebKit/Source/core/workers/WorkerInspectorProxy.h index 2d0c0fbf..697d386d 100644 --- a/third_party/WebKit/Source/core/workers/WorkerInspectorProxy.h +++ b/third_party/WebKit/Source/core/workers/WorkerInspectorProxy.h
@@ -33,7 +33,7 @@ class CORE_EXPORT PageInspector { public: - virtual ~PageInspector() {} + virtual ~PageInspector() = default; virtual void DispatchMessageFromWorker(WorkerInspectorProxy*, int session_id, const String& message) = 0;
diff --git a/third_party/WebKit/Source/core/workers/WorkerNavigator.cpp b/third_party/WebKit/Source/core/workers/WorkerNavigator.cpp index a43c515..81b0f83 100644 --- a/third_party/WebKit/Source/core/workers/WorkerNavigator.cpp +++ b/third_party/WebKit/Source/core/workers/WorkerNavigator.cpp
@@ -31,7 +31,7 @@ WorkerNavigator::WorkerNavigator(const String& user_agent) : user_agent_(user_agent) {} -WorkerNavigator::~WorkerNavigator() {} +WorkerNavigator::~WorkerNavigator() = default; String WorkerNavigator::userAgent() const { return user_agent_;
diff --git a/third_party/WebKit/Source/core/workers/WorkerReportingProxy.h b/third_party/WebKit/Source/core/workers/WorkerReportingProxy.h index 7466f6d..bee1bf1a 100644 --- a/third_party/WebKit/Source/core/workers/WorkerReportingProxy.h +++ b/third_party/WebKit/Source/core/workers/WorkerReportingProxy.h
@@ -50,7 +50,7 @@ // script only]. class CORE_EXPORT WorkerReportingProxy { public: - virtual ~WorkerReportingProxy() {} + virtual ~WorkerReportingProxy() = default; virtual void CountFeature(WebFeature) {} virtual void CountDeprecation(WebFeature) {}
diff --git a/third_party/WebKit/Source/core/workers/WorkerThreadLifecycleObserver.cpp b/third_party/WebKit/Source/core/workers/WorkerThreadLifecycleObserver.cpp index dbf7869..c838cca 100644 --- a/third_party/WebKit/Source/core/workers/WorkerThreadLifecycleObserver.cpp +++ b/third_party/WebKit/Source/core/workers/WorkerThreadLifecycleObserver.cpp
@@ -19,6 +19,6 @@ DCHECK(IsMainThread()); } -WorkerThreadLifecycleObserver::~WorkerThreadLifecycleObserver() {} +WorkerThreadLifecycleObserver::~WorkerThreadLifecycleObserver() = default; } // namespace blink
diff --git a/third_party/WebKit/Source/core/workers/WorkerThreadTest.cpp b/third_party/WebKit/Source/core/workers/WorkerThreadTest.cpp index 31c0a8ed..1f24f389 100644 --- a/third_party/WebKit/Source/core/workers/WorkerThreadTest.cpp +++ b/third_party/WebKit/Source/core/workers/WorkerThreadTest.cpp
@@ -67,7 +67,7 @@ class WorkerThreadTest : public ::testing::Test { public: - WorkerThreadTest() {} + WorkerThreadTest() = default; void SetUp() override { reporting_proxy_ = std::make_unique<MockWorkerReportingProxy>();
diff --git a/third_party/WebKit/Source/core/workers/WorkerThreadTestHelper.h b/third_party/WebKit/Source/core/workers/WorkerThreadTestHelper.h index b5926a27..d46f66d 100644 --- a/third_party/WebKit/Source/core/workers/WorkerThreadTestHelper.h +++ b/third_party/WebKit/Source/core/workers/WorkerThreadTestHelper.h
@@ -65,7 +65,7 @@ thread, CurrentTimeTicksInSeconds()) {} - ~FakeWorkerGlobalScope() override {} + ~FakeWorkerGlobalScope() override = default; // EventTarget const AtomicString& InterfaceName() const override { @@ -83,7 +83,7 @@ worker_backing_thread_( WorkerBackingThread::CreateForTest("Test thread")) {} - ~WorkerThreadForTest() override {} + ~WorkerThreadForTest() override = default; WorkerBackingThread& GetWorkerBackingThread() override { return *worker_backing_thread_;
diff --git a/third_party/WebKit/Source/core/workers/WorkletGlobalScopeProxy.h b/third_party/WebKit/Source/core/workers/WorkletGlobalScopeProxy.h index 57c2a32..f4cb535 100644 --- a/third_party/WebKit/Source/core/workers/WorkletGlobalScopeProxy.h +++ b/third_party/WebKit/Source/core/workers/WorkletGlobalScopeProxy.h
@@ -21,7 +21,7 @@ // about the thread WorkletGlobalScope runs on. class CORE_EXPORT WorkletGlobalScopeProxy : public GarbageCollectedMixin { public: - virtual ~WorkletGlobalScopeProxy() {} + virtual ~WorkletGlobalScopeProxy() = default; // Runs the "fetch and invoke a worklet script" algorithm: // https://drafts.css-houdini.org/worklets/#fetch-and-invoke-a-worklet-script
diff --git a/third_party/WebKit/Source/core/workers/WorkletModuleResponsesMap.h b/third_party/WebKit/Source/core/workers/WorkletModuleResponsesMap.h index 5c1bb027..4b32fc8 100644 --- a/third_party/WebKit/Source/core/workers/WorkletModuleResponsesMap.h +++ b/third_party/WebKit/Source/core/workers/WorkletModuleResponsesMap.h
@@ -35,7 +35,7 @@ // details. class CORE_EXPORT Client : public GarbageCollectedMixin { public: - virtual ~Client() {} + virtual ~Client() = default; virtual void OnRead(const ModuleScriptCreationParams&) = 0; virtual void OnFailed() = 0; };
diff --git a/third_party/WebKit/Source/core/workers/WorkletThreadHolder.h b/third_party/WebKit/Source/core/workers/WorkletThreadHolder.h index 97faed9..bdcc79b 100644 --- a/third_party/WebKit/Source/core/workers/WorkletThreadHolder.h +++ b/third_party/WebKit/Source/core/workers/WorkletThreadHolder.h
@@ -73,8 +73,8 @@ WorkerBackingThread* GetThread() { return thread_.get(); } private: - WorkletThreadHolder() {} - ~WorkletThreadHolder() {} + WorkletThreadHolder() = default; + ~WorkletThreadHolder() = default; static Mutex& HolderInstanceMutex() { DEFINE_THREAD_SAFE_STATIC_LOCAL(Mutex, holder_mutex, ());
diff --git a/third_party/WebKit/Source/core/xml/DOMParser.idl b/third_party/WebKit/Source/core/xml/DOMParser.idl index 5c7cc3f..110d1ee 100644 --- a/third_party/WebKit/Source/core/xml/DOMParser.idl +++ b/third_party/WebKit/Source/core/xml/DOMParser.idl
@@ -29,7 +29,8 @@ [ Constructor, - ConstructorCallWith=Document + ConstructorCallWith=Document, + Exposed=Window ] interface DOMParser { [NewObject] Document parseFromString(DOMString str, SupportedType type); };
diff --git a/third_party/WebKit/Source/core/xml/XMLSerializer.h b/third_party/WebKit/Source/core/xml/XMLSerializer.h index 510c8496..0444b18 100644 --- a/third_party/WebKit/Source/core/xml/XMLSerializer.h +++ b/third_party/WebKit/Source/core/xml/XMLSerializer.h
@@ -37,7 +37,7 @@ String serializeToString(Node*); private: - XMLSerializer() {} + XMLSerializer() = default; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/xml/XMLSerializer.idl b/third_party/WebKit/Source/core/xml/XMLSerializer.idl index 531f4ba..3724948 100644 --- a/third_party/WebKit/Source/core/xml/XMLSerializer.idl +++ b/third_party/WebKit/Source/core/xml/XMLSerializer.idl
@@ -21,7 +21,8 @@ // https://w3c.github.io/DOM-Parsing/#the-xmlserializer-interface [ - Constructor + Constructor, + Exposed=Window ] interface XMLSerializer { DOMString serializeToString(Node root); };
diff --git a/third_party/WebKit/Source/core/xml/XPathEvaluator.h b/third_party/WebKit/Source/core/xml/XPathEvaluator.h index 2ed1060..2b9f0e2 100644 --- a/third_party/WebKit/Source/core/xml/XPathEvaluator.h +++ b/third_party/WebKit/Source/core/xml/XPathEvaluator.h
@@ -57,7 +57,7 @@ ExceptionState&); private: - XPathEvaluator() {} + XPathEvaluator() = default; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/xml/XPathExpression.cpp b/third_party/WebKit/Source/core/xml/XPathExpression.cpp index 84936d7..73400d9 100644 --- a/third_party/WebKit/Source/core/xml/XPathExpression.cpp +++ b/third_party/WebKit/Source/core/xml/XPathExpression.cpp
@@ -39,7 +39,7 @@ using namespace XPath; -XPathExpression::XPathExpression() {} +XPathExpression::XPathExpression() = default; XPathExpression* XPathExpression::CreateExpression( const String& expression,
diff --git a/third_party/WebKit/Source/core/xml/XPathExpressionNode.cpp b/third_party/WebKit/Source/core/xml/XPathExpressionNode.cpp index 04666aa..f425807 100644 --- a/third_party/WebKit/Source/core/xml/XPathExpressionNode.cpp +++ b/third_party/WebKit/Source/core/xml/XPathExpressionNode.cpp
@@ -42,7 +42,7 @@ is_context_position_sensitive_(false), is_context_size_sensitive_(false) {} -Expression::~Expression() {} +Expression::~Expression() = default; void Expression::Trace(blink::Visitor* visitor) { visitor->Trace(sub_expressions_);
diff --git a/third_party/WebKit/Source/core/xml/XPathExpressionNode.h b/third_party/WebKit/Source/core/xml/XPathExpressionNode.h index abe9284..66fa8c9 100644 --- a/third_party/WebKit/Source/core/xml/XPathExpressionNode.h +++ b/third_party/WebKit/Source/core/xml/XPathExpressionNode.h
@@ -55,7 +55,7 @@ class CORE_EXPORT ParseNode : public GarbageCollectedFinalized<ParseNode> { public: - virtual ~ParseNode() {} + virtual ~ParseNode() = default; virtual void Trace(blink::Visitor* visitor) {} };
diff --git a/third_party/WebKit/Source/core/xml/XPathNSResolver.h b/third_party/WebKit/Source/core/xml/XPathNSResolver.h index a4f3197..f997e321 100644 --- a/third_party/WebKit/Source/core/xml/XPathNSResolver.h +++ b/third_party/WebKit/Source/core/xml/XPathNSResolver.h
@@ -36,11 +36,11 @@ DEFINE_WRAPPERTYPEINFO(); public: - virtual ~XPathNSResolver() {} + virtual ~XPathNSResolver() = default; virtual AtomicString lookupNamespaceURI(const String& prefix) = 0; protected: - XPathNSResolver() {} + XPathNSResolver() = default; }; } // namespace blink
diff --git a/third_party/WebKit/Source/core/xml/XPathParser.cpp b/third_party/WebKit/Source/core/xml/XPathParser.cpp index 6312903..8bb34e04f 100644 --- a/third_party/WebKit/Source/core/xml/XPathParser.cpp +++ b/third_party/WebKit/Source/core/xml/XPathParser.cpp
@@ -410,7 +410,7 @@ Reset(String()); } -Parser::~Parser() {} +Parser::~Parser() = default; void Parser::Reset(const String& data) { next_pos_ = 0;
diff --git a/third_party/WebKit/Source/core/xml/XPathPath.cpp b/third_party/WebKit/Source/core/xml/XPathPath.cpp index 60aac6b..f4cd25d 100644 --- a/third_party/WebKit/Source/core/xml/XPathPath.cpp +++ b/third_party/WebKit/Source/core/xml/XPathPath.cpp
@@ -44,7 +44,7 @@ SetIsContextSizeSensitive(expr_->IsContextSizeSensitive()); } -Filter::~Filter() {} +Filter::~Filter() = default; void Filter::Trace(blink::Visitor* visitor) { visitor->Trace(expr_); @@ -80,7 +80,7 @@ SetIsContextNodeSensitive(true); } -LocationPath::~LocationPath() {} +LocationPath::~LocationPath() = default; void LocationPath::Trace(blink::Visitor* visitor) { visitor->Trace(steps_); @@ -181,7 +181,7 @@ SetIsContextSizeSensitive(filter->IsContextSizeSensitive()); } -Path::~Path() {} +Path::~Path() = default; void Path::Trace(blink::Visitor* visitor) { visitor->Trace(filter_);
diff --git a/third_party/WebKit/Source/core/xml/XPathStep.cpp b/third_party/WebKit/Source/core/xml/XPathStep.cpp index a8f98e4e..7afd269 100644 --- a/third_party/WebKit/Source/core/xml/XPathStep.cpp +++ b/third_party/WebKit/Source/core/xml/XPathStep.cpp
@@ -48,7 +48,7 @@ predicates_.swap(predicates); } -Step::~Step() {} +Step::~Step() = default; void Step::Trace(blink::Visitor* visitor) { visitor->Trace(node_test_);
diff --git a/third_party/WebKit/Source/core/xml/XSLTProcessor.cpp b/third_party/WebKit/Source/core/xml/XSLTProcessor.cpp index cb2487b3..ce303bb 100644 --- a/third_party/WebKit/Source/core/xml/XSLTProcessor.cpp +++ b/third_party/WebKit/Source/core/xml/XSLTProcessor.cpp
@@ -56,7 +56,7 @@ "</html>\n"; } -XSLTProcessor::~XSLTProcessor() {} +XSLTProcessor::~XSLTProcessor() = default; Document* XSLTProcessor::CreateDocumentFromSource( const String& source_string,
diff --git a/third_party/WebKit/Source/core/xml/parser/SharedBufferReader.cpp b/third_party/WebKit/Source/core/xml/parser/SharedBufferReader.cpp index 7a20da0..3366f1b 100644 --- a/third_party/WebKit/Source/core/xml/parser/SharedBufferReader.cpp +++ b/third_party/WebKit/Source/core/xml/parser/SharedBufferReader.cpp
@@ -41,7 +41,7 @@ SharedBufferReader::SharedBufferReader(scoped_refptr<const SharedBuffer> buffer) : buffer_(std::move(buffer)), current_offset_(0) {} -SharedBufferReader::~SharedBufferReader() {} +SharedBufferReader::~SharedBufferReader() = default; int SharedBufferReader::ReadData(char* output_buffer, int asked_to_read) { if (!buffer_ || current_offset_ > buffer_->size())
diff --git a/third_party/WebKit/Source/core/xml/parser/XMLDocumentParser.cpp b/third_party/WebKit/Source/core/xml/parser/XMLDocumentParser.cpp index ba7dee4..34d6e09 100644 --- a/third_party/WebKit/Source/core/xml/parser/XMLDocumentParser.cpp +++ b/third_party/WebKit/Source/core/xml/parser/XMLDocumentParser.cpp
@@ -790,8 +790,7 @@ xmlFreeParserCtxt(context_); } -XMLDocumentParser::~XMLDocumentParser() { -} +XMLDocumentParser::~XMLDocumentParser() = default; void XMLDocumentParser::Trace(blink::Visitor* visitor) { visitor->Trace(current_node_);
diff --git a/third_party/WebKit/Source/core/xml/parser/XMLDocumentParser.h b/third_party/WebKit/Source/core/xml/parser/XMLDocumentParser.h index 6e338680..20d820f 100644 --- a/third_party/WebKit/Source/core/xml/parser/XMLDocumentParser.h +++ b/third_party/WebKit/Source/core/xml/parser/XMLDocumentParser.h
@@ -109,7 +109,7 @@ USING_FAST_MALLOC(PendingCallback); public: - virtual ~PendingCallback() {} + virtual ~PendingCallback() = default; virtual void Call(XMLDocumentParser*) = 0; };
diff --git a/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequestProgressEventThrottle.cpp b/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequestProgressEventThrottle.cpp index 775bc5a2..35bafba 100644 --- a/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequestProgressEventThrottle.cpp +++ b/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequestProgressEventThrottle.cpp
@@ -84,7 +84,8 @@ DCHECK(target); } -XMLHttpRequestProgressEventThrottle::~XMLHttpRequestProgressEventThrottle() {} +XMLHttpRequestProgressEventThrottle::~XMLHttpRequestProgressEventThrottle() = + default; void XMLHttpRequestProgressEventThrottle::DispatchProgressEvent( const AtomicString& type,
diff --git a/third_party/WebKit/Source/devtools/front_end/common/Color.js b/third_party/WebKit/Source/devtools/front_end/common/Color.js index f78d78b4..0220b25 100644 --- a/third_party/WebKit/Source/devtools/front_end/common/Color.js +++ b/third_party/WebKit/Source/devtools/front_end/common/Color.js
@@ -61,10 +61,10 @@ * @return {?Common.Color} */ static parse(text) { - // Simple - #hex, rgb(), nickname, hsl() + // Simple - #hex, nickname var value = text.toLowerCase().replace(/\s+/g, ''); var simple = - /^(?:#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})|rgb\(((?:-?\d+%?,){2}-?\d+%?)\)|(\w+)|hsl\((-?\d+\.?\d*(?:,-?\d+\.?\d*%){2})\))$/i; + /^(?:#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})|(\w+))$/i; var match = value.match(simple); if (match) { if (match[1]) { // hex @@ -91,17 +91,8 @@ return new Common.Color([r / 255, g / 255, b / 255, a], format, text); } - if (match[2]) { // rgb - var rgbString = match[2].split(/\s*,\s*/); - var rgba = [ - Common.Color._parseRgbNumeric(rgbString[0]), Common.Color._parseRgbNumeric(rgbString[1]), - Common.Color._parseRgbNumeric(rgbString[2]), 1 - ]; - return new Common.Color(rgba, Common.Color.Format.RGB, text); - } - - if (match[3]) { // nickname - var nickname = match[3].toLowerCase(); + if (match[2]) { // nickname + var nickname = match[2].toLowerCase(); if (nickname in Common.Color.Nicknames) { var rgba = Common.Color.Nicknames[nickname]; var color = Common.Color.fromRGBA(rgba); @@ -112,43 +103,52 @@ return null; } - if (match[4]) { // hsl - var hslString = match[4].replace(/%/g, '').split(/\s*,\s*/); - var hsla = [ - Common.Color._parseHueNumeric(hslString[0]), Common.Color._parseSatLightNumeric(hslString[1]), - Common.Color._parseSatLightNumeric(hslString[2]), 1 - ]; - var rgba = []; - Common.Color.hsl2rgb(hsla, rgba); - return new Common.Color(rgba, Common.Color.Format.HSL, text); - } - return null; } - // Advanced - rgba(), hsla() - var advanced = - /^(?:rgba\(((?:-?\d+%?,){3}-?(?:\d+|\d*\.\d+))\)|hsla\((-?(?:\d+|\d*\.\d+)(?:,-?(?:\d+|\d*\.\d+)*%){2},-?(?:\d+|\d*\.\d+))\))$/; - match = value.match(advanced); + // rgb/rgba(), hsl/hsla() + match = text.toLowerCase().match(/^\s*(?:(rgba?)|(hsla?))\((.*)\)\s*$/); + if (match) { - if (match[1]) { // rgba - var rgbaString = match[1].split(/\s*,\s*/); + var components = match[3].trim(); + var values = components.split(/\s*,\s*/); + if (values.length === 1) { + values = components.split(/\s+/); + if (values[3] === '/') { + values.splice(3, 1); + if (values.length !== 4) + return null; + } else if ((values.length > 2 && values[2].indexOf('/') !== -1) || (values.length > 3 && values[3].indexOf('/') !== -1)) { + var alpha = values.slice(2, 4).join(''); + values = values.slice(0, 2).concat(alpha.split(/\//)).concat(values.slice(4)); + } else if (values.length >= 4) { + return null; + } + } + if (values.length !== 3 && values.length !== 4 || values.indexOf('') > -1) + return null; + var hasAlpha = (values[3] !== undefined); + + if (match[1]) { // rgb/rgba var rgba = [ - Common.Color._parseRgbNumeric(rgbaString[0]), Common.Color._parseRgbNumeric(rgbaString[1]), - Common.Color._parseRgbNumeric(rgbaString[2]), Common.Color._parseAlphaNumeric(rgbaString[3]) + Common.Color._parseRgbNumeric(values[0]), Common.Color._parseRgbNumeric(values[1]), + Common.Color._parseRgbNumeric(values[2]), hasAlpha ? Common.Color._parseAlphaNumeric(values[3]) : 1 ]; - return new Common.Color(rgba, Common.Color.Format.RGBA, text); + if (rgba.indexOf(null) > -1) + return null; + return new Common.Color(rgba, hasAlpha ? Common.Color.Format.RGBA : Common.Color.Format.RGB, text); } - if (match[2]) { // hsla - var hslaString = match[2].replace(/%/g, '').split(/\s*,\s*/); + if (match[2]) { // hsl/hsla var hsla = [ - Common.Color._parseHueNumeric(hslaString[0]), Common.Color._parseSatLightNumeric(hslaString[1]), - Common.Color._parseSatLightNumeric(hslaString[2]), Common.Color._parseAlphaNumeric(hslaString[3]) + Common.Color._parseHueNumeric(values[0]), Common.Color._parseSatLightNumeric(values[1]), + Common.Color._parseSatLightNumeric(values[2]), hasAlpha ? Common.Color._parseAlphaNumeric(values[3]) : 1 ]; + if (hsla.indexOf(null) > -1) + return null; var rgba = []; Common.Color.hsl2rgb(hsla, rgba); - return new Common.Color(rgba, Common.Color.Format.HSLA, text); + return new Common.Color(rgba, hasAlpha ? Common.Color.Format.HSLA : Common.Color.Format.HSL, text); } } @@ -175,14 +175,21 @@ /** * @param {string} value + * @param {boolean} onlyInteger * return {number} */ - static _parseRgbNumeric(value) { - var parsed = parseInt(value, 10); - if (value.indexOf('%') !== -1) - parsed /= 100; - else - parsed /= 255; + static _parsePercentOrNumber(value, onlyInteger) { + if (isNaN(value.replace('%', ''))) + return null; + var parsed = parseFloat(value); + if (onlyInteger && (value.indexOf('.') !== -1 || !Number.isInteger(parsed))) + return null; + + if (value.indexOf('%') !== -1) { + if (value.indexOf('%') !== value.length - 1) + return null; + return parsed / 100; + } return parsed; } @@ -190,8 +197,34 @@ * @param {string} value * return {number} */ + static _parseRgbNumeric(value) { + // Only integers are accepted for channels currently. + var parsed = Common.Color._parsePercentOrNumber(value, true); + if (parsed === null) + return null; + + if (value.indexOf('%') !== -1) + return parsed; + return parsed / 255; + } + + /** + * @param {string} value + * return {number} + */ static _parseHueNumeric(value) { - return isNaN(value) ? 0 : (parseFloat(value) / 360) % 1; + var angle = value.replace(/(deg|g?rad|turn)$/, ''); + if (isNaN(angle) || value.match(/\s+(deg|g?rad|turn)/)) + return null; + var number = parseFloat(angle); + + if (value.indexOf('turn') !== -1) + return number % 1; + else if (value.indexOf('grad') !== -1) + return (number / 400) % 1; + else if (value.indexOf('rad') !== -1) + return (number / (2 * Math.PI)) % 1; + return (number / 360) % 1; } /** @@ -199,7 +232,10 @@ * return {number} */ static _parseSatLightNumeric(value) { - return Math.min(1, parseFloat(value) / 100); + if (value.indexOf('%') !== value.length - 1 || isNaN(value.replace('%', ''))) + return null; + var parsed = parseFloat(value); + return Math.min(1, parsed / 100); } /** @@ -207,7 +243,7 @@ * return {number} */ static _parseAlphaNumeric(value) { - return isNaN(value) ? 0 : parseFloat(value); + return Common.Color._parsePercentOrNumber(value, false); } /**
diff --git a/third_party/WebKit/Source/devtools/front_end/common/ParsedURL.js b/third_party/WebKit/Source/devtools/front_end/common/ParsedURL.js index c57f1b57..83b95ef 100644 --- a/third_party/WebKit/Source/devtools/front_end/common/ParsedURL.js +++ b/third_party/WebKit/Source/devtools/front_end/common/ParsedURL.js
@@ -99,10 +99,9 @@ */ static urlToPlatformPath(fileURL, isWindows) { console.assert(fileURL.startsWith('file://'), 'This must be a file URL.'); - var path = fileURL.substr(7); // Strip off 'file://'. if (isWindows) - return path.replace(/\//g, '\\'); - return path; + return fileURL.substr('file:///'.length).replace(/\//g, '\\'); + return fileURL.substr('file://'.length); } /**
diff --git a/third_party/WebKit/Source/devtools/front_end/console/ConsoleViewMessage.js b/third_party/WebKit/Source/devtools/front_end/console/ConsoleViewMessage.js index 5b8864a..4fc78dc 100644 --- a/third_party/WebKit/Source/devtools/front_end/console/ConsoleViewMessage.js +++ b/third_party/WebKit/Source/devtools/front_end/console/ConsoleViewMessage.js
@@ -808,6 +808,7 @@ } function isWhitelistedProperty(property) { + // Make sure that allowed properties do not interfere with link visibility. var prefixes = [ 'background', 'border', 'color', 'font', 'line', 'margin', 'padding', 'text', '-webkit-background', '-webkit-border', '-webkit-font', '-webkit-margin', '-webkit-padding', '-webkit-text' @@ -835,6 +836,11 @@ formatters._ = bypassFormatter; + /** + * @param {!Element} a + * @param {*} b + * @this {!Console.ConsoleViewMessage} + */ function append(a, b) { if (b instanceof Node) { a.appendChild(b); @@ -842,10 +848,16 @@ var toAppend = Console.ConsoleViewMessage._linkifyStringAsFragment(String(b)); if (currentStyle) { var wrapper = createElement('span'); + wrapper.style.setProperty('contain', 'paint'); + wrapper.style.setProperty('display', 'inline-block'); wrapper.appendChild(toAppend); applyCurrentStyle(wrapper); - for (var i = 0; i < wrapper.children.length; ++i) - applyCurrentStyle(wrapper.children[i]); + for (var child of wrapper.children) { + if (child.classList.contains('devtools-link')) + this._applyForcedVisibleStyle(child); + else + applyCurrentStyle(child); + } toAppend = wrapper; } a.appendChild(toAppend); @@ -862,7 +874,26 @@ } // String.format does treat formattedResult like a Builder, result is an object. - return String.format(format, parameters, formatters, formattedResult, append); + return String.format(format, parameters, formatters, formattedResult, append.bind(this)); + } + + /** + * @param {!Element} element + */ + _applyForcedVisibleStyle(element) { + element.style.setProperty('-webkit-text-stroke', '0', 'important'); + element.style.setProperty('text-decoration', 'underline', 'important'); + + var themedColor = UI.themeSupport.patchColorText('rgb(33%, 33%, 33%)', UI.ThemeSupport.ColorUsage.Foreground); + element.style.setProperty('color', themedColor, 'important'); + + var backgroundColor = 'hsl(0, 0%, 100%)'; + if (this._message.level === ConsoleModel.ConsoleMessage.MessageLevel.Error) + backgroundColor = 'hsl(0, 100%, 97%)'; + else if (this._message.level === ConsoleModel.ConsoleMessage.MessageLevel.Warning || this._shouldRenderAsWarning()) + backgroundColor = 'hsl(50, 100%, 95%)'; + var themedBackgroundColor = UI.themeSupport.patchColorText(backgroundColor, UI.ThemeSupport.ColorUsage.Background); + element.style.setProperty('background-color', themedBackgroundColor, 'important'); } /**
diff --git a/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp b/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp index ad507f6..0433f8d 100644 --- a/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp +++ b/third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp
@@ -784,7 +784,7 @@ // Editable roots created by the user agent are handled by // |IsNativeTextControl| above. ShadowRoot* root = node->ContainingShadowRoot(); - return !root || root->GetType() != ShadowRootType::kUserAgent; + return !root || !root->IsUserAgent(); } return false; }
diff --git a/third_party/WebKit/Source/modules/canvas/canvas2d/CanvasRenderingContext2D.idl b/third_party/WebKit/Source/modules/canvas/canvas2d/CanvasRenderingContext2D.idl index 1b5d5af..b578065c 100644 --- a/third_party/WebKit/Source/modules/canvas/canvas2d/CanvasRenderingContext2D.idl +++ b/third_party/WebKit/Source/modules/canvas/canvas2d/CanvasRenderingContext2D.idl
@@ -44,6 +44,7 @@ enum CanvasFillRule { "nonzero", "evenodd" }; enum ImageSmoothingQuality {"low", "medium", "high"}; +[Exposed=Window] interface CanvasRenderingContext2D { // back-reference to the canvas readonly attribute HTMLCanvasElement canvas;
diff --git a/third_party/WebKit/Source/modules/device_orientation/DeviceMotionEvent.idl b/third_party/WebKit/Source/modules/device_orientation/DeviceMotionEvent.idl index 9d4636b3..234eef91 100644 --- a/third_party/WebKit/Source/modules/device_orientation/DeviceMotionEvent.idl +++ b/third_party/WebKit/Source/modules/device_orientation/DeviceMotionEvent.idl
@@ -25,8 +25,10 @@ // https://w3c.github.io/deviceorientation/spec-source-orientation.html#devicemotion -[Constructor(DOMString type, optional DeviceMotionEventInit eventInitDict)] -interface DeviceMotionEvent : Event { +[ + Constructor(DOMString type, optional DeviceMotionEventInit eventInitDict), + Exposed=Window +] interface DeviceMotionEvent : Event { readonly attribute DeviceAcceleration? acceleration; readonly attribute DeviceAcceleration? accelerationIncludingGravity; readonly attribute DeviceRotationRate? rotationRate;
diff --git a/third_party/WebKit/Source/modules/device_orientation/DeviceOrientationEvent.idl b/third_party/WebKit/Source/modules/device_orientation/DeviceOrientationEvent.idl index 14a53d6b..3c122ee 100644 --- a/third_party/WebKit/Source/modules/device_orientation/DeviceOrientationEvent.idl +++ b/third_party/WebKit/Source/modules/device_orientation/DeviceOrientationEvent.idl
@@ -25,8 +25,10 @@ // https://w3c.github.io/deviceorientation/spec-source-orientation.html#deviceorientation -[Constructor(DOMString type, optional DeviceOrientationEventInit eventInitDict)] -interface DeviceOrientationEvent : Event { +[ + Constructor(DOMString type, optional DeviceOrientationEventInit eventInitDict), + Exposed=Window +] interface DeviceOrientationEvent : Event { readonly attribute double? alpha; readonly attribute double? beta; readonly attribute double? gamma;
diff --git a/third_party/WebKit/Source/modules/media_controls/elements/MediaControlInputElement.cpp b/third_party/WebKit/Source/modules/media_controls/elements/MediaControlInputElement.cpp index 42cffce..2fd84fd 100644 --- a/third_party/WebKit/Source/modules/media_controls/elements/MediaControlInputElement.cpp +++ b/third_party/WebKit/Source/modules/media_controls/elements/MediaControlInputElement.cpp
@@ -113,7 +113,7 @@ MediaControlElementType display_type) : HTMLInputElement(media_controls.GetDocument(), false), MediaControlElementBase(media_controls, display_type, this) { - CreateUserAgentShadowRoot(); + CreateLegacyUserAgentShadowRootV0(); CreateShadowSubtree(); }
diff --git a/third_party/WebKit/Source/modules/media_controls/elements/MediaControlOverlayPlayButtonElement.cpp b/third_party/WebKit/Source/modules/media_controls/elements/MediaControlOverlayPlayButtonElement.cpp index 4374402..7d3fd4bd 100644 --- a/third_party/WebKit/Source/modules/media_controls/elements/MediaControlOverlayPlayButtonElement.cpp +++ b/third_party/WebKit/Source/modules/media_controls/elements/MediaControlOverlayPlayButtonElement.cpp
@@ -111,7 +111,7 @@ internal_button_(nullptr), left_jump_arrow_(nullptr), right_jump_arrow_(nullptr) { - EnsureUserAgentShadowRoot(); + EnsureLegacyUserAgentShadowRootV0(); setType(InputTypeNames::button); SetShadowPseudoId(AtomicString("-webkit-media-controls-overlay-play-button"));
diff --git a/third_party/WebKit/Source/modules/mediacapturefromelement/CanvasCaptureMediaStreamTrack.idl b/third_party/WebKit/Source/modules/mediacapturefromelement/CanvasCaptureMediaStreamTrack.idl index e283bb7..b05af4b6 100644 --- a/third_party/WebKit/Source/modules/mediacapturefromelement/CanvasCaptureMediaStreamTrack.idl +++ b/third_party/WebKit/Source/modules/mediacapturefromelement/CanvasCaptureMediaStreamTrack.idl
@@ -3,6 +3,8 @@ // found in the LICENSE file. // https://w3c.github.io/mediacapture-fromelement/#the-canvascapturemediastreamtrack + +[Exposed=Window] interface CanvasCaptureMediaStreamTrack : MediaStreamTrack { readonly attribute HTMLCanvasElement canvas; void requestFrame ();
diff --git a/third_party/WebKit/Source/modules/sensor/Gyroscope.idl b/third_party/WebKit/Source/modules/sensor/Gyroscope.idl index eaef3b1..84da69c 100644 --- a/third_party/WebKit/Source/modules/sensor/Gyroscope.idl +++ b/third_party/WebKit/Source/modules/sensor/Gyroscope.idl
@@ -11,6 +11,7 @@ ConstructorCallWith=ExecutionContext, RaisesException=Constructor, SecureContext, + Exposed=Window, MeasureAs=GyroscopeConstructor ] interface Gyroscope : Sensor { readonly attribute unrestricted double? x;
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioNode.cpp b/third_party/WebKit/Source/modules/webaudio/AudioNode.cpp index f2e26d3..a5caec8 100644 --- a/third_party/WebKit/Source/modules/webaudio/AudioNode.cpp +++ b/third_party/WebKit/Source/modules/webaudio/AudioNode.cpp
@@ -542,13 +542,7 @@ #endif BaseAudioContext::GraphAutoLocker locker(context()); Handler().Dispose(); - - // If the context is not closed, add this handler to the orphan - // list. The audio thread could be running and processing this - // handler right now, so deleting it now would be bad. By putting - // on the orphan list, the handler stays alive until it can be - // safely processed after the graph is not being processed. - if (context()->ContextState() != BaseAudioContext::kClosed) { + if (context()->ContextState() == BaseAudioContext::kRunning) { context()->GetDeferredTaskHandler().AddRenderingOrphanHandler( std::move(handler_)); }
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp index 522109d..ea60f3a 100644 --- a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp +++ b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
@@ -7360,9 +7360,8 @@ } if (WouldTaintOrigin(image, security_origin)) { - exception_state.ThrowSecurityError("The cross-origin image at " + - url.ElidedString() + - " may not be loaded."); + exception_state.ThrowSecurityError( + "The image element contains cross-origin data, and may not be loaded."); return false; } return true;
diff --git a/third_party/WebKit/Source/platform/WebTaskRunner.cpp b/third_party/WebKit/Source/platform/WebTaskRunner.cpp index 0461a9a..8b10a60 100644 --- a/third_party/WebKit/Source/platform/WebTaskRunner.cpp +++ b/third_party/WebKit/Source/platform/WebTaskRunner.cpp
@@ -119,26 +119,15 @@ TaskHandle WebTaskRunner::PostCancellableTask(const base::Location& location, base::OnceClosure task) { - DCHECK(RunsTasksInCurrentSequence()); - scoped_refptr<TaskHandle::Runner> runner = - base::AdoptRef(new TaskHandle::Runner(std::move(task))); - PostTask(location, WTF::Bind(&TaskHandle::Runner::Run, runner->AsWeakPtr(), - TaskHandle(runner))); - return TaskHandle(runner); + return blink::PostCancellableTask(*this, location, std::move(task)); } TaskHandle WebTaskRunner::PostDelayedCancellableTask( const base::Location& location, base::OnceClosure task, TimeDelta delay) { - DCHECK(RunsTasksInCurrentSequence()); - scoped_refptr<TaskHandle::Runner> runner = - base::AdoptRef(new TaskHandle::Runner(std::move(task))); - PostDelayedTask(location, - WTF::Bind(&TaskHandle::Runner::Run, runner->AsWeakPtr(), - TaskHandle(runner)), - delay); - return TaskHandle(runner); + return blink::PostDelayedCancellableTask(*this, location, std::move(task), + delay); } WebTaskRunner::~WebTaskRunner() = default; @@ -163,4 +152,31 @@ location, base::BindOnce(&RunCrossThreadClosure, std::move(task)), delay); } +TaskHandle PostCancellableTask(WebTaskRunner& task_runner, + const base::Location& location, + base::OnceClosure task) { + DCHECK(task_runner.RunsTasksInCurrentSequence()); + scoped_refptr<TaskHandle::Runner> runner = + base::AdoptRef(new TaskHandle::Runner(std::move(task))); + task_runner.PostTask(location, + WTF::Bind(&TaskHandle::Runner::Run, runner->AsWeakPtr(), + TaskHandle(runner))); + return TaskHandle(runner); +} + +TaskHandle PostDelayedCancellableTask(WebTaskRunner& task_runner, + const base::Location& location, + base::OnceClosure task, + TimeDelta delay) { + DCHECK(task_runner.RunsTasksInCurrentSequence()); + scoped_refptr<TaskHandle::Runner> runner = + base::AdoptRef(new TaskHandle::Runner(std::move(task))); + task_runner.PostDelayedTask( + location, + WTF::Bind(&TaskHandle::Runner::Run, runner->AsWeakPtr(), + TaskHandle(runner)), + delay); + return TaskHandle(runner); +} + } // namespace blink
diff --git a/third_party/WebKit/Source/platform/WebTaskRunner.h b/third_party/WebKit/Source/platform/WebTaskRunner.h index 3c017aad..616e865e 100644 --- a/third_party/WebKit/Source/platform/WebTaskRunner.h +++ b/third_party/WebKit/Source/platform/WebTaskRunner.h
@@ -21,6 +21,8 @@ namespace blink { +class WebTaskRunner; + // TaskHandle is associated to a task posted by // WebTaskRunner::postCancellableTask or // WebTaskRunner::postCancellableDelayedTask and cancels the associated task on @@ -48,7 +50,13 @@ class Runner; private: - friend class WebTaskRunner; + friend BLINK_PLATFORM_EXPORT WARN_UNUSED_RESULT TaskHandle + PostCancellableTask(WebTaskRunner&, const base::Location&, base::OnceClosure); + friend BLINK_PLATFORM_EXPORT WARN_UNUSED_RESULT TaskHandle + PostDelayedCancellableTask(WebTaskRunner&, + const base::Location&, + base::OnceClosure, + TimeDelta delay); explicit TaskHandle(scoped_refptr<Runner>); scoped_refptr<Runner> runner_; @@ -73,8 +81,7 @@ // For same-thread posting. Must be called from the associated WebThread. void PostTask(const base::Location&, base::OnceClosure); - // For same-thread cancellable task posting. Returns a TaskHandle object for - // cancellation. + // DEPRECATED: Use namespace-level functions below. WARN_UNUSED_RESULT TaskHandle PostCancellableTask(const base::Location&, base::OnceClosure); WARN_UNUSED_RESULT TaskHandle @@ -100,6 +107,16 @@ CrossThreadClosure, TimeDelta delay); +// For same-thread cancellable task posting. Returns a TaskHandle object for +// cancellation. +BLINK_PLATFORM_EXPORT WARN_UNUSED_RESULT TaskHandle +PostCancellableTask(WebTaskRunner&, const base::Location&, base::OnceClosure); +BLINK_PLATFORM_EXPORT WARN_UNUSED_RESULT TaskHandle +PostDelayedCancellableTask(WebTaskRunner&, + const base::Location&, + base::OnceClosure, + TimeDelta delay); + } // namespace blink #endif // WebTaskRunner_h
diff --git a/third_party/WebKit/Source/platform/bindings/V8DOMActivityLogger.cpp b/third_party/WebKit/Source/platform/bindings/V8DOMActivityLogger.cpp index 83b808e..b67022f 100644 --- a/third_party/WebKit/Source/platform/bindings/V8DOMActivityLogger.cpp +++ b/third_party/WebKit/Source/platform/bindings/V8DOMActivityLogger.cpp
@@ -35,8 +35,6 @@ void V8DOMActivityLogger::LogMethod(const char* api_name, v8::FunctionCallbackInfo<v8::Value> info) { - DCHECK(static_cast<size_t>(info.Length()) <= - Vector<v8::Local<v8::Value>>::MaxCapacity()); Vector<v8::Local<v8::Value>> loggerArgs; loggerArgs.ReserveInitialCapacity(info.Length()); for (int i = 0; i < info.Length(); ++i) {
diff --git a/third_party/WebKit/Source/platform/graphics/CanvasResourceTest.cpp b/third_party/WebKit/Source/platform/graphics/CanvasResourceTest.cpp index 9754b94..ae0d477 100644 --- a/third_party/WebKit/Source/platform/graphics/CanvasResourceTest.cpp +++ b/third_party/WebKit/Source/platform/graphics/CanvasResourceTest.cpp
@@ -33,7 +33,7 @@ GLuint(ClientBuffer, GLsizei, GLsizei, GLenum)); }; -class FakePlatformSupport : public TestingPlatformSupport { +class FakeCanvasResourcePlatformSupport : public TestingPlatformSupport { public: void RunUntilStop() const { base::RunLoop().Run(); } @@ -114,7 +114,7 @@ } TEST_F(CanvasResourceTest, GpuMemoryBufferSyncTokenRefresh) { - ScopedTestingPlatformSupport<FakePlatformSupport> platform; + ScopedTestingPlatformSupport<FakeCanvasResourcePlatformSupport> platform; constexpr GLuint image_id = 1; EXPECT_CALL(gl_, CreateImageCHROMIUM(_, _, _, _)).WillOnce(Return(image_id));
diff --git a/third_party/WebKit/Source/platform/heap/HeapAllocator.h b/third_party/WebKit/Source/platform/heap/HeapAllocator.h index 0dd06be..93744c7 100644 --- a/third_party/WebKit/Source/platform/heap/HeapAllocator.h +++ b/third_party/WebKit/Source/platform/heap/HeapAllocator.h
@@ -53,7 +53,7 @@ public: using Visitor = blink::Visitor; - static const bool kIsGarbageCollected = true; + static constexpr bool kIsGarbageCollected = true; template <typename T> static size_t MaxElementCountInBackingStore() { @@ -695,7 +695,7 @@ static void ConstructDeletedValue(blink::Member<T>& slot, bool) { slot = WTF::kHashTableDeletedValue; } - static bool IsDeletedValue(blink::Member<T> value) { + static bool IsDeletedValue(const blink::Member<T>& value) { return value.IsHashTableDeletedValue(); } };
diff --git a/third_party/WebKit/Source/platform/heap/HeapTest.cpp b/third_party/WebKit/Source/platform/heap/HeapTest.cpp index 948f653..f51843c 100644 --- a/third_party/WebKit/Source/platform/heap/HeapTest.cpp +++ b/third_party/WebKit/Source/platform/heap/HeapTest.cpp
@@ -81,6 +81,10 @@ }; static_assert(WTF::IsTraceable<IntWrapper>::value, "IsTraceable<> template failed to recognize trace method."); +static_assert(WTF::IsTraceable<HeapVector<IntWrapper>>::value, + "HeapVector<IntWrapper> must be traceable."); +static_assert(WTF::IsTraceable<HeapDeque<IntWrapper>>::value, + "HeapDeque<IntWrapper> must be traceable."); class KeyWithCopyingMoveConstructor final { public:
diff --git a/third_party/WebKit/Source/platform/heap/IncrementalMarkingTest.cpp b/third_party/WebKit/Source/platform/heap/IncrementalMarkingTest.cpp index e49b870..151ac474 100644 --- a/third_party/WebKit/Source/platform/heap/IncrementalMarkingTest.cpp +++ b/third_party/WebKit/Source/platform/heap/IncrementalMarkingTest.cpp
@@ -112,7 +112,6 @@ headers_.push_back(header); was_marked_.push_back(header->IsMarked()); } - EXPECT_FALSE(objects_.empty()); } ~ExpectNoWriteBarrierFires() { @@ -171,42 +170,6 @@ EXPECT_FALSE(scope.heap().GetStackFrameDepth().IsSafeToRecurse()); } -// ============================================================================= -// Member<T> support. ========================================================== -// ============================================================================= - -TEST(IncrementalMarkingTest, MemberReferenceAssignMember) { - Object* obj = Object::Create(); - Member<Object> m1; - Member<Object>& m2 = m1; - Member<Object> m3(obj); - { - ExpectWriteBarrierFires<Object> scope(ThreadState::Current(), {obj}); - m2 = m3; - } -} - -TEST(IncrementalMarkingTest, WriteBarrierOnUnmarkedObject) { - Object* parent = Object::Create(); - Object* child = Object::Create(); - { - ExpectWriteBarrierFires<Object> scope(ThreadState::Current(), {child}); - EXPECT_FALSE(child->IsMarked()); - parent->set_next(child); - EXPECT_TRUE(child->IsMarked()); - } -} - -TEST(IncrementalMarkingTest, NoWriteBarrierOnMarkedObject) { - Object* parent = Object::Create(); - Object* child = Object::Create(); - HeapObjectHeader::FromPayload(child)->Mark(); - { - ExpectNoWriteBarrierFires<Object> scope(ThreadState::Current(), {child}); - parent->set_next(child); - } -} - TEST(IncrementalMarkingTest, ManualWriteBarrierTriggersWhenMarkingIsOn) { Object* object = Object::Create(); { @@ -228,7 +191,32 @@ EXPECT_TRUE(marking_stack->IsEmpty()); } -TEST(IncrementalMarkingTest, InitializingStoreTriggersNoWriteBarrier) { +// ============================================================================= +// Member<T> support. ========================================================== +// ============================================================================= + +TEST(IncrementalMarkingTest, MemberSetUnmarkedObject) { + Object* parent = Object::Create(); + Object* child = Object::Create(); + { + ExpectWriteBarrierFires<Object> scope(ThreadState::Current(), {child}); + EXPECT_FALSE(child->IsMarked()); + parent->set_next(child); + EXPECT_TRUE(child->IsMarked()); + } +} + +TEST(IncrementalMarkingTest, MemberSetMarkedObjectNoBarrier) { + Object* parent = Object::Create(); + Object* child = Object::Create(); + HeapObjectHeader::FromPayload(child)->Mark(); + { + ExpectNoWriteBarrierFires<Object> scope(ThreadState::Current(), {child}); + parent->set_next(child); + } +} + +TEST(IncrementalMarkingTest, MemberInitializingStoreNoBarrier) { Object* object1 = Object::Create(); HeapObjectHeader* object1_header = HeapObjectHeader::FromPayload(object1); { @@ -241,6 +229,49 @@ } } +TEST(IncrementalMarkingTest, MemberReferenceAssignMember) { + Object* obj = Object::Create(); + Member<Object> m1; + Member<Object>& m2 = m1; + Member<Object> m3(obj); + { + ExpectWriteBarrierFires<Object> scope(ThreadState::Current(), {obj}); + m2 = m3; + } +} + +TEST(IncrementalMarkingTest, MemberSetDeletedValueNoBarrier) { + Member<Object> m; + { + ExpectNoWriteBarrierFires<Object> scope(ThreadState::Current(), {}); + m = WTF::kHashTableDeletedValue; + } +} + +TEST(IncrementalMarkingTest, MemberCopyDeletedValueNoBarrier) { + Member<Object> m1(WTF::kHashTableDeletedValue); + { + ExpectNoWriteBarrierFires<Object> scope(ThreadState::Current(), {}); + Member<Object> m2(m1); + } +} + +TEST(IncrementalMarkingTest, MemberHashTraitConstructDeletedValueNoBarrier) { + Member<Object> m1; + { + ExpectNoWriteBarrierFires<Object> scope(ThreadState::Current(), {}); + HashTraits<Member<Object>>::ConstructDeletedValue(m1, false); + } +} + +TEST(IncrementalMarkingTest, MemberHashTraitIsDeletedValueNoBarrier) { + Member<Object> m1(Object::Create()); + { + ExpectNoWriteBarrierFires<Object> scope(ThreadState::Current(), {}); + EXPECT_FALSE(HashTraits<Member<Object>>::IsDeletedValue(m1)); + } +} + // ============================================================================= // Mixin support. ============================================================== // ============================================================================= @@ -1330,6 +1361,8 @@ map.insert(obj1, obj2); HeapVector<Member<Object>> vec; { + // Only key should have its write barrier fired. A write barrier call for + // value hints to an inefficient implementation. ExpectWriteBarrierFires<Object> scope(ThreadState::Current(), {obj1}); CopyKeysToVector(map, vec); } @@ -1342,7 +1375,9 @@ map.insert(obj1, obj2); HeapVector<Member<Object>> vec; { - ExpectWriteBarrierFires<Object> scope(ThreadState::Current(), {obj1}); + // Only value should have its write barrier fired. A write barrier call for + // key hints to an inefficient implementation. + ExpectWriteBarrierFires<Object> scope(ThreadState::Current(), {obj2}); CopyValuesToVector(map, vec); } }
diff --git a/third_party/WebKit/Source/platform/wtf/Deque.h b/third_party/WebKit/Source/platform/wtf/Deque.h index f82b1455..6b84b8a 100644 --- a/third_party/WebKit/Source/platform/wtf/Deque.h +++ b/third_party/WebKit/Source/platform/wtf/Deque.h
@@ -146,8 +146,8 @@ void clear(); - template <typename VisitorDispatcher> - void Trace(VisitorDispatcher); + template <typename VisitorDispatcher, typename A = Allocator> + std::enable_if_t<A::kIsGarbageCollected> Trace(VisitorDispatcher); static_assert(!std::is_polymorphic<T>::value || !VectorTraits<T>::kCanInitializeWithMemset, @@ -668,13 +668,14 @@ return &deque_->buffer_.buffer()[index_ - 1]; } -// This is only called if the allocator is a HeapAllocator. It is used when +// This is only defined if the allocator is a HeapAllocator. It is used when // visiting during a tracing GC. template <typename T, size_t inlineCapacity, typename Allocator> -template <typename VisitorDispatcher> -void Deque<T, inlineCapacity, Allocator>::Trace(VisitorDispatcher visitor) { - DCHECK(Allocator::kIsGarbageCollected) - << "Garbage collector must be enabled."; +template <typename VisitorDispatcher, typename A> +std::enable_if_t<A::kIsGarbageCollected> +Deque<T, inlineCapacity, Allocator>::Trace(VisitorDispatcher visitor) { + static_assert(Allocator::kIsGarbageCollected, + "Garbage collector must be enabled."); const T* buffer_begin = buffer_.Buffer(); const T* end = buffer_begin + end_; if (IsTraceableInCollectionTrait<VectorTraits<T>>::value) {
diff --git a/third_party/WebKit/Source/platform/wtf/DequeTest.cpp b/third_party/WebKit/Source/platform/wtf/DequeTest.cpp index a723e9b..9a422f04 100644 --- a/third_party/WebKit/Source/platform/wtf/DequeTest.cpp +++ b/third_party/WebKit/Source/platform/wtf/DequeTest.cpp
@@ -542,6 +542,8 @@ EXPECT_EQ(2, deque[1].value2); } -} // anonymous namespace +static_assert(!IsTraceable<Deque<int>>::value, + "Deque<int> must not be traceable."); +} // anonymous namespace } // namespace WTF
diff --git a/third_party/WebKit/Source/platform/wtf/Vector.h b/third_party/WebKit/Source/platform/wtf/Vector.h index 77c5fb8f..8b451bd 100644 --- a/third_party/WebKit/Source/platform/wtf/Vector.h +++ b/third_party/WebKit/Source/platform/wtf/Vector.h
@@ -1289,8 +1289,8 @@ void FinalizeGarbageCollectedObject() { Finalize(); } - template <typename VisitorDispatcher> - void Trace(VisitorDispatcher); + template <typename VisitorDispatcher, typename A = Allocator> + std::enable_if_t<A::kIsGarbageCollected> Trace(VisitorDispatcher); class GCForbiddenScope { STACK_ALLOCATED(); @@ -1959,13 +1959,14 @@ return !(a == b); } -// This is only called if the allocator is a HeapAllocator. It is used when +// This is only defined if the allocator is a HeapAllocator. It is used when // visiting during a tracing GC. template <typename T, size_t inlineCapacity, typename Allocator> -template <typename VisitorDispatcher> -void Vector<T, inlineCapacity, Allocator>::Trace(VisitorDispatcher visitor) { - DCHECK(Allocator::kIsGarbageCollected) - << "Garbage collector must be enabled."; +template <typename VisitorDispatcher, typename A> +std::enable_if_t<A::kIsGarbageCollected> +Vector<T, inlineCapacity, Allocator>::Trace(VisitorDispatcher visitor) { + static_assert(Allocator::kIsGarbageCollected, + "Garbage collector must be enabled."); if (!Buffer()) return; if (this->HasOutOfLineBuffer()) {
diff --git a/third_party/WebKit/Source/platform/wtf/VectorTest.cpp b/third_party/WebKit/Source/platform/wtf/VectorTest.cpp index 3c761d2..8f7d67a 100644 --- a/third_party/WebKit/Source/platform/wtf/VectorTest.cpp +++ b/third_party/WebKit/Source/platform/wtf/VectorTest.cpp
@@ -670,6 +670,9 @@ static_assert(VectorTraits<UnknownType*>::kCanCopyWithMemcpy, "Pointers should be copied with memcpy."); +static_assert(!IsTraceable<Vector<int>>::value, + "Vector<int> must not be traceable."); + } // anonymous namespace } // namespace WTF
diff --git a/third_party/WebKit/Source/platform/wtf/allocator/PartitionAllocator.h b/third_party/WebKit/Source/platform/wtf/allocator/PartitionAllocator.h index 68e8e02..85963ef 100644 --- a/third_party/WebKit/Source/platform/wtf/allocator/PartitionAllocator.h +++ b/third_party/WebKit/Source/platform/wtf/allocator/PartitionAllocator.h
@@ -25,7 +25,7 @@ class WTF_EXPORT PartitionAllocator { public: typedef PartitionAllocatorDummyVisitor Visitor; - static const bool kIsGarbageCollected = false; + static constexpr bool kIsGarbageCollected = false; template <typename T> static size_t MaxElementCountInBackingStore() {
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/tool/commands/rebaseline.py b/third_party/WebKit/Tools/Scripts/webkitpy/tool/commands/rebaseline.py index e4afaf6..2b4cc77 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/tool/commands/rebaseline.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/tool/commands/rebaseline.py
@@ -32,6 +32,7 @@ import optparse import re +from webkitpy.common.memoized import memoized from webkitpy.common.net.buildbot import Build from webkitpy.layout_tests.models.test_expectations import BASELINE_SUFFIX_LIST from webkitpy.layout_tests.models.test_expectations import TestExpectations @@ -264,11 +265,15 @@ suffixes = self._suffixes_for_actual_failures(test, build) if not suffixes: - # If we're not going to rebaseline the test because it's passing on this - # builder, we still want to remove the line from TestExpectations. - if test not in lines_to_remove: - lines_to_remove[test] = [] - lines_to_remove[test].append(port_name) + # Only try to remove the expectation if the test + # 1. ran and passed ([ Skip ], [ WontFix ] should be kept) + # 2. passed unexpectedly (flaky expectations should be kept) + if self._test_passed_unexpectedly(test, build, port_name): + _log.debug('Test %s passed unexpectedly in %s. ' + 'Will try to remove it from TestExpectations.', test, build) + if test not in lines_to_remove: + lines_to_remove[test] = [] + lines_to_remove[test].append(port_name) continue args = [] @@ -395,6 +400,8 @@ for test in sorted({t for t, _, _ in test_baseline_set}): _log.info('Rebaselining %s', test) + # extra_lines_to_remove are unexpected passes, while lines_to_remove are + # failing tests that have been rebaselined. copy_baseline_commands, rebaseline_commands, extra_lines_to_remove = self._rebaseline_commands( test_baseline_set, options) lines_to_remove = {} @@ -449,16 +456,48 @@ Returns: A set of file suffix strings. """ - results = self._tool.buildbot.fetch_results(build) - if not results: - _log.debug('No results found for build %s', build) - return set() - test_result = results.result_for_test(test) + test_result = self._result_for_test(test, build) if not test_result: - _log.debug('No test result for test %s in build %s', test, build) return set() return TestExpectations.suffixes_for_test_result(test_result) + def _test_passed_unexpectedly(self, test, build, port_name): + """Determines if a test passed unexpectedly in a build. + + The routine also takes into account the port that is being rebaselined. + It is possible to use builds from a different port to rebaseline the + current port, e.g. rebaseline-cl --fill-missing, in which case the test + will not be considered passing regardless of the result. + + Args: + test: A full test path string. + build: A Build object. + port_name: The name of port currently being rebaselined. + + Returns: + A boolean. + """ + if self._tool.builders.port_name_for_builder_name(build.builder_name) != port_name: + return False + test_result = self._result_for_test(test, build) + if not test_result: + return False + return test_result.did_pass() and not test_result.did_run_as_expected() + + @memoized + def _result_for_test(self, test, build): + # We need full results to know if a test passed or was skipped. + # TODO(robertma): Make memoized support kwargs, and use full=True here. + results = self._tool.buildbot.fetch_results(build, True) + if not results: + _log.debug('No results found for build %s', build) + return None + test_result = results.result_for_test(test) + if not test_result: + _log.info('No test result for test %s in build %s', test, build) + return None + return test_result + class RebaselineExpectations(AbstractParallelRebaselineCommand): name = 'rebaseline-expectations'
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/tool/commands/rebaseline_cl.py b/third_party/WebKit/Tools/Scripts/webkitpy/tool/commands/rebaseline_cl.py index 3e69e34..faa6b1c 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/tool/commands/rebaseline_cl.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/tool/commands/rebaseline_cl.py
@@ -263,6 +263,15 @@ return test_baseline_set def _make_test_baseline_set_for_tests(self, tests, builds_to_results): + """Determines the set of test baselines to fetch from a list of tests. + + Args: + tests: A list of tests. + builds_to_results: A dict mapping Builds to LayoutTestResults. + + Returns: + A TestBaselineSet object. + """ test_baseline_set = TestBaselineSet(self._tool) for test in tests: for build in builds_to_results: @@ -270,10 +279,10 @@ return test_baseline_set def _make_test_baseline_set(self, builds_to_results, only_changed_tests): - """Returns a dict which lists the set of baselines to fetch. + """Determines the set of test baselines to fetch. - The dict that is returned is a dict of tests to Build objects - to baseline file extensions. + The list of tests are not explicitly provided, so all failing tests or + modified tests will be rebaselined (depending on only_changed_tests). Args: builds_to_results: A dict mapping Builds to LayoutTestResults. @@ -282,7 +291,7 @@ tests will be downloaded, even for tests that were not modified. Returns: - A dict containing information about which new baselines to download. + A TestBaselineSet object. """ builds_to_tests = {} for build, results in builds_to_results.iteritems():
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/tool/commands/rebaseline_test_unittest.py b/third_party/WebKit/Tools/Scripts/webkitpy/tool/commands/rebaseline_test_unittest.py index cb38860..024f43d 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/tool/commands/rebaseline_test_unittest.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/tool/commands/rebaseline_test_unittest.py
@@ -79,7 +79,7 @@ # pylint: disable=protected-access self._zero_out_test_expectations() self._write( - self.mac_expectations_path, + self.test_expectations_path, ('Bug(B) [ Mac Linux Win7 Debug ] fast/dom/Window/window-postmessage-clone-really-deep-array.html [ Pass ]\n' 'Bug(A) [ Debug ] : fast/css/large-list-of-rules-crash.html [ Failure ]\n')) self._write('fast/dom/Window/window-postmessage-clone-really-deep-array.html', 'Dummy test contents') @@ -92,7 +92,7 @@ [self.WEB_PREFIX + '/userscripts/another-test-actual.png', self.WEB_PREFIX + '/userscripts/another-test-actual.wav', self.WEB_PREFIX + '/userscripts/another-test-actual.txt']) - new_expectations = self._read(self.mac_expectations_path) + new_expectations = self._read(self.test_expectations_path) self.assertMultiLineEqual( new_expectations, ('Bug(B) [ Mac Linux Win7 Debug ] fast/dom/Window/window-postmessage-clone-really-deep-array.html [ Pass ]\n' @@ -108,7 +108,7 @@ # pylint: disable=protected-access self._write('userscripts/another-test.html', 'test data') self._write( - self.mac_expectations_path, + self.test_expectations_path, ('Bug(x) [ Mac ] userscripts/another-test.html [ Failure ]\n' 'bug(z) [ Linux ] userscripts/another-test.html [ Failure ]\n')) self.command._rebaseline_test_and_update_expectations(self.options(results_directory='/tmp'))
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/tool/commands/rebaseline_unittest.py b/third_party/WebKit/Tools/Scripts/webkitpy/tool/commands/rebaseline_unittest.py index 5e85a19..3dfa451 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/tool/commands/rebaseline_unittest.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/tool/commands/rebaseline_unittest.py
@@ -18,7 +18,6 @@ from webkitpy.tool.mock_tool import MockWebKitPatch -# pylint: disable=protected-access class BaseTestCase(unittest.TestCase): WEB_PREFIX = 'https://storage.googleapis.com/chromium-layout-test-archives/MOCK_Mac10_11/results/layout-test-results' @@ -27,9 +26,8 @@ def setUp(self): self.tool = MockWebKitPatch() - self.command = None self.command = self.command_constructor() - self.command._tool = self.tool + self.command._tool = self.tool # pylint: disable=protected-access self.tool.builders = BuilderList({ 'MOCK Mac10.10 (dbg)': {'port_name': 'test-mac-mac10.10', 'specifiers': ['Mac10.10', 'Debug']}, 'MOCK Mac10.10': {'port_name': 'test-mac-mac10.10', 'specifiers': ['Mac10.10', 'Release']}, @@ -45,10 +43,13 @@ 'MOCK Win7': {'port_name': 'test-win-win7', 'specifiers': ['Win7', 'Release']}, }) self.mac_port = self.tool.port_factory.get_from_builder_name('MOCK Mac10.11') + self.test_expectations_path = self.mac_port.path_to_generic_test_expectations_file() - self.mac_expectations_path = self.mac_port.path_to_generic_test_expectations_file() - self.tool.filesystem.write_text_file( - self.tool.filesystem.join(self.mac_port.layout_tests_dir(), 'VirtualTestSuites'), '[]') + # This file must exist for Port classes to function properly. + self._write('VirtualTestSuites', '[]') + # Create some dummy tests (note _setup_mock_build_data uses the same test names). + self._write('userscripts/first-test.html', 'Dummy test contents') + self._write('userscripts/second-test.html', 'Dummy test contents') # In AbstractParallelRebaselineCommand._rebaseline_commands, a default port # object is gotten using self.tool.port_factory.get(), which is used to get @@ -93,11 +94,12 @@ 'userscripts': { 'first-test.html': { 'expected': 'PASS', - 'actual': 'IMAGE+TEXT' + 'actual': 'IMAGE+TEXT', + 'is_unexpected': True, }, 'second-test.html': { 'expected': 'FAIL', - 'actual': 'IMAGE+TEXT' + 'actual': 'IMAGE+TEXT', } } } @@ -106,15 +108,23 @@ class TestAbstractParallelRebaselineCommand(BaseTestCase): + """Tests for the base class of multiple rebaseline commands. + + This class only contains test cases for utility methods. Some common + behaviours of various rebaseline commands are tested in TestRebaseline. + """ + command_constructor = AbstractParallelRebaselineCommand def test_builders_to_fetch_from(self): + # pylint: disable=protected-access builders_to_fetch = self.command._builders_to_fetch_from( ['MOCK Win10', 'MOCK Win7 (dbg)(1)', 'MOCK Win7 (dbg)(2)', 'MOCK Win7']) self.assertEqual(builders_to_fetch, {'MOCK Win7', 'MOCK Win10'}) def test_generic_baseline_paths(self): test_baseline_set = TestBaselineSet(self.tool) + # Multiple ports shouldn't produce duplicate baseline paths. test_baseline_set.add('passes/text.html', Build('MOCK Win7')) test_baseline_set.add('passes/text.html', Build('MOCK Win10')) @@ -126,15 +136,35 @@ '/test.checkout/LayoutTests/passes/text-expected.wav', ]) + def test_unstaged_baselines(self): + git = self.tool.git() + git.unstaged_changes = lambda: { + 'third_party/WebKit/LayoutTests/x/foo-expected.txt': 'M', + 'third_party/WebKit/LayoutTests/x/foo-expected.something': '?', + 'third_party/WebKit/LayoutTests/x/foo-expected.png': '?', + 'third_party/WebKit/LayoutTests/x/foo.html': 'M', + 'docs/something.md': '?', + } + self.assertEqual( + self.command.unstaged_baselines(), + [ + '/mock-checkout/third_party/WebKit/LayoutTests/x/foo-expected.png', + '/mock-checkout/third_party/WebKit/LayoutTests/x/foo-expected.txt', + ]) + class TestRebaseline(BaseTestCase): - """Tests for the rebaseline method which is used by multiple rebaseline commands.""" + """Tests for the webkit-patch rebaseline command. + + Also tests some common behaviours of all rebaseline commands. + """ command_constructor = Rebaseline def setUp(self): super(TestRebaseline, self).setUp() self.tool.executive = MockExecutive() + self._setup_mock_build_data() def tearDown(self): super(TestRebaseline, self).tearDown() @@ -148,8 +178,6 @@ }, **kwargs)) def test_rebaseline_test_passes_on_all_builders(self): - self._setup_mock_build_data() - self.tool.buildbot.set_results(Build('MOCK Win7'), LayoutTestResults({ 'tests': { 'userscripts': { @@ -161,8 +189,7 @@ } })) - self._write(self.mac_expectations_path, 'Bug(x) userscripts/first-test.html [ Failure ]\n') - self._write('userscripts/first-test.html', 'Dummy test contents') + self._write(self.test_expectations_path, 'Bug(x) userscripts/first-test.html [ Failure ]\n') test_baseline_set = TestBaselineSet(self.tool) test_baseline_set.add('userscripts/first-test.html', Build('MOCK Win7')) self.command.rebaseline(self.options(), test_baseline_set) @@ -170,9 +197,6 @@ self.assertEqual(self.tool.executive.calls, []) def test_rebaseline_all(self): - self._setup_mock_build_data() - - self._write('userscripts/first-test.html', 'Dummy test contents') test_baseline_set = TestBaselineSet(self.tool) test_baseline_set.add('userscripts/first-test.html', Build('MOCK Win7')) self.command.rebaseline(self.options(), test_baseline_set) @@ -204,8 +228,6 @@ ]) def test_rebaseline_debug(self): - self._setup_mock_build_data() - self._write('userscripts/first-test.html', 'Dummy test contents') test_baseline_set = TestBaselineSet(self.tool) test_baseline_set.add('userscripts/first-test.html', Build('MOCK Win7 (dbg)')) @@ -238,8 +260,6 @@ ]) def test_no_optimize(self): - self._setup_mock_build_data() - self._write('userscripts/first-test.html', 'Dummy test contents') test_baseline_set = TestBaselineSet(self.tool) test_baseline_set.add('userscripts/first-test.html', Build('MOCK Win7')) self.command.rebaseline(self.options(optimize=False), test_baseline_set) @@ -266,8 +286,6 @@ ]) def test_results_directory(self): - self._setup_mock_build_data() - self._write('userscripts/first-test.html', 'Dummy test contents') test_baseline_set = TestBaselineSet(self.tool) test_baseline_set.add('userscripts/first-test.html', Build('MOCK Win7')) self.command.rebaseline(self.options(optimize=False, results_directory='/tmp'), test_baseline_set) @@ -293,25 +311,7 @@ ]], ]) - def test_unstaged_baselines(self): - git = self.tool.git() - git.unstaged_changes = lambda: { - 'third_party/WebKit/LayoutTests/x/foo-expected.txt': 'M', - 'third_party/WebKit/LayoutTests/x/foo-expected.something': '?', - 'third_party/WebKit/LayoutTests/x/foo-expected.png': '?', - 'third_party/WebKit/LayoutTests/x/foo.html': 'M', - 'docs/something.md': '?', - } - self.assertEqual( - self.command.unstaged_baselines(), - [ - '/mock-checkout/third_party/WebKit/LayoutTests/x/foo-expected.png', - '/mock-checkout/third_party/WebKit/LayoutTests/x/foo-expected.txt', - ]) - def test_rebaseline_with_different_port_name(self): - self._setup_mock_build_data() - self._write('userscripts/first-test.html', 'Dummy test contents') test_baseline_set = TestBaselineSet(self.tool) test_baseline_set.add('userscripts/first-test.html', Build('MOCK Win7'), 'test-win-win10') self.command.rebaseline(self.options(), test_baseline_set) @@ -346,15 +346,15 @@ class TestRebaselineUpdatesExpectationsFiles(BaseTestCase): """Tests for the logic related to updating the test expectations file.""" + command_constructor = Rebaseline def setUp(self): super(TestRebaselineUpdatesExpectationsFiles, self).setUp() - self.tool.executive = MockExecutive() def mock_run_command(*args, **kwargs): # pylint: disable=unused-argument return '{"add": [], "remove-lines": [{"test": "userscripts/first-test.html", "port_name": "test-mac-mac10.11"}]}\n' - self.tool.executive.run_command = mock_run_command + self.tool.executive = MockExecutive(run_command_fn=mock_run_command) @staticmethod def options(): @@ -364,34 +364,36 @@ 'results_directory': None }) + # In the following test cases, we use a mock rebaseline-test-internal to + # pretend userscripts/first-test.html can be rebaselined on Mac10.11, so + # the corresponding expectation (if exists) should be updated. + def test_rebaseline_updates_expectations_file(self): self._write( - self.mac_expectations_path, + self.test_expectations_path, ('Bug(x) [ Mac ] userscripts/first-test.html [ Failure ]\n' 'bug(z) [ Linux ] userscripts/first-test.html [ Failure ]\n')) - self._write('userscripts/first-test.html', 'Dummy test contents') self._setup_mock_build_data() test_baseline_set = TestBaselineSet(self.tool) test_baseline_set.add('userscripts/first-test.html', Build('MOCK Mac10.11')) self.command.rebaseline(self.options(), test_baseline_set) - new_expectations = self._read(self.mac_expectations_path) + new_expectations = self._read(self.test_expectations_path) self.assertMultiLineEqual( new_expectations, ('Bug(x) [ Mac10.10 ] userscripts/first-test.html [ Failure ]\n' 'bug(z) [ Linux ] userscripts/first-test.html [ Failure ]\n')) def test_rebaseline_updates_expectations_file_all_platforms(self): - self._write(self.mac_expectations_path, 'Bug(x) userscripts/first-test.html [ Failure ]\n') - self._write('userscripts/first-test.html', 'Dummy test contents') + self._write(self.test_expectations_path, 'Bug(x) userscripts/first-test.html [ Failure ]\n') self._setup_mock_build_data() test_baseline_set = TestBaselineSet(self.tool) test_baseline_set.add('userscripts/first-test.html', Build('MOCK Mac10.11')) self.command.rebaseline(self.options(), test_baseline_set) - new_expectations = self._read(self.mac_expectations_path) + new_expectations = self._read(self.test_expectations_path) self.assertMultiLineEqual( new_expectations, 'Bug(x) [ Linux Mac10.10 Win ] userscripts/first-test.html [ Failure ]\n') @@ -399,80 +401,225 @@ # This test is just like test_rebaseline_updates_expectations_file_all_platforms(), # except that if a particular port happens to SKIP a test in an overrides file, # we count that as passing, and do not think that we still need to rebaseline it. - self._write(self.mac_expectations_path, 'Bug(x) userscripts/first-test.html [ Failure ]\n') + self._write(self.test_expectations_path, 'Bug(x) userscripts/first-test.html [ Failure ]\n') self._write('NeverFixTests', 'Bug(y) [ Android ] userscripts [ WontFix ]\n') - self._write('userscripts/first-test.html', 'Dummy test contents') self._setup_mock_build_data() test_baseline_set = TestBaselineSet(self.tool) test_baseline_set.add('userscripts/first-test.html', Build('MOCK Mac10.11')) self.command.rebaseline(self.options(), test_baseline_set) - new_expectations = self._read(self.mac_expectations_path) + new_expectations = self._read(self.test_expectations_path) self.assertMultiLineEqual( new_expectations, 'Bug(x) [ Linux Mac10.10 Win ] userscripts/first-test.html [ Failure ]\n') def test_rebaseline_handles_skips_in_file(self): - # This test is like test_Rebaseline_handles_platform_skips, except that the + # This test is like test_rebaseline_handles_platform_skips, except that the # Skip is in the same (generic) file rather than a platform file. In this case, # the Skip line should be left unmodified. Note that the first line is now # qualified as "[Linux Mac Win]"; if it was unqualified, it would conflict with # the second line. - self._write(self.mac_expectations_path, - ('Bug(x) [ Linux Mac Win ] userscripts/first-test.html [ Failure ]\n' - 'Bug(y) [ Android ] userscripts/first-test.html [ Skip ]\n')) - self._write('userscripts/first-test.html', 'Dummy test contents') + self._write(self.test_expectations_path, + ('Bug(x) [ Linux Mac ] userscripts/first-test.html [ Failure ]\n' + 'Bug(y) [ Win ] userscripts/first-test.html [ Skip ]\n')) self._setup_mock_build_data() test_baseline_set = TestBaselineSet(self.tool) test_baseline_set.add('userscripts/first-test.html', Build('MOCK Mac10.11')) self.command.rebaseline(self.options(), test_baseline_set) - new_expectations = self._read(self.mac_expectations_path) + new_expectations = self._read(self.test_expectations_path) self.assertMultiLineEqual( new_expectations, - ('Bug(x) [ Linux Mac10.10 Win ] userscripts/first-test.html [ Failure ]\n' - 'Bug(y) [ Android ] userscripts/first-test.html [ Skip ]\n')) + ('Bug(x) [ Linux Mac10.10 ] userscripts/first-test.html [ Failure ]\n' + 'Bug(y) [ Win ] userscripts/first-test.html [ Skip ]\n')) def test_rebaseline_handles_smoke_tests(self): # This test is just like test_rebaseline_handles_platform_skips, except that we check for # a test not being in the SmokeTests file, instead of using overrides files. # If a test is not part of the smoke tests, we count that as passing on ports that only # run smoke tests, and do not think that we still need to rebaseline it. - self._write(self.mac_expectations_path, 'Bug(x) userscripts/first-test.html [ Failure ]\n') + self._write(self.test_expectations_path, 'Bug(x) userscripts/first-test.html [ Failure ]\n') self._write('SmokeTests', 'fast/html/article-element.html') - self._write('userscripts/first-test.html', 'Dummy test contents') self._setup_mock_build_data() test_baseline_set = TestBaselineSet(self.tool) test_baseline_set.add('userscripts/first-test.html', Build('MOCK Mac10.11')) self.command.rebaseline(self.options(), test_baseline_set) - new_expectations = self._read(self.mac_expectations_path) + new_expectations = self._read(self.test_expectations_path) self.assertMultiLineEqual( new_expectations, 'Bug(x) [ Linux Mac10.10 Win ] userscripts/first-test.html [ Failure ]\n') + # In the following test cases, the tests produce no outputs (e.g. clean + # passing reftests, skipped tests, etc.). Hence, there are no baselines to + # fetch (empty baseline suffixes), and rebaseline-test-internal wouldn't be + # called. However, in some cases the expectations still need to be updated. + + def test_rebaseline_keeps_skip_expectations(self): + # [ Skip ], [ WontFix ] expectations should always be kept. + self._write(self.test_expectations_path, + ('Bug(x) [ Mac ] userscripts/skipped-test.html [ WontFix ]\n' + 'Bug(y) [ Win ] userscripts/skipped-test.html [ Skip ]\n')) + self._write('userscripts/skipped-test.html', 'Dummy test contents') + self.tool.buildbot.set_results(Build('MOCK Mac10.11'), LayoutTestResults({ + 'tests': { + 'userscripts': { + 'skipped-test.html': { + 'expected': 'WONTFIX', + 'actual': 'SKIP', + } + } + } + })) + self.tool.buildbot.set_results(Build('MOCK Win7'), LayoutTestResults({ + 'tests': { + 'userscripts': { + 'skipped-test.html': { + 'expected': 'SKIP', + 'actual': 'SKIP', + } + } + } + })) + test_baseline_set = TestBaselineSet(self.tool) + test_baseline_set.add('userscripts/skipped-test.html', Build('MOCK Mac10.11')) + test_baseline_set.add('userscripts/skipped-test.html', Build('MOCK Win7')) + + self.command.rebaseline(self.options(), test_baseline_set) + + new_expectations = self._read(self.test_expectations_path) + self.assertMultiLineEqual( + new_expectations, + ('Bug(x) [ Mac ] userscripts/skipped-test.html [ WontFix ]\n' + 'Bug(y) [ Win ] userscripts/skipped-test.html [ Skip ]\n')) + self.assertEqual(self.tool.executive.calls, []) + + def test_rebaseline_keeps_flaky_expectations(self): + # Flaky expectations should be kept even if the test passes. + self._write(self.test_expectations_path, 'Bug(x) userscripts/flaky-test.html [ Pass Failure ]\n') + self._write('userscripts/flaky-test.html', 'Dummy test contents') + self.tool.buildbot.set_results(Build('MOCK Mac10.11'), LayoutTestResults({ + 'tests': { + 'userscripts': { + 'flaky-test.html': { + 'expected': 'PASS FAIL', + 'actual': 'PASS', + } + } + } + })) + test_baseline_set = TestBaselineSet(self.tool) + test_baseline_set.add('userscripts/flaky-test.html', Build('MOCK Mac10.11')) + + self.command.rebaseline(self.options(), test_baseline_set) + + new_expectations = self._read(self.test_expectations_path) + self.assertMultiLineEqual( + new_expectations, 'Bug(x) userscripts/flaky-test.html [ Pass Failure ]\n') + self.assertEqual(self.tool.executive.calls, []) + + def test_rebaseline_test_passes_unexpectedly(self): + # The test passes without any output. Its expectation should be updated + # without calling rebaseline-test-internal. + self._write(self.test_expectations_path, 'Bug(foo) userscripts/all-pass.html [ Failure ]\n') + self._write('userscripts/all-pass.html', 'Dummy test contents') + test_baseline_set = TestBaselineSet(self.tool) + self.tool.buildbot.set_results(Build('MOCK Mac10.11'), LayoutTestResults({ + 'tests': { + 'userscripts': { + 'all-pass.html': { + 'expected': 'FAIL', + 'actual': 'PASS', + 'is_unexpected': True + } + } + } + })) + test_baseline_set.add('userscripts/all-pass.html', Build('MOCK Mac10.11')) + + self.command.rebaseline(self.options(), test_baseline_set) + + new_expectations = self._read(self.test_expectations_path) + self.assertMultiLineEqual( + new_expectations, 'Bug(foo) [ Linux Mac10.10 Win ] userscripts/all-pass.html [ Failure ]\n') + self.assertEqual(self.tool.executive.calls, []) + + def test_rebaseline_test_passes_unexpectedly_everywhere(self): + # Similar to test_rebaseline_test_passes_unexpectedly, except that the + # test passes on all ports. + self._write(self.test_expectations_path, 'Bug(foo) userscripts/all-pass.html [ Failure ]\n') + self._write('userscripts/all-pass.html', 'Dummy test contents') + test_baseline_set = TestBaselineSet(self.tool) + for builder in ['MOCK Win7', 'MOCK Win10', 'MOCK Mac10.10', 'MOCK Mac10.11', 'MOCK Precise', 'MOCK Trusty']: + self.tool.buildbot.set_results(Build(builder), LayoutTestResults({ + 'tests': { + 'userscripts': { + 'all-pass.html': { + 'expected': 'FAIL', + 'actual': 'PASS', + 'is_unexpected': True + } + } + } + })) + test_baseline_set.add('userscripts/all-pass.html', Build(builder)) + + self.command.rebaseline(self.options(), test_baseline_set) + + new_expectations = self._read(self.test_expectations_path) + self.assertMultiLineEqual(new_expectations, '') + self.assertEqual(self.tool.executive.calls, []) + + def test_rebaseline_test_passes_unexpectedly_but_on_another_port(self): + # Similar to test_rebaseline_test_passes_unexpectedly, except that the + # build was run on a different port than the port we are rebaselining + # (possible when rebaseline-cl --fill-missing), in which case we don't + # update the expectations. + self._write(self.test_expectations_path, 'Bug(foo) userscripts/all-pass.html [ Failure ]\n') + self._write('userscripts/all-pass.html', 'Dummy test contents') + test_baseline_set = TestBaselineSet(self.tool) + self.tool.buildbot.set_results(Build('MOCK Mac10.11'), LayoutTestResults({ + 'tests': { + 'userscripts': { + 'all-pass.html': { + 'expected': 'FAIL', + 'actual': 'PASS', + 'is_unexpected': True + } + } + } + })) + test_baseline_set.add('userscripts/all-pass.html', Build('MOCK Mac10.11'), 'MOCK Mac10.10') + + self.command.rebaseline(self.options(), test_baseline_set) + + new_expectations = self._read(self.test_expectations_path) + self.assertMultiLineEqual( + new_expectations, 'Bug(foo) userscripts/all-pass.html [ Failure ]\n') + self.assertEqual(self.tool.executive.calls, []) + class TestRebaselineExecute(BaseTestCase): """Tests for the main execute function of the webkit-patch rebaseline command.""" command_constructor = Rebaseline - def test_rebaseline(self): - self.command._builders_to_pull_from = lambda: ['MOCK Win7'] - - self._write('userscripts/first-test.html', 'test data') - - self._zero_out_test_expectations() - self._setup_mock_build_data() - options = optparse.Values({ + @staticmethod + def options(): + return optparse.Values({ 'results_directory': False, 'optimize': False, 'builders': None, 'suffixes': 'txt,png', 'verbose': True }) - self.command.execute(options, ['userscripts/first-test.html'], self.tool) + + def test_rebaseline(self): + # pylint: disable=protected-access + self.command._builders_to_pull_from = lambda: ['MOCK Win7'] + self._setup_mock_build_data() + self.command.execute(self.options(), ['userscripts/first-test.html'], self.tool) self.assertEqual( self.tool.executive.calls, @@ -495,20 +642,11 @@ ]) def test_rebaseline_directory(self): + # pylint: disable=protected-access self.command._builders_to_pull_from = lambda: ['MOCK Win7'] - self._write('userscripts/first-test.html', 'test data') - self._write('userscripts/second-test.html', 'test data') - self._setup_mock_build_data() - options = optparse.Values({ - 'results_directory': False, - 'optimize': False, - 'builders': None, - 'suffixes': 'txt,png', - 'verbose': True - }) - self.command.execute(options, ['userscripts'], self.tool) + self.command.execute(self.options(), ['userscripts'], self.tool) self.assertEqual( self.tool.executive.calls, @@ -551,10 +689,14 @@ class TestRebaselineExpectations(BaseTestCase): + """Tests for the webkit-patch rebaseline-expectations command.""" + command_constructor = RebaselineExpectations def setUp(self): super(TestRebaselineExpectations, self).setUp() + self.tool.executive = MockExecutive() + self._zero_out_test_expectations() @staticmethod def options(): @@ -567,15 +709,7 @@ 'results_directory': None }) - def _write_test_file(self, port, path, contents): - abs_path = self.tool.filesystem.join(port.layout_tests_dir(), path) - self.tool.filesystem.write_text_file(abs_path, contents) - def test_rebaseline_expectations(self): - self._zero_out_test_expectations() - - self.tool.executive = MockExecutive() - for builder in ['MOCK Mac10.10', 'MOCK Mac10.11']: self.tool.buildbot.set_results(Build(builder), LayoutTestResults({ 'tests': { @@ -662,10 +796,6 @@ ]) def test_rebaseline_expectations_reftests(self): - self._zero_out_test_expectations() - - self.tool.executive = MockExecutive() - for builder in ['MOCK Mac10.10', 'MOCK Mac10.11']: self.tool.buildbot.set_results(Build(builder), LayoutTestResults({ 'tests': { @@ -731,7 +861,6 @@ ]) def test_rebaseline_expectations_noop(self): - self._zero_out_test_expectations() self.command.execute(self.options(), [], self.tool) self.assertEqual(self.tool.filesystem.written_files, {}) @@ -739,63 +868,23 @@ # TODO(qyearsley): Fix or remove this test method. # This tests that any tests marked as REBASELINE in the overrides are found, but # that the overrides do not get written into the main file. - self._zero_out_test_expectations() - self._write(self.mac_expectations_path, '') + self._write(self.test_expectations_path, '') self.mac_port.expectations_dict = lambda: { - self.mac_expectations_path: '', + self.test_expectations_path: '', 'overrides': ('Bug(x) userscripts/another-test.html [ Failure Rebaseline ]\n' 'Bug(y) userscripts/test.html [ Crash ]\n')} self._write('/userscripts/another-test.html', '') self.assertDictEqual(self.command._tests_to_rebaseline(self.mac_port), {'userscripts/another-test.html': set(['png', 'txt', 'wav'])}) - self.assertEqual(self._read(self.mac_expectations_path), '') + self.assertEqual(self._read(self.test_expectations_path), '') def test_rebaseline_without_other_expectations(self): self._write('userscripts/another-test.html', 'Dummy test contents') - self._write(self.mac_expectations_path, 'Bug(x) userscripts/another-test.html [ Rebaseline ]\n') + self._write(self.test_expectations_path, 'Bug(x) userscripts/another-test.html [ Rebaseline ]\n') self.assertEqual(self.command._tests_to_rebaseline(self.mac_port), ['userscripts/another-test.html']) - def test_rebaseline_test_passes_everywhere(self): - test_port = self.tool.port_factory.get('test') - - for builder in ['MOCK Mac10.10', 'MOCK Mac10.11']: - self.tool.buildbot.set_results(Build(builder), LayoutTestResults({ - 'tests': { - 'fast': { - 'dom': { - 'prototype-taco.html': { - 'expected': 'FAIL', - 'actual': 'PASS', - 'is_unexpected': True - } - } - } - } - })) - - self.tool.filesystem.write_text_file( - test_port.path_to_generic_test_expectations_file(), - 'Bug(foo) fast/dom/prototype-taco.html [ Rebaseline ]\n') - - self._write_test_file(test_port, 'fast/dom/prototype-taco.html', 'Dummy test contents') - - self.tool.executive = MockLineRemovingExecutive() - - self.tool.builders = BuilderList({ - 'MOCK Mac10.10': {'port_name': 'test-mac-mac10.10', 'specifiers': ['Mac10.10', 'Release']}, - 'MOCK Mac10.11': {'port_name': 'test-mac-mac10.11', 'specifiers': ['Mac10.11', 'Release']}, - }) - - self.command.execute(self.options(), [], self.tool) - self.assertEqual(self.tool.executive.calls, []) - - # The mac ports should both be removed since they're the only ones in the builder list. - self.assertEqual( - self.tool.filesystem.read_text_file(test_port.path_to_generic_test_expectations_file()), - 'Bug(foo) [ Linux Win ] fast/dom/prototype-taco.html [ Rebaseline ]\n') - def test_rebaseline_missing(self): self.tool.buildbot.set_results(Build('MOCK Mac10.10'), LayoutTestResults({ 'tests': { @@ -884,27 +973,6 @@ ]) -class MockLineRemovingExecutive(MockExecutive): - - def run_in_parallel(self, commands): - assert len(commands) - - num_previous_calls = len(self.calls) - command_outputs = [] - for cmd_line, cwd in commands: - out = self.run_command(cmd_line, cwd=cwd) - if 'rebaseline-test-internal' in cmd_line: - test = cmd_line[cmd_line.index('--test') + 1] - port_name = cmd_line[cmd_line.index('--port-name') + 1] - out = json.dumps({'remove-lines': [{'test': test, 'port_name': port_name}]}) - command_outputs.append([0, out, '']) - - new_calls = self.full_calls[num_previous_calls:] - self.full_calls = self.full_calls[:num_previous_calls] - self.full_calls.append(new_calls) - return command_outputs - - class TestBaselineSetTest(unittest.TestCase): def setUp(self):
diff --git a/third_party/WebKit/public/platform/web_feature.mojom b/third_party/WebKit/public/platform/web_feature.mojom index 497c720d..24481b35 100644 --- a/third_party/WebKit/public/platform/web_feature.mojom +++ b/third_party/WebKit/public/platform/web_feature.mojom
@@ -1832,6 +1832,14 @@ kV8RTCRtpSender_ReplaceTrack_Method = 2323, kInputTypeFileSecureOriginOpenChooser = 2324, kInputTypeFileInsecureOriginOpenChooser = 2325, + kBasicShapeEllipseNoRadius = 2326, + kBasicShapeEllipseOneRadius = 2327, + kBasicShapeEllipseTwoRadius = 2328, + kTemporalInputTypeChooserByTrustedClick = 2329, + kTemporalInputTypeChooserByUntrustedClick = 2330, + kTemporalInputTypeIgnoreUntrustedClick = 2331, + kColorInputTypeChooserByTrustedClick = 2332, + kColorInputTypeChooserByUntrustedClick = 2333, // Add new features immediately above this line. Don't change assigned // numbers of any item, and don't reuse removed slots.
diff --git a/third_party/googletest/BUILD.gn b/third_party/googletest/BUILD.gn index 2ace19b..4529c05 100644 --- a/third_party/googletest/BUILD.gn +++ b/third_party/googletest/BUILD.gn
@@ -15,6 +15,12 @@ # and other systems, we tell gtest to always use its internal engine. "GTEST_HAS_POSIX_RE=0", "GTEST_LANG_CXX11=1", + + # ::testing::Combine, which is heavily used in Chromium, is gated on + # tr1::tuple. Upstream avoids using tr1::tuple on Visual Studio 2017+, + # because it causes warnings. We'll take (and ignore) the warnings to keep + # our ::testing::Combine. + "GTEST_HAS_TR1_TUPLE=1", ] # Gtest headers need to be able to find themselves.
diff --git a/third_party/zlib/deflate.c b/third_party/zlib/deflate.c index aa0c9c6..6fe9c7e 100644 --- a/third_party/zlib/deflate.c +++ b/third_party/zlib/deflate.c
@@ -87,7 +87,7 @@ local void lm_init OF((deflate_state *s)); local void putShortMSB OF((deflate_state *s, uInt b)); local void flush_pending OF((z_streamp strm)); -unsigned ZLIB_INTERNAL read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); +unsigned ZLIB_INTERNAL deflate_read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); #ifdef ASMV # pragma message("Assembler code may have bugs -- use at your own risk") void match_init OF((void)); /* asm code initialization */ @@ -429,7 +429,7 @@ /* when using zlib wrappers, compute Adler-32 for provided dictionary */ if (wrap == 1) strm->adler = adler32(strm->adler, dictionary, dictLength); - s->wrap = 0; /* avoid computing Adler-32 in read_buf */ + s->wrap = 0; /* avoid computing Adler-32 in deflate_read_buf */ /* if dictionary would fill window, just replace the history */ if (dictLength >= s->w_size) { @@ -756,7 +756,7 @@ * Flush as much pending output as possible. All deflate() output, except for * some deflate_stored() output, goes through this function so some * applications may wish to modify it to avoid allocating a large - * strm->next_out buffer and copying into it. (See also read_buf()). + * strm->next_out buffer and copying into it. (See also deflate_read_buf()). */ local void flush_pending(strm) z_streamp strm; @@ -1193,7 +1193,7 @@ * allocating a large strm->next_in buffer and copying from it. * (See also flush_pending()). */ -ZLIB_INTERNAL unsigned read_buf(strm, buf, size) +ZLIB_INTERNAL unsigned deflate_read_buf(strm, buf, size) z_streamp strm; Bytef *buf; unsigned size; @@ -1576,7 +1576,7 @@ */ Assert(more >= 2, "more < 2"); - n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more); + n = deflate_read_buf(s->strm, s->window + s->strstart + s->lookahead, more); s->lookahead += n; /* Initialize the hash value now that we have some input: */ @@ -1765,7 +1765,7 @@ * the check value. */ if (len) { - read_buf(s->strm, s->strm->next_out, len); + deflate_read_buf(s->strm, s->strm->next_out, len); s->strm->next_out += len; s->strm->avail_out -= len; s->strm->total_out += len; @@ -1828,7 +1828,7 @@ if (have > s->strm->avail_in) have = s->strm->avail_in; if (have) { - read_buf(s->strm, s->window + s->strstart, have); + deflate_read_buf(s->strm, s->window + s->strstart, have); s->strstart += have; } if (s->high_water < s->strstart)
diff --git a/third_party/zlib/fill_window_sse.c b/third_party/zlib/fill_window_sse.c index 949ccce..ed1e5d1 100644 --- a/third_party/zlib/fill_window_sse.c +++ b/third_party/zlib/fill_window_sse.c
@@ -26,7 +26,7 @@ }\ }\ -extern int read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); +extern int deflate_read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); void fill_window_sse(deflate_state *s) { @@ -117,7 +117,9 @@ */ Assert(more >= 2, "more < 2"); - n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more); + n = deflate_read_buf(s->strm, + s->window + s->strstart + s->lookahead, + more); s->lookahead += n; /* Initialize the hash value now that we have some input: */
diff --git a/third_party/zlib/names.h b/third_party/zlib/names.h index 55a8a3f..6252b02 100644 --- a/third_party/zlib/names.h +++ b/third_party/zlib/names.h
@@ -160,7 +160,7 @@ #define crc_fold_init Cr_z_crc_fold_init #define crc_reset Cr_z_crc_reset #define fill_window_sse Cr_z_fill_window_sse -#define read_buf Cr_z_read_buf +#define deflate_read_buf Cr_z_deflate_read_buf #define x86_check_features Cr_z_x86_check_features /* FIXME: x86_cpu_enable_ssse3 wasn't part of the simd.patch */ #define x86_cpu_enable_ssse3 Cr_z_x86_cpu_enable_ssse3
diff --git a/third_party/zlib/patches/0001-simd.patch b/third_party/zlib/patches/0001-simd.patch index 75828d2..1fbf195 100644 --- a/third_party/zlib/patches/0001-simd.patch +++ b/third_party/zlib/patches/0001-simd.patch
@@ -559,7 +559,7 @@ local void putShortMSB OF((deflate_state *s, uInt b)); local void flush_pending OF((z_streamp strm)); -local unsigned read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); -+unsigned ZLIB_INTERNAL read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); ++unsigned ZLIB_INTERNAL deflate_read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); #ifdef ASMV # pragma message("Assembler code may have bugs -- use at your own risk") void match_init OF((void)); /* asm code initialization */ @@ -703,7 +703,7 @@ * (See also flush_pending()). */ -local unsigned read_buf(strm, buf, size) -+ZLIB_INTERNAL unsigned read_buf(strm, buf, size) ++ZLIB_INTERNAL unsigned deflate_read_buf(strm, buf, size) z_streamp strm; Bytef *buf; unsigned size; @@ -859,7 +859,7 @@ index 000000000000..949ccce1ba9c --- /dev/null +++ b/fill_window_sse.c -@@ -0,0 +1,175 @@ +@@ -0,0 +1,177 @@ +/* + * Fill Window with SSE2-optimized hash shifting + * @@ -888,7 +888,7 @@ + }\ + }\ + -+extern int read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); ++extern int deflate_read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); + +void fill_window_sse(deflate_state *s) +{ @@ -979,7 +979,9 @@ + */ + Assert(more >= 2, "more < 2"); + -+ n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more); ++ n = deflate_read_buf(s->strm, ++ s->window + s->strstart + s->lookahead, ++ more); + s->lookahead += n; + + /* Initialize the hash value now that we have some input: */ @@ -1051,7 +1053,7 @@ +#define crc_fold_init Cr_z_crc_fold_init +#define crc_reset Cr_z_crc_reset +#define fill_window_sse Cr_z_fill_window_sse -+#define read_buf Cr_z_read_buf ++#define deflate_read_buf Cr_z_deflate_read_buf +#define x86_check_features Cr_z_x86_check_features +#define x86_cpu_enable_simd Cr_z_x86_cpu_enable_simd +
diff --git a/third_party/zlib/patches/0005-adler32-simd.patch b/third_party/zlib/patches/0005-adler32-simd.patch index 7034389e..9242b1d7 100644 --- a/third_party/zlib/patches/0005-adler32-simd.patch +++ b/third_party/zlib/patches/0005-adler32-simd.patch
@@ -603,7 +603,7 @@ +++ b/third_party/zlib/names.h @@ -162,6 +162,13 @@ #define fill_window_sse Cr_z_fill_window_sse - #define read_buf Cr_z_read_buf + #define deflate_read_buf Cr_z_deflate_read_buf #define x86_check_features Cr_z_x86_check_features +/* FIXME: x86_cpu_enable_ssse3 wasn't part of the simd.patch */ +#define x86_cpu_enable_ssse3 Cr_z_x86_cpu_enable_ssse3
diff --git a/tools/binary_size/libsupersize/testdata/test.map b/tools/binary_size/libsupersize/testdata/test.map index 7e124bb..a855747 100644 --- a/tools/binary_size/libsupersize/testdata/test.map +++ b/tools/binary_size/libsupersize/testdata/test.map
@@ -162,8 +162,8 @@ .init_array 0x02ddc60c 0x4 obj/base/base/page_allocator.o .fini_array 0x02ddc6f4 0x8 - .fini_array 0x02ddc6f4 0x4 ../../third_party/android_tools/ndk/platforms/android-16/arch-arm/usr/lib/crtbegin_so.o - .fini_array 0x02ddc6f8 0x4 ../../third_party/android_tools/ndk/platforms/android-16/arch-arm/usr/lib/crtend_so.o + .fini_array 0x02ddc6f4 0x4 ../../third_party/android_ndk/platforms/android-16/arch-arm/usr/lib/crtbegin_so.o + .fini_array 0x02ddc6f8 0x4 ../../third_party/android_ndk/platforms/android-16/arch-arm/usr/lib/crtend_so.o .dynamic 0x02ddc6fc 0x130 ** dynamic 0x02ddc6fc 0x130
diff --git a/tools/clang/scripts/update.py b/tools/clang/scripts/update.py index b6c0a3cf..72a3135 100755 --- a/tools/clang/scripts/update.py +++ b/tools/clang/scripts/update.py
@@ -70,7 +70,7 @@ os.path.join(LLVM_DIR, '..', 'llvm-build', 'cr_build_revision')) VERSION = '6.0.0' ANDROID_NDK_DIR = os.path.join( - CHROMIUM_DIR, 'third_party', 'android_tools', 'ndk') + CHROMIUM_DIR, 'third_party', 'android_ndk') # URL for pre-built binaries. CDS_URL = os.environ.get('CDS_CLANG_BUCKET_OVERRIDE',
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index b23ae13..8b477f9 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -3031,6 +3031,7 @@ <int value="3" label="Source died in transit"/> <int value="4" label="Blob dereferenced while building"/> <int value="5" label="Referenced blob broken"/> + <int value="6" label="Referenced file unavailable"/> </enum> <enum name="BlobStorageDiskSpaceAdjustment"> @@ -7562,6 +7563,11 @@ <int value="200" label="2.0: Fastest"/> </enum> +<enum name="CrosSelectToSpeakStartSpeechMethod"> + <int value="0" label="Hold Search and click or drag"/> + <int value="1" label="Ctrl + S to read selection"/> +</enum> + <enum name="CrosShelfClickTarget"> <obsolete> Deprecated as of 12/2013. Default pinned apps trial is finished. @@ -17375,6 +17381,14 @@ <int value="2323" label="V8RTCRtpSender_ReplaceTrack_Method"/> <int value="2324" label="InputTypeFileSecureOriginOpenChooser"/> <int value="2325" label="InputTypeFileInsecureOriginOpenChooser"/> + <int value="2326" label="BasicShapeEllipseNoRadius"/> + <int value="2327" label="BasicShapeEllipseOneRadius"/> + <int value="2328" label="BasicShapeEllipseTwoRadius"/> + <int value="2329" label="TemporalInputTypeChooserByTrustedClick"/> + <int value="2330" label="TemporalInputTypeChooserByUntrustedClick"/> + <int value="2331" label="TemporalInputTypeIgnoreUntrustedClick"/> + <int value="2332" label="ColorInputTypeChooserByTrustedClick"/> + <int value="2333" label="ColorInputTypeChooserByUntrustedClick"/> </enum> <enum name="FeedbackSource"> @@ -22745,9 +22759,9 @@ </enum> <enum name="InstantTethering_FeatureState"> - <int value="0" label="Other or unknown"/> + <int value="0" label="Shut down (deprecated)"/> <int value="1" label="BLE advertising not supported"/> - <int value="2" label="Screen locked"/> + <int value="2" label="Screen locked (deprecated)"/> <int value="3" label="No available hosts"/> <int value="4" label="Cellular disabled"/> <int value="5" label="Prohibited"/> @@ -22756,6 +22770,7 @@ <int value="8" label="Enabled"/> <int value="9" label="BLE not present"/> <int value="10" label="WiFi not present"/> + <int value="11" label="Suspended"/> </enum> <enum name="InstantTethering_HostScanResult"> @@ -24984,7 +24999,6 @@ <int value="-1581724231" label="ModalPermissionPrompts:enabled"/> <int value="-1580376019" label="ShowAllDialogsWithViewsToolkit:enabled"/> <int value="-1578295753" label="UserMediaScreenCapturing:disabled"/> - <int value="-1575984706" label="gl-composited-overlay-candidate-quad-border"/> <int value="-1575554415" label="AndroidPaymentAppsFilter:enabled"/> <int value="-1575430234" label="DontPrefetchLibraries:disabled"/> <int value="-1575375861" label="enable-captive-portal-random-url"/> @@ -34759,6 +34773,15 @@ label="Timestamp shown indicating the page was just updated on reload"/> </enum> +<enum name="PreviewsType"> + <int value="0" label="None"/> + <int value="1" label="Offline"/> + <int value="2" label="LoFi"/> + <int value="3" label="LitePage"/> + <int value="4" label="AMP Redirection"/> + <int value="5" label="NoScript"/> +</enum> + <enum name="PreviewsUserOptedOut"> <int value="0" label="The user did not choose to reload the full page."/> <int value="1" label="The user chose to reload the full page."/>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index 1791698..aa3d50e9 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -247,6 +247,16 @@ </summary> </histogram> +<histogram name="Accessibility.CrosSelectToSpeak.StartSpeechMethod" + enum="CrosSelectToSpeakStartSpeechMethod"> + <owner>katie@chromium.org</owner> + <summary> + A user may activate Select-to-Speak by holding down 'search' and clicking or + dragging a region with the mouse, or by highlighting an area and using + search + s to read just the highlighted area. Track the methods here. + </summary> +</histogram> + <histogram name="Accessibility.CrosSelectToSpeak.WordHighlighting" enum="BooleanEnabled"> <owner>katie@chromium.org</owner> @@ -67353,6 +67363,14 @@ </summary> </histogram> +<histogram name="Previews.CacheControlNoTransform.BlockedPreview" + enum="PreviewsType"> + <owner>dougarnett@chromium.org</owner> + <summary> + Blocked previews due to Cache-Control:no-transform directive. + </summary> +</histogram> + <histogram name="Previews.ContentLength" units="KB"> <owner>ryansturm@chromium.org</owner> <summary>
diff --git a/tools/traffic_annotation/README.md b/tools/traffic_annotation/README.md index 48ae6e7..b7b2172 100644 --- a/tools/traffic_annotation/README.md +++ b/tools/traffic_annotation/README.md
@@ -96,5 +96,4 @@ and cc the people listed in OWNERS; they'll be on the hook to rebuild and re-enable the test. -CLANG_REVISION = '317263' -LASTCHANGE=9bbd081d6401276e8173cf0e33b9f93cba1c1b01-refs/heads/master@{#517774} +CLANG_REVISION = '321529'
diff --git a/tools/traffic_annotation/bin/linux64/traffic_annotation_auditor.sha1 b/tools/traffic_annotation/bin/linux64/traffic_annotation_auditor.sha1 index a2ccbd7..24925625 100644 --- a/tools/traffic_annotation/bin/linux64/traffic_annotation_auditor.sha1 +++ b/tools/traffic_annotation/bin/linux64/traffic_annotation_auditor.sha1
@@ -1 +1 @@ -72ab0535dfab803324e56f2942a6695f1c1cae70 \ No newline at end of file +7079468e173e4f66b088efa6f441a1c7b946e373 \ No newline at end of file
diff --git a/tools/traffic_annotation/scripts/check_annotations.py b/tools/traffic_annotation/scripts/check_annotations.py index 9b2d042..a6bf70fd 100755 --- a/tools/traffic_annotation/scripts/check_annotations.py +++ b/tools/traffic_annotation/scripts/check_annotations.py
@@ -17,12 +17,7 @@ # If this test starts failing, please set TEST_IS_ENABLED to "False" and file a # bug to get this reenabled, and cc the people listed in # //tools/traffic_annotation/OWNERS. - -# TODO(crbug.com/788035) - this test currently takes up to 20 minutes to -# execute even on linux_chromium_rel_ng; we need to figure out how to make -# it be much faster before enabling it anywhere in the CQ. -# TEST_IS_ENABLED = sys.platform != 'win32' -TEST_IS_ENABLED = False +TEST_IS_ENABLED = sys.platform != 'win32' class NetworkTrafficAnnotationChecker():
diff --git a/tools/v8_context_snapshot/BUILD.gn b/tools/v8_context_snapshot/BUILD.gn index 47de741..d6691a5 100644 --- a/tools/v8_context_snapshot/BUILD.gn +++ b/tools/v8_context_snapshot/BUILD.gn
@@ -34,6 +34,9 @@ public_deps = [ ":generate_v8_context_snapshot", ] + data = [ + "$root_out_dir/v8_context_snapshot.bin", + ] } }
diff --git a/ui/accessibility/BUILD.gn b/ui/accessibility/BUILD.gn index 495756c..b5a6c77 100644 --- a/ui/accessibility/BUILD.gn +++ b/ui/accessibility/BUILD.gn
@@ -56,10 +56,10 @@ "platform/ax_android_constants.h", "platform/ax_platform_node.cc", "platform/ax_platform_node.h", - "platform/ax_platform_unique_id.cc", - "platform/ax_platform_unique_id.h", "platform/ax_snapshot_node_android_platform.cc", "platform/ax_snapshot_node_android_platform.h", + "platform/ax_unique_id.cc", + "platform/ax_unique_id.h", ] if (has_native_accessibility) { @@ -181,6 +181,7 @@ "platform/ax_platform_node_unittest.cc", "platform/ax_platform_node_unittest.h", "platform/ax_platform_node_win_unittest.cc", + "platform/ax_unique_id_unittest.cc", ] deps = [
diff --git a/ui/accessibility/ax_position.h b/ui/accessibility/ax_position.h index 7f8af93..8c263dff 100644 --- a/ui/accessibility/ax_position.h +++ b/ui/accessibility/ax_position.h
@@ -683,19 +683,19 @@ return text_position; } - const std::vector<int32_t> word_starts = + const std::vector<int32_t> updated_word_starts = text_position->GetWordStartOffsets(); - DCHECK(!word_starts.empty()); - text_position->text_offset_ = static_cast<int>(word_starts[0]); + DCHECK(!updated_word_starts.empty()); + text_position->text_offset_ = static_cast<int>(updated_word_starts[0]); } else { text_position->text_offset_ = static_cast<int>(*iterator); text_position->affinity_ = AX_TEXT_AFFINITY_DOWNSTREAM; } - // If the word boundary is in the same subtree, return a position rooted at - // the current position. - // This is necessary because we don't want to return any position that might - // be in the shadow DOM if the original position was not. + // If the word boundary is in the same subtree, return a position rooted + // at the current position. This is necessary because we don't want to + // return any position that might be in the shadow DOM if the original + // position was not. AXPositionInstance common_ancestor = text_position->LowestCommonAncestor(*this); if (GetAnchor() == common_ancestor->GetAnchor()) { @@ -748,19 +748,20 @@ return text_position; } - const std::vector<int32_t> word_starts = + const std::vector<int32_t> updated_word_starts = text_position->GetWordStartOffsets(); - DCHECK(!word_starts.empty()); - text_position->text_offset_ = static_cast<int>(*(word_starts.end() - 1)); + DCHECK(!updated_word_starts.empty()); + text_position->text_offset_ = + static_cast<int>(*(updated_word_starts.end() - 1)); } else { text_position->text_offset_ = static_cast<int>(*(--iterator)); text_position->affinity_ = AX_TEXT_AFFINITY_DOWNSTREAM; } - // If the word boundary is in the same subtree, return a position rooted at - // the current position. - // This is necessary because we don't want to return any position that might - // be in the shadow DOM if the original position was not. + // If the word boundary is in the same subtree, return a position rooted + // at the current position. This is necessary because we don't want to + // return any position that might be in the shadow DOM if the original + // position was not. AXPositionInstance common_ancestor = text_position->LowestCommonAncestor(*this); if (GetAnchor() == common_ancestor->GetAnchor()) { @@ -811,18 +812,19 @@ return text_position; } - const std::vector<int32_t> word_ends = text_position->GetWordEndOffsets(); - DCHECK(!word_ends.empty()); - text_position->text_offset_ = static_cast<int>(word_ends[0]); + const std::vector<int32_t> updated_word_ends = + text_position->GetWordEndOffsets(); + DCHECK(!updated_word_ends.empty()); + text_position->text_offset_ = static_cast<int>(updated_word_ends[0]); } else { text_position->text_offset_ = static_cast<int>(*iterator); text_position->affinity_ = AX_TEXT_AFFINITY_DOWNSTREAM; } - // If the word boundary is in the same subtree, return a position rooted at - // the current position. - // This is necessary because we don't want to return any position that might - // be in the shadow DOM if the original position was not. + // If the word boundary is in the same subtree, return a position rooted + // at the current position. This is necessary because we don't want to + // return any position that might be in the shadow DOM if the original + // position was not. AXPositionInstance common_ancestor = text_position->LowestCommonAncestor(*this); if (GetAnchor() == common_ancestor->GetAnchor()) { @@ -875,18 +877,20 @@ return text_position; } - const std::vector<int32_t> word_ends = text_position->GetWordEndOffsets(); - DCHECK(!word_ends.empty()); - text_position->text_offset_ = static_cast<int>(*(word_ends.end() - 1)); + const std::vector<int32_t> updated_word_ends = + text_position->GetWordEndOffsets(); + DCHECK(!updated_word_ends.empty()); + text_position->text_offset_ = + static_cast<int>(*(updated_word_ends.end() - 1)); } else { text_position->text_offset_ = static_cast<int>(*(--iterator)); text_position->affinity_ = AX_TEXT_AFFINITY_DOWNSTREAM; } - // If the word boundary is in the same subtree, return a position rooted at - // the current position. - // This is necessary because we don't want to return any position that might - // be in the shadow DOM if the original position was not. + // If the word boundary is in the same subtree, return a position rooted + // at the current position. This is necessary because we don't want to + // return any position that might be in the shadow DOM if the original + // position was not. AXPositionInstance common_ancestor = text_position->LowestCommonAncestor(*this); if (GetAnchor() == common_ancestor->GetAnchor()) {
diff --git a/ui/accessibility/platform/ax_android_constants.cc b/ui/accessibility/platform/ax_android_constants.cc index 365fd9c..77e9bdc7 100644 --- a/ui/accessibility/platform/ax_android_constants.cc +++ b/ui/accessibility/platform/ax_android_constants.cc
@@ -15,6 +15,7 @@ const char kAXEditTextClassname[] = "android.widget.EditText"; const char kAXGridViewClassname[] = "android.widget.GridView"; const char kAXImageClassname[] = "android.widget.Image"; +const char kAXImageButtonClassname[] = "android.widget.ImageButton"; const char kAXImageViewClassname[] = "android.widget.ImageView"; const char kAXListViewClassname[] = "android.widget.ListView"; const char kAXMenuItemClassname[] = "android.view.MenuItem";
diff --git a/ui/accessibility/platform/ax_android_constants.h b/ui/accessibility/platform/ax_android_constants.h index 2312218..f1b70ff 100644 --- a/ui/accessibility/platform/ax_android_constants.h +++ b/ui/accessibility/platform/ax_android_constants.h
@@ -21,6 +21,7 @@ AX_EXPORT extern const char kAXEditTextClassname[]; AX_EXPORT extern const char kAXGridViewClassname[]; AX_EXPORT extern const char kAXImageClassname[]; +AX_EXPORT extern const char kAXImageButtonClassname[]; AX_EXPORT extern const char kAXImageViewClassname[]; AX_EXPORT extern const char kAXListViewClassname[]; AX_EXPORT extern const char kAXMenuItemClassname[];
diff --git a/ui/accessibility/platform/ax_platform_node.cc b/ui/accessibility/platform/ax_platform_node.cc index 18bc0be2..f0f00d69b 100644 --- a/ui/accessibility/platform/ax_platform_node.cc +++ b/ui/accessibility/platform/ax_platform_node.cc
@@ -51,6 +51,11 @@ void AXPlatformNode::Destroy() { } +int32_t AXPlatformNode::GetUniqueId() const { + DCHECK(GetDelegate()); // Must be called after Init() + return GetDelegate() ? GetDelegate()->GetUniqueId().Get() : -1; +} + // static void AXPlatformNode::AddAXModeObserver(AXModeObserver* observer) { ax_mode_observers_.Get().AddObserver(observer);
diff --git a/ui/accessibility/platform/ax_platform_node.h b/ui/accessibility/platform/ax_platform_node.h index ca12603..f2e7e7a0 100644 --- a/ui/accessibility/platform/ax_platform_node.h +++ b/ui/accessibility/platform/ax_platform_node.h
@@ -69,6 +69,9 @@ // Return this object's delegate. virtual AXPlatformNodeDelegate* GetDelegate() const = 0; + // Return the unique ID + int32_t GetUniqueId() const; + protected: AXPlatformNode(); virtual ~AXPlatformNode(); @@ -80,6 +83,8 @@ static base::LazyInstance<NativeWindowHandlerCallback>::Leaky native_window_handler_; + + DISALLOW_COPY_AND_ASSIGN(AXPlatformNode); }; } // namespace ui
diff --git a/ui/accessibility/platform/ax_platform_node_base.h b/ui/accessibility/platform/ax_platform_node_base.h index 1099e64..7a3a93f 100644 --- a/ui/accessibility/platform/ax_platform_node_base.h +++ b/ui/accessibility/platform/ax_platform_node_base.h
@@ -18,7 +18,7 @@ class AX_EXPORT AXPlatformNodeBase : public AXPlatformNode { public: - virtual void Init(AXPlatformNodeDelegate* delegate); + virtual void Init(AXPlatformNodeDelegate* delegate); // These are simple wrappers to our delegate. const AXNodeData& GetData() const;
diff --git a/ui/accessibility/platform/ax_platform_node_delegate.h b/ui/accessibility/platform/ax_platform_node_delegate.h index b3a0eca..704bc5e9 100644 --- a/ui/accessibility/platform/ax_platform_node_delegate.h +++ b/ui/accessibility/platform/ax_platform_node_delegate.h
@@ -9,6 +9,7 @@ #include "ui/accessibility/ax_enums.h" #include "ui/accessibility/ax_export.h" +#include "ui/accessibility/platform/ax_unique_id.h" #include "ui/gfx/geometry/vector2d.h" #include "ui/gfx/native_widget_types.h" @@ -96,6 +97,8 @@ virtual std::set<int32_t> GetReverseRelations(AXIntListAttribute attr, int32_t dst_id) = 0; + virtual const AXUniqueId& GetUniqueId() const = 0; + // // Events. //
diff --git a/ui/accessibility/platform/ax_platform_node_win.cc b/ui/accessibility/platform/ax_platform_node_win.cc index 721c1d8..05b390f 100644 --- a/ui/accessibility/platform/ax_platform_node_win.cc +++ b/ui/accessibility/platform/ax_platform_node_win.cc
@@ -26,7 +26,6 @@ #include "ui/accessibility/ax_tree_data.h" #include "ui/accessibility/platform/ax_platform_node_delegate.h" #include "ui/accessibility/platform/ax_platform_relation_win.h" -#include "ui/accessibility/platform/ax_platform_unique_id.h" #include "ui/base/win/atl_module.h" #include "ui/gfx/geometry/rect_conversions.h" @@ -244,15 +243,15 @@ // AXPlatformNodeWin // -AXPlatformNodeWin::AXPlatformNodeWin() - : unique_id_(GetNextAXPlatformNodeUniqueId()) { - g_unique_id_map.Get()[unique_id_] = this; -} +AXPlatformNodeWin::AXPlatformNodeWin() {} AXPlatformNodeWin::~AXPlatformNodeWin() { ClearOwnRelations(); - if (unique_id_) - g_unique_id_map.Get().erase(unique_id_); +} + +void AXPlatformNodeWin::Init(AXPlatformNodeDelegate* delegate) { + AXPlatformNodeBase::Init(delegate); + g_unique_id_map.Get()[GetUniqueId()] = this; } // static @@ -325,8 +324,7 @@ } void AXPlatformNodeWin::Destroy() { - g_unique_id_map.Get().erase(unique_id_); - unique_id_ = 0; + g_unique_id_map.Get().erase(GetUniqueId()); RemoveAlertTarget(); @@ -357,7 +355,7 @@ if (native_event < EVENT_MIN) return; - ::NotifyWinEvent(native_event, hwnd, OBJID_CLIENT, -unique_id_); + ::NotifyWinEvent(native_event, hwnd, OBJID_CLIENT, -GetUniqueId()); // Keep track of objects that are a target of an alert event. if (event_type == AX_EVENT_ALERT) @@ -932,10 +930,10 @@ return S_OK; } -STDMETHODIMP AXPlatformNodeWin::get_uniqueID(LONG* unique_id) { +STDMETHODIMP AXPlatformNodeWin::get_uniqueID(LONG* id) { WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_UNIQUE_ID); - COM_OBJECT_VALIDATE_1_ARG(unique_id); - *unique_id = -unique_id_; + COM_OBJECT_VALIDATE_1_ARG(id); + *id = -GetUniqueId(); return S_OK; } @@ -3266,7 +3264,7 @@ hypertext += child->GetString16Attribute(ui::AX_ATTR_NAME); } else { int32_t char_offset = static_cast<int32_t>(hypertext.size()); - int32_t child_unique_id = child->unique_id(); + int32_t child_unique_id = child->GetUniqueId(); int32_t index = static_cast<int32_t>(result.hyperlinks.size()); result.hyperlink_offset_to_index[char_offset] = index; result.hyperlinks.push_back(child_unique_id); @@ -3690,7 +3688,7 @@ return -1; auto iterator = std::find(hypertext_.hyperlinks.begin(), - hypertext_.hyperlinks.end(), child->unique_id()); + hypertext_.hyperlinks.end(), child->GetUniqueId()); if (iterator == hypertext_.hyperlinks.end()) return -1;
diff --git a/ui/accessibility/platform/ax_platform_node_win.h b/ui/accessibility/platform/ax_platform_node_win.h index 9238fa9..7b49fa9 100644 --- a/ui/accessibility/platform/ax_platform_node_win.h +++ b/ui/accessibility/platform/ax_platform_node_win.h
@@ -257,6 +257,8 @@ // Return the number of instances of AXPlatformNodeWin, for leak testing. static size_t GetInstanceCountForTesting(); + void Init(AXPlatformNodeDelegate* delegate) override; + // Represents a non-static text node in IAccessibleHypertext. This character // is embedded in the response to IAccessibleText::get_text, indicating the // position where a non-static text child object appears. @@ -265,7 +267,6 @@ // Clear any AXPlatformRelationWin nodes owned by this node. void ClearOwnRelations(); static AXPlatformNode* GetFromUniqueId(int32_t unique_id); - int32_t unique_id() const { return unique_id_; } // AXPlatformNode overrides. gfx::NativeViewAccessible GetNativeViewAccessible() override; @@ -707,8 +708,6 @@ TextBoundaryType IA2TextBoundaryToTextBoundary(IA2TextBoundaryType type); private: - int32_t unique_id_; - int MSAAEvent(AXEvent event); bool IsWebAreaForPresentationalIframe(); bool ShouldNodeHaveReadonlyStateByDefault(const AXNodeData& data) const;
diff --git a/ui/accessibility/platform/ax_platform_relation_win.cc b/ui/accessibility/platform/ax_platform_relation_win.cc index 8395ead..83480eb 100644 --- a/ui/accessibility/platform/ax_platform_relation_win.cc +++ b/ui/accessibility/platform/ax_platform_relation_win.cc
@@ -25,7 +25,7 @@ #include "ui/accessibility/ax_text_utils.h" #include "ui/accessibility/ax_tree_data.h" #include "ui/accessibility/platform/ax_platform_node_delegate.h" -#include "ui/accessibility/platform/ax_platform_unique_id.h" +#include "ui/accessibility/platform/ax_unique_id.h" #include "ui/base/win/atl_module.h" #include "ui/gfx/geometry/rect_conversions.h"
diff --git a/ui/accessibility/platform/ax_platform_unique_id.cc b/ui/accessibility/platform/ax_platform_unique_id.cc deleted file mode 100644 index ece23eb4..0000000 --- a/ui/accessibility/platform/ax_platform_unique_id.cc +++ /dev/null
@@ -1,20 +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 "ui/accessibility/platform/ax_platform_unique_id.h" - -namespace ui { - -int32_t GetNextAXPlatformNodeUniqueId() { - static int32_t next_unique_id = 1; - int32_t unique_id = next_unique_id; - if (next_unique_id == INT32_MAX) - next_unique_id = 1; - else - next_unique_id++; - - return unique_id; -} - -} // namespace ui
diff --git a/ui/accessibility/platform/ax_platform_unique_id.h b/ui/accessibility/platform/ax_platform_unique_id.h deleted file mode 100644 index 1525d60..0000000 --- a/ui/accessibility/platform/ax_platform_unique_id.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 UI_ACCESSIBILITY_PLATFORM_AX_PLATFORM_UNIQUE_ID_H_ -#define UI_ACCESSIBILITY_PLATFORM_AX_PLATFORM_UNIQUE_ID_H_ - -#include <stdint.h> - -#include "ui/accessibility/ax_export.h" - -namespace ui { - -// Each platform accessibility object has a unique id that's guaranteed to be a -// positive number. (It's stored in an int32_t as opposed to uint32_t because -// some platforms want to negate it, so we want to ensure the range is below the -// signed int max.) This can be used when the id has to be unique across -// multiple frames, since node ids are only unique within one tree. -int32_t AX_EXPORT GetNextAXPlatformNodeUniqueId(); - -} // namespace ui - -#endif // UI_ACCESSIBILITY_PLATFORM_AX_PLATFORM_UNIQUE_ID_H_
diff --git a/ui/accessibility/platform/ax_system_caret_win.cc b/ui/accessibility/platform/ax_system_caret_win.cc index 2b146bd..7547cd66 100644 --- a/ui/accessibility/platform/ax_system_caret_win.cc +++ b/ui/accessibility/platform/ax_system_caret_win.cc
@@ -9,7 +9,6 @@ #include "base/logging.h" #include "ui/accessibility/ax_enums.h" #include "ui/accessibility/platform/ax_platform_node_win.h" -#include "ui/accessibility/platform/ax_platform_unique_id.h" #include "ui/gfx/geometry/rect_conversions.h" #include "ui/gfx/geometry/rect_f.h" @@ -31,14 +30,14 @@ if (event_target_) { ::NotifyWinEvent(EVENT_OBJECT_CREATE, event_target_, OBJID_CARET, - -caret_->unique_id()); + -caret_->GetUniqueId()); } } AXSystemCaretWin::~AXSystemCaretWin() { if (event_target_) { ::NotifyWinEvent(EVENT_OBJECT_DESTROY, event_target_, OBJID_CARET, - -caret_->unique_id()); + -caret_->GetUniqueId()); } caret_->Destroy(); } @@ -58,7 +57,7 @@ data_.location = gfx::RectF(bounds); if (event_target_) { ::NotifyWinEvent(EVENT_OBJECT_LOCATIONCHANGE, event_target_, OBJID_CARET, - -caret_->unique_id()); + -caret_->GetUniqueId()); } } @@ -144,4 +143,8 @@ return std::set<int32_t>(); } +const ui::AXUniqueId& AXSystemCaretWin::GetUniqueId() const { + return unique_id_; +} + } // namespace ui
diff --git a/ui/accessibility/platform/ax_system_caret_win.h b/ui/accessibility/platform/ax_system_caret_win.h index 02c2eb2d..6a4ec96 100644 --- a/ui/accessibility/platform/ax_system_caret_win.h +++ b/ui/accessibility/platform/ax_system_caret_win.h
@@ -49,6 +49,7 @@ bool AccessibilityPerformAction(const AXActionData& data) override; bool ShouldIgnoreHoveredStateForTesting() override; bool IsOffscreen() const override; + const ui::AXUniqueId& GetUniqueId() const override; std::set<int32_t> GetReverseRelations(AXIntAttribute attr, int32_t dst_id) override; std::set<int32_t> GetReverseRelations(AXIntListAttribute attr, @@ -60,6 +61,9 @@ friend class AXPlatformNodeWin; DISALLOW_COPY_AND_ASSIGN(AXSystemCaretWin); + + private: + ui::AXUniqueId unique_id_; }; } // namespace ui
diff --git a/ui/accessibility/platform/ax_unique_id.cc b/ui/accessibility/platform/ax_unique_id.cc new file mode 100644 index 0000000..645d3f40 --- /dev/null +++ b/ui/accessibility/platform/ax_unique_id.cc
@@ -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. + +#include <memory> +#include <unordered_set> + +#include "base/lazy_instance.h" +#include "ui/accessibility/platform/ax_unique_id.h" + +namespace ui { + +namespace { + +base::LazyInstance<std::unordered_set<int32_t>>::Leaky g_assigned_ids = + LAZY_INSTANCE_INITIALIZER; + +} // namespace + +AXUniqueId::AXUniqueId(const int32_t max_id) : id_(GetNextAXUniqueId(max_id)) {} + +AXUniqueId::~AXUniqueId() { + g_assigned_ids.Get().erase(id_); +} + +bool AXUniqueId::operator==(const AXUniqueId& other) const { + return Get() == other.Get(); +} + +bool AXUniqueId::operator!=(const AXUniqueId& other) const { + return !(*this == other); +} + +bool AXUniqueId::IsAssigned(int32_t id) const { + auto id_map = g_assigned_ids.Get(); + return id_map.find(id) != id_map.end(); +} + +int32_t AXUniqueId::GetNextAXUniqueId(const int32_t max_id) { + static int32_t current_id = 0; + static bool has_wrapped = false; + + const int32_t prev_id = current_id; + + while (true) { + if (current_id == max_id) { + current_id = 1; + has_wrapped = true; + } else { + current_id++; + } + if (current_id == prev_id) + LOG(FATAL) << "Over 2 billion active ids, something is wrong."; + if (!has_wrapped || !IsAssigned(current_id)) + break; + } + + g_assigned_ids.Get().insert(current_id); + + return current_id; +} + +} // namespace ui
diff --git a/ui/accessibility/platform/ax_unique_id.h b/ui/accessibility/platform/ax_unique_id.h new file mode 100644 index 0000000..f0c20fcb --- /dev/null +++ b/ui/accessibility/platform/ax_unique_id.h
@@ -0,0 +1,51 @@ +// 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_ACCESSIBILITY_PLATFORM_AX_UNIQUE_ID_H_ +#define UI_ACCESSIBILITY_PLATFORM_AX_UNIQUE_ID_H_ + +#include <stdint.h> + +#include "base/macros.h" +#include "ui/accessibility/ax_export.h" + +namespace ui { + +// AXUniqueID provides IDs for accessibility objects that are guaranteed to be +// unique for the entire Chrome instance. Instantiating the class is all that +// is required to generate the ID, and the ID is freed when the AXUniqueID is +// destroyed. +// +// The unique id that's guaranteed to be a positive number. Becase some +// platforms want to negate it, we ensure the range is below the signed int max. +// +// These ids must not be conflated with the int id, that comes with web node +// data, which are only unique within their source frame. +class AX_EXPORT AXUniqueId { + public: + AXUniqueId() : AXUniqueId(INT32_MAX) {} + ~AXUniqueId(); + + int32_t Get() const { return id_; } + + bool operator==(const AXUniqueId& other) const; + bool operator!=(const AXUniqueId& other) const; + + protected: + // Passing the max id is necessary for testing. + explicit AXUniqueId(const int32_t max_id); + + private: + int32_t GetNextAXUniqueId(const int32_t max_id); + + bool IsAssigned(int32_t) const; + + int32_t id_; + + DISALLOW_COPY_AND_ASSIGN(AXUniqueId); +}; + +} // namespace ui + +#endif // UI_ACCESSIBILITY_PLATFORM_AX_UNIQUE_ID_H_
diff --git a/ui/accessibility/platform/ax_unique_id_unittest.cc b/ui/accessibility/platform/ax_unique_id_unittest.cc new file mode 100644 index 0000000..0d7fda8 --- /dev/null +++ b/ui/accessibility/platform/ax_unique_id_unittest.cc
@@ -0,0 +1,67 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ui/accessibility/platform/ax_unique_id.h" + +#include "testing/gtest/include/gtest/gtest.h" + +namespace ui { + +class AXPlatformUniqueIdTest : public testing::Test { + public: + AXPlatformUniqueIdTest() {} + ~AXPlatformUniqueIdTest() override {} + + void SetUp() override {} + + void TearDown() override {} +}; + +TEST_F(AXPlatformUniqueIdTest, TestIdsUnique) { + AXUniqueId id1, id2; + EXPECT_FALSE(id1 == id2); + EXPECT_GT(id2.Get(), id1.Get()); +} + +static const int32_t kMaxId = 100; + +class AXTestSmallBankUniqueId : public AXUniqueId { + public: + AXTestSmallBankUniqueId(); + + friend class AXUniqueId; +}; + +AXTestSmallBankUniqueId::AXTestSmallBankUniqueId() : AXUniqueId(kMaxId) {} + +TEST_F(AXPlatformUniqueIdTest, TestIdsNotReused) { + // Create a bank of ids that uses up all available ids. + // Then remove an id and replace with a new one. Since it's the only + // slot available, the id will end up having the same value, rather than + // starting over at 1. + AXTestSmallBankUniqueId* ids[kMaxId]; + + for (int i = 0; i < kMaxId; i++) { + ids[i] = new AXTestSmallBankUniqueId(); + } + + static int kIdToReplace = 10; + + // IDs are 1-based. + EXPECT_EQ(ids[kIdToReplace]->Get(), kIdToReplace + 1); + + // Delete one of the ids and replace with a new one. + delete ids[kIdToReplace]; + ids[kIdToReplace] = new AXTestSmallBankUniqueId(); + + // IDs are 1-based. + EXPECT_EQ(ids[kIdToReplace]->Get(), kIdToReplace + 1); + + // Clean up. + for (int i = 0; i < kMaxId; i++) { + delete ids[i]; + } +} + +} // namespace ui
diff --git a/ui/accessibility/platform/test_ax_node_wrapper.cc b/ui/accessibility/platform/test_ax_node_wrapper.cc index 762bf30f..045e04c 100644 --- a/ui/accessibility/platform/test_ax_node_wrapper.cc +++ b/ui/accessibility/platform/test_ax_node_wrapper.cc
@@ -241,6 +241,10 @@ return tree_->GetReverseRelations(attr, dst_id); } +const ui::AXUniqueId& TestAXNodeWrapper::GetUniqueId() const { + return unique_id_; +} + TestAXNodeWrapper::TestAXNodeWrapper(AXTree* tree, AXNode* node) : tree_(tree), node_(node),
diff --git a/ui/accessibility/platform/test_ax_node_wrapper.h b/ui/accessibility/platform/test_ax_node_wrapper.h index 5b4496d..4327748 100644 --- a/ui/accessibility/platform/test_ax_node_wrapper.h +++ b/ui/accessibility/platform/test_ax_node_wrapper.h
@@ -46,6 +46,7 @@ bool AccessibilityPerformAction(const AXActionData& data) override; bool ShouldIgnoreHoveredStateForTesting() override; bool IsOffscreen() const override; + const ui::AXUniqueId& GetUniqueId() const override; std::set<int32_t> GetReverseRelations(AXIntAttribute attr, int32_t dst_id) override; std::set<int32_t> GetReverseRelations(AXIntListAttribute attr, @@ -61,6 +62,7 @@ AXTree* tree_; AXNode* node_; + ui::AXUniqueId unique_id_; AXPlatformNode* platform_node_; };
diff --git a/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java b/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java index 66fd214..5168846 100644 --- a/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java +++ b/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java
@@ -584,7 +584,8 @@ * the object has not been previously initialized. * @return A pointer to the c++ AndroidWindow. */ - public long getNativePointer() { + @CalledByNative + private long getNativePointer() { if (mNativeWindowAndroid == 0) { mNativeWindowAndroid = nativeInit(mDisplayAndroid.getDisplayId()); nativeSetVSyncPaused(mNativeWindowAndroid, mVSyncPaused);
diff --git a/ui/android/window_android.cc b/ui/android/window_android.cc index 4d24aac0..2520b391 100644 --- a/ui/android/window_android.cc +++ b/ui/android/window_android.cc
@@ -115,6 +115,16 @@ obs.OnBeginFrameSourcePausedChanged(paused_); } +// static +WindowAndroid* WindowAndroid::FromJavaWindowAndroid( + const JavaParamRef<jobject>& jwindow_android) { + if (jwindow_android.is_null()) + return nullptr; + + return reinterpret_cast<WindowAndroid*>(Java_WindowAndroid_getNativePointer( + AttachCurrentThread(), jwindow_android)); +} + WindowAndroid::WindowAndroid(JNIEnv* env, jobject obj, int display_id) : display_id_(display_id), compositor_(NULL),
diff --git a/ui/android/window_android.h b/ui/android/window_android.h index eebe200..35d3b7a 100644 --- a/ui/android/window_android.h +++ b/ui/android/window_android.h
@@ -38,6 +38,9 @@ // WindowAndroid is also the root of a ViewAndroid tree. class UI_ANDROID_EXPORT WindowAndroid : public ViewAndroid { public: + static WindowAndroid* FromJavaWindowAndroid( + const base::android::JavaParamRef<jobject>& jwindow_android); + WindowAndroid(JNIEnv* env, jobject obj, int display_id); ~WindowAndroid() override;
diff --git a/ui/app_list/views/search_result_answer_card_view.cc b/ui/app_list/views/search_result_answer_card_view.cc index 1d97f5b..584d788 100644 --- a/ui/app_list/views/search_result_answer_card_view.cc +++ b/ui/app_list/views/search_result_answer_card_view.cc
@@ -18,13 +18,6 @@ namespace app_list { -namespace { - -constexpr int kVerticalPadding = 11; -constexpr int kHorizontalPadding = 16; - -} // namespace - // Container of the search answer view. class SearchResultAnswerCardView::SearchAnswerContainerView : public views::Button, @@ -34,10 +27,10 @@ explicit SearchAnswerContainerView(AppListViewDelegate* view_delegate) : Button(this), view_delegate_(view_delegate) { SetFocusBehavior(FocusBehavior::ALWAYS); - // Center the card horizontally in the container. - auto answer_container_layout = std::make_unique<views::BoxLayout>( - views::BoxLayout::kHorizontal, - gfx::Insets(kVerticalPadding, kHorizontalPadding)); + // Center the card horizontally in the container. Padding is set on the + // server. + auto answer_container_layout = + std::make_unique<views::BoxLayout>(views::BoxLayout::kHorizontal); answer_container_layout->set_main_axis_alignment( views::BoxLayout::MAIN_AXIS_ALIGNMENT_START); SetLayoutManager(std::move(answer_container_layout));
diff --git a/ui/base/ui_base_switches.cc b/ui/base/ui_base_switches.cc index ceb931cd..f8596bf3 100644 --- a/ui/base/ui_base_switches.cc +++ b/ui/base/ui_base_switches.cc
@@ -50,13 +50,6 @@ // be switched to high contrast, not other system colors. const char kForceHighContrast[] = "force-high-contrast"; -// TODO(dcastagna): Draw debug quad borders only when it is actually -// an overlay candidate. -// Renders a border around GL composited overlay candidate quads to -// help debug and study overlay support. -const char kGlCompositedOverlayCandidateQuadBorder[] = - "gl-composited-overlay-candidate-quad-border"; - // The language file that we want to try to open. Of the form // language[-country] where language is the 2 letter code from ISO-639. const char kLang[] = "lang";
diff --git a/ui/base/ui_base_switches.h b/ui/base/ui_base_switches.h index c64df72..4a0be9a 100644 --- a/ui/base/ui_base_switches.h +++ b/ui/base/ui_base_switches.h
@@ -34,7 +34,6 @@ UI_BASE_EXPORT extern const char kEnableDrawOcclusion[]; UI_BASE_EXPORT extern const char kEnableTouchDragDrop[]; UI_BASE_EXPORT extern const char kForceHighContrast[]; -UI_BASE_EXPORT extern const char kGlCompositedOverlayCandidateQuadBorder[]; UI_BASE_EXPORT extern const char kLang[]; UI_BASE_EXPORT extern const char kMaterialDesignInkDropAnimationSpeed[]; UI_BASE_EXPORT extern const char kMaterialDesignInkDropAnimationSpeedFast[];
diff --git a/ui/gfx/canvas_skia.cc b/ui/gfx/canvas_skia.cc index eef23dce..db850e7b 100644 --- a/ui/gfx/canvas_skia.cc +++ b/ui/gfx/canvas_skia.cc
@@ -43,7 +43,8 @@ Range* range) { const base::char16 start_char = (range->IsValid() ? text->at(range->start()) : 0); - *text = ElideText(*text, font_list, width, ELIDE_TAIL); + *text = + ElideText(*text, font_list, width, ELIDE_TAIL, gfx::Typesetter::HARFBUZZ); if (!range->IsValid()) return; if (range->start() >= text->length() || @@ -118,8 +119,8 @@ Rect rect(base::saturated_cast<int>(*width), INT_MAX); // Note the following DCHECK can be removed when this codepath no longer - // uses CreateInstanceDeprecated(), which always uses PLATFORM. - DCHECK_EQ(Typesetter::PLATFORM, typesetter); + // uses CreateInstanceDeprecated(), which always uses BROWSER. + DCHECK_EQ(Typesetter::BROWSER, typesetter); // This needs to match the instance used in ElideRectangleText. auto render_text = RenderText::CreateInstanceDeprecated(); @@ -167,15 +168,10 @@ Rect rect(text_bounds); - auto render_text = gfx::RenderText::CreateInstanceDeprecated(); + // Since we're drawing into a canvas anyway, just use Harfbuzz on Mac. + auto render_text = gfx::RenderText::CreateHarfBuzzInstance(); if (flags & MULTI_LINE) { -#if defined(OS_MACOSX) - // Currently not supported on Mac. ElideRectangleText() is not yet aware - // that the typesetting below is not being done by CoreText. - // See http://crbug.com/791391. - NOTREACHED(); -#endif WordWrapBehavior wrap_behavior = IGNORE_LONG_WORDS; if (flags & CHARACTER_BREAK) wrap_behavior = WRAP_LONG_WORDS;
diff --git a/ui/gfx/render_text.cc b/ui/gfx/render_text.cc index 4cc85ab..b5f58764e 100644 --- a/ui/gfx/render_text.cc +++ b/ui/gfx/render_text.cc
@@ -345,7 +345,7 @@ // static std::unique_ptr<RenderText> RenderText::CreateFor(Typesetter typesetter) { #if defined(OS_MACOSX) - if (typesetter == Typesetter::TOOLTIPS) + if (typesetter == Typesetter::NATIVE) return std::make_unique<RenderTextMac>(); if (typesetter == Typesetter::HARFBUZZ) @@ -362,7 +362,7 @@ // static std::unique_ptr<RenderText> RenderText::CreateInstanceDeprecated() { - return CreateFor(Typesetter::PLATFORM); + return CreateFor(Typesetter::BROWSER); } std::unique_ptr<RenderText> RenderText::CreateInstanceOfSameStyle(
diff --git a/ui/gfx/render_text.h b/ui/gfx/render_text.h index 62d623f..0b8b82a 100644 --- a/ui/gfx/render_text.h +++ b/ui/gfx/render_text.h
@@ -199,7 +199,7 @@ // which is the only supported native typesetter. static std::unique_ptr<RenderText> CreateFor(Typesetter typesetter); - // Returns CreateFor(Typesetter::PLATFORM), but indicates a caller that does + // Returns CreateFor(Typesetter::BROWSER), but indicates a caller that does // not know whether the text will eventually be drawn by the native typesetter // or by a RenderText instance. // TODO(tapted): Delete this.
diff --git a/ui/gfx/render_text_unittest.cc b/ui/gfx/render_text_unittest.cc index 9577d7b..ea11f54 100644 --- a/ui/gfx/render_text_unittest.cc +++ b/ui/gfx/render_text_unittest.cc
@@ -4343,7 +4343,8 @@ } { SCOPED_TRACE("TextDoesntClip Left Side"); -#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS) +#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || \ + defined(ARCH_CPU_MIPS_FAMILY) // TODO(dschuyler): On Windows, Chrome OS, and Mac smoothing draws to the // left of text. This appears to be a preexisting issue that wasn't // revealed by the prior unit tests. RenderText currently only uses @@ -4358,7 +4359,8 @@ } { SCOPED_TRACE("TextDoesntClip Right Side"); -#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS) +#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || \ + defined(ARCH_CPU_MIPS_FAMILY) // TODO(dschuyler): On Windows, Chrome OS, and Mac smoothing draws to the // right of text. This appears to be a preexisting issue that wasn't // revealed by the prior unit tests. RenderText currently only uses
diff --git a/ui/gfx/text_constants.h b/ui/gfx/text_constants.h index 33ae4585..cca269b5 100644 --- a/ui/gfx/text_constants.h +++ b/ui/gfx/text_constants.h
@@ -118,16 +118,22 @@ // influence things like string width in subtle ways and is necessary to help // transition Mac to the Harfbuzz typesetter (http://crbug.com/454835). enum class Typesetter { - PLATFORM, // The platform typesetter is the one used by UI parts of the - // browser window on this platform. - HARFBUZZ, // The Harfbuzz typesetter is typically used for secondary UI. - TOOLTIPS, // The typesetter used for tooltips. Typically always native. + // The typesetter that is used by UI parts of the browser window on this + // platform. + BROWSER, + + // The Harfbuzz typesetter, which is typically used for secondary UI. + HARFBUZZ, + + // The typesetter used for native UI such as tooltips, native menus and system + // notifications. + NATIVE, // The typesetter used for function default arguments. The default can be used // from locations that are unaffected by the Mac Harfbuzz transition. Once all - // callers rendering to Cocoa UI have been updated to PLATFORM, this will + // callers rendering to Cocoa UI have been updated to BROWSER, this will // switch to HARFBUZZ. - DEFAULT = PLATFORM + DEFAULT = BROWSER }; } // namespace gfx
diff --git a/ui/gfx/text_elider.cc b/ui/gfx/text_elider.cc index 1a7d3a27..4b7ee798f 100644 --- a/ui/gfx/text_elider.cc +++ b/ui/gfx/text_elider.cc
@@ -50,8 +50,9 @@ // width, the elided domain will occupy that extra width. base::string16 ElideEmail(const base::string16& email, const FontList& font_list, - float available_pixel_width) { - if (GetStringWidthF(email, font_list) <= available_pixel_width) + float available_pixel_width, + Typesetter typesetter) { + if (GetStringWidthF(email, font_list, typesetter) <= available_pixel_width) return email; // Split the email into its local-part (username) and domain-part. The email @@ -66,17 +67,18 @@ // Subtract the @ symbol from the available width as it is mandatory. const base::string16 kAtSignUTF16 = ASCIIToUTF16("@"); - available_pixel_width -= GetStringWidthF(kAtSignUTF16, font_list); + available_pixel_width -= GetStringWidthF(kAtSignUTF16, font_list, typesetter); // Check whether eliding the domain is necessary: if eliding the username // is sufficient, the domain will not be elided. - const float full_username_width = GetStringWidthF(username, font_list); + const float full_username_width = + GetStringWidthF(username, font_list, typesetter); const float available_domain_width = available_pixel_width - std::min(full_username_width, GetStringWidthF(username.substr(0, 1) + kEllipsisUTF16, font_list)); - if (GetStringWidthF(domain, font_list) > available_domain_width) { + if (GetStringWidthF(domain, font_list, typesetter) > available_domain_width) { // Elide the domain so that it only takes half of the available width. // Should the username not need all the width available in its half, the // domain will occupy the leftover width. @@ -87,7 +89,8 @@ std::min(available_domain_width, std::max(available_pixel_width - full_username_width, available_pixel_width / 2)); - domain = ElideText(domain, font_list, desired_domain_width, ELIDE_MIDDLE); + domain = ElideText(domain, font_list, desired_domain_width, ELIDE_MIDDLE, + typesetter); // Failing to elide the domain such that at least one character remains // (other than the ellipsis itself) remains: return a single ellipsis. if (domain.length() <= 1U) @@ -97,8 +100,9 @@ // Fit the username in the remaining width (at this point the elided username // is guaranteed to fit with at least one character remaining given all the // precautions taken earlier). - available_pixel_width -= GetStringWidthF(domain, font_list); - username = ElideText(username, font_list, available_pixel_width, ELIDE_TAIL); + available_pixel_width -= GetStringWidthF(domain, font_list, typesetter); + username = ElideText(username, font_list, available_pixel_width, ELIDE_TAIL, + typesetter); return username + kAtSignUTF16 + domain; } #endif @@ -223,7 +227,7 @@ return text; } if (behavior == ELIDE_EMAIL) - return ElideEmail(text, font_list, available_pixel_width); + return ElideEmail(text, font_list, available_pixel_width, typesetter); const bool elide_in_middle = (behavior == ELIDE_MIDDLE); const bool elide_at_beginning = (behavior == ELIDE_HEAD); @@ -468,16 +472,32 @@ // can be broken into smaller methods sharing this state. class RectangleText { public: + static int Elide(const base::string16& input, + const FontList& font_list, + float available_pixel_width, + int available_pixel_height, + WordWrapBehavior wrap_behavior, + Typesetter typesetter, + std::vector<base::string16>* lines) { + RectangleText rect(font_list, available_pixel_width, available_pixel_height, + wrap_behavior, typesetter, lines); + rect.Init(); + rect.AddString(input); + return rect.Finalize(); + } + RectangleText(const FontList& font_list, float available_pixel_width, int available_pixel_height, WordWrapBehavior wrap_behavior, + Typesetter typesetter, std::vector<base::string16>* lines) : font_list_(font_list), line_height_(font_list.GetHeight()), available_pixel_width_(available_pixel_width), available_pixel_height_(available_pixel_height), wrap_behavior_(wrap_behavior), + typesetter_(typesetter), current_width_(0), current_height_(0), last_line_ended_in_lf_(false), @@ -541,6 +561,9 @@ // The wrap behavior for words that are too long to fit on a single line. const WordWrapBehavior wrap_behavior_; + // The typesetter that is rendering the text. + const Typesetter typesetter_; + // The current running width. float current_width_; @@ -641,8 +664,8 @@ int lines_added = 0; bool first_fragment = true; while (!insufficient_height_ && !text.empty()) { - base::string16 fragment = - ElideText(text, font_list_, available_pixel_width_, TRUNCATE); + base::string16 fragment = ElideText( + text, font_list_, available_pixel_width_, TRUNCATE, typesetter_); // At least one character has to be added at every line, even if the // available space is too small. if (fragment.empty()) @@ -674,8 +697,8 @@ } else { const ElideBehavior elide_behavior = (wrap_behavior_ == ELIDE_LONG_WORDS ? ELIDE_TAIL : TRUNCATE); - const base::string16 elided_word = - ElideText(word, font_list_, available_pixel_width_, elide_behavior); + const base::string16 elided_word = ElideText( + word, font_list_, available_pixel_width_, elide_behavior, typesetter_); AddToCurrentLine(elided_word); insufficient_width_ = true; } @@ -746,16 +769,24 @@ int available_pixel_height, WordWrapBehavior wrap_behavior, std::vector<base::string16>* lines) { - RectangleText rect(font_list, - available_pixel_width, - available_pixel_height, - wrap_behavior, - lines); - rect.Init(); - rect.AddString(input); - return rect.Finalize(); + return RectangleText::Elide(input, font_list, available_pixel_width, + available_pixel_height, wrap_behavior, + Typesetter::HARFBUZZ, lines); } +#if defined(OS_MACOSX) +int ElideRectangleTextForNativeUi(const base::string16& input, + const FontList& font_list, + float available_pixel_width, + int available_pixel_height, + WordWrapBehavior wrap_behavior, + std::vector<base::string16>* lines) { + return RectangleText::Elide(input, font_list, available_pixel_width, + available_pixel_height, wrap_behavior, + Typesetter::NATIVE, lines); +} +#endif + base::string16 TruncateString(const base::string16& string, size_t length, BreakType break_type) {
diff --git a/ui/gfx/text_elider.h b/ui/gfx/text_elider.h index 245c111..9d6408a3 100644 --- a/ui/gfx/text_elider.h +++ b/ui/gfx/text_elider.h
@@ -14,6 +14,7 @@ #include "base/macros.h" #include "base/strings/string16.h" +#include "build/build_config.h" #include "ui/gfx/gfx_export.h" #include "ui/gfx/text_constants.h" @@ -139,6 +140,17 @@ WordWrapBehavior wrap_behavior, std::vector<base::string16>* lines); +#if defined(OS_MACOSX) +// As above, but uses the native platform typesetter (CoreText on Mac). +GFX_EXPORT int ElideRectangleTextForNativeUi( + const base::string16& input, + const FontList& font_list, + float available_pixel_width, + int available_pixel_height, + WordWrapBehavior wrap_behavior, + std::vector<base::string16>* lines); +#endif // OS_MACOSX + // Truncates |string| to |length| characters. This breaks the string according // to the specified |break_type|, which must be either WORD_BREAK or // CHARACTER_BREAK, and adds the horizontal ellipsis character (unicode
diff --git a/ui/gfx/text_elider_unittest.cc b/ui/gfx/text_elider_unittest.cc index 50fbe8e..d4f09af7 100644 --- a/ui/gfx/text_elider_unittest.cc +++ b/ui/gfx/text_elider_unittest.cc
@@ -693,7 +693,8 @@ } // TODO(crbug.com/338784): Enable this on android. -#if defined(OS_ANDROID) +// Disabled on Mac: fails on 10.11. http://crbug.com/801029 +#if defined(OS_ANDROID) || defined(OS_MACOSX) #define MAYBE_ElideRectangleTextPunctuation \ DISABLED_ElideRectangleTextPunctuation #else @@ -741,7 +742,8 @@ } // TODO(crbug.com/338784): Enable this on android. -#if defined(OS_ANDROID) +// Disabled on Mac: fails on 10.11. http://crbug.com/801029 +#if defined(OS_ANDROID) || defined(OS_MACOSX) #define MAYBE_ElideRectangleTextLongWords DISABLED_ElideRectangleTextLongWords #else #define MAYBE_ElideRectangleTextLongWords ElideRectangleTextLongWords
diff --git a/ui/message_center/cocoa/notification_controller.mm b/ui/message_center/cocoa/notification_controller.mm index 1b9ff3e6..61e9c0e6 100644 --- a/ui/message_center/cocoa/notification_controller.mm +++ b/ui/message_center/cocoa/notification_controller.mm
@@ -454,9 +454,9 @@ base::string16 message; if (notification->UseOriginAsContextMessage()) { gfx::FontList font_list((gfx::Font([message_ font]))); - message = - url_formatter::ElideHost(notification->origin_url(), font_list, - message_center::kContextMessageViewWidth); + message = url_formatter::ElideHost(notification->origin_url(), font_list, + message_center::kContextMessageViewWidth, + gfx::Typesetter::NATIVE); } else { message = notification->context_message(); } @@ -957,8 +957,8 @@ int height = (lines + 1) * font_list.GetHeight(); std::vector<base::string16> wrapped; - gfx::ElideRectangleText(text, font_list, width, height, - gfx::WRAP_LONG_WORDS, &wrapped); + gfx::ElideRectangleTextForNativeUi(text, font_list, width, height, + gfx::WRAP_LONG_WORDS, &wrapped); // This could be possible when the input text contains only spaces. if (wrapped.empty()) @@ -969,8 +969,10 @@ // too wide, that line will be further elided by the gfx::ElideText below. base::string16 last = wrapped[lines - 1] + base::UTF8ToUTF16(gfx::kEllipsis); - if (gfx::GetStringWidth(last, font_list) > width) - last = gfx::ElideText(last, font_list, width, gfx::ELIDE_TAIL); + if (gfx::GetStringWidth(last, font_list, gfx::Typesetter::NATIVE) > width) { + last = gfx::ElideText(last, font_list, width, gfx::ELIDE_TAIL, + gfx::Typesetter::NATIVE); + } wrapped.resize(lines - 1); wrapped.push_back(last); }
diff --git a/ui/ozone/platform/drm/DEPS b/ui/ozone/platform/drm/DEPS index 84ae2eb..7d49ef1 100644 --- a/ui/ozone/platform/drm/DEPS +++ b/ui/ozone/platform/drm/DEPS
@@ -2,6 +2,7 @@ "+mojo/public", "+services/service_manager", "+services/ui", + "+ui/base/ui_base_switches.h", "+ui/base/ui_features.h", # UI features doesn't bring in all of ui/base. "+ui/display/util", ]
diff --git a/ui/ozone/platform/drm/host/drm_gpu_platform_support_host.cc b/ui/ozone/platform/drm/host/drm_gpu_platform_support_host.cc index 077ac6d..c8267a2 100644 --- a/ui/ozone/platform/drm/host/drm_gpu_platform_support_host.cc +++ b/ui/ozone/platform/drm/host/drm_gpu_platform_support_host.cc
@@ -6,7 +6,10 @@ #include <stddef.h> +#include "base/command_line.h" +#include "base/threading/thread_task_runner_handle.h" #include "base/trace_event/trace_event.h" +#include "ui/base/ui_base_switches.h" #include "ui/ozone/common/gpu/ozone_gpu_message_params.h" #include "ui/ozone/common/gpu/ozone_gpu_messages.h" #include "ui/ozone/platform/drm/common/drm_util.h" @@ -83,7 +86,17 @@ } // namespace DrmGpuPlatformSupportHost::DrmGpuPlatformSupportHost(DrmCursor* cursor) - : cursor_(cursor), weak_ptr_factory_(this) {} + : ui_runner_(base::ThreadTaskRunnerHandle::IsSet() + ? base::ThreadTaskRunnerHandle::Get() + : nullptr), + cursor_(cursor), + weak_ptr_factory_(this) { + if (ui_runner_) { + weak_ptr_ = weak_ptr_factory_.GetWeakPtr(); + } else { + DCHECK(!base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kMus)); + } +} DrmGpuPlatformSupportHost::~DrmGpuPlatformSupportHost() {} @@ -109,8 +122,12 @@ scoped_refptr<base::SingleThreadTaskRunner> ui_runner, scoped_refptr<base::SingleThreadTaskRunner> send_runner, const base::Callback<void(IPC::Message*)>& send_callback) { - DCHECK(!ui_runner->BelongsToCurrentThread()); - ui_runner_ = std::move(ui_runner); + // If there was a task runner set during construction, prefer using that. + if (!ui_runner_) { + ui_runner_ = std::move(ui_runner); + weak_ptr_ = weak_ptr_factory_.GetWeakPtr(); + } + DCHECK(!ui_runner_->BelongsToCurrentThread()); TRACE_EVENT1("drm", "DrmGpuPlatformSupportHost::OnGpuProcessLaunched", "host_id", host_id); host_id_ = host_id; @@ -121,8 +138,9 @@ observer.OnGpuProcessLaunched(); ui_runner_->PostTask( - FROM_HERE, base::Bind(&DrmGpuPlatformSupportHost::OnChannelEstablished, - weak_ptr_factory_.GetWeakPtr())); + FROM_HERE, + base::BindOnce(&DrmGpuPlatformSupportHost::OnChannelEstablished, + weak_ptr_)); } void DrmGpuPlatformSupportHost::OnChannelDestroyed(int host_id) { @@ -141,13 +159,17 @@ } -bool DrmGpuPlatformSupportHost::OnMessageReceived(const IPC::Message& message) { - if (OnMessageReceivedForDrmDisplayHostManager(message)) - return true; - if (OnMessageReceivedForDrmOverlayManager(message)) - return true; - - return false; +void DrmGpuPlatformSupportHost::OnMessageReceived(const IPC::Message& message) { + DCHECK(ui_runner_); + if (ui_runner_->BelongsToCurrentThread()) { + if (OnMessageReceivedForDrmDisplayHostManager(message)) + return; + OnMessageReceivedForDrmOverlayManager(message); + } else { + ui_runner_->PostTask( + FROM_HERE, base::BindOnce(&DrmGpuPlatformSupportHost::OnMessageReceived, + weak_ptr_, message)); + } } bool DrmGpuPlatformSupportHost::Send(IPC::Message* message) {
diff --git a/ui/ozone/platform/drm/host/drm_gpu_platform_support_host.h b/ui/ozone/platform/drm/host/drm_gpu_platform_support_host.h index 826e09d..1de15ce 100644 --- a/ui/ozone/platform/drm/host/drm_gpu_platform_support_host.h +++ b/ui/ozone/platform/drm/host/drm_gpu_platform_support_host.h
@@ -42,8 +42,7 @@ const base::Callback<void(IPC::Message*)>& send_callback) override; void OnChannelDestroyed(int host_id) override; - // IPC::Listener: - bool OnMessageReceived(const IPC::Message& message) override; + void OnMessageReceived(const IPC::Message& message) override; // IPC::Sender: bool Send(IPC::Message* message) override; @@ -126,6 +125,7 @@ DrmCursor* cursor_; // Not owned. base::ObserverList<GpuThreadObserver> gpu_thread_observers_; + base::WeakPtr<DrmGpuPlatformSupportHost> weak_ptr_; base::WeakPtrFactory<DrmGpuPlatformSupportHost> weak_ptr_factory_; DISALLOW_COPY_AND_ASSIGN(DrmGpuPlatformSupportHost); };
diff --git a/ui/ozone/platform/drm/host/drm_overlay_manager.cc b/ui/ozone/platform/drm/host/drm_overlay_manager.cc index 109d4481..dc0f75a1 100644 --- a/ui/ozone/platform/drm/host/drm_overlay_manager.cc +++ b/ui/ozone/platform/drm/host/drm_overlay_manager.cc
@@ -77,6 +77,7 @@ } size_t size = candidates->size(); + base::AutoLock lock(cache_lock_); auto iter = cache_.Get(result_candidates); if (iter == cache_.end()) { // We can skip GPU side validation in case all candidates are invalid. @@ -114,6 +115,7 @@ } void DrmOverlayManager::ResetCache() { + base::AutoLock lock(cache_lock_); cache_.Clear(); } @@ -142,6 +144,7 @@ TRACE_EVENT_ASYNC_END0( "hwoverlays", "DrmOverlayManager::SendOverlayValidationRequest response", this); + base::AutoLock lock(cache_lock_); auto iter = cache_.Peek(candidates); if (iter != cache_.end()) { iter->second.status = returns;
diff --git a/ui/ozone/platform/drm/host/drm_overlay_manager.h b/ui/ozone/platform/drm/host/drm_overlay_manager.h index c1915d5..03b5e661 100644 --- a/ui/ozone/platform/drm/host/drm_overlay_manager.h +++ b/ui/ozone/platform/drm/host/drm_overlay_manager.h
@@ -11,6 +11,7 @@ #include "base/containers/mru_cache.h" #include "base/macros.h" +#include "base/synchronization/lock.h" #include "ui/ozone/platform/drm/host/gpu_thread_adapter.h" #include "ui/ozone/public/overlay_candidates_ozone.h" #include "ui/ozone/public/overlay_manager_ozone.h" @@ -69,6 +70,12 @@ // for validation and/or validated. base::MRUCache<OverlaySurfaceCandidateList, OverlayValidationCacheValue> cache_; + // The cache can be accessed from multiple threads in some cases (e.g. with + // --mus, it can be accessed from the UI thread, and the window-service + // thread.) + // TODO(rjkroege): In the future (with --enable-viz), this code will not need + // the lock, but will require farther refactoring. + base::Lock cache_lock_; DISALLOW_COPY_AND_ASSIGN(DrmOverlayManager); };
diff --git a/ui/ozone/public/gpu_platform_support_host.cc b/ui/ozone/public/gpu_platform_support_host.cc index a79c7b6..98a23b1 100644 --- a/ui/ozone/public/gpu_platform_support_host.cc +++ b/ui/ozone/public/gpu_platform_support_host.cc
@@ -22,7 +22,7 @@ const base::Callback<void(IPC::Message*)>& send_callback) override {} void OnChannelDestroyed(int host_id) override {} - bool OnMessageReceived(const IPC::Message&) override { return false; } + void OnMessageReceived(const IPC::Message&) override {} }; } // namespace
diff --git a/ui/ozone/public/gpu_platform_support_host.h b/ui/ozone/public/gpu_platform_support_host.h index 3fad964..50db642 100644 --- a/ui/ozone/public/gpu_platform_support_host.h +++ b/ui/ozone/public/gpu_platform_support_host.h
@@ -22,10 +22,10 @@ // Under X11, we don't need any GPU messages for display configuration. // That's why there's no real functionality here: it's purely mechanism // to support additional messages needed by specific platforms. -class OZONE_BASE_EXPORT GpuPlatformSupportHost : public IPC::Listener { +class OZONE_BASE_EXPORT GpuPlatformSupportHost { public: GpuPlatformSupportHost(); - ~GpuPlatformSupportHost() override; + virtual ~GpuPlatformSupportHost(); // Called when the GPU process is spun up. // This is called from browser IO thread. @@ -38,6 +38,10 @@ // Called when the GPU process is destroyed. // This is called from browser UI thread. virtual void OnChannelDestroyed(int host_id) = 0; + + // Called to handle an IPC message. Note that this can be called from any + // thread. + virtual void OnMessageReceived(const IPC::Message& message) = 0; }; // create a stub implementation.
diff --git a/ui/resources/default_100_percent/common/notification_advanced_settings.png b/ui/resources/default_100_percent/common/notification_advanced_settings.png deleted file mode 100644 index 4f1c488a..0000000 --- a/ui/resources/default_100_percent/common/notification_advanced_settings.png +++ /dev/null Binary files differ
diff --git a/ui/resources/default_100_percent/common/notification_advanced_settings_hover.png b/ui/resources/default_100_percent/common/notification_advanced_settings_hover.png deleted file mode 100644 index ace418c..0000000 --- a/ui/resources/default_100_percent/common/notification_advanced_settings_hover.png +++ /dev/null Binary files differ
diff --git a/ui/resources/default_100_percent/common/notification_advanced_settings_pressed.png b/ui/resources/default_100_percent/common/notification_advanced_settings_pressed.png deleted file mode 100644 index 6cd5bab0..0000000 --- a/ui/resources/default_100_percent/common/notification_advanced_settings_pressed.png +++ /dev/null Binary files differ
diff --git a/ui/resources/default_200_percent/common/notification_advanced_settings.png b/ui/resources/default_200_percent/common/notification_advanced_settings.png deleted file mode 100644 index 5c56729..0000000 --- a/ui/resources/default_200_percent/common/notification_advanced_settings.png +++ /dev/null Binary files differ
diff --git a/ui/resources/default_200_percent/common/notification_advanced_settings_hover.png b/ui/resources/default_200_percent/common/notification_advanced_settings_hover.png deleted file mode 100644 index d368076..0000000 --- a/ui/resources/default_200_percent/common/notification_advanced_settings_hover.png +++ /dev/null Binary files differ
diff --git a/ui/resources/default_200_percent/common/notification_advanced_settings_pressed.png b/ui/resources/default_200_percent/common/notification_advanced_settings_pressed.png deleted file mode 100644 index 260b800..0000000 --- a/ui/resources/default_200_percent/common/notification_advanced_settings_pressed.png +++ /dev/null Binary files differ
diff --git a/ui/resources/ui_resources.grd b/ui/resources/ui_resources.grd index 88e3eeb..708caaf 100644 --- a/ui/resources/ui_resources.grd +++ b/ui/resources/ui_resources.grd
@@ -119,9 +119,6 @@ </if> <structure type="chrome_scaled_image" name="IDR_MENU_DROPARROW" file="cros/menu_droparrow.png" /> <if expr="toolkit_views or is_macosx or is_ios"> - <structure type="chrome_scaled_image" name="IDR_NOTIFICATION_ADVANCED_SETTINGS" file="common/notification_advanced_settings.png"/> - <structure type="chrome_scaled_image" name="IDR_NOTIFICATION_ADVANCED_SETTINGS_HOVER" file="common/notification_advanced_settings_hover.png"/> - <structure type="chrome_scaled_image" name="IDR_NOTIFICATION_ADVANCED_SETTINGS_PRESSED" file="common/notification_advanced_settings_pressed.png"/> <if expr="is_win"> <structure type="chrome_scaled_image" name="IDR_NOTIFICATION_CLOSE" file="win/notification_close.png"/> <structure type="chrome_scaled_image" name="IDR_NOTIFICATION_CLOSE_HOVER" file="win/notification_close_hover.png"/>
diff --git a/ui/views/accessibility/ax_aura_obj_cache.cc b/ui/views/accessibility/ax_aura_obj_cache.cc index 22e14648..1372dd2 100644 --- a/ui/views/accessibility/ax_aura_obj_cache.cc +++ b/ui/views/accessibility/ax_aura_obj_cache.cc
@@ -205,9 +205,9 @@ return Get(it->second); AXAuraObjWrapper* wrapper = new AuraViewWrapper(aura_view); - aura_view_to_id_map[aura_view] = current_id_; - cache_[current_id_] = base::WrapUnique(wrapper); - current_id_++; + int32_t id = wrapper->GetUniqueId().Get(); + aura_view_to_id_map[aura_view] = id; + cache_[id] = base::WrapUnique(wrapper); return wrapper; }
diff --git a/ui/views/accessibility/ax_aura_obj_cache.h b/ui/views/accessibility/ax_aura_obj_cache.h index bb40bc59..69958c3 100644 --- a/ui/views/accessibility/ax_aura_obj_cache.h +++ b/ui/views/accessibility/ax_aura_obj_cache.h
@@ -53,10 +53,6 @@ int32_t GetID(Widget* widget) const; int32_t GetID(aura::Window* window) const; - // Gets the next unique id for this cache. Useful for non-Aura view backed - // views. - int32_t GetNextID() { return current_id_++; } - // Removes an entry from this cache based on an Aura view. void Remove(View* view); void Remove(Widget* widget); @@ -128,7 +124,6 @@ std::map<aura::Window*, int32_t> window_to_id_map_; std::map<int32_t, std::unique_ptr<AXAuraObjWrapper>> cache_; - int32_t current_id_ = 1; // True immediately when entering this object's destructor. bool is_destroying_ = false;
diff --git a/ui/views/accessibility/ax_aura_obj_wrapper.h b/ui/views/accessibility/ax_aura_obj_wrapper.h index 5101edd..74ffaac 100644 --- a/ui/views/accessibility/ax_aura_obj_wrapper.h +++ b/ui/views/accessibility/ax_aura_obj_wrapper.h
@@ -17,6 +17,7 @@ namespace ui { struct AXActionData; struct AXNodeData; +class AXUniqueId; } // namespace ui namespace views { @@ -32,7 +33,7 @@ virtual void GetChildren( std::vector<AXAuraObjWrapper*>* out_children) = 0; virtual void Serialize(ui::AXNodeData* out_node_data) = 0; - virtual int32_t GetID() = 0; + virtual const ui::AXUniqueId& GetUniqueId() const = 0; // Actions. virtual bool HandleAccessibleAction(const ui::AXActionData& action);
diff --git a/ui/views/accessibility/ax_view_obj_wrapper.cc b/ui/views/accessibility/ax_view_obj_wrapper.cc index f27df73..2c0cb81 100644 --- a/ui/views/accessibility/ax_view_obj_wrapper.cc +++ b/ui/views/accessibility/ax_view_obj_wrapper.cc
@@ -48,11 +48,11 @@ void AXViewObjWrapper::Serialize(ui::AXNodeData* out_node_data) { view_->GetViewAccessibility().GetAccessibleNodeData(out_node_data); - out_node_data->id = GetID(); + out_node_data->id = GetUniqueId().Get(); } -int32_t AXViewObjWrapper::GetID() { - return AXAuraObjCache::GetInstance()->GetID(view_); +const ui::AXUniqueId& AXViewObjWrapper::GetUniqueId() const { + return view_->GetViewAccessibility().GetUniqueId(); } bool AXViewObjWrapper::HandleAccessibleAction(const ui::AXActionData& action) {
diff --git a/ui/views/accessibility/ax_view_obj_wrapper.h b/ui/views/accessibility/ax_view_obj_wrapper.h index c42bdf5..c14058a 100644 --- a/ui/views/accessibility/ax_view_obj_wrapper.h +++ b/ui/views/accessibility/ax_view_obj_wrapper.h
@@ -25,7 +25,7 @@ AXAuraObjWrapper* GetParent() override; void GetChildren(std::vector<AXAuraObjWrapper*>* out_children) override; void Serialize(ui::AXNodeData* out_node_data) override; - int32_t GetID() override; + const ui::AXUniqueId& GetUniqueId() const final; bool HandleAccessibleAction(const ui::AXActionData& action) override; private:
diff --git a/ui/views/accessibility/ax_widget_obj_wrapper.cc b/ui/views/accessibility/ax_widget_obj_wrapper.cc index 2d96f8c..bfb5725 100644 --- a/ui/views/accessibility/ax_widget_obj_wrapper.cc +++ b/ui/views/accessibility/ax_widget_obj_wrapper.cc
@@ -8,6 +8,7 @@ #include "ui/accessibility/ax_node_data.h" #include "ui/views/accessibility/ax_aura_obj_cache.h" #include "ui/views/accessibility/ax_aura_obj_wrapper.h" +#include "ui/views/accessibility/view_accessibility.h" #include "ui/views/widget/widget.h" #include "ui/views/widget/widget_delegate.h" @@ -42,7 +43,7 @@ } void AXWidgetObjWrapper::Serialize(ui::AXNodeData* out_node_data) { - out_node_data->id = GetID(); + out_node_data->id = GetUniqueId().Get(); out_node_data->role = widget_->widget_delegate()->GetAccessibleWindowRole(); out_node_data->AddStringAttribute( ui::AX_ATTR_NAME, @@ -52,8 +53,8 @@ out_node_data->state = 0; } -int32_t AXWidgetObjWrapper::GetID() { - return AXAuraObjCache::GetInstance()->GetID(widget_); +const ui::AXUniqueId& AXWidgetObjWrapper::GetUniqueId() const { + return unique_id_; } void AXWidgetObjWrapper::OnWidgetDestroying(Widget* widget) {
diff --git a/ui/views/accessibility/ax_widget_obj_wrapper.h b/ui/views/accessibility/ax_widget_obj_wrapper.h index 88512cd..6cc11bc 100644 --- a/ui/views/accessibility/ax_widget_obj_wrapper.h +++ b/ui/views/accessibility/ax_widget_obj_wrapper.h
@@ -8,6 +8,7 @@ #include <stdint.h> #include "base/macros.h" +#include "ui/accessibility/platform/ax_unique_id.h" #include "ui/views/accessibility/ax_aura_obj_wrapper.h" #include "ui/views/widget/widget_observer.h" #include "ui/views/widget/widget_removals_observer.h" @@ -27,7 +28,7 @@ AXAuraObjWrapper* GetParent() override; void GetChildren(std::vector<AXAuraObjWrapper*>* out_children) override; void Serialize(ui::AXNodeData* out_node_data) override; - int32_t GetID() override; + const ui::AXUniqueId& GetUniqueId() const final; // WidgetObserver overrides. void OnWidgetDestroying(Widget* widget) override; @@ -40,6 +41,8 @@ private: Widget* widget_; + const ui::AXUniqueId unique_id_; + DISALLOW_COPY_AND_ASSIGN(AXWidgetObjWrapper); };
diff --git a/ui/views/accessibility/ax_window_obj_wrapper.cc b/ui/views/accessibility/ax_window_obj_wrapper.cc index 422a209..ab604049 100644 --- a/ui/views/accessibility/ax_window_obj_wrapper.cc +++ b/ui/views/accessibility/ax_window_obj_wrapper.cc
@@ -10,6 +10,7 @@ #include "ui/accessibility/ax_enums.h" #include "ui/accessibility/ax_node_data.h" #include "ui/accessibility/platform/aura_window_properties.h" +#include "ui/accessibility/platform/ax_unique_id.h" #include "ui/aura/client/focus_client.h" #include "ui/aura/window.h" #include "ui/views/accessibility/ax_aura_obj_cache.h" @@ -57,7 +58,7 @@ } void AXWindowObjWrapper::Serialize(ui::AXNodeData* out_node_data) { - out_node_data->id = GetID(); + out_node_data->id = GetUniqueId().Get(); ui::AXRole role = window_->GetProperty(ui::kAXRoleOverride); if (role != ui::AX_ROLE_NONE) out_node_data->role = role; @@ -92,8 +93,8 @@ } } -int32_t AXWindowObjWrapper::GetID() { - return AXAuraObjCache::GetInstance()->GetID(window_); +const ui::AXUniqueId& AXWindowObjWrapper::GetUniqueId() const { + return unique_id_; } void AXWindowObjWrapper::OnWindowDestroyed(aura::Window* window) {
diff --git a/ui/views/accessibility/ax_window_obj_wrapper.h b/ui/views/accessibility/ax_window_obj_wrapper.h index 5707a43..a1f5834 100644 --- a/ui/views/accessibility/ax_window_obj_wrapper.h +++ b/ui/views/accessibility/ax_window_obj_wrapper.h
@@ -8,6 +8,7 @@ #include <stdint.h> #include "base/macros.h" +#include "ui/accessibility/platform/ax_unique_id.h" #include "ui/aura/window_observer.h" #include "ui/views/accessibility/ax_aura_obj_wrapper.h" @@ -34,7 +35,7 @@ AXAuraObjWrapper* GetParent() override; void GetChildren(std::vector<AXAuraObjWrapper*>* out_children) override; void Serialize(ui::AXNodeData* out_node_data) override; - int32_t GetID() override; + const ui::AXUniqueId& GetUniqueId() const final; // WindowObserver overrides. void OnWindowDestroyed(aura::Window* window) override; @@ -55,6 +56,8 @@ bool is_root_window_; + const ui::AXUniqueId unique_id_; + DISALLOW_COPY_AND_ASSIGN(AXWindowObjWrapper); };
diff --git a/ui/views/accessibility/native_view_accessibility_auralinux.cc b/ui/views/accessibility/native_view_accessibility_auralinux.cc index b9af136..7fbbca9 100644 --- a/ui/views/accessibility/native_view_accessibility_auralinux.cc +++ b/ui/views/accessibility/native_view_accessibility_auralinux.cc
@@ -60,6 +60,8 @@ return platform_node_->GetNativeViewAccessible(); } + const ui::AXUniqueId& GetUniqueId() const override { return unique_id_; } + // WidgetObserver: void OnWidgetDestroying(Widget* widget) override { @@ -159,6 +161,7 @@ ui::AXPlatformNode* platform_node_; ui::AXNodeData data_; + ui::AXUniqueId unique_id_; std::vector<Widget*> widgets_; DISALLOW_COPY_AND_ASSIGN(AuraLinuxApplication);
diff --git a/ui/views/accessibility/native_view_accessibility_base.cc b/ui/views/accessibility/native_view_accessibility_base.cc index f06a463a..d26a9ec 100644 --- a/ui/views/accessibility/native_view_accessibility_base.cc +++ b/ui/views/accessibility/native_view_accessibility_base.cc
@@ -250,6 +250,10 @@ return std::set<int32_t>(); } +const ui::AXUniqueId& NativeViewAccessibilityBase::GetUniqueId() const { + return ViewAccessibility::GetUniqueId(); +} + gfx::RectF NativeViewAccessibilityBase::GetBoundsInScreen() const { return gfx::RectF(view()->GetBoundsInScreen()); }
diff --git a/ui/views/accessibility/native_view_accessibility_base.h b/ui/views/accessibility/native_view_accessibility_base.h index d8c7400..413a3a3 100644 --- a/ui/views/accessibility/native_view_accessibility_base.h +++ b/ui/views/accessibility/native_view_accessibility_base.h
@@ -14,6 +14,7 @@ #include "ui/accessibility/ax_tree_data.h" #include "ui/accessibility/platform/ax_platform_node.h" #include "ui/accessibility/platform/ax_platform_node_delegate.h" +#include "ui/accessibility/platform/ax_unique_id.h" #include "ui/gfx/native_widget_types.h" #include "ui/views/accessibility/view_accessibility.h" #include "ui/views/views_export.h" @@ -33,7 +34,7 @@ public: ~NativeViewAccessibilityBase() override; - // NativeViewAccessibility: + // ViewAccessibility: gfx::NativeViewAccessible GetNativeObject() override; void NotifyAccessibilityEvent(ui::AXEvent event_type) override; @@ -53,6 +54,8 @@ bool AccessibilityPerformAction(const ui::AXActionData& data) override; bool ShouldIgnoreHoveredStateForTesting() override; bool IsOffscreen() const override; + const ui::AXUniqueId& GetUniqueId() + const override; // Also in ViewAccessibility std::set<int32_t> GetReverseRelations(ui::AXIntAttribute attr, int32_t dst_id) override; std::set<int32_t> GetReverseRelations(ui::AXIntListAttribute attr,
diff --git a/ui/views/accessibility/view_accessibility.cc b/ui/views/accessibility/view_accessibility.cc index b8bd1c975..577872c 100644 --- a/ui/views/accessibility/view_accessibility.cc +++ b/ui/views/accessibility/view_accessibility.cc
@@ -43,6 +43,10 @@ ViewAccessibility::~ViewAccessibility() {} +const ui::AXUniqueId& ViewAccessibility::GetUniqueId() const { + return unique_id_; +} + void ViewAccessibility::GetAccessibleNodeData(ui::AXNodeData* data) const { // Views may misbehave if their widget is closed; return an unknown role // rather than possibly crashing.
diff --git a/ui/views/accessibility/view_accessibility.h b/ui/views/accessibility/view_accessibility.h index e26b34f..b9c02c4f 100644 --- a/ui/views/accessibility/view_accessibility.h +++ b/ui/views/accessibility/view_accessibility.h
@@ -10,6 +10,7 @@ #include "base/macros.h" #include "ui/accessibility/ax_enums.h" #include "ui/accessibility/ax_node_data.h" +#include "ui/accessibility/platform/ax_unique_id.h" #include "ui/gfx/native_widget_types.h" #include "ui/views/views_export.h" @@ -49,6 +50,8 @@ virtual gfx::NativeViewAccessible GetNativeObject(); virtual void NotifyAccessibilityEvent(ui::AXEvent event_type) {} + virtual const ui::AXUniqueId& GetUniqueId() const; + protected: explicit ViewAccessibility(View* view); @@ -58,6 +61,8 @@ // Weak. Owns this. View* const owner_view_; + const ui::AXUniqueId unique_id_; + // Contains data set explicitly via SetRole, SetName, etc. that overrides // anything provided by GetAccessibleNodeData(). ui::AXNodeData custom_data_;
diff --git a/ui/views/controls/styled_label_unittest.cc b/ui/views/controls/styled_label_unittest.cc index ac867fb4..e722609 100644 --- a/ui/views/controls/styled_label_unittest.cc +++ b/ui/views/controls/styled_label_unittest.cc
@@ -143,13 +143,7 @@ static_cast<Label*>(styled()->child_at(1))->text()); } -// https://crbug.com/793184 -#if defined(OS_MACOSX) -#define MAYBE_CorrectWrapAtNewline DISABLED_CorrectWrapAtNewline -#else -#define MAYBE_CorrectWrapAtNewline CorrectWrapAtNewline -#endif -TEST_F(StyledLabelTest, MAYBE_CorrectWrapAtNewline) { +TEST_F(StyledLabelTest, CorrectWrapAtNewline) { const std::string first_line = "Line one"; const std::string second_line = " two"; const std::string multiline_text(first_line + "\n" + second_line); @@ -364,13 +358,7 @@ static_cast<Label*>(styled()->child_at(1))->font_list().GetFontStyle()); } -// https://crbug.com/793184 -#if defined(OS_MACOSX) -#define MAYBE_StyledRangeTextStyleBold DISABLED_StyledRangeTextStyleBold -#else -#define MAYBE_StyledRangeTextStyleBold StyledRangeTextStyleBold -#endif -TEST_F(StyledLabelTest, MAYBE_StyledRangeTextStyleBold) { +TEST_F(StyledLabelTest, StyledRangeTextStyleBold) { test::TestLayoutProvider bold_provider; const std::string bold_text( "This is a block of text whose style will be set to BOLD in the test"); @@ -560,14 +548,7 @@ EXPECT_EQ(ASCIIToUTF16("tooltip"), tooltip); } -// https://crbug.com/793184 -#if defined(OS_MACOSX) -#define MAYBE_SetTextContextAndDefaultStyle \ - DISABLED_SetTextContextAndDefaultStyle -#else -#define MAYBE_SetTextContextAndDefaultStyle SetTextContextAndDefaultStyle -#endif -TEST_F(StyledLabelTest, MAYBE_SetTextContextAndDefaultStyle) { +TEST_F(StyledLabelTest, SetTextContextAndDefaultStyle) { const std::string text("This is a test block of text."); InitStyledLabel(text); styled()->SetTextContext(style::CONTEXT_DIALOG_TITLE);
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc b/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc index 3a3822c..1bf5a5e 100644 --- a/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc +++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc
@@ -953,7 +953,8 @@ if (compositor()) { compositor()->SetScaleAndSize( compositor()->device_scale_factor(), - message_handler_->GetClientAreaBounds().size()); + message_handler_->GetClientAreaBounds().size(), + window()->GetLocalSurfaceId()); } } @@ -961,8 +962,8 @@ float window_scale_factor) { if (compositor()) { compositor()->SetScaleAndSize( - window_scale_factor, - message_handler_->GetClientAreaBounds().size()); + window_scale_factor, message_handler_->GetClientAreaBounds().size(), + window()->GetLocalSurfaceId()); } }
diff --git a/ui/webui/resources/cr_components/chromeos/network/network_config.js b/ui/webui/resources/cr_components/chromeos/network/network_config.js index f03c3606..0fbed6d 100644 --- a/ui/webui/resources/cr_components/chromeos/network/network_config.js +++ b/ui/webui/resources/cr_components/chromeos/network/network_config.js
@@ -766,6 +766,8 @@ } if (opt_create) return eap || {}; + if (eap) + eap.SaveCredentials = eap.SaveCredentials || false; return eap || null; }, @@ -1116,7 +1118,7 @@ * @private */ setEapProperties_: function(eap) { - eap.UseSystemCAs = this.selectedServerCaHash_ == DO_NOT_CHECK_HASH; + eap.UseSystemCAs = this.selectedServerCaHash_ == DEFAULT_HASH; eap.ServerCAPEMs = this.getServerCaPems_();